Commit Graph

70 Commits

Author SHA1 Message Date
Nathan Panchout
eac8cde272 (front) add video conference link generation in event modal
Implement the visio conference feature in the event modal:
- Add NEXT_PUBLIC_VISIO_BASE_URL env var for configurable base URL
- Create generateVisioRoomId() utility (xxx-xxxx-xxx format, a-z)
- Refactor VideoConferenceSection: button to create, link + remove
  when URL exists
- Hide visio pill when env var is not configured (feature flag)
- Add removeVisio i18n key in EN/FR/NL

The visio URL is stored via the standard ICS URL property, which
is already wired through useEventForm.toIcsEvent() and CalDavService.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 17:38:57 +01:00
Nathan Panchout
5c86f79192 Refactor EventModal into section components (#7)
* 🙈(tools) remove OpenSpec skills and commands from Git tracking

Remove .claude/skills/openspec-*/ and .claude/commands/opsx/ from
Git tracking while keeping them locally. Extends the previous
cleanup (d24eed9) that handled the openspec/ directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* (front) add EventModal section components and useEventForm hook

Extract modal sections into dedicated components (DateTimeSection,
RecurrenceSection, LocationSection, VideoConferenceSection,
AttendeesSection, DescriptionSection, InvitationResponseSection,
RemindersSection, StatusSection, AttachmentsSection) with shared
SectionRow and SectionPill layout components.
Add useEventForm hook to centralize form state management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ♻️(front) refactor EventModal to use extracted sections

Simplify EventModal by delegating to section components and
useEventForm hook. Replace alert() with addToast() for error
feedback, convert useCallback to useMemo for buildSummary in
RecurrenceEditor, and add missing organizer dependency in
useEventForm useEffect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* 💄(front) update scheduler styles for new modal design

Rework SCSS for EventModal, AttendeesInput, RecurrenceEditor,
and Scheduler. Move inline styles to CSS classes. Update
globals and frontend dependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:30:37 +01:00
Nathan Panchout
d24eed9cd1 🙈(tools) remove openspec/ from Git tracking
The openspec/ directory is now gitignored and removed from
the repository index while kept locally. This prevents
OpenSpec working artifacts from being pushed to GitHub.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 14:14:35 +01:00
Nathan Panchout
1ed0ba7206 🐛(front) fix timezone double conversion in scheduler display
Fix events displaying with +1h offset (e.g. 14h→15h) caused by
icsDateToJsDate() returning fake UTC (local.date) which then got
the browser offset applied again by dateToLocalISOString().

Changes:
- Return true UTC (icsDate.date) from icsDateToJsDate() instead of
  fake UTC (local.date)
- Add getDateComponentsInTimezone() using Intl.DateTimeFormat with
  formatter caching for correct cross-timezone write path
- Refactor jsDateToIcsDate() to use Intl instead of isFakeUtc flag
- Replace optimistic updates with refetchEvents() after modal save
  to avoid fake UTC leaking into the display path
- Align standalone helper jsDateToIcsDate() with adapter conversion
- Narrow useCallback dependencies in useSchedulerHandlers
- Remove dead code addDurationToDate()
- Add 42 timezone conversion tests covering DST transitions,
  cross-timezone round-trips, half-hour/45min offsets

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:25:34 +01:00
Nathan Panchout
9e982a8eb1 📝(front) add OpenSpec artifacts for timezone double conversion fix
Add proposal, design, specs and tasks for the fix-timezone-double-conversion
change. Documents the root cause (icsDateToJsDate returning fake UTC causing
double browser offset), the Intl.DateTimeFormat-based solution, and 40+
test scenarios covering DST, cross-timezone, half-hour offsets, and
round-trip conversions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:25:34 +01:00
Nathan Panchout
79f352b738 🔧(tools) update OpenSpec skills and commands
Update all OpenSpec OPSX skills and commands definitions
to their latest versions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:25:34 +01:00
Nathan Panchout
3fbd87145e 🎨(front) update cunningham theme tokens
Regenerate theme tokens from cunningham configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:51:49 +01:00
Nathan Panchout
a5117e385e ♻️(front) use DynamicCalendarLogo in app
Replace static logo divs with DynamicCalendarLogo component in:
- Header.tsx: header variant for main navigation
- index.tsx: both header and icon variants for home page
- calendar.tsx: header variant for calendar page

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:51:49 +01:00
Nathan Panchout
595059df68 (front) add DynamicCalendarLogo component
Create a React component that displays the calendar logo with
the current day number overlaid dynamically.

Features:
- Two variants: "header" (full logo) and "icon" (icon only)
- Day number positioned with CSS overlay
- Client-side rendering to avoid SSR hydration issues
- Translated alt text using i18n

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:51:49 +01:00
Nathan Panchout
2af4b892aa (front) add SVG assets for dynamic calendar logo
Add two SVG files for the calendar logo:
- cal_logotype_text_no_number.svg: full logo with "Calendriers" text
- cal_icon_no_number.svg: icon-only version

Both versions have no day number, allowing dynamic overlay.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:51:49 +01:00
Nathan Panchout
ffda528a00 (front) improve Scheduler UX and performance
- Enable sticky header by setting height: 100% on .ec
- Scroll to current time on calendar initialization
- Parallelize CalDAV event fetching with Promise.all
- Use event-handler-refs pattern for stable callbacks
- Import shared CalendarApi interface from types

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 15:42:49 +01:00
Nathan Panchout
1c8fd116df ♻️(front) reorganize calendar components into subfolders
- Move scheduler components (AttendeesInput, RecurrenceEditor,
  EventModal styles) to scheduler/
- Move left panel components (LeftPanel, MiniCalendar) to left-panel/
- Move CalendarList.scss to calendar-list/
- Simplify SchedulerToolbar component
- Update imports, exports and page layout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 15:42:49 +01:00
Nathan Panchout
92bea3fd96 📝(docs) archive calendar-central-design change
Archive completed OpenSpec change with all artifacts:
- proposal.md: Initial design requirements
- design.md: Architecture decisions
- specs/: calendar-theme and scheduler-toolbar specifications
- tasks.md: 34/34 tasks completed

Sync delta specs to main specs:
- openspec/specs/calendar-theme/spec.md
- openspec/specs/scheduler-toolbar/spec.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
9e7c6fbff1 🎨(front) update LeftPanel border style
Use contextual border token for consistency with design system.
Remove unused divider class.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
7d0072a7b3 🎨(front) reorder day header elements
Display day-of-week before day-of-month in calendar column headers
for better visual hierarchy.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
e2d80fbdde 🌐(front) add calendar navigation translations
Add calendar.navigation.previous/next keys for toolbar
accessibility labels in EN, FR, and NL.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
8799579606 ♻️(front) integrate custom toolbar in Scheduler
- Integrate SchedulerToolbar component above calendar container
- Disable native headerToolbar in useSchedulerInit
- Add toolbar state (currentView, viewTitle) to Scheduler
- Use datesSet callback to sync toolbar with calendar navigation
- Update CalendarContext to use CalendarApi type for better type safety
- Pass calendarRef to toolbar for API method access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
213d1d41c0 (front) add SchedulerToolbar component
Create custom React toolbar for EventCalendar replacing native toolbar:

- Today button to navigate to current date
- Previous/Next navigation buttons with icons
- Dynamic period title synced with calendar view
- Custom dropdown menu for view selection (Day/Week/Month/List)
- Full keyboard accessibility (Escape, Arrow keys, Enter, Tab)
- CalendarApi interface for type-safe calendar interactions
- Responsive layout with Cunningham design system

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
29ee4b8590 (front) add EventCalendar theme overrides
Create scheduler-theme.scss to align @event-calendar/core with
La Suite design system (Cunningham):

- Map --ec-* CSS variables to Cunningham tokens
- Hide native toolbar (replaced by custom React toolbar)
- Style today indicator with bordered frame (no fill)
- Style events with 6px border-radius, no shadow
- Style now indicator with brand-500 color
- Remove intermediate 30-min grid lines
- Unify header zone (ec-col-head + ec-all-day)
- Add border to grid body

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
c789762e47 🎨(front) update Cunningham design tokens
Regenerate Cunningham tokens with latest design system values.
This provides updated CSS variables for theming.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:00:21 +01:00
Nathan Panchout
e6b555c07a 🔧(tools) migrate OpenSpec commands to opsx and skills
Replace the old .claude/commands/openspec/ structure with the new
opsx commands and skills system for better spec-driven development
workflow.

- Remove old openspec commands (apply, archive, proposal)
- Add new opsx commands with enhanced capabilities
- Add Claude Code skills for openspec workflows
- Clean up AGENTS.md and CLAUDE.md from openspec instructions
- Remove openspec/AGENTS.md (no longer needed)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 17:00:41 +01:00
Nathan Panchout
32e00a2210 ♻️(front) improve React code quality and performance
- Remove all console.log debug statements from production code
- Fix useEffect dependency arrays (remove refs, fix dependency cycles)
- Add useMemo for sharedCalendars filtering in CalendarList
- Improve error handling in handleOpenSubscriptionModal
- Add proper cleanup pattern (isMounted) in CalendarContext
- Use i18n locale instead of hardcoded French in MiniCalendar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
aa7939b527 🐛(front) fix CalDavService return type
Fix return type for respondToInvitation method to properly
wrap response in data property as expected by CalDavResponse.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
8a253950cc 📝(docs) update project documentation
Add CLAUDE.md for AI assistant guidance. Add documentation
for PR split plan, implementation checklist, and recurrence
feature specifications.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
a96be2c7b7 📝(docs) add OpenSpec workflow
Add OpenSpec workflow for AI-assisted change proposals
including proposal templates, archive commands, and
project configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
40b7d66bff (front) add Playwright e2e tests
Add end-to-end tests for calendar functionality including
locale switching and calendar operations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
d1e313c88b 🎨(front) add home banner asset
Add banner image for home page display.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
f518478ef8 (front) add DavClient utility
Add DavClient utility for creating authenticated CalDAV
client instances with proper configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
375e0ddb39 🔥(front) remove open-calendar package
Remove deprecated open-calendar package. Functionality has
been migrated to src/features/calendar/services/dav with
improved architecture and TypeScript support.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
afb4e35b1d ♻️(front) update pages and app structure
Update calendar page to use new Scheduler and CalendarContext.
Update styles, error pages, and app wrapper for new components.
Minor updates to Header, Toaster and Feedback components.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
48062a9988 🔥(front) remove unused UI components and utilities
Remove deprecated UI components (breadcrumbs, circular-progress,
infinite-scroll, info, responsive) and unused hooks (useCopyToClipboard,
useLayout, RhfInput) that are no longer needed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
578375c60f ♻️(front) update component exports and configuration
Update component index exports for new Scheduler and
CalendarList. Update Next.js config and Dockerfile for
CalDAV dependencies.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
85465628e1 🔥(front) remove deprecated calendar components
Remove old CalendarView, CalendarList, EventModal and
CreateCalendarModal replaced by new Scheduler and
CalendarList implementations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
4faa131878 🎨(front) update theme and styles
Update theme customization hook and CalendarList styles
for improved visual consistency and dark mode support.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
8ce3848a6f ♻️(front) update auth components
Minor updates to LoginButton and LogoutButton components
for consistency with new design system.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
51033d7457 ♻️(front) update calendar API and types
Update API functions and types for subscription management
and iCal export. Add fetchApi improvements for error handling.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
a5c10b2ca9 ♻️(front) update LeftPanel component
Update LeftPanel to use new CalendarList and MiniCalendar
components with CalendarContext integration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
717029bd96 ♻️(front) refactor MiniCalendar component
Update MiniCalendar for integration with CalendarContext
and improved locale support for date navigation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
8be9b1db52 ♻️(front) refactor RecurrenceEditor component
Improve RecurrenceEditor with better RRULE parsing, support
for all recurrence patterns (daily, weekly, monthly, yearly)
and cleaner UI with Cunningham components.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
833d14d796 (front) add AttendeesInput component
Add component for managing event attendees with email
validation, autocomplete and participation status display.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
3c1fa693d6 (front) add main CalendarList component
Add CalendarList component for managing user calendars with
visibility toggles, color customization and CalDAV sync.
Replaces previous monolithic implementation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
fcfa56e4f3 (front) add CalendarList subcomponents
Add modular subcomponents for CalendarList including item
menu, list item, create/edit modal, delete confirmation
and subscription URL display modals.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
cfae08451a 🏷️(front) add CalendarList types and constants
Add TypeScript types for CalendarList component state and
props. Add color palette constants and custom hook for
managing calendar list state.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
034e8f5c79 (front) add main Scheduler component
Add Scheduler component integrating FullCalendar for event
display with day/week/month views, drag-drop support and
CalDAV synchronization via CalendarContext.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
884062658a (front) add Scheduler modals
Add EventModal for creating and editing events with support
for recurrence, attendees and all-day events. Add DeleteEventModal
with options for recurring event deletion scope.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
63e91b5eb5 (front) add Scheduler utilities and hooks
Add date formatting utilities and custom hooks for
Scheduler initialization and event handlers including
drag-drop, resize and click operations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
da8ab3140c 🏷️(front) add Scheduler types
Add TypeScript type definitions for Scheduler component
including event props, modal states, and handler signatures.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
d2e912409b 🌐(front) add calendar translations
Add internationalization strings for Scheduler, CalendarList,
event modals and calendar operations in French and English.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
cb07b77389 (front) add calendar hooks
Add useCalendars hook for CalDAV calendar management and
useCalendarLocale for locale-aware date formatting.
Remove obsolete modal hooks replaced by Scheduler.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00
Nathan Panchout
0ddb47d095 (front) add CalendarContext for state management
Add React context for managing calendar state including
selected calendars, events, CalDAV service instance and
synchronization status.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:56:21 +01:00