Veil - Poetry Reading App
A React Native reading app for poetry. Poems sync from Notion on a 5-minute cron, and GitHub Actions builds and attaches an APK to every tagged release - four automated releases so far. Push notifications prune themselves: tokens that come back with Expo's DeviceNotRegistered or InvalidCredentials are deleted on sight.

Tech Stack
React Native, Expo, Notion API, TypeScript, GitHub Actions
Features
- Notion Sync Every 5 Min
- Automated APK Releases
- Self-Pruning Push Tokens
- Native iOS & Android
What I Built
Wrote the poem reader - 611 lines in
app/poem/[id].tsx- and the settings sheet that drives type size, spacing, and theme across it.Set up the release pipeline: a tagged push builds the APK and attaches it to the GitHub release, which is exactly what Veon reads to hand out the download link.
Wrote the five-minute sync check and the push sender, both of which delete a device token the moment Expo reports it as unregistered rather than retrying a dead endpoint.
Built the home feed, favourites, search, and the force-update modal that catches people still on an old build.
Wrote
scripts/build-logo.mjs, which outlines the wordmark from the font, draws the rule under it, and rasterises the standard, adaptive, splash, and favicon variants in one command - so a design change is one script re-run, not four exports by hand.