Files
ryaneggzandClaude Opus 4.6 cdd2c740e2 feat: migrate docs from Nextra to Fumadocs, integrate wiki content source
Replace Nextra 2.13.4 with Fumadocs (fumadocs-core + fumadocs-ui + fumadocs-mdx)
on Next.js 16. Migrates from Pages Router to App Router with two content sources:
- /docs — static documentation (29 MDX pages migrated from Nextra)
- /wiki — LLM-generated wiki pages (symlinked from workspace/wiki/pages/)

Key changes:
- Swap nextra/nextra-theme-docs deps for fumadocs stack + Tailwind CSS 4
- Convert _meta.json nav files to Fumadocs meta.json format
- Convert Mermaid JSX components to fenced mermaid code blocks
- Update internal links from /open-harness/ to /docs/ prefix
- Add Orama search API route
- Support both dev server (tunnel) and static export (GitHub Pages)
- Update docs.yml workflow to trigger on workspace/wiki/** changes
- Update startup.sh: start docs on port 3001, support multiple tunnels
- Add wiki/pages/index.md landing page for /wiki route

Tunnel setup (manual, one-time):
  ~/install/cloudflared-tunnel.sh docs docs.ruska.dev 3001

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 17:43:08 -06:00

92 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
LOG_PREFIX="[startup]"
log() { echo "$LOG_PREFIX $*"; }
APP_DIR="$HOME/harness/workspace/projects/next-app"
# ─── 0. Onboarding check ─────────────────────────────────────────
ONBOARD_MARKER="$HOME/.claude/.onboarded"
if [ ! -f "$ONBOARD_MARKER" ]; then
log "Onboarding not complete — skipping app startup"
log ""
log " To complete first-time setup, run:"
log " openharness onboard"
log ""
# Still install deps so the workspace is ready when user onboards
cd "$APP_DIR"
pnpm install 2>&1 | tail -3
log "Deps installed. Waiting for onboarding..."
exit 0
fi
# ─── 1. Install dependencies ──────────────────────────────────────
log "Installing dependencies..."
cd "$APP_DIR"
pnpm install
# ─── 2. Start Next.js dev server ──────────────────────────────────
log "Starting Next.js dev server..."
pnpm dev > /tmp/next-dev.log 2>&1 &
NEXT_PID=$!
echo "$NEXT_PID" > /tmp/next-dev.pid
# ─── 3. Start docs site ───────────────────────────────────────────
DOCS_DIR="$HOME/harness/docs"
if [ -d "$DOCS_DIR" ]; then
log "Starting docs site on port 3001..."
cd "$DOCS_DIR"
pnpm dev > /tmp/docs-dev.log 2>&1 &
echo $! > /tmp/docs-dev.pid
cd "$APP_DIR"
fi
# ─── 4. Start Cloudflare tunnels (if configured) ─────────────────
CFLARED_DIR="$HOME/.cloudflared"
TUNNEL_CONFIGS=$(ls "$CFLARED_DIR"/config-*.yml 2>/dev/null || true)
if [ -n "$TUNNEL_CONFIGS" ]; then
for TUNNEL_CONFIG in $TUNNEL_CONFIGS; do
TUNNEL_NAME=$(basename "$TUNNEL_CONFIG" | sed 's/^config-//;s/\.yml$//')
log "Starting cloudflared tunnel ($TUNNEL_NAME)..."
cloudflared tunnel --config "$TUNNEL_CONFIG" run "$TUNNEL_NAME" > "/tmp/cloudflared-${TUNNEL_NAME}.log" 2>&1 &
echo $! > "/tmp/cloudflared-${TUNNEL_NAME}.pid"
done
elif [ -f "$CFLARED_DIR/cert.pem" ]; then
log "Tunnel config not found. Run: ~/install/cloudflared-tunnel.sh <name> <hostname> <port>"
else
log "WARN: cloudflared not authenticated, tunnel skipped"
fi
# ─── 5. Wait for servers to be ready ─────────────────────────────
log "Waiting for port 3000..."
for i in $(seq 1 30); do
if curl -sf http://localhost:3000 > /dev/null 2>&1; then
log "Next.js ready on port 3000"
break
fi
if [ "$i" -eq 30 ]; then
log "WARN: Port 3000 not responding after 30s"
fi
sleep 1
done
if [ -f /tmp/docs-dev.pid ]; then
log "Waiting for port 3001..."
for i in $(seq 1 30); do
if curl -sf http://localhost:3001 > /dev/null 2>&1; then
log "Docs ready on port 3001"
break
fi
if [ "$i" -eq 30 ]; then
log "WARN: Port 3001 not responding after 30s"
fi
sleep 1
done
fi
log "Startup complete"