Commit graph

110 commits

Author SHA1 Message Date
Arthur Belleville
b1e9d74857
fix(types): resolve typecheck errors after is_temporary removal
Some checks are pending
xtablo-ci / Checks (push) Waiting to run
Frontend Sourcemaps / upload-sourcemaps (push) Waiting to run
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-30 17:11:43 +02:00
Arthur Belleville
c56d5718b8
refactor: remove is_temporary flag across the entire codebase
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>
2026-04-30 17:04:11 +02:00
Arthur Belleville
0476a87afd
fix onboarding modal 2026-04-25 10:28:29 +02:00
Arthur Belleville
cc918407be
fix: stabilize lint and client portal flows 2026-04-19 18:02:27 +02:00
Arthur Belleville
cab790dd2a
Redirect clients to the clients app 2026-04-19 11:33:30 +02:00
Arthur Belleville
f02c36dbb7
feat: add client password invite flow 2026-04-18 11:09:04 +02:00
Arthur Belleville
e8044182d8
fix: resolve lint and formatting issues in apps/main
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 14:33:38 +02:00
Arthur Belleville
6379d8e2e2
refactor: update apps/main to import tablo views from shared package
- Add @xtablo/tablo-views workspace dependency to apps/main
- Update tablo-details.tsx to import from @xtablo/tablo-views and pass required props
- Remove inline EtapesSection and RoadmapSection functions (now in tablo-views)
- Update chat.tsx to import ChatMessages, useChat, useChatUnread from @xtablo/tablo-views
- Fix broken imports in DashboardTaskList, TabloOverviewSection, tablo.tsx, tasks.tsx
- Update kanban/index.ts to re-export from @xtablo/tablo-views
- Fix test files to import components from @xtablo/tablo-views
- Add is_client: false to test mock user objects

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 14:15:33 +02:00
Arthur Belleville
bc28194d3d
refactor: move tablo view components to packages/tablo-views
Moves kanban, gantt, section components, chat hooks and extracted
EtapesSection/RoadmapSection from apps/main into the new shared
packages/tablo-views package. Components that previously depended on
app-specific providers (UserStoreProvider, useIsReadOnlyUser, etc.) are
refactored to receive data/callbacks as props, keeping the package free
of apps/main dependencies.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 09:23:06 +02:00
Arthur Belleville
b7a6798cad
fix(chat): normalize REST messages, full-width layout, and UI cleanup
- Normalize snake_case REST API responses to camelCase in useChat so
  messages are correctly attributed after page reload
- Remove max-w-3xl from chat-ui messages and composer for full-width
- Remove discussion header/border so chat fills the tablo section
- Remove plan badge pills from settings page header
- Use org logo in NavigationBar avatar instead of first-letter fallback
- Persist plan announcement in localStorage instead of sessionStorage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:10:12 +02:00
Arthur Belleville
14688afdeb
feat(chat): add i18n support and filter self typing indicator
Add a `chat` i18n namespace (FR/EN) and replace all hardcoded strings
in chat components with useTranslation calls. Introduce a `labels` prop
on ChatProvider so chat-ui renders translated typing indicators,
placeholders, and aria labels. Also filter out typing events from the
current user on the client side.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 14:15:00 +02:00
Arthur Belleville
2eb7cc5183
fix(main): handle snake_case fields from REST API in ChatMessages
The chat REST API returns raw DB rows with snake_case fields
(user_id, created_at) while WS messages use camelCase. Handle
both to prevent Invalid Date errors from new Date(undefined).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 16:51:02 +02:00
Arthur Belleville
d9094855d4
feat(main): rewrite ChatMessages to use @xtablo/chat-ui
Replace chatscope implementation with ChatProvider, ChatMessageList,
and ChatComposer from @xtablo/chat-ui. Props interface unchanged.
Also fix unused Tag import in chat-ui layouts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 14:18:32 +02:00
Arthur Belleville
fe001b7fc2 feat(chat): improve chat UI with date separators, sender names, and message alignment
- Add shared ChatMessages component with date separators (Aujourd'hui, Hier, etc.)
- Show sender name and avatar on incoming messages
- Own messages aligned to the right, others to the left
- Show message timestamps on each message
- Typing indicator shows member names
- Optimistic messages shown with reduced opacity

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 17:32:13 +02:00
Arthur Belleville
3b1d8bd2e5 fix: make chat discussion fill full viewport height in tablo detail view
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 17:16:54 +02:00
Arthur Belleville
bb9550dd39
fix: resolve pre-existing type errors in test files blocking staging build
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 16:28:35 +02:00
Arthur Belleville
6081ada013 refactor(main): remove all Stream Chat dependencies and components
- Delete ChatProvider, ChannelPreview, CustomChannelHeader, hooks/channel.ts
- Replace TabloDiscussionSection with chatscope-based implementation using useChat
- Update tablo-details.tsx to use useChatUnread instead of useTabloDiscussionUnread
- Remove streamToken field from User type in UserStoreProvider
- Remove useSignUpToStream from shared auth hooks
- Remove stream-chat and stream-chat-react packages
- Remove stream-chat-react CSS import from main.tsx
- Clean up all streamToken references from test mocks and helpers
- Update chat.test.tsx and tablo-details.layout.test.tsx for new implementation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 13:49:57 +02:00
Arthur Belleville
bb0aa5e28e feat(chat): rewrite chat page with chatscope UI and custom hooks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 13:27:46 +02:00
Arthur Belleville
d209504292
fix: reduce mobile sidebar width from w-48 to w-40 and always show expanded on mobile overlay
On mobile, the sidebar was 192px wide (w-48) and could appear collapsed (icons-only)
depending on prior desktop state. This introduces effectivelyCollapsed to always force
expanded mode when the mobile overlay is open, and uses a narrower w-40 (160px) width
to reduce screen coverage on small devices like iPhone SE (375px).

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 08:24:37 +02:00
Arthur Belleville
67e98d19b2
fix: update Layout test for new mobile sidebar transition classes
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:28:12 +02:00
Arthur Belleville
ec8f81e205
fix: improve mobile responsiveness for task/kanban pages
- KanbanBoard: responsive grid (1 col mobile, 2 col tablet, 4 col desktop)
- TaskModal: bottom-sheet style on mobile with scroll, touch-friendly close
- Touch targets: enforce 44px minimum on all interactive elements (buttons,
  checkboxes, kebab menus, add buttons, view tabs)
- TabloTasksSection: responsive padding and stacking header layout
- DashboardTaskList: simplified mobile grid hiding non-essential columns
- InlineTaskCreate: larger touch targets on action buttons

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:24:05 +02:00
Arthur Belleville
6aea504667
fix: improve mobile responsiveness for tablo/project management pages
- Make project card grids responsive (single column on mobile, 2 cols on sm)
- Remove fixed w-56 card width so cards fill available space on mobile
- Convert modals to bottom-sheet style on mobile (items-end, rounded-t-2xl)
- Add max-h-[90vh] + overflow-y-auto to modals for small screens
- Increase touch targets to min 44px on action buttons and interactive elements
- Refactor DashboardTaskList rows from rigid grid to flexible layout
- Remove min-w-[600px] wrapper that forced horizontal scroll on task list
- Make tab navigation horizontally scrollable instead of wrapping on mobile
- Reduce left padding on etape child tasks for narrow screens
- Stack modal action buttons vertically on mobile (flex-col-reverse)
- Add responsive text sizing for headings and dates
- Fix share dialog invite input to stack on mobile

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:22:46 +02:00
Arthur Belleville
3daf720447
fix: improve mobile sidebar UX with smooth transitions and proper touch handling
Add backdrop overlay with tap-to-dismiss, enforce 44px touch targets on the
toggle button, auto-close on route change, clean up z-index layering, remove
duplicate translate logic, and respect safe-area insets for standalone PWA mode.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:22:23 +02:00
Arthur Belleville
8e6e8b6d71
style(pwa): fix biome formatting in hook and banner
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:54:46 +02:00
Arthur Belleville
8e41b031aa
feat(pwa): add InstallBanner component with tests
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:51:38 +02:00
Arthur Belleville
0b0d7b6cf0
Block app access until organizations add a paid plan 2026-03-24 21:41:38 +01:00
Arthur Belleville
63edd59c57
feat: add PlanAnnouncement component to display active subscription plan notifications 2026-03-16 09:31:26 +01:00
Arthur Belleville
1a0d77857e
Fix missing Stripe price config 2026-03-16 08:41:02 +01:00
Arthur Belleville
c481f2c577
Retry signup tests with Stripe CLI 2026-03-15 19:09:35 +01:00
Arthur Belleville
2d965c524e
Fix organization modal flows 2026-03-08 22:44:02 +01:00
Arthur Belleville
8fc463313d
Fix trial upsell modal logic 2026-03-08 21:59:38 +01:00
Arthur Belleville
992b846a85
Fix CircleCI docker node pull 2026-03-08 21:28:44 +01:00
Arthur Belleville
d0820ebbf1
Implement solo teams founder billing 2026-03-08 19:29:44 +01:00
Arthur Belleville
cd327c8b79
Move dispos, split types d'appels, and also put the tablo invitations in the top bar 2026-03-07 19:12:19 +01:00
Arthur Belleville
354831c82f
Some work towards initial release 2026-03-07 15:45:49 +01:00
Arthur Belleville
28d0b938fa
Fix various issues 2026-03-04 22:09:10 +01:00
Arthur Belleville
7c15ff3275
Organization support 2026-03-04 21:47:44 +01:00
Arthur Belleville
93f8a3ef1e
fix(topbar): apply dark mode styles to profile dropdown 2026-02-24 11:49:26 +01:00
Arthur Belleville
737cd5f073
feat(ui): improve dark mode surfaces and planning event actions 2026-02-24 11:47:27 +01:00
Arthur Belleville
421676c3f0
feat(tasks): roadmap click-to-create with due date and quick status update 2026-02-24 10:55:16 +01:00
Arthur Belleville
349ba4ae7c
Add biweekly view mode to Gantt chart roadmap
- Add view mode dropdown with "Semaine" (7 days) and "2 semaines" (14 days)
- Biweekly mode shows compact cards (smaller padding, no tablo badge, shorter labels)
- Navigation steps by 1 or 2 weeks based on current view mode
- Dynamic column count and card sizing based on view config

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-24 10:44:46 +01:00
Arthur Belleville
c5ed1f0bf0
Redesign Roadmap view as Gantt chart with weekly timeline
- Create shared GanttChart component with week navigation, day columns,
  today indicator, and positioned task cards
- Task cards color-coded by status (blue/orange/purple/green)
- Replace list-based RoadmapView in Tasks page with GanttChart
- Replace list-based RoadmapSection in Tablo Details page with GanttChart

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-24 10:17:58 +01:00
Arthur Belleville
2b09dd4093
Add due_date field to tasks and implement roadmap feature
- Add due_date column to tasks table with Supabase migration
- Update database types and tasks_with_assignee view
- Add DatePicker to TaskModal for setting due dates
- Display due dates on KanbanTaskCard, list view, and Etapes section
- Enable Roadmap tab on both Tasks page and Tablo Details page
- Add RoadmapView components with timeline grouped by Etape
- Highlight overdue dates in red across all views

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-24 10:07:47 +01:00
Arthur Belleville
bec48cfab6
Replace project letter icons with color-mapped Lucide icons across all pages
- Map each tablo color to a dedicated Lucide icon (Zap, Leaf, Gem, Flame, etc.)
- Apply contrast-aware icon color: dark gray for light backgrounds (yellow, cyan), white for all others
- NavigationBar: always use gray icon for sidebar consistency; active nav item uses light purple background (#804EEC tint)
- Apply icons to NavigationBar, tablos, tablo-details, tablo (dashboard), and tasks pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 19:44:09 +01:00
Arthur Belleville
7acb79b3de
Improve UI consistency: chat purple theme, page headers, Discussions title
- Set purple (#804EEC) as default ChannelBadge background color
- Update ChannelPreview active state to purple highlight (was blue)
- Add "Discussions" title header to chat page
- Standardize all page headers to text-2xl font-bold (tablos, tasks, files, planning)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 19:25:34 +01:00
Arthur Belleville
d126fe84dc
Restyle navbar/topbar with light/dark themes and restore invite functionality
- NavigationBar: add light/dark theme support with adaptive text colors
- TopBar: match navbar background color in both themes
- main.css: make navbar-background/darker CSS variables theme-aware
- tablo-details: restore working invite button with full share dialog

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 19:06:46 +01:00
Arthur Belleville
080d3a98f3
Remove action card selected state and add greeting translations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-23 16:22:01 +01:00
Arthur Belleville
ba2045fb40
Add disabled state and badge to ActionCard, disable Invite card
- ActionCard: new disabled and badge props; disabled state shows opacity-50, cursor-not-allowed, prevents clicks
- Badge renders inline next to the label (e.g., "Bientôt")
- Invite Team card: permanently disabled with "Bientôt" badge visible without clicking
- Remove onInviteTeam prop and toast callback

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-02-23 16:14:46 +01:00
Arthur Belleville
6b39f175b3
Apply purple #804EEC theme to tablo events section
- Create event button: solid #804EEC purple
- Date badge: #F4F3FF background with #7F56D9 text (matching events page)
- Loading spinner: purple instead of blue
- Empty state button: solid purple instead of outline

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-02-22 09:54:20 +01:00
Arthur Belleville
afe47554c8
Apply linter formatting to components, locales, and pages
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-02-21 22:02:22 +01:00