Implement Phase 1 infrastructure from master orchestration plan. This commit delivers production-ready deployment infrastructure, comprehensive documentation, and workflow automation. **Cloudflare DNS Infrastructure:** - Add records.yaml with complete DNS config for all domains - Add migrate_to_cloudflare.md with step-by-step migration guide - Add cloudflare_dns_sync.py for automated DNS synchronization - Update CLOUDFLARE_DNS_BLUEPRINT.md with implementation references **Environment Variable Documentation:** - Add ENV_VARS.md with comprehensive variable reference - Document all services: Railway, GitHub Actions, Cloudflare, local - Include security best practices and validation scripts - Add troubleshooting guides and quick-start templates **GitHub Actions Workflows:** - Add railway-deploy-template.yml for Railway deployments - Add frontend-deploy-template.yml for static site deployments - Add codeql-analysis-template.yml for security scanning - Add comprehensive-ci-template.yml for complete CI pipeline - Add .github/dependabot.yml for automated dependency updates **Frontend Infrastructure:** - Add infra/frontend/LANDING_PAGE_PLAN.md with detailed implementation plan - Include page structure, design system, content guidelines - Document deployment options (GitHub Pages, Railway, Cloudflare Pages) **Master Orchestration Updates:** - Update MASTER_ORCHESTRATION_PLAN.md with implementation file references - Add Phase 1 implementation checklist - Document immediate, short-term, and medium-term next steps **Impact:** This implementation enables: - Automated DNS management across 10+ domains - Secure, documented deployment workflows - Consistent environment configuration - Automated security scanning and dependency updates - Clear path to production for landing page **Next Steps for Operator:** 1. Migrate DNS to Cloudflare using migrate_to_cloudflare.md 2. Configure GitHub and Railway secrets 3. Deploy backend with custom domains 4. Implement landing page using LANDING_PAGE_PLAN.md Refs: #55 (Master Orchestration Prompt)
16 KiB
Cloudflare DNS Blueprint
Complete DNS Configuration for BlackRoad Universe
Version: 1.0 Date: 2025-11-18 Purpose: Canonical DNS configuration for all BlackRoad domains via Cloudflare
Overview
This document provides the complete DNS setup for migrating all BlackRoad domains from GoDaddy DNS to Cloudflare DNS.
Why Cloudflare?
- Free tier includes: DNS, SSL, CDN, DDoS protection, Web Analytics
- Global anycast network (faster DNS resolution)
- CNAME flattening (allows root domain CNAMEs to Railway)
- Better security (WAF, rate limiting available)
- Future-ready for Workers, Zero Trust, edge functions
Migration Process
Step 1: Add Domain to Cloudflare
For each domain:
- Log in to Cloudflare dashboard
- Click "Add a site"
- Enter domain (e.g.,
blackroad.systems) - Select Free plan
- Cloudflare auto-scans existing DNS records from GoDaddy
- Review scanned records, make adjustments (see configurations below)
- Cloudflare provides 2 nameservers (e.g.,
aaaa.ns.cloudflare.com,bbbb.ns.cloudflare.com)
Step 2: Update Nameservers at GoDaddy
For each domain:
- Log in to GoDaddy
- Go to My Domains → select domain → Manage DNS
- Scroll to Nameservers section
- Click Change → Select Custom
- Enter Cloudflare nameservers (from Step 1)
- Click Save
- Wait 5-60 minutes for DNS propagation
Step 3: Verify & Configure SSL
- Return to Cloudflare dashboard
- Wait for status to change from "Pending" to "Active"
- Go to SSL/TLS → Set encryption mode to "Full (strict)"
- Go to SSL/TLS → Edge Certificates → Enable "Always Use HTTPS"
- Enable "Automatic HTTPS Rewrites"
- Enable "HTTP Strict Transport Security (HSTS)" (optional, but recommended)
Step 4: Optimize Performance
- Go to Speed → Optimization
- Enable Auto Minify (HTML, CSS, JS)
- Enable Brotli compression
- Enable Rocket Loader (optional - test first)
- Go to Caching → Set Browser Cache TTL to "Respect Existing Headers"
DNS Records Configuration
Domain: blackroad.systems
Purpose: Flagship corporate site + OS application
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | blackroad-os-production.up.railway.app |
Auto | ✅ Proxied | Root domain → Railway (CNAME flattening) |
| CNAME | www | blackroad.systems |
Auto | ✅ Proxied | www redirects to apex |
| CNAME | os | blackroad.systems |
Auto | ✅ Proxied | Alternative OS alias |
| CNAME | api | blackroad-os-production.up.railway.app |
Auto | ✅ Proxied | Explicit API subdomain |
| CNAME | prism | blackroad-os-production.up.railway.app |
Auto | ✅ Proxied | Prism Console subdomain |
| CNAME | docs | blackboxprogramming.github.io |
Auto | ✅ Proxied | GitHub Pages for docs |
| CNAME | cdn | blackroad.systems |
Auto | ✅ Proxied | CDN alias (for future asset delivery) |
| TXT | @ | v=spf1 include:_spf.google.com ~all |
Auto | - | SPF record (if using Google Workspace) |
| MX | @ | 1 aspmx.l.google.com |
Auto | - | Gmail MX (priority 1) |
| MX | @ | 5 alt1.aspmx.l.google.com |
Auto | - | Gmail MX (priority 5) |
| MX | @ | 5 alt2.aspmx.l.google.com |
Auto | - | Gmail MX (priority 5) |
Page Rules (Optional):
www.blackroad.systems/*→ Forwarding URL (301) →https://blackroad.systems/$1
Domain: blackroad.ai
Purpose: Product console, admin interface
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | os.blackroad.systems |
Auto | ✅ Proxied | Alias to main OS |
| CNAME | www | blackroad.ai |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | console | os.blackroad.systems |
Auto | ✅ Proxied | Explicit console subdomain |
Page Rules:
www.blackroad.ai/*→ Forwarding URL (301) →https://blackroad.ai/$1
Domain: blackroad.network
Purpose: Developer hub, documentation, community
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | blackboxprogramming.github.io |
Auto | ✅ Proxied | GitHub Pages for docs |
| CNAME | www | blackroad.network |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | api | blackroad-os-production.up.railway.app |
Auto | ✅ Proxied | API access for developers |
| CNAME | sandbox | blackroad-os-staging.up.railway.app |
Auto | ✅ Proxied | Staging/sandbox environment |
CNAME File (for GitHub Pages):
Create file CNAME in your docs/ or GitHub Pages root:
blackroad.network
Page Rules:
www.blackroad.network/*→ Forwarding URL (301) →https://blackroad.network/$1
Domain: blackroad.me
Purpose: Personal identity portal, Pocket OS
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | os.blackroad.systems |
Auto | ✅ Proxied | Identity portal via main OS |
| CNAME | www | blackroad.me |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | id | os.blackroad.systems |
Auto | ✅ Proxied | Explicit identity subdomain |
Domain: lucidia.earth
Purpose: Narrative experiences, interactive storytelling (Phase 2)
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | blackboxprogramming.github.io |
Auto | ✅ Proxied | GitHub Pages (Phase 2) |
| CNAME | www | lucidia.earth |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | studio | lucidia-studio.vercel.app |
Auto | ✅ Proxied | Lucidia Studio (Phase 3) |
CNAME File (for GitHub Pages):
lucidia.earth
Domain: aliceqi.com
Purpose: ALICE QI research showcase (Phase 2)
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | blackboxprogramming.github.io |
Auto | ✅ Proxied | GitHub Pages |
| CNAME | www | aliceqi.com |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | research | aliceqi.com |
Auto | ✅ Proxied | Research portal |
| CNAME | docs | aliceqi.com |
Auto | ✅ Proxied | Technical documentation |
Domain: blackroadqi.com
Purpose: Financial/quantitative intelligence product (Phase 2)
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | blackroadqi-app.up.railway.app |
Auto | ✅ Proxied | Dedicated QI app (Phase 2) |
| CNAME | www | blackroadqi.com |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | api | blackroadqi-api.up.railway.app |
Auto | ✅ Proxied | QI API endpoint |
Domain: roadwallet.com
Purpose: Wallet interface (alias to OS)
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | os.blackroad.systems |
Auto | ✅ Proxied | Alias to main OS wallet |
| CNAME | www | roadwallet.com |
Auto | ✅ Proxied | www → apex redirect |
Domain: aliceos.io
Purpose: Legacy alias (points to main OS)
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | os.blackroad.systems |
Auto | ✅ Proxied | Legacy domain |
| CNAME | www | aliceos.io |
Auto | ✅ Proxied | www → apex redirect |
Domain: blackroadquantum.com
Purpose: Quantum research hub (Phase 2)
| Type | Name | Target | TTL | Proxy | Notes |
|---|---|---|---|---|---|
| CNAME | @ | blackboxprogramming.github.io |
Auto | ✅ Proxied | GitHub Pages |
| CNAME | www | blackroadquantum.com |
Auto | ✅ Proxied | www → apex redirect |
| CNAME | lab | quantum-lab.up.railway.app |
Auto | ✅ Proxied | Quantum Lab app (Phase 2) |
Advanced Configuration
SSL/TLS Settings
For all domains:
-
Encryption Mode: Full (strict)
- Cloudflare ↔ Railway: encrypted with valid cert
-
Edge Certificates:
- ✅ Always Use HTTPS
- ✅ Automatic HTTPS Rewrites
- ✅ Certificate Transparency Monitoring
- ✅ TLS 1.3 (enabled by default)
-
HSTS (HTTP Strict Transport Security):
- ✅ Enable HSTS
- Max Age: 6 months (15768000 seconds)
- ✅ Include subdomains
- ❌ Preload (wait until stable, then enable)
Caching Rules
Static Assets (CSS, JS, images):
Cache Level: Standard
Browser Cache TTL: Respect Existing Headers
Edge Cache TTL: 1 month
API Endpoints (/api/*):
Cache Level: Bypass
(Don't cache API responses)
Page Rules Example (blackroad.systems):
Rule 1: *blackroad.systems/api/*
- Cache Level: Bypass
- Disable Apps
- Disable Performance
Rule 2: *blackroad.systems/*.css
- Cache Level: Cache Everything
- Edge Cache TTL: 1 month
- Browser Cache TTL: 1 day
Rule 3: *blackroad.systems/*.js
- Cache Level: Cache Everything
- Edge Cache TTL: 1 month
- Browser Cache TTL: 1 day
Rule 4: www.blackroad.systems/*
- Forwarding URL: 301 redirect to https://blackroad.systems/$1
Firewall Rules
Block known bots (optional):
Field: User Agent
Operator: contains
Value: "BadBot|Scraper|AhrefsBot"
Action: Block
Rate Limiting (protect API):
Field: URI Path
Operator: starts with
Value: /api/
Rate: 100 requests per minute
Action: Challenge (CAPTCHA)
Security Headers
Via Cloudflare Workers (optional, advanced):
Create a Worker to add security headers:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const response = await fetch(request)
const newHeaders = new Headers(response.headers)
// Security headers
newHeaders.set('X-Frame-Options', 'DENY')
newHeaders.set('X-Content-Type-Options', 'nosniff')
newHeaders.set('Referrer-Policy', 'strict-origin-when-cross-origin')
newHeaders.set('Permissions-Policy', 'camera=(), microphone=(), geolocation=()')
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
})
}
Verification Checklist
After DNS setup for each domain:
- DNS Propagation: Check with
dig <domain>or https://dnschecker.org - SSL Certificate: Visit
https://<domain>- should show valid cert (🔒) - WWW Redirect: Visit
https://www.<domain>- should redirect to apex - HTTP → HTTPS: Visit
http://<domain>- should redirect to HTTPS - API Endpoint: Test
curl https://<domain>/health(if applicable) - Cloudflare Analytics: Check Cloudflare dashboard → Analytics tab
Implementation Files
This blueprint is now implemented in the following files:
1. DNS Records Configuration
File: infra/cloudflare/records.yaml
This file is the single source of truth for all DNS records across all BlackRoad domains. It includes:
- Complete record definitions (type, name, content, TTL, proxy status)
- Domain metadata (zone ID, phase, priority)
- Human-readable comments for each record
- Organized by phase (Phase 1 active domains, Phase 2 future domains)
Quick reference: See records.yaml for the exact DNS configuration to apply.
2. Migration Guide
File: infra/cloudflare/migrate_to_cloudflare.md
A step-by-step guide for migrating DNS from GoDaddy to Cloudflare. Designed for human operators (Alexa) with:
- Detailed instructions with screenshots references
- Mobile-friendly (can be done from iPhone)
- Troubleshooting section
- Verification steps
- Checklist for tracking progress
Quick reference: Follow this guide to migrate each domain from GoDaddy DNS to Cloudflare DNS.
3. Automation Script
File: infra/cloudflare/cloudflare_dns_sync.py
An idempotent Python script that syncs DNS records from records.yaml to Cloudflare via API. Features:
- Reads structured YAML configuration
- Creates, updates, and optionally deletes DNS records
- Dry-run mode for safe testing
- Domain and phase filtering
- Comprehensive logging
Usage:
# Set Cloudflare API token
export CF_API_TOKEN="your-cloudflare-api-token"
# Dry run (safe - shows changes without applying)
python infra/cloudflare/cloudflare_dns_sync.py --dry-run
# Sync specific domain
python infra/cloudflare/cloudflare_dns_sync.py --domain blackroad.systems
# Sync all Phase 1 domains
python infra/cloudflare/cloudflare_dns_sync.py --phase 1
# Apply all changes
python infra/cloudflare/cloudflare_dns_sync.py
Requirements:
pip install pyyaml requests
How These Files Connect to Railway + GitHub
DNS → Railway Flow
- Cloudflare DNS receives user request for
os.blackroad.systems - CNAME record (from
records.yaml) points toblackroad-os-production.up.railway.app - Cloudflare CDN proxies request (SSL, caching, DDoS protection)
- Railway receives request and routes to FastAPI backend
- FastAPI serves Pocket OS frontend from
backend/static/
Railway Custom Domains
For each subdomain pointing to Railway, you must also:
-
Add the custom domain in Railway dashboard:
- Service → Settings → Networking → Custom Domains
- Add domain (e.g.,
os.blackroad.systems) - Railway auto-provisions SSL certificate (Let's Encrypt)
-
Wait for Railway to show green checkmark (SSL ready)
-
Verify: Visit
https://os.blackroad.systems- should show valid SSL 🔒
GitHub Actions Integration
The DNS sync script can be automated via GitHub Actions:
Workflow file (create at .github/workflows/dns-sync.yml):
name: Sync Cloudflare DNS
on:
push:
paths:
- 'infra/cloudflare/records.yaml'
workflow_dispatch:
jobs:
sync-dns:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install pyyaml requests
- name: Sync DNS records
env:
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
run: |
python infra/cloudflare/cloudflare_dns_sync.py --phase 1
Required GitHub Secrets:
CF_API_TOKEN- Cloudflare API token with Zone.DNS edit permissions
How it works:
- Push changes to
records.yaml - GitHub Action runs automatically
- Script syncs DNS records to Cloudflare
- Changes are live within seconds
Troubleshooting
DNS Not Resolving
Problem: dig blackroad.systems returns no results
Solutions:
- Check nameservers are updated at GoDaddy
- Wait 5-60 minutes for propagation
- Verify zone is "Active" in Cloudflare dashboard
- Check DNS records exist in Cloudflare
SSL Certificate Errors
Problem: Browser shows "Not Secure" or certificate error
Solutions:
- Check SSL/TLS mode is "Full (strict)" in Cloudflare
- Verify Railway app has valid SSL cert
- Check "Always Use HTTPS" is enabled
- Wait a few minutes for edge certificate provisioning
Site Not Loading
Problem: Domain resolves but site doesn't load
Solutions:
- Check Railway app is deployed and healthy
- Verify custom domain is added in Railway dashboard
- Check Railway logs for errors:
railway logs --service backend - Test Railway URL directly (e.g.,
your-app.up.railway.app)
Mixed Content Warnings
Problem: Page loads but some assets show as insecure
Solutions:
- Enable "Automatic HTTPS Rewrites" in Cloudflare
- Update hard-coded
http://URLs tohttps://in code - Use protocol-relative URLs:
//example.com/asset.js
Maintenance
Monthly:
- Review Cloudflare analytics
- Check SSL certificate status
- Review firewall logs (if WAF enabled)
Quarterly:
- Audit DNS records (remove unused)
- Review page rules and caching
- Update security headers if needed
Annually:
- Review Cloudflare plan (consider Pro if traffic grows)
- Audit all domain registrations (renew at GoDaddy)
- Review and update security policies
References
- Cloudflare Docs: https://developers.cloudflare.com/dns/
- Railway Custom Domains: https://docs.railway.app/deploy/custom-domains
- DNS Checker: https://dnschecker.org
- SSL Labs Test: https://www.ssllabs.com/ssltest/
This blueprint ensures all BlackRoad domains are properly configured with Cloudflare for optimal performance, security, and reliability.