Files
RosterChief/package.json
Bernard Siebens 09df5d25b8 Scaffold the mobile member app: PWA shell, push, and app-shell tokens
New `mobile` Django app mounted at /app/ -- the installed PWA for Member
mode (M1-M7, see design_handoff_rosterchief_platform/README.md). Coach
mode (C1-C6) is a later phase and has no routes yet.

Foundation pieces:
- assets/mobile.css: Tailwind v4 theme reusing management.css's design
  tokens (same per-club --tenant-* theming pattern), plus the ice/coach
  accent and mobile's 14px card radius.
- PushSubscription model + pywebpush-based sender (mobile/services/push.py),
  wired to notifications.Notification via a post_save signal so the
  existing notification system gains a push channel without knowing about
  PWAs itself.
- Per-club manifest.webmanifest + service worker (served at /app/sw.js)
  + a server-rendered fallback home-screen icon (club initials on
  secondary_color) for clubs without an uploaded logo -- confirmed with
  the user as the fallback, never a generic RosterChief mark.
- App shell (base.html): navy header, person switcher (every child a
  signed-in parent manages, plus "Me"), bottom tab bar, safe-area insets.
  Vendored htmx + Alpine for the screens built on top of it.
- Placeholder views/routes for all seven M1-M7 screens so the shell is
  fully wired end-to-end before each screen is built out individually.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ECGMEwrc2k4D8VQuwjstj9
2026-08-21 10:27:13 +02:00

37 lines
2.2 KiB
JSON

{
"name": "rosterchief",
"private": true,
"type": "module",
"scripts": {
"build": "npm run build:app && npm run build:controlpanel && npm run build:management && npm run build:mobile",
"build:app": "tailwindcss -i ./assets/app.css -o ./static/css/app.css --minify",
"build:controlpanel": "tailwindcss -i ./assets/controlpanel.css -o ./static/css/controlpanel.css --minify",
"build:management": "tailwindcss -i ./assets/management.css -o ./static/css/management.css --minify",
"build:mobile": "tailwindcss -i ./assets/mobile.css -o ./static/css/mobile.css --minify",
"watch": "tailwindcss -i ./assets/app.css -o ./static/css/app.css --watch",
"watch:controlpanel": "tailwindcss -i ./assets/controlpanel.css -o ./static/css/controlpanel.css --watch",
"watch:management": "tailwindcss -i ./assets/management.css -o ./static/css/management.css --watch",
"watch:mobile": "tailwindcss -i ./assets/mobile.css -o ./static/css/mobile.css --watch",
"vendor:chart": "node -e \"const fs=require('fs');const s=fs.readFileSync('node_modules/chart.js/dist/chart.umd.js','utf8').split('\\n').filter(l=>!l.startsWith('//# sourceMappingURL=')).join('\\n');fs.writeFileSync('static/js/chart.js',s)\"",
"vendor:htmx": "node -e \"const fs=require('fs');const s=fs.readFileSync('node_modules/htmx.org/dist/htmx.min.js','utf8').split('\\n').filter(l=>!l.startsWith('//# sourceMappingURL=')).join('\\n');fs.writeFileSync('static/js/htmx.js',s)\"",
"vendor:alpine": "node -e \"const fs=require('fs');const s=fs.readFileSync('node_modules/alpinejs/dist/cdn.min.js','utf8').split('\\n').filter(l=>!l.startsWith('//# sourceMappingURL=')).join('\\n');fs.writeFileSync('static/js/alpine.js',s)\""
},
"devDependencies": {
"@fontsource-variable/jetbrains-mono": "^5.2.8",
"@fontsource-variable/roboto": "^5.2.10",
"@fontsource-variable/tourney": "^5.2.8",
"@fontsource/barlow": "^5.3.0",
"@fontsource/barlow-condensed": "^5.3.0",
"@fontsource/ibm-plex-mono": "^5.3.0",
"@fontsource/ubuntu": "^5.2.8",
"@tailwindcss/cli": "^4.1.0",
"daisyui": "^5.0.0",
"tailwindcss": "^4.1.0"
},
"dependencies": {
"alpinejs": "^3.15.0",
"chart.js": "^4.5.1",
"htmx.org": "^2.0.4"
}
}