Penalties
The PenaltiesScreen (penalties.tsx) lets users attach a real consequence to their commitment. If they fail to verify during their active slot, the selected penalty triggers automatically via the Convex cloud backend.
Penalties are optional — a commitment can exist without any penalty.
Penalty Types
1. Money Penalty 💰
Lose a fixed monetary amount when you miss a commitment. The amount is configured on a sub-screen.2. Embarrassing Photo 📸
A pre-selected cringe or embarrassing photo is automatically emailed to a contact you choose (e.g.,maajithanas@gmail.com). The email is dispatched by the Convex cloud backend using server-side functions — it cannot be intercepted or cancelled by the client.
3. Cringe Message 💬
A shameful text message is sent to a contact of your choosing. The message content is pre-configured during commitment creation.4. Block Favourite App 📵
Your most-used application gets temporarily blocked as punishment. The blocking duration is configurable.How Penalties Trigger
Penalties are not enforced on the client — they are durable cloud functions on the Convex backend. When a commitment verification window closes with aFAILED status:
- The backend scheduled function detects the failure
- The penalty payload is read from the task document
- The appropriate action fires (email dispatch, app block injection, etc.)
- The client cannot prevent or undo the penalty execution
Example
Gym commitment with penalty:
- Penalty: Embarrassing Photo
- Recipient:
maajithanas@gmail.com- Photo: Pre-selected from camera roll during setup
- If you miss your 6:00 AM gym check-in, the photo is emailed automatically