Ranfo: digitalizing a vehicle workshop end-to-end

Sole technical owner of an end-to-end vehicle workshop digitization — Django + Hetzner + Dokploy + Cloudflare. Non-breaking schema migration mid-flight to support multi-currency payments without losing a single record.

Client
Ranfo
Role
Lead Full Stack Engineer (Freelance)
Year
2025
Timeline
3 months, sole technical owner
Django PostgreSQL Dokploy Hetzner Cloudflare GitLab CI/CD
Ranfo: digitalizing a vehicle workshop end-to-end

Problem

Ranfo runs a vehicle workshop where most operational data lived in paper records and ad-hoc spreadsheets. The CEO needed full remote oversight of financial flows and operational data, and the team needed a digital platform that could keep up with a business-logic rewrite already in motion. They needed one person who could own the whole thing — design, implementation, infrastructure, deploys — and ship.

The domain had a quirk that shaped the entire data model: a single payment routinely splits across multiple currencies — part in USD, part in CUP cash, part in CUP bank transfer, sometimes a slice in EUR. Not because we wanted multi-currency tracking, but because that’s how transactions actually happen on the ground. Every monetary entity (income, expense, invoice line) had to carry multiple currency fields by design, not as an afterthought.

Approach

I picked a Django ecosystem because it shortens the distance between business model and admin surface, which was the right tradeoff for a workshop CEO who wanted to inspect data without learning a new tool. Hosted on a Hetzner VPS with Dokploy for CI/CD and Cloudflare for traffic security.

The non-obvious decision: midway through the engagement, the business logic shifted enough that the original schema became wrong — and changing a schema where every monetary row carries four currency fields, with live data already in production, is the kind of work where one bad column rewrite corrupts months of records. Instead of pausing the project for a “big migration window,” I executed a non-breaking schema migration — dual-write phase, then read-side cutover — so the team kept operating throughout. Total downtime: zero. Total data loss: zero.

Loading diagram…
Solo-operated stack — Hetzner + Dokploy + Cloudflare

Outcome

The CEO got full remote oversight of financial flows and daily operations via the Django admin and custom dashboards. The schema migration was completed without any operational interruption — staff didn’t notice it had happened.

Technologies used

Django PostgreSQL Dokploy Hetzner Cloudflare GitLab CI/CD
Visuals

Screens

Keep exploring

More work

Linkeum Wallet: a multi-currency fintech wallet in 30 days
Fintech · 30 days · 2 engineers

Linkeum Wallet: a multi-currency fintech wallet in 30 days

Shipped a production fintech wallet in 30 days with a 2-engineer team — multi-currency, KYC, 2FA, real-time notifications. Built on Nest.js + Next.js Server Actions over a Turborepo monorepo.

Nest.js Next.js Turborepo PostgreSQL
Read the case study
A fuel and cooking-gas marketplace for Cuba, with QR pickup
Fuel & Gas · Web + Android · External integration

A fuel and cooking-gas marketplace for Cuba, with QR pickup

Muévete y Cocina turns the daily scramble for fuel and cooking gas in Cuba into an order-ahead flow: browse nearby service centers and live prices, reserve litres or a gas cylinder, pay, and pick up against a QR. Since the team white-labelled it, the same codebase reaches customers under two selling brands, Mercaful and Gasolero. I proposed and built its offline-first Flutter courier app end to end, shipped heavily on the customer web app alongside the company's frontend lead and a designer, and over time took my work into the backend too: delivery evidence, access control, and per-brand legal documents.

Flutter React Router Vite TypeScript
Read the case study
AI News Intelligence — n8n agent over FastAPI + Redis + SvelteKit
Side project · n8n · Agent · RAG

AI News Intelligence — n8n agent over FastAPI + Redis + SvelteKit

Personal side project: an AI agent that orchestrates news data via n8n, serves it through a FastAPI + Redis cache layer, and talks to users through a SvelteKit chat UI. Whole stack containerized with Docker Compose for one-command deploy.

FastAPI Python Redis Docker
Read the case study