Admin screens
Kaki · internal console · admin.kakiapp.co

The admin, redesigned

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
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

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.
Paid bookings today18▲ 4 vs last Wed
Booking value todayRp 3,42 jt▲ 12%
Live venues2+1 in preview
Players this week214▲ 31

Paid bookings · last 14 days

14 d30 d90 d

Latest bookings

All →
CodeVenueTimeAmountStatus
KK7Q4MMahjong Dojo19:00Rp 60.000
KK3F9AMahjong Dojo20:30Rp 120.000Pending
KK8P2ZTenpai Addicts00:30 TueRp 75.000
KK1X7CMahjong Dojo17:30Rp 45.000Checked in
KK5M4RMahjong Dojo16:00Rp 60.000Refunded
Jump to
Gates & shared states

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.

VenueOwnerPublicationVerifiedTables
MD
Mahjong Dojo
Bandung · Dago
Dojo Group
owner@mahjongdojo.id
Live✓ Verified6Listed
MW
Mahjong Dojo Winbardi
Bandung · Lembang
Dojo Group
owner@mahjongdojo.id
Live✓ Verified4Listed
TA
Tenpai Addicts
Palembang
Rina Wijaya
rina@tenpai.id
Preview✓ Verified5Coming soon
SS
Setiabudhi Social Club
Bandung
No ownerLiveUnverified3Not listed
KP
Kaya Padel
Jakarta · Kemang
Budi Santoso
budi@kaya.id
HiddenUnverified2Deactivated

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.

Kaki · Venues · drawer

Venue detail: owner, verification, publication /venues → VenueDetailDrawerADMIN+ · PUBLICATION SUPER-ADMIN

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.

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.

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.

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

This number decides how many tables can be booked at once.

Opening hours

Edit
Mon–Thu13:00 – 23:00
Fri13:00 – 01:00 +1
Sat10:00 – 02:00 +1
Sun10:00 – 23:00

Close time is the last start time. A “+1” close belongs to that day’s night.

Pricing

Edit
Per table / hourRp 60.000
Mon–Thu½ price
Fri–SunFull price

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:00Table 5KK3F9A
Rab, 23 Sep · in play nowTable 6Open tabIn 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.

admin.kakiapp.co/venues/mahjong-dojo/setup#pricing
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

PackageTypeLengthDaysNormal / personNormal / tablePeak / tableOn sale
1-HourHong Kong1 hEvery day + holidaysRp 15.000Rp 60.000Rp 80.000On sale
3-Hour PassHong Kong3 hMon–ThuRp 35.000Rp 140.000On sale
All dayRiichiAll daySat–SunRp 70.000Rp 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

HoursPer personWhole tableCharged as
1 hRp 20.000Rp 80.0001-Hour · Peak pricing applies
2 hRp 40.000Rp 160.0002 × 1-Hour
3 hRp 35.000Rp 140.0003-Hour Pass · 3 h would cost LESS than 2 h. More time must never cost less.
4 hRp 55.000Rp 220.0003-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.

Peak windows

Save
Fri–Sun18:00 – 22:00
Every day20:00 – 23:00

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.

Holiday pricing

Save
Holiday rate / hourRp 80.000

Applies on Indonesian national public holidays (preloaded). A date override for the same day always wins.

Date overrides & closures

Save
Sab, 17 Okt · Private eventClosed
Sen, 26 OktRp 45.000

A special rate or closure for one date. It always wins over holiday pricing.

Legacy hourly settings · kept for reference

Duration bundles

Save
3-hour session · 3 hRp 150.000

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.
GuestSlotTablePriceStatus
DS
Dewi Setiawan
KK7Q4M
19:00 · 2 h#1Rp 120.000
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#5Rp 120.000
PL
Putri Lestari
KK1X7C
17:30 · 1 h#3Rp 45.000completed
WI
Walk-in
KK9D2W
22:00 · 2 h#2Rp 120.000pending
BS
Budi Santoso
KK5M4R
16:00 · 2 h#4Rp 60.000cancelled
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.

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.

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
Melati Active
Riichi specialist
RateRp 150.000 / person / hour
StartsMon–Fri 16:00–20:00
Time off1 upcoming day
BG
Bagus Active
Beginner-friendly
RateRp 120.000 / person / hour
StartsNo weekly hours yet

This coach can’t be booked until weekly hours are set.

DW
Dewi Retired
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).

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.

Grand opening Winbardi Active

Diskon 20% (maks. Rp 50.000) · 1 Okt 2026 – 31 Okt 2026 · Mahjong Dojo, Mahjong Dojo Winbardi
Codes100Used14Live3
CodeUsesStatus
DOJO-7HK2QWPNsingle-useUnused
DOJO-M4XRT8ZEsingle-useClaimedin someone’s checkout
DOJO-P9WA3KDYsingle-useUsed
DOJO-B6NC2FGVsingle-useInactive

Satu jam gratis Inactive

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.”

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
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.

GroupMembersVenuesEdit
Dojo Bandung
dojo-bandung
2 venuesMahjong Dojo, Mahjong Dojo Winbardi
Sumatra Selatan
sumatra-selatan
1 venueTenpai 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.

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 gratis Active
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

VenueGuestWhenTotalStatus
MDMahjong Dojo
Dewi Setiawan25 Sep · 19:00–22:00Rp 142.800
TATenpai Addicts
Andi Wijaya24 Sep · 22:00–02:00Rp 204.000
MDMahjong Dojo
Sari Kusuma23 Sep · 16:00–18:00Rp 61.200cancelled

Booking

25 Sep · 19:00–22:00
Venue
MDMahjong Dojo
Guest
Dewi Setiawan
Hours
3 h
Total
Rp 142.800
Booked
20 Sep, 14:05 WIB
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
VenueWhenSeatsStatePay window
Mahjong Dojo
Riichi
19:30 · Rab, 23 Sep4 / 4Pay windowabout 9 min left · table 3
Tenpai Addicts
Hong Kong
20:00 · Sel, 22 Sep3 / 4Money owed back

Everything else

Mahjong Dojo
Any style
20:30 · Rab, 23 Sep1 / 4Open
Mahjong Dojo Winbardi
Hong Kong
15:00 · Rab, 23 Sep4 / 4Confirmed
Mahjong Dojo
Riichi
13:00 · Rab, 23 Sep2 / 4Lapsed

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.

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

ClubMembersStatus
RB
Klub Riichi Bandung
Bandung
42✓ Verified
RH
Rumah Bambu Hijau
Bandung
17Unverified

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
RulesetIdStart / returnUmaOkaNotes
Riichi · StandardYONMA25.000 / 30.000+30 / +10 / −10 / −30+20 to 1stKiriage mangan off
Riichi · WRC (live)WRC_202530.000 / 30.000+15 / +5 / −5 / −150Exact to 0,1P · ties split uma · chombo −30P, tournament score only
Riichi · WRC (retired)YONMA_30K30.000 / 30.000+15 / +5 / −5 / −150Settles games recorded before 17 Sep 2026 only
Hong Kong · 4 playerHK_YONMA0 / 0Placement +5 / +1 / −1 / −50Margin 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).
Worked example · Riichi
SeatRawPlaceBaseUmaOkaFinal
East42.0001+12+30+20+62
South31.0002+1+100+11
West18.0003−12−100−22
North9.0004−21−300−51
Money · Revenue

Kaki’s fee revenue, honestly labelled /revenueSUPER-ADMIN

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

Per-venue breakdown

Finance report →
VenueGrossPlatform fee
Mahjong DojoRp 3.742.000Rp 150.900
Mahjong Dojo WinbardiRp 906.800Rp 36.500

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.

Queue · oldest first

Refresh
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.

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.

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

UserPlanStatus
DS
Dewi Setiawan
dewi.s@gmail.com
FreeActive
DA
Dewi Anggraini
dewi.ang@yahoo.co.id
FreeSuspended

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
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 Hartono Escalated
Harassment · 23 Sep

“kalau kalah jangan nangis lagi ya, dasar…”

Disputed games with no club or venue 2 open 1 stranded
Andi Pratama disputes a game stranded
“Scores for South are swapped.” No recorder: this report has no other reader. g_7c1e9a2f
21 Sep
Rina Wijaya disputes a game
Recorded by Sari Kusuma. g_19bd44e0
20 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

MemberLevelStatus
RJ
Robert You
alphajayainovasi@gmail.com
Super adminActive
SK
Sari Kusuma
sari@kakiapp.co
AdminActive
AW
Andi Wijaya
andi@kakiapp.co
ModeratorSuspended

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.
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.

admin.kakiapp.co/audit
Accountability

Audit log

WhenActorActionTarget
23 Sep, 14:12Robertvenue.publicationvenue · Tenpai Addicts
{"from":"hidden","to":"preview","futureBookings":0}
23 Sep, 13:50Robertvenue.managevenue · Mahjong Dojo
23 Sep, 11:02Sari Kusumaclub.verifyclub · 4f2c91d0-8a1b
22 Sep, 20:15Systemwithdrawal.decidewithdrawal · 91ab77e2-0c4d

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
Open 31Done 112All 143
Group by
SurfacePriority
Admin · 3
Now
Venue cancel must send refund:trueBug · Admin · Doing · apps/admin-web/src/lib/admin-api.ts:1662
Next
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.”

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
WhenWhoServer work
A booking arrivesbothnothing exists
A payment settles or failsownerhalf exists
A table is held and nobody paidcounternothing exists

Every web screen, and where it lands

Web POS / ownerIn the app
/pos/arrivalsCounter · Today
/pos/floorCounter · Floor
/owner/finance/withdrawalsOwner · 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.

3 · No POS event notifies anyone

Only one of these is a design problem.