A production-ready Android tablet application for managing guest lists, volunteers, and shifts for two concert venues: Groove and Le Terreau, with a robust two‑way Google Sheets synchronization system.
- Overview
- Main Features
- App Screens & Workflows
- Technical Overview
- Google Sheets Integration
- Volunteer Ranks & Benefits
- Performance Optimizations
- Installation & Setup
- Usage Guide for Staff
- Troubleshooting
- For Developers
- Additional Documentation
The Event Manager app is designed for tablet use in the field during events. It centralizes:
- Guest lists for Groove and Le Terreau
- Volunteers, their shifts, and historical activity
- Automatic rank and benefits calculation
- Two‑way synchronization with a central Google Sheets document to keep multiple tablets and staff aligned.
The app is optimized for landscape tablets and aims to be fast, robust, and simple to use during real events.
- Separate guest lists per venue: Groove and Le Terreau.
- Add / edit / delete guests with:
- Name
- Number of invitations
- Venue
- Notes
- Flag for volunteer benefit guests (protected from deletion).
- Invitation quotas per guest.
- Automatic sync to Google Sheets after any change.
- Manual sync button for explicit updates before / during events.
- Full volunteer profiles:
- Name and last name abbreviation
- Contact (email, phone)
- Date of birth
- Rank
- Active / inactive status
- Job and shift tracking linked to volunteers.
- Automatic rank calculation based on activity and committee roles.
- Job history is visible so staff can see a volunteer’s past contributions.
- Record shifts with:
- Linked volunteer
- Job type
- Venue
- Date
- Shift time (before or after midnight)
- Notes and completion status
- Shift data is used to:
- Calculate ranks
- Derive benefits
- Power statistics / dashboards
Ranks are calculated from shift history and roles. Core ranks:
- NOVA: Shift before midnight
- ÉTOILE: Shift after midnight
- GALAXIE: 3+ shifts/meetings per month
- ORION: Committee / coordination roles (manual assignment)
- VÉTÉRAN: Former ORION volunteers
See Volunteer Ranks & Benefits for exact benefits.
- Real-time calculation of benefits from rank and recent activity.
- Clear descriptions of what each volunteer is entitled to:
- Free entries
- Guest invitations
- Drink tokens
- Bar discounts
- Designed so door and bar staff can quickly verify benefits during events.
- Uses a service account and Google Sheets API v4.
- Backup mode (Local → Sheets):
- Every local change triggers a full dataset backup for that feature.
- Guarantees Sheets always has a complete up‑to‑date backup.
- Sync mode (Sheets → Local):
- Manual or page‑change sync pulls the latest data from Sheets to the tablet, replacing local data.
- Ensures all tablets and staff see a consistent picture.
- Designed and tested for Android tablets in landscape:
- Large touch targets
- Clear typography and spacing
- Material Design 3 components
- Layouts tuned for multi-column tablet views
- Ideal for front-of-house staff and volunteers during events.
- Venue filter (Groove / Le Terreau) using chips or tabs.
- Add Guest button to quickly add new entries.
- Edit / delete icons on each guest row.
- Guests linked to volunteer benefits cannot be deleted, to preserve benefit history.
- Data is immediately synced and visible to other devices via Sheets.
- Displays all volunteers with:
- Name & abbreviation
- Rank
- Active status
- From here you can:
- Add / edit volunteer profiles
- View their job history
- See current rank and implied benefits
-
Shifts Screen:
- Add new shifts for volunteers
- Set venue, date, time (before/after midnight), and job type
- Mark completion and add notes
-
Shift Types Screen:
- Configure available job types
- Define:
- Status (active/inactive)
- Whether it counts as ORION-type work
- Whether it requires time
- Description
- Dedicated logic + sheet for volunteers who earn guest-list spots.
- Automatically generates guest list entries for volunteers based on rank and rules.
- Ensures benefits are accurately reflected at the door.
- Venues Sheet in Google Sheets:
- Name
- Description
- Status
- Last Modified
- In-app tools to manage and sync venues, ensuring guest lists and shifts always refer to valid venues.
- Stats screen (when enabled) provides:
- Volunteer guest list data
- Volunteer invites statistics
- Venue shift distribution
- Total shift counts
- Expensive calculations are offloaded to background threads to avoid UI freezes.
- Settings tab includes:
- Spreadsheet ID configuration
- Sheet names configuration (Guests, Volunteers, Shifts, Shift Types, Volunteer Guest List, Venues)
- Service account key configuration / status
- Test Connection action
- Optional Debug Mode for detailed logs
- Sync controls:
- Manual sync
- Backup triggers
- Data structure validation / auto-fix
- Language: Kotlin
- UI: Jetpack Compose (Material 3)
- Architecture: MVVM + Repository pattern
- Database: Room (SQLite)
- Dependency Injection: Hilt (or DI modules, depending on branch)
- Async: Coroutines + Flow / StateFlow
- Navigation: Navigation Compose
- Cloud Integration: Google Sheets API v4 using a service account
- MVVM:
- ViewModels manage UI state and handle sync logic.
- Repositories abstract the database and network layers.
- Room:
- Local persistence with proper indices for performance.
- TwoWaySyncSystem:
TwoWaySyncService,SyncManager,DataStructureValidator, andEventManagerViewModelcoordinate all sync operations and validations.
- StateFlow / Compose:
- UI reacts to changes via
StateFlowfor sync status, errors, and data updates.
- UI reacts to changes via
app/ src/main/java/com/eventmanager/app/ data/ dao/ # Room DAOs database/ # Database configuration models/ # Data models (Guest, Volunteer, Job, JobType, Venue, etc.) remote/ # Google Sheets service(s) repository/ # Repository implementations sync/ # Two-way sync system & configuration di/ # Dependency injection (Hilt/modules) ui/ components/ # Reusable Compose components screens/ # Screen-level Composables theme/ # Material 3 theme viewmodel/ # ViewModels (EventManagerViewModel, etc.) MainActivity.kt # App entry point