En rolig och engagerande matematikövningsapp för barn 6-10 år. Träna addition, subtraktion, multiplikation och division med tabellerna 1-9!
- 🔐 PIN-baserad inloggning (4 siffror)
- ➕ Fyra operationer: addition, subtraktion, multiplikation, division
- ⭐ Stjärnbelöningar för fullständiga nivåer
- 🍪 Kakor som tjänas in (1 kaka per 10 stjärnor, max 4/dag)
- 📊 Framstegsspårning per operation och tabell
- 🏆 Topplista för alla användare
- 🎨 Vacker, barnvänlig design på svenska
- 👨💼 Adminpanel för lärare och föräldrar
# Klona repot
git clone https://github.com/Puttrix/matte-magi.git
cd matte-magi
# Starta med Docker Compose
docker-compose up -d
# Öppna i webbläsaren
open http://localhost:3001Applikationen är nu tillgänglig! Skapa ett konto genom att välja "Skapa konto" på inloggningsskärmen.
cd backend
npm install
npm run dev # Startar på port 3001
npm run test # Kör Node-test för auth/session/leaderboardnpm install
npm run dev # Startar på port 5173För produktion kan
VITE_API_URLlämnas tomt – klienten använder/api(samma origin) som standard.
VITE_API_URL=http://localhost:3001/apiTips:
.envanvänds bara för lokal utveckling. Docker-builden har.envexkluderad via.dockerignore, så produktion hamnar automatiskt på/api.
PORT=3001
NODE_ENV=development
SESSION_SECRET=din-hemliga-nyckel-här
DB_PATH=./data/matte-magi.db
SESSION_DB=sessions.sqlite # valfritt filnamn för session store
SESSION_COOKIE_SECURE=auto # auto anpassar sig efter HTTP/HTTPS, sätt true bara för strikt HTTPS
FRONTEND_URL=http://localhost:5173
FRONTEND_URLS=http://localhost:5173 # kommaseparerad lista över tillåtna origin- I Portainer, skapa ny Stack
- Klistra in
docker-compose.ymlinnehållet - Ange miljövariabler:
SESSION_SECRET: Stark hemlig nyckel (generera medopenssl rand -hex 32)SESSION_COOKIE_SECURE:autoför att fungera både via HTTP och HTTPS (användtrueendast vid strikt HTTPS)FRONTEND_URL: Primär origin (t.ex.https://math.example.com)FRONTEND_URLS: Lista över tillåtna origin (t.ex.https://math.example.com,http://10.82.1.14:3001)
- Deploy!
Data sparas automatiskt i en Docker-volym och överlever omstarter.
- Frontend: React + Vite + Tailwind CSS + shadcn/ui
- Backend: Node.js + Express + better-sqlite3
- Databas: SQLite (enkelfil, noll konfiguration)
- Auth: Session cookies + bcrypt för PIN-hashing
- Deployment: Docker + docker-compose
- SQLite: Perfekt för självhostat bruk - ingen separat databasserver behövs
- Express: Minimal overhead, lätt att förstå och underhålla
- Session cookies: Enkel autentisering utan tokens
- bcrypt: Branschstandard för lösenords-/PIN-hashing
-- Användare
users (id, first_name, pin_hash, role, created_at)
-- Framsteg per tabell och operation
progress (id, user_id, operation, table_num, levels_completed, correct_count, attempt_count)
-- Belöningar
awards (id, user_id, stars_total, cookies_total, last_cookie_date, cookies_awarded_today)
-- Inlämningshistorik
submissions (id, user_id, operation, table_num, seed, correct, total, created_at)POST /api/auth/register- Skapa kontoPOST /api/auth/login- Logga inPOST /api/auth/logout- Logga utGET /api/auth/me- Hämta användarprofil
POST /api/exercises/generate- Generera 10 problemPOST /api/exercises/submit- Skicka in svar
GET /api/progress- Hämta användarens framstegGET /api/leaderboard- Hämta topplista
GET /api/admin/users- Lista alla användare (kräver admin)POST /api/admin/reset- Nollställ användardata (kräver admin)
- PIN-koder hashas med bcrypt (cost 12)
- HTTP-only session cookies
- SameSite=Lax för CSRF-skydd
- Express-rate-limit skyddar auth-endpoints (50 försök per IP och 15 minuter,
/auth/mehar högre gräns) - Parameteriserade SQL-frågor (SQLite injection-skydd)
- Admin-rättigheter kontrolleras server-side
SQLite-databasen sparas i /app/data/matte-magi.db inuti containern. För backup:
# Kopiera DB-fil från container
docker cp matte-magi:/app/data/matte-magi.db ./backup-$(date +%Y%m%d).db
docker cp matte-magi:/app/data/sessions.sqlite ./backup-$(date +%Y%m%d)-sessions.db
# Återställ från backup
docker cp ./backup-20241011.db matte-magi:/app/data/matte-magi.db
docker cp ./backup-20241011-sessions.db matte-magi:/app/data/sessions.sqlite- Kontrollera att port 3001 är ledig
- Se till att
data/mappen är skrivbar
- Kontrollera
VITE_API_URLi.env - Se till att backend körs på rätt port
- Kontrollera CORS-inställningar i
backend/src/server.js
- SQLite-filen skapas automatiskt vid första start
- Om korrupt, ta bort
backend/data/matte-magi.dboch starta om
- Ljudeffekter för rätt/fel svar
- Animerad maskot som uppmuntrar
- Fler belöningar och badges
- Tidsbaserade utmaningar
- Föräldra-/lärarrapporter via e-post
- Multi-tenant support (flera klasser)
Pull requests är välkomna! För större ändringar, öppna först en issue för att diskutera vad du vill ändra.
- Fork projektet
- Skapa en feature branch (
git checkout -b feature/amazing-feature) - Commit dina ändringar (
git commit -m 'Add amazing feature') - Push till branch (
git push origin feature/amazing-feature) - Öppna en Pull Request
MIT
Öppna en issue på GitHub för buggar eller feature requests.