Also available in: Español · Français · Nederlands
A local-area circular assassination game you play IRL — GPS-assisted, photo-based. Two game modes: most frames wins (default) or last player standing.
IDEA.md holds the full game design.
Framed is a real-world assassination game, played with your phone's GPS and camera instead of nerf guns. Everyone gets a secret target, and "killing" them just means snapping a candid photo of them off guard. Frame your target and you inherit whoever they were hunting, so the game keeps chaining until one player is left. Set a play area in the app, gather a group of 3 or more, and go.
# Local backend (self-hosted Supabase + PostGIS)
cd backend && cp .env.example .env && docker compose up -d && cd ..
# App
flutter pub get
dart run build_runner build -d # freezed + slang codegen
flutter run # Android emulator: add --dart-define=SUPABASE_URL=http://10.0.2.2:8000Checks: dart format . · flutter analyze · flutter test
lib/features/<feature>/{data,domain,presentation}— clean architecture, feature-firstlib/core/— theme (design system), DI, config, cryptobackend/— Supabase docker-compose for local dev (backend/README.md)
lib/i18n/<locale>.i18n.json, one file per locale, same keys as en.i18n.json
(base locale) — dart run build_runner build -d fails on any missing key, so
the set can't drift out of parity. New locales just need a new file; no
config change (slang.yaml).
Supported: en (base), nl, es, fr. nl/es/fr are machine-translated
and need a native-speaker review before anyone treats their wording as final
— this is a public app, and the rule-explanation and social-copy strings
(game mode descriptions, the "good to know" body text, judging prompts) are
exactly the kind that read stilted without one. Track review sign-off per
locale in an issue against this repo.