Fulcrum Platform Matrix
Canonical view of services, hosting targets, and repository layout
Deployment Targets
| Component | Source | Runtime | Hosting | Status |
|---|---|---|---|---|
| fulcrum-server | cmd/fulcrum-server |
Go (gRPC + HTTP) | Railway service fulcrum-server |
✅ Primary |
| event-processor | cmd/eventprocessor |
Go worker | Railway service event-processor |
✅ Primary |
| dashboard (app + marketing) | dashboard/ |
Next.js 16 (App Router) | Vercel project fulcrum-dashboard (primary), Railway dashboard (fallback SSR) |
✅ Primary / ♻️ Fallback |
| PostgreSQL + TimescaleDB | infra/migrations |
Managed DB | Railway TimescaleDB add-on | ✅ Primary |
| Redis | Shared cache | Managed cache | Railway Redis add-on | ✅ Primary |
| NATS JetStream | infra/docker/Dockerfile.nats |
Docker | Railway external service or self-hosted | ✅ Required |
Hosting Responsibilities
- Railway is the authoritative compute platform for backend services and managed data stores. Configuration lives in
railway.toml, andscripts/validate-railway-env.shmust pass before each deploy. - Vercel serves the public marketing routes (
/,/(marketing)) and authenticated dashboard routes (/(app)) from the same Next.js project.dashboard/vercel.jsonconfigures rewrites to the Railway API gateway. - Disaster recovery relies on Railway-managed backups; there is no secondary provider blueprint.
- Doppler manages secrets and shared environment values.
doppler.yamlpins the default project/config.
Web Surfaces
The dashboard repository intentionally unifies marketing and product surfaces:
dashboard/src/app/
├── (marketing)/ # Landing pages served at fulcrumlayer.io
└── (app)/app/ # Authenticated dashboard under /app
- Production traffic terminates at Vercel.
/app/**routes require Clerk auth while/and other marketing routes stay public. - Railway runs the same Next.js build as a fallback SSR target and for preview environments that need proximity to backend services.
- Rewrites in
vercel.jsonforward/api/grpc/*to the Railway fulcrum-server so both hosting stacks stay aligned.
Repository Topology
| Path | Purpose |
|---|---|
cmd/ |
Go entrypoints (server, MCP, event processor, retention job, CLI) |
internal/ |
Core platform services (policy engine, brain, envelope, billing, etc.) |
pkg/ |
Reusable Go libraries shared across binaries |
proto/ |
Protocol buffer definitions (source of generated code under fulcrum/) |
dashboard/ |
Next.js dashboard + marketing app |
docs/ |
MkDocs documentation (source of truth referenced by mkdocs.yml) |
infra/ |
Dockerfiles, Helm charts, migrations, and IaC assets |
scripts/ |
Operational scripts (validation, deployments, migrations) |
Configuration Checklist
- Update
railway.tomlwhen adding services or environment variables and re-run./scripts/validate-railway-env.sh. - Update
dashboard/vercel.jsonfor any new rewrites, headers, or domains touching the marketing site. - Keep disaster-recovery procedures aligned with Railway backup capabilities and document deviations in
docs/runbooks/disaster-recovery.md. - Document every platform change in
docs/runbooks/DEPLOYMENT_GUIDE.mdso operations, marketing, and engineering share a single deployment story.