7daeccb832e1d13951b53e081c4425caee807d0d
Web-tier features completing the AtomCMS→Next.js conversion (slice 2): UI/UX: - Dark mode: html.dark CSS-var overrides + ThemeSwitcher (localStorage, no-flash boot script) wired into the nav. - i18n (next-intl, cookie-based / no URL routing): en + it catalogs, request.ts, provider in root layout, LanguageSwitcher; shell (nav, header, footer) fully translated. URLs + access-guard unchanged. - globals.css: --muted/--border aliases used across admin pages. User features: - /messages: offline messages + friend-request accept (server action re-reads session, two directional rows, idempotent). - Email verification: signed-token /verify route + sendVerification wired into register (best-effort, never blocks signup). - Article reactions: toggle UI on news/[slug] + server action. - Content moderation service (website_wordfilter + optional OpenAI moderations, fail-open) wired into article comments + guestbook. Admin CRUD parity (Filament replacement): - /admin/shop (+ new/[id]) packages CRUD + read-only orders. - /admin/transactions read-only PayPal log. - /admin/permissions, /admin/tags, /admin/ads (+ new/[id]), /admin/help-questions (+ new/[id]), /admin/radio/history, /admin/users/[id]/edit. All gated by requireStaff + logStaffActivity. Verified: tsc 0, vitest 48/48, next build 0 (all routes incl. new admin CRUD + /messages + /verify).
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:
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:
- 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 - Restart the server (
pnpm -C atomcms-next start, orpnpm dev). - Log in at
/loginwith 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).
Languages
TypeScript
95.9%
JavaScript
1.4%
Shell
1.1%
CSS
1.1%
PHP
0.3%
Other
0.1%