Connected Crew | Cine Power Planner

Connected Crew

Real-time collaboration, project sharing, and live presence

Overview

Connected Crew brings real-time collaboration to Cine Power Planner. Share projects with team members, see who's online, track live cursor positions, and coordinate edits in real-time. Built on Supabase Realtime channels for instant updates.

Requirements

Functional Requirements

IDRequirementAcceptance CriteriaPrioritySource
REQ-CRW-001The system shall let a user find another user by searching their contacts and the global profile directory, and send a connection requestType a name or email → matches from your contacts (listed first) and from a global profile search → Connect → recipient notified; no account found → offer an email invitation insteadMustuseConnectedCrew
REQ-CRW-002The system shall maintain a list of active crew connections with accept/decline/remove lifecycleAccept → connection active; decline → request removed; remove → both parties lose shared access; undo availableMustuseConnectedCrew
REQ-CRW-003The system shall show real-time presence indicators (online/away/offline) for collaborators in a shared projectOpen project → green dot for online, yellow for away, gray for offline; a peer goes away after 5 min idle or as soon as their tab is hidden, and is dropped after 90 s without a heartbeatMustpresenceService
REQ-CRW-004The system shall broadcast live cursor positions between collaborators on shared projectsTwo users in same project → cursor positions visible; move cursor → other user sees movement; label shows nameMustuseProjectCursors
REQ-CRW-005The system shall support role-based share settings per project (Owner, Editor, Viewer)Share with Editor → can edit; Viewer → read-only; Owner → full control; change role → permissions update immediatelyMustuseProjectRole
REQ-CRW-006The system shall normalize incoming connection requests and share settings for consistent data shapeReceive malformed request → normalized to valid shape; missing fields → defaults applied; duplicate requests → mergedMustuseConnectedCrew
REQ-CRW-007The system shall provide a "Connected Crew" tab under Contacts showing all connections and their statusOpen Contacts → Connected Crew → connection list visible; shows name, avatar, status badge; empty state → "No connections yet"ShoulduseConnectedCrew
REQ-CRW-008The system shall lock an individual field while a collaborator has it focused, and show who holds itUser A focuses a field → User B sees that field read-only with a "Locked by [Name]" badge beside it; A tabs away → lock releases immediately; an abandoned lock clears after 10 s idle and expires at 15 s TTLMustentityLockService

Non-Functional Requirements

IDRequirementMetricPriority
NFR-CRW-001Presence and field locks shall degrade to read-only rather than block editing when Realtime dropsGraceful degradationShould

A render budget ("crew list within 200 ms for ≤50 members") was removed in v0.773.32: nothing measured it, and an unmeasured budget in a requirements table reads as a guarantee. Its ID also carried an NFR-CCR prefix while every functional row on this page is REQ-CRW.

Data Requirements

  • Connection requests: Stored in Supabase with sender/receiver user IDs and status
  • Share settings: Stored per-project with role and permission metadata
  • Presence data: Ephemeral (Supabase Realtime channels) — not persisted to disk
  • Cursor positions: Broadcast via Realtime, not persisted

Constraints & Limits

  • Requires cloud sync (signed-in user)
  • All connected crew members must have accounts
  • Presence updates throttled to prevent excessive bandwidth
  • Connected Crew is a Pro feature. Collaboration and cloud sync are the two things the Free tier does not include, so a Free account has no crew connections rather than a small allowance. There is no per-connection cap on Pro. This page promised "Free tier: Up to 2 crew connections" until v0.773.32; paywallLimits.js defines exactly four counted free-tier limits — projects (2), calculator runs (5), time-tracking projects (2) and templates (1) — and no crew-connection limit of any kind. The "2" was most likely borrowed from the project limit.

Offline Behavior

  • Connection list visible offline (from cached data)
  • Presence indicators show all crew as "Offline" when disconnected
  • Connection requests queue and send on reconnect

Dependencies

  • Requires: Contacts — crew members linked to contacts
  • Requires: Collaboration — crew collaboration features

Accessing Connected Crew

Connected Crew lives under Contacts → Connected Crew (the legacy /connected-crew route redirects to /contacts?tab=crew). Inside it there are two sub-tabs, Connections and Availability. You can also reach connection controls from the collaboration panel within a shared project workspace.

The tab reads Connected Crew, not "Crew" — this guide said "Contacts → Crew" until v0.773.32, which is the URL's ?tab=crew value rather than the label on screen.

Connection Lifecycle

Sending a Request

  1. Open Contacts → Connected Crew (the Connections sub-tab).
  2. Type a name or email in the search box. You get matches from your own contacts first, followed by anyone found in the global profile directory.
  3. Click Connect on the person you want.
  4. The request appears as "Pending" until they accept.

If nobody turns up for that address, the app offers to send an email invitation instead — once they create an account you can connect with them.

There is no Add Connection button, and you do not type a bare email address into a dialog. This guide described both until v0.773.32.

Accepting / Declining

When you receive a connection request:

  1. A notification appears in the bell icon
  2. Open Connected Crew panel
  3. Click Accept or Decline

Removing a Connection

Click the ⋮ (More) menu on a connection → Remove. Both parties lose access to each other's shared projects.

Real-Time Presence

When working on shared projects, you'll see:

  • Avatars in the top bar showing online collaborators
  • Cursor labels showing where each person is editing
  • Status badges: Online (green), Away (yellow), Offline (gray)

Away is an idle state, not an editing one: a collaborator flips to Away after 5 minutes without input, or immediately when they switch to another tab or app. If nothing is heard from them for 90 seconds they drop off the list entirely. This page called the yellow badge "Editing" until v0.773.32 — there has never been an "editing" presence state; who is editing what is shown by the cursor labels and the field-lock badges instead.

Field Locking

Locks are per field, not per project — you and a collaborator can work in the same tab at the same time, and only the exact input someone has focused is closed to you.

  • When a collaborator focuses a field, that field goes read-only for everyone else and shows a small "Locked by [Name]" badge beside it. Screen readers announce the lock too.
  • It releases the moment they tab away. A lock left behind (their tab froze, they walked off) clears itself after 10 seconds idle, and expires entirely after 15 seconds without a heartbeat.
  • A collaborator's lock never blocks the project as a whole, and never puts a full-screen overlay in front of you.

This section described a full-screen "Locked by [Name]" overlay that auto-released "after 30 seconds of inactivity" until v0.773.32. No collaborator lock does either of those things. The 30-second figure belongs to a different lock — LOCK_LEASE_MS, a project-wide lease taken only for the duration of a cloud-sync push and released as soon as the push finishes; you never see it as a UI state.

⚠️ A full-screen lock overlay does exist — it just is not this lock. From v0.773.32 until v0.778.3 the line above read that there is no full-screen overlay and nothing blocks the project as a whole, full stop. That was too absolute: ProjectLockedOverlay covers the entire workspace when you open a project that is already open in another of your own tabs or on another of your own devices, and offers Force Open Here, View in Read-Only Mode or Back to Dashboard. It is a same-account guard and has nothing to do with your collaborators — which is why it is true, and worth saying, that a collaborator never blocks you. See Collaboration → Project Locking.

Crew Departments

Crew assignments group by eight first-class departments: Camera, Grip, Light, Sound, Production, Art, HMU & Costume, Post Production. Role suggestions, filter chips, and PDF section groupings all derive from the same registry, so a crew member added in the workspace appears under the same department in the call sheet, in contact filters, and on exported call-sheet PDFs.

Roles you saved before the v0.773.32 taxonomy expansion (e.g. "Director of Photography", "Make-up Artist") still resolve to the correct department automatically — no manual cleanup needed.

Promoting a Crew Member to a Contact

When you add a crew member directly in the workspace (not picked from your contacts directory), their row shows an inline "Add as contact" button. One click creates a contact pre-filled with their name and department, and links the workspace row to that new contact. The button stays disabled until you've typed a name — useful so you can't accidentally create blank contacts while still drafting the crew list.

Crew Availability

The Availability sub-tab (Contacts → Connected Crew → Availability) is a day-by-day board showing who is free, booked, or unavailable across a rolling multi-week window. Each crew member is one row; use Previous weeks / Next weeks to move the window.

The board draws on three layers of data:

  1. Published availability — unavailability a connected crew member has published to you. They control this with a per-connection Share availability toggle (off by default); you cannot edit their dates.
  2. Your private notes — unavailability you record yourself (vacation, sickness, holds). Private to you; the crew member never sees them. Add or edit a range from the crew member's row.
  3. Derived bookings — dates the crew member is already staffed on your projects, read from each project's shoot schedule. Booked cells reveal the project name(s).

Each day then resolves to exactly one of five states, checked in this order:

CellMeans
! Conflictbooked and marked unavailable the same day — needs attention
2+ Double-bookedstaffed on two or more different projects that day
● Bookedstaffed on exactly one project
✕ Unavailableinside a published or private unavailable range, with no booking
Freenothing in any layer

Conflict is the state worth watching, and this page used to say it could not happen. The guide described the three layers as a strict precedence with published availability "highest" and bookings "lowest" until v0.773.32 — which implies a day that is both booked and marked unavailable simply reads as unavailable. It does not: it resolves to Conflict, drawn in red with a !. Published availability does outrank your private note, but only in deciding which of the two is named as the reason on an unavailable day; it never outranks a booking.

Two projects on one day only count as double-booked when they are distinct projects — one person holding two crew roles on the same project is still just Booked.

Publishing your own availability

Use My Availability in the toolbar to record the dates you are unavailable. Those dates become visible only to the connections for whom you've enabled the Share availability toggle — turn it off again at any time to hide your schedule. Availability sharing is independent of your project / gear / contact share settings.

Identity is explicit. A crew member only appears with availability data when their workspace row is linked to a real connected user — there is no name-matching. Crew with no link, no booking, and no note simply don't surface on the board.

Tips

  1. Connect before the shoot: Set up crew connections during pre-production
  2. Use role permissions wisely: Give Editors access to crew leads, Viewers to clients
  3. Watch for presence indicators: Avoid editing the same section as another crew member
  4. Use project chat: Coordinate edits in real-time via the chat panel
  5. Promote freelancers to contacts as you go: Use Add as contact on the crew row instead of opening the Contacts page mid-flow

Last Updated: 2026-09-10 Version: 0.790.2