FriendLock · design.sayne.friendlock · v1.0 (debug)
ANON-AUTH OK

an android app-lock with a second pair of eyes

Lock your own apps.
Let a friend hold
the key.

FriendLock is an Android app-lock where you lock your apps — and getting back in needs a tap (or a 6-digit code) from a paired parent or friend’s phone. Pairing is mutual: any paired device can approve another.

Secret never lives on the locked phone Works offline via read-aloud code No accounts — anonymous by design
9:41App lockedInstagramEnter a code from a paired device,or ask for approval.Request approval1234567890
READ
THIS
FIRST

It’s a commitment tool, not an unbreakable lock.

We’re honest about this up front: on a normal (non-rooted) Android phone, Safe Mode, a force-stop, ADB, or a factory reset can all remove FriendLock. It isn’t designed to defeat a determined owner. What it does is make caving in deliberate and visible instead of a thoughtless tap — accountability between people who opted in together. If you need true enforcement, that’s a different (Device-Owner) product. See the full limitations →

01 — SECURITY MODEL

The locked phone never holds the secret.

The naïve “authenticator on the locked phone” design is broken — anything that can verify a code can also generate one. FriendLock keeps the TOTP secret on the approver’s phone and the backend only. Pick a path to trace the flow:

LOCKED PHONE · A
opens a protected app
AccessibilityService detects the app → WindowManager paints the overlay lock screen.
CODE PATH
You type the 6 digits read from the approver’s Authenticator.
APPROVAL
You tap “Request approval.” No code needed.
Overlay hides only on a server-minted grant — never on a raw push payload.
FIREBASE
holds the secret + mints grants
verifyOtp()
Recomputes TOTP from the stored secret. Valid? Mint a time-boxed grant.
requestUnlock()
Routes an unlock_request push to every paired approver.
approveUnlock()
On approval, mint a grant → push unlock_approved back to A.
Secret stays server-side + on B. A can never read it.
APPROVER · B
parent / friend’s phone
AUTHENTICATOR
Shows a live 6-digit code per paired device — like Google Authenticator.
NOTIFICATION
Gets an actionable push → taps Approve (or Deny).
Holds the TOTP secret. Can read a code aloud over a call if there’s no data.

Why it’s safe: the locked phone forwards what you typed and trusts only what the server signs back. Even with full access to the locked device, you can’t derive future codes — they live with the people you paired with.

CODE

6-digit fallback

RFC 6238 TOTP, verified server-side via verifyOtp. Works even when the approver is asleep — just have a code on hand.

PUSH

Tap-to-approve

Remote one-tap unlock over FCM. The locked phone unlocks automatically once the grant lands — no typing.

OFFLINE

Read it aloud

No data connection? The Authenticator code is just 6 digits — read them over a phone call. Belt and suspenders.

A11Y

Spoken feedback

A genuine TTS accessibility layer announces lock state — useful on its own, and why FriendLock is a real accessibility tool.

02 — SETUP

One build, three phones, two roles.

Roles are per-pairing, so the same app runs everywhere. A typical test: your phone + an emulator as the locked devices, a parent’s phone as the approver — then reverse it to prove pairing is bidirectional.

ALL
01

Install & sign in

On first launch each phone anonymously signs in and registers its push token. No email, no password, no account.

LOCKED
02

Grant permissions

The wizard deep-links each one: Accessibility, Display-over-other-apps, Usage access, Notifications, and battery-optimization off.

APPROVER
03

Pair by QR

Approver opens Pair → Scan; the locked phone shows its QR. Scan it — the approver’s Authenticator now shows a live code for that phone.

LOCKED
04

Choose apps

Pick the apps to protect (Chrome, YouTube, a game…) and switch protection on. Done.

LOCKED
05

Open a locked app

The overlay appears. Type the 6-digit code, or tap Request approval and wait for the approver’s tap. Default grant: 5 min.

SWAP
06

Reverse the roles

Make the parent the locked phone and approve from yours — confirming any paired device can approve any other.

Pair your devicesSTEP 3 / 3Show my codeScan a codeShow your code onone phone — scan itfrom the other tolink them.ready to pair
Approval codesShare a code or tap approve to unlock.DEVICES YOU CAN UNLOCKMum's GalaxyUNLOCK CODE419 27330Alex's PixelUNLOCK CODE882 14030
03 — HONEST LIMITATIONS

What FriendLock can’t do.

We’d rather you trust us than be surprised. FriendLock makes tampering visible, not impossible.

The owner is the adversary
  • Safe Mode, force-stop (Settings → Apps), ADB, and factory reset all defeat it on a normal phone.
  • True enforcement needs Device-Owner provisioning — a one-time factory-reset enrollment. That’s a future “hardcore” tier.
  • iOS can’t do peer-enforced locking at all.
Reliability on real phones
  • Aggressive OEM battery killers (Xiaomi / Samsung / Oppo / Vivo) can freeze the background service.
  • The wizard requests a battery-optimization exemption, but it can silently revert after a system update.
  • Push has no latency guarantee — so the manual code path is always offered as a fallback.
Use it the right way
  • FriendLock is self-restriction / digital wellbeing between people who paired by mutual consent.
  • It is not for secretly monitoring or controlling someone else’s phone — that’s stalkerware, and we don’t build it.
  • Pairing is visible on both phones and always bidirectional.
On the roadmap (v2)
  • Ed25519 signed approvals for fully-offline verification.
  • A Device-Owner “hardcore” enforcement tier.
  • Anti-replay pairing tokens + server-anchored fail-closed state.
04 — FAQ

Straight answers.

Yes — on a normal phone they can. FriendLock is a commitment device, not a cage. It turns “give up instantly” into a deliberate, visible act. If you need hard enforcement, that needs Device-Owner provisioning, which is on our roadmap.
No. The TOTP secret lives only on the approver’s phone and the Firebase backend. The locked phone forwards a typed code to verifyOtp and trusts only the time-boxed grant the server signs back — it can never generate codes itself.
The approver’s Authenticator shows live 6-digit codes that you can read aloud over a regular phone call. The code path is always available as a fallback to push.
No. Pairing is mutual and consensual — both devices see the relationship and either can approve the other. FriendLock is built for self-restriction and accountability between people who opt in together, never for covert control.
No. Each device signs in anonymously on first launch. There’s no email, password, or profile — just a stable device ID used to route approvals.
No. iOS doesn’t allow the peer-enforced app-locking model FriendLock relies on, so it’s Android-only.
design.sayne.friendlock · android

Lock in your good intentions.

Pair with someone you trust, hand them the key, and make “just five more minutes” a conversation instead of a reflex.

Free · No accounts · Anonymous auth · Requires Android 8+