KasiFit — gamified community health platform for South African township youth. Iteration 1 (Foundation): register, login, profile, dashboard skeleton.
# KasiFit — Iteration 1: Foundation
> Gamified community health platform for South African township youth.
> MCOA021 Systems Analysis & Design project — SMU.
## What this iteration ships
Iteration 1 implements **CF1 (User Accounts) + CF6 (Dashboard skeleton)** as agreed
in the project plan. The app supports:
- ✅ Register with full name, username, email, password, optional township
- ✅ Login with username/email + password
- ✅ Rate-limited login (3 failed attempts in 10 min → 10-min lockout)
- ✅ Persistent session via `localStorage`
- ✅ Edit profile (UC3)
- ✅ Welcome onboarding screen
- ✅ Dashboard with streak + rank + quests (placeholder values; full quest logic is Iteration 2)
- ✅ Mobile-first, green/orange brand, dark-mode aware
## How to run
This is a static client-side app — no build step.
**Option 1 — Open directly in a browser:**
```bash
xdg-open index.html
# or
open index.html
```
**Option 2 — Serve locally (recommended for mobile testing):**
```bash
cd /home/workspace/Projects/KasiFit
python3 -m http.server 8000
# then open
localhost
```
## Project structure
```
KasiFit/
├── index.html # Landing / marketing page
├── pages/
│ ├── register.html # UC1
│ ├── login.html # UC2
│ ├── onboarding.html # First-login goal/interest picker
│ ├── dashboard.html # UC6 skeleton (full in Iter 2)
│ ├── profile.html # UC3
│ ├── challenges.html # Iter 2 stub
│ └── events.html # Iter 5 stub
├── css/
│ └── style.css # KasiFit theme: green/orange, dark-mode
├── js/
│ ├── storage.js # localStorage wrapper, seed data
│ ├── crypto.js # SHA-256 password hashing (Web Crypto)
│ ├── auth.js # Register, login, logout, session
│ └── profile.js # Read/update user + profile
├── diagrams/
│ ├── activity-register.d2 / .png
│ ├── activity-login.d2 / .png
│ ├── state-user-session.d2 / .png
│ └── class-foundation.d2 / .png
├─ …