Simo f7b3845131 Close the web-feasible 100% gaps: REST write/token API, tickets, draw-badge, /me, sanitisation, dusk, radio SSE
Final parity push (web-tier only):
- REST API write + token auth: POST /api/tokens (issue a personal_access_token
  for the session user), Bearer auth via src/lib/api-auth.ts, POST
  /api/articles/[slug]/comment, GET/DELETE /api/me/tokens, full tickets API
  (/api/tickets +[id] +[id]/reply), radio current-dj/points/points-leaderboard/
  embed-config + POST shouts, and a real-time /api/radio/stream (SSE). 31 public
  API routes total.
- Pages: /draw-badge (buy a custom profile badge → credits + RCON), /me
  dashboard (stats + online friends + referral claim). Wired into the nav.
- HTML sanitisation (sanitize-html) — the HTMLPurifier equivalent — applied to
  writeable boxes + article bodies before dangerouslySetInnerHTML.
- "Dusk" dark theme preset + a default-dark site option honoured by the
  no-flash boot script.

Verified live (prod, amx_test): token issue → Bearer endpoint 200, no-token
401; /api/me/tokens lists it; current-dj/leaderboard JSON; /me + /draw-badge
200; reverted the test user + tokens. tsc 0, vitest 49/49, next build 0.
2026-06-29 18:15:01 +02:00

atomcms-next

AtomCMS (Laravel) converted to Next.js 16 (App Router) + Prisma 7 against the same Arcturus-emulator MySQL/MariaDB database. Auth via NextAuth (argon2id/bcrypt + md5→argon2id upgrade), RCON to the emulator, full public site + admin panel.

Try it now (no database)

The dev/preview server is already running — open:

http://localhost:3000

Public pages render with fallback defaults (empty data). Login / register / admin need a database (below).

Try it for real (your AtomCMS database)

Point it at your live (or a copy of your) AtomCMS database to log in with real accounts and see real data:

  1. Edit atomcms-next/.env:
    DATABASE_URL=mysql://USER:PASSWORD@HOST:3306/DBNAME
    DATABASE_CONNECT_TIMEOUT_MS=10000
    AUTH_SECRET=any-long-random-string-at-least-32-chars
    HOTEL_NAME=YourHotel
    # Optional emulator link (for RCON: give credits, ban, motto, disconnect):
    RCON_HOST=127.0.0.1
    RCON_PORT=3001
    
  2. Restart the server (pnpm -C atomcms-next start, or pnpm dev).
  3. Log in at /login with any existing account. Staff (rank ≥ min_staff_rank, default 7) get the /admin panel. New users can /register.

It reads the schema you already have — no migrations are run against the emulator tables (introspect/conform only). prisma generate is already done; if you add tables, pnpm -C atomcms-next prisma:generate.

Run it yourself

cd atomcms-next
pnpm install          # already done
pnpm dev              # dev server (hot reload) on :3000
# or:
pnpm build && pnpm start   # production
pnpm typecheck        # tsc --noEmit
pnpm test             # vitest (unit tests)

What's built

  • Public: home, news (+comments/reactions), shop, marketplace, community, rankings, staff, photos, guilds, rares, leaderboard, help (+tickets), profile /u/<name> (badges/photos/guestbook), client launcher /client (SSO ticket), login / register / logout, settings, voucher redeem.
  • Admin (/admin, staff-gated): users (give currency/motto/rank/alert/kick via RCON), rooms, articles, catalog, vouchers, badges, radio, achievements, rare-values, photos, bans, applications, word-filter, IP, logs, teams, housekeeping, permissions, emulator config, email templates, calendar, subscriptions, CMS settings.
  • Core: Prisma data layer (190 models), NextAuth auth core (byte-compatible argon2id/bcrypt/md5 + SSO ticket + Laravel encrypter + TOTP), RCON client + currency service, atom visual theme (self-hosted Nunito).
S
Description
No description provided
Readme CC-BY-SA-4.0
172 MiB
1 Stars 1 Watchers 0 Forks
Languages
TypeScript 95.9%
JavaScript 1.4%
Shell 1.1%
CSS 1.1%
PHP 0.3%
Other 0.1%