Project origin
Structure and share knowledge
LetsLearn came from a personal need to structure and share my technical knowledge as accessible courses. Rather than using an existing platform, I decided to build my own from scratch to learn as much as to teach.
What was built
A complete frontend, from rendering to infrastructure
A Nuxt 4 site with SSR, deployed via Docker on my Proxmox infrastructure with Traefik as reverse proxy, Cloudflare for public exposure, Grafana/Loki for observability and Rybbit for analytics. Build and deployment automated with Bun and GitHub Actions.
Technical challenges
The problems I learned most from
Markdown courses, dynamic rendering
Courses are stored in Markdown files, interpreted and rendered dynamically with polished layouts. Video iframes are embedded in certain chapters to complement explanations.
Self-hosted infrastructure
Set up Proxmox, Docker, Traefik for HTTPS routing and Cloudflare Tunnels for public exposure without opening ports.
Automated deployment
Full CI/CD pipeline with self-hosted GitHub Actions runner. Each build includes Bun compilation, tests, Docker build and zero-downtime deployment.
Observability and analytics
Set up Grafana, Loki for logs and Rybbit for analytics, with dedicated dashboards per service.
Technologies
Full stack
What I learned
Key learnings
- Nuxt 4 architecture with the new app/ structure and SSR rendering
- Self-hosted infrastructure with Proxmox, Docker, Traefik and Cloudflare
- Complete observability stack with Grafana, Loki and Rybbit
- CI/CD with self-hosted GitHub Actions runner and Bun
- Strict TypeScript and reusable Tailwind CSS components



