- Drop the "Open design questions (Phase 1)" section — answered in docs/design.md. - Replace "Tech stack: TBD by inventor" with the actual stack (Go + pgx + html/template + HTMX, msupabase schema projax, Dokploy). - Replace "Worker preferences: inventor / coder shifts" with the current state (PRD landed, Phase 1 implementation underway, Phase 2 and 3 deferred per docs/design.md). - Point readers at docs/design.md as the live spec, and add a layout map so a fresh agent knows where each concern lives. No code touched; this is the last commit in the Phase 1 branch before merge to main per head's review (msg #1775).
3.2 KiB
3.2 KiB
projax — Project Instructions
Purpose
Data backbone for m's complete self-management — projects (digital + physical + strategic + life themes), tasks, lifecycle, milestones. Multiple interfaces consume it. No interface is canonical; each is a view.
Memory group_id: projax
Live spec: docs/design.md (PRD, schema, migration plan, deferred phases)
Architecture principles
- Model first, interfaces second. The data model is the asset; UIs are replaceable.
- First-class non-code projects. Greenhouse construction, household chores, career positioning, sport goals — same model as code projects.
- No CLI required. m has explicitly opted out of CLI-first. Interfaces are visual / API / Otto-mediated.
- Subsumes existing scattered state. mai.projects (adapter view today), Gitea issues, CalDAV tasks, mBrian topics. Migration not greenfield isolation.
- Otto is a consumer, not an owner. Otto-PWA renders projax data; otto coordinates work based on projax; otto does not define projax.
Tech stack (Phase 1)
- Backend: Go single binary.
pgxfor Postgres.html/template+ HTMX (CDN), no JS build step. Static assets and migrations bundled withembed. - Database: msupabase, schema
projax(new). Viewprojax.items_unifiedreads acrossprojax.*+mai.projects. RLS off for v1 (single-user, Tailscale-only). - Hosting: Dokploy on mlake, domain
projax.msbls.de, Tailscale-only. - Tests:
go test ./...againstSUPABASE_DATABASE_URL(skips when unset).
Layout
cmd/projax/ main entrypoint (pool, migrate, serve)
db/ migrations (embedded) + runner + integration tests
store/ pgx-backed data access
web/ handlers, templates, static
deploy/dokploy.yaml reference manifest for projax.msbls.de
docs/design.md PRD — the source of truth for behaviour
Branch strategy
main= production-deployablefeat/*/fix/*— short-lived- No
devbranch initially (small project) --no-ffmerges to main
Status
- PRD landed (
docs/design.md, 2026-05-15) — schema, lifecycle, interface contracts settled. - Phase 1 underway: schema + path trigger + adapter view + Go server + tree/detail/new/classify pages + Docker/Dokploy + README all on a feature branch.
- Phase 2 (CalDAV + Gitea ingest) and Phase 3 (Excalidraw / MCP / Otto-PWA) are scoped in
docs/design.mdbut not started.
When a phase-1 follow-up surfaces (auth, hiding mai.projects test rows, mBrian topic-hub auto-link, …), file it against docs/design.md §8 first, then split into commits.
Out of scope (still)
- Multi-user
- Mobile-first / responsive (desktop browser + Otto-PWA cover)
- Public exposure
- Generic SaaS-product instincts
- CLI surface (m has explicitly opted out)
Refs
docs/design.md— live spec (this is the source of truth)mai.projectsschema (msupabase) — primary current state (read-only adapted viaprojax.items_unified)- mBrian conventions (topic-hub pattern) — relevant for non-code project tracking, deferred to Phase 3
- otto session 2026-05-15 — inventory of where project data lives today, justifying this project's existence
~/.claude/CLAUDE.md§ Git Strategy, Channel Routing, Memory Protocol