Skip to content

zipos/tramio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tramio

Geofenced audio guide for ordinary city transit rides. React Native (Expo bare) + TypeScript app targeting iOS and Android.

Portfolio demo. Spec-driven MVP showcasing monorepo architecture, a pure tour engine with property tests, Expo-module runtime wiring, and offline-first design. Licensed under Apache-2.0. See HANDOFF.md for engineering context.

Layout

The repository root is the Expo bare React Native app. Native projects (ios/, android/) are not committed — they are generated by expo prebuild from app.config.ts and the local config plugins under plugins/.

.
├── App.tsx                       Entry component
├── index.ts                      RN registerRootComponent
├── app.config.ts                 Expo config (Info.plist, AndroidManifest, ...)
├── eas.json                      EAS Build profiles (development / preview / production)
├── plugins/                      Local Expo config plugins
│   └── withTramioForegroundService.ts
├── packages/                     (Future) module boundaries — see task 1.3
└── .kiro/specs/urban-narrative-mvp/   Spec, design, tasks, requirements

Prerequisites

  • Node 20 or newer (the lockfile is built against the active Node).
  • Expo SDK 57 (React Native 0.86, React 19.2). Run npx expo install --fix after pulling.
  • An Expo account (npx expo login) for EAS Build.
  • Xcode 16 + CocoaPods for iOS; Android Studio with SDK Platform 37 (Android 17) + Build-Tools 37.x for Android.

Development

npm install
npx expo prebuild              # generate ios/ + android/ from app.config.ts
npm run ios                    # or `npm run android`

EAS Build

Profiles are configured in eas.json:

  • development — internal distribution, simulator-friendly, dev client enabled.
  • preview — internal QA builds, real-device only.
  • production — store-bound, auto-incrementing build numbers.
npx eas-cli build --profile development --platform ios
npx eas-cli build --profile development --platform android

Background execution & permissions

The Tour_Engine needs to keep playing while the user locks their phone. The following entries flow from app.config.ts into the generated manifests:

iOS — Info.plist

  • UIBackgroundModes: audio, location, fetch (Req 12.1, 12.2)
  • NSLocationWhenInUseUsageDescription and the always variants (Req 11.x, 12.2)

Android — AndroidManifest.xml

  • Permissions (Req 12.2, 12.4): ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_BACKGROUND_LOCATION, FOREGROUND_SERVICE, FOREGROUND_SERVICE_LOCATION, FOREGROUND_SERVICE_MEDIA_PLAYBACK, POST_NOTIFICATIONS, WAKE_LOCK, INTERNET, ACCESS_NETWORK_STATE.
  • Foreground service component .TramioTourForegroundService with foregroundServiceType="location|mediaPlayback", registered via the withTramioForegroundService config plugin (Req 12.1, 12.2).

License

Apache License 2.0 — see LICENSE and NOTICE.

About

Tramio - geofenced audio transit tours (Expo/React Native)

Resources

License

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors