Manage your platform, users and content in one place.
| Header | Cat. | Msg | Status | Views |
|---|
| Header | By | Status |
|---|
| Username | Name | Role | PRO | Tier | Verified | Notify | Login enabled |
|---|
Everyone currently holding PRO. Admins are not listed — their access comes from the role, not from this flag, which is why the count matches the tile on the PRO subscription card. A paid member can be refunded from the payments console; a comped or unknown member has no payment to refund and is withdrawn with the switch in the Users tab.
| Username | Verified | Tier | Source | Granted by | Granted | Country |
|---|
The compiler checks each version's container image once and remembers the answer, so
pulling an image on the host does not take effect until this is re-checked (or the
backend restarts). Pull with
docker pull eclipse-temurin:21-jdk, then press
Re-check images.
| Name | Type | Owner | Files | Created | Enabled |
|---|
| Page | Accesses | Last access |
|---|
| Course | File | Downloads | Share | Last download |
|---|
Loading audience data…
| Country | Views | Share |
|---|---|---|
| Loading… | ||
| Page | Country | Views | Last view |
|---|---|---|---|
| Loading… | |||
The grant is immediate and cannot be undone from this console — there is
no debit endpoint. Both the user and you get an in-app notification, and the
credit is written to the token ledger as ADMIN_CREDIT with your
username on it.
| User | Credited | New balance | At |
|---|---|---|---|
| Nothing credited yet. | |||
| Age | Order id | User | Kind | Amount | Tokens | Started |
|---|---|---|---|---|---|---|
| Loading… | ||||||
| When | Type | User | Order | Amount | |
|---|---|---|---|---|---|
| Loading… | |||||
Each code works once. If you run low,
re-run setup — it issues a fresh ten and voids the old set. If you lose
both the phone and the codes, the recovery path is a
DELETE against admin_mfa on the database, documented
in db/admin-mfa.sql.
Every switch here is global and takes effect immediately — no redeploy, and no restart. Each one is enforced on the server, so hiding a page is never what stops it.
Effective immediately on the next request that reads them — nothing is cached. Each field shows the range the server accepts; anything outside it is refused, so a mistyped digit cannot take the sandboxes down.
Loading limits…
Which model conducts the mock interviews on ai-interview.html. Switching costs nothing and needs no redeploy - an interview already in progress simply finishes on the new engine, because the transcript is stored here rather than at either vendor. An engine that is not reachable is shown as unavailable; selecting it anyway is allowed, so you can pick it before starting the model server.
The price is not editable here. It is read from
PRO_PRICE_INR and PRO_PRICE_USD in the backend
environment (and the bundled run tokens from PRO_TOKENS_INR /
PRO_TOKENS_USD), so changing it means an env change and a
restart. The figures
above are fetched live from /api/payment/pro/price, so they are
what a customer is actually being charged right now — not what any
config file on your laptop says.
To stop new PRO sales use the PRO upgrades switch in Site settings above; to give or withdraw PRO for one person use the switch in the Users table below. Turning sales off never affects anyone who has already paid.
Switching a course off removes it from the Learn hub, from its own URL and from the reading order — on the next page load, with no redeploy. It is a listing control, not access control: free lesson content is static JavaScript that a determined visitor can still fetch directly. Anything that must not be readable belongs behind the PRO or paid-course gate instead.
Everyone — anyone, signed in or not. PRO only — PRO members and admins. Off — admins only, so a bundle can be withdrawn without deleting it. Takes effect on the next page load.
downloads/….zip URL can still fetch it whatever is set here.
Making this real access control requires serving them through an authenticated
endpoint — see the note in DownloadAccessService.