Project Details - Grid View Specification
Last Updated: November 20, 2025 Version: 4.4.0 Status: β οΈ Awaiting Stakeholder Review
π― Overviewβ
The Grid View is a dense, spreadsheet-style interface for production managers who need to see their entire crew roster at a glance. It's designed to replicate the best parts of Excel-based crew planning while adding modern web UI benefits.
Key Insightβ
Production managers currently use Excel because they can see everything at once:
- Who's working which days
- What everyone costs (offered vs actual)
- Which admin tasks are pending
- Total project costs in real-time
Grid View brings this power to PBS with better UX: sorting, filtering, inline editing, visual status indicators, and automatic calculations.
π Visual Mockupβ
Full Grid Layoutβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ
β PROJECT: Idre Freestyle [+ Add Crew] [Bulk Edit] [Export to Excel] β
β Dec 3-10, 2023 (8 days) β’ 30 crew members β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β View: [β List] [β Grid] [β Timeline] Filters: [All Status βΌ] [All Functions βΌ] [All Teams βΌ] [β Incomplete tasks] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β β βββββββββββββββββββββββββββ CREW INFO (Frozen) βββββββββββ¬ββββββ LOGISTICS βββββ¬ββββββββ WORK SCHEDULE ββββββββββ¬β FIN β
β β # ββ
β Name βFunction βTeam βRole βStatus βAccom βTravel βS M T W T F S S βWβTβTotβRate βHotel β
β βββββΌββΌβββββββββββββββββΌββββββββββββΌβββββββββΌβββββββΌββββββββΌββββββββββΌββββββββββββΌβββββββββββββββββΌββΌββΌββββΌββββββΌββββββββ€
β β 1 ββ
β Johan B. βDirector ββ βMain ββ Conf βFjΓ€ll 521βπ Minibus β β β β β β β β6β0β 6 β1000 β4500 β
β β 2 β β Jan-Ove K. βMixer ββ ββ ββ Conf βFjΓ€ll 520βπ Own car β β β β β β β5β0β 5 β1000 β3600 β
β β 3 ββ
β Peter A. βProducer ββ βGrafikββ Conf βFjΓ€ll 521βπ Own car β β β β β β β β6β0β 6 β1000 β4500 β
β β 4 ββ
β Susanne S. βProd Lead ββ ββ ββ Conf βFjΓ€ll 552βπ Minibus β β β β β β β β6β0β 6 β1000 β4500 β
β β 5 β β Adam K. βRigg ββ ββ ββ Conf βFjΓ€ll 551βπ Own car β β β β β β β β6β0β 6 β1000 β4500 β
β β 6 ββ
β Daniel E. βCam Ass ββ βSlope ββ Conf βFjΓ€ll 550βπ Own car β β β β β β β β6β0β 6 β1000 β4500 β
β β 7 β β Joakim S. βA-Ljud βAudio βMain ββ Conf βFjΓ€ll 545βπ W/Adam β β β β β β β β6β0β 6 β1000 β4500 β
β β 8 β β Max C. βLjud Tech βAudio ββ ββ Conf βFjΓ€ll 545βπ Minibus β β β β β β β β6β0β 6 β1000 β4500 β
β β 9 ββ
β Niklas N. βEVS 1 βEVS ββ ββ Conf βFjΓ€ll 673βπ W/Magnusβ β β β β β4β0β 4 β1000 β3600 β
β β10 β β HΓ₯kan R. βEVS 2 βEVS ββ ββ Conf βFjΓ€ll 520βπ Shared β β β β β3β0β 3 β1000 β2700 β
β β β β [...] β β β β β β β β β β β β β
β β30 β β Elin S. βRF Tech βTech ββ ββ Conf βFjΓ€ll 548β π NEP β β β β β β β β6β0β 6 β Inc β4500 β
β βββββ΄ββ΄βββββββββββββββββ΄ββββββββββββ΄βββββββββ΄βββββββ΄ββββββββ΄ββββββββββ΄ββββββββββββ΄βββββββββββββββββ΄ββ΄ββ΄ββββ΄ββββββ΄ββββββββ€
β β TOTAL: 30 crew β’ 156 work days β’ 42 travel days β’ Crew: 130,000 SEK β’ Hotel: 107,100 β’ Travel: 89,600 β’ TOTAL: 326,700β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β π‘ Showing Offered costs. Toggle to [Show Actual] [Show Both] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Scroll horizontally to see more columns (Travel Costs, Admin Tasks, Actual Costs) β
Column Groups Detailβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COMPLETE COLUMN STRUCTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β [A. CREW INFO - Frozen] Always visible when scrolling β
β ββ # (Row number) β
β ββ β
(Favorite toggle) β
β ββ Name (Avatar + Name) β
β ββ Function (Role badge) β
β ββ Team (Editable label) β
β ββ Role Note (Editable descriptor) β
β ββ Status (Color badge) β
β β
β [B. LOGISTICS] Hotel & Travel β
β ββ Accom. (Hotel assignment + roommates) β
β ββ Travel (Method icon + summary) β
β β
β [C. WORK SCHEDULE] Visual day-by-day grid β
β ββ Date columns (Dec 3, 4, 5... 10) β = work day, β‘ = travel day β
β ββ W (Work days count) β
β ββ T (Travel days count) β
β ββ Total (Total days) β
β β
β [D. FINANCIAL - Offered] Planned costs β
β ββ Day Rate (Work day rate) β
β ββ Travel Rate (Travel day rate) β
β ββ Crew Total (Calculated: rates Γ days) β
β ββ Hotel (Total hotel costs) β
β ββ Travel Cost (Total travel expenses) β
β ββ Other (Adjustments, bonuses) β
β ββ TOTAL (Grand total per crew) **KEY METRIC** β
β β
β [E. ADMIN TASKS] Manual workflow checkboxes β
β ββ β Travel booked β
β ββ β Hotel booked β
β ββ β Roadbook sent β
β ββ β Invoice handled (freelancers only) β
β β
β [F. ACTUAL COSTS] Post-production (hidden by default) β
β ββ Act. Days (Actual work days) β
β ββ Act. Rate (Adjusted rate) β
β ββ Act. Total (Invoiced amount) β
β ββ Variance (Difference from planned) β
β ββ Invoice # (External reference) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π¨ Design Systemβ
Cell States & Visual Indicatorsβ
WORK SCHEDULE CELLS:
β Work day (solid blue fill)
β‘ Travel day (blue outline)
Empty (no work)
? TBD (dashed outline)
ACCOMMODATION:
FjΓ€llterassen 521 Simple display
π₯ FjΓ€llterassen 521 (3) Shared with others (hover β see names)
β Not assigned
TRAVEL:
βοΈ Flight SK1234 Flight booked
π Own car Personal vehicle
π Train Rail travel
π Minibus NCP Group transport
π’ Symbol = Booked
π‘ Symbol = Planned
βͺ Symbol = Not arranged
STATUS BADGES:
β Confirmed (Green #10B981)
β³ Pending (Yellow #F59E0B)
π§ Sent (Blue #3B82F6)
β Declined (Red #EF4444)
ADMIN TASKS:
β Done (Green)
β Pending (Gray)
β N/A
FINANCIAL INDICATORS:
π’ Within budget
π‘ Close to limit (90%+)
π΄ Over budget
**Bold** = Non-standard rate
Typography & Spacingβ
GRID DENSITY:
Row Height: 32px (compact)
Cell Padding: 4px
Font Size: 13px (body), 12px (headers)
FONTS:
Numbers: SF Mono / Consolas (monospace for alignment)
Text: Inter / San Francisco (sans-serif)
COLORS (Tailwind):
Primary: Blue-600 (#2563EB)
Secondary: Gray-600 (#64748B)
Success: Green-600 (#10B981)
Warning: Yellow-500 (#F59E0B)
Danger: Red-600 (#EF4444)
Border: Gray-200 (#E5E7EB)
π§ Functional Specificationsβ
View Mode Toggleβ
Location: Top right below project header
Options:
β List View (default, card-based, detailed)
β Grid View (spreadsheet, high-density)
β Timeline View (Gantt chart, post-MVP)
Behavior:
- User preference saved per-project
- Auto-switches to List View on mobile (<1280px)
- Retains filters/sort when switching views
Header Controlsβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Quick Filters: β
β [All Status βΌ] β Filter by Confirmed/Pending/etc. β
β [All Functions βΌ] β Filter by Director/Camera/Sound/etc. β
β [All Teams βΌ] β Filter by Camera A/Audio Main/etc. β
β [β Show only incomplete tasks] β Show rows with pending work β
β β
β Date Range Display: β
β "Dec 3-10, 2023 (8 days)" β
β Click β opens date picker to adjust view range β
β β
β Crew Count: β
β "30 crew members" (updates with filters) β
β β
β Quick Actions: β
β [+ Add Crew] β Opens crew selection modal β
β [Bulk Edit] β Select multiple rows, edit common fields β
β [Export] β Export to Excel/PDF/Clipboard β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Column Interactionsβ
Frozen Columns (Crew Info)β
BEHAVIOR:
- Always visible when scrolling horizontally
- Subtle shadow appears when scrolling right
- Min width: 600px (all crew info visible)
CLICK ACTIONS:
- Name β Opens crew assignment detail modal (full edit)
- β
β Toggles favorite status (instant save)
- Team β Inline edit (text input appears)
- Role Note β Inline edit (text input appears)
- Status β Dropdown to change status
Work Schedule Gridβ
VISUAL BEHAVIOR:
- One column per day (project.start_date to project.end_date)
- Max 31 days shown (horizontal scroll if longer)
- Weekend columns have subtle gray background
CLICK ACTIONS:
- Click empty cell β Mark as work day (β )
- Click work day (β ) β Toggle to travel day (β‘)
- Click travel day (β‘) β Toggle to empty
- Hover β Tooltip: "Work day (1,000 SEK)" or "Travel day (500 SEK)"
AUTO-CALCULATION:
- W (Work days): Count of β cells
- T (Travel days): Count of β‘ cells
- Total: W + T
- Updates Crew Total when changed
Financial Columnsβ
INLINE EDITING:
- Day Rate β Double-click β Input field β Enter to save
- Travel Rate β Double-click β Input field β Enter to save
- Other β Click β Opens adjustment modal
READ-ONLY CALCULATIONS:
- Crew Total = (W Γ Day Rate) + (T Γ Travel Rate)
- TOTAL = Crew Total + Hotel + Travel Cost + Other
VISUAL INDICATORS:
- Bold text if rate differs from function default
- π’ Green tint if within budget
- π΄ Red tint if over budget (>110% of planned)
- Background color intensity scales with amount (heat map)
Admin Tasks Checkboxesβ
BEHAVIOR:
- Simple click to toggle β β β
- Auto-saves on change (debounced 500ms)
- "Invoice handled" only shown for freelancers (employer_id IS NULL)
FILTER INTEGRATION:
- "Show only incomplete tasks" checkbox
β Hides rows where all checkboxes are β
Actual Costs Columns (Hidden by Default)β
TOGGLE:
Footer has button: [Show Actual Costs]
- Reveals columns: Act. Days, Act. Rate, Act. Total, Variance, Invoice #
- Intended for post-production reconciliation
VARIANCE DISPLAY:
- Positive variance: "+500 SEK (+8.3%)" in green
- Negative variance: "-200 SEK (-3.6%)" in red
- Zero: "β" or "0 (0%)"
INVOICE # FIELD:
- Text input for external invoice reference (e.g., "8949")
- Optional link icon β opens external system (Fortnox)
Row Interactionsβ
CLICK BEHAVIORS:
1. Single click row β Highlight row + show quick actions
2. Double-click row β Opens full crew assignment detail modal
3. Right-click row β Context menu:
- Edit Assignment
- Duplicate Booking
- View Crew Profile
- Remove from Project
- Copy Details
HOVER STATE:
- Entire row highlights (light blue background)
- Quick action icons appear on right:
[β Edit] [π Copy] [ποΈ Remove]
DRAG & DROP:
- Grab row number (#) to drag
- Drop between rows to reorder
- Visual indicator (blue line) shows drop target
- Manual sort order saved per-user
Row Grouping (Optional)β
TOGGLE: [Group by: None βΌ]
Options:
- None (flat list, default)
- Function (Camera (8), Sound (3), etc.)
- Team (Camera A (4), Audio Main (2), etc.)
- Status (Confirmed (28), Pending (2))
VISUAL:
ββ βΌ Camera (8) βββββββββββββββββββ Subtotal: 48,000 SEK βββββ
β 1 Johan B. Director ... β
β 2 Peter A. Producer ... β
β [...] β
βββββββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββ
ββ βΌ Sound (3) ββββββββββββββββββββ Subtotal: 17,000 SEK βββββ
β 7 Joakim S. A-Ljud ... β
β [...] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
COLLAPSE/EXPAND:
- Click βΌ to collapse group
- Click βΆ to expand group
- Collapsed: Shows only group header with subtotals
Footer Row (Sticky)β
ALWAYS VISIBLE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TOTAL: 30 crew β’ 156 work days β’ 42 travel days β
β Crew: 130,000 SEK β’ Hotel: 107,100 β’ Travel: 89,600 β
β TOTAL: 326,700 SEK β
β β
β Budget Status: Offered: 343,035 | Actual: 379,243 β
β Variance: +36,208 (+10.6%) π΄ β
β β
β [Show Offered] [Show Actual] [Show Both] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CALCULATIONS:
- Updates in real-time as grid changes
- Respects active filters (shows filtered totals)
- Currency: Always in company base_currency
- Toggle buttons switch between offered/actual cost views
Column Visibility Controlsβ
BUTTON: [βοΈ Columns] (top right)
OPENS MODAL:
βββββββββββββββββββββββββββββββββββββ
β Column Visibility β
βββββββββββββββββββββββββββββββββββββ€
β β Crew Info (always visible) β
β β Logistics β
β β Work Schedule β
β β Financial (Offered) β
β β Financial (Actual) β
β β Admin Tasks β
βββββββββββββββββββββββββββββββββββββ€
β [Reset to Default] [Save] β
βββββββββββββββββββββββββββββββββββββ
BEHAVIOR:
- Unchecked groups hidden from grid
- Saved as user preference (per-project)
- "Crew Info" always checked (cannot hide)
Keyboard Navigation (Excel-like)β
KEYS:
Tab / Shift+Tab Navigate cells (right/left)
Enter Start editing cell / Save edit
Esc Cancel edit / Close modal
Ctrl+C / Ctrl+V Copy/Paste cell values
Ctrl+F Find crew member (search dialog)
ββββ Arrow keys to navigate
Ctrl+Home Jump to first cell
Ctrl+End Jump to last cell
Page Up/Down Scroll one page
EDIT MODE:
- Double-click or press Enter to edit cell
- Type to overwrite value
- Tab to save and move to next cell
- Esc to cancel without saving
π€ Export Optionsβ
Export to Excelβ
FORMAT: .xlsx (Excel 2010+)
INCLUDES:
- All visible columns (respects column visibility settings)
- Current filters applied
- Current sort order
- Formulas for calculated fields (Crew Total, TOTAL, etc.)
- Cell formatting (colors, bold, borders)
- Frozen panes (Crew Info columns)
- Footer row with summary formulas
FILENAME: "ProjectName_CrewRoster_YYYY-MM-DD.xlsx"
Example: "Idre_Freestyle_CrewRoster_2023-12-03.xlsx"
Export to PDFβ
FORMAT: PDF (A3 landscape)
LAYOUT:
- Project header (name, dates, crew count)
- Full grid (all visible columns)
- Footer with totals
- Compact typography for print
OPTIONS:
- [ ] Include actual costs
- [ ] Include notes column
- [ ] Group by function
FILENAME: "ProjectName_CrewRoster_YYYY-MM-DD.pdf"
Copy to Clipboardβ
BEHAVIOR:
- Copies grid as tab-separated values (TSV)
- Can be pasted into Excel, Google Sheets, Numbers
- Includes headers
- Respects current filters and sort
KEYBOARD: Ctrl+Shift+C (select all + copy grid)
π― Data Mapping to Databaseβ
Source Tablesβ
PRIMARY:
- assignments (main crew booking data)
- crew_profiles (crew member info)
- project_functions (function/role data)
- projects (project dates, budget)
RELATED:
- travel_bookings (travel costs and details)
- hotel_bookings (hotel costs and details)
- users (for favorite stars, admin users)
- companies (for base_currency)
- functions (for role names)
Column to Database Field Mappingβ
CREW INFO:
- # β Row number (generated client-side)
- β
β crew_profiles.is_favorite (per-company flag)
- Name β crew_profiles.name + crew_profiles.avatar_url
- Function β functions.name (via project_functions)
- Team β assignments.team_label
- Role Note β assignments.role_note
- Status β assignments.current_status
LOGISTICS:
- Accom. β (NOT IN DATABASE - Future feature? See Q1 below)
- Travel β travel_bookings.type + travel_bookings.from_city + travel_bookings.to_city
WORK SCHEDULE:
- Date columns β Generated from assignments.start_date to assignments.end_date
- W β assignments.planned_work_days (or actual_work_days if completed)
- T β assignments.planned_travel_days (or actual_travel_days if completed)
- Total β W + T (calculated)
FINANCIAL (Offered):
- Day Rate β assignments.work_day_rate_cents / 100
- Travel Rate β assignments.travel_day_rate_cents / 100
- Crew Total β (planned_work_days Γ work_day_rate) + (planned_travel_days Γ travel_day_rate)
- Hotel β SUM(hotel_bookings.total_cost_cents) / 100
- Travel Cost β SUM(travel_bookings.cost_cents) / 100
- Other β assignments.adjustment_amount_cents / 100
- TOTAL β Crew Total + Hotel + Travel Cost + Other
ADMIN TASKS:
- β Travel β assignments.travel_status (not_booked / booked)
- β Hotel β assignments.hotel_status (not_booked / booked)
- β Roadbook β assignments.roadbook_status (not_sent / sent)
- β Invoice β assignments.invoice_status (not_handled / handled)
ACTUAL COSTS:
- Act. Days β assignments.actual_work_days + assignments.actual_travel_days
- Act. Rate β assignments.actual_work_rate_cents / 100
- Act. Total β (actual_work_days Γ actual_work_rate) + (actual_travel_days Γ actual_travel_rate) + adjustment_amount
- Variance β Act. Total - Crew Total (calculated)
- Invoice # β (NOT IN DATABASE - See Q2 below)
β Open Questions for Stakeholdersβ
Q1: Accommodation Trackingβ
Context: Excel sheet shows accommodation assignments (e.g., "FjΓ€llterassen 521", roommate sharing).
Question: Do we need to track accommodation in the database?
Options:
- A) Add
accommodation_assignmenttable (hotel name, room number, check-in/out, roommates) - B) Store as free-text field on
assignmentstable (e.g.,accommodation_notes) - C) Keep in
hotel_bookingstable and extend with room assignment fields - D) Don't track in system, continue managing in external sheets/systems
Impact: If we track accommodation, Grid View can show roommate icons (π₯) and click-to-expand details.
Q2: Invoice Reference Numbersβ
Context: Excel sheet has "LΓΆpnr Fortnox" (invoice numbers from external accounting system).
Question: Should PBS store invoice references from Fortnox/other systems?
Options:
- A) Add
invoice_referencefield toassignmentstable - B) Add full
invoicestable (invoice_number, date, amount, status, external_link) - C) Don't store, keep in external accounting system only
- D) Store as JSON in
assignments.notesoradjustment_reason
Impact: If stored, Grid View can link to external invoices (click to open Fortnox).
Q3: Daily Work Schedule Grid Usefulnessβ
Context: Grid View shows daily cells (β β β β β ) for visual scanning.
Question: Is this daily grid useful for your workflow?
Alternative: Show only summary counts (6 work days, 2 travel days) without daily breakdown.
Pros of daily grid:
- Visual scan of who works which days
- Easy to see conflicts/overlaps
- Quick inline editing (click to toggle)
Cons:
- Takes horizontal space (31 days = 31 columns for long projects)
- May be redundant if you already see start/end dates elsewhere
Preference: Keep daily grid? Or simplify to summary only?
Q4: Accommodation Display Detail Levelβ
Context: Grid View currently shows "Fj Γ€llterassen 521" (room code).
Question: What level of detail do you need in the grid?
Options:
- A) Room code only (e.g., "FjΓ€ll 521") - compact
- B) Room code + roommate count (e.g., "FjΓ€ll 521 π₯3") - shows sharing
- C) Room code + roommate names on hover - detailed
- D) Full hotel name + room (e.g., "FjΓ€llterassen Room 521") - verbose
Recommendation: Option B (code + count) for balance of info vs space.
Q5: Actual Costs Column Visibilityβ
Context: "Actual Costs" columns hidden by default (post-production feature).
Question: When should Actual Costs columns be visible?
Options:
- A) Always hidden, user manually shows via [βοΈ Columns] button
- B) Auto-show when project status = "Completed"
- C) Auto-show when first actual cost is entered
- D) User preference: "Always show" / "Show after completion" / "Always hide"
Impact: Affects default grid width and information density.
Q6: Must-Have vs Nice-to-Have Columnsβ
Context: Grid View has 40+ columns across all groups.
Question: Which columns do you use DAILY vs OCCASIONALLY?
Please rank (1 = Critical, 2 = Important, 3 = Nice to have, 4 = Can hide):
___ Name, Function, Status (Crew Info)
___ Team, Role Note (Labels)
___ Accommodation (Logistics)
___ Travel method (Logistics)
___ Daily work schedule grid (Work Schedule)
___ Work days count (W)
___ Travel days count (T)
___ Day Rate, Travel Rate (Financial)
___ Crew Total cost (Financial)
___ Hotel cost (Financial)
___ Travel cost (Financial)
___ TOTAL per crew (Financial)
___ Admin task checkboxes (Travel/Hotel/Roadbook/Invoice)
___ Actual costs columns (Post-production)
Impact: Helps prioritize default column visibility and grid width.
Q7: Meal Per Diems Trackingβ
Context: Not mentioned in Excel sheet, but common in production.
Question: Do you need to track meal per diems or meal allowances in the grid?
Options:
- A) Yes, add "Meals" column (daily rate Γ days)
- B) Yes, but as simple checkbox "Meals Included" (boolean)
- C) No, tracked separately outside PBS
- D) Store in "Other" expenses column
Impact: Additional financial column if tracked.
Q8: Color-Coding for Conflictsβ
Context: Grid View currently shows status badges (Confirmed/Pending).
Question: Should we highlight crew with booking conflicts or availability issues?
Visual Ideas:
- π΄ Red row background if crew double-booked (overlapping project dates)
- π‘ Yellow row background if crew marked unavailable in those dates
- β οΈ Warning icon in Name column with tooltip "Conflict with Project X"
Preference: Add visual conflict warnings? Or keep clean grid?
Q9: Export Format Preferenceβ
Context: Grid View can export to Excel with formulas or flat values.
Question: What do you prefer in exported Excel files?
Options:
- A) Formulas (e.g., =B2*C2 for cost calculations) - editable, updates automatically
- B) Flat values (e.g., 6000) - static snapshot, no formulas
- C) Both (two sheets: "Data" with values, "Calculations" with formulas)
Impact: Formula exports are more complex but allow external what-if analysis.
Q10: Countdown Timer Displayβ
Context: Showing "Days until project starts" in header.
Question: Useful to see countdown in Grid View header?
Example: "β° 12 days until project starts" (updates daily)
Preference: Add countdown? Or unnecessary clutter?
π Implementation Notesβ
Performance Optimizationβ
CRITICAL:
- Virtualized scrolling for 100+ crew members
β Only render visible rows (10-20) + buffer (10)
β Library: react-virtual, react-window, or @tanstack/react-virtual
- Debounced inline editing (500ms)
β Don't save on every keystroke
β Save on blur or after 500ms idle
- Client-side calculations for totals
β Don't re-fetch API on every cell change
β Calculate crew totals, footer sums in React state
- Lazy load actual costs columns
β Only fetch actual_work_days, actual_rate, etc. when user clicks [Show Actual]
- Memoized rows and cells
β Use React.memo to prevent unnecessary re-renders
Responsive Behaviorβ
DESKTOP (>1280px):
- Full Grid View with all features
- Horizontal scroll if needed
- Frozen columns with shadow
TABLET (768px-1279px):
- Auto-switch to List View
- Show message: "Grid View requires desktop (1280px+ width)"
- Option: Rotate device to landscape for Grid View
MOBILE (<768px):
- List View only (Grid View not available)
- Crew cards with key info
Browser Compatibilityβ
REQUIRED:
- Modern evergreen browsers (Chrome, Firefox, Safari, Edge)
- ES6+ support
- CSS Grid and Flexbox
- Sticky positioning
NOT SUPPORTED:
- IE 11 (no longer required in 2025)
Accessibilityβ
CONSIDERATIONS:
- Keyboard navigation (Tab, Arrow keys, Enter)
- Focus indicators on cells (blue outline)
- ARIA labels for icons and status badges
- Screen reader support for grid structure
β Use proper table semantics (<table>, <th>, <td>)
β Announce row/column headers on focus
- High contrast mode support (system preference)
- Reduced motion support (disable animations if user prefers)
π Related Documentationβ
- View 1.7 Project Details - Full specification in main views doc
- Database Schema -
assignments,crew_profiles,travel_bookings,hotel_bookings - User Cases - UC-04 to UC-06 (crew assignments)
- Open Questions - Stakeholder discussion items
π Next Stepsβ
Before Implementation:
- β Review this specification with stakeholders
- β³ Answer open questions Q1-Q10
- β³ Prioritize column visibility (Q6)
- β³ Decide on accommodation tracking (Q1)
- β³ Decide on invoice reference storage (Q2)
- β³ Create visual mockups (Figma/Sketch) based on this spec
- β³ User testing with production managers (Excel vs Grid View)
During Implementation: 8. β³ Build Grid View component with frozen columns 9. β³ Implement inline editing for rates, teams, role notes 10. β³ Add daily work schedule grid with toggle functionality 11. β³ Build footer calculations and summary row 12. β³ Add export to Excel/PDF functionality 13. β³ Performance testing with 100+ crew members 14. β³ Accessibility audit (keyboard nav, screen readers)
Post-Launch: 15. β³ Gather feedback from production managers 16. β³ Iterate on column priorities based on usage analytics 17. β³ Add Timeline View mode (Gantt chart for crew schedules)
Document Version: 4.4.0 Last Updated: November 20, 2025 Status: β οΈ Draft - Awaiting Stakeholder Review