Every route in apps/admin-web today, in the approved direction: a calm grey ground, a sidebar grouped into Kaki, Money and System, and the “Needs you” list first. Green means act. Red means it needs you now. Each screen is labelled with its real route and the staff level it needs.
Drawers and confirm dialogs are drawn open inside their frame. Where a screen has several overlays, a small switch above the frame flips between them. All names and figures are sample data. Light and dark both follow your system setting.
Sign in
Team sign in /loginPUBLIC
Staff sign in with a six-digit code sent by email. There is no password and no sign-up, because a super-admin provisions every account. The switch below shows each step and each error the code handles.
1 · Email2 · CodeErrors
admin.kakiapp.co/login
Team sign in
Internal console for the Kaki team. A super-admin provisions staff accounts, so there is no self-serve sign-up. We email you a one-time code to sign in.
Live mode · staff sessions via Kaki API
Check your email
We emailed a 6-digit code to robert@kakiapp.co. Enter it below to sign in.
4810
When it goes wrong
That code didn’t work. Try again.
Couldn’t send the code. Try again.
Signed in, but this account is not a Kaki team member.
Signed in, but the session could not be verified. Try again.
While the session is being checked, the card shows a skeleton, never an empty page. A staff member who is already signed in goes straight to the Overview.
Overview
What needs you, then the numbers /ALL STAFF
This is the approved screen. The “Needs you” list collects the decisions only staff can make: a withdrawal waiting, an escalated chat report, a stranded game dispute, and venues in preview. Then come four numbers and one chart. Today’s Overview shows no figures, only the staff level and links, so the KPI row and the chart need data the admin API doesn’t serve yet. The parity report lists this. The “Jump to” grid carries over at the bottom, filtered by level.
admin.kakiapp.co
Wednesday, 23 September
Welcome back, Robert
Search venues, users, booking codes…⌘K
Needs you 4
Withdrawal · Mahjong DojoRp 2.150.000 asked · waiting 2 h · nothing is sent until you transfer by hand
Report · chat message in “Riichi Bandung”Escalated · harassment · 40 min ago
Stranded game dispute · Andi PratamaNo recorder left, so nobody but staff will ever see it
Venue in preview · Tenpai AddictsShows as COMING SOON. It is listed only once it is both Live and verified.
Who sees what, and what a screen shows while it waits RequireStaff · RequireLevel
Every screen below uses these same five states. A signed-in person who isn’t staff gets a sign-out card. Staff below a screen’s level get “Not authorized” inside the shell. The nav hides what a level can’t open: a moderator sees Overview, Moderation and How ranking works; an admin also sees Users, Venues, Venue groups and Clubs; a super-admin sees everything.
Loading
Skeleton rows the shape of the table
No bookings for this dayCreate a booking link or pick another date.
中Could not load bookings.The rest of the page still works.
發Not authorizedThis area needs a higher access level than your account has. If you think this is a mistake, contact a super-admin.
Not a member of the Kaki teamYour account is signed in, but it is not a member of the Kaki team. This console is for internal staff only.
Session expiredAny non-403 failure of /admin/me sends you back to /login. While it checks, the shell shows the grey ground, not a flash of content.
Kaki · Venues
Every venue, with who can see it /venuesADMIN+
The table now answers the question the old one couldn’t: is this venue actually listed? Publication, verification and the old active flag each get a column, and a venue counts as “Listed” only when it is Live and verified. The filter pills count each state. Click a row to open its drawer.
admin.kakiapp.co/venues
Venue oversight
Venues
Onboard a new venue, or open a row to verify it, change who can see it, or assign an owner.
Venue
Owner
Publication
Verified
Tables
MD
Mahjong Dojo
Bandung · Dago
Dojo Group
owner@mahjongdojo.id
Live
✓ Verified
6
Listed
MW
Mahjong Dojo Winbardi
Bandung · Lembang
Dojo Group
owner@mahjongdojo.id
Live
✓ Verified
4
Listed
TA
Tenpai Addicts
Palembang
Rina Wijaya
rina@tenpai.id
Preview
✓ Verified
5
Coming soon
SS
Setiabudhi Social Club
Bandung
No owner
Live
Unverified
3
Not listed
KP
Kaya Padel
Jakarta · Kemang
Budi Santoso
budi@kaya.id
Hidden
Unverified
2
Deactivated
Listed means Live and verified. A Live venue that isn’t verified is bookable by link, but four surfaces leave it out of their listings. Hidden venues return 404 on the customer link.
The drawer keeps every control it has today: assign or edit the owner by email, send a reset link, verify or unverify, deactivate or reactivate, and set publication. Two changes: deactivating now asks for confirmation, and moving a venue out of Live says, before the click, how many sold bookings it keeps. Switch between the drawer and its confirm dialog.
DrawerEdit ownerDeactivate confirmLeave Live confirm
admin.kakiapp.co/venues
Venue oversight
Venues
MD
Mahjong Dojo
Bandung · Dago
✓ VerifiedActiveLive
Owner
Dojo Group
owner@mahjongdojo.id
A set-password link was emailed to the owner.
Assign an existing user by email. Leave it blank to unassign. An unknown email is refused. To create a brand-new owner, use Create venue.
At a glance
Bookable tables
6
Bookings
1.284
Added
12 Mar 2026
Who can see this venue
HiddenCustomer link returns 404
PreviewLink opens with a banner, no payment
LivePayable, listed if verified
12 upcoming bookings are already sold. Leaving Live keeps them. Nothing is cancelled or refunded; only new bookings stop.
Verification & activity
Verified adds the badge and lets a Live venue into listings. Deactivating is the old active switch, and it still sits beside publication.
Deactivate Mahjong Dojo?
The venue switches off everywhere the old active flag is read. Publication stays Live on record, which is confusing, so prefer moving it to Hidden. Bookings already sold are kept.
Move Mahjong Dojo to Preview?
It will show as COMING SOON and stop taking payment. 12 upcoming bookings stay booked and paid; nothing is cancelled or refunded. The change is written to the audit log.
Partial recordCould not load this venue’s full record. Showing what we have.
Write didn’t landThe server accepted the request, but this venue is still in its previous state. Nothing was changed.
Migration missingThe database change this control needs (migration 0109) has not been applied yet. Nothing was changed.
Kaki · Venues · create
Onboard a venue /venues → Create venueADMIN+
A new venue starts Hidden and unverified, which the old “is live” copy got wrong. An owner is optional. A new owner email either gets a password to hand over, shown once, or an emailed set-password link.
FormCreated
admin.kakiapp.co/venues
Venue oversight
Venues
Create venue
A URL slug is made from the name. Leave the owner blank to assign one later.
Type
CafeStudioClubHome
New owner password
Set nowEmail a link
Owners sign in to the POS with their email and password. If the email already has an account, the password is ignored.
Venue created
Balai Mahjong Tiga Naga is created: Hidden and unverified. Set it to Preview or Live from its drawer when it’s ready.
Owner sign-in password
Copy this now and hand it to sari@tiganaga.id. It is shown once and can’t be retrieved later.
nX4q-Tr8m-2Lbw
Or, in email mode
Set-password link sent. We emailed sari@tiganaga.id a link to set their own password. They can then sign in to the POS.
Kaki · Venue · Setup
A venue’s settings, with the traps spelled out /venues/[id]/setupSUPER-ADMIN
This is the approved screen, extended to everything the setup page edits. /venues/[id] redirects here. The “acting as staff” banner and the five real tabs sit on every venue page. Try the publication switch, the table stepper (lowering the count shows its warning, and saving shows the report of what was stranded) and the half-price toggle.
admin.kakiapp.co/venues/mahjong-dojo/setup
‹ All venues · Mahjong Dojo
發
Mahjong Dojo
Bandung · owner: Dojo Group · 212 reviews ★ 4,9
SetupBookingsCoachesPromotionsFinance
You’re managing Mahjong Dojo as platform staff. Every change is written to the audit log.
Who can see this venue
✓ Verified
Live and verified: listed in the app, on the website and in search, and bookable.
Bookable tables
6
Lowering this hides bookings already sold on the removed tables. Check tonight’s schedule first.
This number decides how many tables can be booked at once.
After saving: tables 5 and 6 are no longer for sale
2 to act on
These are still booked and paid for, but staff can’t see them on the floor plan any more. Move or cancel each one. Nothing was cancelled or refunded for you.
Rab, 23 Sep · 20:00
Table 5
KK3F9A
Confirmed
Rab, 23 Sep · in play now
Table 6
Open tab
In play
Opening hours · per day
Set each day’s open and last-start time, or mark it closed. The last start is the latest time a booking can begin: a 3-hour package with a 21:00 last start can be booked until 19:00. A last start after midnight gets “+1” and belongs to that day’s trading night.
MonRp 30.000
TueRp 30.000
WedRp 30.000
ThuRp 30.000
Fribase
Satbase
Sun
A closed day still sells the tail of the previous night. Coach hours stay capped at 23:00 until migration 0111 is applied.
Table types & seats
Chinese: every style (Chinese, Riichi, Indonesian). Hourly rates are ignored once this type sells packages.
Japanese: Riichi only. This table can’t host Chinese or Indonesian play.
Tables · 6
T1HKT2HKT3HKT4HKT5RiichiT6Riichi
Removing a table stops new bookings on it at once. Bookings already made are not cancelled. A removed type is switched off, never deleted.
Kaki · Venue · Setup (continued)
Packages, the price ladder and the date rules /venues/[id]/setupSUPER-ADMIN
The rest of the setup page, in the order the code renders it. A venue that sells packages gets the banner: its hourly settings are legacy and don’t apply. The ladder shows what a customer actually pays, straight from the booking server, including hour counts nobody typed a price for. A sharp price (more time costing less) is flagged in red.
This venue sells packages. Its prices come from the package list. The base rate, duration bundles and hourly preview are legacy settings and don’t apply to a table type that has packages.
Packages & peak prices
Package
Type
Length
Days
Normal / person
Normal / table
Peak / table
On sale
1-Hour
Hong Kong
1 h
Every day + holidays
Rp 15.000
Rp 60.000
Rp 80.000
On sale
3-Hour Pass
Hong Kong
3 h
Mon–Thu
Rp 35.000
Rp 140.000
—
On sale
All day
Riichi
All day
Sat–Sun
Rp 70.000
Rp 260.000 ≠ 4×
—
Not on sale
Fit: 3 h, can start 13:00–21:00 on every selected day. Removing a package stops it being sold but keeps it on every booking that already paid for it. Nothing is deleted. The server decides normal or peak: peak applies when the hours overlap a peak window or the date is a public holiday.
What a customer actually pays
Hours
Per person
Whole table
Charged as
1 h
Rp 20.000
Rp 80.000
1-Hour · Peak pricing applies
2 h
Rp 40.000
Rp 160.000
2 × 1-Hour
3 h
Rp 35.000
Rp 140.000
3-Hour Pass · 3 h would cost LESS than 2 h. More time must never cost less.
4 h
Rp 55.000
Rp 220.000
3-Hour Pass + 1-Hour · the cheapest cover
Reads saved packages for a real date. The top of each ladder is capped by closing time and by that day’s bookings, and peak follows the span, so the numbers move with the start time.
The start is inclusive and the end is exclusive. A package that overlaps a window charges its peak price. On an hourly venue, the window’s rate replaces the base rate.
A flat price for a fixed length that beats the hourly rate. A bundle with no name is dropped when you save.
Hourly price preview
Not used · package venue
A venue sold by the hour shows start chips here, e.g. 19:00 · Rp 120.000 · 3 free. When it has no hours set, the preview says “Preview needs an active venue with hours set.”
Kaki · Venue · Bookings
One venue’s day, with check-in and cancel /venues/[id]/bookingsSUPER-ADMIN
Filters for date, status and search, then the day’s bookings. Cancelling a row asks for confirmation inline. The confirm says exactly what happens to the money, and the outcome shows every refund state, including the “not settled yet” state the old screen stayed silent on. Guests get monograms instead of the party emoji. Check-in is offered only on bookings that can still be checked in.
ListRefund outcomesCheck in by code
admin.kakiapp.co/venues/mahjong-dojo/bookings
‹ All venues · Mahjong Dojo
發
Mahjong Dojo
Bookings
SetupBookingsCoachesPromotionsFinance
You’re managing Mahjong Dojo as platform staff. Every change is written to the audit log.
Guest
Slot
Table
Price
Status
DS
Dewi Setiawan
KK7Q4M
19:00 · 2 h
#1
Rp 120.000
confirmed
Cancel KK3F9A? The table is released at once and can be resold. Rp 120.000 paid by QRIS is refunded through the payment gateway. This can’t be undone.
AP
Agus Pratama
KK3F9A
20:30 · 3 h
#5
Rp 120.000
paid
PL
Putri Lestari
KK1X7C
17:30 · 1 h
#3
Rp 45.000
completed
WI
Walk-in
KK9D2W
22:00 · 2 h
#2
Rp 120.000
pending
BS
Budi Santoso
KK5M4R
16:00 · 2 h
#4
Rp 60.000
cancelled
Refunded. The guest has been refunded in full by the payment gateway.
Refund sent, not settled yet. Check it has cleared before telling the guest the money is back. A long “pending” usually means the gateway’s callback never reached us, not that the money is stuck. Ask the gateway first.
Nothing to send back. No online payment was attached to this booking (cash, or the venue’s own card terminal).
Already refunded. This payment was refunded earlier. No second refund was sent.
The booking is cancelled, but the refund did NOT go through (gateway_timeout). The guest’s money is still taken. Issue the refund at the payment gateway yourself, then note it here.
Could not cancel the booking. Nothing changed.
Check in by code
Enter the booking code, from a QR scan or the customer’s confirmation, to record their arrival. Codes are case-sensitive.
Checked in Dewi Setiawan · table 1 · 19:00
No booking found with that code.
That booking is already checked in.
Kaki · Venue · Bookings · drawer
New booking link: hold a table, share a pay link /venues/[id]/bookings → New booking linkSUPER-ADMIN
Start times, hour counts and prices come from the booking server, the same ladder a customer is quoted. Half-hour starts are real chips. Past-midnight starts appear on the calendar day, labelled with the night they belong to. A package combination that can’t be held here says so, and a table that stops being free keeps its pick and is flagged, never silently swapped. Click a start and a table.
FormLink ready
admin.kakiapp.co/venues/mahjong-dojo/bookings
Bookings
Mahjong Dojo
New booking link
Pre-fill a hold for the customer and share a pay link. The slot is held as pending for 15 minutes while they pay.
Ruleset
Start time
This venue offers half-hour starts. The booking still runs for whole hours from the package; only the start moves.
How long
3hours · 19:00 – 22:00
3-Hour Pass · Rp 140.000 whole table · Rp 35.000 per person Peak pricing applies
The last bookable start is 23:00, so 5 h is the most that fits from 19:00.
4 h is charged as 3-Hour Pass + 1-Hour, and a hold can only cover one package’s own span, so this console can’t hold 4 h yet. Holdable here: 1 h · 3 h. For a real 4-hour booking, send the customer the venue’s own booking page.
Table
Venue has 6 tables. Only free Hong Kong tables are offered; a hold on another type would be refused.
Table 2 can no longer take this booking: it isn’t free for 3 h from 19:00. Pick another table or shorten the span. Nothing was moved for you.
Booking link ready
Hold created. Share this pay link with the customer. The slot is held as pending until they pay. The booking code is KK4T8N.
Pay link
kakimahjong.com/pay/KK4T8N
If it fails
That table is already taken for this span.
This venue sells time packages and the server wouldn’t accept this one. Reopen the drawer so the packages reload, then pick the ruleset and hours again.
Kaki · Venue · Coaches
The venue’s coach roster /venues/[id]/coachesSUPER-ADMIN
A coach is a roster entry the venue owns, with no login. A coach needs a rate and weekly hours before anyone can book them. Retiring never deletes a coach, and it now asks for confirmation, as removing time off does. Both hour rules are spelled out: weekly hours are start times, and time off ends at the hour the coach is back.
RosterAdd / editScheduleRetire confirm
admin.kakiapp.co/venues/mahjong-dojo/coaches
‹ All venues · Mahjong Dojo
發
Mahjong Dojo
Coaches
SetupBookingsCoachesPromotionsFinance
You’re managing Mahjong Dojo as platform staff. Every change is written to the audit log.
The venue sets the rate and the hours. Learners book in the app and the server works out the price.
ML
MelatiActive
Riichi specialist
RateRp 150.000 / person / hour
StartsMon–Fri 16:00–20:00
Time off1 upcoming day
BG
BagusActive
Beginner-friendly
RateRp 120.000 / person / hour
StartsNo weekly hours yet
This coach can’t be booked until weekly hours are set.
DW
DewiRetired
Hong Kong
RateRp 100.000 / person / hour
Empty roster: “No coaches yet. Add the venue’s first coach and set the weekly hours they teach.” A roster that fails to load shows its reason and a Try again button (the old screen had no retry).
Add a coach
There’s no login and no account to invite. The venue names, prices and schedules the coach here.
Letters only, no emoji. With no photo we show their initials. A learner is charged rate × learners × hours by the server. Changing the rate doesn’t re-price sessions already sold.
Names can’t contain emoji. A coach is a person: type the name in letters.
Melati · schedule
Weekly hours
Both times are start times. A 16:00 first start with a 20:00 last start means a lesson can begin at 16, 17, 18, 19 or 20. One window per day; for a break, set one wide window and add time off.
Mon
Tue
Wed
SatNot working
Wednesday: the last start can’t be earlier than the first start.
Time off
The end is the hour the coach is back: 14:00 → 17:00 clears 14, 15 and 16, and 17:00 can be booked again. Only upcoming dates are listed.
Sab, 3 Okt · All day · Public holiday
FromBack atNote (optional)
Retire Melati?
Melati disappears from the public board and can’t be booked. Sessions already sold stay booked. You can restore her at any time, and nothing is deleted.
Kaki · Venue · Promotions
Discount campaigns and their codes /venues/[id]/promotionsSUPER-ADMIN
A campaign is the rule, and codes are minted under it. The customer-facing labels stay in Indonesian (“Diskon 20%”). The kind and value freeze once a campaign is created. Codes are shown exactly once. Nothing is ever deleted, only deactivated. A named single-use code gets a red warning, because only one customer could ever use it.
CampaignsNew campaignGenerate codesCodes shown onceDeactivate all
admin.kakiapp.co/venues/mahjong-dojo/promotions
‹ All venues · Mahjong Dojo
發
Mahjong Dojo
Promotions
SetupBookingsCoachesPromotionsFinance
A customer applies a code on the held screen. The server re-prices the booking, and the code is used up only when the payment settles. The venue funds the discount.
1 jam gratis · Tanpa batas waktu · Group: Dojo Bandung
Empty: “No campaigns yet. Create the venue’s first campaign, then generate a batch of codes under it. Nothing is redeemable until a campaign has codes and is active inside its window.”
New campaign
The kind and value are frozen once created: a customer must always be told what a code they hold is worth.
Name
Kind
Percent offRupiah offFree hours
ValueCap (optional)Minimum spend (optional)Uses per account (optional)Starts (optional)Ends (optional)
At a POS till, “uses per account” can’t be checked when the customer is unknown. A one-per-customer code is effectively unlimited there.
Generate codes
Mint a batch under “Grand opening Winbardi”. Each code is 8 characters after the prefix. The codes are shown once, on the next screen.
Name the code (optional)
One code, spelled exactly as customers will type it. Letters, digits and dashes, 4 to 32 characters. Leave it blank to generate unguessable codes.
How manyPrefix (optional)
Single-use: each code redeems once
Only ONE customer can ever use this code. For a public code, turn this off and set “Uses per account” to 1 on the campaign.
100 codes minted
They are shown here once. Copy them now or export the CSV. This list is gone when the drawer closes, and the Codes list on the page shows status, not a second copy to hand out.
Every unused code under “Grand opening Winbardi” stops working. Used codes, and codes live in someone’s checkout right now, are left alone.
Kaki · Venue · Finance report
Download the owner’s finance report /venues/[id]/financeSUPER-ADMIN
This is the same PDF the owner downloads: every payment rail, refunds and the Kaki fee, with a transaction appendix. It works for venues with no owner. The page shows no figures of its own on purpose. When the PDF renderer is down (a 503), printable HTML becomes the main button.
admin.kakiapp.co/venues/mahjong-dojo/finance
‹ All venues · Mahjong Dojo
發
Mahjong Dojo
Finance report
SetupBookingsCoachesPromotionsFinance
Each download is written to the audit log.
Finance report
Period
MonthlyWeeklyAll time
Month
Document language
Bahasa IndonesiaEnglish
Days are payment days in WIB. The weekly report takes any day in the week (Mon–Sun).
What you might see
Saved Laporan-Keuangan-Mahjong-Dojo-2026-09.pdf
The PDF renderer is down or not deployed (PDF_RENDERER_URL). The printable HTML still works: open it and print to PDF.
The browser blocked the new tab, so the report was saved as Laporan-Keuangan-Mahjong-Dojo-2026-09.html.
The report’s figures don’t add up (a closure check failed). Look for [finance-report] in the API logs; the log line names the payment id.
Too many report downloads in a row. Wait a minute, then retry.
Kaki · Venue groups
Named sets of venues /venue-groupsADMIN+ READ · SUPER-ADMIN EDIT
A group is one voucher scope and one shared leaderboard. A venue can sit in more than one group. Admins read the list; only a super-admin creates or edits a group. There is no delete, and an empty group is inert. Switch to the drawer.
ListNew / edit drawerAdmin (read-only)
admin.kakiapp.co/venue-groups
Venue oversight
Venue groups
A voucher issued under a group applies at every venue in it, and the group ranks every game played at any of them.
Read-only. A super-admin creates and edits groups.
Group
Members
Venues
Edit
Dojo Bandung
dojo-bandung
2 venues
Mahjong Dojo, Mahjong Dojo Winbardi
Sumatra Selatan
sumatra-selatan
1 venue
Tenpai Addicts
Pop-ups 2026
pop-ups-2026
No venues
—
Empty: “No venue groups yet. Create the first one with New group.” An admin sees “A super-admin creates them” instead.
New group
One voucher can apply at every venue in the group, and the group gets a shared leaderboard.
NameSlug (optional)
Lowercase letters, digits and single hyphens. Leave it blank and the server derives one, likely “dojo-bandung”. The slug is fixed once the group is created.
That slug is already used by another group. Pick a different one.
Kaki · Venue groups · detail
One group: members and its vouchers /venue-groups/[id]ADMIN+ · VOUCHERS SUPER-ADMIN
The members list links to each venue’s setup, which needs super-admin, so an admin sees a lock and not a dead link. A super-admin gets the same promotions panel scoped to the group; its campaigns carry no venue list. An unknown id shows “No such group”.
admin.kakiapp.co/venue-groups/dojo-bandung
‹ All groups
DB
Dojo Bandung
dojo-bandung
Members 2
Mahjong Dojo · BandungSetup →
Mahjong Dojo Winbardi · BandungSetup →
Empty group: “No venues yet. An empty group is inert: its vouchers apply nowhere and its leaderboard stays blank until a venue is added.”
Group vouchers
Satu jam gratisActive
1 jam gratis · Tanpa batas waktu · Every venue in the group
A group campaign applies at every venue in the group. There is no venue list to edit. Admins see: “Group vouchers are issued by a super-admin.”
Kaki · Bookings
Every booking, across every venue /bookingsSUPER-ADMIN
This is the cross-venue oversight list. Open a row to cancel it and release the slot; the cancel refunds the guest through the payment gateway. The redesign adds a venue filter (the API already takes venueId), status and search. The confirm step spells out the money outcome, and every refund outcome is shown instead of the drawer closing silently. Time trap: this list doesn’t receive half-hour starts yet, so a 10:30 booking reads 10:00 until the API sends slot_minutes.
DrawerCancel confirmAfter cancel
admin.kakiapp.co/bookings
Booking oversight
Bookings
Venue
Guest
When
Total
Status
MDMahjong Dojo
Dewi Setiawan
25 Sep · 19:00–22:00
Rp 142.800
confirmed
TATenpai Addicts
Andi Wijaya
24 Sep · 22:00–02:00
Rp 204.000
paid
MDMahjong Dojo
Sari Kusuma
23 Sep · 16:00–18:00
Rp 61.200
cancelled
Booking
confirmed25 Sep · 19:00–22:00
Venue
MDMahjong Dojo
Guest
Dewi Setiawan
Hours
3 h
Total
Rp 142.800
Booked
20 Sep, 14:05 WIB
Cancel this booking? The slot is released straight away and can be resold. The guest is refunded automatically through the payment gateway. Don’t send the money again by hand: if the refund fails, this screen says so.
Cancelled. The guest has been refunded in full by the payment gateway.
Or: the refund was sent and hasn’t settled yet. Check it has cleared before telling the guest.
Or: the booking is cancelled, but the refund did NOT go through. The guest’s money is still taken. Issue the refund at the payment gateway yourself.
Kaki · Open play
Venue-hosted open tables /open-playSUPER-ADMIN
Tables a venue hosts, across every venue; tables posted by players are not listed. Posting a table holds nothing. A physical table is held only for the 15-minute pay window that opens when every seat is claimed. Rows that hold a table or owe money come first. There is no cancel control, because the API has no cancel route for these. The board refreshes every minute.
BoardCreateDetail
admin.kakiapp.co/open-play
Open play
Open tables
1 venue could not be loaded, so this board is incomplete.
Holding a table, or owing money
2
Venue
When
Seats
State
Pay window
Mahjong Dojo
Riichi
19:30 · Rab, 23 Sep
4 / 4
Pay window
about 9 min left · table 3
Tenpai Addicts
Hong Kong
20:00 · Sel, 22 Sep
3 / 4
Money owed back
—
Everything else
Mahjong Dojo
Any style
20:30 · Rab, 23 Sep
1 / 4
Open
—
Mahjong Dojo Winbardi
Hong Kong
15:00 · Rab, 23 Sep
4 / 4
Confirmed
—
Mahjong Dojo
Riichi
13:00 · Rab, 23 Sep
2 / 4
Lapsed
—
States: Open · Open, part paid · Pay window · Pay window, extended (the one automatic extension) · Confirmed · Completed · Money owed back · Bumped · Cancelled · Lapsed. An unknown state shows as-is with “check the API”. If the venue list itself fails, the board says so instead of looking empty.
Create open table
Posts a table that shows as the venue and puts every seat on sale. Your account is recorded as the staff member who created it.
VenueDateStart timeSeatsStyleNote (optional)
One posting is one physical table (2–8 seats). For two tables, post twice. If every table at the venue is Riichi-only, the style is fixed and says which style it is.
There is no price to set. The server prices each seat from this venue’s packages, the same way it charges the player.
Creating a table holds nothing. A physical table is held only once every seat is claimed, for a 15-minute pay window, and kept only if the seats are paid.
Mahjong Dojo · 19:30
Pay windowRab, 23 SepRiichi
Full. A table is held while the players pay.
Seats claimed
4/4
Paid
2/4
Seat price
Rp 35.000
Physical table
Table 3
Booking
KK2R8T
Pay window running. Earliest close 19:41 (about 9 min). This is a “no earlier than”, not a hard cut-off: a seat with a QR already on screen isn’t dropped mid-scan. 2 seats still unpaid. Extensions used 0 of 1.
Seats
Seat 1 · player · DewiPaid
Seat 2 · player · AgusPaid
Seat 3 · player · PutriRp 35.000 due
Seat 4 · instructorNo charge
Kaki · Clubs
Clubs and their verified badge /clubsADMIN+
Every club players have created. Verifying one adds the badge players see on the club profile. The drawer stays open after a change and shows the fresh state. Removing verification now asks for confirmation.
admin.kakiapp.co/clubs
Community oversight
Clubs
Club
Members
Status
RB
Klub Riichi Bandung
Bandung
42
✓ Verified
RH
Rumah Bambu Hijau
Bandung
17
Unverified
Club detail
RB
Klub Riichi Bandung
Bandung · klub-riichi-bandung
✓ Verified
Approved members
42
Created
4 Jul 2026
Remove the verified badge from Klub Riichi Bandung? Players will no longer see it on the club profile.
Kaki · How ranking works
The ranking explainer /leaderboardsALL STAFF
This is a static reference page with no data calls. It keeps the four rulesets, the formula, the worked examples, the conditions a game must meet to count, the boards and the “surprises” list. The redesign lists all five board scopes (the old page covered three) and puts the “read this before quoting any figure” warning at the top.
admin.kakiapp.co/leaderboards
Ranked play · reference
How Kaki ranks a game
Checked against the code 25 Aug 2026
Read this before quoting any figure. Production ranked data is nearly empty, and the board of twenty players in the app is seeded demo data.
The difference is four constants
Ruleset
Id
Start / return
Uma
Oka
Notes
Riichi · Standard
YONMA
25.000 / 30.000
+30 / +10 / −10 / −30
+20 to 1st
Kiriage mangan off
Riichi · WRC (live)
WRC_2025
30.000 / 30.000
+15 / +5 / −5 / −15
0
Exact to 0,1P · ties split uma · chombo −30P, tournament score only
Riichi · WRC (retired)
YONMA_30K
30.000 / 30.000
+15 / +5 / −5 / −15
0
Settles games recorded before 17 Sep 2026 only
Hong Kong · 4 player
HK_YONMA
0 / 0
Placement +5 / +1 / −1 / −5
0
Margin doesn’t count
Board scopes
App-wideAverage per game, qualifies after one confirmed game
ClubTotal, no minimum
VenueTotal across games at the venue
Venue groupEvery game at any member venue; club games excluded
EventTotal within the event
What has to be true for a game to count
1
Anchored to a club, venue, event or group, not a bare personal game.
2
Confirmed. This happens automatically on submit; the only undo is a staff void, which deletes the ledger rows.
3
A ranked format: Riichi, Hong Kong, or ITM (Indonesia · Main Kim, which has its own board).
Two numbers and a per-venue table, with a window switch. The “partial” caption sits above the numbers, not under them: this reads bookings and POS tabs only (two of seven money rails, paid rows). The per-venue finance report PDF is the authoritative figure. A card or e-wallet close at the POS goes to the venue’s own terminal and never passes through Kaki.
admin.kakiapp.co/revenue
Platform finance
Kaki revenue
Today7 days30 daysAll time
Partial. Bookings and POS tabs only, paid rows only. The per-venue Finance report PDF is the authoritative figure.
Total platform feeRp 187.400Kaki’s cut across the window
Gross collectedRp 4.648.800Total processed, including what goes to hosts
Empty window: “No revenue in this window. Try a wider window.” Subscription rows carry no platform fee.
Money · Withdrawals
Venues asking for their money /withdrawalsSUPER-ADMIN
You decide, then make the bank transfer yourself; nothing on this screen sends money. The old two-press button is now one confirm dialog that repeats the amount and the venue. A typed note is kept on approve too (the old screen threw it away). “Pending” has two meanings here, and the page never uses the same word for both.
DecideConfirm sentDecided
admin.kakiapp.co/withdrawals
Platform finance
Withdrawals
1 to decide
Tenpai Addicts has more than one open request. The database should make that impossible. Don’t approve any of them; tell an engineer that uniq_withdrawal_request_open_per_venue is missing.
Awaiting a decisionRp 2.150.000What venues have ASKED for and nobody has decided. It isn’t a balance or what Kaki holds, and it says nothing about whether the payments behind it have settled.
Mahjong Dojo · Rp 2.150.000Asked 23 Sep 2026, 11:05 WIB by Dojo Group · waiting 2 h
Already decided
Mahjong Dojo · Rp 1.800.000 · 9 SepWithdrawn
Mahjong Dojo Winbardi · Rp 400.000 · 2 SepRejected
2 records were left out because the API sent them in a shape this screen can’t read without guessing. Tell an engineer.
“Pending” means two different things.Awaiting a decision is this queue: a venue has asked. Unsettled at the gateway is the money behind it. This queue only knows the first, so check the payment gateway before you transfer.
MD
Mahjong Dojo
Rp 2.150.000
Awaiting a decisionby Dojo GroupAsked 23 Sep 2026, 11:05 WIB
Approving records that you are sending this by hand. It doesn’t transfer anything. Make the bank transfer yourself, then mark it withdrawn.
Note to the venue (optional)
0 of 2000 characters. Nothing is sent with the decision; the venue sees the decision alone.
A decision is final. There is no way back to awaiting. If you get it wrong, ask the venue to file a new request.
Decided 9 Sep 2026, 16:20 WIB by Robert. Note sent to the venue: Transferred to BCA, ref 0909-2231.
Rejected with no note: “No reason was recorded. The venue was told only that it was rejected.”
Somebody already decided this one. Refresh the queue to see what they chose. Your decision was not applied.
Record Rp 2.150.000 sent to Mahjong Dojo?
Only confirm after the bank transfer has gone out. This console transfers nothing, and the decision can’t be undone.
System · Users
Everyone on the platform /usersADMIN+ · DELETE SUPER-ADMIN
Search by email or name, then open a person to review their footprint and suspend, unsuspend or delete them. Suspend now asks for confirmation. Delete keeps its hard warning: bookings and payment records go with the account, including paid future bookings, which frees those tables without telling the venue.
DrawerSuspend confirmDelete confirm
admin.kakiapp.co/users
User oversight
Users
User
Plan
Status
DS
Dewi Setiawan
dewi.s@gmail.com
Free
Active
DA
Dewi Anggraini
dewi.ang@yahoo.co.id
Free
Suspended
No match: “No users found. Try a different search.”
User detail
DS
Dewi Setiawan
dewi.s@gmail.com
FreeActive
Venues0Bookings7Chat bans0
Joined
2 Mar 2026
Suspend Dewi Setiawan? She can’t sign in until you unsuspend her. Her bookings are kept. The reason isn’t recorded anywhere.
Permanently delete this account? This can’t be undone. Her 7 bookings and every payment record are deleted too, including paid future bookings, which frees those tables for resale without telling the venue. Suspend the account instead if you may need it back.
System · Moderation
Escalated chat reports and stranded disputes /moderationALL STAFF
Open a report to see the message in context, then resolve it or ban the reported user from that one conversation. A platform-wide lock is Suspend, on Users. Below the queue, game disputes with no club or venue are read-only. The ones marked stranded have no recorder left, so nobody but staff will ever see them.
admin.kakiapp.co/moderation
Trust & safety
Moderation
1 open
BH
Budi HartonoEscalated
Harassment · 23 Sep
“kalau kalah jangan nangis lagi ya, dasar…”
Disputed games with no club or venue 2 open1 stranded
Andi Pratama disputes a gamestranded “Scores for South are swapped.” No recorder: this report has no other reader. g_7c1e9a2f21 Sep
Rina Wijaya disputes a game Recorded by Sari Kusuma. g_19bd44e020 Sep
No actions yet, on purpose: closing a report is one-way, and who owns these reports is an open product decision. Voiding the game is the remedy.
Empty queue: “Queue is clear. No escalated reports right now.”
Report
Escalated23 Sep, 18:40 WIB
Reason
Harassment
Parties
Reported
Budi Hartono · budi.h@gmail.com
Reporter
Putri Lestari · putri@gmail.com
Message context
“kalau kalah jangan nangis lagi ya, dasar…”
Preview of the first 140 characters.
Ban Budi Hartono from this conversation? He is removed from it and can’t be added back. This doesn’t touch his other chats or his account; to lock the account itself, suspend him on Users.
If the reported account is gone: “No account left to ban on this report.”
System · Staff & roles
The internal team and their levels /staffSUPER-ADMIN
Provision accounts, change levels, suspend, or revoke. Sign-in is by email code only, so the “temporary password” field is gone from Add staff. A level change now confirms and says what the new level can do, and your own row can’t be demoted or revoked from here.
MemberAdd staffChange level
admin.kakiapp.co/staff
Team management
Staff & roles
Member
Level
Status
RJ
Robert You
alphajayainovasi@gmail.com
Super admin
Active
SK
Sari Kusuma
sari@kakiapp.co
Admin
Active
AW
Andi Wijaya
andi@kakiapp.co
Moderator
Suspended
A super-admin also needs a matching chat-moderator row, or they can’t moderate chat. The server refuses to demote the last super-admin.
Staff member
SK
Sari Kusuma
sari@kakiapp.co
Access level
ModeratorModeration and the ranking explainer
Admin+ Users, Venues, Groups, Clubs
Super adminEverything, including money
Access
Revoke all staff access for Sari? She loses the console entirely.
Make Sari a Super admin?
She will see Revenue, Withdrawals, every venue’s setup and bookings, Staff and the Audit log, and she can decide withdrawals and cancel any booking.
Add staff member
They sign in at admin.kakiapp.co with a one-time code sent to this email. Only a super-admin can grant the super-admin level.
Full nameEmail
Level
Super adminAdminModerator
Could not create staff member: email_taken.
System · Audit log
Every mutating staff action /auditSUPER-ADMIN
Append-only and newest first. It stays read-only. The redesign adds actor and action filters over the loaded rows, and a row can expand to show its metadata, which the old table never rendered.
Empty: “Nothing logged yet. Staff actions will show up here as they happen.”
System · Roadmap
The build log /roadmapSUPER-ADMIN
What’s left, what’s in flight and what broke. File an item here and a coding session picks it up from the same rows. The screen keeps every filter (status, kind, area, priority, each with a count), grouping by surface or priority, the one-tap done toggle, “copy mention”, and the undo bar. It is built for a phone first, one-handed.
BoardFile an item
admin.kakiapp.co/roadmap
Build log
Roadmap
Marked done · Booking screen shows the wrong price at 10:30
Overview KPIs and chart need an admin summary endpointFeature · Admin · To do
Later
Audit log metadata columnChore · Admin · Parked
Other states: “You don’t have access” (a 403 is never shown as an empty board) · “Nothing on the roadmap yet” · “Nothing matches this filter” with Reset filters · a row error “Not saved: could not reach the API to save that change.”
File an item
What is it?
Kind
FeatureBugChore
Priority
NowNextLater
Area
Notes (optional)Ref (optional: a commit, doc or route)
Not filed: could not reach the API to file this item. Nothing was lost; every field is still exactly as you typed it.
System · POS app (prototype)
The POS as a native app: a planning page /pos-appSUPER-ADMIN
This page is a planning artefact, not a data screen: it renders invented figures and calls nothing. The owner has since decided the web POS (hosts-web /pos) is primary and the native app follows in a later wave, and apps/kaki-merchant is out of scope. So the page keeps its content (the clickable phone, the notifications table, the web-to-app parity table and the blockers), re-skinned here. It should be re-scoped to kaki-pos rather than kaki-merchant.
admin.kakiapp.co/pos-app
Prototype
The POS as an app
A clickable model of the counter and the owner console as one app. Nothing here is live; the numbers are invented.
CounterOwner
What would wake the phone
0 of 13 fire today
When
Who
Server work
A booking arrives
both
nothing exists
A payment settles or fails
owner
half exists
A table is held and nobody paid
counter
nothing exists
Every web screen, and where it lands
Web POS / owner
In the app
/pos/arrivals
Counter · Today
/pos/floor
Counter · Floor
/owner/finance/withdrawals
Owner · Withdrawals
What blocks it
1 · The app can’t ship yet
No EAS set-up on the target app. Fix: re-scope to apps/kaki-pos.
2 · Push is dead
The push rail exists, but the POS app never registers.