← All posts

Built an App for My Own Flat. Then 68 People Started Using It

Real admin screenshots from two live sites: who uses them, when, and on which device. Plus the two paisa that quietly break most bill-splitting apps, how a whole month settles in just 5 payments, and a 75-lesson course you can unlock with one word.

product-engineeringread-user-analysis

Note: This is the first post in a series about the sites I actually run in production: Bachelor Point, Team Sober, Mila Mart and Love. No toy demos here. These are real users, real money, and real screenshots from the admin side.

Imagine six people live in one flat. One did the bazar four times. One paid the electricity bill. One ate twice as many meals as everyone else.

Now it's the 31st night. There's one notebook, full of crossed-out numbers.

Who owes whom, and how much?

Contents

  1. Links
  2. Why I built it
  3. The actual scenario
  4. Who actually uses it
  5. One formula, printed on the screen
  6. Paisa-exact splitting
  7. Shared bills vs assigned bills
  8. Settle the whole month in the fewest hand-overs
  9. A fair meal rate
  10. Payments are reversed, never deleted
  11. Month close
  12. Bazar, itemised with a conversation on every entry
  13. A dashboard that answers where do I stand
  14. Security that nobody notices
  15. Community: replacing a dozen to-let groups
  16. What's next: research-backed seat recommendation
  17. What I actually built
  18. The philosophy, short version
  19. Bonus: a look inside Team Sober

Item Details
Live site bachelor-point.team-sober.com
In-app guide bachelor-point.team-sober.com/guide (public, no sign-in needed)
Research paper Undergraduate thesis: criteria-based recommendation (Daffodil International University)
Series Live sites, part 1 of 4: Bachelor Point → Team Sober → Mila Mart → Love

1. Why I built it

Anyone who has lived in a bachelor mess in Dhaka knows the month never ends with a calculation. It ends with an argument.

The problem isn't that the maths is hard. It's that the maths is invisible. Nobody can see why their number is ৳4,330 and not ৳4,000, so every number feels like an accusation.

So the real engineering question was never "how do I add up the bazar?" It was:

"How do I build a system where every number can explain itself, so nobody has a reason to argue?"

That became Bachelor Point, and its tagline is the whole philosophy in one line:

Manage your mess without the arguments.

And no, I don't just maintain it. I live in a mess that runs on it. Six of us settle every single month through this app, so if there's a bug, it's a bug in my own rent. 😅

2. The actual scenario

Here's August 2026 in my own mess:

What happened Amount
Groceries (bazar) bought by 6 different people ৳19,362.00
Bills: rent, chef, electricity, gas, Wi-Fi, onboarding, old due ৳20,470.00
Meals eaten 243
Total the mess had to settle ৳39,832.00

And the twist that makes this hard:

  • Some bills are shared by everyone (chef, electricity, gas, Wi-Fi).
  • Some bills belong to only one person (room rent, a one-time onboarding fee, a carried-over due).
  • Some people paid vendors out of their own pocket, so the mess owes them.
  • Some people bought groceries, which should count as money already paid.
Bought bazar ✅      Paid a bill ✅      Ate meals 🍛      Paid cash 💵
       └──────────────────┬──────────────────┘
          What is each person's ONE final number?

3. Who actually uses it

Before the solutions, let me show you the people. These screenshots come from the admin analytics page I built into the app, covering the last 30 days.

Admin analytics: visits, people, time on site, time of day, day of week, devices

Metric Value What it means
Visits 883 ~13 visits per person in a month. People come back to it again and again, not just at month end
People who visited 68 Far more than the 6 people in my own flat
Total time on site 73h 35m Over an hour per person per month
Average visit 5 min Enough to log a meal or check a balance, then leave
Never visited 10 Accounts that were created but never opened. That's my next onboarding problem

3.1 What time people come

Mostly in the morning (26.3%), when they mark today's meal and log the morning bazar. But here's the surprise: night (22:00–05:00) at 18.6% beats the evening. People check their balance in bed. 😄

3.2 Which day

Wednesday (179 visits) wins. Mid-week is when the first bazar money runs out and everyone starts asking "who owes what?"

3.3 Which device

📱 Mobile: 614 · 💻 Desktop: 269. That's seven out of ten visits from a phone.

People log bazar standing in the market with a bag in one hand. So I made the app installable on the home screen, opening full-screen like a native app, with every form fillable with one thumb.

3.4 Day by day

Day by day: visits vs distinct people

See the first three days of the month: 19 → 37 → 43 visits. That's month close. Everyone checks their final settlement, pays up, and the new month opens. After that it settles to a steady 4–12 visits a day, and the dark bars (different people) stay almost flat. The same people come back every day. For a tool like this, that matters more than any traffic spike.

4. One formula, printed on the screen

No black box. The balances table literally shows the formula in its header:

Due = meal share + bills share − groceries they bought − cash they paid

A negative due means the mess owes you. That's it. Anyone can verify their own row with a calculator.

Member balances, August 2026: every member settled to ৳0.00

August closed with all 6 members at ৳0.00. Settled. Nobody argued. ✅

5. Paisa-exact splitting

This is the detail I'm proudest of. Here's a bug almost every splitting app has:

৳2,000 electricity ÷ 6 people = ৳333.3333…

Round each to ৳333.33  →  6 × 333.33 = ৳1,999.98
                                       ⚠️ ৳0.02 just vanished

Two paisa sounds like nothing. But do it on every bill, every month, and the ledger never balances. And a ledger that doesn't balance is exactly the thing that starts arguments.

So Bachelor Point hands out the leftover paisa deterministically:

4 members × ৳333.32 = ৳1,333.28
2 members × ৳333.36 = ৳  666.72
                      ─────────
                      ৳2,000.00  ✅ exact

You can see it in the "Who is charged what" table, where electricity is ৳333.32 for some and ৳333.36 for others:

Who is charged what, by cost type

And the app makes the promise out loud under the table:

"Meal shares add up to the ৳19,362.00 spent on bazar, and bill shares to the ৳20,470.00 of bills — to the paisa, every month."

6. Shared bills vs assigned bills

Not every bill belongs to everyone. My room rent shouldn't be split with a flatmate who rents a different room.

Type Examples Split between
Shared Chef, Electricity, Gas, Wi-Fi Every active member
Assigned Rent, Mess Onboarding, Previous Month Due Only the members it's billed to

Bills overview, August 2026

August: ৳20,470 in bills across 11 entries. Rent was the biggest at ৳10,000 (49%), then chef ৳3,900, electricity ৳2,000, gas ৳1,820, onboarding ৳1,500, Wi-Fi ৳1,050 and a ৳200 old due.

7. Settle the whole month in the fewest hand-overs

Six people paying each other back and forth could take up to 15 transfers. Nobody wants that.

Instead, the app works out each person's single net number and then finds the minimum set of payments that clears everything. For August:

Sharif Hossain Rabby  ──৳811.65──┐
Mohsin                ──৳508.36──┤
Mahbub                ──৳401.65──┼──▶  Mr Shaqib  (gets back ৳2,041.68)
Saidul Islam Rajib    ──৳311.70──┤
Jakir Hossain         ──৳  8.32──┘

5 hand-overs. Done. Month cleared.

Full Bills page with the settle-up plan at the bottom

8. A fair meal rate

August's meal rate was ৳79.68 (৳19,362 ÷ 243 meals). But a flat average hides something: a big bazar on Monday feeds the mess until the next trip.

So each shopping trip is spread over the days it actually fed the mess. A quiet day with few eaters doesn't look "cheap", and the table shows each day's own price, just for transparency. Everyone still pays the same fair rate in the end.

9. Payments are reversed, never deleted

If someone records a wrong payment, the app doesn't delete it. It adds an opposite entry and keeps the original on record.

+ ৳483.92   Mr Shaqib   (recorded by mistake)
− ৳483.92   Mr Shaqib   (reversal)
───────────
  ৳0.00     and both lines stay in history

Only a supervisor can permanently delete an entry. That's what makes the history something people trust. Nobody can quietly edit their way out of a debt.

Full Payments page: balances, charges, meal rate, payment history

10. Month close

When a month is closed:

  1. Balances are frozen. No one can rewrite August in October.
  2. Anything still unpaid is carried into next month as "Previous Month Due".
  3. The bazar duty schedule locks.

11. Bazar, itemised with a conversation on every entry

Bazar by member, August 2026: ৳19,362

Bazar by member, September 2026: ৳11,793

Month Bazar total
August 2026 ৳19,362.00
September 2026 ৳11,793.00

Every purchase lists its products (Salt ৳40, Potato ৳30…) and the total is added up for you. Every entry also has its own comment box. If someone questions a ৳1,005 entry, the conversation happens right next to it, not lost somewhere in a WhatsApp group.

12. A dashboard that answers where do I stand

Full Dashboard: final settlement, where the money went, bazar duty schedule

One screen shows the last month's final settlement, where the money went (bazar 49%, rent 25%…), a colour-coded bazar duty calendar where you can hand your turn to someone else in one tap, and who still owes.

13. Security that nobody notices

Money is involved, so sign-in is guarded, and quietly.

Recent failed sign-ins with reason codes

Every failed attempt is logged with a reason:

Code What happened
UNKNOWN_ACCOUNT Someone tried an email that has no account. Several came in bursts from one IP within minutes, using throwaway addresses. Classic probing 👀
INVALID_CREDENTIALS Right account, but a wrong password, invalid OTP, or expired link
IP_LOCKED Too many failures, so the IP is locked out for a while. Brute force stops being worth it

Real members never feel any of this. Password reset by OTP, lockouts and audit logs all happen in the background.

14. Community: replacing a dozen to-let groups

Finding a seat in Dhaka usually means joining 10+ to-let groups on Facebook and scrolling past hundreds of messy posts that say "inbox for details".

Community: structured to-let posts and announcements

In Bachelor Point's Community page, every to-let post is structured:

Rent: ৳5,500/mo        Location: Kuratoli Purbopara
Seat: 1 open           Available: October
Who: Male only         Rules: Flexible
Has: Wi-Fi, Gas, Attached balcony

You can search by location, title or rent. And supervisors can post announcements to everyone from the same page.

15. What's next: research-backed seat recommendation

Because every listing is structured, the next step is automatic matching. A seat seeker says what they care about (budget, distance to campus, rules, amenities) and Bachelor Point ranks the listings that fit them best.

This isn't a fresh idea for me. It comes straight from my undergraduate research.

In my thesis, I designed a system that recommends which phone a person should buy, based on the criteria that person says they care about. A student who wants battery life and a low price gets a completely different ranking from a photographer who wants the best camera at any price. The ranking follows your priorities, not a one-size-fits-all score.

Finding a room is the same problem with different features:

Phone:  camera · battery · price · storage
              ↓  same idea, different features
Room:   rent  · distance · rules · amenities

📄 Read my research paper: Undergraduate thesis: criteria-based recommendation (Daffodil International University)

16. What I actually built

Not a list of tools. Here are the problems I solved:

Problem What I built
Month-end arguments over money A ledger where every number shows its own formula
Rounding makes paisa disappear Paisa-exact splitting that always reconciles to the total
6 people paying each other back and forth Minimum hand-over settlement: 5 transfers for a whole month
"Someone edited the record!" Reversal instead of deletion, so history can't be quietly rewritten
Not every bill is everyone's Shared vs assigned bills, per-member charges
People log bazar from the market A phone-first, installable app built for one thumb
Brute-force and probing on sign-in Reason-coded audit logs and IP lockout
Seat hunting across 10+ Facebook groups A structured to-let community, with research-backed matching coming next
"Is anyone even using this?" My own analytics: visits, time of day, weekday, device, retention

17. The philosophy, short version

  • If a number can start an argument, show its working.
  • Build for the phone in the bazar, not the laptop on the desk.
  • Never delete history. Reverse it.
  • Use it yourself. The best QA team in the world is six flatmates who all want their money right.

18. Bonus: a look inside Team Sober

Before part 2, here's a quick look at the second live site in this series: team-sober.com, the blog you're reading right now. Bachelor Point is where my flatmates settle their money. Team Sober is where I write things down: posts, tutorials and full courses.

18.1 The admin dashboard

This is the first screen I see after signing in. One look tells me what's live, what's waiting, and what people are actually reading.

Team Sober admin dashboard: post counts, total views and top posts by views

Card Value What it means
Published 27 Posts live on the blog
Drafts 1 Still being written, not visible publicly
Scheduled 2 Already written, and they publish themselves on their date
Tags 93 Topics in use across all posts
Views 3,657 All-time reads
Words 34,551 About 188 minutes of reading

Top posts by views shows what people actually come for:

Post Views
What are those things give me শান্তি? 388
Logging and Observability 355
Customize Your Git Bash Prompt to Show Only the Current Folder 188
Running a Node.js Application with Temporary Environment Variables in PowerShell 143
A step-by-step guide to the CI/CD journey 142

The most-read post isn't a tutorial at all. It's the story of a green pipeline, an email that actually arrives, and six failures that taught me more than any tutorial. 😄

Below that are the other admin tools:

  • Key highlights: every tag with a post count (docker 8, jenkins 7, ci-cd 5, devops 4…), so I can see which topics I write about most and which ones I've barely covered.
  • All posts: a searchable table with each post's status (DRAFT, SCHEDULED, PUBLISHED), tags, views and last update, with View, Edit and Delete on every row.

18.2 Comments and likes are switched off, for now

Every post has comments and likes built in, but I've deliberately hidden them on every post for now. The plan is to open them up later, so that public and registered readers can like a post and join the discussion under it.

18.3 Courses, not just posts

Some topics are too big for a single post, so Team Sober also has Tutorials: full courses split into chapters and lessons, and each course tracks your progress.

Here's the whole Tutorials page at a glance:

Tutorials overview: 3 subjects, 87 lessons, 19 chapters, certified students and certificates earned

Subjects Lessons Chapters Level Certified students Certificates earned
3 87 19 Beginner–Advanced 4 5

Finish a course and you get a certificate. Four students have already earned one, and five certificates have been issued so far.

Course Lessons Reading time Level
Mathematics 9 26 min Intermediate–Advanced
Computer Networking 3 3 min Beginner–Intermediate
Data Structure & Algorithm 75 2 hr 36 min Beginner–Advanced

The first big one is Data Structure & Algorithm:

Data Structure and Algorithm course: enrolment key form and the first chapter

🔑 This course is locked behind an enrolment key. The key is Rajib.

Open the course page, enter Rajib in the Enrolment key box and click Enrol. You only need to do it once, because the browser stays enrolled after that. Then explore everything.

No comments yet.

Sign in to leave a comment.