Skip to content
This repository was archived by the owner on Jul 13, 2026. It is now read-only.

feat: exobase-managed hosting as the default deploy path - #15

Merged
heyinterspace merged 1 commit into
mainfrom
managed-hosting
Jul 12, 2026
Merged

heyinterspace merged 1 commit into
mainfrom
managed-hosting

Conversation

@heyinterspace

Copy link
Copy Markdown
Owner

Summary

The Replit model: users click Deploy and apps ship to Exobase-operated infrastructure — they never see or configure the underlying Coolify instance ("I just think Replit. I want that to be the same here").

  • Managed mode (default): api.coolify-deploy targets the instance from server-only EXOBASE_COOLIFY_URL/EXOBASE_COOLIFY_TOKEN env vars. The client only ever learns a boolean ("managed hosting available"), never the URL or token. Deploy menu reads "Deploy on Exobase".
  • BYO mode (escape hatch): the own-instance form moves behind an "Advanced" disclosure in Settings > Hosting, and still takes precedence when connected. New deep link opens {instance}/security/api-tokens as soon as the URL parses — generate, paste, done.
  • Abuse guardrails (v1, pre-identity): apps namespaced per anonymous user with a cap of 3, redeploys verify namespace ownership, hard container limits (512m/0.5cpu) on every managed create, and a per-IP deploy rate limit (5/10min).
  • Rate limiter bug fix: the /api/* catch-all was declared first and matched every request, so every specific rule (llmcall, waitlist, github) was dead code — and github-*-style patterns never matched at all. Specific rules now come first and trailing-* is a proper prefix wildcard.

Real per-account quotas/billing land with Phase 2's identity work (plan updated).

Test plan

  • pnpm run typecheck / lint / build pass
  • Preview: Hosting section shows managed-default copy, BYO collapsed under Advanced, token deep link resolves from typed URL
  • Managed deploy round-trip once EXOBASE_COOLIFY_* env vars point at a real instance

🤖 Generated with Claude Code

"Deploy" now targets an Exobase-operated Coolify instance configured via
server-only env vars (EXOBASE_COOLIFY_URL/TOKEN) — users just think
"Exobase", the way Replit users think Replit. Bringing your own Coolify
instance moves behind an Advanced disclosure in Settings > Hosting, and
BYO still wins when connected (someone who connected their own instance
did so deliberately).

Guardrails for the shared box (v1, pre-identity; real per-account quotas
land with the Phase 2 identity work):
- Apps namespaced per anonymous user (exo-{id}- prefix) with a cap of 3;
  redeploys verify namespace ownership.
- Hard container limits (512m memory, 0.5 cpu) on every managed create.
- Per-IP deploy rate limit (5 per 10 min) — which surfaced that the
  rate-limiter's '/api/*' catch-all was declared first and matched
  everything, making every specific rule dead code, and that
  'github-*'-style patterns never matched at all ('/*'-only wildcard
  check). Both fixed: specific rules first, trailing-'*' now a prefix
  wildcard.

Also: managed-status endpoint (boolean only — the instance URL/token
never leave the server), anon-id helper extracted from useNangoConnect
for reuse, "Open your API tokens page" deep link on the BYO form once
the instance URL parses.

Verified: typecheck/lint/build pass; in the preview, the Hosting section
shows the managed-default copy with BYO collapsed under Advanced, and
the token deep link resolves from the typed URL. Managed deploys
themselves need the env vars + a real instance to exercise.
@github-actions

Copy link
Copy Markdown

ℹ️ Preview deployment not configured

Name Info
Latest commit f54687e
Status Preview deployment requires Cloudflare secrets

To enable preview deployments, repository maintainers can add:

  • CLOUDFLARE_API_TOKEN secret
  • CLOUDFLARE_ACCOUNT_ID secret

Built with ❤️ by bolt.diy

@heyinterspace
heyinterspace merged commit ee15cad into main Jul 12, 2026
16 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant