docs(15-03): complete plan 03 summary — AppLayout wired to all authenticated pages
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c7a16dbcae
commit
50bd9a0133
1 changed files with 118 additions and 0 deletions
118
.planning/phases/15-dashboard-tablos/15-03-SUMMARY.md
Normal file
118
.planning/phases/15-dashboard-tablos/15-03-SUMMARY.md
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
---
|
||||
phase: 15-dashboard-tablos
|
||||
plan: "03"
|
||||
subsystem: backend/templates/handlers
|
||||
tags: [htmx, templ, sidebar, dashboard, project-card, applayout, wave-2]
|
||||
dependency_graph:
|
||||
requires: [15-02]
|
||||
provides: [TablosDashboard-AppLayout, TabloProjectCard, TablosEmptyState-ui, TabloDetailPage-AppLayout, TabloNotFoundPage-AppLayout, PlanningPage-AppLayout, AccountProvidersPage-AppLayout]
|
||||
affects:
|
||||
- backend/templates/tablos.templ
|
||||
- backend/templates/planning.templ
|
||||
- backend/templates/account_providers.templ
|
||||
- backend/internal/web/handlers_tablos.go
|
||||
- backend/internal/web/handlers_planning.go
|
||||
- backend/internal/web/handlers_discussion.go
|
||||
- backend/internal/web/handlers_events.go
|
||||
- backend/internal/web/handlers_files.go
|
||||
- backend/internal/web/handlers_account.go
|
||||
tech_stack:
|
||||
added: []
|
||||
patterns:
|
||||
- AppLayout replacing @Layout on all authenticated pages
|
||||
- TabloProjectCard article.project-card grid item with tablo-title-zone
|
||||
- ui.EmptyState for no-tablo state
|
||||
- ListTablosByUser fetched per non-HTMX page render to populate sidebar
|
||||
- sidebarTablos derived from cardViews in TablosListHandler (no extra DB call)
|
||||
key_files:
|
||||
created: []
|
||||
modified:
|
||||
- backend/templates/tablos.templ
|
||||
- backend/templates/planning.templ
|
||||
- backend/templates/account_providers.templ
|
||||
- backend/internal/web/handlers_tablos.go
|
||||
- backend/internal/web/handlers_planning.go
|
||||
- backend/internal/web/handlers_discussion.go
|
||||
- backend/internal/web/handlers_events.go
|
||||
- backend/internal/web/handlers_files.go
|
||||
- backend/internal/web/handlers_account.go
|
||||
decisions:
|
||||
- "TabloDetailPage and all tab-handler non-HTMX paths pass activePath=\"\" (empty) so no sidebar nav item shows as active on tablo detail pages — dashboard is not the active page when inside a tablo"
|
||||
- "TablosListHandler derives sidebarTablos from existing cardViews slice instead of a separate ListTablosByUser call (avoids extra DB query on the most-visited route)"
|
||||
- "TabloNotFoundPage uses activePath=\"\" and sidebarTablos=[]sqlc.Tablo{} since the not-found path is reached before user context is available in some cases"
|
||||
- "planning.templ and account_providers.templ import backend/internal/db/sqlc directly — needed to type the []sqlc.Tablo parameter"
|
||||
- "TabloCard kept unchanged (required by OOB fragment responses: TabloCardWithOOBFormClear, delete/edit swap fragments reference TabloCard)"
|
||||
metrics:
|
||||
duration: ~20min
|
||||
completed: "2026-05-16"
|
||||
tasks_completed: 2
|
||||
files_modified: 9
|
||||
---
|
||||
|
||||
# Phase 15 Plan 03: AppLayout Wiring + Tablo Dashboard Project Cards Summary
|
||||
|
||||
AppLayout wired into all authenticated pages; tablo dashboard restyled with a project-card grid using TabloProjectCard (colored avatar, tablo-title-zone for inline edit, edit/delete icon buttons, creation date) and ui.EmptyState for the zero-tablo state.
|
||||
|
||||
## Tasks Completed
|
||||
|
||||
| Task | Name | Commit | Files |
|
||||
|------|------|--------|-------|
|
||||
| 1 | Restyle tablos.templ — project-card grid, EmptyState, AppLayout wiring | 9c7b080 | backend/templates/tablos.templ |
|
||||
| 2 | Update handlers + planning/account_providers templates to use AppLayout signatures | c7a16db | handlers_tablos.go, handlers_planning.go, handlers_discussion.go, handlers_events.go, handlers_files.go, handlers_account.go, planning.templ, account_providers.templ |
|
||||
|
||||
## Acceptance Criteria Verification
|
||||
|
||||
### Task 1
|
||||
- `templ generate ./...` exits 0: PASSED
|
||||
- `go build ./...` exits 0: PASSED
|
||||
- `grep -c "AppLayout" backend/templates/tablos.templ` returns 6 (>= 2): PASSED
|
||||
- `grep -c "ui.EmptyState" backend/templates/tablos.templ` returns 2 (>= 1): PASSED
|
||||
- `grep -c "templ TabloProjectCard" backend/templates/tablos.templ` returns 1: PASSED
|
||||
- `grep -c "project-card" backend/templates/tablos.templ` returns 5 (>= 1): PASSED
|
||||
- `grep -c "activePath" backend/templates/tablos.templ` returns 8 (>= 3): PASSED
|
||||
- `grep -c "Color.Valid" backend/templates/tablos.templ` returns 2 (>= 1): PASSED
|
||||
- `grep -c "CreatedAt.Time.Format" backend/templates/tablos.templ` returns 1: PASSED
|
||||
- `grep -c "edit-title" backend/templates/tablos.templ` returns 2 (>= 1): PASSED
|
||||
- No href-only edit link on TabloProjectCard: PASSED (edit icon uses hx-get)
|
||||
|
||||
### Task 2
|
||||
- `templ generate ./...` exits 0: PASSED
|
||||
- `go build ./...` exits 0: PASSED
|
||||
- `grep -c "sidebarTablos" backend/internal/web/handlers_tablos.go` returns 8 (>= 2): PASSED
|
||||
- `grep -c "ListTablosByUser" backend/internal/web/handlers_planning.go` returns 2 (>= 1): PASSED
|
||||
- `grep -c "AppLayout" backend/templates/planning.templ` returns 1: PASSED
|
||||
- `grep -c "AppLayout" backend/templates/account_providers.templ` returns 1: PASSED
|
||||
- No `@Layout(` in tablos.templ, planning.templ, account_providers.templ: PASSED (all 0)
|
||||
- `go test ./internal/web/... -run TestTablos -count=1` exits 0: PASSED
|
||||
- `go test ./... -count=1` exits 0 (all tests skip or pass): PASSED
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Additional Handlers Updated (Rule 1 - Bug fix)
|
||||
|
||||
**Issue:** After updating TabloDetailPage and TablosDashboard signatures, `go build` failed on call sites in handlers_discussion.go, handlers_events.go, handlers_files.go, and handlers_account.go — these were not listed in the plan's `files_modified` frontmatter but required updates to compile.
|
||||
|
||||
**Fix:** Applied signature update + ListTablosByUser fetch to all affected call sites.
|
||||
|
||||
**Files modified:** handlers_discussion.go, handlers_events.go, handlers_files.go, handlers_account.go
|
||||
|
||||
This is a Rule 3 (blocking issue) auto-fix — the changed signatures made compilation impossible without updating all call sites.
|
||||
|
||||
## Known Stubs
|
||||
|
||||
None — all data is wired. TabloProjectCard renders real tablo data from the DB. TablosEmptyState renders with a functional "New tablo" button. The sidebar project list in AppLayout is populated by ListTablosByUser.
|
||||
|
||||
## Threat Flags
|
||||
|
||||
T-15-03-01 (tablo.Color injection into style attribute) is the only new threat surface introduced in this plan. It is already in the plan's threat model with disposition `mitigate`. The mitigation (isValidCSSColor validation in TablosCreateHandler and TablosUpdateHandler before DB write) was present prior to this plan. No new unmitigated threat surface was introduced.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- backend/templates/tablos.templ modified with TabloProjectCard, AppLayout: VERIFIED
|
||||
- backend/templates/planning.templ uses AppLayout: VERIFIED
|
||||
- backend/templates/account_providers.templ uses AppLayout: VERIFIED
|
||||
- backend/internal/web/handlers_tablos.go sidebarTablos wired: VERIFIED
|
||||
- backend/internal/web/handlers_planning.go ListTablosByUser called: VERIFIED
|
||||
- Commit 9c7b080 exists: VERIFIED (git log)
|
||||
- Commit c7a16db exists: VERIFIED (git log)
|
||||
- templ generate + go build + go test all exit 0: VERIFIED
|
||||
Loading…
Reference in a new issue