Mobile · 2026
Tracking App v2
A role-based operations app for a military battalion — real-time GPS tracking of personnel on a live map, a panic-button emergency alert system, route-based patrol check-ins, and modules for attendance, letter disposition, training, and health records.
Gallery
A closer look
Login
Member home
Commander home & quick actions
Live personnel map
Panic button
Active patrol session
Patrol progress notification
Personnel detail & location
Smart Academy
Overview
What it is, and why it exists
Tracking App v2 is a React Native app I'm building for a battalion's day-to-day operations, going well beyond the original single-purpose location tracker into a full role-based platform for members, commanders, instructors, and medical officers. It covers live personnel tracking on a map, a panic button that broadcasts push alerts through Firebase, GPS + QR + selfie patrol check-ins, roll-call attendance, an incoming-letter disposition workflow, a training/assessment academy, and a health-records module — all against one role-scoped REST API.
My Role
Mobile developer — React Native app covering live GPS tracking, emergency alerting, patrol check-ins, and role-based operational modules, integrated with a REST API and Firebase push notifications.
Problem
The problem
A battalion's day-to-day operations — where personnel are, who's on patrol, letter dispositions, roll-call attendance, training progress, and health records — ran across paper logs and manual check-ins, with no live visibility for commanders and no automated way to raise or broadcast an emergency.
Solution
The solution
I'm building this as one role-scoped React Native app instead of separate tools per function: members get a panic button, live-tracked patrols, roll-call check-in, and a learning academy; commanders get a real-time personnel map, patrol monitoring, and unit-wide reporting; instructors and medical officers get their own scoped views for verification and health records — all backed by a single REST API with Firebase push notifications for anything time-sensitive (emergencies, dispositions, patrol progress).
Key Features
What it does
- Real-time personnel tracking on a live map, with nearby markers grouped into photo grids that split apart on zoom
- Panic button with background location tracking and push-notified emergency broadcasts (custom siren channel, deduped per device)
- Patrol module — route selection, QR + selfie + GPS check-in per checkpoint, with live commander monitoring
- Roll-call (apel) attendance via manual entry or QR scan, with full recap and search
- Letter disposition workflow — log incoming letters, route with priority/deadline, follow-ups, and read tracking
- Smart Academy — role-based learning: timed assessments for members, verification for instructors, unit-wide progress for commanders
- Personnel, family, vehicle, and equipment catalog with QR member cards and history tabs
- BMKG weather and earthquake widgets, OTP login, and forced/soft app-update gating
Tech Stack
Built with
Technology choices made to fit the product's real constraints, not novelty.
System architecture
Challenges
Challenges & solutions
Keeping live map markers in sync with async photo loads
Personnel markers on the live map occasionally rendered blank even though the photo had loaded, because Android's map-snapshot capture could race a photo finishing its async load, and a bitmap cached wrong on the first attempt was never re-requested afterward. I made the marker bitmap cache re-render on every relevant state change instead of caching on first attempt, so markers stay correct however the photo and the snapshot happen to interleave.
Preventing two members from patrolling the same route at once
The route list needed to show, live, whether a route was already being patrolled by someone else — locked and unclickable — while still letting the officer who owns that session jump straight back into it. Each route from the API carries an is-selectable flag and the id of any session already running on it, so the client locks a route only when it belongs to someone else, and starting a route the caller is already running returns a conflict response the app turns into a 'resume patrol' prompt instead of a silent failure.
Result
Outcome
- Actively developed over 3.5 weeks (Aug–Sep 2026) across 8 tracked releases (v0.1 → v0.8), each shipped as a versioned release build
- Ships with four scoped roles — member, commander, instructor, health officer — instead of one-size-fits-all screens
- Emergency alerts and patrol progress reach the right people over push notification (Firebase + Notifee) instead of radio or phone calls