# Manual Testing Checklist

## Before Testing
- [ ] Ensure `.env` file is configured with real values (SMTP, reCAPTCHA, DB)
- [ ] MariaDB is running and `geekbrain_portfolio` database exists
- [ ] Run `docker-compose up -d` or `uvicorn app.main:app --reload`

---

## Site Navigation
- [ ] Home page (`/`) loads and displays hero, services, skills, projects CTA
- [ ] About page (`/about`) displays profile and skills grid
- [ ] Projects page (`/projects`) shows list from GitBucket API
- [ ] Contact page (`/contact`) displays form with reCAPTCHA

## Navigation Links
- [ ] All navigation links work correctly (Accueil, À propos, Projets, Contact)
- [ ] Logo links back to home page
- [ ] Footer LinkedIn link opens in new tab

## Responsive Design
- [ ] Test at mobile width (< 768px) - navigation stacks, content readable
- [ ] Test at tablet width (768-1024px) - grid adjusts
- [ ] Test at desktop width (> 1024px) - full layout

## Contact Form
- [ ] All fields are required and show validation if empty on submit
- [ ] Email field validates email format
- [ ] reCAPTCHA appears and must be checked to submit
- [ ] On successful submission:
  - [ ] Success alert appears
  - [ ] Form is reset
  - [ ] reCAPTCHA resets
- [ ] Email is received at rcairbum@gmail.com (check inbox)
- [ ] Submission is stored in database (check `contacts` table)

## Projects Page
- [ ] Projects display with name and description from GitBucket
- [ ] If GitBucket API fails or returns empty, "indisponibles" message shows
- [ ] Repo data is cached (refresh within 5min doesn't call API again)

## Steampunk Design
- [ ] Colors: Laid gold (#D4AF37) accents, dark background (#1a1a1a)
- [ ] Logo displays in header
- [ ] Cards have gold borders
- [ ] Typography: Serif headers, clean body text

## Performance
- [ ] Pages load quickly (< 2 seconds)
- [ ] No console errors in browser dev tools
- [ ] reCAPTCHA loads without issues

## Docker (if deploying)
- [ ] Container builds without errors: `docker-compose build`
- [ ] Container starts: `docker-compose up -d`
- [ ] Health endpoint returns 200: `curl http://localhost:8000/health`
- [ ] Logs show no errors: `docker-compose logs -f web`
- [ ] Static files are served correctly (CSS, JS, images)

## Security
- [ ] reCAPTCHA prevents basic bot submissions (test with empty token)
- [ ] No sensitive data exposed in error messages
- [ ] .env file is not committed (check git status)

---

## Sign-off

Tester: ____________________
Date: ____________________
Status: ☐ All passed  ☐ Issues found (see notes)

Notes:
```
```
