Skip to content
Back

Dolcevita

Frontend Developer

Dolcevita helps cyclists discover and follow guided routes across Sardinia, with a live map, proximity notifications as you near each point of interest, and offline support so it keeps working without signal. I was the frontend developer, building the entire PWA (interactive map, proximity notifications, and offline support) from first commit to production.

React 19, TypeScript, Leaflet, Fastify 5, PostgreSQL, PWA, Workbox, Nx, Docker, DigitalOcean

Overview

Dolcevita helps cyclists discover and follow guided routes across Sardinia. You pick a tour, explore points of interest on an interactive map, and get a notification as you approach each one while you ride. It’s built as an installable, offline-first app so it keeps working even where there’s no signal.

My Role

Frontend developer. I built the entire client-facing PWA (the interactive map, proximity notifications, and the offline-first experience) from the first commit through to production.

What I Built

  • The interactive map riders use to follow routes, see points of interest, and track their own location live
  • Proximity push notifications that fire as a rider nears a point of interest, even with the app in the background
  • Offline support and installability (PWA), so the app keeps working without a connection
  • The full front-end integration with the backend API: GPX routes, points of interest, and access-code entry

Outcome

A rider can follow a route on a live map, get nudged as they reach each point of interest, and keep using the app where the mobile network drops, exactly where a printed map or a connection-dependent app would fail. Because it installs like a native app and caches what it needs, the experience holds up out on the road.

Under the Hood

  • Map: Leaflet + OpenStreetMap, GPX route parsing (inline XML and URL with CORS-proxy fallback), custom POI markers with icon caching, photo carousels, search/filter, and real-time location with accuracy circles
  • PWA & notifications: a custom service worker with Workbox precaching, Haversine-distance proximity triggers with duplicate prevention, notification-click handlers for POI navigation, and configurable sounds
  • Cross-platform handling for Android/iOS location permissions, persistent map state, and foreground/background notification differences
  • Backend it integrates with: Fastify 5 and PostgreSQL via Slonik, with GPX upload handling and access-code-gated entry
  • Shipped to production on DigitalOcean via GitHub Actions and Docker multi-stage builds (Vite + Nginx), behind SSL and a reverse proxy