Projects

Case study · Real client · Live

Calzado Francis

Website and custom CMS for a shoe repair workshop with +38 years in the trade. The goal: the owner should be able to change almost everything on his own, without coding and without calling me.

Client
Shoe repair workshop · Leganés, Madrid
My role
Everything: design, development, deployment, security and SEO
Dates
Aug 2026 – Sep 2026
Status
Live

The challenge: built for someone non-technical

The hard part was not the code, it was making the panel clear to someone with no technical background. So it is not organised around how it works inside, but around what the owner wants to do.

  • The first screen asks What do you want to change on the site? and each card is a part the customer sees.
  • Each card says where that content appears, so there is nothing to guess.
  • Always the same path: edit, check the mobile or desktop preview, and save.
  • Monthly opening hours, holidays, closures and dated notices, because that is what changes most in a workshop.
Mockup of the private panel: the question What do you want to change on the site?, the edit, review and save steps, and cards for the home page, services, work, about, questions and opening hours.
Mockup of the private panel, redrawn without the business data. The panel itself is in Spanish.

Architecture

The site is static; the only dynamic part is the content, read from a single document in Workers KV.

Visitors

  1. Cloudflare PagesStatic site built with Astro
  2. Cloudflare Pages FunctionsRead the published content
  3. Workers KVA single JSON document

The owner

  1. Cloudflare Zero TrustAccess for the owner only
  2. Private panelEdit, preview and publish
  3. Workers KV + CloudinaryContent and images

GitHub Actions

  1. Every pushastro check and build
  2. Every dayBackup of the content and the images in use

Decisions

Workers KV instead of a database

  • All the content of a site like this fits in one document. No tables or queries were needed.
  • It fits in the free plan: the client pays for no server and no database.
  • It is read from the Cloudflare node closest to each visitor.
  • Hosting, functions, data and security with one provider: fewer moving parts to maintain.

Cloudflare Zero Trust instead of my own login

  • No passwords stored in my code that could leak.
  • A properly secure login (hashing, sessions, recovery, rate limiting) takes days and is one more thing to maintain.
  • It is easier for the owner: there is no password to remember.

Validate everything on the server

  • Everything the panel sends is validated on the server before it is saved.
  • If a field arrives wrong, the default value is used. A mistake in the panel never breaks the site.

Nothing gets lost

Daily backup

Every day GitHub Actions backs up the content and the images the site uses.

Testing away from production

Locally I work on a copy of the content. Nothing I try there reaches the live site.

Checked on every change

Every push runs astro check and a full build in GitHub Actions.

Result

The site is live and the content is changed from the panel, without touching code. It also has local SEO with Schema.org and a sitemap, legal pages, and the Google map only loads when a visitor asks for it.

  • Astro
  • TypeScript
  • Tailwind CSS
  • Cloudflare Pages
  • Workers KV
  • Cloudinary
  • GitHub Actions