Calendar | Cine Power Planner

Calendar

Schedule shoots, track events, and sync with external calendars

Overview

The Calendar feature provides a visual timeline for planning and tracking production schedules. View all shoots across projects, manage events, and export to Google Calendar, Outlook, or any iCalendar-compatible app via .ics files or one-way import URLs.

Requirements

Functional Requirements

IDRequirementAcceptance CriteriaPrioritySource
REQ-CAL-001The system shall provide a global calendar view showing events from all projectsOpen Calendar → month grid or Gantt shown; events from all projects color-coded; empty state → "No events" messageMustcalendar
REQ-CAL-002The system shall provide a per-project calendar tab with shoot, travel, prep, and wrap daysOpen project → Calendar tab → shows events; create shoot day → appears on date; create travel/prep/wrap days supportedMustuseGlobalCalendar
REQ-CAL-003The system shall support month view and Gantt (horizontal timeline) viewToggle view → month grid shows events; switch to Gantt → horizontal bars per project; events clickable in both viewsMustuseGlobalCalendar
REQ-CAL-004The system shall allow creating events with title, start/end dates, location, and notesClick date → event form; fill title+dates+location+notes; save → event appears; validation on empty title or end < startMustuseGlobalCalendar
REQ-CAL-005The system shall detect and visually warn about double-booked dates across projectsTwo projects on same date → conflict icon shown; hover → tooltip lists conflicting projects; calendar day highlightedMustuseGlobalCalendar
REQ-CAL-005aThe system shall expire a conflict once its overlap window has passedTwo projects overlapped last month → conflict absent from the panel and from the event chips; overlap ending today → still shownMustuseGlobalCalendar
REQ-CAL-006The system shall support exporting events as .ics files and generating one-way import URLs for Google and OutlookClick Export → .ics downloads or an import URL opens; file/URL valid in Apple Calendar, Outlook, GoogleShouldcalendarExportService
REQ-CAL-007The system shall support importing .ics files, skipping entries that already existSelect .ics file → parsed; import confirmed → new entries added; re-import of the same file adds nothing. Dedup is silent — the review list does NOT mark which entries are duplicatesShouldCalendarImportModal + mergePeriods
REQ-CAL-008The system shall support configurable shoot reminders — any whole number of days from 1 to 365, defaulting to 1 and 7 — via push/browser notificationsSet reminder → saved; time reaches threshold → notification fires; dismiss → removed; click → navigates to eventShoulduseGlobalCalendar
REQ-CAL-009The system shall display event cards with project name, color coding, dates, location, and crewClick date → event card shown; project name + color visible; location displayed if set; crew names listedMustuseGlobalCalendar
REQ-CAL-010The system shall provide a global calendar view aggregating events from all active projectsNavigate to calendar → all project events shown; color-coded by project; click event → navigates to projectMustuseGlobalCalendar

Non-Functional Requirements

IDRequirementMetricPriority
NFR-CAL-001Calendar view shall render within 300ms for ≤200 eventsRender timeShould
NFR-CAL-002Date picker and event forms shall be accessible via keyboardWCAG 2.1 AAMust

Data Requirements

  • Required fields: Event title, start date
  • Optional fields: End date, location, notes, event type (shoot/travel/prep/wrap)
  • Persistence: Stored on the project object in IndexedDB → cloud sync
  • Color coding: Derived from project color assignment

Constraints & Limits

  • Available to all tiers (Free and Pro)
  • .ics import/export works offline
  • Google/Outlook import URLs open the respective web client in a new tab — they do not require an account on the Cine Power Planner side

Offline Behavior

  • Calendar views fully available offline
  • .ics file export works offline
  • One-way Google/Outlook import URLs require network connectivity to open the target calendar web app
  • Push reminders require service worker and prior push subscription

Dependencies


Accessing the Calendar

Click Calendar in the sidebar. Two views are available:

ViewDescription
Global CalendarAll events across all projects on one timeline
Project CalendarEvents specific to a single project (in workspace)

The header on a phone (v0.648.5)

Below 768 px the calendar header carries a single More button. Import Calendar, Export All and the guided tour all live inside it, each with its written label — before this, Import and Export were two unlabelled arrows with no accessible name at all. From 768 px up the buttons sit in the header exactly as they did.

Global Calendar

Calendar Views

  • Month view: Traditional calendar grid
  • Week view: Seven-day columns with full event cards
  • List view: Events grouped by month — opens at the current month (not the oldest event), with a month sidebar for jumping around (a month dropdown + Today button on phones) and a "Today" pill on the current month's heading
  • Gantt view: Horizontal timeline showing project durations as bars

Sub-Rentals on the Calendar

A sub-rental with many gear items used to fill the calendar with one chip per item. Sub-rentals are now shown as one chip per rental with an item-count badge (e.g. "5").

  • Click the chip to see everything inside: the full item list with quantities, plus pickup and return times. From there, Open sub-rentals jumps to the sub-rental page.
  • Conflicts are highlighted directly on the rental chip (red ring + warning icon) when any of its gear is double-booked.
  • Prefer the old per-item view? Open Filters and untick Group sub-rental items.
  • A return with no return location of its own shows the pickup address. Leaving the sub-rental's return location blank means "same as pickup" — that is what the field's own placeholder promises — so the Return event carries the pickup address rather than no address at all. The details modal labels it Same as the pickup location, so an inherited address is never mistaken for one somebody typed into the return field. Fill the return location in whenever the gear actually goes back somewhere else.

Event Cards

Each event shows:

  • Project name and color coding
  • Event dates (start and end)
  • Shoot location (if set)
  • Assigned crew members

When the cell is too narrow to fit the full title:

  • Hover an event — a small floating preview appears with the title, type and date range so you can read what's been truncated without navigating.
  • Click an event — a larger details modal opens with the full title, dates, duration, project name, location, notes, and multi-day indicator. Use the button inside the modal (Open project, Open sub-rentals, or Open owned gear, depending on the event) to jump to the right page, or close (X, backdrop click, or Esc) to dismiss and stay on the calendar.

The Gantt timeline view keeps its existing behavior: clicking a bar jumps straight to the project.

Project Calendar

Access from within a project workspace via the Calendar tab.

Adding Events

  1. Click on a date or click Add Event
  2. Fill in event details:
FieldDescription
TitleEvent name (e.g., "Day 1 — Studio")
Start DateEvent start date and time
End DateEvent end date and time
LocationShoot location
NotesAdditional details
  1. Click Save

Travel Days

Mark non-shoot days as travel or prep:

  1. Open the Schedule section in the project
  2. Click Add Travel Day
  3. Set the date and description

Travel days appear differently styled on the calendar to distinguish them from shoot days.

Double-Booking Detection

The calendar automatically detects when equipment or crew are double-booked across projects. A warning badge appears on conflicting dates.

Past conflicts expire. A conflict disappears from the panel — and from the event chips — once the overlap it describes has ended, because there is nothing left to reschedule. The cutoff is the end of the overlap, not the end of either booking: a rental running until September stops being flagged the day after its collision with a shoot is over. A conflict whose overlap ends today is still shown. Accepting a conflict is therefore only needed for overlaps that are still ahead; there is no end-of-job cleanup to do.

External Calendar Export & Invitations

Cine Power Planner integrates with external calendars through one-way export and invitation URLsnot bidirectional OAuth sync. You push schedule data outward; changes made in Google Calendar or Outlook do not flow back.

Exporting to .ics

The universal option. Works with any calendar app (Apple Calendar, Outlook desktop, Google Calendar, Fantastical, etc.).

  1. Go to the Calendar tab in a project.
  2. Click ExportDownload .ics.
  3. Open the downloaded file — the recipient's calendar app imports the events.

.ics export is handled by calendarIcsService.js and shared/utils/calendar/calendarIcs.js and works fully offline. (data/calendar/icsGenerator.js is named here in older revisions but is not imported by anything; the subscribed-feed path uses its Deno port at supabase/functions/calendar-feed/icsGenerator.ts.)

If an entry's date cannot be read — an old record, or one edited by hand — that single entry is skipped and the rest of the export still downloads. The Add to Google Calendar link is likewise produced with the unreadable date left blank instead of failing outright.

Importing a .ics File

  1. Click Import in the Calendar view.
  2. Upload a .ics file (long folded lines from Google/Outlook exports are handled).
  3. Choose the target project, review detected events, and confirm import.

Events are categorized into prep / shooting / return / travel phases by keywords in the event title — English and German terms are recognized ("Prep"/"Vorbereitung"/"Aufbau", "Shoot"/"Dreh", "Return"/"Rückgabe"/"Abbau", "Travel"/"Anreise"/"Abreise"); anything unrecognized lands in shooting. Files containing recurring events (RRULE) show a warning — each series is imported as a single occurrence.

Re-importing the same file is safe. Prep, shooting and return periods are deduplicated on their start|end pair by mergePeriods, and travel days on their date, so an export → re-import round-trip adds nothing the project already has. Note the dedup is silent: the review list before you confirm does not mark which entries are already present, so the count you see there can be larger than the number actually added. Entries that differ by even a minute in start or end are treated as new.

Google Calendar Import URL

Generates a URL that opens Google Calendar in a new tab with the event pre-filled:

  1. From an event, click Add to Google Calendar.
  2. A new tab opens on calendar.google.com with the title, dates, location, and notes pre-populated.
  3. The user saves the event inside Google Calendar.

Implemented as generateGoogleCalendarUrl() in app/src/data/calendar/calendarExportService.js. This is a one-way "create event" link — it does not install an integration or grant Google access to your project data.

Outlook Import URL

Same pattern, but for Outlook on the web:

  1. From an event, click Add to Outlook.
  2. A new tab opens on outlook.live.com with the event pre-filled.
  3. The user saves the event inside Outlook.

Implemented as generateOutlookCalendarUrl() in app/src/data/calendar/calendarExportService.js.

Not Supported

The following are not implemented:

  • Bidirectional sync — changes made inside Google Calendar or Outlook are not reflected back.
  • Google Calendar / Microsoft Outlook OAuth sync — no account-based OAuth integration; use Add to Google Calendar (URL export), the ICS subscription feed, or a .ics export instead.
  • CalDAV / iCloud live subscriptions beyond the provided ICS feed — one-off .ics exports are snapshots, not live feeds; use the ICS Calendar Feed URL for a live read-only subscription.

If you need live one-way sync into an external calendar, use the ICS Calendar Feed URL — open the calendar, click ICS Feeds (/calendar/feeds), then Subscribe on the feed you created. For collaborative editing, share a project and work within Cine Power Planner.

Reminders

Configure reminders for upcoming shoots:

  • Browser notifications: Get alerts before shoot days
  • Push notifications: Receive alerts on mobile (requires Cloud Sync)
  • Customizable timing: add any whole number of days from 1 to 365 before the event; the list starts at 1 and 7 days and reminders are off until you enable them. There is no fixed set of presets — remove either default or add as many lead times as you want.

Cloud Sync

Calendar events sync across your own devices when Cloud Sync is enabled, because they live on the project object. Changes made offline are queued and synchronized automatically. This sync is internal (device-to-device via Supabase); it is unrelated to Google/Outlook calendars.

Tips

  1. Use the Gantt view: Best for seeing project overlaps and scheduling conflicts
  2. Color-code projects: Each project has a unique color on the global calendar
  3. Export .ics files: Share schedules with crew who use their own calendar apps
  4. Set reminders: Don't miss prep days or equipment pickup deadlines

Last Updated: 2026-09-10 Version: 0.790.2