Commit graph

1400 commits

Author SHA1 Message Date
e19433fc74 Merge pull request 'go-htmx-gsd' (#1) from go-htmx-gsd into main
Some checks are pending
xtablo-ci / Checks (push) Waiting to run
Frontend Sourcemaps / upload-sourcemaps (push) Waiting to run
go-backend-ci / Check go-backend (push) Waiting to run
Reviewed-on: #1
2026-05-23 15:16:43 +00:00
Arthur Belleville
eaaec7a89d
style(planning): implement Month/Week/Day calendar views from sketch 005
Some checks are pending
xtablo-ci / Checks (pull_request) Waiting to run
go-backend-ci / Check go-backend (pull_request) Waiting to run
- Replace 14-day agenda list with three-view calendar (month/week/day)
- Add PlanningCalendar, CalendarDay, CalendarTimeEvent, MiniCalDay data structs
- Add BuildMonthCalendar, BuildWeekCalendar, BuildDayCalendar builder helpers
- Add MondayOf, PlanningMonthURL, PlanningWeekURL, PlanningDayURL URL helpers
- Handler now parses ?view=month|week|day with matching date params
- Month view: 7-col grid with event chips using tablo color via color-mix()
- Week/Day view: split layout with mini-month panel and hour timeline (07-20)
- Timeline events positioned via TopPx/HeightPx from start_time microseconds
- Append all calendar CSS to app.css (view-toggle, cal-grid, tl-* classes)
2026-05-18 16:56:44 +02:00
Arthur Belleville
63e7d65290
feat(phase-20): port tablo detail restyle to backend/
Phase 20 work was executed against go-backend/ (prototype) instead of
backend/ (production). This commit ports the Figma-aligned restyle to
the correct codebase.

Changes:
- tablos.templ: replace project-card-top header with tablo-detail-header,
  tablo-detail-avatar, tablo-detail-title; update tab bar to tablo-tab-bar;
  localise tab labels to French (Vue d'ensemble, Tâches, Fichiers,
  Discussion, Événements)
- tasks.templ: update KanbanBoard to tablo-kanban-board; KanbanColumn to
  tablo-kanban-column with new header/count/empty classes; TaskCard to
  card-style layout (task-card-top-row, task-card-title, task-card-delete)
- app.css: add sections 25–27 — tablo detail page, kanban board/columns,
  and task card (card appearance, hover states)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:31:05 +02:00
Arthur Belleville
efa9a85dd7
test(20): UAT diagnosed — Phase 20 work in wrong directory (go-backend vs backend) 2026-05-18 16:18:51 +02:00
Arthur Belleville
35a8a5051e
docs(phase-20): complete phase execution 2026-05-18 16:04:22 +02:00
Arthur Belleville
2e670b0346
test(20): persist human verification items as UAT 2026-05-18 16:04:09 +02:00
Arthur Belleville
efc8dc4c01
docs(20): add code review report 2026-05-18 16:00:57 +02:00
Arthur Belleville
77b9f8473b
docs(phase-20): update tracking after wave 2 2026-05-18 15:56:01 +02:00
Arthur Belleville
8970b91994
docs(20-03): complete tablo detail CSS restyle plan summary 2026-05-18 15:55:16 +02:00
Arthur Belleville
910c3b605d
feat(20-03): kanban board, task card, etapes section, files table CSS + task-list gap
- .tablo-kanban-board flex container with overflow-x auto
- .tablo-kanban-column 18rem wide with border-radius 0.75rem
- .tablo-kanban-column-header muted surface background
- .tablo-kanban-column-title, -task-count, -add-link, -empty rules
- .task-card column-flex with hover shadow and border-color transition
- .task-drag-handle opacity 0 at rest, opacity 1 on .task-card:hover
- .task-card-delete opacity 0 at rest, opacity 1 on .task-card:hover
- .task-card-top-row, .task-card-title helpers
- .task-list updated with gap 8px and padding 8px
- .tablo-etapes-section, .tablo-etape-row, .tablo-etape-name, .tablo-etape-count
- .tablo-files-table-wrapper with border-radius 12px and table header styles
- .task-row and .tasks-section unchanged (no CSS cascade regression)
2026-05-18 15:54:30 +02:00
Arthur Belleville
58710d6eba
feat(20-03): tablo detail header, metadata row, and tab bar CSS
- .tablo-detail-page outer container with 24px 32px padding
- .tablo-detail-header flex column with border-bottom
- .tablo-detail-title-row flex row for avatar + h1
- .tablo-detail-avatar 48x48 colored circle with border-radius 12px
- .tablo-detail-title at 1.75rem weight 600
- .tablo-metadata-row horizontal flex with gap 24px
- .tablo-meta-segment and .tablo-meta-progress helper rules
- .tablo-progress-bar with background var(--color-brand-primary) — NOT project-color
- .tablo-tab-bar and .tablo-tab-bar .tab-nav-item override
2026-05-18 15:53:51 +02:00
Arthur Belleville
b05f280089
docs(20-02): complete tablo detail templ components plan summary
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 15:52:04 +02:00
Arthur Belleville
a60de1fc7a
feat(20-02): replace TabloDetailPage stub with templ component + register tab route
- Remove stub templ.ComponentFunc from tablo_detail_view.go; real TabloDetailPage now comes from tablo_detail_templ.go
- Remove context/io/templ imports that were only used by the stub
- Register GET /tablos/{tabloID}/{tab} route in router.go after /tablos/{tabloID}
- All handler tests pass: TestGetTabloDetailPage_*, TestTabloDetailKanbanColumns, TestComputeTabloProgress, TestNewTabloDetailViewModel_*
2026-05-18 15:51:23 +02:00
Arthur Belleville
4ae19faac9
feat(20-02): TabloDetailPage templ component + GetTabloDetailTab handler
- Create tablo_detail.templ with 8 templ components: TabloDetailPage, TabloDetailHeader, TabloDetailTabBar, TabloDetailKanbanBoard, TabloDetailKanbanColumn, TabloDetailTaskCard, TabloDetailEtapesSection, TabloDetailSortableScript
- Tab links use hx-get + hx-target="#tab-content" + hx-push-url="true" per UI-SPEC interaction contract
- Each kanban column has hidden reorder form id="reorder-form-{status}" for Sortable.js onEnd
- Create tablo_detail_tab.go with GetTabloDetailTab handler for HTMX tab content swaps
- Tasks tab returns kanban board fragment; other tabs return "coming soon" placeholder
2026-05-18 15:51:17 +02:00
Arthur Belleville
27326f57d6
docs(20-01): complete tablo detail handler + view model plan summary
- TabloDetailViewModel, TabloDetailColumnView, TabloDetailEtapeView exported
- computeTabloProgress excludes etape tasks
- GetTabloDetailPage handler with IDOR mitigation
- GET /tablos/{tabloID} route registered
- Full test suite green (13 packages)
2026-05-18 15:47:28 +02:00
Arthur Belleville
3fc8aae7a0
feat(20-01): GetTabloDetailPage handler + GET /tablos/{tabloID} route registration
- tabloDetailRepository interface with ListTasksByTablo
- GetTabloDetailPage: auth check, UUID parse, ownership-scoped tablo lookup, task fetch, vm build, render
- router.go: mux.Get('/tablos/{tabloID}') registered before /edit route
- activePath='/tablos' so sidebar Tablos item stays highlighted
- Threat T-20-01 mitigated: findTabloByID filters by OwnerID from session
2026-05-18 15:46:30 +02:00
Arthur Belleville
9713cbd168
feat(20-01): add TabloDetailViewModel + computeTabloProgress + TabloDetailPage stub
- TabloDetailViewModel with Columns, Etapes, Progress fields
- TabloDetailColumnView, TabloDetailTaskView, TabloDetailEtapeView structs
- computeTabloProgress excludes etape tasks from computation
- NewTabloDetailViewModel builds 4 columns + etapes with child task counts
- TabloDetailPage stub emits tablo name + column status IDs + initTabloDetailSortable
2026-05-18 15:45:30 +02:00
Arthur Belleville
f24e1c4d35
test(20-01): add failing tests for TabloDetailViewModel + GetTabloDetailPage handler
- TestComputeTabloProgress_{Empty,AllDone,Half,EtapesIgnored}
- TestNewTabloDetailViewModel_{GroupsTasksByStatus,EtapesExcludedFromColumns,EtapesPopulated}
- TestGetTabloDetailPage_{Returns200,Returns404,Returns400,Unauthenticated}
- TestTabloDetailKanbanColumns
- TestGetTabloDetailPage_ContainsSortableScript
2026-05-18 15:44:53 +02:00
Arthur Belleville
20e0a02edc
docs(20): create phase 20 plan — tablo detail page + kanban restyle
3 plans in 2 waves: handler+viewmodel (wave 1), templ components + CSS
restyle in parallel (wave 2). Covers DETAIL-01 and TASK-01.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 15:29:41 +02:00
Arthur Belleville
e18bf66dbf
docs(20): research phase — tablo detail page + kanban restyle
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 15:21:53 +02:00
Arthur Belleville
e37b8c5855
docs(20): UI design contract 2026-05-18 15:16:38 +02:00
Arthur Belleville
9312a65ed9
docs(20): UI design contract for tablo detail & kanban restyle
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 15:08:48 +02:00
Arthur Belleville
4fdcc32ebe
fix(19): increase tablo card vertical spacing gap-3 → gap-5
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:36:19 +02:00
Arthur Belleville
53ea451d1c
fix(19): use pure Tailwind for grid progress bar — remove custom CSS classes causing empty bar
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:34:59 +02:00
Arthur Belleville
6b73c78d9d
fix(19): update stale dashboard tests — new view/filter/status class names
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:29:06 +02:00
Arthur Belleville
a575ab93c6
feat(19): list view as proper table — Projet/Statut/Créé le/Progression/Actions
- Two separate containers: #tablos-grid (card grid) and #tablos-table (table), toggled via .hidden
- TabloListRow: new templ for <tr> with icon+title, Actif/Archivé badge, date, progress bar, trash
- JS: setTablosView toggles hidden on both containers; filterTablos targets both article and tr elements
- Remove old .tablo-list-row / #tablos-list[data-view] CSS (no longer needed)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:24:45 +02:00
Arthur Belleville
90d43f98bc
fix(19): move edit+trash to same line as status pill
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:21:49 +02:00
Arthur Belleville
7864c39872
feat(19): tablo card — icon+title+status pill, date, progress, edit+trash
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:20:53 +02:00
Arthur Belleville
af8b4fa38f
fix(19): status badge and edit/trash on same line
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:18:52 +02:00
Arthur Belleville
f506ceeda6
feat(19): restructure tablo card — icon+title, status badge, edit+trash
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:18:05 +02:00
Arthur Belleville
6b0b4be670
fix(19): filter tabs use DB status (all/active/archived)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:13:54 +02:00
Arthur Belleville
3a864aa84e
feat(19): revamp tablos page — filter tabs, view toggle, card click nav
- Dashboard: French header "Mes Projets", underline-tab view toggle (grid/list), filter tabs (Tous/Pas commencé/En cours/Terminé) with JS client-side filtering
- Cards: display status derived from progress (À faire/En cours/Terminé), rounded-xl p-6, w-8 h-8 avatar, green-500 progress bar, dashed "Créé le" footer
- Click on card/row navigates to /tablos/{uuid} via event delegation (delete zone stops propagation)
- List view: single-column grid, rows show status + title + date + task count
- CSS: .view-tab and .filter-tab with .is-active state

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:11:31 +02:00
Arthur Belleville
e699129064
feat(19): show 'X/Y completed tasks' label on tablo cards
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 17:01:45 +02:00
Arthur Belleville
7388418aed
feat(19): restyle tablo cards to production design with X/Y task count
- TabloCardView gains DoneTasks/TotalTasks int fields; handler stores raw counts alongside Progress %
- TabloProjectCard: rounded-2xl card, border-[#EAECF0], purple-50 status badge, colored avatar initial (12x12 rounded-xl), calendar date row, Progression label + X/Y task count + purple-500 progress bar
- List row: matching pill badge + X/Y count
- All 7 TestTablosDashboard_* tests pass

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 17:00:51 +02:00
Arthur Belleville
2a835f52e9
docs(19-03): complete tablo list revamp plan 03 — toggle button and tests
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 16:34:09 +02:00
Arthur Belleville
161437828e
test(19-03): add LIST-01/02/03 test coverage for dashboard
- TestTablosDashboard_ProgressBar: asserts "Progression:" label and project-card-progress-row class
- TestTablosDashboard_ViewToggle: asserts view-toggle-btn class and data-view="grid" attribute
- TestTablosDashboard_StatusBadge: asserts "Active" badge and tablo-list-row dual-element structure
- All tests use unique email addresses; go build ./... exits 0
2026-05-17 16:33:36 +02:00
Arthur Belleville
3deb4f9595
feat(19-03): add view toggle button to TablosDashboard
- Add plain <button class="view-toggle-btn"> with inline SVG list icon and onclick JS
- data-view="grid" static attribute added to #tablos-list container
- .view-toggle-btn CSS block added to app.css (Section 20c)
- Tailwind CSS rebuilt to include view-toggle-btn class
- templ generate + go build exit 0
2026-05-17 16:33:02 +02:00
Arthur Belleville
4a0b42052d
docs(19-02): complete card visual revamp plan summary
- TabloProjectCard rebuilt with status badge, avatar initial, progress bar
- CSS Section 20b added: progress-row, list-row, data-view toggle rules
- Tailwind regenerated
2026-05-17 16:31:28 +02:00
Arthur Belleville
2b786e2014
feat(19-02): add progress-row and list-row CSS, rebuild Tailwind
- Added Section 20b to app.css: .project-card-progress-row, .project-card-progress-label
- Added .project-card-progress-bar (uses var(--color-accent) instead of --project-color)
- Added .tablo-card-wrapper (display:contents) for transparent grid wrapper
- Added .tablo-list-row (hidden by default), .tablo-list-row-title, .tablo-list-row-meta
- Added [data-view="list"] toggle rules for #tablos-list container
- Rebuilt static/tailwind.css with tailwindcss CLI
2026-05-17 16:30:56 +02:00
Arthur Belleville
4b254e9527
feat(19-02): rebuild TabloProjectCard with dual card+row structure
- Rewrote TabloProjectCard with outer article.tablo-card-wrapper (display:contents)
- Added .project-card child: status badge top-left, delete button top-right
- Avatar circle now shows initial letter from card.Tablo.Title
- Added calendar icon + formatted date in .project-date-row
- Added .project-card-progress-row with "Progression: X%" label and .project-card-progress-bar
- Added .tablo-list-row sibling (hidden by default) for list view toggle
- Added strconv and strings imports for Itoa and title-casing Status
2026-05-17 16:30:32 +02:00
Arthur Belleville
ae1798062e
docs(19-01): complete tablo list revamp data layer plan
- Add 19-01-SUMMARY.md with task commits, decisions, and next phase readiness
2026-05-17 16:28:53 +02:00
Arthur Belleville
47ba2f1797
feat(19-01): enrich TabloCardView with Progress field and wire batch progress query
- Add Progress int field to TabloCardView (D-05)
- Map row.Status into Tablo struct in TabloCardsFromUnreadRows
- Wire ListTabloProgressByIDs batch query in TablosListHandler (no N+1)
- Non-fatal error handling: progress defaults to 0 on query failure
2026-05-17 16:28:15 +02:00
Arthur Belleville
c1928e312f
feat(19-01): add tablo status column, batch progress query, and sqlc regen
- Add migration 0010_tablo_status.sql with reversible goose Up/Down
- Update all tablo SQL queries to include status column in SELECT/RETURNING/GROUP BY
- Add ListTabloProgressByIDs batch aggregation query (D-06)
- sqlc regenerated locally (files gitignored — regen via sqlc generate)
2026-05-17 16:27:30 +02:00
Arthur Belleville
c3b470a1a7
docs(19): create phase 19 tablo list revamp plans (3 plans, 3 waves)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 16:22:30 +02:00
Arthur Belleville
28e05b5fc1
docs(19): research tablo list revamp phase 2026-05-17 16:16:27 +02:00
Arthur Belleville
3542f3b105
docs(phase-18): complete phase execution — sidebar + header restyle approved
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 16:04:09 +02:00
Arthur Belleville
9ba650b345
feat(18): restyle sidebar and header to match production design
- Sidebar: Tailwind utilities, French labels (Aperçu/Tâches/Projets/Planning/Discussions/Fichiers), hr separators, collapse button on group hover, tablo list with circle icons, org footer with avatar + "1 membre"
- Header: 75px height, border-b #EAECF0, search input left, bell + avatar-dropdown right (no breadcrumb visible — retained sr-only for a11y + tests)
- Layout: flex instead of grid, dashboard-main no padding, dashboard-main-content wrapper at 2rem
- Tests updated for new search-input assertion

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 16:00:26 +02:00
Arthur Belleville
1952b95405
docs(18-03): complete PageHeader and avatar dropdown plan summary
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 15:35:29 +02:00
Arthur Belleville
9a70553cb0
feat(18-03): add page-header CSS, /settings stub route, and header tests
- Add page-header, breadcrumb, header-search-placeholder, header-icon-button, header-avatar-menu, header-avatar-dropdown CSS rules to app.css
- Regenerate tailwind.css with new page-header and avatar dropdown classes
- Add GET /settings stub route returning 200 with "Coming soon" content (D-06)
- Add page-header and breadcrumb assertions to TestTablosDashboard_Sidebar
- Add new TestTablosDashboard_Header test asserting page-header, header-avatar-menu, Dashboard breadcrumb, header-search-placeholder
2026-05-17 15:34:58 +02:00
Arthur Belleville
c190723538
feat(18-03): add PageHeader component and wire into AppLayout
- Add PageHeader templ component with three-zone layout (breadcrumb left, search placeholder center, bell/inbox/avatar right)
- Avatar dropdown uses native details/summary HTML (D-06, no Alpine.js)
- Logout form inside dropdown with CSRF token (T-18-03-01 mitigated)
- Remove Plan 01 breadcrumb/headerActions stubs from AppLayout body
- Wire @PageHeader call inside dashboard-main before children
- Add inline JS for avatar dropdown outside-click close behavior
2026-05-17 15:33:17 +02:00