
Side projectLive · In development01
Friends rate restaurants on the site, and there are apps for iOS and Android. A review can be public or only for friends. You can also plan lunch and dinner there. Everyone throws in a place and a time, and the next morning each guest gets asked how it was. Restaurants live in one catalogue, so the same place is the same place for everybody. There's a feed you can search, a map, a page for each spot and a ranking for each district. A bot reads restaurants' Instagram stories, Gemini picks out the menu of the day, and I approve it from Telegram before it goes up. I'm starting in Portugal, with Leiria, Lisbon and Porto.

Side projectLive · In development02
Soon reads bill emails in Gmail and pulls the amount and the debit date. If the email doesn't say, it opens the PDF. Each payment day goes onto Google Calendar, Outlook or Apple Calendar through a subscription link, and you get a push the day before. I don't guess amounts. If something isn't clear, the field stays blank until you look at it. Bills that never arrive by email can come in as a PDF or a photo. OCR reads them, and you can also send them to a Telegram bot. Rent, loans and the gym go in as fixed payments. For a Multibanco bill, the entity and reference go into the calendar note too. It's for bills debited from Portuguese bank accounts, in Portuguese and English.
Side projectIn development03
Revisto: your car's maintenance history
I wanted one place for a car's services, invoices, fuel and reminders, and a way to hand that history to the next owner when you sell. Point the camera at the QR code on a Portuguese invoice and it fills in the service or the refuel. It works out fuel consumption, reminds you when something is due and exports the history as a PDF. Everything stays on the phone. It's for iOS and Android. Portugal comes first.
Side projectIn development04
Wanderwit: puzzles and trivia on an old expedition map
A puzzle and trivia game for Android and iOS. You cross an old expedition map, and each level is one of three puzzles. You put facts in order, take a hex board by answering questions, or guess the answer from clues that get easier as you go. Every level is checked for fairness before it's dealt. An order puzzle can always be solved from the feedback alone, so knowing the facts is what earns the stars. Sign in with Google and your progress saves to the cloud, and it merges if you play on two devices. It's in English and Portuguese.
Client project · xgeeks · 2025 – 202605
PPA Marketplace: trading power purchase agreements
Companies list power purchase agreements, negotiate them and keep track of what's signed. I built the live negotiation chat and the support tickets on WebSockets, contract search and filters with Meilisearch, Excel exports that include the contract history, and the reports the energy regulators want. The API is NestJS and the marketplace and admin apps are Next.js. If Redis goes down, an outbox holds the emails and notifications so they aren't dropped.
Client project · xgeeks · 202606
WebLens: AI usability and accessibility audits
Agents open a site like a person and report usability and accessibility issues. I worked on all of it. The browser agents log in, take screenshots and look for gaps. The FastAPI API and the queue workers pick up abandoned jobs, retry, and they won't act on evidence that's still being deduplicated. MLflow scores how good the agents are. The Next.js dashboard is where you create a workspace and send invites. Azure, described in Terraform, is underneath.
Team hackathon · Sep 202507
Quack as a Service: factory safety monitoring
A camera checks that you're wearing the protective gear that room requires, and it won't let you in if you aren't. A QR code says who you are. YOLO catches falls, AWS Rekognition flags signs of stress, and AWS Bedrock turns those events into notes on a live safety dashboard.
Side project08
Homelab: a self-hosted home server
A media server in Docker Compose on a MacBook. The download apps go out through a VPN container, and Caddy gives every service HTTPS on the local network with its own certificate authority, so Apple Passwords can autofill. The request page and Home Assistant are reachable from outside through a Cloudflare Tunnel behind Cloudflare Access, with no ports open on the router. I wrote a small Flask service that turns the apps' webhooks into phone notifications. Home Assistant also runs the house. The bathroom fan follows the humidity, the kitchen light follows presence at night, and a wall tablet shows the dashboard.
Article · Feb 202409
I wrote this for the xgeeks blog. It's about AutoGen, and about letting several agents talk to each other inside an app that runs on large language models.