THE EVENING THAT DECIDES EVERY OTHER ONE
Setup is the one part of this product you do once, in a hurry, before you have any reason to trust it · and every number you get wrong here is wrong on every invoice afterwards. So it is built to be finished in an evening and corrected without fear.
OPENING A CAFÉ, IN ORDER
Who you are, what tax you charge, what you charge for time, and only then the room and the people. The rate card below is live · move the clock and the rung, the bonus minutes and the overtime flag are computed by the same module a café's real sessions are billed through.
Northgate Arcade is invented. A café's setup is its commercial position · what it charges and what it pays staff to see · so no real one appears here.
The name that leaves the building
What a customer sees, and what your own screens stop showing
Your business name goes on every invoice, and your timezone decides every day boundary, every happy hour and every report window after it · read shop-local rather than off whatever the server thinks the time is. Two switches then decide how much product you actually run: a café with no counter turns food and drinks off, and the whole till, menu and its analytics lines go with it.
- check_circleBusiness name printed at the top of every invoice
- check_circleA curated timezone list, with Detect filling it from the browser
- check_circleOwner mobile and email live on the person · only they can change them
- check_circleTurning food and drinks off hides it everywhere, and deletes nothing
What changesA pool hall that does not sell snacks stops looking at a till it will never use, without anyone having to explain that the feature is optional.
Business
Business profile
Business name
Northgate Arcade
Printed at the top of every invoice.
Location
Bengaluru
Detect fills this from the browser, and you can rename it.
Timezone
Asia/Kolkata
Every day boundary, happy hour and report window is read in this zone, not the server's.
Owner contact
Only that owner can edit it
Mobile and email live on the person, not the shop.
What the café shows
One form, one Save · except the two switches, which apply on the press because a café-wide capsule that waits for a form submit reads as broken.
GST, or honestly nothing at all
Whether your invoices carry tax, and which tax
One switch decides whether invoices print a tax line. Off, they do not · a café that is not registered is not made to look like one that is. On, the rate is a field rather than a hardcoded eighteen, and place of supply is what decides CGST and SGST against IGST. Leave that blank and the first two digits of your GSTIN answer it for you.
- check_circleCharge GST on or off, per café
- check_circleRate is a free field · not everyone is on 18%
- check_circlePlace of supply picks CGST + SGST over IGST
- check_circleA default SAC for gaming time, blank if you would rather not
What changesRegistering later is one switch and one field, not a migration · turning GST off never throws away the GSTIN you already saved.
Business · tax
Tax & invoicing
Rate
18%
A free field, not a hardcoded 18.
GSTIN · optional
29ABCDE1234F1Z5
Switching GST off later never loses it.
Place of supply
29 · Karnataka
This is what picks CGST + SGST over IGST. Leave it blank and the first two digits of the GSTIN decide.
On the document
Default SAC · gaming time
998439
Blank stays off the invoice rather than printing an empty field.
Invoice footer
Pre-filled, not blank
It ships with wording that works, so nobody has to invent it on day one.
You sell durations, not hours
What a customer is charged for the time they actually played
Nobody's board says one rate an hour. It says thirty minutes for eighty, an hour for a hundred and forty, and two players for something that is not double either. So a rung is the total for a whole duration, head count is its own column you type yourself rather than a multiplier the software guesses, and a cell you leave blank simply is not sold.
- check_circleDurations down, head counts across · both are yours to set
- check_circleRound up past a rung, or only count rungs fully reached
- check_circleA grace window forgives overshoot, hard-capped at 30 minutes
- check_circlePast the top rung the ladder keeps climbing instead of freezing
What changesYou price the way your board already reads, so nobody has to translate a printed card into an hourly rate that was never true.
Pricing · rate card
The rate card · durations down, players across
| Duration | 1 player | 2 players |
|---|---|---|
| 30 min | ₹80 | ₹140 |
| 60 min billed | ₹140 | ₹250 |
| 90 min | ₹195 | ₹350 |
| 120 min | ₹240 | ₹430 |
| 180 min | ₹330 | ₹600 |
What the engine says · 65 minutes, 1P
Rung billed
60min
the duration they paid for
Bonus earned
0min
no tier reached yet
Session
₹140
straight off the card
Grace
7min
Overshoot inside this is free · capped at 30
Move the clock. The rung, the bonus minutes and the overtime flag are computed by lib/pricing.ts on this page · the same module the café's real sessions are billed through.
Cheaper at four, and it stays cheaper
How a discount window behaves for somebody already playing
Happy hour is a second set of prices on the same durations, per day, in your own timezone. It is resolved once when the session starts and then locked for that session's life · walk in at half past three and the window closing at four does not reprice you halfway through. Bonus time is the other lever: play past a threshold and earn free minutes, with only the highest tier you reach applying.
- check_circleWindows per day, in shop-local time, end exclusive
- check_circleResolved at start and locked · a closing window never repriced a live session
- check_circleA window crossing midnight is stored as two, and it tells you before you save
- check_circleBonus tiers do not stack · the highest one reached wins
What changesYou can run a genuine afternoon offer without a member ever watching their price change under them mid-session.
Pricing · happy hours
Windows · shop-local, end exclusive
The same ladder, happy prices
30 min
₹60
₹80
60 min
₹110
₹140
90 min
₹155
₹195
120 min
₹190
₹240
180 min
₹265
₹330
Bonus time · play this long, get these free
Past 120 min
+15min
Only the highest tier reached applies
Past 180 min
+30min
Only the highest tier reached applies
Photograph the board you already have
How long the worst part of setup takes
Typing a duration by head-count matrix for every game type is the reason a café stalls on day one. So point a camera at the price card on your wall and it reads the grid · durations down, head counts across. It refuses to invent a price it cannot see, and it will not guess a game type it cannot match. Nothing is saved until you have looked at every number.
- check_circleReads a duration by head-count grid, not one flat hourly rate
- check_circleThe photo is read and dropped · it is never stored
- check_circleIt declines rather than inventing a number it could not read
- check_circleOwner only, and nothing reaches the database before you save
What changesThe setup step most likely to end in a half-priced café becomes a review rather than an evening of typing.
Pricing · scan
Owner only, and it holds back any game type that already has happy-hour prices · the two scopes share one set of durations, so a rewrite there could re-point prices you set by hand.
Points and plans, kept small on purpose
What you can promise a regular, and what the software will actually enforce
Loyalty is two numbers: what a point costs in spend, and what somebody gets for signing up. Food and drink never earns, because a snack is not loyalty to your floor. Membership plans bank hours and take a percentage off the rate card · those two fields do something mechanically, and the perk lines you write are printed on the member's card as promises you keep in person.
- check_circleSpend per point and a welcome bonus · that is the whole earn model
- check_circleGaming and membership spend earns, food and drink does not
- check_circlePlans bank hours and discount the rate card
- check_circleA plan cannot be deleted while anybody is still on it
What changesYou can tell a regular exactly what their membership does, because the two things it changes are the two things the software actually applies.
Pricing · loyalty and plans
Loyalty · the whole model is two numbers
Spend per point
₹10= 1 pt
Gaming and membership spend on paid invoices. Food and drink never earns.
Welcome bonus
500pts
Granted once at signup · zero means no bonus.
Redemption is fixed rather than tunable: 1,000 points is ₹100 of wallet credit, taken at the counter.
Membership plans
WEEKNIGHT
Monday to Thursday, after work
₹699/mo
6h banked · 5% off rate card
- check_circleSix hours banked a month
- check_circleWeeknight seat held to 8pm
- check_circleQueue ahead of walk-ins
ALL FLOOR
Any rig, any table, any day
₹1,299/mo
12h banked · 10% off rate card
- check_circleTwelve hours banked a month
- check_circleSwap stations mid session
- check_circleOne house drink a visit
HEADSET
The VR bay, kept free for you
₹2,199/mo
10h banked · 15% off rate card
- check_circleTen hours banked a month
- check_circleVR bay reserved on request
- check_circleGuest seat on tournament nights
Banked hours and the discount are the two fields that do something mechanically. The perk lines are printed on the member's card · they are promises a human keeps, and the product does not pretend to enforce them.
Your floor, named the way you say it
How the grid on the Live Ops screen comes to exist
Every station has a name, a zone, a game type and a seat count from one to eight. Zones are whatever you call them, because a café that says IMMERSION LAB should not be made to pick MAIN FLOOR from a list. Add one and the sheet stays open, so a twelve-rig bay is one sitting. On Windows rigs, pairing a lock agent turns the countdown into something the machine itself enforces.
- check_circleName, zone, game type and one to eight seats per station
- check_circleRetire a station instead of deleting it · deleting waits until it is offline
- check_circleA station cannot be retired out from under a live session
- check_circleLock agents pair with a single-use code that is shown once
What changesThe floor on screen matches the floor in the room, including the names your staff already shout across it.
Stations
7 stations · 4 zones
PC locking · Windows rigs only
Pairing code
15 min
Single use, shown once · only a hash reaches the database, so there is no showing it again.
Counted online
30 s
A rig that has not reported inside this reads as silent rather than as fine.
Consoles
Out of scope
A PS5 cannot be locked in software, and the empty state says so instead of implying it can.
Staff see the floor, not your margins
What a new hire can reach on their first shift
There are two roles. Staff run sessions, take payments, issue invoices and refunds and manage members, events and expenses. They cannot touch pricing, GST, loyalty or anyone's role, and that is enforced in the database rather than by hiding a button. On top of the role, each section can be switched off for one person · and switching it off closes the routes underneath it, bookmarks included.
- check_circleTwo roles, and the invite screen says what each grants before you send it
- check_circleTen per-person switches, including Luna, the assistant
- check_circleA deny list · a section shipped next month is visible by default
- check_circleApplies instantly, and an owner can never be restricted
What changesYou can hire for the counter without handing over your cost base, and without a conversation about which screens not to open.
Team
Two roles, and what each one gets
Staff
Run sessions, take payments, issue invoices and refunds, top up wallets, manage members, events and expenses.
Cannot change pricing, GST, loyalty rates, plans or anyone's role.
Owner
Everything staff can do, plus pricing, tax, plans and inviting further owners.
Per-section access · IMRAN
It is a deny list, not an allow list · everything is on until you switch it off, so a section that ships next month is visible to your existing staff rather than invisible until somebody remembers to grant it. Switching one off removes it from that person's sidebar and stops the routes under it opening, bookmarks included. Owners never get the pill, because an owner cannot be restricted.
A PRICE CHANGE CANNOT REACH A RUNNING SESSION
The single thing that makes setup survivable is that it is not permanent and not retroactive. When a session starts, the ladder it will be billed against, the happy-hour scope, the bonus tiers and the grace window are copied and frozen onto that session. Nothing you do afterwards reaches back.
Frozen at start
Rewrite the whole rate card at eight in the evening with a full floor. Every running session keeps what it began on.
Shop-local, always
Day boundaries and happy-hour windows are read in your timezone, not the server's · the bug that silently misprices every evening offer.
Retire, do not delete
Stations retire rather than vanish, and a plan somebody is on cannot be removed. Your history keeps its meaning.
FIVE TABS, ONE EVENING


THE PRICING QUESTIONS
Can I price by the hour instead of by duration?expand_more
You can, by making your ladder one rung an hour · but almost nobody does, because almost no price board in India works that way. A rung is the total for a whole duration, so thirty minutes at ₹80 and an hour at ₹140 is expressible exactly as written. An hourly rate is the special case where every rung happens to be a straight multiple, and it is the case that loses you money on short sessions.
Do prices scale automatically when more people play?expand_more
No, and that is deliberate. Head count is a column you fill in yourself, not a multiplier. Real boards charge ₹60 for twenty minutes at one player and ₹180 for the same twenty minutes at four, which is three times rather than four · so the engine looks your price up instead of doing arithmetic on it. A head count you leave blank is simply not sold at that duration.
If I change my prices, does it change a session that is already running?expand_more
Never. A pricing snapshot is frozen the moment a session starts · the ladder, the happy-hour scope, the bonus tiers and the grace window · and it is that snapshot the session is billed against. You can rewrite your entire rate card at eight in the evening with a full floor and every running session keeps the prices it started on.
What happens when somebody plays past the longest slot on my card?expand_more
The ladder is extended one billing interval at a time at the marginal rate of your last real step, so an open session keeps climbing rather than freezing at the top price, and it is flagged as overtime on the invoice line so the counter can see what happened. If your ladder has a single rung or a flat tail, it falls back to that top rung's own average per-interval rate.
Does the price-card scanner just set my prices for me?expand_more
It reads your board into the same duration by head-count grid the rate card wants and shows you the numbers. Nothing is written to the database until you save · it refuses to invent a price it could not read, and it will not guess a game type it cannot match to one of yours. It is owner-only, and the photograph is read in the request and dropped rather than stored.
Can I stop a staff member seeing my expenses and profit?expand_more
Yes. On top of the Staff role, which already cannot change pricing, GST, loyalty or roles, each of the nine console sections plus Luna, the assistant in the corner, can be switched off for one person. It takes effect immediately and closes the routes underneath, so a bookmark to a hidden section does not open either. Owners cannot be restricted.