What this context does
Owns the lifecycle of a Project — the user’s web app that Mara builds. Project = the unit at which we provision a working tree (NFS), a deterministic port pair, a per-app DB, a K8s namespace and a public URL.
Scope boundary
- Owns:
Projectentity, status state machine, scaffold, slug validation, archival. - Owns scaffolding side effects: per-project NFS subdirectory creation,
.talkide/plugin rsync,project.ymlwrite. - Does not own: build/deploy of the project (Stopa B — see ADR-017,
ADR-019, ADR-021);
conversations on the project (UC-04); versions (
ProjectVersionis owned here but applied via the deploy service).
Main entities
PROJECT — id, tenantId, name, description, status (DRAFT/BUILDING/LIVE/
UPDATED/PAUSED/ARCHIVED), previousStatus, url, accent, 4× tech stack columns,
timestamps. PROJECT_VERSION — versionNumber, description, status, appliedAt.
Use cases
| UC | What it does |
|---|---|
| UC-03001 | List Projects — paginated, sorted, status-filtered |
| UC-03002 | Create Project — slug + scaffold + .talkide/project.yml write |
| UC-03003 | Project Detail |
| UC-03004 | Update Project |
| UC-03005 | Archive Project |
| UC-03006 | Restore Project |
| UC-03007 | Delete Project |
Component diagram
{/* Image missing: UC-03 Project Management — Component View (../../assets/diagrams/uc03Components.svg) */}
Dependencies on other contexts
- UC-02 Tenant Management — every Project belongs to a Tenant.
- UC-04 Conversation — Conversations are scoped to a Project; archived projects can’t start new conversations.
- UC-05 Workspace Activity — activity feed is per-project.
- UC-07 Project Explorer — files/DB explorer reads from the project’s NFS subdir + per-app DB.
- Build / Deploy (ADR-017,
ADR-019) — applying a
ProjectVersiontriggersBuildService→AppDeployer→ ingress reconcile.
Cross-cutting
- Slug reservation list is enforced at Create Project time — see CLAUDE.md root § Reserved slugs.
- Deterministic ports — local dev only:
BE = 8090 + project.id,FE = 5200 + project.id, read by plugin scripts viayqfrom.talkide/project.yml(see ADR-011). Cloud (Stopa B) doesn’t use these — every user app gets its own namespace and standard ports.
Was this page helpful?
Thanks for the feedback.