Full-Stack Software Engineer · Leiria, Portugal

Francisco Gaspar

I'm a full-stack software engineer. I build the backend, the interface, and the integrations between them.

At xgeeks I work with clients in industrial tech, electricity, renewables and automotive. I've done AI agents and whole platforms, and also backend services and integrations. Before that I was at Deloitte, where I automated integration tests for one of Canada's largest banks. Away from client work I build Soon, LongTable, Revisto and Wanderwit.

Experience

Software Engineer · xgeeks

06/2022 – Present
  • For an industrial-tech client I built AI agents that open a website the way a person would and write up the usability and accessibility problems. I also built the FastAPI workers, the MLflow eval suite and the Next.js dashboard that sit around those agents.
  • An electricity client needed a marketplace for power purchase agreements. I built it as a NestJS API plus two Next.js apps, the marketplace and the admin. People negotiate in a live chat, search contracts and pull the regulatory reports from the same place.
  • A renewables client wanted procurement inside Microsoft Teams, so I prototyped it. The bot searches the materials catalogue, checks a project spreadsheet against that catalogue and drafts a request when something is missing. SAP isn't really there. It's a simulated API on a Microsoft 365 test tenant, reached through Microsoft Graph.
  • For an automotive client I wrote backend services and the integrations with outside systems, in TypeScript and NestJS. PostgreSQL and MongoDB hold the data, through TypeORM, and Jest covers the tests.
  • Deploys go out on Azure with Terraform. When something breaks I look at Datadog and Azure Application Insights.
  • I set up the client repos so Claude Code and Copilot have instructions, plus a short handover note for the next person.

TypeScript · Python · NestJS · FastAPI · TypeORM · MikroORM · PostgreSQL · MongoDB · Redis · Next.js · Tailwind CSS · OpenAI API · Microsoft Graph · PowerShell · Azure · Terraform · Docker · Jest

Programmer · Deloitte

12/2020 – 06/2022
  • I automated integration-test suites for one of Canada's largest banks. One suite used to take someone several hours. Now it runs on its own.
  • The tests walk through core banking and insurance, and they check the data those systems hand to each other.

Java · Selenium · Katalon · UiPath · Appium

Education

2020

Bachelor's Degree in Computer Engineering

Escola Superior de Tecnologia e Gestão, IPLeiria

09/2016 – 07/2020 · EQF level 6

2016

Professional Course in Computer Management

Colégio Dinis de Melo, Leiria

09/2013 – 07/2016 · EQF level 4

Projects

Side project · Live · In development

LongTable: restaurant reviews with friends

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.

Next.js · TypeScript · Supabase · Clerk · Capacitor · Leaflet · Gemini API · Playwright · Telegram Bot API · Web Push · Resend · Sentry · Vercel

longtable.pt ↗

Side project · Live · In development

Soon: bill reminders from Gmail

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.

Next.js · TypeScript · Supabase · Tailwind CSS · Gmail API · Tesseract.js · Telegram Bot API · Web Push · Docker · Vercel

soon-tracker.com ↗

Side project · In development

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.

Expo · React Native · TypeScript · SQLite · Drizzle

Side project · In development

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.

Flutter · Dart · Riverpod · Firebase · GitHub Actions · Codemagic

Client project · xgeeks · 2025 – 2026

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.

NestJS · MikroORM · PostgreSQL · Redis · Meilisearch · Socket.IO · Next.js · Tailwind CSS · Azure · Terraform

Client project · xgeeks · 2026

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.

Python · FastAPI · SQLAlchemy · PostgreSQL · Next.js · Browser Use · MLflow · Azure · Terraform · Playwright

Team hackathon · Sep 2025

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.

Python · FastAPI · SQLAlchemy · PostgreSQL · Next.js · Tailwind CSS · YOLO · OpenCV · AWS Rekognition · AWS Bedrock

Side project

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.

Docker · Caddy · Cloudflare Tunnel · Python · Flask · Home Assistant

Article · Feb 2024

Introducing AutoGen: enhancing LLM apps through multi-agent conversations

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.

blog.xgeeks.com/ai-agents-101-with-autogen ↗