Site web de portfolios de travail!

app feat: complete Geekbrain.io portfolio implementation 19 days ago
docker feat: complete Geekbrain.io portfolio implementation 19 days ago
docs/ superpowers feat: complete Geekbrain.io portfolio implementation 19 days ago
public/assets/ images feat: complete Geekbrain.io portfolio implementation 19 days ago
tests feat: complete Geekbrain.io portfolio implementation 19 days ago
.env.example docs: add root .env.example and .gitignore 20 days ago
.gitignore docs: add root .env.example and .gitignore 20 days ago
Archive.tar.gz feat: complete Geekbrain.io portfolio implementation 19 days ago
DEPLOY.md feat: complete Geekbrain.io portfolio implementation 19 days ago
MANUAL_TESTING.md docs: add manual testing checklist 20 days ago
README.md docs: update README with comprehensive setup and deployment instructions 20 days ago
docker-web-logs.txt feat: complete Geekbrain.io portfolio implementation 19 days ago
install.sh feat: complete Geekbrain.io portfolio implementation 19 days ago
requirements.txt feat: complete Geekbrain.io portfolio implementation 19 days ago
visual-companion.html feat: complete Geekbrain.io portfolio implementation 19 days ago
README.md

Geekbrain.io Portfolio

FastAPI portfolio website with steampunk design.

Prerequisites

  • Docker & Docker Compose
  • MariaDB server accessible from NAS (10.0.0.16:3306)
  • Nginx Proxy Manager (NPM) installed and configured

Initial Setup

1. Configure Database

On your MariaDB server, run the docker/init-db.sql script (or manually):

CREATE DATABASE geekbrain_portfolio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'geekbrain_app'@'%' IDENTIFIED BY 'YOUR_STRONG_PASSWORD';
GRANT SELECT, INSERT, UPDATE, DELETE ON geekbrain_portfolio.* TO 'geekbrain_app'@'%';
FLUSH PRIVILEGES;

2. Environment Configuration

Copy .env.example to .env and fill in all required values:

  • DATABASE_URL: mysql+aiomysql://geekbrain_app:[email protected]:3306/geekbrain_portfolio
  • SMTP_USER: your Gmail address
  • SMTP_PASSWORD: Gmail app password (not your regular password)
  • RECAPTCHA_SITE_KEY & RECAPTCHA_SECRET: from Google reCAPTCHA v2 setup
  • GITBUCKET_URL: your GitBucket API endpoint (default provided)

3. Deploy with Docker

From the project root:

docker-compose -f docker/docker-compose.yml up -d

The app will be available on http://localhost:8000

4. Configure Nginx Proxy Manager

Add a new Proxy Host:

  • Domain names: portfolio.geekbrain.io (or your desired domain)
  • Scheme: http
  • Hostname/IP: IP_of_your_NAS (or host.docker.internal if NPM runs on same host)
  • Port: 8000
  • Enable SSL: Yes (Let's Encrypt)
  • WebSockets: No (not needed)

Save and wait for SSL certificate to be issued.

Development

Run locally without Docker:

uvicorn app.main:app --reload

Then visit http://localhost:8000

Testing

Run all tests:

pytest tests/ -v

Project Structure

See docs/superpowers/specs/2025-03-21-geekbrain-portfolio-design.md for full specification and architecture.

Notes

  • GitBucket API is cached for 5 minutes (configurable via CACHE_TTL)
  • Contact form includes reCAPTCHA v2 and stores submissions in the database
  • Email notifications are sent via Gmail SMTP
  • All assets are in app/static/, templates in app/templates/

License

Proprietary - Geekbrain.io