How it works

Personal, without reading your life.

Haunts is a phone app, a small server and an AI agent. The interesting part is where each piece of your data is allowed to go.

Watch what leaves the phone.

Pick a question. Each pill is a real message in the code path. Red ones are stopped at the phone.

Stays on the phoneYour phonememory lives hereHaunts serverAWS · FastifyClaudeOpus 5.5 agentOpenStreetMapplaces, routes, weather
The AI agent

One agent, two kinds of tools.

Claude plans on the server. Tools that touch the city run there; tools that touch your memory run on your phone and return a summary.

Runs on the server

Public data and game state: real places, walking routes on actual streets, weather, the explore-walk planner and crew scores.

search_placeswalking_routeget_weatherplan_explore_walkgame_status

Runs on your phone

Your memory. The conversation pauses, the phone asks for permission once, answers from its own database and shows what it shared.

check_visitedmemory_querytaste_profilesaved_places
Privacy rules

Enforced in code, not in a policy.

No raw location on the server

The phone turns each GPS fix into a 60 m block ID and a date. Only those are uploaded.

Private zones never recorded

Home and other zones are filtered on the phone before anything is stored, and never leave it.

No live location for friends

The crew map hides today and shows no times, so nobody can see where you are right now.

Memory is end-to-end encrypted

Backups are encrypted on the phone with a recovery code; the server keeps bytes it cannot read.

The AI never sees your timeline

When a question needs your memory, the phone asks you, then sends a short summary only.

Delete means delete

Deleting the account removes every row you own, including drops and the encrypted backup.

By the numbers

Small app, real city.

67,316

blocks cover Bengaluru

65

neighbourhoods to own

60 m

per block, about one street corner

94

automated tests on the shared core and the API

The stack

What it is built with.

Mobile app

Expo SDK 57React Native 0.86expo-routerMapLibreexpo-location background trackingSQLitespeech in and outcamera

Server

Node 22Fastify 5PostgreSQL on NeonAWS EC2Caddy with automatic HTTPSsystemd

AI

Claude Opus 5.5tool use agentstructured JSON answersvisionprompt cachingrefusal fallback

Data and builds

OpenStreetMap: Overpass, Nominatim, Photon, OSRMOpen-MeteoGitHub ActionsGitHub ReleasesGitHub Pages