Go to file
Ravi Gulhane 51e679d6ec Add blank-badge assignment and improve offline check-in flows.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-30 09:39:46 +05:30
__tests__ first commit 2026-06-03 13:50:59 +05:30
android first commit 2026-06-03 13:50:59 +05:30
dev-server first commit 2026-06-03 13:50:59 +05:30
ios Improve check-in UX and offline support. 2026-08-06 13:05:00 +05:30
scripts first commit 2026-06-03 13:50:59 +05:30
src Add blank-badge assignment and improve offline check-in flows. 2026-09-30 09:39:46 +05:30
.env.example Add React Native tooling and project config 2026-07-08 13:57:57 +05:30
.eslintrc.js Add React Native tooling and project config 2026-07-08 13:57:57 +05:30
.gitignore Add React Native tooling and project config 2026-07-08 13:57:57 +05:30
.prettierrc.js Add React Native tooling and project config 2026-07-08 13:57:57 +05:30
.watchmanconfig Add React Native tooling and project config 2026-07-08 13:57:57 +05:30
App.tsx Improve check-in UX and offline support. 2026-08-06 13:05:00 +05:30
Gemfile first commit 2026-06-03 13:50:59 +05:30
Gemfile.lock first commit 2026-06-03 13:50:59 +05:30
README.md Add blank-badge assignment and improve offline check-in flows. 2026-09-30 09:39:46 +05:30
app.json Improve check-in UX and offline support. 2026-08-06 13:05:00 +05:30
babel.config.js first commit 2026-06-03 13:50:59 +05:30
index.js Improve check-in UX and offline support. 2026-08-06 13:05:00 +05:30
jest.config.js first commit 2026-06-03 13:50:59 +05:30
metro.config.js first commit 2026-06-03 13:50:59 +05:30
package-lock.json Add blank-badge assignment and improve offline check-in flows. 2026-09-30 09:39:46 +05:30
package.json Improve check-in UX and offline support. 2026-08-06 13:05:00 +05:30
tsconfig.json first commit 2026-06-03 13:50:59 +05:30

README.md

EventBuzz Checkins (mobile)

Bare React Native app for staff to check in event participants via search or badge QR scan. Uses the EventBuzz Dashboard API (/api/auth/login, /api/checkins/events, attendance endpoints).

Important: Metro (port 8081) is not the app UI

Opening http://localhost:8081 in a browser shows React Native’s default Metro landing page (“Welcome to React Native”). That is only the JavaScript bundler status page.

To use EventBuzz Checkins, run the app on a simulator or physical device:

source ~/.bashrc
cd eventbuzz-checkins

# Terminal 1 — keep running
npm start

# Terminal 2 — Android emulator or USB device
npm run android

# OR iOS Simulator (after pod install in ios/)
npm run ios

You should see the email login screen, not the Metro welcome page.

If the simulator still shows the old welcome screen, press r in the Metro terminal to reload, or run npm run android again from eventbuzz-checkins.

Android build note (AsyncStorage 3.x)

If Gradle reports Could not find org.asyncstorage.shared_storage:storage-android:1.0.0, the project’s android/build.gradle already adds the package’s local_repo Maven path. After npm install, run npm run android again.

Offline mode

  1. While online, open Events and tap the cloud icon (or long-press an event) → Enable Offline.
  2. The app downloads active attendance sessions + participant rosters into local SQLite.
  3. While Offline is on, search and QR check-ins always save locally (even with internet). They queue in an outbox.
  4. Every minute while online (app in the foreground), pending check-ins are uploaded. Reconnect and returning to the app also upload.
  5. Header Sync is two-way at that page’s scope:
    • Events — all Offline-enabled events (upload pending + refresh all sheets)
    • Attendance sessions — this event (upload pending + refresh all sheets)
    • Participants — this attendance sheet only (upload pending + refresh this roster)
  6. Refresh Offline Data (long-press an event) is a recovery pull of the snapshot without clearing pending outbox rows.
  7. Assign a Blank (when enabled on the attendance session in the dashboard) scans a spare badge QR, lets staff edit name/email/phone, then saves — updating that participant and checking them in. It uses the same offline outbox as check-ins.
  8. Undo on the check-in success sheet reverses the last check-in. For a later mistake, swipe a checked-in row left to reveal Uncheck-in. Staff-only; last check-in only; same offline queue. Does not revert Assign a Blank profile.

Native rebuild is required after installing @op-engineering/op-sqlite / NetInfo (npm run android / npm run ios).

Configuration

Copy .env.example to .env and set API_BASE_URL:

  • Android Emulator: http://10.0.2.2:3001/api — localhost in .env causes Network request failed
  • iOS Simulator: http://localhost:3001/api
  • Physical device: your Mac’s LAN IP, e.g. http://192.168.1.10:3001/api, and set HOST=0.0.0.0 in backend/.env

Start the API: cd backend && npm run dev (port 3001).

After changing .env, rebuild the app: npm run android (react-native-config embeds .env at build time).

QR format

Badge QRs encode eventbuzz:participant:{participantId} (same as dashboard badge PDFs).


This is a React Native project, bootstrapped using @react-native-community/cli.

Getting Started

Note: Make sure you have completed the Set Up Your Environment guide before proceeding.

Step 1: Start Metro

First, you will need to run Metro, the JavaScript build tool for React Native.

To start the Metro dev server, run the following command from the root of your React Native project:

# Using npm
npm start

# OR using Yarn
yarn start

Step 2: Build and run your app

With Metro running, open a new terminal window/pane from the root of your React Native project, and use one of the following commands to build and run your Android or iOS app:

Android

# Using npm
npm run android

# OR using Yarn
yarn android

iOS

For iOS, remember to install CocoaPods dependencies (this only needs to be run on first clone or after updating native deps).

The first time you create a new project, run the Ruby bundler to install CocoaPods itself:

bundle install

Then, and every time you update your native dependencies, run:

bundle exec pod install

For more information, please visit CocoaPods Getting Started guide.

# Using npm
npm run ios

# OR using Yarn
yarn ios

If everything is set up correctly, you should see your new app running in the Android Emulator, iOS Simulator, or your connected device.

This is one way to run your app — you can also build it directly from Android Studio or Xcode.

Step 3: Modify your app

Now that you have successfully run the app, let's make changes!

Open App.tsx in your text editor of choice and make some changes. When you save, your app will automatically update and reflect these changes — this is powered by Fast Refresh.

When you want to forcefully reload, for example to reset the state of your app, you can perform a full reload:

  • Android: Press the R key twice or select "Reload" from the Dev Menu, accessed via Ctrl + M (Windows/Linux) or Cmd ⌘ + M (macOS).
  • iOS: Press R in iOS Simulator.

Congratulations! 🎉

You've successfully run and modified your React Native App. 🥳

Now what?

  • If you want to add this new React Native code to an existing application, check out the Integration guide.
  • If you're curious to learn more about React Native, check out the docs.

Troubleshooting

If you're having issues getting the above steps to work, see the Troubleshooting page.

Learn More

To learn more about React Native, take a look at the following resources: