All projects

Web app · AI and MCP · 2026

Relist

Inventory and cross-posting for the second-hand watches I restore: one catalogue, published to eBay, Wallapop and Vinted.

Status
Live demo
Year
2026

Designed and built by me, pair-programming with Claude Code.

Relist demo: the inventory home with the featured watch, stock counts, to-dos and the collection

What it does

  • Watch inventory with photos, costs and margins.
  • Publishes, updates and removes listings on eBay (official API), Wallapop and Vinted from one place.
  • A publishing queue with spacing and hours set per store.
  • Imports sales from eBay with the real fee and promotion maths. It matches eBay to the cent.
  • A dashboard of take-home profit by month and by brand.

Highlights

  • A monochrome “luxury watch” design system.
  • A procedural three.js watch movement on the dashboard, driven by the real clock: a Swiss lever escapement at 18,000 bph that you can grab and rotate.
  • A 24-hour “day dial” for the publishing queue.
  • Command palette (⌘K), rolling date-wheel numbers and spotlight, tilt and glare effects.
  • Theme toggle with View Transitions, a guided tour, a draggable floating queue bubble on phones, and Spanish and English.

Run it from Claude or ChatGPT

An MCP server (local stdio, plus remote Streamable HTTP with OAuth behind Cloudflare) lets me run the whole flow from Claude or ChatGPT in the browser: photos, price study, descriptions for each store in the right language and style, and publishing. Every write is two-step: a preview first, then a confirm token.

How it’s built

  • React 19
  • TypeScript
  • Vite
  • Tailwind
  • Motion
  • three.js
  • Fastify
  • Node.js (node:sqlite)
  • MCP SDK
  • Cloudflare Tunnel + Access

Status

The public demo is a static copy of the interface on mock data: 14 fictional watches, no backend. Apart from anonymous usage analytics, it makes no network calls beyond its own origin. The real app runs privately.

Screenshots and video

Relist demo on a phone, with the floating queue bubble and the bottom navigation