Every user who authenticated via Discord. Click a Discord ID to copy it.
Active and past hub memberships with billing period dates and status.
Full history of every student who used the GATE2027 workshop code. Shows when they redeemed it and their current access status.
Accounts on the GATE practice platform (iristutoring.com/iris-gate). Passwordless email-OTP login. Tiers: free (unpaid), workshop (14-day trial), premium (paying subscriber).
📣 Email all students — send an announcement (new features, new questions, etc.) to every student in the selected tiers. Each email is personalised with the student's first name and Iris branding.
Change access — set a student's tier. Workshop needs a number of days; premium is until you change it (Stripe billing is separate — cancel their subscription in Stripe if they shouldn't be charged).
Delete student — removes the account so they can re-register. Their Stripe billing history is preserved.
Test email — send a trial-expired email preview to any address.
Accounts on the free PEAC practice-test platform. "Via free code" registered themselves with the shared PEAC access code; "Via GATE Premium" were bridged in automatically from a paying GATE Premium account (no separate password).
Blocks every request from a listed IP address (all pages and APIs, admin panel excluded) with a 403. Note: IPs are shared and change often — school wifi, mobile carriers, VPNs — so this is a deterrent layer, not a guarantee. Pair it with deleting the offending account in the tables above. The easiest way to add one is the "🚫 Block IP" button on a student's row once they've logged in at least once.
Every sign-in on GATE or PEAC, whatever path it came through — OTP register/login, PEAC email+password, or the GATE-Premium→PEAC bridge. Dates are Perth local time.
Recent days — click a date to jump straight to it.
Student writing responses submitted for teacher review. Click a submission to read the full response and add feedback.
Deletes the user row and all memberships so they can re-register from scratch. Stripe billing history is preserved.
Clears just one hub membership — keeps the user account and Stripe customer intact.
Grant a user hub access for N days — for complimentary access, testing, or manual overrides.
Common issues and what to do:
🔑 "I can't log in / Discord won't connect"
The student needs to make sure they're logged into Discord in their browser first. Ask them to go to discord.com, log in, then try again. If they lost access to their Discord account entirely, they need to recover it via Discord's own account recovery.
📋 "I'm logged in but can't see the Discord channels"
Their membership may have expired, or the Discord role wasn't assigned. Use Load Users above to find them by username, check their membership status and expiry. If active, use Reset Membership then Grant Membership to force a re-sync, and ask them to log out and back in.
🔄 "I want to start fresh / change my Discord account"
Use Full Reset — Wipe User with their Discord ID. This removes their account so they can re-register with a different Discord. Their Stripe billing history is preserved — they won't be double-charged.
💳 "I paid but didn't get access"
Check their membership in All Memberships. If missing, use Manually Grant Membership with their Discord ID and the correct hub. Then ask them to log out and back in — the Discord role will be assigned on next login.
Look up a user by Discord username
Manage who can access this admin panel. Each person gets their own email and password.
Reset an Admin's Password
If an admin forgets their password, enter their email and set a new one. They can then log in with the new password.
Add New Admin