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).
60 lines
1.5 KiB
JSON
60 lines
1.5 KiB
JSON
{
|
|
"name": "atomcms-next",
|
|
"private": true,
|
|
"type": "module",
|
|
"engines": {
|
|
"node": ">=22"
|
|
},
|
|
"packageManager": "[email protected]",
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"prisma:generate": "prisma generate",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"db:migrate": "tsx scripts/apply-migrations.ts",
|
|
"db:migrate:status": "tsx scripts/apply-migrations.ts --status",
|
|
"jobs:worker": "tsx scripts/jobs-worker.ts"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/adapter-mariadb": "^7.8.0",
|
|
"@prisma/client": "^7.8.0",
|
|
"bcryptjs": "^3.0.2",
|
|
"croner": "^10.0.1",
|
|
"hash-wasm": "^4.12.0",
|
|
"next": "^16.2.9",
|
|
"next-auth": "5.0.0-beta.31",
|
|
"next-intl": "^4.13.0",
|
|
"nodemailer": "^6.9.0",
|
|
"otplib": "^12.0.1",
|
|
"react": "^19.2.0",
|
|
"react-dom": "^19.2.0",
|
|
"zod": "^3.24.0"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/forms": "^0.5.11",
|
|
"@tailwindcss/postcss": "^4.3.1",
|
|
"@tailwindcss/typography": "^0.5.20",
|
|
"@types/node": "^22.10.0",
|
|
"@types/nodemailer": "^6.4.0",
|
|
"@types/react": "^19.2.0",
|
|
"@types/react-dom": "^19.2.0",
|
|
"dotenv": "^16.4.0",
|
|
"postcss": "^8.5.15",
|
|
"prisma": "^7.8.0",
|
|
"tailwindcss": "^4.3.1",
|
|
"tsx": "^4.19.0",
|
|
"typescript": "^5.7.0",
|
|
"vitest": "^2.1.0"
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"esbuild",
|
|
"prisma",
|
|
"@prisma/client",
|
|
"@prisma/engines"
|
|
]
|
|
}
|
|
}
|