Who's buried near you, and why did they matter? Discovery-first, story-first — the inverse of search-first apps like Find a Grave.
- Discover — nearby notable dead within a chosen radius (10 / 25 / 50 / 150 km), grouped by cemetery on a map and in a list
- Search anywhere — drop the radius on any place in the world, not just your current location
- Person detail — bio, dates, occupations, and a Wikipedia summary per soul
- Favorites — save people locally, works offline, no account required
- Avatars — pick your ghoul from 16 hand-drawn monster stickers, no account required
- Account sync — optional passwordless email OTP or Sign in with Apple; favorites and avatar mirror to Supabase (local-first — signing out keeps everything on device)
- Localized results — SPARQL query returns labels in the device language, falling back to English
No API keys required — all public, unauthenticated endpoints:
- Wikidata SPARQL (
query.wikidata.org) — burial place (P119) + coordinates (P625) viawikibase:around; nearest-150 subquery first, then enrich, to keep dense-city queries fast - Wikipedia REST summary API — bio text for the person detail screen
- Photon (komoot, OpenStreetMap-based) — geocoding for "search anywhere"
- Expo SDK 56 (React Native 0.85, CNG —
ios/androidare generated, not hand-edited) - expo-router (typed routes) + TypeScript
- NativeWind (Tailwind for React Native)
- TanStack Query for data fetching/caching
- MapLibre (
@maplibre/maplibre-react-native), CARTO dark-matter style expo-locationfor device location- Supabase — passwordless email OTP + Apple sign-in
- AsyncStorage-backed local favorites behind a
FavoritesRepositoryinterface (src/lib/favorites/) — swappable for a Supabase-backed implementation later without touching call sites
npm install
npx expo start --dev-clientExpo Go will not work — this app has native modules (MapLibre, Apple auth). You need a dev client build first (see below).
export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
RCT_USE_PREBUILT_RNCORE=0 RCT_USE_RN_DEP=1 npx expo run:iosNotes:
- The project path must contain no spaces — the React Native prebuilt-artifact download breaks otherwise.
- After adding any native module, run
npx expo prebuild --no-installandpod installbeforerun:ios. - Day-to-day loop once a dev client is installed:
npx expo start --dev-client.
src/app/ expo-router routes (index, explore, person/[qid], auth, profile, legal/)
src/components/ UI components (soul-card, souls-map, place-search, ...)
src/lib/ wikidata.ts, wikipedia.ts, geocode.ts, supabase.ts, favorites/
src/hooks/ use-nearby-souls, use-device-location, use-theme
legal/ source markdown for privacy policy + terms (synced into the app — see scripts/sync-legal.mjs)
npm run ios/npm run android— native builds (run the sync-legal prestep automatically)npm run web— Expo webnpm test— vitest, logic-only tests (src/**/*.test.ts; wikidata, geocode, favorites)npm run test:watchnpm run lint—expo lint
Privacy policy, terms of service, and support are also published at nearly-departed.miacodes.com:
Source markdown lives in legal/ and is synced into src/content/legal.ts for the in-app screens (src/app/legal/) by scripts/sync-legal.mjs.
Proprietary — copyright (c) 2026 Mia Dugas, all rights reserved. See LICENSE.



