A robust mobile application designed for CDCW to manage guest services, track budgets, and streamline check-ins using NFC technology. The system utilizes a React Native mobile app for staff and a Google Sheets backend for data storage and reporting.
- NFC Card Integration: Instantly pull up guest profiles by tapping their ID card.
- Service Logging: Track showers, laundry, meals, and hygiene kits with a single tap.
- Budget Management ("Felton Bucks"): Automatically track and deduct clothing purchases from guest budgets.
- Offline-First Architecture: Actions are queued locally and synced when internet connectivity is available, ensuring operations never stop.
- Anonymous Entry: Fast-track entry for guests without IDs.
- Cloud Backend: Leverages Google Sheets for free, accessible, and real-time database management without complex infrastructure.
- Framework: React Native (via Expo)
- Language: TypeScript
- State Management: Redux Toolkit + Redux Persist (for offline queueing)
- NFC:
react-native-nfc-manager - Navigation: React Navigation
- Logic: Google Apps Script (GAS)
- Database: Google Sheets (
Guests,Log,Analyticstabs) - API: Web App deployment of GAS (JSON-over-HTTP)
/
├── backend/
│ └── sheets/
│ └── code.gs # Google Apps Script logic (Deploy as Web App)
├── frontend/
│ ├── App.tsx # Entry point
│ ├── app/ # Screens and Navigation
│ │ ├── Navigation.tsx
│ │ └── screens/ # React Native Screens (Home, ServiceEntry, etc.)
│ ├── redux/ # State & Logic
│ │ └── slices/ # syncSlice.ts handles the Offline Queue & API
│ └── services/ # Hardware integration (NFC)
- Create a new Google Sheet.
- Create three tabs:
Guests,Log,Analytics.- Guests Columns:
Guest ID,Name,Felton Bucks Budget,Last Visit - Log Columns:
Date,Time,Guest ID,Service Type,Event ID
- Guests Columns:
- Open Extensions > Apps Script.
- Copy the contents of
backend/sheets/code.gsinto the script editor. - Critical Config:
- Update
SHEET_IDincode.gswith your Google Sheet ID.
- Update
- Deploy:
- Click
Deploy>New deployment. - Type:
Web app. - Execute as:
Me(your account). - Who has access:
Anyone(orAnyone with Google accountdepending on security needs).
- Click
- Copy URL: Save the "Web App URL" (ends in
/exec).
- Navigate to the frontend directory:
cd frontend - Install dependencies:
npm install
- Link Backend:
- Open
frontend/redux/slices/syncSlice.ts. - Replace
const API_URL = '...'with your Google Web App URL from step 1.
- Open
Start the Expo development server:
npm start- Android: Press
a(Requires Android Emulator or connected device). - iOS: Press
i(Requires Xcode or iPhone). - Physical Device: Install "Expo Go" app and scan the QR code.
Note: For NFC functionality to work, you must use a physical Android/iOS device with NFC support. Simulators cannot test NFC taps.
- Tap Card: Staff taps a guest's NFC card on the phone.
- View Profile: Guest name and budget appear.
- Log Services: Toggle "Shower", "Laundry" or increment "Meals".
- Confirm: Hitting "Submit" adds the entry to the sync queue.
- Select "Clothing Store" after scanning.
- Enter quantity of items.
- App checks local budget (if synced) or server budget.
- Deducts "Felton Bucks" and updates the sheet.
- The app attempts to sync automatically on mount.
- Manual trigger available in the hidden Debug Menu (visible in
__DEV__mode). - Failed requests are retried automatically with exponential backoff logic (implied in code).
This project is open-source.