## Why

The project is a Laravel React starter kit (Inertia v2 + Fortify, session auth), but the three hand-written controllers (AuthController, ProfileController, DonorController) were built as Sanctum token-API controllers returning JSON. The app therefore has no working browser UI: the existing Fortify login expects email while our domain uses phone/username, and the static Alpine.js mockup in `resources/views/ui.html` ("Rokto Bondhu" blood donor directory) is not connected to any backend. The users migration also references a `districts` table that has no migration, so `php artisan migrate` fails. We need one coherent, working session-based Inertia app that implements the mockup for real.

## What Changes

- **BREAKING** — Auth identifier switches from email to **phone or username + password** (Fortify override). The email column/flow is removed from the donor register/login UI.
- Rewrite the three controllers as **Inertia controllers** (session auth, redirects, `Inertia::render`, back()->withErrors) instead of Sanctum JSON/token responses:
  - `AuthController` → welcome/login/register pages, username availability check
  - `DonorController` → donor directory (search + filters + pagination), public donor profile
  - `ProfileController` → my profile, edit profile, availability toggle, donation history + add-donation
- **BREAKING** — Location model simplification: drop the `District` model and `district_id` (app operates in a single district). Introduce `Union` and `Village` Eloquent models **with migrations** for new `unions` and `villages` tables (`villages.union_id` FK, cascade delete), replacing the free-text `union_name`/`village_name` columns on `users` with `union_id` / `village_id` FKs.
- Fix `create_users_table` migration so `migrate` runs cleanly (remove the dangling `districts` FK; users keys are UUID so location FKs must use `foreignUuid`).
- Convert the `ui.html` mockup into real React Inertia pages that preserve its design (blood-red mobile-first "Rokto Bondhu" theme, splash, donor cards, bottom nav, bottom-sheet modals, toasts):
  - Splash/welcome, Login, Register (blood-group picker, availability choice, union→village cascading selects, live username availability)
  - Donor directory: search box, blood-group chips, filter sheet (blood group, availability, union/village, donation status), donor cards with availability accent + "Call Donor" (tel: link)
  - Public donor profile, My profile, Edit profile, Donation history timeline, Add-donation sheet, Availability toggle with private reason, Settings, Logout
- Donor list stats (total donors / available count) computed server-side and passed to the directory page.

## Capabilities

### New Capabilities
- `donor-authentication`: Register and login with phone/username + password via Inertia session auth; username availability checking; logout.
- `donor-directory`: Browse, search, filter, and paginate donors; view a public donor profile; call-donor action with confirmation.
- `donor-profile-management`: Own profile view/edit, availability toggle with private reason, donation history, and adding donation records (auto-updates cached `last_donation_date`).
- `location-data`: `unions` and `villages` tables (with migrations) and models; cascading union→village selection reused by register, profile edit, and directory filters.

### Modified Capabilities
<!-- None — no existing specs directory in this project yet. -->

## Impact

- **Backend**: `app/Http/Controllers/{Auth,Profile,Donor}Controller.php` rewritten for Inertia; `app/Models/User.php` (relations to Union/Village, drop District), new `app/Models/Union.php` / `app/Models/Village.php`; delete `app/Models/District.php`; `routes/web.php`; Fortify auth overrides (credential fields, register validation); `database/migrations/0001_01_01_000000_create_users_table.php` fixed (drop `district_id` FK, add `union_id`/`village_id` FKs); new migration for `unions` + `villages` with seeder data.
- **Frontend**: new/updated pages under `resources/js/pages/` (welcome, auth/login, auth/register, donors index, donors/show, profile/*, history), shared layout with bottom nav + app shell styling, filter/add-donation sheets, toasts.
- **Database (dev)**: schema is reset/re-migrated; existing `districts`/`unions`/`villages` tables imported earlier by raw SQL must be dropped so the new migrations can create them (no production data).
- **Out of scope**: password reset, email verification, passkeys/2FA UI for the donor flow (starter-kit settings remain untouched where possible), multi-district support.
