// case study
Animania Tracker App
An offline-first Android app for tracking anime, manga, comics, webtoons, and webnovels in one library, built with Expo, SQLite, and Supabase.
- year
- 2026
- type
- Mobile app
- stack
- Expo, React Native, SQLite, Supabase

Animania is my own free app for keeping track of everything you watch and read (anime, manga, comics, webtoons, and webnovels) in one library. It works fully offline with no account. Cloud sync is optional and only kicks in after you sign in. I built the app, its backend, and its landing page, and the Android version is available there as a direct download.
Technical Implementation:
- Built the app with Expo, React Native, and expo-router, using TanStack Query, Zustand, NativeWind, and react-hook-form with zod
- Stored the library on the device in SQLite through Drizzle ORM, so every screen works without a network connection
- Designed local-first sync with Supabase:
- Every change is written to SQLite together with an outbox entry in the same transaction
- Pushes send pending outbox entries to Postgres, where row-level security enforces ownership
- Pulls fetch rows changed since the last sync and merge them with last-write-wins
- Signing in adopts the guest library and merges it with the cloud copy, and signing out never deletes local data
- Unified search across AniList, Kitsu, MangaDex, and Comic Vine through a Supabase Edge Function that normalizes results, caches them in Postgres, rate-limits requests, and keeps API keys off the device
- Added an account deletion flow through an Edge Function, as Google Play requires
- Built progress tracking with one-tap +1 and hold-to-repeat, plus status, scores, favorites, notes, a year-long activity heatmap with streaks, and a stats screen
- Light, dark, and system themes, checked against WCAG AA contrast
- Covered the main user flows with 11 Maestro end-to-end tests

Delivery:
- Release APKs are signed locally with a build script and published to Cloudflare R2
- The landing page, privacy policy, and account deletion pages are hosted on Cloudflare Pages
Tech Stack:
- App: Expo, React Native, React 19, expo-router, Drizzle ORM, SQLite
- Backend: Supabase (Postgres, row-level security, Edge Functions)
- Hosting: Cloudflare Pages, Cloudflare R2
- Testing: Maestro
Animania 1.1.0 is available for Android 7.0 and newer at animania.pages.dev. Google Play and App Store versions are planned.