# TalentLink Kenya
Grassroots sports talent discovery — connecting invisible athletes (like a
17-year-old striker in Kisii who only gets picked through word of mouth) to
verified coaches, clubs and scouts, on any phone.
## What's in this folder
```
talentlink/
├── frontend-demo/
│ └── index.html ← Open this directly in a browser. Premium
│ "Athletic Noir" UI: Landing, Player Dashboard,
│ Coach Directory, Admin Portal, and a live
│ "Telco Log Simulator" panel for judges.
└── backend/
├── main.py FastAPI app entrypoint
├── database.py SQLAlchemy engine/session
├── models.py Player, Coach, Trial, Endorsement
├── seed.py Demo data: Kisii, Kitui, Turkana, Mombasa
├── requirements.txt
├── services/
│ └── sms_service.py Africa's Talking SMS wrapper
└── routers/
├── players.py Coach/Scout search directory API
├── coaches.py Admin verification queue API
├── trials.py Post a trial → auto SMS-blasts matching players
├── ussd.py *384# session state machine (CON/END)
└── voice.py Emergency/trials hotline (Voice XML)
```
## Running the UI demo
Just open `frontend-demo/index.html` in any browser — no build step. It's a
fully clickable mockup: switch tabs, open the coach directory, approve a
coach in the Admin Portal, click **Post New Trial** to watch the simulated
SMS payload fire in the live Telco Log panel on the right.
## Running the backend
```bash
cd backend
pip install -r requirements.txt
# .env (or export directly)
AT_USERNAME=sandbox
AT_API_KEY=your_sandbox_key
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/talentlink
python seed.py # populate demo data
uvicorn main:app --reload --port 8000
```
Key endpoints:
| Method | Path | Purpose |
|---|---|---|
| GET | `/api/v1/players?county=Kisii&sport=football` | Coach directory search |
| POST | `/api/v1/trials` | …