Files
TREK/client/fastlane
Maurice f35b189ca2 feat(native): home-screen widget and travel-day Live Activity on iOS
A WidgetKit extension (TREKWidgets) with two parts: the next trip on the home
screen, with a countdown before it starts and today's day and next stops
while it runs, and a Live Activity for the travel day on the lock screen and
in the Dynamic Island showing the next timed stop and the day's progress.

The web app builds both from the trips stored offline on the device
(native/widgets.ts) and hands them over through TrekShell
(setWidgetSnapshot, syncTripDay, endTripDay). The texts are already
translated, so the widget needs no localisation of its own. The snapshot
lives in the keychain group the app shares with its extensions, so no App
Group is needed. Taps open com.liketrek.trek://navigate/<path>.

NativeWidgetsSync refreshes on start, on returning to the foreground and every
quarter hour. Both parts are gated behind the widgets / liveActivity
capabilities, so older binaries and the PWA are unaffected.
2026-11-06 15:02:55 +01:00
..

Store listings

The texts, review notes, policy drafts and images for the App Store and Google Play listings of TREK Travel Planner (com.liketrek.trek). The folder layout is the one fastlane's deliver (App Store) and supply (Google Play) read, so the listings can be uploaded from here; the builds themselves come from .github/workflows/native-release.yml.

Path What
metadata/en-US/ App Store texts: name, subtitle, keywords, description, URLs, release notes
metadata/review_information/ App Review notes and contact. Placeholders only: the review server, accounts and passwords are entered in App Store Connect, never committed
metadata/android/en-US/ Google Play texts, the changelog, and images/ (feature graphic, icon, screenshots)
metadata/privacy-policy.md, metadata/delete-account.md Drafts of the pages published at https://liketrek.com/privacy and https://liketrek.com/delete-account
screenshots/en-US/ App Store screenshots, iPhone 6.9" and iPad 13"

npm run store:check (in client/) checks every text against its store limit and every image for its size and for an alpha channel, which both stores refuse. CI runs it in the metadata job of native.yml.

Screenshots

The screenshots are not committed yet: they are captured from a running TREK with the seeded demo trip, which is a Playwright run and does not run in CI. To make them, from client/:

  1. npx playwright install chromium (once).
  2. npm run store:shots starts its own backend on a throwaway database and the Vite dev server, seeds the demo trip (the same one the wiki pictures show) and captures six screens at five device sizes into e2e/.tmp/store/.
  3. npm run store:promote checks each capture's size, flattens it onto the app background (no alpha) and copies it into screenshots/en-US/ (iPhone 6.9" 1320x2868, iPad 13" 2064x2752) and metadata/android/en-US/images/{phone,sevenInch,tenInch}Screenshots/ (1080x1920, 1620x2880, 1920x1080).
  4. npm run store:graphic rebuilds the feature graphic, now with a crop of the first phone screenshot, and the 512 px icon.
  5. npm run store:check, look through the pictures, commit.

The capture lives in e2e/store/capture.store.ts; the device sizes and screens are listed at its top.

Uploading the listing

With fastlane installed and the App Store Connect API key and Play service account at hand (the same ones the release workflow uses, see wiki/Native-Apps.md), from client/:

fastlane deliver --skip_binary_upload --metadata_path fastlane/metadata --screenshots_path fastlane/screenshots
fastlane supply --skip_upload_apk --skip_upload_aab --metadata_path fastlane/metadata/android --package_name com.liketrek.trek

Both also work from the consoles by hand; the files here are the source of truth for what the listings say.