All Projects

Everything I have built that is worth listing, grouped by context and newest first. Some are live, some are archived, and a couple are here mainly as evidence of how much I did not know at the time.

Everything I have shipped with (38 technologies)
AWS EKS Astro Auth0 AutoHotkey v2 Bootstrap Cloudflare Cloudflare Pages Django Docker Firebase FCM Flask GSAP Kubernetes Laravel M-Pesa SDK MDX MySQL Netlify Next.js OpenRouter PHP Pagefind PlantUML PostgreSQL Python Quasar REST API React SQL SQLAlchemy SQLite Svelte Tailwind CSS TypeScript Unittest Vercel Vue 3 Vue.js

Startup Work

Explicaki - Tutoring Platform

Connecting students with tutors, payments included

Offline

2023 - 2025

Founding member and technical lead at Kudondza Solutions

A tutoring platform built for Kudondza Solutions, the education technology startup I co-founded, incubated at the Eduardo Mondlane University. Students find and book tutors, subject communities give them somewhere to ask questions, and mobile money handles the payments.

  • Mobile money payments through the M-Pesa SDK, which is how money actually moves in Mozambique.
  • Push notifications with Firebase Cloud Messaging, so a session request does not depend on someone refreshing a page.
  • Real-time chat scoped to active tutor and student pairs, rather than an open messaging free-for-all.
  • Subject communities with posts, comments and likes, to capture the questions that do not justify booking a session.
Django Vue 3 Quasar PostgreSQL Firebase FCM M-Pesa SDK REST API
Explicaki - Tutoring Platform Project Screenshot
Explicaki - Tutoring Platform Project Screenshot
Explicaki - Tutoring Platform Project Screenshot
Explicaki - Tutoring Platform Project Screenshot

Kudondza Solutions Website

The site and blog of the startup I co-founded

Live

2023 - Present

Founding member: built and deployed it

The public site and blog of Kudondza Solutions, the education technology startup I co-founded and which was incubated at the Eduardo Mondlane University. Separate from Explicaki, which was the product: this is the front door for the company itself.

  • Astro with MDX, so the blog is writable by someone who is not a developer.
  • Static and cheap to run on purpose, which matters when a startup has no revenue yet.
  • A useful reminder that a company needs a credible public presence well before its product is finished.
Astro React MDX Tailwind CSS Cloudflare Pages

Client and Freelance Work

ASSOJ

A site for a youth empowerment NGO, built pro bono

Live

2025 - Present

Pro bono: build, deployment, domain and email

The website of ASSOJ (Associação para o Empoderamento Juvenil), a Mozambican non-profit founded in 2020 that trains young people in entrepreneurship and innovation, and incubates the businesses that come out of it. I built and deployed it for free, and the brief I set myself was that it should cost the organisation nothing to keep running.

  • Deliberately pro bono. This is the same ecosystem I work in professionally (innovation, incubation, youth skills), so contributing to an organisation doing it from the non-profit side is not charity, it is participation.
  • Designed for zero running cost: a static Astro build on a free host, so the only recurring expense is the domain. Money an NGO spends on hosting is money not spent on its programmes.
  • Handled the whole delivery, not just the code: domain registration, DNS, and email on the domain configured into the managers' own inboxes so they could actually send and receive.
  • Replaced an earlier hand-written holding page with a real site the organisation can grow into.
Astro React Tailwind CSS MDX Netlify

Talent Hub Mozambique

A talent marketplace for students and graduates

Archived

2024 - 2025

Full-stack developer

A digital talent marketplace connecting Mozambican students and graduates with employment, entrepreneurial and academic opportunities, built around multiple profile types (talent, companies, institutions, investors) and skills-based matching.

  • Four distinct account types sharing one opportunity model.
  • Anonymous browsing plus a blacklist, so a candidate can look around without their current employer noticing.
  • Skills-based matching with opportunity notifications, instead of a search box and hope.
Django Vue 3 Quasar PostgreSQL REST API
Talent Hub Mozambique Project Screenshot
Talent Hub Mozambique Project Screenshot
Talent Hub Mozambique Project Screenshot
Talent Hub Mozambique Project Screenshot

Gramas - Sales Record Management System

Daily sales tracking for a meat retailer

Live

2023

Sole developer, freelance

A lightweight sales record system for tracking daily meat sales, with automatic weight and value calculations, per-operator tracking, statistics and CSV export. A small project, and the one where I learned that the reporting screen is the feature the client actually cares about.

  • Automatic calculation from product and value, because manual arithmetic at a counter produces errors.
  • Per-operator sales tracking, which was the real requirement behind a vaguely worded request for statistics.
  • CSV export as a backup strategy, since the client trusted a spreadsheet more than my database.
Django Vue 3 Quasar SQLite REST API
Gramas - Sales Record Management System Project Screenshot
Gramas - Sales Record Management System Project Screenshot
Gramas - Sales Record Management System Project Screenshot
Gramas - Sales Record Management System Project Screenshot

Personal Projects

Self-hosted big-AGI

My own multi-model AI chat, on my own domain

Live

2025 - Present

Fork maintainer and operator

A self-hosted fork of big-AGI running on Vercel under my own subdomain, wired to several model providers. It replaced a browser extension I used for querying multiple models side by side, and it is where a lot of my day-to-day model comparison happens.

  • Deployed on Vercel with provider keys kept server-side, so the browser never holds a credential.
  • Multi-provider setup through OpenRouter, which makes comparing models a configuration change rather than a new subscription.
  • The beam feature (querying several models at once and merging the answers) is what made me drop the extension I was using before.
Next.js TypeScript Vercel OpenRouter

This Website

The blog and portfolio you are currently reading

Live

2024 - Present

Everything, including the parts I keep meaning to fix

My personal blog and portfolio, built on Astro with the Fuwari theme and deployed to Cloudflare. It is where I write about the engineering decisions I cannot show as code, which turns out to be most of them.

  • Astro content collections with Zod-validated frontmatter for posts, and a separate data module driving these project cards.
  • A markdown pipeline extended with admonitions, GitHub repo cards, KaTeX math, reading time and excerpts.
  • Full-text search at build time with Pagefind, so search costs nothing at runtime.
  • Page transitions with Swup, which means every client script has to tolerate being re-run on navigation.
Astro TypeScript Tailwind CSS Svelte Pagefind Cloudflare

AutoHotkey Scripts

Hotkeys and text expansion I use every day

Live

2024 - Present

For an audience of one

A personal collection of AutoHotkey v2 scripts for window management, text expansion and the small repetitive actions that add up over a working day. Not impressive, and easily the highest ratio of time saved to lines written of anything I have built.

  • AutoHotkey v2, which is a different language from v1 and worth the migration.
  • The scripts that survived are the ones fixing things I do dozens of times a day, not the clever ones.
AutoHotkey v2

University Projects

Domestic Services Platform

My first real full-stack project, warts and all

Archived

2020 (school project)

Student developer

A platform connecting homeowners with domestic service professionals, built as a university project. It works, and it is also a museum of things I now know not to do. I keep it here because pretending I started out competent would be a strange thing to claim.

  • Passwords hashed with MD5, which was wrong even in 2020, and is the single clearest marker of how much I did not know.
  • Almost no component separation: most of the logic lived in a handful of enormous files.
  • It did ship, and it did work, which at the time was the only thing I was measuring.
Vue.js Bootstrap Laravel PHP MySQL
Domestic Services Platform Project Screenshot

Learning Projects

Udacity Projects

Four projects from the Full Stack Web Developer nanodegree

Archived

2022

A series of projects completed during my Udacity Full Stack Web Developer nanodegree, including: Fyyur (an artist booking site), Trivia API, Coffee Shop Full Stack, and a containerized Flask app deployed to AWS EKS. This is still my only structured exposure to Docker, Kubernetes and formal testing.

  • Fyyur: SQL and data modeling for the web, with Flask and PostgreSQL.
  • Trivia API: API development, documentation and unit testing.
  • Coffee Shop Full Stack: identity and access management with Auth0.
  • Deploying a Flask app to Kubernetes on AWS EKS: containerization and server deployment.
Flask Python PostgreSQL Docker Kubernetes AWS EKS Auth0
Udacity Projects Project Screenshot

Fyyur: Artist Booking Site

Offline

2022

An artist booking platform that connects performers with venues through a scheduling system. Built for the data modeling module of the Udacity nanodegree.

Flask SQL SQLAlchemy
Fyyur: Artist Booking Site Project Screenshot
Offline

2022

A backend API powering a trivia game, with a RESTful design, thorough documentation and error handling. Built for the API development module of the Udacity nanodegree.

Flask REST API SQLAlchemy Unittest
Trivia API Project Screenshot