CJM Studios
CJM Studios
Admin Portal

Restricted access

Sign in with your name and password.

First time setup

Enter the one-time access code issued to you by the Managing Director.

Create your account

Code accepted. Choose the name and password you'll sign in with from now on — your code won't work again.

All access is logged. Accounts are personal — do not share them.

CJM Studios
CJM Studios
Admin Portal
Overview
Operations
Management
?
—
—

Dashboard

Project Nova — live store overview.

Revenue (all time) —
Purchases today —
Awaiting delivery —
Total purchases —

Latest purchases

Latest tickets

Purchases

Everything bought through the Project Nova store. Mark items delivered once granted in city.

Tickets

Player reports and support requests — from Discord and in city.

Open tickets —
Awaiting staff reply —
Closed this week —

Main queue

Senior Admin box

Admin box

Inbox

Tickets forwarded directly to you by other staff.

Assigned to me

Bans

Server ban registry. Your FiveM server will check this on player connect once hooked up.

Issue a ban

Ban list

Audit Log

Every login, code, ticket action, and ban — on the record. Only you can see this.

Access Codes

Issue one-time codes to your admins. On first use they set their own name and password — disable an account to sign them out immediately.

Issue a new code

Copy this now — it will never be shown again:

Accounts

Issued codes

Settings & Integrations

Hook the portal up to Stripe and your Discord bots.

Connections

Stripe webhook setup

  1. In the Stripe dashboard: newer accounts see Workbench → Webhooks → + Create new destination; older accounts see Developers → Webhooks → + Add endpoint. Same thing, Stripe just renamed it.
  2. If asked for a destination type, choose Webhook (not Amazon EventBridge / Azure Event Grid).
  3. Endpoint URL: /api/stripe/webhook
  4. Subscribe to the event checkout.session.completed.
  5. Copy the signing secret (whsec_…) into the STRIPE_WEBHOOK_SECRET environment variable and restart. It's shown once on creation, or under the destination's details afterward.

Discord / bots

Set DISCORD_WEBHOOK_URL to a channel webhook and every purchase and new ticket is forwarded there as an embed the moment it happens — ready for your bots to pick up.

Ticket intake

Bots and the Nova website submit player tickets by POSTing to /api/tickets/submit with the X-Api-Key header set to your TICKET_API_KEY. Body: subject, message, playerName, optional discordId — or ticketId + message + playerName to add a player reply to an existing ticket (replying reopens closed tickets).