Skip to main content

Wiki Documentation Lifecycle Workflow

Complete guide for updating and deploying the PermitProof documentation wiki.

๐Ÿ“ Quick Referenceโ€‹

Daily Workflow (Most Common)โ€‹

# 1. Edit docs
vim docs/tdd/production-readiness.md

# 2. Commit
git commit -m "Update docs"

# 3. Smart deploy (auto-syncs + auto-detects rebuild)
./cli/sdlc/wiki/deploy-to-firebase-smart.sh # โšก 10-40 sec
# Note: This script automatically syncs docs/ first, then builds if needed

When to Use Each Commandโ€‹

CommandWhen to UseTimeWhat It Does
deploy-to-firebase-smart.shโญ 99% of docs updates~10-40sAuto-syncs + auto-detects if rebuild needed
deploy-to-firebase.sh --skip-functionsForce rebuild~30-60sBuild + deploy hosting only
deploy-to-firebase.sh (no flags)Allowlist changes~3-4 minFull deployment with functions
rebuild-wiki.shโš ๏ธ Dependency issues ONLY~2-3 minClears node_modules + reinstalls (does NOT deploy)

Important: rebuild-wiki.sh is NOT for regular deployments! It only refreshes dependencies when you have corruption or need to update packages. After running it, you still need to run a deploy command.


๐Ÿ“‹ Complete Lifecycleโ€‹

Step 1: Edit Documentationโ€‹

Edit any markdown files in the docs/ folder:

vim docs/tdd/production-readiness.md
# or create new
vim docs/new-feature-guide.md

Step 2: Commit Changes (Auto-Syncs)โ€‹

git add docs/
git commit -m "Update production readiness documentation"

What happens automatically:

Post-commit hook runs
โ†“
Detects changes in docs/
โ†“
Runs sync-docs-to-wiki.sh
โ†“
rsync docs/ โ†’ wiki/docs/
โ†“
Shows deployment reminder

Step 3: Deploy (Choose Your Speed)โ€‹

./cli/sdlc/wiki/deploy-to-firebase-smart.sh

Time: ~10-40 seconds (depending on if rebuild needed)

Smart features:

  • ๐Ÿ”„ Auto-syncs docs/ to wiki/docs/ first
  • ๐Ÿง  Auto-detects if docs changed since last build
  • โญ๏ธ Skips rebuild if docs unchanged (~10-20s)
  • โœ… Rebuilds if docs changed (~30-40s)
  • โญ๏ธ Always skips Cloud Functions

Use --force to force rebuild even if docs haven't changed.

๐Ÿ”ง Full Deploy (When Allowlist Changes)โ€‹

./cli/sdlc/wiki/deploy-to-firebase.sh

Time: ~3-4 minutes

Includes everything:

  • โœ… Cloud Functions TypeScript compile
  • โœ… Cloud Functions deployment
  • โœ… Docusaurus build
  • โœ… Firebase Hosting deployment

Use when you've modified:

  • wiki/functions/src/index.ts (allowlist changes)
  • wiki/src/theme/Root.tsx (auth logic changes)

โšก Performance Optimizationsโ€‹

1. Docusaurus Build Cachingโ€‹

Docusaurus automatically caches builds in .docusaurus/ folder:

  • First build: ~10-15 seconds
  • Incremental builds: ~5-8 seconds (only changed files)
  • Clean build: Delete .docusaurus/ to force full rebuild
# Force clean build (rarely needed)
cd wiki
rm -rf .docusaurus
npm run build

2. Skip Functions for Speedโ€‹

99% of the time, you're just updating documentation, not the allowlist.

Use --skip-functions to save 2-3 minutes:

# Before (slow)
./cli/sdlc/wiki/deploy-to-firebase.sh # 3-4 minutes

# After (fast)
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-functions # 30-60 seconds

3. Skip Build for Hotfixesโ€‹

If you've already built and just need to redeploy:

./cli/sdlc/wiki/deploy-to-firebase.sh --skip-build --skip-functions  # ~10-20s

๐Ÿ”„ Auto-Deploy Optionsโ€‹

# Commit syncs docs
git commit -m "Update docs"

# Deploy manually when ready
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-functions

Pros:

  • โœ… Control over what gets published
  • โœ… Can preview locally before deploying
  • โœ… Batch multiple commits before deploying

Auto-Deploy (Optional)โ€‹

Enable in your shell profile (~/.bashrc or ~/.zshrc):

export AUTO_DEPLOY_FIREBASE=true

Then every commit to docs/ automatically:

  1. Syncs to wiki
  2. Builds Docusaurus
  3. Deploys to Firebase

Pros:

  • โœ… Hands-free, always up-to-date
  • โœ… No manual deployment step

Cons:

  • โš ๏ธ Every commit goes live immediately
  • โš ๏ธ Can't preview before publishing

๐Ÿ“Š Deployment Time Breakdownโ€‹

Full Deployment (~3-4 minutes)โ€‹

Cloud Functions build:    ~30s
Cloud Functions deploy: ~2-3 min โ† Slowest part
Docusaurus build: ~30-40s
Firebase Hosting deploy: ~10-20s
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Total: ~3-4 min

Fast Deployment (~30-60 seconds)โ€‹

Cloud Functions: SKIPPED โ† Saves 2-3 min!
Docusaurus build: ~30-40s
Firebase Hosting deploy: ~10-20s
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Total: ~30-60s

For Different Use Casesโ€‹

Regular Doc Updates (95% of commits):

git commit -m "Update docs"
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-functions # โšก Fast

Adding Users to Allowlist:

# Edit wiki/functions/src/index.ts
git commit -m "Add user to wiki allowlist"
./cli/sdlc/wiki/deploy-to-firebase.sh # ๐Ÿ”ง Full (no flags)

Urgent Hotfix (Already Built):

# Fix typo directly in wiki/docs/
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-build --skip-functions # โšกโšก Super fast

Preview Before Deploy:

git commit -m "Update docs"
cd wiki && npm start # Preview at localhost:3000
# If looks good:
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-functions

๐Ÿ”— Command Referenceโ€‹

# Deployment (Daily Use)
./cli/sdlc/wiki/deploy-to-firebase-smart.sh # โญ RECOMMENDED: Smart deploy (auto-sync + auto-build)
./cli/sdlc/wiki/deploy-to-firebase-smart.sh --force # Force rebuild even if docs unchanged
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-functions # Fast deploy (force rebuild)
./cli/sdlc/wiki/deploy-to-firebase.sh # Full deploy (with functions)
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-build # Skip Docusaurus build
./cli/sdlc/wiki/deploy-to-firebase.sh --help # Show all options

# Manual sync (without commit)
./cli/sdlc/wiki/sync-docs-to-wiki.sh # Syncs docs/ to wiki/docs/ with MDX escaping

# Local preview
cd wiki && npm start # Opens localhost:3000

# Dependency Management (Rarely Needed!)
./cli/sdlc/wiki/rebuild-wiki.sh # โš ๏ธ ONLY for dependency issues
# Deletes node_modules + reinstalls
# Does NOT sync docs or deploy!

When to use rebuild-wiki.sh:

  • โŒ NOT for regular doc updates
  • โŒ NOT when docs change
  • โœ… ONLY when you have npm dependency corruption
  • โœ… ONLY when you need to update package.json dependencies
  • โœ… ONLY when Docusaurus build fails with module errors

After running rebuild-wiki.sh, you still need to run a deployment command!


๐Ÿ’ก Pro Tipsโ€‹

  1. Use --skip-functions by default - Only deploy functions when allowlist changes
  2. Preview locally first - Run npm start to check changes before deploying
  3. Batch commits - Make several doc updates, then deploy once
  4. Check build cache - .docusaurus/ makes incremental builds fast
  5. Monitor deployment - Firebase shows progress and completion status

๐Ÿ› Troubleshootingโ€‹

Deployment taking too long?โ€‹

# Use smart deploy (recommended) - only rebuilds if docs changed
./cli/sdlc/wiki/deploy-to-firebase-smart.sh

# Or skip functions for docs-only updates
./cli/sdlc/wiki/deploy-to-firebase.sh --skip-functions

Build is slow?โ€‹

Docusaurus caches builds automatically. First build is slow, subsequent builds are faster.

# Check cache exists
ls -la wiki/.docusaurus/

# If corrupted, delete and rebuild
rm -rf wiki/.docusaurus
npm run build

Module/dependency errors?โ€‹

Symptoms:

  • Module not found errors
  • Cannot find package errors
  • Build fails with npm/node errors

Solution:

# 1. Rebuild dependencies (deletes node_modules and reinstalls)
./cli/sdlc/wiki/rebuild-wiki.sh

# 2. Then deploy normally
./cli/sdlc/wiki/deploy-to-firebase-smart.sh

MDX syntax errors (like {variable} is not defined)?โ€‹

Symptoms:

  • Wiki page shows "This page crashed"
  • Browser console shows {file_id} is not defined or similar

Cause: Curly braces in docs are treated as JSX variables by MDX

Solution: The sync-docs-to-wiki.sh script automatically escapes these. If you see this error:

# 1. The escape script was already updated to handle {variable} patterns
# 2. Just redeploy - it will auto-escape
./cli/sdlc/wiki/deploy-to-firebase-smart.sh

The script escapes patterns like {file_id}, {projectId}, etc. to \{file_id\}, \{projectId\} automatically.

Functions failing to deploy?โ€‹

Functions rarely change. If deployment fails:

# Deploy functions separately
cd wiki/functions
npm run build
firebase deploy --only functions:checkWikiAccess --project construction-code-expert-dev

๐Ÿ“ˆ Expected Performanceโ€‹

Build Times (With Cache)โ€‹

Build TypeTimeWhen
First build~10-15sAfter npm install or cache clear
Incremental~5-8sNormal docs updates
No changes~3-5sRebuild same content

Deployment Timesโ€‹

TypeTimeFrequency
Functions~2-3 minRare (allowlist changes only)
Hosting~10-20sEvery docs update
Total (full)~3-4 minInitial + allowlist changes
Total (fast)~30-60sRegular docs updates

๐ŸŽฏ TL;DR - The Playbookโ€‹

For 99% of doc updates:

# 1. Edit & commit (IDE or terminal)
git commit -m "Update docs"

# 2. Smart deploy (auto-detects changes)
./cli/sdlc/wiki/deploy-to-firebase-smart.sh

# Done! โœ… Live in 10-40 seconds

For allowlist updates:

# Edit wiki/functions/src/index.ts
git commit -m "Add user to allowlist"
./cli/sdlc/wiki/deploy-to-firebase.sh # Full deploy

Simple as that! ๐Ÿš€