Offline-first emergency fire station finder and fire safety guidance for Ghana. React Native and Expo.
# FireReach App
Expo / React Native client for FireReach: find the nearest fire station, get
its number, and reach fire-safety guidance that still works with no signal.
> **Station data is development seed data and is NOT verified for emergency
> use.** Bundled contact numbers are regional GNFS command lines archived on
> 2022-08-09, not per-station direct lines. Confirm every number with the
> Ghana National Fire Service before any production or emergency-facing
> release.
## Stack
| Concern | Choice |
| --- | --- |
| Framework | Expo SDK 55, React Native 0.83, React 19 |
| Language | TypeScript |
| Navigation | React Navigation 7 (native stack + bottom tabs) |
| Storage | AsyncStorage |
| Device | expo-location, expo-network |
| Icons | phosphor-react-native |
| Type | Inter via @expo-google-fonts |
| Widgets | expo-widgets with @expo/ui SwiftUI |
| Tests | Jest via jest-expo |
## Quick start
```bash
npm install
cp .env.example .env
npm start # then i / a, or scan the QR
```
Or build straight onto a device or simulator:
```bash
npm run ios
npm run android
```
The app needs the FireReach API running. Start it from the `api` repo
(`make docker-up`), which serves `
localhost`.
### Environment
| Variable | Default | Notes |
| --- | --- | --- |
| `EXPO_PUBLIC_API_URL` | `
localhost` | Inlined into the JS bundle at build time |
`EXPO_PUBLIC_*` variables are compiled into the bundle, so never put a secret
in `.env`.
Testing on a physical device means pointing this at your machine's LAN address
(`
192.168.1.42`). iOS App Transport Security blocks cleartext HTTP
to a LAN IP unless `NSAllowsLocalNetworking` is added to the iOS `Info.plist`.
The simulator is exempt when talking to localhost.
## Structure
```
src/
screens/
HomeScreen nearest station, distance, call control
StationsScreen list, detail, community report
SafetyScreen guides hub, guide detail, AI chat
SettingsScreen saved place …