[{"data":1,"prerenderedAt":87},["ShallowReactive",2],{"work-barber-hub":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"client":9,"year":10,"role":11,"summary":12,"result":13,"tech":14,"featured":20,"order":21,"cover":22,"body":23,"_type":81,"_id":82,"_source":83,"_file":84,"_stem":85,"_extension":86},"\u002Fwork\u002Fbarber-hub","work",false,"","Daily earnings and expenses, not a notebook by the till","Barber Hub",2026,"Shop ops + native shell","Barbershops were tracking jobs, cash, and worker splits on paper. We built a multi-tenant desk for today’s work — and the pay math that actually matches the chair.","Today’s ledger on one screen",[15,16,17,18,19],"Next.js","Prisma","PostgreSQL","Supabase","Capacitor",true,3,"barber",{"type":24,"children":25,"toc":74},"root",[26,35,41,47,52,58,63,69],{"type":27,"tag":28,"props":29,"children":31},"element","h2",{"id":30},"the-problem",[32],{"type":33,"value":34},"text","The problem",{"type":27,"tag":36,"props":37,"children":38},"p",{},[39],{"type":33,"value":40},"The chair was busy. The books were not. Jobs lived in a notebook, expenses in a chat, and “what does Ahmed take home?” was a monthly argument. Commission, salary, and an optional shop levy all meant different things in different shops. A Super Admin still needed plans and quotas without becoming IT for every salon.",{"type":27,"tag":28,"props":42,"children":44},{"id":43},"the-approach",[45],{"type":33,"value":46},"The approach",{"type":27,"tag":36,"props":48,"children":49},{},[50],{"type":33,"value":51},"We designed for today first: clock in, log the haircut, log the expense, see earnings and net before close. Pay rules are shop settings, not a spreadsheet the owner redoes at night. Workers see their jobs and their share. Owners see the shop. Super Admin sees plans, not every rupee.",{"type":27,"tag":28,"props":53,"children":55},{"id":54},"the-solution",[56],{"type":33,"value":57},"The solution",{"type":27,"tag":36,"props":59,"children":60},{},[61],{"type":33,"value":62},"A Next.js app on Postgres: shops, workers, services, jobs, expenses, attendance. Commission splits (and levy-then-split) are calculated in one place so a Rs 300 haircut doesn’t get three different answers. Monthly salary shops keep job cash in the till and show salary on the statement. Auth is JWT over REST so a Capacitor Android\u002FiOS shell can reuse the same API. Trial shops hit a daily action quota so the plan means something.",{"type":27,"tag":28,"props":64,"children":66},{"id":65},"the-result",[67],{"type":33,"value":68},"The result",{"type":27,"tag":36,"props":70,"children":71},{},[72],{"type":33,"value":73},"The owner opens Today and sees the day — not a reconstruction. Workers clock in and log jobs without touching the owner’s ledger. Plans and quotas keep the multi-tenant layer honest. The shop still cuts hair. The software finally counts it the same way twice.",{"title":7,"searchDepth":75,"depth":75,"links":76},2,[77,78,79,80],{"id":30,"depth":75,"text":34},{"id":43,"depth":75,"text":46},{"id":54,"depth":75,"text":57},{"id":65,"depth":75,"text":68},"markdown","content:work:barber-hub.md","content","work\u002Fbarber-hub.md","work\u002Fbarber-hub","md",1789258141857]