Story 5.14: Catering Coordination - Wireframe

Epic: Epic 5 - Enhanced Organizer Workflows

Last updated: January 2, 2026 Reading time: 18 minutes File size: 39.42 KB

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:

  1. 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
  2. Caterer Information Fields

    • Free-text input fields for caterer details
    • Optional fields (not required)
    • Saved on β€œSave Changes”
  3. 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
  4. 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
  5. 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:

  1. Completion Note

    • Optional free-text field
    • Timestamped and saved with task completion
    • Visible in task history
  2. Mark Complete

    • Marks task as βœ“ Complete
    • Saves completion timestamp and note
    • Shows success toast: β€œTask marked complete”
  3. 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:

  1. Task History List

    • Shows all completed tasks in chronological order (newest first)
    • Each task shows completion timestamp, completing user, and note
    • Read-only view
  2. 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:

  1. Notification Card

    • Shows catering task reminder
    • Includes event details and due date
    • Shows current registration count for headcount reference
  2. View Event Logistics

    • Navigates to Event Detail β†’ Logistics β†’ Catering
    • Opens catering coordination dashboard (Screen 1)
  3. 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:

  1. Catering Status Badge

    • ⚠ X tasks due soon (orange)
    • ⏰ X tasks overdue (red)
    • βœ“ All tasks complete (green)
    • β—‹ No tasks due (gray)
  2. View Logistics

    • Navigates directly to Event Detail β†’ Logistics β†’ Catering
    • Quick access to catering coordination

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:

json
{
  "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:

json
{
  "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:

json
{
  "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:

json
{
  "note": "Called Frau MΓΌller, confirmed ApΓ©ro Riche package for 150 persons..."
}

Response:

json
{
  "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:

json
{
  "taskId": "task_1",
  "status": "pending",
  "completedAt": null,
  "completedBy": null,
  "note": null
}

GET /api/events/{eventId}/catering/tasks/history

Purpose: Get task completion history

Response:

json
{
  "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

  1. Registration Count

    • Read-only, pulled from event registration data
    • Updates in real-time as registrations come in
  2. Estimated Walk-ins

    • Must be non-negative integer
    • Default: 0
    • Warning if > 20% of registrations (potential overestimate)
  3. Task Due Dates

    • Calculated automatically based on event date
    • Cannot be manually changed (Phase 2 feature)
  4. Task Completion

    • Only tasks with status β€œpending” can be marked complete
    • Completed tasks can be reopened if needed

Edge Cases

  1. Event Rescheduled

    • Task due dates recalculate automatically based on new event date
    • Show warning: β€œEvent date changed. Task due dates updated.”
  2. Low Registration Count

    • If registrations < 20, show warning: β€œLow registration count. Confirm caterer minimum order quantity.”
  3. High Walk-in Estimate

    • If estimated walk-ins > 20% of registrations, show info tooltip: β€œHigh walk-in estimate. Consider increasing order to avoid shortages.”
  4. Task Overdue

    • Task status changes to ⏰ Overdue
    • Notification sent to event organizer
    • Highlighted in red on dashboard
  5. 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 β–Ό | EN for 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

javascript
// 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: catering namespace for all catering-related translations
  • Date Formatting: Use date-fns with 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-fns for β€œ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

  • 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

Testing Checklist