Inspiration

A habit app is an argument you have with yourself, and you always win. You tick the box or you don't, and either way nobody else ever finds out. Oathly puts somebody on the other end of that argument.

What it does

You make a pact: the thing you will do, the days you will do it, a forfeit, and a friend who holds you to it.

Miss a day and the forfeit is owed. Not to an app, and not to a streak counter that resets quietly, but to the person you named. You check in with a photo and they approve it or reject it. When you settle up in real life, you both tap Mark settled. The ledger between the two of you is the whole product.

Quit something. Give up something like smoking or doomscrolling and keep the pact by doing nothing. The card reads Clean today, the clean days add up on their own, and the only button is I slipped today.

Going away. Pause a pact for 3, 7 or 14 days and none of those days count as a miss. It is per person, so your holiday never pauses your friend.

One free repair a week. After a miss you can repair your streak free once a week. A second repair is a one time purchase.

Bring people in. An invite link shows the pact before it asks anyone to sign in. With Pro a pact can hold up to 8 people, and you never pay to accept an invite.

If a friend goes quiet. A check in your friend has not answered for 48 hours is approved on its own, so a busy friend never breaks your streak.

How it pays. Pro adds unlimited pacts, group pacts of up to 8 and a streak freeze each month. It is monthly, yearly with a 7 day trial, or Pro forever on Google Play.

Kind by design. Oathly never takes or moves money. Photos are visible only to the people in the pact and lose their location on your phone. Your own reminders stop at 3 a day and stay quiet from 10pm to 8am.

How we built it

Expo and React Native on the front, Supabase on the back. A missed day is worked out on the phone the next time you open the app, from one set of rules we test in four time zones. The one job that cannot wait for someone to open the app runs on the server: a database job every 15 minutes approves a check in when a friend has stayed quiet for 48 hours. OneSignal carries the pushes from your friends: check ins, approvals, rejections, misses and bail outs. Your own reminders stay on the phone. RevenueCat carries the upgrade.

Challenges we ran into

A forfeit only exists after a day has been missed, so the natural way to test one is to wait a day. That is not a workable development loop. The engine had to be built so a pact can be created with a start date already in the past and reconciled forward on demand, which turned out to be the right architecture anyway, because it is the same code path that catches a user who was offline for a week.

Accomplishments that we're proud of

The social half is not a share button bolted on at the end. Approval, rejection and the running ledger were in the data model before the first screen was drawn.

What we learned

Accountability only works if the other person's part is small, so a friend's whole job is one tap: approve or reject.

What's next for Oathly

Forfeits that name a charity instead of a friend, still settled between the two of you.

Built With

Share this project:

Updates

Submission history