Commit graph

1291 commits

Author SHA1 Message Date
Arthur Belleville
965ec5e5ce
docs(16): create phase 16 tablo detail plan — 4 plans, 4 waves
Phase 16 delivers DETAIL-01/02/03/04: header restyling, kanban
tasks-section layout with server-side etape grouping, and files
table component. Ends with a browser verify checkpoint.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 23:20:49 +02:00
Arthur Belleville
36011fc8a3
docs(phase-16): add validation strategy 2026-05-16 23:08:43 +02:00
Arthur Belleville
73780323d2
docs(16): research phase domain 2026-05-16 23:07:57 +02:00
Arthur Belleville
30c446fc0e
docs(16): UI design contract 2026-05-16 23:02:25 +02:00
Arthur Belleville
dcb99fb19a
docs(16): add UI design contract for tablo detail phase
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 22:51:58 +02:00
Arthur Belleville
a6eace8364
docs(state): record phase 16 context session 2026-05-16 22:47:02 +02:00
Arthur Belleville
7f01453ca2
docs(16): capture phase context 2026-05-16 22:46:57 +02:00
Arthur Belleville
5708156dcf
docs(15): mark VALIDATION.md compliant after audit
All 3 DASH tests green with TEST_DATABASE_URL:
- TestTablosDashboard_Sidebar (DASH-01)
- TestTablosDashboard_ProjectCards (DASH-02)
- TestTablosDashboard_EmptyState (DASH-03)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 22:32:04 +02:00
Arthur Belleville
d5ce65a003
docs(15): add code review report 2026-05-16 22:28:50 +02:00
Arthur Belleville
716678cddd
docs(phase-15): update tracking after wave 2 2026-05-16 22:25:13 +02:00
Arthur Belleville
64ba8abbb0
fix(15-03): apply tablo detail restyle with correct AppLayout signatures
Merge conflict resolution had taken the old template signatures (pre-AppLayout).
Restored HEAD~1 signatures then applied the header/tab-nav restyle:
- Title row: md:text-3xl font-bold, Discussion + Invite action buttons
- Metadata row: created date, status badge, 0% progress bar
- Sticky purple-accent tab bar (Overview, Tasks, Files, Discussion, Events)
- All HTMX wiring and AppLayout wrapping preserved
2026-05-16 22:24:52 +02:00
Arthur Belleville
79039721c6
chore: merge executor worktree (worktree-agent-adcff3bb3254fb8c6) 2026-05-16 22:19:11 +02:00
Arthur Belleville
7d8036777e
docs(15-03): complete tablo detail restyle plan summary 2026-05-16 22:17:40 +02:00
Arthur Belleville
6953536dd8
feat(15-03): restyle tablo detail page header and tab nav to match reference design
- Replace plain back-link + title with structured header: title row + metadata row
- Title uses larger md:text-3xl font-bold style with inline-edit preserved
- Add Discussion and Invite action buttons in header (purple brand colors)
- Add metadata row: created date, hardcoded En cours status badge, 0% progress bar
- Replace plain slate tab nav with purple-accent tab bar (icon + label per tab)
- Tab active state: text-[#804EEC] border-[#804EEC]; inactive: text-[#667085]
- Tab bar is sticky (top-0 z-40) with horizontal scroll and hidden scrollbar
- Keep all HTMX attributes, hx-push-url, hx-target="#tab-content" logic unchanged
- tablo-title-zone, tablo-desc-zone, tablo-delete-zone elements retained
2026-05-16 22:15:49 +02:00
Arthur Belleville
50bd9a0133
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>
2026-05-16 21:50:15 +02:00
Arthur Belleville
c7a16dbcae
feat(15-03): wire AppLayout into all authenticated handlers and templates
- TablosListHandler: derives sidebarTablos from cardViews, calls TablosDashboard with activePath="/"
- TabloDetailHandler: fetches ListTablosByUser for sidebar, calls TabloDetailPage with activePath=""
- TabloUpdateHandler: fetches ListTablosByUser for non-HTMX error path
- renderTabloCreateError: derives errorSidebarTablos from errorCardViews
- TabloDiscussionTabHandler, TabloEventsTabHandler, TabloFilesTabHandler, TabloTasksTabHandler: fetch ListTablosByUser for non-HTMX full-page renders
- PlanningPageHandler: fetches ListTablosByUser, calls PlanningPage with activePath="/planning"
- AccountProvidersHandler: fetches ListTablosByUser, calls AccountProvidersPage with activePath="/"
- planning.templ: updated signature + switched to @AppLayout
- account_providers.templ: updated signature + switched to @AppLayout
2026-05-16 21:49:23 +02:00
Arthur Belleville
9c7b080f67
feat(15-03): restyle tablos.templ with AppLayout, TabloProjectCard, and EmptyState
- Updated TablosDashboard signature to accept activePath and tablos for AppLayout
- Replaced old @Layout call with @AppLayout (sidebar-based shell)
- Added TabloProjectCard component with project-card grid, colored avatar, tablo-title-zone, edit/delete icon buttons
- Replaced TablosEmptyState raw HTML with @ui.EmptyState component (ui-empty-state class)
- Updated TabloDetailPage signature with activePath and sidebarTablos params
- Updated TabloNotFoundPage signature with activePath and sidebarTablos params
- Both detail pages switch from @Layout to @AppLayout
2026-05-16 21:49:10 +02:00
Arthur Belleville
ae0ab0ca5b
docs(phase-15): update tracking after wave 1 2026-05-16 21:44:18 +02:00
Arthur Belleville
41cf96ae66
docs(15-02): complete AppLayout CSS foundation + sidebar components plan 2026-05-16 21:43:44 +02:00
Arthur Belleville
9b0d335329
feat(15-02): create app_layout.templ and app_layout_helpers.go with sidebar sub-components
- Create backend/templates/app_layout_helpers.go: sidebarNavItem struct, sidebarNavItemClass, isActivePath, sidebarNavItemID, sidebarPrimaryNavItems
- Create backend/templates/app_layout.templ: SidebarNavIcon, SidebarNavItemRow, SidebarProjectsSection, SidebarOrganizationFooter, DashboardSidebar, AppLayout
- templ generate and go build exit 0; all existing tests pass
2026-05-16 21:43:15 +02:00
Arthur Belleville
f533d53c74
feat(15-02): port sidebar + project-card CSS into app.css and register in tailwind
- Create backend/internal/web/ui/app.css with dashboard shell, sidebar, and project-card CSS ported verbatim from go-backend
- All color values use var(--...) design tokens — no hex colors
- Add @import "./internal/web/ui/app.css" to backend/tailwind.input.css
2026-05-16 21:41:58 +02:00
Arthur Belleville
140f400e10
docs(phase-15): update tracking after wave 0 2026-05-16 21:39:58 +02:00
Arthur Belleville
459892f31f
docs(15-01): complete Wave 0 test stubs plan — DASH-01/02/03 RED baseline 2026-05-16 21:39:11 +02:00
Arthur Belleville
7bea525c1b
test(15-01): add Wave 0 RED test stubs for DASH-01, DASH-02, DASH-03
- TestTablosDashboard_Sidebar: asserts dashboard-sidebar + sidebar-nav-shell in GET / body
- TestTablosDashboard_ProjectCards: asserts project-card in GET / body with a pre-inserted tablo
- TestTablosDashboard_EmptyState: asserts ui-empty-state in GET / body with zero tablos
- All three skip without TEST_DATABASE_URL; compile cleanly; existing TestTablos* tests unaffected
2026-05-16 21:38:50 +02:00
Arthur Belleville
13b6f525de
docs(15): create phase plan 2026-05-16 21:35:53 +02:00
Arthur Belleville
431096e4de
docs(15): resolve open questions and fix 15-03 edit-title wiring
- RESEARCH.md: rename '## Open Questions' to '## Open Questions (RESOLVED)';
  add [RESOLVED] markers to all three questions with verified answers.
  Q2 resolved: edit-title route confirmed via codebase, no single /edit route.
- 15-03-PLAN.md Task 1: add handlers_tablos.go to read_first; make edit
  icon button definitively use hx-get=/tablos/{id}/edit-title with
  hx-target="closest .tablo-title-zone"; remove open-ended href fallback
  discretion; add edit-title grep to acceptance criteria.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 21:33:16 +02:00
Arthur Belleville
8baf8a430f
docs(15): create phase plan — sidebar + project-card dashboard
3 plans across 3 waves:
- 15-01 (Wave 0): RED test stubs for DASH-01/02/03
- 15-02 (Wave 1): app.css CSS foundation + AppLayout templ component
- 15-03 (Wave 2): tablos.templ restyled + handler wiring + visual checkpoint

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 21:28:25 +02:00
Arthur Belleville
8422d82fc8
docs(15): research phase domain 2026-05-16 21:17:03 +02:00
Arthur Belleville
65c17561ae
docs(15): capture phase context 2026-05-16 21:08:44 +02:00
Arthur Belleville
8a34e5c79a
docs(14): add VALIDATION.md — phase is Nyquist-compliant
14 automated tests covering AUTH-UI-01/02/03. 3 manual-only items
(animated CSS, Roboto font render, HTMX browser swap) verified at
human checkpoint on 2026-05-16.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 20:44:04 +02:00
Arthur Belleville
dcbc05b642
test(14): add Nyquist validation tests for AUTH-UI-01/02/03
auth_login_test.go: LoginPage renders AuthLayout structure (login-screen,
auth-card-shell, brand-logo, h1, auth-body, divider-pill), HTMX form
attributes, password not echoed.

auth_components_test.go: AnimatedBackground exactly 35 elements,
GoogleButton configured/unconfigured variants, AuthDivider or-pill.

handlers_auth_test.go: extend configured provider tests to assert
class="gsi-material-button" on the anchor element (AUTH-UI-03).

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 20:43:31 +02:00
Arthur Belleville
9f0c92fc89
docs(14-02): complete plan summary and update state
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 19:29:10 +02:00
Arthur Belleville
6e64cfb3ed
chore(dev): watch CSS files in air and include Tailwind in rebuild cmd
Add css to air's include_ext so edits to internal/web/ui/*.css trigger a
rebuild. Add Tailwind build step to the air cmd so static/tailwind.css is
always up to date on reload. static/ remains excluded so the generated
output file doesn't cause a loop.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 19:25:55 +02:00
Arthur Belleville
70fe3848fb
fix(14-02): shrink Google button to content width
width: auto on a block element still fills the parent. Use width: max-content
so the button wraps its icon + label + padding only. Remove flex-grow: 1 on
the label span so it doesn't stretch within the now-natural-width button.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 19:24:10 +02:00
Arthur Belleville
6a58b2970a
fix(14-02): shrink Google button to natural width per Google spec
Google's gsi-material-button uses width: auto, not 100%. Replace width: 100%
/ max-width: 400px with width: auto + margin: 0 auto so the button sizes to
its content (icon + label + padding) and stays centered in the card.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 19:21:41 +02:00
Arthur Belleville
4624fb305a
fix(14-02): load Roboto font and fix Google button SVG icon sizing
Per Google's branding guidelines, the gsi-material-button requires Roboto
Medium. Add Google Fonts preconnect + stylesheet link to AuthLayout head.
Also add display:block + 100% dimensions to the SVG inside the icon
container to prevent inline baseline gaps.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 19:18:58 +02:00
Arthur Belleville
65e3dbfd03
feat(14-02): migrate auth_signup.templ to AuthLayout with ui.FormField inputs
- Replace Layout+Card pattern with AuthLayout("Create your account", csrfToken)
- Wire GoogleButton and AuthDivider into SignupPage body
- Replace raw <input> elements with @ui.FormField/@ui.Input design system components
- Password placeholder "12 characters minimum", autocomplete="new-password"
- Add signup-copy nav link ("Already have an account? Sign in") pointing to /login
- Preserve HTMX swap: hx-post="/signup" hx-target="#signup-form" hx-swap="outerHTML"
- Remove signupCardBody helper
2026-05-16 19:10:12 +02:00
Arthur Belleville
808eaecc85
feat(14-02): migrate auth_login.templ to AuthLayout with ui.FormField inputs
- Replace Layout+Card pattern with AuthLayout("Sign in to Xtablo", csrfToken)
- Wire GoogleButton and AuthDivider into LoginPage body
- Replace raw <input> elements with @ui.FormField/@ui.Input design system components
- Add signup-copy nav link ("Don't have an account? Sign up")
- Preserve HTMX swap: hx-post="/login" hx-target="#login-form" hx-swap="outerHTML"
- Remove loginCardBody, AuthProviderButtonsBlock, AuthProviderButtonControl helpers
- Update test assertions for new GoogleButton labels ("Sign in with Google" / disabled attr)
2026-05-16 19:10:08 +02:00
Arthur Belleville
51cb9bd895
docs(14-01): complete auth assets and components plan 2026-05-16 19:07:39 +02:00
Arthur Belleville
e4d5f96571
feat(14-01): create auth_components.templ and auth_layout.templ
- auth_components.templ: AnimatedBackground (35 elements, /static/logo_dark.png, no light/dark pairs), GoogleButton (a/button variant, English label 'Sign in with Google'), AuthDivider ('or' divider)
- auth_layout.templ: standalone HTML shell with .login-screen, @AnimatedBackground(), .card-wrap/.card-glow/.auth-card-shell, htmx.min.js only (no sortable/sse scripts)
- No auth.User param on AuthLayout (auth pages always unauthenticated)
- just generate exits 0, all Go tests pass
2026-05-16 19:06:07 +02:00
Arthur Belleville
cf116ff696
feat(14-01): copy logo assets and replace auth.css with full auth card + animation CSS
- Copy logo_dark.png and logo_white.png from go-backend/static into backend/static
- Replace minimal 62-line auth.css with 828-line extraction from go-backend/static/styles.css
- Sections: login-screen shell, animated background (bg-01..35, size/opacity utilities), card wrapper, card internals, gsi-material-button, legacy auth-provider controls, 66 keyframe definitions, animate-* utility classes
- Added display:block and text-decoration:none to .gsi-material-button for the anchor variant
- Does NOT include .app-shell or .dashboard-shell rules
2026-05-16 19:04:44 +02:00
Arthur Belleville
522c071550
docs(14): create phase plan
Plan 14-01: Auth foundation (logo assets, auth.css, auth_components.templ, auth_layout.templ)
Plan 14-02: Page migration (auth_login.templ, auth_signup.templ → AuthLayout + ui.FormField + nav links)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 19:00:57 +02:00
Arthur Belleville
5ed9291d76
docs(14): create phase plan for auth pages restyle
Two-wave plan: Plan 01 creates foundation (logo assets, full auth.css
replacement with animations, auth_components.templ, auth_layout.templ);
Plan 02 migrates auth_login.templ and auth_signup.templ to AuthLayout
with @ui.FormField inputs and cross-page nav links, closing AUTH-UI-01..03.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 18:58:59 +02:00
Arthur Belleville
848f7480a8
docs(14): UI design contract 2026-05-16 18:48:32 +02:00
Arthur Belleville
0d49c20e42
docs(14): add UI design contract for auth-pages restyle
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 18:40:46 +02:00
Arthur Belleville
d4a44631b7
docs(state): record phase 14 context session 2026-05-16 18:35:16 +02:00
Arthur Belleville
ba19e40482
docs(14): capture phase context 2026-05-16 18:35:11 +02:00
Arthur Belleville
0dac33b784
docs(phase-13): complete phase execution 2026-05-16 18:24:23 +02:00
Arthur Belleville
be84d1f803
test(13): add phase verification report 2026-05-16 18:18:26 +02:00
Arthur Belleville
9dcf628322
docs(13): add code review report 2026-05-16 18:10:17 +02:00