Skip to content

Documentation Deployment Architecture ​

Visual overview of how the documentation deployment works.

Current Architecture (After This PR) ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         GitHub Repository                        β”‚
β”‚                    cattreedev/lantern_app                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚                     β”‚
                β”‚                     β”‚
        Push to main            Push to dev
                β”‚                     β”‚
                β–Ό                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  GitHub Actions       β”‚   β”‚  GitHub Actions       β”‚
β”‚  deploy-docs.yml      β”‚   β”‚  deploy-docs.yml      β”‚
β”‚                       β”‚   β”‚                       β”‚
β”‚  1. npm ci            β”‚   β”‚  1. npm ci            β”‚
β”‚  2. npm run           β”‚   β”‚  2. npm run           β”‚
β”‚     docs:build        β”‚   β”‚     docs:build        β”‚
β”‚  3. Deploy to CF      β”‚   β”‚  3. Deploy to CF      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚                           β”‚
            β–Ό                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Cloudflare Pages     β”‚   β”‚  Cloudflare Pages     β”‚
β”‚  lantern-docs         β”‚   β”‚  lantern-docs-dev     β”‚
β”‚  (Production)         β”‚   β”‚  (Development)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚                           β”‚
            β–Ό                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  docs.ourlantern.app  β”‚   β”‚ docs-dev.ourlantern.  β”‚
β”‚  (Public/Protected)   β”‚   β”‚ app (Protected)       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pull Request Flow ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Developer creates PR with docs changes β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       GitHub Actions triggers           β”‚
β”‚       (on pull_request event)           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Builds docs and deploys to preview URL β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Preview URL:                           β”‚
β”‚  feature-xyz.lantern-docs-dev.pages.dev β”‚
β”‚                                         β”‚
β”‚  Team reviews docs before merge         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Complete Infrastructure ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Lantern Infrastructure                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Main Application:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ourlantern.app   β”‚                    β”‚ dev.ourlantern.  β”‚
β”‚ (Production)     │◄───┐      β”Œβ”€β”€β”€β”€β”€β”€β”€β–Ίβ”‚ app (Dev)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚      β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β–²              β”‚      β”‚                 β–²
         β”‚              β”‚      β”‚                 β”‚
         β”‚         β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”           β”‚
         β”‚         β”‚  Cloudflare     β”‚           β”‚
         β”‚         β”‚  Pages Projects β”‚           β”‚
         β”‚         β”‚                 β”‚           β”‚
         β”‚         β”‚  lantern-app    β”‚           β”‚
         β”‚         β”‚  lantern-app-devβ”‚           β”‚
         β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚
         β”‚                                        β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                    GitHub Repo
                  (cattreedev/
                   lantern_app)
                          β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚                                        β”‚
         β–Ό                                        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ docs.ourlantern. β”‚                    β”‚ docs-dev.        β”‚
β”‚ app (Production) │◄───┐      β”Œβ”€β”€β”€β”€β”€β”€β”€β–Ίβ”‚ ourlantern.app   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚      β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β–²              β”‚      β”‚                 β–²
         β”‚              β”‚      β”‚                 β”‚
         β”‚         β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”           β”‚
         β”‚         β”‚  Cloudflare     β”‚           β”‚
         β”‚         β”‚  Pages Projects β”‚           β”‚
         β”‚         β”‚                 β”‚           β”‚
         β”‚         β”‚  lantern-docs   β”‚           β”‚
         β”‚         β”‚  lantern-docs-  β”‚           β”‚
         β”‚         β”‚  dev            β”‚           β”‚
         β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚
         β”‚                                        β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Documentation Site (NEW - This PR)

DNS Configuration ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Cloudflare DNS (ourlantern.app zone)    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                             β”‚
β”‚  @ (root)         β†’ lantern-app.pages.dev   β”‚
β”‚  dev              β†’ lantern-app-dev.pages.  β”‚
β”‚                     dev                     β”‚
β”‚  docs (NEW)       β†’ lantern-docs.pages.dev  β”‚
β”‚  docs-dev (NEW)   β†’ lantern-docs-dev.pages. β”‚
β”‚                     dev                     β”‚
β”‚                                             β”‚
β”‚  All CNAME records are Proxied (🟠)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

GitHub Actions Workflow Triggers ​

Event: Push to main/dev
Conditions:
  - Files in docs/** changed OR
  - package.json changed OR
  - .github/workflows/deploy-docs.yml changed
  ↓
  Run workflow

Event: Pull Request
Conditions:
  - Files in docs/** changed
  ↓
  Run workflow (preview deployment)

Event: workflow_dispatch
Conditions:
  - Manual trigger from GitHub UI
  ↓
  Run workflow

Deployment Timeline ​

Time: T+0s
β”œβ”€ Developer pushes commit to dev branch
β”‚
Time: T+5s
β”œβ”€ GitHub Actions detects push
β”œβ”€ Workflow starts
β”‚
Time: T+10s
β”œβ”€ Checkout code
β”œβ”€ Setup Node.js
β”‚
Time: T+30s
β”œβ”€ Install dependencies (npm ci)
β”‚
Time: T+60s
β”œβ”€ Build docs (npm run docs:build)
β”‚
Time: T+90s
β”œβ”€ Deploy to Cloudflare Pages
β”‚
Time: T+120s
β”œβ”€ Cloudflare builds and deploys
β”‚
Time: T+180s (3 minutes)
└─ βœ… Docs live at docs.dev.ourlantern.app

Security & Access ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Access Control                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                             β”‚
β”‚  ourlantern.app                             β”‚
β”‚  └─ Cloudflare Access: PIN Auth (Piloting)  β”‚
β”‚                                             β”‚
β”‚  dev.ourlantern.app                         β”‚
β”‚  └─ Cloudflare Access: PIN Auth            β”‚
β”‚                                             β”‚
β”‚  docs.ourlantern.app (NEW)                  β”‚
β”‚  └─ Option 1: Public (Recommended)          β”‚
β”‚  └─ Option 2: Cloudflare Access (Optional) β”‚
β”‚                                             β”‚
β”‚  docs.dev.ourlantern.app (NEW)              β”‚
β”‚  └─ Option 1: Public                        β”‚
β”‚  └─ Option 2: Protected (For unreleased     β”‚
β”‚                          features)          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Build Outputs ​

Repository Structure:
/home/runner/work/lantern_app/lantern_app/
β”‚
β”œβ”€ Main App Build (npm run build:app)
β”‚  └─ Output: dist/
β”‚     β”œβ”€ index.html
β”‚     β”œβ”€ assets/
β”‚     β”œβ”€ sw.js (service worker)
β”‚     └─ manifest.webmanifest
β”‚
└─ Docs Build (npm run docs:build)
   └─ Output: docs/.vitepress/dist/
      β”œβ”€ index.html
      β”œβ”€ assets/
      β”œβ”€ engineering/
      β”œβ”€ features/
      β”œβ”€ business/
      └─ ... (all docs pages)

Note: Builds are now INDEPENDENT - no longer copied together

Key Benefits Visualized ​

Before (Single Deployment):
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Build App + Docs      β”‚  ← 5-10 minutes
β”‚   (Single large build)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Deploy to Cloudflare   β”‚  ← 2-3 minutes
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ourlantern.app/docs/    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

After (Separate Deployments):
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Build App   β”‚  β”‚  Build Docs  β”‚  ← 2-3 min each
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                 β”‚
       β–Ό                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Deploy App  β”‚  β”‚  Deploy Docs β”‚  ← 2-3 min each
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                 β”‚
       β–Ό                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ourlantern.appβ”‚  β”‚docs.ourlanternβ”‚
β”‚              β”‚  β”‚.app           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Benefits:
βœ… Update docs without touching app
βœ… Faster individual builds
βœ… Independent scaling
βœ… Cleaner URLs
βœ… Better SEO

Monitoring & Verification ​

1. GitHub Actions
   └─ https://github.com/cattreedev/lantern_app/actions
      └─ "Deploy Documentation" workflow
         β”œβ”€ View status (βœ… or ❌)
         β”œβ”€ See deployment logs
         └─ Check deployment summary

2. Cloudflare Dashboard
   └─ https://dash.cloudflare.com
      └─ Workers & Pages β†’ Pages
         β”œβ”€ lantern-docs (production)
         β”‚  └─ Deployments tab
         β”‚     β”œβ”€ View history
         β”‚     β”œβ”€ See build logs
         β”‚     └─ Check status
         β”‚
         └─ lantern-docs-dev (development)
            └─ Same monitoring

3. Direct Verification
   β”œβ”€ Visit docs.ourlantern.app
   β”œβ”€ Hard refresh (Ctrl+Shift+R)
   └─ Verify changes appear

Quick Decision Tree ​

Need to update docs?
    β”‚
    β”œβ”€ Yes
    β”‚  β”‚
    β”‚  β”œβ”€ Edit docs/ files
    β”‚  β”œβ”€ Test locally (npm run docs:dev)
    β”‚  β”œβ”€ Commit and push to dev
    β”‚  └─ βœ… Auto-deploys to docs.dev.ourlantern.app
    β”‚
    └─ Ready for production?
       β”‚
       β”œβ”€ Yes
       β”‚  β”œβ”€ Merge to main
       β”‚  └─ βœ… Auto-deploys to docs.ourlantern.app
       β”‚
       └─ No
          └─ Keep testing on docs-dev

Last updated: 2026-01-10

Built with VitePress