Skip to the content.

Configuration Guide

This guide explains every configuration option in /config/project.config.yaml - the ONLY file you need to edit to customize your Nodes Map.

After editing config: Configuration is loaded at server startup. Restart the web container to apply changes:

docker restart atlasp2p-web

Table of Contents

  1. Project Identity
  2. Chain Configuration
  3. Theme & Branding
  4. Content Configuration
  5. Map Configuration
  6. Feature Flags
  7. Asset Paths
  8. Environment Variables

Project Identity

projectName: Dingocoin Nodes Map
chain: dingocoin

projectName (string)

chain (string, lowercase)


Chain Configuration

chainConfig:
  name: Dingocoin
  ticker: DINGO
  p2pPort: 33117
  rpcPort: 22892
  protocolVersion: 70017
  currentVersion: "1.16.0"
  minimumVersion: "1.14.0"
  criticalVersion: "1.12.0"
  explorerUrl: https://explorer.dingocoin.org
  websiteUrl: https://dingocoin.org
  githubUrl: https://github.com/dingocoin/dingocoin

name (string)

ticker (string)

p2pPort (integer)

rpcPort (integer)

protocolVersion (integer)

currentVersion (string)

minimumVersion (string)

criticalVersion (string)

explorerUrl (string, URL)

websiteUrl (string, URL)

githubUrl (string, URL)

messagePrefix (string, optional)

addressPrefix (string, optional)

pubKeyHash (string, hex, optional)


Theme & Branding

themeConfig:
  name: Dingocoin Nodes Map
  primaryColor: "#ff8c00"
  secondaryColor: "#ffa500"
  accentColor: "#ffb347"
  logo: /logos/dingocoin.png
  favicon: /logos/dingocoin-favicon.ico

name (string)

primaryColor (string, hex color)

secondaryColor (string, hex color)

accentColor (string, hex color)

logo (string, path)

favicon (string, path)

Pro Tip: Use RealFaviconGenerator to create multi-platform favicons from your logo.

See Also: apps/web/public/logos/README.md for complete logo guidelines and template files.


Content Configuration

content:
  siteName: Dingocoin Nodes Map
  siteDescription: Real-time map and analytics for Dingocoin network nodes worldwide
  siteUrl: https://nodes.dingocoin.org

  navigation:
    - name: Map
      href: /
      icon: map
    - name: Statistics
      href: /stats
      icon: barchart
    - name: Leaderboard
      href: /leaderboard
      icon: trophy

  footerLinks:
    - label: API
      href: /api-docs
      external: false

  social:
    - name: GitHub
      href: https://github.com/dingocoin/dingocoin
      icon: github
    - name: Twitter
      href: https://twitter.com/ABoringDingo
      icon: twitter
    - name: Discord
      href: https://discord.gg/dingocoin
      icon: discord

  copyrightText: Open source project
  githubRepoUrl: https://github.com/RaxTzu/AtlasP2P

siteName (string)

siteDescription (string)

siteUrl (string, URL)

Navigation menu items in the header

Object structure:

- name: Map              # Display text
  href: /               # URL path or full URL
  icon: map             # Icon identifier
  external: false       # Optional: opens in new tab

Available icons:

Middle section links in footer

Object structure:

- label: API            # Link text
  href: /api-docs       # URL
  external: false       # Optional: true for external links

social (array of objects)

Social media icons in footer

Object structure:

- name: GitHub          # Display name (tooltip)
  href: https://...     # Social media URL
  icon: github          # Icon identifier

Available social icons:

copyrightText (string)

githubRepoUrl (string, URL)


Admin & Notification Configuration

adminConfig:
  # Admin emails for alerts and notifications (array)
  adminEmails:
    - admin@example.com
    - devops@example.com

  # Semantic Colors
  semanticColors:
    success: "#22c55e"
    warning: "#f59e0b"
    error: "#ef4444"
    info: "#3b82f6"

  # Email Configuration
  email:
    provider: resend
    fromEmail: noreply@example.com
    fromName: Node Map
    alertsFromEmail: alerts@example.com
    alertsFromName: Node Map Alerts
    autoConfirm: false
    verificationRequired: true
    otp:
      expiryMinutes: 10
      maxResendAttempts: 3
      resendCooldownSeconds: 60

  # Alert thresholds
  alerts:
    enabled: false
    nodeCountDropPercent: 20
    healthScoreThreshold: 70
    alertCooldownHours: 24

adminEmails (array of strings)

semanticColors (object)

Standardized colors for UI states across the application.

Purpose: Ensures consistent color usage for status indicators, alerts, and feedback.

semanticColors.success (string, hex color)

semanticColors.warning (string, hex color)

semanticColors.error (string, hex color)

semanticColors.info (string, hex color)

Best Practices:

Email Configuration

IMPORTANT: Two Separate Email Systems

AtlasP2P uses two independent email systems for different purposes:

  1. GoTrue Auth Emails (.env configuration)
    • Purpose: Authentication-related emails (signup, password reset, email verification)
    • Configured in: .env file using SMTP settings
    • Email service: Uses SMTP relay (Resend, SendGrid, or custom SMTP)
    • ENV variables: SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS
    • Example: Resend SMTP (smtp.resend.com:587)
    • Note: GoTrue is a pre-built Supabase service that only reads ENV vars
  2. Application Custom Emails (project.config.yaml configuration)
    • Purpose: Custom application emails (alerts, notifications, node updates)
    • Configured in: config/project.config.yaml (adminConfig.email.provider)
    • Email service: Can use HTTP API (Resend, SendGrid) or SMTP
    • ENV variables: RESEND_API_KEY, SENDGRID_API_KEY, or SMTP settings
    • Example: Resend API for faster, feature-rich emails
    • Note: These emails are sent by your application code

Both can use the SAME provider (e.g., both use Resend), but through different interfaces (SMTP relay vs HTTP API).


email.provider (string)

email.fromEmail (string, email)

email.fromName (string)

email.alertsFromEmail (string, email, optional)

email.alertsFromName (string, optional)

email.autoConfirm (boolean)

email.verificationRequired (boolean)

email.otp.expiryMinutes (integer)

email.otp.maxResendAttempts (integer)

email.otp.resendCooldownSeconds (integer)

Alert Configuration

alerts.enabled (boolean)

alerts.nodeCountDropPercent (integer)

alerts.healthScoreThreshold (integer)

alerts.alertCooldownHours (integer)


Map Configuration

mapConfig:
  defaultCenter: [20, 0]
  defaultZoom: 2
  minZoom: 2
  maxZoom: 18
  tileProvider: openstreetmap
  clusterRadius: 80
  clusterMaxZoom: 14

  tileStyles:
    - id: dingocoin
      name: Dingocoin (Themed)
      url: https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png
      attribution: "© OpenStreetMap contributors"
      maxZoom: 20
      subdomains: [a, b, c, d]

  defaultTileStyle: dingocoin

defaultCenter (array: [latitude, longitude])

defaultZoom (integer)

minZoom (integer)

maxZoom (integer)

tileProvider (string)

clusterRadius (integer)

clusterMaxZoom (integer)

tileStyles (array of objects)

Custom map tile layers for the style switcher

Object structure:

- id: unique-id         # Unique identifier (lowercase, no spaces)
  name: Display Name    # Name shown in switcher
  url: https://...      # Tile server URL pattern
  attribution: "..."    # Copyright/attribution HTML
  maxZoom: 20          # Max zoom for this tileset
  subdomains: [a,b,c]  # Optional: tile server subdomains

URL patterns:

Popular tile providers:

CARTO (Free, recommended):

# Light theme
url: https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png

# Dark theme
url: https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png

# Voyager (colorful)
url: https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png

OpenStreetMap (Free):

url: https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png

Stadia Maps (Requires API key):

url: https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png

defaultTileStyle (string)


Feature Flags

Control which features are enabled/disabled in your deployment.

features:
  map:
    enabled: true
    clustering: true
    heatmap: false
    liveUpdates: true

  stats:
    enabled: true
    versionChart: true
    countryChart: true
    healthScore: true

  filters:
    byCountry: true
    byVersion: true
    byTier: true
    byStatus: true
    search: true

  nodes:
    categories: true
    rankings: true
    uptimeTracking: true
    historicalData: true

  verification:
    enabled: true
    messageSign: true
    userAgent: true
    portChallenge: false
    dnsTxt: false

  tipping:
    enabled: true
    tracking: false

  community:
    nodeSubmission: false
    leaderboard: true
    badges: true

  ui:
    darkMode: true
    themeSwitcher: true

Map Features

Stats Features

Filter Features

Node Features

Verification Features

Tipping Features

Community Features

UI Features


Asset Paths

assets:
  logoPath: /logos/dingocoin.png
  faviconPath: /logos/dingocoin-favicon.ico
  ogImagePath: /logos/dingocoin-og.png

logoPath (string, path)

faviconPath (string, path)

ogImagePath (string, path)

What is OG Image? When someone shares your nodes map on social media, this image appears in the preview card. Make it eye-catching!


Environment Variables

While most configuration is in YAML, some sensitive values must remain in environment variables.

Required .env.local Variables

# Docker Compose Configuration
COMPOSE_PROJECT_NAME=atlasp2p  # Controls container/image naming

# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

# MaxMind GeoIP (for crawler)
MAXMIND_ACCOUNT_ID=your-account-id
MAXMIND_LICENSE_KEY=your-license-key

# Optional: Crawler Configuration
CRAWLER_INTERVAL_MINUTES=5
MAX_CONCURRENT_CONNECTIONS=100
CONNECTION_TIMEOUT_SECONDS=10

Why These Aren’t in YAML


Quick Reference: What Goes Where

Type File Purpose
Public config project.config.yaml Branding, features, public settings
Secrets .env.local API keys, database credentials
Assets /apps/web/public/logos/ Logos, favicons, images
Business logic Code files Tier thresholds, PIX formula

Examples

See /config/examples/ for complete configuration examples:


Validation

Your configuration is validated at build time. Common errors:

Invalid color format: Use hex colors like #ff8c00Missing required fields: All fields shown above are required ❌ Invalid icon names: Must use icons from the available list ❌ Invalid URLs: Must start with http:// or https://Mismatched defaultTileStyle: Must match a tileStyle id

Tip: Run pnpm build to validate your configuration before deploying


Need Help?