telos

GOIÂNIA, BRAZIL · UTC-3 · OPEN TO WORK

I build the software a business opens every morning.

Three years as a full-time QA before I moved to writing product. Today I'm one of two developers on a payments platform: the API's data models and migrations, and the merchant dashboard.

01 Ever After — Wedding Platform · RSVPsIn real use — built unpaid, for someone closeOpen it

SELECTED WORK

A few things I built recently.

Click any of them and the device grows until the screen fills the window — the system runs right here, no sign-up. Some of these run a real business and are rebuilt with a generic brand; most are mine alone. Each one says which is which.

  • 01·2025

    Ever After — Wedding Platform

    Multi-tenant wedding SaaS — RSVPs, gift registry with PIX, automated emails, customizable public site.

    In real use — built unpaid, for someone close

    • Next.js 16
    • React 19
    • Prisma
    • PostgreSQL
    • NextAuth
  • 02·2026

    School Admin Dashboard

    A real school-management system — 16 months, 419 commits: enrollment that fills the contract PDF in the browser, e-signature, web push, a drag-and-drop schedule. Shown here with a generic brand.

    In real use — built unpaid, for someone close

    • React
    • TypeScript
    • PostgreSQL
    • Drizzle ORM
    • pdf-lib
  • 03·2026

    Clinic Scheduling & Records

    Medical agenda, patient records and billing in one panel — appointments by professional and specialty, real-time status, and the patient chart one click away.

    Self-initiated demo

    • Single HTML file
    • Tailwind (CDN)
    • Chart.js
    • Vanilla JS
    • No build step
  • 04·2026

    Lead Prospecting Panel

    Find the business on the map, qualify it, and reach the owner with the proposal already written — pipeline, import and follow-up in one panel.

    Self-initiated demo

    • Single HTML file
    • Vanilla JS
    • Hand-written CSS
    • No build step
  • 05·2026

    Event Site & Guest Panel

    The couple edits their own site — guests, gift registry, message wall and a countdown, without asking anyone for help.

    Self-initiated demo

    • Single HTML file
    • Vanilla JS
    • Hand-written CSS
    • No build step

SERVICES

What you can hire me for.

Contract or full-time, remote, from Brazil (UTC-3). Three kinds of work I do every week, each with something on this site you can open.

  1. 01

    Web apps and admin dashboards

    Next.js · React · TypeScript · Node · PostgreSQL

    Screens people use all day: schedules, records, reports, roles and permissions. The school dashboard ran a real English school for over a year, and the wedding platform ran a real wedding end to end.

    School Admin Dashboard Ever After

  2. 02

    Payments and integrations

    Webhooks · data models · migrations · background syncs

    My day job: one of two developers on a payments platform, where I own the API's data models and migrations. Webhooks that arrive twice, syncs that have to be safe to run again after they die halfway. That code is under NDA; the gift registry paid by Pix in Ever After is the part I can show.

    Ever After

  3. 03

    QA and testing, as a service

    Test plans · bug reports · Playwright

    Three years as a full-time QA at Jera, on apps like Rock in Rio and Lollapalooza Brasil while they were live. I test web apps on Mac and Windows and iOS apps on iPhone: a test plan in a spreadsheet, PASS or FAIL with evidence for every case, and a report like the one below for every bug. Playwright when the checks should run on their own.

    Read a real bug report

BUG REPORT · FOUND ON THIS SITE · 23 SEP 2026

“Back to portfolio” sends the visitor to the previous page in the browser, not to the home page.

Where
26 demo pages
Environment
Chrome on macOS
Severity
Medium
Status
Fixed the same day

Steps

  1. 1.Open a case page on this site.
  2. 2.Open the demo from it.
  3. 3.Press “Back to portfolio”.

Expected

The home page, in the demo's language.

Actual

Whatever page came before in the browser history. Anyone who had passed through a case I was taking off the site landed on it again.

Cause

The button called history.back() instead of linking home. It now always goes to the home page.

MORE BUGS I FOUND AND FIXED

  • School systemAn e-signature webhook arriving out of order could move a signed contract back to pending. Status changes now pass through one set of allowed transitions, and signed is final.
  • School systemThe spreadsheet import swapped day and month whenever both were 12 or less, which broke enrollment and birth dates. Dates are now read as text in DD/MM, and the damaged records were corrected in place, with nothing deleted.
  • Wedding platformThe RSVP deadline closed three hours early, because the date was read as UTC instead of Brasília time.
  • Payments platform · NDASales made late in the evening showed up on the next day in the admin chart. The day boundary was computed in UTC; it now follows Brasília time.
  • Payments platform · NDAAfter IDs moved from numbers to UUIDs, server-side conversion tracking rejected every event, and an empty catch hid the error.
  • Payments platform · NDAA signup funnel created a new record on every page reload, because the session ID lived only in memory. It now survives the reload, and a Playwright test proves four reloads make one record.

The payments platform is under NDA, so those are described without code, names or numbers.

TOOLS

Modern stack, boring choices.

I use the tools that production teams trust — fast, well-supported, easy to hire for. No experimental frameworks just to look clever.

ABOUT

Gabriel Teles. Full-stack, Goiânia.

I have been in computing since 2016, when I took a technical course in computing alongside secondary school at Instituto Federal Goiano, and then Computer Science at UFG. The first paid work came in 2021, as a QA at Jera — a studio that has shipped 300+ apps and is the official supplier for Rock in Rio. The festival apps went through me: Rock in Rio, Rock in Rio Lisboa, Lollapalooza Brasil, The Town. Testing before launch is one job; being on call while the app is live and hundreds of thousands of people are using it at an event that cannot be postponed is another. Three years of that, full time and remote, before I moved to writing product.

The 2025 Lollapalooza app closed its cycle at 99.79% stability on Android across 23 releases, with 80,000 people depending on it per day — Jera published those numbers. That result belongs to a team, not to me. What is mine is the habit it left: I read a diff asking what breaks in production, not whether it compiles.

Today I'm one of two developers on a payments platform — three people in all. My part is the merchant dashboard and the API's data models and migrations — webhooks that arrive twice, syncs that have to be safe to run again after they die halfway — plus a browser extension where 82% of the commits are mine. That code is under NDA, so what this site shows is work I own end to end, plus demos I built myself and label as such.

Most of my code starts in Claude Code or Cursor now. What I don't do is merge what I can't explain line by line.

Gabriel Teles
telos://status
gabriel@telos:~$ whoami
Gabriel Teles · Brazil · UTC-3
gabriel@telos:~$ status
open to work · contract or full-time
Download CV (PDF)
  • In computing since2016 · 10y
  • Based inBrazil · UTC-3
  • Remote since2022 · in a team
  • StatusOpen to work

CONTACT

Hiring, or need a hand on something?

Email is the fastest way to reach me — I answer every one. If you'd rather see code before talking, I can give you read access to a private repo.

gabriel_teles2010@hotmail.com