Skip to content
portfolio

// 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 landing page with the headline Track every anime, manga, comic, webtoon and webnovel beside phone screens of the library and stats

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

Six Animania screens: library list, one-tap progress, streak heatmap, multi-source search, dark grid view, and title preview

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.