A safety check-in app. Set a daily check-in time — if you miss it, an escalation chain fires automatically.
Escalation chain: push notification → email → SMS to emergency contacts → non-emergency call
- Backend — FastAPI + Celery (worker + beat scheduler)
- Database — Supabase Postgres (raw SQL, no ORM)
- Frontend — Vanilla JS PWA
- Notifications — Firebase Cloud Messaging
- SMS — Twilio
- Email — Resend
- Auth — JWT + Auth0 (optional) + API keys
- Infra — Docker Compose, Redis broker
Copy .env.example to .env and fill in credentials, then:
docker-compose up --buildIndividual services: docker-compose up api / worker / beat
git clone https://github.com/xyzmr114/stillhere.git
cd stillhere
nano .env # fill in your credentials
docker-compose up -d --buildStill Here is now running at http://localhost:8000 on your VPS. The escalation chain (SMS, email, push) works over the public internet automatically via Twilio and Resend — no extra setup needed.
Rather than exposing your server to the public internet, Still Here uses Netcore for private peer-to-peer access. This lets your emergency contacts and family reach your instance directly — no open ports, no domain, no reverse proxy.
On Alice's VPS (the host):
# Download the ncp2p binary from https://www.netcore.network/services
unzip ncp2p-linux-x86_64.zip
chmod +x ncp2p
./ncp2p initDb # generates your identity + assigns internal IP
sudo ./ncp2p setup $USER # sets up WireGuard interface (re-run after reboot)
./ncp2p # starts the Netcore clientOpen http://127.0.0.1:8080/ → Identity tab → Copy peer_user JSON and send it to Bob.
On Bob's machine (the contact):
- Download and run
ncp2pfrom netcore.network/services - Open
http://127.0.0.1:8080/→ Peer users → paste Alice's JSON → Add - Copy his own peer_user JSON and send it back to Alice
- Alice adds Bob the same way
Once both sides have added each other, Bob can open Alice's Still Here instance directly:
http://<alice-internal-ip>:8000/portal # family portal — live check-in status
http://<alice-internal-ip>:8000/app # full app
Alice's internal IP is shown in http://127.0.0.1:8080/ under Overview.
The connection is direct and encrypted — traffic goes machine-to-machine, never through a central server. Bob can only reach Alice's instance while both have
ncp2prunning.
Alice's VPS
├── docker-compose (Still Here on :8000)
└── ncp2p (WireGuard mesh, internal IP e.g. 10.202.48.44)
│
│ encrypted P2P tunnel
│
Bob's laptop
└── ncp2p → browser → http://10.202.48.44:8000/portal
Twilio/Resend escalation still fires over the public internet as normal. Netcore is only for human access — family portal, setup, monitoring.
pytest backend/tests/Tests hit a real database (configured in .env) — no mocks.
See .env.example for all required variables. Key ones:
| Variable | Purpose |
|---|---|
DATABASE_URL |
Supabase Postgres connection string |
JWT_SECRET |
Token signing secret |
REDIS_URL |
Redis broker |
FIREBASE_API_KEY |
FCM web client key |
FIREBASE_VAPID_KEY |
Push subscription key |
TWILIO_* |
SMS + voice calls |
RESEND_API_KEY |
Transactional email |
STRIPE_SECRET_KEY |
Payments |