kasane (重ね) — Japanese: to layer, to overlap. Anime episode and manga chapter, side by side.
Find which anime episodes cover which manga chapters, and vice versa — one app, every platform.
Three use cases:
- Manga reader — check if an anime adaptation exists for a series, and how much of the manga it covers.
- Anime viewer — figure out which manga volume to buy to continue from where the anime left off.
- Both — follow a chapter↔episode guide while consuming both.
Browse and search the catalog:
Series detail — arc-level rail mapping anime episodes to manga chapters, with MangaDex volume covers below:
Anime-side view with the Quick lookup form ("I finished episode X → you're on chapter Y"):
Drill into a single arc to see per-episode ↔ per-chapter alignment:
| Platform | How it ships |
|---|---|
| iOS | Expo / EAS Build |
| Android | Expo / EAS Build |
| Web | expo export -p web (static) |
| macOS / Windows / Linux | Tauri 2 wraps the web build |
- Expo (React Native + RN Web) + TypeScript
- Expo Router for file-based universal routes
- TanStack Query + Zustand
- AniList GraphQL for anime/manga metadata
- Supabase (Postgres + RLS) for episode↔chapter mappings, search aliases, genre filters, and synced user progress/preferences
- Tauri 2 for desktop binaries
bun install
bun run start
bun run web # browser
bun run ios # iOS simulator (Mac + Xcode required)
bun run android # Android emulator
bun run typecheckDesktop is shipped via Tauri 2 wrapping the Expo web export. One-time setup:
- Install Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Initialize the desktop project (creates
src-tauri/):bun run build:web # produces dist/ bunx tauri init \ --app-name kasane \ --window-title "Kasane" \ --frontend-dist ../dist \ --before-build-command "bun run build:web" \ --dev-url ""
- Run / build:
bun run desktop:dev # dev window bun run desktop:build # native binary
Mappings live in Supabase — the series, arc_mappings, and movies tables
(see supabase/migrations/) — not in the repo, so a new or corrected mapping
reaches every client on next launch with no app release. The catalog tables are
read-only under RLS; write via the Supabase dashboard, SQL editor, or a
service-role script.
- Find the AniList anime ID and manga ID for the series.
- Insert a
seriesrow and its arcs:
with s as (
insert into series (anilist_anime_id, anilist_manga_id, title)
values (21, 30013, 'One Piece')
returning id
)
insert into arc_mappings
(series_id, position, episode_start, episode_end, chapter_start, chapter_end, arc)
select s.id, v.*
from s, (values
(0, 1, 3, 1, 7, 'Romance Dawn')
) as v(position, episode_start, episode_end, chapter_start, chapter_end, arc);Episode and chapter ranges are inclusive; omit episode_start/episode_end
for manga-only arcs.
app/ # Expo Router routes
_layout.tsx
index.tsx # search
series/[id].tsx # detail with rail + quick lookup
src/
api/anilist.ts # GraphQL client
components/ # SeriesCard, EpisodeChapterRail
data/ # Supabase catalog fetch + mapping helpers
state/ # zustand stores + cloud sync
types/ # shared TS types
supabase/migrations/ # database schema
docs/superpowers/specs/ # design docs
src-tauri/ # desktop wrapper (added after web bundle works)
MIT (TBD)



