Calendar
A sovereign calendar with three view modes, drag-and-drop scheduling, and ICS import/export. No Google Calendar dependency — all data stays on your server.
View Modes
Switch between views using the toggle in the header.
| View | Layout | Interaction |
|---|---|---|
| Month | 7-column grid, adjacent-month days at 35% opacity | Click a day to select; double-click to create an event |
| Week | Time gutter (48px) + 7 day columns, 60px per hour, 24 rows | Drag events to reschedule; double-click a time slot to create |
| Day | Single column, same 60px/hour layout | Same drag-and-drop and double-click behavior |
Navigation: ChevronLeft / ChevronRight arrows move by month, week, or day. The Today button resets all three anchors. Week starts on Monday.
Event Types
Events are merged from three data sources:
| Type | Color | Source |
|---|---|---|
| Task | #3b82f6 blue | Tasks with a dueDate from the task system |
| Meeting | #8b5cf6 purple | Documents with "Meeting Notes:" in the title |
| Calendar | #10b981 green | Calendar events from the Go backend |
| Overdue task | #ef4444 red | Non-complete tasks past their due date |
Creating Events
Double-click any date (month view) or time slot (week/day view) to open the New Event dialog.
| Field | Options |
|---|---|
| Title | free text |
| Date | pre-filled from the clicked slot |
| Start / End time | time pickers |
| Type | Calendar Event, Task, or Meeting |
| Recurrence | None, Daily (30 copies), Weekly (12 copies), Monthly (6 copies) |
Recurring events generate N separate copies, each created as an individual API call.
Drag and Drop
In week and day views, grab any task or calendar event and drag it vertically. The hour delta is computed as Math.round(dragOffsetY / 60). On release, the event's start time is updated via the appropriate API (calendar update or task edit).
Event Detail Popover
Click any event to open its detail popover showing title, date, time range, and status. Task and calendar events have Edit and Delete buttons. Meeting docs are read-only.
Edit mode reveals inline fields for title, start time, and end time.
ICS Import & Export
- Import: Click the upload icon in the header. Select a
.icsfile. The server parses VEVENT components (summary, dtstart, dtend, description, rrule) and inserts them as calendar events. Returns{ imported: N }. - Export: Click the download icon. The server generates a
telemore-calendar.icsfile with all your events formatted as iCalendar.
CalDAV Sync
Sync with external calendar apps (Apple Calendar, Thunderbird) via CalDAV:
- Go to Settings → Calendar
- Click Generate CalDAV Password
- Copy the CalDAV URL, username, and password into your calendar app
Selected Date Panel
When a date is selected, a panel below the calendar lists all events for that day with color dot, title, time, and type chip. Clicking any event opens its detail popover.