BetNawak: virtual bets among friends
BetNawak is a mobile web app, installable without app stores, for organising virtual bets among friends with points of no real value, in invitation-only teams.
Status: under development. The specification is written; no application code has been delivered yet.
Context and need
The project starts from a brief: let a group of friends challenge each other through bets, with nothing financial at stake. Points are an internal unit with no real value that cannot be converted.
Each team is closed: people join only by email invitation. In the first version, a team has a single administrator, who configures it, invites, moderates and settles disputes.
Access model: access to the service by annual subscription, taken out by the administrator; players never pay. Two tiers are planned (Starter: up to 3 administered teams; Pro: unlimited teams, advanced statistics and export of the team’s data), with prices communicated at opening. Virtual points have no value, cannot be converted and there is no monetary gain; no price depends on the number of points.
Planned behaviour
- Progressive web app designed mobile-first, installable without going through app stores.
- Teams, single-use invitations, administrator and member roles.
- A team points ledger, visible to its members, in which no point is created or destroyed.
- Resolution of a bet, reporting, dispute with rollback to the previous state and an audit log.
- Real-time updates and a team chat.
Planned technical choices
- Stack: TypeScript, Next.js 16, Tailwind CSS 4, Drizzle, PostgreSQL, Redis and a real-time service, orchestrated by Docker Compose behind the proxy shared by the applications.
- Pure domain first: the point calculation rules, the split when a member leaves the team and the states of a bet are written and tested by invariants before the interface.
- Authentication without a library: passwords hashed with Node 24’s native Argon2id (about 25 ms measured), hashed tokens, uniform responses, protection against repeated attempts, tests inspired by the ASVS standard; a documented fallback exists, and an external review of the authentication is planned.
- Isolation between teams checked by cross tests, GDPR (hosting in the European Union, data export and deletion, 30-day freeze then purge on inactivity) and a legal opinion planned.
- Quality: standardised commits, secret detection, local checks.
Difficulties and lessons learned
- Deciding before coding: the first version of the specification had 18 open points, all settled and recorded in a decision log; nine new points arising from those decisions remain to be settled.
- Edge cases first: a member leaving mid-game, a disputed result, a dispute with no decision, rollback to the previous state. These cases are specified before the first screen.
- A deliberate working order: the pure domain and the ledger before the interface, because that is where mistakes cost the most.
- A deliberate choice: writing authentication yourself is more demanding than using a library; the specification therefore provides a fallback and an external review.
Honest status
Today: repository initialised with its tooling (commit hooks, standardised commits), brief, specification v1.1 written and a ten-milestone plan. The first milestone (application foundation) is in progress; the pure domain, accounts, ledger, real time, PWA and the rest remain to be done.
There is therefore no demo and no link: this page presents a design, not a delivered product.
What this shows about my work
- Scoping a project before coding: brief, split specification, traced decisions.
- Reasoning with invariants and edge cases on calculation logic.
- Choosing what must be hand-written (authentication) and what should stay simple, while documenting the fallback.
- Working in milestones, with an honest progress report.
A project to scope?
Describe your idea and I will help turn it into a precise need, then into an application.
