sunnysidecycling.com is a production web platform we designed and built from the ground up for a road cycling tour business in the Soča Valley, Slovenia. It handles everything from the public marketing site to backend booking management, payment processing, and fiscal receipt compliance with the Slovenian tax authority (FURS).
Architecture Overview
The system is composed of multiple Docker containers behind a Traefik reverse proxy with automatic Let's Encrypt TLS:
- Flask frontend — server-side rendered marketing website with Jinja2 templates, bilingual content (EN/SI), responsive design, and lazy-loaded images
- FastAPI backend — RESTful API powering the admin panel, bike inventory management, reservation calendar, blog CMS, and tour management
- PostgreSQL — relational database for products, reservations, customers, and transaction records
- Fiscal service — isolated microservice handling FURS fiscalization (digital receipt signing, EOR/ZOI codes, production certificates)
- Traefik — edge router with automatic HTTPS, compression middleware, and per-service routing
Performance & SEO
The public-facing website consistently scores 90+ on all four Google Lighthouse categories (Performance, Accessibility, Best Practices, SEO) and achieves a 100/100 Ahrefs site health score. Key optimisations include:
- Server-side rendering with minimal JavaScript — no SPA overhead
- Optimised image pipeline with WebP conversion and responsive
<picture>elements - Critical CSS inlining, deferred font loading
- Proper semantic HTML, structured data (JSON-LD), canonical URLs, and a dynamic sitemap
- Gzip/Brotli compression via Traefik middleware
- Zero crawl errors and full indexability verified via Ahrefs Site Audit
Booking System
The custom backend manages the complete rental lifecycle:
- Online bike rental — customers browse available bikes, select dates, and reserve online
- Admin dashboard — JWT-authenticated panel for managing inventory, viewing/editing reservations, and tracking availability on a visual calendar
- Stripe integration — secure payment processing with webhook handling for payment confirmation
- Email notifications — automated confirmation and reminder emails via SMTP
FURS Fiscal Compliance
Slovenian tax law requires electronic fiscalization of receipts. We built a dedicated microservice that:
- Digitally signs each receipt using a FURS-issued P12 certificate
- Communicates with the FURS SOAP API to obtain the unique EOR identifier
- Generates ZOI (protective mark) codes for receipt verification
- Supports both test and production FURS environments
- Handles Article 94 ZDDV-1 tax exemptions when configured
Blog & Content Management
The admin panel includes a full blog CMS with:
- Rich text editing with image uploads
- Bilingual post management (English and Slovenian)
- SEO metadata fields, auto-generated slugs, and Open Graph tags
- Draft/published workflow
Deployment & Infrastructure
The entire stack runs on Docker Compose with separate production and development environments for quick, reliable deployment and safe development iteration:
- Production & dev environments — mirrored Docker Compose stacks allow testing changes on the dev instance before promoting to production, ensuring zero surprises on the live site
- Multi-network Docker setup — public-facing services on the Traefik proxy network, database and fiscal service on an internal-only network
- Health checks — every service has container-level health checks with proper start periods and retry logic
- Bind-mounted volumes — PostgreSQL data, backups, and uploaded assets persist across container rebuilds
- Zero-downtime deploys — rolling rebuilds with
docker compose up -d --build
Mail Server
We deployed a dedicated Mailu mail server with full SSL/TLS encryption to handle all transactional and notification emails for the platform:
- Custom domain email (
info@sunnysidecycling.com) with proper SPF, DKIM, and DMARC records - SSL certificates managed alongside the rest of the infrastructure via Let's Encrypt
- SMTP integration with both the Flask frontend and FastAPI backend for booking confirmations, reminders, and admin notifications
- Webmail access for the business team
Tech Stack Summary
| Frontend | Flask, Jinja2, vanilla JS, CSS |
| Backend API | FastAPI, SQLAlchemy, Pydantic |
| Database | PostgreSQL 15 |
| Payments | Stripe API |
| Fiscalization | Custom FURS microservice (Python, SOAP, P12 certs) |
| Infrastructure | Docker Compose, Traefik, Let's Encrypt |
| Mailu (SSL, SPF, DKIM, DMARC) | |
| Environments | Production + Development (mirrored stacks) |
| Languages | EN / SI (Jinja2 i18n) |
Visit the live site: sunnysidecycling.com