A modern, responsive portfolio website built with FastAPI and SQLAlchemy.
- Modern UI with responsive design and animated hero/background
- Contact form with database storage
- Discord/Slack/Teams webhook notifications
- Docker containerization
- Secure admin panel (React SPA) with token-based authentication
- Visitor analytics and device tracking
See the CHANGELOG.md file for details on the latest changes and updates.
# Install dependencies
pdm install
# Run development server
pdm run front
# Run admin panel
pdm run admin
# Generate admin token
pdm run generate_admin_passwordThe admin panel is protected by a secure token-based authentication system:
- Generate an admin token using
pdm run generate_admin_password - Save the token securely - it will only be shown once
- Access the admin panel at
http://localhost:85 - Log in using the token
- Your session will remain valid for 6 months
Security features:
- HTTPS-only secure cookies
- Token hashing (only hashes stored in database)
- Automatic session invalidation when a new token is generated
# Build and start both front and admin services
docker-compose up -d
# View logs for all services
docker-compose logs -f
# View logs for a specific service
docker-compose logs -f front
docker-compose logs -f admin
# Stop all services
docker-compose downThe Docker setup runs two services:
- Front service: Available at http://localhost:84
- Admin service: Available at http://localhost:85
Both services share the same database volume for data persistence.
When running with Docker, the admin token is automatically generated when the admin service starts. To get your token:
- Start the services with
docker-compose up -d - View the admin service logs to find your token:
docker-compose logs admin
- Look for the section marked with "New admin token generated successfully!"
- Save the token securely - it will be needed to log in to the admin panel
- If you need to generate a new token later, you can run:
docker-compose exec admin pdm run generate_admin_password

