docs: start milestone v2.0 collaboration planning social sign-in
This commit is contained in:
parent
6e49771788
commit
0d23d94700
2 changed files with 69 additions and 47 deletions
|
|
@ -1,15 +1,27 @@
|
|||
# Xtablo — Go + HTMX Rewrite
|
||||
# Xtablo — Go + HTMX Product
|
||||
|
||||
## What This Is
|
||||
|
||||
A full rewrite of the Xtablo product from a JS/Turbo monorepo (`apps/main`, `apps/external`, `apps/api`, …) into a single Go server with HTMX-driven UI. v1 focuses on the authenticated Tablos workflow only; other surfaces (booking, client portal, admin, chat, billing) come in later milestones. Built for a developer who wants a simpler, more durable stack and is using this rewrite as a deliberate pivot.
|
||||
A Go + HTMX version of Xtablo centered on tablos as collaborative workspaces. v1 established the authenticated Tablos workflow with tasks, files, worker, and deploy scaffolding; v2 adds the collaboration and planning layer around each tablo: native messaging, etapes, scheduled events, personal planning, and Google/Apple sign-in.
|
||||
|
||||
Built for a developer who wants a simpler, durable product stack: one Go server, Postgres, server-rendered UI, and no managed chat provider.
|
||||
|
||||
## Core Value
|
||||
|
||||
**A user can sign in and run the Tablos workflow — create tablos, manage their tasks (kanban), and attach files — without a JS framework.**
|
||||
**A user can sign in and run the Tablos workflow — organize work, attach files, discuss, and plan scheduled events — without a JS framework or managed chat provider.**
|
||||
|
||||
If everything else fails, this must work end-to-end on a single Go binary backed by Postgres and an S3-compatible bucket.
|
||||
|
||||
## Current Milestone: v2.0 Collaboration, planning, and social sign-in
|
||||
|
||||
**Goal:** Add the collaboration and scheduling capabilities that make tablos useful for ongoing work, while keeping the Go+HTMX/server-owned architecture.
|
||||
|
||||
**Target features:**
|
||||
- Native per-tablo chat/messaging with real-time delivery, persisted in Postgres, and no third-party chat vendor
|
||||
- Etapes as one-level wrappers around tasks: a task may belong to one etape, and an etape cannot itself have a parent
|
||||
- Google and Apple sign-in flows integrated into the existing server-managed session model
|
||||
- Individual planning view for each authenticated user, including scheduled events that belong to tablos like tasks do
|
||||
|
||||
## Requirements
|
||||
|
||||
### Validated
|
||||
|
|
@ -20,26 +32,26 @@ If everything else fails, this must work end-to-end on a single Go binary backed
|
|||
|
||||
### Active
|
||||
|
||||
<!-- v1 hypotheses. See REQUIREMENTS.md for the canonical list with REQ-IDs. -->
|
||||
<!-- v2 hypotheses. See REQUIREMENTS.md for the canonical list with REQ-IDs. -->
|
||||
|
||||
- [ ] Built-in email/password auth with server-managed sessions (no third-party auth)
|
||||
- [ ] Tablo CRUD (list, create, view, edit, delete) scoped to the owning user
|
||||
- [ ] Kanban tasks attached to a tablo (columns, ordering, CRUD)
|
||||
- [ ] File attachments on a tablo via S3-compatible storage (R2)
|
||||
- [ ] Background worker for async jobs (e.g. signed URL refresh, future emails)
|
||||
- [ ] Deployable as a single container to a single VPS/Cloud Run-style host
|
||||
- [ ] Existing users can continue using email/password sessions while new users can sign in with Google or Apple
|
||||
- [ ] Tablo detail pages support native discussions/messages persisted in Postgres
|
||||
- [ ] Real-time message delivery works without a managed messaging provider
|
||||
- [ ] Users can organize tasks under one-level etapes inside a tablo
|
||||
- [ ] Users can create, edit, view, and delete scheduled events attached to tablos
|
||||
- [ ] Each authenticated user has an individual planning view aggregating their events
|
||||
|
||||
### Out of Scope
|
||||
|
||||
<!-- Explicit boundaries. -->
|
||||
|
||||
- **Chat / messaging** — Stream Chat + Durable Object worker dropped; not load-bearing for v1
|
||||
- **Managed chat/messaging providers** — no Stream Chat, Ably, Pusher, Firebase Realtime Database, or equivalent for v2 chat
|
||||
- **Stripe / billing** — defer monetization until product loop is validated
|
||||
- **Public booking widget** — `apps/external` rewrite not in v1 (may return in a later milestone)
|
||||
- **Client portal** — `apps/clients` magic-link experience deferred
|
||||
- **Admin app** — `apps/admin` internal tooling deferred
|
||||
- **Notes / Etapes / Events sub-features** inside a Tablo — only Tasks + Files in v1
|
||||
- **Third-party auth providers** — explicitly built-in only; no Clerk/Auth0/Lucia
|
||||
- **Notes / rich documents** inside a Tablo — not part of this milestone
|
||||
- **Managed auth platforms** — no Clerk/Auth0/Lucia; Google and Apple are identity providers only, with Xtablo still owning users and sessions
|
||||
- **Mobile / Expo app** — out of scope for this rewrite
|
||||
- **Supabase** as a runtime dependency — Postgres only; Supabase Auth / RLS replaced by Go-side authz
|
||||
- **The existing `go-backend/` directory** — treated as scratch; new code lives in a fresh `backend/` Go package
|
||||
|
|
@ -51,15 +63,19 @@ If everything else fails, this must work end-to-end on a single Go binary backed
|
|||
- Visuals will also change — no requirement to mirror the existing UI; Tailwind + HTMX patterns drive the new look.
|
||||
- `go-backend/` already contains real scaffolding (router, sqlc, air, tailwind input). It is *not* the foundation — a fresh `backend/` package will be created.
|
||||
- Developer is comfortable in Go and wants a low-dependency, server-rendered stack going forward.
|
||||
- v2 UI can stay functional and plain; the user will provide a more polished visual design later. The milestone should focus on working behavior and clean integration points.
|
||||
|
||||
## Constraints
|
||||
|
||||
- **Tech stack**: Go (server + templates) + HTMX + Tailwind + Postgres + sqlc — no third-party auth, no JS framework, no managed BaaS
|
||||
- **Auth**: Server-managed sessions only (signed/HTTP-only cookies), no JWTs from external providers
|
||||
- **Tech stack**: Go (server + templates) + HTMX + Tailwind + Postgres + sqlc — no JS framework, no managed BaaS
|
||||
- **Auth**: Server-managed sessions remain authoritative; Google/Apple sign-in may verify external ID tokens but must end by issuing Xtablo's own session cookie
|
||||
- **Chat**: No third-party chat provider; messages and read state live in Postgres, with real-time delivery handled by the Go app
|
||||
- **Storage**: Files in S3-compatible object storage (Cloudflare R2 to start)
|
||||
- **Architecture**: One web server binary + one background worker (same repo, possibly same binary with subcommand)
|
||||
- **Deploy target**: Single VPS / container — no Kubernetes
|
||||
- **Scope discipline**: v1 ships the Tablo workflow only; resist scope creep from JS feature inventory
|
||||
- **Planning**: Events belong to tablos, but each individual user can access their own planning view
|
||||
- **Etapes**: One level only — a task can have at most one parent/wrapper, and a parent cannot itself have a parent
|
||||
- **Scope discipline**: v2 adds collaboration and planning only; billing, booking, portal, admin, notes, and mobile remain deferred
|
||||
|
||||
## Key Decisions
|
||||
|
||||
|
|
@ -72,6 +88,10 @@ If everything else fails, this must work end-to-end on a single Go binary backed
|
|||
| v1 = Tablos workflow only (Tasks + Files), defer chat/billing/booking/portal/admin | Focus the rewrite around the load-bearing user loop first | — Pending |
|
||||
| Single binary + background worker, single VPS deploy | Matches the "simpler stack" thesis; avoid orchestration cost early | — Pending |
|
||||
| User-in-the-loop on Postgres schema for each domain | Schema is changing from JS version; explicit review before sqlc generation | — Pending |
|
||||
| v2 chat is native, not vendor-backed | User explicitly does not want third-party chat; Postgres + Go should be enough for the first real-time version | — Pending |
|
||||
| Google/Apple are identity providers only | Preserve server-owned users/sessions while allowing social sign-in | — Pending |
|
||||
| Etapes are one-level wrappers around tasks | Matches the requested mental model and avoids recursive planning complexity | — Pending |
|
||||
| Planning is individual, events remain tablo-scoped | Lets users see their schedule while preserving tablos as the source of work context | — Pending |
|
||||
|
||||
## Evolution
|
||||
|
||||
|
|
@ -94,6 +114,7 @@ This document evolves at phase transitions and milestone boundaries.
|
|||
|
||||
- **Phase 1: Foundation** — Completed 2026-05-14. Fresh `backend/` Go package boots a web server, renders an HTMX-driven base layout, connects to local Postgres with goose migrations. FOUND-01..FOUND-05 satisfied; user-approved manual walkthrough. Two inline justfile/tailwind fixes during UAT (commit `fix(01): guard sqlc on empty queries and correct tailwind paths`).
|
||||
- **Phase 7: deploy-v1** — Completed 2026-05-15. Multi-stage Dockerfile (assets→builder→distroless nonroot), docker-compose.prod.yaml with 4 services (postgres/web/worker/caddy), Caddyfile with `{$DOMAIN}` TLS, README runbook covering first-deploy/rollback/incident. DEPLOY-01..DEPLOY-05 satisfied. 3 UAT items (Docker build, compose config, live smoke test) pending on a Docker-equipped machine.
|
||||
- **Milestone v2.0 started: Collaboration, planning, and social sign-in** — Started 2026-05-15. Scope: native per-tablo chat, one-level etapes, Google/Apple sign-in, and individual planning with tablo events.
|
||||
|
||||
---
|
||||
*Last updated: 2026-05-15 after Phase 7 completion*
|
||||
*Last updated: 2026-05-15 after starting milestone v2.0*
|
||||
|
|
|
|||
|
|
@ -1,51 +1,45 @@
|
|||
---
|
||||
gsd_state_version: 1.0
|
||||
milestone: v1.0
|
||||
milestone_name: milestone
|
||||
status: milestone_complete
|
||||
last_updated: "2026-05-15T17:31:44.922Z"
|
||||
milestone: v2.0
|
||||
milestone_name: Collaboration, planning, and social sign-in
|
||||
status: planning
|
||||
last_updated: "2026-05-15T18:07:28.641Z"
|
||||
last_activity: 2026-05-15
|
||||
progress:
|
||||
total_phases: 7
|
||||
completed_phases: 7
|
||||
total_plans: 28
|
||||
completed_plans: 28
|
||||
percent: 100
|
||||
total_phases: 0
|
||||
completed_phases: 0
|
||||
total_plans: 0
|
||||
completed_plans: 0
|
||||
percent: 0
|
||||
---
|
||||
|
||||
# STATE
|
||||
|
||||
**Project:** Xtablo Go+HTMX Rewrite
|
||||
**Milestone:** v1 — Tablos workflow
|
||||
**Project:** Xtablo Go+HTMX Product
|
||||
**Milestone:** v2.0 — Collaboration, planning, and social sign-in
|
||||
**Created:** 2026-05-14
|
||||
|
||||
## Project Reference
|
||||
|
||||
See: `.planning/PROJECT.md` (updated 2026-05-14)
|
||||
See: `.planning/PROJECT.md` (updated 2026-05-15)
|
||||
|
||||
**Core value:** A user can sign in and run the Tablos workflow — create tablos, manage their tasks (kanban), and attach files — without a JS framework.
|
||||
**Current focus:** Phase 07 — deploy-v1
|
||||
**Core value:** A user can sign in and run the Tablos workflow — organize work, attach files, discuss, and plan scheduled events — without a JS framework or managed chat provider.
|
||||
**Current focus:** Defining v2.0 requirements and roadmap
|
||||
|
||||
## Current Position
|
||||
|
||||
Phase: Not started (defining requirements)
|
||||
Plan: —
|
||||
Status: Defining requirements
|
||||
Last activity: 2026-05-15 — Milestone v2.0 started
|
||||
|
||||
## Phase Status
|
||||
|
||||
| # | Phase | Status |
|
||||
|---|-------|--------|
|
||||
| 1 | Foundation | ✓ Complete |
|
||||
| 2 | Authentication | ✓ Complete — VERIFIED PASS (2026-05-14) |
|
||||
| 3 | Tablos CRUD | ✓ Complete — All 3 plans done, TABLO-01..06 closed, verified 2026-05-15 |
|
||||
| 4 | Tasks (Kanban) | ◷ In Progress — Plans 01-02 done |
|
||||
| 5 | Files | ○ Pending |
|
||||
| 6 | Background Worker | ○ Pending |
|
||||
| 7 | Deploy v1 | ○ Pending |
|
||||
|
||||
## Active Phase
|
||||
|
||||
**Phase 4: Tasks (Kanban)** — In progress. Plans 01-03 done (Wave 0 foundation + Wave 1 vertical slice + Wave 3 inline edit + reorder). Plan 04 pending.
|
||||
No v2.0 phases defined yet. Previous v1.0 phase history is preserved in `.planning/PROJECT.md`, `.planning/ROADMAP.md`, and `.planning/phases/`.
|
||||
|
||||
## Verification Record
|
||||
|
||||
| Phase | Status | Score | Report |
|
||||
|-------|--------|-------|--------|
|
||||
| 2 | PASS | 6/6 | `.planning/phases/02-authentication/02-VERIFICATION.md` |
|
||||
No v2.0 verification records yet.
|
||||
|
||||
## Decisions
|
||||
|
||||
|
|
@ -145,3 +139,10 @@ See: `.planning/PROJECT.md` (updated 2026-05-14)
|
|||
|
||||
---
|
||||
*Last updated: 2026-05-15 after Phase 4 Plan 03 complete (Wave 3 — inline task edit + drag-and-drop reorder, all 9 TestTask* tests active)*
|
||||
|
||||
## Current Position
|
||||
|
||||
Phase: Not started (defining requirements)
|
||||
Plan: —
|
||||
Status: Defining requirements
|
||||
Last activity: 2026-05-15 — Milestone v2.0 started
|
||||
|
|
|
|||
Loading…
Reference in a new issue