We are building the best native mobile app for the Texas A&M University bus system.
The app is a SvelteKit app packaged for iOS and Android with Capacitor. Maps are rendered with MapLibre from a PMTiles basemap extract that is generated locally instead of served from a tile server.
The native projects in android/ and ios/ are checked into the repo, so build and signing settings live in the projects themselves rather than being regenerated on each build.
Tooling is managed with mise:
mise install
pnpm installGenerate the College Station basemap extract. This writes static/map/cstat.pmtiles, which is git-ignored:
pnpm pmtilesThen start the dev server:
pnpm devBuild the web assets and copy them into the native projects:
pnpm build
pnpm exec cap syncThen open the native project you want to run:
pnpm exec cap open ios
pnpm exec cap open androidTo point a native build at a running dev server instead of the bundled assets, copy dev.config.example.ts to dev.config.ts and set server.url.
pnpm lint
pnpm checkVersions are managed by release-please, which bumps version in package.json. The Android versionName is read from there at build time, and the iOS MARKETING_VERSION is passed in by fastlane. Publishing a GitHub release runs the Build App and Upload workflow, which uploads to TestFlight and the Play Store internal track.
