Architecture

Repository and deployment model

Crownvo moved from a large all-in-one codebase toward focused repositories. Each public surface can build and deploy independently while the API remains the contract for shared data and authentication.

1. Repository boundaries

  • The API repository owns Laravel routes, database migrations, business services, queues, and backend authentication.
  • Web repositories own their Next.js UI, browser experience, and server-side BFF adapters.
  • CrownvMail owns the hosted-mail and MTA-related services.
  • Status, docs, support, marketing, account, marketplace, community, academy, and other surfaces can deploy independently.

2. Coolify deployment

Coolify builds from the main branch and injects environment values as build or runtime configuration. Docker Compose is used where a resource needs multiple services or persistent infrastructure.
  • A deployment is healthy only when the application and its dependencies pass their health checks.
  • A migration service must exit successfully before dependent application services start.
  • Restart limits indicate a runtime or dependency failure, not a GitHub push failure.

3. Release discipline

  • Run the repository checks before pushing: lint, typecheck, build, Pint, and PHPUnit as applicable.
  • Treat package-lock drift as a release blocker because Docker uses npm ci.
  • Keep credentials in Coolify or local secret storage and never in Git history.
  • Record important deployments, failures, and fixes in the activity timeline.

Still need help? Contact support.

Repository and deployment model | Crownvo Docs