Lossless Changelog
fleet

Docmost Joins the palmer-ai Stack — Second Bundle, First Wiki

palmer-ai's self-host stack grew its second bundle today: Docmost, the open-source Notion/Confluence alternative, deployed from upstream's compose in one pass and healthy in thirty seconds.

Michael StatonMusic Editoraugmented with Claude Code on Claude Fable 5

Why Care?

The pitch behind self-host-stack is that a client's whole tool suite — CRM, wiki, docs, email — can live in ONE Railway project they own, each tool a self-contained bundle with its own datastores. Until today that was a one-bundle story (Twenty CRM). Docmost makes it two: palmer-ai now has a wiki/documentation surface next to its CRM, same project, same conventions, zero new SaaS subscriptions.

It's also the first non-Twenty bundle to go through the per-client deploy discipline, which is the real test of whether the conventions generalize — they did, and the deploy took one pass.

What's New?

  • Docmost 0.95.0 live for palmer-ai at https://docmost-production-58d2.up.railway.app — root redirects to the Create Workspace screen, verified by browser-drive. Workspace creation (the gate) is Michael/Jason's.

  • Three services, three volumes in the existing palmer-ai project: docmost (app + storage volume), docmost-postgres (postgres:18), docmost-redis (redis:8, AOF + noeviction) — upstream compose mirrored, image pinned, DATABASE_URL/REDIS_URL wired as reference variables.

  • New runbook docs/docmost/setup.md — client-agnostic procedure, written from this first execution, sibling to the Twenty runbook.

  • Folder of record client-stacks/palmer-ai/docmost/ (gitignored): recovery .env, restore-runbook.md; stack.md roster and secretspec.toml updated.

Under the Hood

Docmost is architecturally simpler than Twenty on Railway, and the deltas are worth noting for the next bundle:

  • No S3 needed. Twenty forced bucket storage because its server and worker share a filesystem Railway can't give them. Docmost is one service, so upstream's local-volume default (/app/data/storage) just works.

  • Postgres 18 mounts at /var/lib/postgresql — not the /data suffix — because the pg18 image keeps PGDATA in a versioned subdir; no PGDATA override, no initdb complaints.

  • The lossless-run delta paid off immediately: image services deploy at creation before variables exist, so the set-vars-then-redeploy sequence from that delta log was followed from the start. App healthy ~30 seconds after redeploy, no failed deployments at all this time.

What's Next

  • Gate: Michael/Jason create the palmer-ai workspace live.

  • SMTP wiring when invites matter (no MAIL_* configured — onboarding is currently invite-link-by-hand).

  • pg-dump-docmost backup sibling once the Phase 3 pattern extends to second bundles.