Internal Documentation internal
TalkIDE internal documentation

The TalkIDE platform, the people who use it, and the external systems it depends on.

flowchart TB
    subgraph actors[" "]
        direction LR
        EU["End User<br/>(Vibecoder)"]
        OP["Platform Operator<br/>(TalkIDE staff)"]
        AEU["App End User<br/>(audience of a published app)"]
    end

    TID["<b>TalkIDE Platform</b><br/>Build, run & publish web apps<br/>by talking to Mara"]

    subgraph ext["External systems"]
        direction LR
        ANT["Anthropic API<br/>Claude — every Mara turn"]
        STRIPE["Stripe<br/>Payments & invoices (test mode)"]
        MG["Mailgun<br/>Transactional email"]
        DO["DigitalOcean<br/>K8s · Managed PG ×2 · Spaces<br/>Registry · LB · DNS"]
        GL["GitLab<br/>Source repos & CI"]
        PB["Porkbun<br/>Domain registrar (talkide.app)"]
    end

    EU -->|"workspace + Studio<br/>talkide.app"| TID
    OP -->|"admin console (planned)"| TID
    AEU -->|"{slug}.talkide.app"| TID

    TID -->|"agent turns (via gateway-proxy)"| ANT
    TID -->|"SetupIntent · invoices · webhooks"| STRIPE
    TID -->|"password reset · waitlist · invites"| MG
    TID -->|"compute · data · blobs · DNS"| DO
    TID -->|"build & deploy TalkIDE itself"| GL
    PB -.->|"delegates DNS to DO"| DO

Actors

ActorDescriptionPrimary entry point
End User (Vibecoder)Non-technical individual or small business owner who builds their own app by talking to Mara. Owns one tenant.https://talkide.app (workspace + Studio)
Platform OperatorTalkIDE staff. Manages capacity, invite cascade, fatigue overrides, emergency brake, issue triage, waitlist invites. (Admin Console — UC-08004 — planned.)https://talkide.app/admin (planned)
App End User (audience of a published user app)Anyone visiting a user-published app (e.g. customers of wildwood-bakery.talkide.app). Has no TalkIDE account.https://<slug>.talkide.app

External systems

SystemUsed forTalkIDE’s dependency
Anthropic APIEvery Mara / subagent turnHard dependency. The platform gateway-proxy holds the raw ANTHROPIC_API_KEY; the agent runtime never sees it directly (see ADR-024). CLI mode in local dev uses Max-plan auth on the host.
StripePayment method on file, invoices, AI credit top-up, postpaid hosting charges, webhooksHard for billing. Test mode in production today — live-mode flip is a separate runbook. No Subscriptions; Customer + SetupIntent/PaymentIntent + invoices only. See UC-10.
MailgunTransactional email — password reset, waitlist confirmation, invite emailsHard for those flows. Sending subdomain mail.talkide.app (does not touch apex MX). Dev/test profiles send to /dev/null. See ADR-025.
DigitalOcean Kubernetes (talkide-prod, NYC3)Compute for TalkIDE platform pods, per-tenant worker pods, ephemeral build/test Jobs, and all user-app podsHard. Node pool s-4vcpu-8gb. Per-tenant-environment namespaces provisioned on demand. See ADR-015.
DigitalOcean Managed Postgres (two clusters)Cluster A talkide-prod-pg — control-plane DB (platform + session state). Cluster B talkide-dataplane-pg — data-plane, schema-per-app for user apps.Hard. Two physically separate PG 18 clusters. See ADR-023 and infrastructure.md.
DigitalOcean Spaces (talkide-prod-space)User-app uploads, generated content (PDFs, exports), platform backups/exports/logs/artifactsHard for any user app that does file I/O. S3-compatible API, prefix isolation per app.
DigitalOcean DNS (talkide.app)Apex + api. + wildcard *.talkide.app for user appsHard. Authoritative on ns{1,2,3}.digitalocean.com.
DigitalOcean Container Registry (registry.digitalocean.com/talkide)Built images for TalkIDE BE/FE, talkide-worker, the shared userapp build cache, and every published user appHard. Professional plan — unlimited repos.
GitLab (talkide group)Source repositories (talkide-be, talkide-fe, documentation, talkide-infra, talkide-worker, blog, docs) and manual-gated CI for the platform itselfHard for platform delivery. Not used for user-app source — those keep local .git/ only (ADR-013).
PorkbunDomain registrar for talkide.appSoft — registration only; DNS itself is delegated to DigitalOcean.
Self-hosted NFS (in-cluster)Per-project working tree (source + local .git/ history) shared between BE, worker pods and build JobsHard. Backed by DO Block Volume talkide-prod-nfs-vol. Managed NFS not yet available in NYC3.
End user’s browserRenders TalkIDE workspace, Studio, Project Explorer, and user-generated appsModern evergreen browsers; SSE via fetch parser (ADR-008).

What TalkIDE is not responsible for

  • Custom domains for published user apps. User apps are reachable only under <slug>.talkide.app in MVP. Bring-your-own-domain is post-alpha.
  • External Git remotes. TalkIDE-managed user projects keep local .git/ history but no push to GitHub/GitLab. A curated export feature is planned post-alpha.
  • Real-money payments today. Stripe runs in test mode; live-mode flip is a deliberate operational step (UC-10 runbook).
  • Live human technician support. Planned monetization feature; no model or UI yet.

Trust boundaries

Browser
  │  TLS

talkide.app (TalkIDE workspace, Studio, auth) — operated by TalkIDE
  │  REST + SSE (Bearer JWT)

api.talkide.app  →  TalkIDE BE pod  (control-plane, ns talkide)
  │  ├─ gateway-proxy ──► Anthropic API   (BE holds the raw API key)
  │  ├─ Stripe / Mailgun  (HTTPS, secrets in K8s)
  │  ├─ control-plane PG (cluster A, via PgBouncer)
  │  └─ K8s API ──► provisions per-tenant-environment namespaces

tenant-environment namespace (e.g. mirek-prod)
  │  talkide-worker pod  ── agent runtime, SSE, dispatches build/test Jobs
  │  (worker calls gateway-proxy; never holds the Anthropic key)

data-plane PG (cluster B, schema-per-app, self-host PgBouncer SCRAM)

Browser
  │  TLS

<uuid>.talkide.app   — per-project DEV preview (Mara-built code)
<slug>.talkide.app   — per-project PROD published (user-promoted code)
  │  user-defined REST → user-app BE pod → user-app schema (cluster B)

DO Spaces (per-app prefix) for blobs

The trust boundary that matters most: anything written into CLAUDE.md is shared with Anthropic as part of the LLM context. Only data with explicit user consent (salutation, team briefing) crosses it. See mara-context.md § Privacy principle.


Was this page helpful?

Thanks for the feedback.