React Native Expo Event Management

1

Part 1: Introduction & Architecture

2

Part 2: Installation on Mac, Windows, Ubuntu

3

Part 3: Project Setup

4

Part 4: Admin Authentication

5

Part 5: Event Management

6

Part 6: QR Scanner for Attendance

7

Part 7: Polish & Deploy

This article is available in Indonesian

šŸ‡®šŸ‡© Baca dalam Bahasa Indonesia

January 21, 2026

šŸ‡¬šŸ‡§ English

React Native Expo Event Management Part 1: Introduction & Architecture

Learn the system architecture for building an event management mobile app with React Native Expo. Understand the tech stack, data flow, and folder structure.

5 min read


šŸ“– About This Project

The Lampung Dev mobile application is an event management and attendance system used by admins to:

  • āœ… View available events
  • āœ… View event details and participants
  • āœ… Scan QR codes for attendance verification
  • āœ… Record participant check-in times

This app is built to support developer community activities like meetups, workshops, and conferences.

šŸŽÆ Who Should Follow This Series?

This series is suitable for:

  • Beginners who want to learn React Native
  • Web developers looking to expand into mobile development
  • Developers interested in the Expo ecosystem
  • Anyone interested in event management systems

šŸ—ļø System Architecture

Architecture Overview

The system follows a client-server architecture with multiple clients connecting to a single REST API backend.

LayerDescription
ClientsWeb Client, Mobile Client, Admin Panel
BackendREST API built with Next.js
DatabasePostgreSQL for data persistence

System Components

ComponentTechnologyFeatures
🌐 Web ClientNext.jsLanding page, Event list, Registration
šŸ“± Mobile ClientReact Native + ExpoQR Scanner, Event list, Attendance (Focus of this series!)
āš™ļø Admin PanelNext.jsEvent CRUD, Member CRUD, Reports
šŸ”Œ REST APINext.js API Routes/api/admin/auth, /api/admin/events, /api/attendance
šŸ—„ļø DatabasePostgreSQLusers, events, attendances, registrations

Data Flow

FromToDescription
Clients (Web, Mobile, Admin)REST APIHTTP requests for data
REST APIPostgreSQLData persistence
PostgreSQLREST APIQuery results
REST APIClientsJSON responses

šŸ“± Mobile App Architecture

The mobile app follows a layered architecture pattern for clean separation of concerns.

App Layers

LayerFolderDescription
šŸ“± Presentationapp/UI screens and navigation
šŸ—ƒļø Statestore/Zustand state management
šŸ”Œ Servicesservices/API communication layer
ā˜ļø External-Backend REST API

Presentation Layer (Screens)

ScreenPathDescription
Homeapp/(tabs)/index.tsxEvent list with pull-to-refresh
Scannerapp/(tabs)/scanner.tsxQR code scanner for attendance
Accountapp/(tabs)/account.tsxUser profile and logout
Event Detailapp/event/[id].tsxEvent info and participants
Loginapp/login.tsxAdmin authentication

State Layer (Zustand Store)

StoreFunctionsDescription
auth.tstoken, user, setAuth(), logout(), initialize()Authentication state management

Service Layer (API Calls)

ServiceFunctionsAPI Endpoint
api.tsAxios instanceBase configuration + interceptors
auth.tsloginAdmin()POST /api/admin/auth
events.tsgetAdminEvents(), getEventDetail()GET /api/admin/events
attendance.tsrecordAttendance()POST /api/attendance

šŸ”„ Data Flow Diagrams

Authentication Flow

StepActionDescription
1ļøāƒ£User enters credentialsEmail and password on Login screen
2ļøāƒ£Call loginAdmin()Service sends POST to /api/admin/auth
3ļøāƒ£API validatesServer checks credentials in database
4ļøāƒ£Receive tokenAPI returns { token, user }
5ļøāƒ£Store authZustand saves to SecureStore (encrypted)
6ļøāƒ£Navigate to HomeUser redirected to tab navigator

QR Attendance Flow

StepActionDescription
1ļøāƒ£Admin scans QRCamera reads QR code from participant
2ļøāƒ£Decode dataParse format: eventId:uniqueCode
3ļøāƒ£Call APISend POST to /api/attendance
4ļøāƒ£Validate registrationServer checks if participant is registered
5ļøāƒ£Record check-inDatabase saves attendance timestamp
6ļøāƒ£Show resultDisplay success/error animation

šŸ› ļø Tech Stack

TechnologyPurposeWhy?
React NativeMobile frameworkCross-platform (iOS + Android)
ExpoDevelopment platformFast setup, no native code required
Expo RouterNavigationFile-based routing like Next.js
NativeWindStylingTailwind CSS syntax (familiar)
ZustandState managementSimple, lightweight, no boilerplate
AxiosHTTP clientInterceptors for auth headers
SecureStoreToken storageEncrypted storage (secure)
Expo CameraQR scanningNative camera access

šŸ“‚ Folder Structure

FolderFilesDescription
app/-Screens (Expo Router)
app/(tabs)/index.tsx, scanner.tsx, account.tsxTab navigation screens
app/event/[id].tsxEvent Detail (dynamic route)
app/login.tsx, _layout.tsx, +not-found.tsxLogin, Root Layout, 404
components/EventCard.tsx, LoadingSpinner.tsxReusable UI components
services/api.ts, auth.ts, events.ts, attendance.tsAPI communication layer
store/auth.tsZustand state management
constants/Colors.tsApp constants
utils/theme.tsUtility functions
assets/fonts/, images/Static assets

šŸ” Security

Security LayerImplementationDescription
Token Storageexpo-secure-storeEncrypted keychain/keystore
API CommunicationHTTPS onlyTLS encryption in transit
AuthenticationJWT tokensShort-lived, server-validated
AuthorizationRole-basedAdmin-only endpoints

šŸ“… Learning Path

WeekPartsTopics
Week 1Part 1-3Architecture, Installation, Project Setup
Week 2Part 4-5Authentication, Event Management
Week 3Part 6-7QR Scanner, Polish & Deploy

āœ… Checklist Before Moving On

Before proceeding to Part 2, make sure you:

  • Understand the overall system architecture
  • Know the authentication and QR attendance flows
  • Are familiar with the tech stack
  • Have an Expo account (free at expo.dev)

šŸš€ Next Steps

In Part 2, we'll set up the development environment on Mac, Windows, or Ubuntu including Node.js, VS Code, Expo CLI, and Android Studio/Xcode.


Next: Installation on Mac, Windows, Ubuntu →


This series is created to support the Casual Meetup #15 at LampungDev.

Continue Reading

Previous article

← Previous Article

Laravel E-Learning Part 8: Production Deployment

Next Article →

React Native Expo Event Management Part 2: Instalasi di Mac, Windows, Ubuntu

Next article