Story 5.14: Catering Coordination - Wireframe
Epic: Epic 5 - Enhanced Organizer Workflows
Overview
This wireframe defines the organizer interface for coordinating catering for events. The system provides a simple task reminder system with free-text notes for menu details and headcount estimation from registration data.
Key Features:
- Task reminder: βContact caterer 1 month before eventβ
- Free-text notes field for menu details
- Registration count display for headcount estimate
- Task completion tracking
MVP Scope:
- β Task reminder: βContact caterer 1 month beforeβ
- β Free-text notes field for menu details
- β Show registration count for headcount estimate
- β Mark task complete when done
- β No dietary preferences collection (user confirmed NOT NEEDED)
- β No menu selection UI (Phase 2)
- β No caterer email integration (Phase 2)
Screen 1: Catering Coordination Dashboard
Context: Event Detail page β βLogisticsβ tab β βCateringβ section
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Event: Spring BATbern 2025 - Nachhaltiges Bauen β
β [Event Details] [Speakers] [Agenda] [Logistics] [Communication] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Logistics β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β [Catering] [Venue Setup] [Materials] [Other] β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Catering Coordination β β
β β β β
β β Event Date: 15. MΓ€rz 2025, 18:00 Uhr β β
β β Expected Attendees: 142 registered β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Tasks β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β β
β β β β β β
β β β β Contact caterer 1 month before event β β β
β β β Due: 15. Februar 2025 (in 14 days) β β β
β β β Status: β Due soon β β β
β β β β β β
β β β β Confirm final headcount with caterer (1 week before) β β β
β β β Due: 8. MΓ€rz 2025 β β β
β β β Status: Pending β β β
β β β β β β
β β β β Confirm delivery time and setup β β β
β β β Due: 8. MΓ€rz 2025 β β β
β β β Status: Pending β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Caterer Information β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β β
β β β β β β
β β β Caterer Name: β β β
β β β [Berner ApΓ©ro Service AG ] β β β
β β β β β β
β β β Contact Person: β β β
β β β [Frau MΓΌller ] β β β
β β β β β β
β β β Phone: β β β
β β β [+41 31 987 65 43 ] β β β
β β β β β β
β β β Email: β β β
β β β [mueller@apero-service.ch ] β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Menu Details β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β β
β β β β β β
β β β [ApΓ©ro Riche Package: β β β
β β β β β β
β β β - KΓ€seplatte (Emmentaler, GruyΓ¨re, Appenzeller) β β β
β β β - Aufschnittplatte β β β
β β β - GemΓΌse-Sticks mit Dips β β β
β β β - CanapΓ©s (Lachs, TrΓΌffel, vegetarisch) β β β
β β β - Brot und Butter β β β
β β β β β β
β β β GetrΓ€nke: β β β
β β β - Weisswein (2 Flaschen pro 10 Personen) β β β
β β β - Rotwein (1 Flasche pro 10 Personen) β β β
β β β - Mineralwasser, Orangensaft β β β
β β β β β β
β β β GeschΓ€tzter Preis: CHF 45.- pro Person β β β
β β β Total (142 Personen): CHF 6'390.- β β β
β β β β β β
β β β Lieferzeit: 17:30 Uhr (Setup bis 18:00) β β β
β β β β β β
β β β Kontaktiert am: 15.02.2025 β β β
β β β BestΓ€tigt am: 18.02.2025 β β β
β β β β β β
β β β ] β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Headcount Estimate β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β β
β β β β β β
β β β Current Registrations: 142 β β β
β β β Estimated Walk-ins: [10 ] β β β
β β β Total Headcount: 152 β β β
β β β β β β
β β β βΉ Registration count updates automatically β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β [Save Changes] β β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Interactions:
-
Task Checklist
- Checkboxes for each catering task
- Clicking checkbox marks task as complete
- Status indicators:
- β Due soon (within 2 weeks)
- β° Overdue (past due date)
- β Complete
- β Pending (not due yet)
- Due dates calculated automatically based on event date
-
Caterer Information Fields
- Free-text input fields for caterer details
- Optional fields (not required)
- Saved on βSave Changesβ
-
Menu Details
- Large free-text area for menu notes
- No structured format required (MVP = flexibility)
- Organizer can paste caterer quote, menu options, pricing
- Auto-saved on blur
-
Headcount Estimate
- Current Registrations: Read-only, pulled from event registration data
- Estimated Walk-ins: Editable number field (organizerβs judgment)
- Total Headcount: Calculated automatically (Registrations + Walk-ins)
- Info tooltip: Registration count updates in real-time
-
Save Changes
- Saves all catering information
- Shows success toast: βCatering details savedβ
Screen 2: Task Completion Confirmation
Context: Organizer clicks checkbox to mark task complete
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Mark Task Complete [Close Γ] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Task: Contact caterer 1 month before event β
β β
β Mark this task as complete? β
β β
β Optional: Add completion note β
β [Called Frau MΓΌller, confirmed ApΓ©ro Riche package for 150 persons. β
β Delivery at 17:30. Total CHF 6'750.- (incl. service) β
β β
β ] β
β β
β [Cancel] [Mark Complete] β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Interactions:
-
Completion Note
- Optional free-text field
- Timestamped and saved with task completion
- Visible in task history
-
Mark Complete
- Marks task as β Complete
- Saves completion timestamp and note
- Shows success toast: βTask marked completeβ
-
Cancel
- Closes dialog without marking complete
Screen 3: Task History Sidebar
Context: Click βView Historyβ link in Tasks section
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Task History [Close Γ] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β Contact caterer 1 month before event β β
β β β β
β β Completed: 15.02.2025, 14:30 by Anna Schmidt β β
β β β β
β β Note: Called Frau MΓΌller, confirmed ApΓ©ro Riche package for β β
β β 150 persons. Delivery at 17:30. Total CHF 6'750.- β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β Confirm final headcount with caterer (1 week before) β β
β β β β
β β Completed: 08.03.2025, 10:15 by Peter Weber β β
β β β β
β β Note: Final headcount 152 (142 registered + 10 walk-ins). β β
β β Updated order to 155 portions (buffer). β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β Confirm delivery time and setup β β
β β β β
β β Completed: 08.03.2025, 10:20 by Peter Weber β β
β β β β
β β Note: Delivery confirmed 17:30. Caterer needs access to β β
β β kitchen. Setup time: 30 min. β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Interactions:
-
Task History List
- Shows all completed tasks in chronological order (newest first)
- Each task shows completion timestamp, completing user, and note
- Read-only view
-
Close
- Closes sidebar and returns to Catering Coordination dashboard
Screen 4: Catering Reminder Notification
Context: Automated reminder 1 month before event (if task not complete)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BATbern Event Management [Anna Schmidt βΌ] β
β [Dashboard] [Events] [Profile] π Notifications β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Notifications β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β Catering Reminder Today, 09:00 β β
β β β β
β β Event: Spring BATbern 2025 - Nachhaltiges Bauen β β
β β Date: 15. MΓ€rz 2025 (in 30 days) β β
β β β β
β β Task: Contact caterer 1 month before event β β
β β Due: Today β β
β β β β
β β Expected attendees: 142 registered β β
β β β β
β β [View Event Logistics] [Mark Complete] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Interactions:
-
Notification Card
- Shows catering task reminder
- Includes event details and due date
- Shows current registration count for headcount reference
-
View Event Logistics
- Navigates to Event Detail β Logistics β Catering
- Opens catering coordination dashboard (Screen 1)
-
Mark Complete
- Opens task completion dialog (Screen 2)
- Allows quick completion without navigating to event
Screen 5: Dashboard Catering Overview (Organizer Dashboard)
Context: Organizer Dashboard showing all events with catering status
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BATbern Event Management [Anna Schmidt βΌ] β
β [Dashboard] [Events] [Profile] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β My Events β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Filter: [All Events βΌ] Sort by: [Date βΌ] β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Spring BATbern 2025 - Nachhaltiges Bauen β β
β β β β
β β Date: 15. MΓ€rz 2025, 18:00 Uhr β β
β β Status: Planning β β
β β Attendees: 142 registered β β
β β β β
β β Catering: β 1 task due soon β β
β β β β
β β [View Details] [View Logistics] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Autumn BATbern 2025 - Digitalisierung in der Architektur β β
β β β β
β β Date: 20. September 2025, 18:00 Uhr β β
β β Status: Planning β β
β β Attendees: 45 registered β β
β β β β
β β Catering: β All tasks complete β β
β β β β
β β [View Details] [View Logistics] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Interactions:
-
Catering Status Badge
- β X tasks due soon (orange)
- β° X tasks overdue (red)
- β All tasks complete (green)
- β No tasks due (gray)
-
View Logistics
- Navigates directly to Event Detail β Logistics β Catering
- Quick access to catering coordination
Navigation Map
Organizer Dashboard (Screen 5)
β
ββ Event Card β View Logistics
β β
β ββ Catering Coordination Dashboard (Screen 1)
β β
β ββ Task Checkbox β Task Completion Dialog (Screen 2)
β β
β ββ View History β Task History Sidebar (Screen 3)
β β
β ββ Save Changes β Saves all catering info
System Notifications (Screen 4)
β
ββ Catering Reminder β View Event Logistics β Screen 1
β
ββ Mark Complete β Task Completion Dialog (Screen 2)
API Requirements
GET /api/events/{eventId}/catering
Purpose: Retrieve catering coordination details for an event
Response:
{
"eventId": "evt_12345",
"eventDate": "2025-03-15T18:00:00Z",
"registrationCount": 142,
"tasks": [
{
"taskId": "task_1",
"title": "Contact caterer 1 month before event",
"dueDate": "2025-02-15",
"status": "completed",
"completedAt": "2025-02-15T14:30:00Z",
"completedBy": {
"userId": "usr_12345",
"name": "Anna Schmidt"
},
"note": "Called Frau MΓΌller, confirmed ApΓ©ro Riche package..."
},
{
"taskId": "task_2",
"title": "Confirm final headcount with caterer (1 week before)",
"dueDate": "2025-03-08",
"status": "pending",
"completedAt": null,
"completedBy": null,
"note": null
}
],
"caterer": {
"name": "Berner ApΓ©ro Service AG",
"contactPerson": "Frau MΓΌller",
"phone": "+41 31 987 65 43",
"email": "mueller@apero-service.ch"
},
"menuDetails": "ApΓ©ro Riche Package:\n\n- KΓ€seplatte...",
"headcountEstimate": {
"registrations": 142,
"estimatedWalkins": 10,
"total": 152
}
}
PUT /api/events/{eventId}/catering
Purpose: Update catering coordination details
Request:
{
"caterer": {
"name": "Berner ApΓ©ro Service AG",
"contactPerson": "Frau MΓΌller",
"phone": "+41 31 987 65 43",
"email": "mueller@apero-service.ch"
},
"menuDetails": "ApΓ©ro Riche Package:\n\n- KΓ€seplatte...",
"estimatedWalkins": 10
}
Response:
{
"eventId": "evt_12345",
"saved": true,
"updatedAt": "2025-02-15T15:00:00Z"
}
POST /api/events/{eventId}/catering/tasks/{taskId}/complete
Purpose: Mark catering task as complete
Request:
{
"note": "Called Frau MΓΌller, confirmed ApΓ©ro Riche package for 150 persons..."
}
Response:
{
"taskId": "task_1",
"status": "completed",
"completedAt": "2025-02-15T14:30:00Z",
"completedBy": {
"userId": "usr_12345",
"name": "Anna Schmidt"
},
"note": "Called Frau MΓΌller, confirmed ApΓ©ro Riche package..."
}
POST /api/events/{eventId}/catering/tasks/{taskId}/reopen
Purpose: Reopen completed task (if organizer needs to redo)
Response:
{
"taskId": "task_1",
"status": "pending",
"completedAt": null,
"completedBy": null,
"note": null
}
GET /api/events/{eventId}/catering/tasks/history
Purpose: Get task completion history
Response:
{
"eventId": "evt_12345",
"history": [
{
"taskId": "task_1",
"title": "Contact caterer 1 month before event",
"completedAt": "2025-02-15T14:30:00Z",
"completedBy": {
"userId": "usr_12345",
"name": "Anna Schmidt"
},
"note": "Called Frau MΓΌller, confirmed ApΓ©ro Riche package..."
}
]
}
Validation Rules
-
Registration Count
- Read-only, pulled from event registration data
- Updates in real-time as registrations come in
-
Estimated Walk-ins
- Must be non-negative integer
- Default: 0
- Warning if > 20% of registrations (potential overestimate)
-
Task Due Dates
- Calculated automatically based on event date
- Cannot be manually changed (Phase 2 feature)
-
Task Completion
- Only tasks with status βpendingβ can be marked complete
- Completed tasks can be reopened if needed
Edge Cases
-
Event Rescheduled
- Task due dates recalculate automatically based on new event date
- Show warning: βEvent date changed. Task due dates updated.β
-
Low Registration Count
- If registrations < 20, show warning: βLow registration count. Confirm caterer minimum order quantity.β
-
High Walk-in Estimate
- If estimated walk-ins > 20% of registrations, show info tooltip: βHigh walk-in estimate. Consider increasing order to avoid shortages.β
-
Task Overdue
- Task status changes to β° Overdue
- Notification sent to event organizer
- Highlighted in red on dashboard
-
No Caterer Information
- If caterer fields empty, show info message: βAdd caterer information to track catering coordination.β
- Not blocking - organizer can skip if catering not needed
Internationalization (i18n)
FROM MVP LAUNCH (Day 1):
Language Support
- Primary: German (de-CH) - Swiss German locale (default)
- Secondary: English (en-US)
- Language Selector: Header shows
π DE βΌ | ENfor language switching
UI Text Translation
All interface text translated in both languages:
- Task titles and descriptions
- Status indicators (Due Soon/Overdue/Complete/Pending)
- Field labels (Caterer Name, Contact Person, Phone, Email, Menu Details)
- Headcount section labels (Current Registrations, Estimated Walk-ins, Total Headcount)
- Button labels (Save Changes, Mark Complete, View History)
- Table headers (Date Sent, Task, Status)
- Success/error toast messages
- Notification messages
Translation Keys
// Catering Coordination
catering.title = "Catering Coordination" | "Catering-Koordination"
catering.eventDate = "Event Date" | "Event-Datum"
catering.expectedAttendees = "Expected Attendees" | "Erwartete Teilnehmer"
catering.registered = "registered" | "registriert"
// Tasks
catering.tasks.title = "Tasks" | "Aufgaben"
catering.tasks.contact = "Contact caterer 1 month before event" | "Caterer 1 Monat vor Event kontaktieren"
catering.tasks.confirmHeadcount = "Confirm final headcount with caterer (1 week before)" | "Finale Teilnehmerzahl mit Caterer bestΓ€tigen (1 Woche vorher)"
catering.tasks.confirmDelivery = "Confirm delivery time and setup" | "Lieferzeit und Aufbau bestΓ€tigen"
catering.tasks.due = "Due" | "FΓ€llig"
catering.tasks.dueSoon = "Due soon" | "Bald fΓ€llig"
catering.tasks.overdue = "Overdue" | "ΓberfΓ€llig"
catering.tasks.complete = "Complete" | "Erledigt"
catering.tasks.pending = "Pending" | "Ausstehend"
catering.tasks.inDays = "in {days} days" | "in {days} Tagen"
// Caterer Information
catering.caterer.title = "Caterer Information" | "Caterer-Informationen"
catering.caterer.name = "Caterer Name" | "Caterer-Name"
catering.caterer.contact = "Contact Person" | "Kontaktperson"
catering.caterer.phone = "Phone" | "Telefon"
catering.caterer.email = "Email" | "E-Mail"
// Menu Details
catering.menu.title = "Menu Details" | "MenΓΌ-Details"
catering.menu.placeholder = "Enter menu details, pricing, delivery time, etc." | "MenΓΌ-Details, Preise, Lieferzeit usw. eingeben"
// Headcount
catering.headcount.title = "Headcount Estimate" | "Teilnehmerzahl-SchΓ€tzung"
catering.headcount.registrations = "Current Registrations" | "Aktuelle Registrierungen"
catering.headcount.walkins = "Estimated Walk-ins" | "GeschΓ€tzte Walk-ins"
catering.headcount.total = "Total Headcount" | "Gesamtteilnehmerzahl"
catering.headcount.info = "Registration count updates automatically" | "Registrierungsanzahl wird automatisch aktualisiert"
// Actions
catering.button.save = "Save Changes" | "Γnderungen speichern"
catering.button.markComplete = "Mark Complete" | "Als erledigt markieren"
catering.button.viewHistory = "View History" | "Verlauf anzeigen"
catering.button.cancel = "Cancel" | "Abbrechen"
// Task Completion
catering.complete.title = "Mark Task Complete" | "Aufgabe als erledigt markieren"
catering.complete.question = "Mark this task as complete?" | "Diese Aufgabe als erledigt markieren?"
catering.complete.note = "Optional: Add completion note" | "Optional: Abschlussnotiz hinzufΓΌgen"
catering.complete.notePlaceholder = "E.g., Called caterer, confirmed menu..." | "Z.B. Caterer angerufen, MenΓΌ bestΓ€tigt..."
// Messages
catering.success.saved = "Catering details saved" | "Catering-Details gespeichert"
catering.success.taskComplete = "Task marked complete" | "Aufgabe als erledigt markiert"
catering.error.save = "Failed to save catering details" | "Fehler beim Speichern der Catering-Details"
// History
catering.history.title = "Task History" | "Aufgabenverlauf"
catering.history.completed = "Completed" | "Erledigt"
catering.history.by = "by" | "von"
catering.history.note = "Note" | "Notiz"
// Warnings
catering.warning.lowRegistrations = "Low registration count. Confirm caterer minimum order quantity." | "Geringe Registrierungsanzahl. Mindestbestellmenge beim Caterer prΓΌfen."
catering.warning.highWalkins = "High walk-in estimate. Consider increasing order to avoid shortages." | "Hohe Walk-in-SchΓ€tzung. Bestellung erhΓΆhen, um EngpΓ€sse zu vermeiden."
Implementation
- Framework: react-i18next with i18next-browser-languagedetector
- Translation Files:
/locales/de/catering.json/locales/en/catering.json
- Dynamic Switching: Language change applies immediately without page reload
- Namespace:
cateringnamespace for all catering-related translations - Date Formatting: Use
date-fnswith locale support- German: β15. Februar 2025β (due date), β15.02.2025, 14:30β (completion timestamp)
- English: βFebruary 15, 2025β (due date), β02/15/2025, 2:30 PMβ (completion timestamp)
- Relative Time: Use
date-fnsfor βin X daysβ calculation- German: βin 14 Tagenβ, βvor 2 Stundenβ
- English: βin 14 daysβ, β2 hours agoβ
Notification Messages
- Task Due Soon (sent 3 days before due date):
- German: βErinnerung: Catering-Aufgabe β{taskTitle}β fΓ€llig am {dueDate} fΓΌr Event β{eventTitle}ββ
- English: βReminder: Catering task β{taskTitle}β due on {dueDate} for event β{eventTitle}ββ
- Task Overdue:
- German: βΓberfΓ€llig: Catering-Aufgabe β{taskTitle}β fΓΌr Event β{eventTitle}ββ
- English: βOverdue: Catering task β{taskTitle}β for event β{eventTitle}ββ
Dashboard Integration
- Catering Status Badge (shown on event cards in organizer dashboard):
- German: ββ 1 Aufgabe bald fΓ€lligβ | ββ° 1 Aufgabe ΓΌberfΓ€lligβ | ββ Alle Aufgaben erledigtβ | ββ Keine fΓ€lligen Aufgabenβ
- English: ββ 1 task due soonβ | ββ° 1 task overdueβ | ββ All tasks completeβ | ββ No tasks dueβ
Future Enhancements (Phase 2)
- Dietary Preferences Collection: Collect dietary restrictions from attendees (vegetarian, vegan, allergies) - EXPLICITLY NOT NEEDED IN MVP
- Menu Selection UI: Structured menu builder with predefined packages (bilingual menu items)
- Caterer Database: Reusable caterer contacts across events
- Email Integration: Send caterer emails directly from platform (bilingual email templates)
- Budget Tracking: Track catering costs vs. event budget (currency formatting de-CH: CHF, en-US: CHF)
- Automated Headcount Updates: Send updated headcount to caterer automatically
- Vendor Portal: Caterer can confirm orders via portal (bilingual caterer interface)
- Invoice Upload: Upload and track caterer invoices
- French Support: Add French language option for trilingual Switzerland
Related Stories
- Epic 4 Story 4.6: Event Registration (provides registration count)
- Story 5.1: Event Type Definition (defines event date for task calculation)
- Story 5.11: Agenda Finalization (triggers final headcount confirmation)
- Epic 2 Story 2.9: User Management (provides notification recipients)
Accessibility Notes
- Task checkboxes must be keyboard accessible
- Screen reader support for task status indicators
- Free-text fields must support screen reader descriptions
- Color-blind safe status colors (use icons + text)
- Task due dates must be announced by screen readers
Responsive Behavior
- Desktop (>1024px): Full 2-column layout (tasks left, details right)
- Tablet (768-1024px): Single column, stacked sections
- Mobile (<768px): Single column, collapsible sections