Connected Crew
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
| ID | Requirement | Acceptance Criteria | Priority | Source |
|---|---|---|---|---|
| REQ-CRW-001 | The system shall let a user find another user by searching their contacts and the global profile directory, and send a connection request | Type 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 instead | Must | useConnectedCrew |
| REQ-CRW-002 | The system shall maintain a list of active crew connections with accept/decline/remove lifecycle | Accept → connection active; decline → request removed; remove → both parties lose shared access; undo available | Must | useConnectedCrew |
| REQ-CRW-003 | The system shall show real-time presence indicators (online/away/offline) for collaborators in a shared project | Open 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 heartbeat | Must | presenceService |
| REQ-CRW-004 | The system shall broadcast live cursor positions between collaborators on shared projects | Two users in same project → cursor positions visible; move cursor → other user sees movement; label shows name | Must | useProjectCursors |
| REQ-CRW-005 | The 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 immediately | Must | useProjectRole |
| REQ-CRW-006 | The system shall normalize incoming connection requests and share settings for consistent data shape | Receive malformed request → normalized to valid shape; missing fields → defaults applied; duplicate requests → merged | Must | useConnectedCrew |
| REQ-CRW-007 | The system shall provide a "Connected Crew" tab under Contacts showing all connections and their status | Open Contacts → Connected Crew → connection list visible; shows name, avatar, status badge; empty state → "No connections yet" | Should | useConnectedCrew |
| REQ-CRW-008 | The system shall lock an individual field while a collaborator has it focused, and show who holds it | User 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 TTL | Must | entityLockService |
Non-Functional Requirements
| ID | Requirement | Metric | Priority |
|---|---|---|---|
| NFR-CRW-001 | Presence and field locks shall degrade to read-only rather than block editing when Realtime drops | Graceful degradation | Should |
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-CCRprefix while every functional row on this page isREQ-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.jsdefines 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=crewvalue rather than the label on screen.
Connection Lifecycle
Sending a Request
- Open Contacts → Connected Crew (the Connections sub-tab).
- 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.
- Click Connect on the person you want.
- 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:
- A notification appears in the bell icon
- Open Connected Crew panel
- 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:
ProjectLockedOverlaycovers 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:
- 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.
- 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.
- 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:
| Cell | Means |
|---|---|
| ! Conflict | booked and marked unavailable the same day — needs attention |
| 2+ Double-booked | staffed on two or more different projects that day |
| ● Booked | staffed on exactly one project |
| ✕ Unavailable | inside a published or private unavailable range, with no booking |
| Free | nothing 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
- Connect before the shoot: Set up crew connections during pre-production
- Use role permissions wisely: Give Editors access to crew leads, Viewers to clients
- Watch for presence indicators: Avoid editing the same section as another crew member
- Use project chat: Coordinate edits in real-time via the chat panel
- Promote freelancers to contacts as you go: Use Add as contact on the crew row instead of opening the Contacts page mid-flow
Related Documentation
Last Updated: 2026-09-10 Version: 0.790.2
