Closes #40. New /stats route (client/stats.html + src/stats/), served by the same catch-all pattern as /admin. Reuses the admin login (STATS_PUBLIC env var on the server side decides whether it needs one at all). Three uPlot charts (daily revenue, daily transaction count, top-5-drink sold-qty trend) plus the same three tables Admin.tsx used to render inline — those move here wholesale, Admin.tsx now just links to /stats instead of fetching /admin/api/stats itself. The 'Statistik zurücksetzen' reset button moves here too, gated on an actual admin session (checked separately from whether /api/stats itself succeeded, since STATS_PUBLIC can make that true for an anonymous viewer). Chart lib is uPlot (~45kb) per mara's steer not to hand-roll this. Both client and server build/typecheck clean; manually smoke-tested the auth gate (401 unauthed, 200 after login) and the /stats route against a fresh DB.
24 lines
504 B
JSON
24 lines
504 B
JSON
{
|
|
"name": "client",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@wutzcalc/shared": "workspace:*",
|
|
"preact": "^10.22.0",
|
|
"uplot": "^1.6.31"
|
|
},
|
|
"devDependencies": {
|
|
"@preact/preset-vite": "^2.8.2",
|
|
"@vitejs/plugin-legacy": "^5.4.0",
|
|
"terser": "^5.31.0",
|
|
"typescript": "^5.4.0",
|
|
"vite": "^5.2.0"
|
|
}
|
|
}
|