Project ini memigrasikan HTML native lama menjadi frontend Vite + React dan backend Express + MySQL.
backend/ Express REST API, auth JWT cookie httpOnly, MySQL models/controllers/routes
frontend/ Vite + React + React Router, protected route, onboarding guard, axios
database/ schema.sql untuk import via phpMyAdmin
- Buka phpMyAdmin.
- Pilih tab SQL atau Import.
- Import file
database/schema.sql. - Pastikan database
carbon_gosudah terbuat dan tabel seedactivities,badges, danmilestonessudah terisi. - Jika sebelumnya sudah pernah import schema lama, cara paling bersih adalah drop database
carbon_golalu import ulangdatabase/schema.sql. Alternatifnya, jalankandatabase/migrate_activity_feedback_i18n.sql, lalu jalankan seed ulang. Schema terbaru sudah menyimpan nama dan feedback activity dalam EN/ID.
cd backend
npm install
cp .env.example .env
npm run seed
npm run devSesuaikan isi .env jika user/password MySQL berbeda:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=
DB_NAME=carbon_go
JWT_SECRET=change_this_to_a_long_random_secret
FRONTEND_URL=http://localhost:5173API berjalan di http://localhost:5000.
Docker setup menjalankan:
- Backend Express:
http://localhost:5001 - MySQL host port:
localhost:33306 - phpMyAdmin:
http://localhost:8080
docker compose up --buildCredential MySQL/phpMyAdmin:
Server: mysql
User: root
Password: rootpassword
Database: carbon_go
Jika connect dari aplikasi di luar Docker, gunakan host 127.0.0.1 dan port 33306.
Saat container backend start, command ini otomatis dijalankan:
npm run seed
npm run seed:test
npm startnpm run seed:test membuat 30 user test lengkap dengan profile dan random activity logs.
Contoh login user test:
Username: testuser01
Password: password123
Username: testuser30
Password: password123
Untuk reset data Docker MySQL dari nol:
docker compose down -v
docker compose up --buildcd frontend
npm install
npm run devFrontend berjalan di http://localhost:5173.
Jika backend memakai URL lain, buat file frontend/.env:
VITE_API_URL=http://localhost:5000/apiUntuk backend Docker, gunakan:
VITE_API_URL=http://localhost:5001/api- Register hanya meminta username, email, password.
- Setelah register, user diarahkan ke login.
- Login menyimpan JWT di cookie httpOnly dari backend.
- Jika profile belum lengkap, user wajib ke
/onboarding. - Setelah onboarding berhasil, user masuk Home.
- Halaman dashboard lain dilindungi protected route.
Auth:
POST /api/auth/registerPOST /api/auth/loginGET /api/auth/mePOST /api/auth/logout
Profile:
GET /api/profile/mePOST /api/profile/onboardingPUT /api/profile/me
Activities:
GET /api/activitiesPOST /api/activity-logsGET /api/activity-logs/me
Endpoint activity dan progress mendukung query ?lang=en atau ?lang=id, misalnya GET /api/activities?lang=id.
Progress:
GET /api/progress/meGET /api/progress/rank-log
Rankings:
GET /api/rankings
Badges:
GET /api/badges/me
Milestones:
GET /api/milestones/me