Matt Berry
Portrait of Matt Berry

MattBerry

Software engineer in Cape Town. I lead the team behind Wootware and build products people use.

Scroll to the first product

E-commerce

South Africa's enthusiast PC store.

I lead the team behind South Africa's enthusiast PC retailer, building an edge-rendered storefront in front of its Magento core.

  • Nuxt storefront rendered at the edge
  • Every request routed to Nuxt or Magento
  • Algolia-powered instant search

Built with Nuxt 4, Vue 3.5, TypeScript, Tailwind v4, Cloudflare Workers, Algolia and Magento (PHP).

Non-profit giving

donono

Donation pages non-profits actually own.

A branded donation page for every South African non-profit, paying gifts straight into the organisation's own PayFast account.

  • Once-off and monthly gifts via PayFast
  • Section 18A tax certificates as PDF
  • A visual page builder per organisation

Built with TypeScript, Cloudflare Workers, D1, R2, Queues, PayFast and pdf-lib.

Collectors

BrickAddicts

Your LEGO collection, organised.

Track every LEGO set and minifig you own, wish for the ones you don't, and share the lot.

  • ~25k sets and ~16k minifigs, searchable
  • Wishlist with price targets
  • Alerts when new sets are announced

Built with Vue 3.5, Hono, TypeScript, Tailwind v4, Cloudflare Workers, D1 and R2.

Multiplayer game

Spite & Malice, live with friends.

A real-time card game for two or three players: sign in, share a link, and you're dealt in.

  • Live play for two or three
  • The server holds the deck, so no cheating
  • Head-to-head stats over time

Built with Svelte 5, Hono, GSAP, TypeScript, Cloudflare Workers, Durable Objects and D1.

Image tool

img-editor

A precise image editor that stays local.

Convert, compress, crop and retouch images entirely in your browser, with nothing uploaded.

  • JPEG, PNG, WebP, AVIF, GIF and ICO
  • Live file-size preview while compressing
  • Batch convert, download as ZIP

Built with React 19, TypeScript, Vite, Zustand, WebAssembly codecs and Cloudflare Workers.

PDF tool

pdflab

PDF tools that never leave your browser.

Merge, split, compress and convert PDFs on your own machine, with no uploads and no account.

  • Eleven tools, all running locally
  • Merge, split, reorder and rotate
  • PDF to image, and back

Built with SvelteKit 2, Svelte 5, TypeScript, pdf.js, pdf-lib, Vite and Cloudflare Workers.

Gifting

WishList

Wishlists people actually use.

A list for every occasion, shared with one link, where friends claim gifts quietly so nothing arrives twice.

  • Paste a link and the details fill in
  • Friends claim gifts anonymously
  • Public, unlisted or private lists

Built with Vue 3.5, Hono, TypeScript, Tailwind v4, Cloudflare Workers, D1 and Browser Rendering.

To-do list

MooseDoList

Today, done.

A calm daily to-do list where unfinished tasks roll over, routines come back on their own days, and every day keeps its tally.

  • Smart add turns plain words into schedules
  • Optional end-to-end encryption unlocked by passkey
  • Public REST API for scripts and agents

Built with Svelte 5, Hono, TypeScript, Cloudflare Workers, D1, R2 and Vite.

Hydration tracker

Drank

One tap. One glass. Every day.

Drank works out your daily water goal and logs a 250 ml glass of water, coffee or tea in one tap, with a streak that forgives.

  • Daily goal from EFSA guidance, in glasses
  • One tap logs water, coffee or tea
  • A streak with two rest days a month

Built with Preact, Hono, TypeScript, Cloudflare Workers, D1 and Vite.

Password generator

SecurePass

Made on your device. Never sent anywhere.

SecurePass makes random passwords, passphrases and PINs and rates any password's strength entirely in your browser, with an opt-in private breach check.

  • Nothing sent, and a live counter proves it
  • Private breach check sends five hash characters
  • Works offline after your first visit

Built with TypeScript, Web Crypto API, zxcvbn-ts, Service Worker, Vite and Cloudflare Workers.