DEPLOYMENT: DWELLING
The final step is not deployment.
It is beginning to dwell.
What is Dwelling?
Dwelling is being at home in the system you've built.
- Not visiting — inhabiting
- Not using — belonging
- Not deploying — caring for
Deployment is a moment. Dwelling is ongoing practice.
"Building and thinking are, each in its own way, inescapable for dwelling."— Martin Heidegger, "Building Dwelling Thinking"
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ THE DEPLOYMENT FLOW │ │ From code to dwelling │ │ │ │ ┌──────────────────┐ │ │ │ BUILD │ pnpm --filter=<pkg> build │ │ └────────┬─────────┘ │ │ ↓ │ │ ┌──────────────────┐ │ │ │ DEPLOY │ wrangler pages deploy │ │ └────────┬─────────┘ │ │ ↓ │ │ ┌──────────────────┐ │ │ │ MIGRATE │ wrangler d1 migrations apply │ │ └────────┬─────────┘ │ │ ↓ │ │ ┌──────────────────┐ │ │ │ VERIFY │ Tail logs, check production │ │ └────────┬─────────┘ │ │ ↓ │ │ ┌──────────────────┐ │ │ │ DWELL │ The tool disappears │ │ └──────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘
Five steps. Then ongoing care.
Step 1: Build
# Build a specific package
pnpm --filter=space build
# Build with type checking first
pnpm --filter=space exec tsc --noEmit && pnpm --filter=space build
# Generate Cloudflare types before build
pnpm --filter=space exec wrangler types Types first. Then build. Order matters.
Step 2: Deploy
# Deploy to Cloudflare Pages
# CRITICAL: Use exact project names
# .space, .io, .agency use 'create-something-*'
wrangler pages deploy .svelte-kit/cloudflare \
--project-name=create-something-space
# .ltd, .lms use 'createsomething-*' (no hyphen!)
wrangler pages deploy .svelte-kit/cloudflare \
--project-name=createsomething-ltd Project names are historical. Look them up. Don't guess.
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ PROJECT NAMES │ │ Exact matches required │ │ │ │ ┌────────────────┬───────────────────────────┬───────────────────┐ │ │ │ Package │ Cloudflare Project │ Pattern │ │ │ ├────────────────┼───────────────────────────┼───────────────────┤ │ │ │ space │ create-something-space │ create-something- │ │ │ │ io │ create-something-io │ create-something- │ │ │ │ agency │ create-something-agency │ create-something- │ │ │ ├────────────────┼───────────────────────────┼───────────────────┤ │ │ │ ltd │ createsomething-ltd │ createsomething- │ │ │ │ lms │ createsomething-lms │ createsomething- │ │ │ └────────────────┴───────────────────────────┴───────────────────┘ │ │ │ │ Reference: .claude/rules/PROJECT_NAME_REFERENCE.md │ │ │ └─────────────────────────────────────────────────────────────────────────┘
Wrong name = new project. Production breaks.
Step 3: Migrate
# Apply D1 migrations (if database changed)
wrangler d1 migrations apply DB_NAME
# Example for space package
wrangler d1 migrations apply space-db
# Always run after deploying schema changes
# Migrations are idempotent — safe to re-run Schema changes require explicit migration.
Step 4: Verify
# Tail production logs (interactive — use WezTerm)
wrangler pages deployment tail --project-name=create-something-space
# Check deployment status
wrangler pages deployment list --project-name=create-something-space
# Visit production URL
open https://createsomething.space Deploy is not done until verified. Trust, but verify.
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ SESSION CLOSE PROTOCOL │ │ Before saying "done" │ │ │ │ ┌──────┬──────────────────────────────────────────────────────────┐ │ │ │ 1 │ git status # Check what changed │ │ │ ├──────┼──────────────────────────────────────────────────────────┤ │ │ │ 2 │ git add <files> # Stage code changes │ │ │ ├──────┼──────────────────────────────────────────────────────────┤ │ │ │ 3 │ bd sync --from-main # Pull beads updates │ │ │ ├──────┼──────────────────────────────────────────────────────────┤ │ │ │ 4 │ git commit -m "..." # Commit code changes │ │ │ └──────┴──────────────────────────────────────────────────────────┘ │ │ │ │ Ephemeral branches: merge to main locally, don't push. │ │ │ └─────────────────────────────────────────────────────────────────────────┘
Every session ends deliberately. Never just close the terminal.
Syncing State
Work persists in two places: git and Beads.
- Code → Git (your changes)
- Issues → Beads (your progress)
- Both must sync before session ends
bd sync --from-main pulls issue updates. git commit pushes code changes.
Step 5: Dwell
After deployment, the ongoing practice begins.
- Monitor logs when something feels wrong
- Document breakdowns as they occur
- Repair patterns, not just symptoms
- Update rules when understanding deepens
The system isn't finished. You now inhabit it.
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ THE HERMENEUTIC SPIRAL │ │ Understanding deepens with each pass │ │ │ │ Session 1 │ │ ↓ │ │ HEIDEGGER: CANON │ │ Philosophy installed │ │ ↓ │ │ CLAUDE CODE: PARTNER │ │ Environment configured │ │ ↓ │ │ BEADS: CONTINUITY │ │ Memory established │ │ ↓ │ │ CLOUDFLARE: EDGE │ │ Infrastructure understood │ │ ↓ │ │ CANON: DESIGN │ │ Aesthetics internalized │ │ ↓ │ │ DEPLOYMENT: DWELLING │ │ Practice begins │ │ ↓ │ │ Session N+1 │ │ (Deeper understanding) │ │ │ └─────────────────────────────────────────────────────────────────────────┘
Each session deepens. The spiral continues.
You Are Ready
The infrastructure disappears.
Only the work remains.