go-htmx-gsd #1

Merged
arthur merged 558 commits from go-htmx-gsd into main 2026-05-23 15:16:44 +00:00
3 changed files with 126 additions and 10 deletions
Showing only changes of commit c45e96d610 - Show all commits

View file

@ -14,7 +14,7 @@
|---|-------|------|--------------|
| 8 | Social Sign-in | Google sign-in creates/links local users and issues existing Xtablo sessions; Apple sign-in is disabled | AUTH-08..13 |
| 9 | Etapes | Tasks can be grouped under one-level etapes without breaking the kanban model | ETAPE-01..06 |
| 10 | Events | Tablos have scheduled events with CRUD, validation, and authorization | EVENT-01..05 |
| 10 | 1/4 | In Progress| |
| 11 | Individual Planning | Users can view their own event agenda across tablos | PLAN-01..04 |
| 12 | Native Tablo Chat | Each tablo has persisted discussion with real-time delivery and no managed chat provider | CHAT-01..06 |

View file

@ -2,15 +2,15 @@
gsd_state_version: 1.0
milestone: v2.0
milestone_name: Collaboration, planning, and social sign-in
status: ready_to_execute
last_updated: "2026-05-15T22:18:38.208Z"
last_activity: 2026-05-15 -- Phase 10 planning complete
status: executing
last_updated: "2026-05-15T22:29:24.395Z"
last_activity: 2026-05-15
progress:
total_phases: 5
completed_phases: 2
total_plans: 13
completed_plans: 9
percent: 69
completed_plans: 10
percent: 77
---
# STATE
@ -28,11 +28,11 @@ See: `.planning/PROJECT.md` (updated 2026-05-15)
## Current Position
Phase: 10 (events) — PLANNED
Plan: 0 of 4
Phase: 10 (events) — EXECUTING
Plan: 2 of 4
Status: Ready to execute
Last activity: 2026-05-15 -- Phase 10 planning complete
Resume file: .planning/phases/10-events/10-01-PLAN.md
Last activity: 2026-05-15
Resume file: .planning/phases/10-events/10-02-PLAN.md
## Phase Status

View file

@ -0,0 +1,116 @@
---
phase: 10-events
plan: 01
subsystem: events
tags: [events, postgres, sqlc, htmx, templ]
requires:
- phase: 09-etapes
provides: Tablo detail navigation patterns and HTMX tab fragments reused for the Events tab
provides:
- Events table with local date and time fields scoped to tablos
- SQLC create, fetch, and month-range list queries for events
- Server-rendered Events tab with month grid and inline create form
- Event create validation for required fields and end-after-start time ordering
affects: [tablo-detail, events, planning, calendar]
tech-stack:
added: []
patterns:
- "EventsDeps injected through NewRouter alongside existing feature deps"
- "Server-rendered HTMX tab fragment refreshes the whole Events tab after create"
- "Local event_date/start_time/end_time stored as Postgres date/time values"
key-files:
created:
- backend/migrations/0008_events.sql
- backend/internal/db/queries/events.sql
- backend/internal/web/handlers_events_test.go
- backend/internal/web/handlers_events.go
- backend/templates/events.templ
- backend/templates/events_forms.go
modified:
- backend/internal/web/router.go
- backend/cmd/web/main.go
- backend/templates/tablos.templ
- backend/internal/web/handlers_tablos.go
- backend/internal/web/handlers_files.go
key-decisions:
- "Use local date/time columns rather than timestamptz for scheduled event display."
- "Refresh the entire Events tab after create to keep month navigation and event rows consistent."
- "Keep event access scoped through loadOwnedTablo and parent-scoped queries."
patterns-established:
- "Event handlers parse YYYY-MM, YYYY-MM-DD, and HH:MM into pgtype values at the web boundary."
- "Calendar data is built in Go and rendered by templ as a 42-cell month grid."
requirements-completed: [EVENT-01, EVENT-03, EVENT-04, EVENT-05]
duration: ~20min
completed: 2026-05-15
---
# Phase 10: Events Plan 01 Summary
**Tablo-scoped event creation with local date/time storage and a server-rendered month calendar**
## Performance
- **Duration:** ~20 min
- **Started:** 2026-05-15T22:05:00Z
- **Completed:** 2026-05-15T22:28:58Z
- **Tasks:** 2
- **Files modified:** 20
## Accomplishments
- Added the `events` table, event SQLC queries, and generated DB accessors.
- Added authenticated Events routes for tab display, inline creation, canceling the create form, and POST create.
- Extended the tablo detail page with an Events tab that renders a month grid and created event titles.
- Added DB-backed handler coverage for rendering, create success, invalid end time validation, and ownership denial.
## Task Commits
Each task was committed atomically:
1. **Task 1: Add RED coverage for create-and-list calendar slice** - `4fbd960` (test)
2. **Task 2: Implement event creation and month listing** - `0bfe8cf` (feat)
## Files Created/Modified
- `backend/migrations/0008_events.sql` - Creates the event schema, constraints, and indexes.
- `backend/internal/db/queries/events.sql` - Adds create, fetch, and month-range list queries.
- `backend/internal/web/handlers_events.go` - Adds event calendar rendering and create handlers.
- `backend/templates/events.templ` - Renders the Events tab, month grid, and create form.
- `backend/templates/events_forms.go` - Provides event form and calendar view models/helpers.
- `backend/templates/tablos.templ` - Adds the Events tab to the tablo detail surface.
- `backend/internal/web/router.go` - Wires event routes and `EventsDeps`.
- `backend/cmd/web/main.go` - Injects event dependencies into the router.
- `backend/internal/web/*_test.go` - Updates router construction and adds event handler tests.
## Decisions Made
- Events store `event_date`, `start_time`, and nullable `end_time` as local Postgres date/time types to avoid timezone conversion in the calendar.
- The create flow refreshes the whole `#events-tab` fragment after success so the calendar, month controls, and form slot stay synchronized.
- Event list/create authorization goes through `loadOwnedTablo`, matching files and etapes ownership behavior.
## Deviations from Plan
None - plan executed as written.
## Issues Encountered
None.
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
The event schema, router dependency, month calendar, and create form are in place. Plan 10-02 can build directly on this surface by adding owned-event edit, update, and delete handlers plus inline form fragments.
---
*Phase: 10-events*
*Completed: 2026-05-15*