/portfolio

Websites

Three businesses, end to end.

The public site, the app the customer uses, the admin panel the owner lives in.

Public pages are shot from the live sites. Admin panels and member apps run on generated mock data — no real customer data appears here.

01 Chronofever

Chronofever

Vintage watch dealership · catalogue & editorial

A bilingual catalogue where every piece is one of one. The admin panel handles the whole collection — ordering, photography, availability, prices and the Italian translations — plus traffic statistics.

  • Go (stdlib net/http)
  • SQLite
  • Svelte + Vite
  • Tailwind
  • bcrypt sessions
  • Caddy
  • Docker Compose
Live The public catalogue — availability, price or “ask for price”, EN/IT switch.
Live A single piece: photography, specifications, enquiry.
Mock data Admin — the collection. Drag to reorder, toggle price visibility, spot missing translations.
Mock data Admin — piece editor: images, specs, and the Italian side by side.
Mock data Admin — traffic: sessions by country, page views over time, most viewed pieces.
Mock data Admin — editorial: rich-text articles with covers, drafts and ordering.

02 AleFit BCN

AleFit BCN

Private training studio, Barcelona · bookings & operations

A one-room studio in the Eixample. Members book the week and spend prepaid class packs; the owner generates each week from templates, tracks occupancy and waiting lists, and gets booking alerts on Telegram.

  • Go API
  • PostgreSQL
  • SvelteKit
  • Tailwind
  • Chart.js
  • Firebase Auth
  • Telegram bot
  • Caddy
  • Docker Compose
Mock data Admin — the week at a glance: occupancy per class, online vs in-person, cancellations, waiting lists, and the switch that publishes this week publicly.
Live The public site — classes, studio, pricing.
Live The public timetable, driven by the week the owner publishes.
Mock data Member app — the full week with live occupancy on every class.
Mock data Member app — a day: what has passed, what is booked, what is left.
Mock data Member app — home: classes taken since joining, and what is booked next.
Mock data Admin — a member: bono balance per type, and every booking they have made.
Mock data Admin — metrics: classes taught, active members, bookings per week, cancellations.
Mock data Admin — the weekly template every real week is generated from.
Mock data Admin — members, sortable and searchable.
Mock data Admin — one class: the roster, attendance and payment state.
Mock data Member app on a phone — where nearly all bookings actually happen.

03 Lineage Boxing

Lineage Boxing

London youth charity · programme delivery & reporting

Non-contact boxing for young people across London — built around what funders need evidenced: attendance, reward milestones, and PAR-Q and WEMWBS wellbeing scores. Coaches self-staff their own timetable.

  • Go backend
  • PostgreSQL
  • SvelteKit ×2
  • Tailwind
  • Tokenised links
  • LLM metrics
  • Telegram bot
  • Caddy
  • Staging env
Live The public site — mission, programmes, volunteering, enquiries.
Mock data Admin — the coach timetable. Every session shows coaches booked against the minimum, so gaps surface early.
Mock data Admin — participants by borough, with attendance and their site and group.
Mock data Admin — the dashboard leads with reward milestones coming due, by site and group.
Mock data Admin — survey responses: PAR-Q and WEMWBS, per participant, coach and site.
Mock data Survey app — a tokenised link arrives with the coach, site and date already filled in.
Mock data Survey app — programme feedback from parents, teachers and participants.
Mock data Admin — enquiries from schools and organisations, read / unread.
Mock data Admin — coaches, their codes, and who is active.
Mock data Admin — programmes: length, reward cadence and what each reward is.
Mock data Admin — delivery sites: centres, schools, universities, corporate.
Mock data Admin — one site and the groups running in it.
Mock data Admin — planning the weeks ahead across every site.
Live Public site — how the programmes are explained to a school.