Skip to main content

Routes & Pages

Defined in src/App.tsx. All protected routes are wrapped by ProtectedRoute + AppLayout (except payment return pages).


Public routes (no auth required)

RouteComponentPurpose
/loginLoginPagePortal auth login, supports 2FA OTP + Turnstile
/forgot-passwordForgotPasswordContactPageEnter email/phone to receive OTP
/forgot-password/otpForgotPasswordOtpPageVerify OTP
/forgot-password/resetForgotPasswordResetPageSet new password

Protected routes

RouteComponentPurpose
/DashboardPageHome: credits/USD balances, player count, buy credits, quick links
/playersPlayersPagePlayer list, search, pagination, create player
/players/:playerIdPlayerDetailPagePlayer detail: deposit/redeem, ban/unban, history
/cashiersCashiersPageCashier management: list, create
/cashiers/:cashierIdCashierDetailPageCashier report, shifts, fraud, suspend/terminate
/fraud-indicatorsFraudIndicatorsPageFraud metrics (Cashier + Player tabs)
/transactionsTransactionsPageCredits ledger, filter, CSV export
/online-transactionsOnlineBalanceTransactionsPageUSD wallet ledger, crypto withdrawal, export
/provider-feesProviderFeesPageProvider fee configuration (deposit/withdrawal/transfer)
/withdrawalsWithdrawalsApprovalPageApprove/reject player withdrawal requests
/settingsSettingsPageCost rate, low balance warning, enable 2FA
/kiosk-domainKioskDomainPageManage kiosk subdomain + download poster
/popups/sendSendPlayerPopupPageSend in-app popup to player
/broadcasts/sendSendBroadcastPageSend broadcast notification
/payment/successShopPaymentSuccessPageSuccessful payment callback
/payment/cancelledShopPaymentCancelledPageCancelled payment callback
/payment/errorShopPaymentErrorPagePayment error callback
/transfer/legacyTransferToPlayerPageLegacy credit transfer flow (lookup phone + OTP)

Redirect routes

RouteRedirectNotes
/transfer/playersLegacy
/purchase/Legacy
* (catch-all)/

Send popup / Send broadcast

Shown only when can_delegate_popups === true (from dashboard API or user profile).

Logic in AppLayout.tsx:

  • Fetch dashboard → setPopupNavAllowed(!!res.data.can_delegate_popups)
  • Fallback from user.can_delegate_popups

Pages /popups/send and /broadcasts/send redirect if permission is missing.


Components by domain

Layout & Shell

ComponentFileRole
AppLayoutcomponents/layout/AppLayout.tsxDesktop sidebar, mobile bottom nav, balance cards, nav, account menu
ProtectedRoutecomponents/auth/ProtectedRoute.tsxAuth guard, redirect /login
ModalPortalcomponents/ui/ModalPortal.tsxModal portal
PortalEmptyStatecomponents/ui/PortalEmptyState.tsxEmpty state UI

Auth

ComponentRole
LoginPagePortal login + OTP + Turnstile
ForgotPassword*Page3-step password reset
VerifyNowTriggerShop email/phone verification modal

Business

ComponentRole
ShopCreditPurchaseTrigger/ModalBuy credits (Crypto + Balance tabs)
PlayerDetailPanelPlayer actions: deposit, redeem, ban, history
ShopPlayerLinkByPhonePanelCreate player form in modal
ShopDashboardOverviewShop profile card on dashboard
ShopNotificationBellBroadcast bell (poll every 2 minutes)
ShopInAppPopupGateApp-wide popup gate
PortalWithdrawalLimitsPanelUSD withdrawal limits
AvailableCreditsCalloutDisplay balance during transfer/deposit
ShopPosterDownloadSectionDownload kiosk promo poster (3 templates)

Poster templates

TemplateStyle
NeonArcadeNeon arcade
GoldPremiumGold premium
DarkNeonDark neon

Rendered via html-to-image → download PNG.


Payment return flow

Backend redirects to Shop Portal after payment:

/payment/success?transaction_id=...&status=...
/payment/cancelled?transaction_id=...
/payment/error?message=...

Query params: transaction_id, status, message.