Build → getting a friend to actually show up
Every friend group has The Person who cancels 30 minutes before. Lockin's Friend Challenge attaches a real financial stake to a single event — geofenced check-in at the venue, deadline locked at creation. Show up or the money goes to charity.
Suggested starting contract
$10/day against missing your daily target of GPS check-in at the event venue by deadline.
Download the app on iOS or Android, create an account, and connect a payment method. The whole flow takes under three minutes and is required even if you are using sender_pays so refunds and charges can settle cleanly.
On the first step of the wizard, switch the recipient from For Myself to For a Friend. Pick the friend from your contacts or by username — this sets recipientId on the contract and unlocks the Friend Challenge fields.
Search for the venue, drop the 50m geofence on the exact address, and set instanceDates to the single event date. Pick a deadline — typically the event start time or shortly after — knowing the deadline is locked at contract creation and cannot be edited mid-contract.
Pick sender_pays (you fund the stake upfront — refundable if your friend rejects, forfeit to charity if they accept and no-show) or recipient_pays (your friend is charged on accept, with their own money on the line). Recipient_pays puts the skin in the game on the person whose behavior you want to change.
Choose how much money is on the line — $10 is a common default for one-time events, scaled up for higher-stakes plans like weddings or flights. Pick the charity that receives the forfeit if the friend no-shows: climate, mental health, animal welfare, or digital literacy.
Hit send. Lockin fires a push notification to the friend with an accept-or-reject screen. The contract sits in pending status until they respond — if they reject or let it expire, no charge happens and any sender_pays funds are refunded.
When the friend arrives at the venue, the check-in button on their contract card shimmers once their phone is inside the 50m geofence. They tap it to record the visit and start the dwell timer. Completing the check-in and dwell before the deadline closes the contract as completed; missing the deadline forfeits the stake to charity.
From Lockin's data
Among Lockin beta users running Friend Challenges for one-time events, recipient_pays contracts complete at meaningfully higher rates than sender_pays contracts — consistent with prospect-theory predictions that loss aversion is strongest when the money on the line is the recipient's own. Beta data also shows that single-event Friend Challenges with the deadline set at or just after the event start time outperform looser end-of-day deadlines for venue arrivals.
"I had a friend who flaked on three concerts in a row. The fourth time I sent him a recipient_pays Friend Challenge with a $10 stake and a Music Hall geofence — he showed up early and bought the first round. The contract did what no amount of guilt-tripping had managed."
— Anonymous beta user, sent Friend Challenge, concert venue
The trade-off is whose money is actually at risk. With sender_pays, you fund the stake upfront — if your friend rejects the challenge or it expires, you are refunded; if they accept and then no-show, your money goes to the charity, not theirs. With recipient_pays, your friend is charged when they accept the challenge, so it is their own money on the line if they fail to check in. Loss aversion is strongest against your own losses, which is why most users default to recipient_pays for accountability — it is the model where the friend has genuine skin in the game. Sender_pays is closer to a gift or a pledge made on their behalf, useful when you want to make the contract frictionless for the friend to accept (e.g., a bride covering bridesmaids). Note that recipient_pays only activates if the friend agrees to be charged — they have to actively accept.
Friend Challenges follow a clean status flow: pending → payment_pending → active → completed/rejected/cancelled/expired. If your friend rejects it (using the respond_to_friend_challenge RPC under the hood) or simply lets the pending challenge expire without accepting, the contract never becomes active and nobody is charged a forfeit. With sender_pays, any funds you put up are refunded automatically. With recipient_pays, the friend was never charged in the first place because the charge only fires on accept. The contract has to be opted into to bind — without that, there is no commitment, no stake, no movement of money.
Both sides receive push notifications at the key contract events: when you send the challenge, when the friend accepts or rejects, when the contract activates, when a check-in completes, and when the contract closes as completed or expired. On the free tier, the sender sees the headline pass/fail outcome of the contract. The full per-instance tracking dashboard for sent challenges — with timeline, geofence entry timestamps, dwell duration, and status changes — is a Lockin Pro feature. Most senders find the pass/fail plus the push notifications enough; Pro is for users sending multiple Friend Challenges and wanting a single dashboard view across all of them.
Each Friend Challenge is one-to-one — a single senderId paired with a single recipientId. There is no group-stake mode where one pot is shared across multiple recipients. For a group event like a wedding, a hike, or a dinner reservation, you send a separate Friend Challenge to each person, and each contract runs independently with its own stake, payment model, accept/reject decision, and check-in. One person rejecting does not affect the others; one person no-showing only forfeits their own stake. This keeps the accountability personal and avoids the diffusion-of-responsibility failure mode where everyone assumes someone else is on the hook.
Free to download. You set the target, the stake, and the charity.