Create a new tasks module with full CRUD operations, supporting both
regular tasks and etapes (phases). Implements task hierarchy with
parent-child relationships, assignees, and due dates. Includes database
schema with validation triggers, SQLC query generation, in-memory
repository implementation, HTTP handlers, view templates, and
comprehensive test coverage.
Update DashboardPage and DashboardContentSwap to receive the list of
tablos so the sidebar can display real project data. Extract tablo icon
palette logic into a new tabloicons package that maps hex colors to
presentation attributes (icon, background, foreground colors).
Update handlers to load tablos from the repository before rendering
dashboard views. Refactor TabloCardView to use icon presentation instead
of initials when available.
match
Instead of selecting icons based on tablo name length, compute the
closest matching icon from a predefined palette by comparing hex color
values. This ensures consistent icon-color pairing and better visual
harmony.
This commit moves project search filtering from the server to the
client.
Changes include:
- Remove `Query` field from `ListTablosInput` and related handlers
- Add French date formatting for project cards
- Convert search form to client-side filter with data attributes
- Add empty state message for no search results
- Update button border-radius from 0 to 0.7rem
- Increase air.toml build command to include Tailwind CSS generation
backend
Create the foundational structure for managing design-system CSS with
co-located sources and semantic tokens:
- Add `cmd/buildstyles` to concatenate ordered CSS sources into a single
shipped stylesheet
- Define semantic color and effect tokens in `internal/web/ui/base.css`
- Move primitive and catalog CSS sources from `static/css/` to
co-located locations under `internal/web/ui/`
- Update test contract to verify token presence and proper stylesheet
generation
- Regenerate `static/styles.css` with new semantic token layer and
source annotations
Drop the is_temporary boolean from the DB schema (new migration), types,
API routers/helpers/middleware, and all frontend components and tests.
Access control now relies solely on is_client.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
profiles.id has ON DELETE CASCADE from auth.users, so calling
auth.admin.deleteUser already removes the profile row. Only the
org soft-delete needs to happen explicitly.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Add isDeletingAccount ref to prevent double-tap race
- Guard against null session before calling API
- Set 15s timeout on delete request (API makes 3-4 Supabase round-trips)
- Log error to console and restore guard in finally block
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Use direct cast pattern consistent with rest of file
- Add console.warn/error logging for count query failure and rollback failures
- Move DELETE /me tests to end of suite to avoid ownerUser teardown ordering issue
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>