My personal portfolio site built with modern web technologies.
A portfolio and project showcase built with SvelteKit, TypeScript, and Tailwind CSS. Containerized with Docker and deployed on Hetzner with Traefik. Features a secure contact form with CAPTCHA protection and rate limiting.
Note: Requires a CAPTCHA server (cap.js) for the contact form functionality. Rate limiting uses in-memory storage with automatic cleanup.
Copy .env.example to .env and add your configuration:
# Required
CAPTCHA_SECRET=your-cap-server-secret # From your cap.js server
MAIL_HOST=smtp.your-provider.com
MAIL_USER=your-email@domain.com
MAIL_PASS=your-email-password
CONTACT_RECEIVER=contact@yourdomain.com
# Security configuration
CSRF_SECRET=your-csrf-secret- Node.js (v16+)
- Docker (optional)
- cap.js server (for contact form CAPTCHA)
git clone https://github.com/ingoCollatz/stacktastic-main.git
cd stacktastic-main
npm installnpm run devVisit http://localhost:5173
npm test # Run all tests
npm test security # Security tests
npm test rate-limiting # Rate limiting testsnpm run build# Development
docker-compose -f docker-compose.main.yml up
# Production
docker build -t stacktastic .
docker run -p 3000:3000 stacktasticNote: The docker-compose files are designed for use with a Traefik reverse proxy setup and support automatic HTTPS and domain routing.
- SvelteKit - Full-stack framework
- TypeScript - Type safety
- Tailwind CSS - Styling
- cap.js - CAPTCHA server
- Docker - Containerization
- Traefik - Reverse proxy
MIT