Note: Keep the offline-sync requirement in mind during initial DB and state management architecture.
INF-1 Hosting Setup: Provision basic cloud hosting (AWS/Azure/etc.) located in South African data centers for low-latency testing.
INF-2 Offline-First Foundation: Implement browser local storage (or IndexedDB) state management for event data (capped at ~1000 records) so the app can survive temporary Wi-Fi drops.
INF-3 Sync Mechanism: Build a background sync to push local check-in/print statuses back to the cloud DB once the internet connection is restored.
AUTH-1 Email/Password Login: Build login functionality for admin users. There is no self-registration; accounts are created by an existing admin or via an approved access request.
AUTH-2 Google OAuth Login: Implement "Sign in with Google" for quick admin access (account must already exist).
AUTH-3 Public Panel Gate: Create a simple PIN or password lock to switch between the public-facing operator panel and the backend admin dashboard.
AUTH-4 Request Access Form: Provide a "Request Access" page (linked from the login screen) where prospective users can submit their name, email, company, and a short message. Submissions are stored/emailed for an admin to review and manually provision an account. No automatic account creation.
EVT-1 Create Event: Form to create a new event (Event Name, Event Date). Date is metadata only, not a hard restriction.
EVT-2 Event Customization (Branding): Allow admins to set three custom colors (primary, secondary/accent, background) for the event's public panel.
EVT-3 Event Banner Upload: Implement image upload for the event banner, displayed on the public landing page.
EVT-4 Event Dashboard/List: View all created events with options to edit details, duplicate, or delete the event entirely.
GLM-1 Excel Import: Ability to upload an Excel/CSV file of guests. Implement a hard limit of 1,000 guests per event.
GLM-2 Column Mapping Wizard: UI to map uploaded file columns to system fields (e.g., First Name, Last Name, Company, Email) and allow up to 2 custom mapped fields (e.g., "Employee Code", "Age").
GLM-3 Duplicate Detection: During import, flag duplicates based on criteria (e.g., Name + Email). Provide a UI to review, merge, or delete these duplicates.
GLM-4 Long Text Warning (Sanity Check): Scan uploaded data and flag rows where character limits (e.g., Company Name > 15 chars) might break badge printing. Allow admins to proceed anyway or edit the data directly in the UI.
GLM-5 Manual Guest Management: Table view in the backend to view, edit, delete, or group-edit uploaded guests.
OP-1 Landing Page: Public-facing screen displaying the uploaded Event Banner, custom colors, and a clear "Click here to register" call-to-action.
OP-2 Guest Search: An easily scrollable table/list view with a search bar (searching by Name, Company, Custom Field). Replaces the old 6-item limit with a full scrollable view.
OP-3 Walk-in Registration: "Add Guest" button that opens a blank form to capture details of people not on the pre-uploaded list.
OP-4 Guest Details / Edit Modal: Clicking a guest opens their profile, allowing the operator to quickly correct typos or shorten long company names before printing.
OP-5 Check-in & Print Actions: Provide distinct action buttons:
"Check-in Only" (for wristband/no-print events)
"Check-in & Print Card"
OP-6 Check-out Action: Add a "Check-out" button on the guest profile to log their departure time (specifically required for tracking CPD points).
PRN-1 Field Selection: Admin setting to choose exactly which fields print on the badge (e.g., First Name, Last Name, Company, Designation).
PRN-2 Fixed Template Base: Basic standard layout designed to print on A4/pre-printed stock (black & white text).
PRN-3 Double-Sided Fold Layout: Logic to duplicate the selected print fields on both the left and right sides of the print area so the card can be folded in half to create a double-sided badge.
PRN-4 Auto Font-Sizing: If a field string is too long, dynamically scale down the font size (to a maximum of two lines) instead of overflowing/ellipsing into other elements.
PRN-5 Print Preview: Display a visual preview of the badge on the operator's screen before confirming the print to catch overlapping text.
PRN-6 Batch Printing: Allow admins to select a group of guests (or the whole list) and batch print all their cards at once. Include a heavy warning ("You are about to print X cards. Are you sure?"). Restrict this feature for lists > 300.
PRN-7 Template Download: Provide a button to download the blank layout dimensions so clients can pre-print color backgrounds on their own printers before the event.
REP-1 Live Event Dashboard: A simple real-time stats view showing:
Total guests on the list
Number/Percentage of guests arrived (checked in)
Number of walk-ins
Total cards printed
REP-2 Post-Event Export: Downloadable Excel report of the event. It should be the exact original guest list format but appended with new system columns: Checked_In_Status, Check_In_Timestamp, Check_Out_Timestamp, and Printed_Timestamp.