Mateus Pim Santos

~ ❯ fastfetch

Illustrated portrait of Mateus Pim

pym@pymdev.com

Name
Mateus Pim Santos
Role
Software Engineer · Backend & Platform
Uptime
7 years shipping software
Now
CRM & contact-center platform
Location
Campinas, Brazil · remote
Languages
Python · Go
Shell
bash · Neovim · Ghostty
OS
Omarchy · Hyprland
Locale
pt_BR.UTF-8, en_US.UTF-8

~ ❯ tail -f now.log

What I’m doing now

  • [building] CRM & contact-center workflows: React/TypeScript backoffice, .NET services, WhatsApp in the loop.
  • [staging] A multi-tenant RPA orchestration platform I built from the first commit: FastAPI, RabbitMQ, WebSockets, on OCI/OKE. In internal testing.
  • [running] Django WhatsApp chatbots and their integrations, in production.
  • [hacking] Omarchy plugins, Linux tools, tela and a two-node Proxmox homelab, after hours.

~ ❯ cat about.md

# Hey, I’m Mateus.

I build backend systems that are boring in production: APIs, queues and multi-tenant platforms in Python that stay fast and predictable when traffic spikes or an external API fails. I use React/TypeScript for product UIs and Go for terminal tools on Linux.

## Right now

I’m building CRM and contact-center workflows: a large React/TypeScript backoffice, with WhatsApp built into how agents talk to customers. Before that, I designed a multi-tenant RPA orchestration platform and took it from the first commit to a staging deployment on Oracle Cloud Kubernetes (OKE), where it’s in internal testing.

## How I work

  • Own it end to end: architecture, code, tests, CI/CD, deploys and the 2 a.m. incident.
  • Design for failure: idempotency, outboxes and tenant isolation from day one.
  • Measure before optimizing. EXPLAIN ANALYZE is a love language.

## Off the clock

I run a two-node Proxmox homelab and write small tools for Omarchy, the Linux desktop this page is dressed as.

› Ship it. Keep it simple. Automate the second time.

~ ❯ omarchy-menu keybindings

Keyboard shortcuts

  • 1–6switch workspace
  • ← →previous / next
  • /open the menu
  • tnext Omarchy theme
  • lEnglish / Português
  • ccalendar
  • ⇧+↑↓←→move focus
  • ooverview

Open-source projects

~/omarchy/omareach ❯ cat README.md

✓ verified

Omarchy shell plugin · Omarchy 4

Reclaims the monitor edges you can’t reach: keeps the bar and tiled windows in the usable band and fills the edges with a clock or live system stats.

OmaReach blacking out unreachable monitor edges

JavaScriptmarketplace →source →

~/omarchy/mosaic ❯ cat README.md

Omarchy shell plugin · Omarchy 4

Tiles web apps like Twitch, Kick and YouTube as a mosaic on Hyprland, keeping each video’s fullscreen inside its own tile.

Omarchy Mosaic tiling several streams

QMLsource →

~/omarchy/volta ❯ cat README.md

✓ verified

Omarchy shell plugin · Omarchy 4

Independent left and right volume, stereo balance and output switching on the Omarchy bar, with a mirrored meter and keyboard-first controls on native PipeWire.

Two Volta popups: an output list over large left and right readouts and a mirrored stereo meter

QMLmarketplace →source →

~/omarchy/omadroid ❯ cat README.md

✓ verified

Omarchy shell plugin · Omarchy 4

Android on Omarchy. Finds your devices over ADB, pairs them wirelessly and starts scrcpy mirror, audio or webcam sessions from the bar.

OmaDroid's device list and a device page with Mirror, Audio and Webcam session cards

QMLmarketplace →source →

~/apps/tela ❯ cat README.md

Android app · Flutter

Wallhaven in your pocket: browse, preview full screen and set a wallpaper in a couple of taps. No backend, no accounts, no tracking; signed APKs from containerized builds.

tela on two tablets: a search grid and a wallpaper's detail view

Dartdownload apk →source →

~/apps/omamods ❯ cat README.md

in development

Python TUI

A terminal mod manager for Linux game libraries. Finds Steam and Heroic games, downloads from Nexus, and records every file it installs so each mod can be reverted.

OmaMods terminal UI listing a game library

Pythonsource →

Work

~/career ❯ git log --graph

  1. ● a7f3e21 (HEAD → globalsys)

    Software Engineer · Globalsys

    Sep 2025 – present · remote

    • CRM & contact center: main contributor to a large React/TypeScript operator backoffice with live chat, unified queues, scheduling, telephony and campaign journeys, on a modular-monolith backend.
    • Grew its frontend tests from ~35 to 2,000+, added an OpenAPI-generated typed client with contract-drift checks, and tightened its Content Security Policy.
    • RPA orchestration platform (staging): designed and built a multi-tenant platform from the first commit. FastAPI, PostgreSQL, RabbitMQ, Redis, Celery; DDD modular monolith with tenant isolation, RBAC, transactional outbox and idempotent workflows.
    • Owned its CI/CD and staging rollout on Oracle Cloud Kubernetes (OKE): ARM64 images, OCI Vault, Cloudflare-restricted access and Ansible-managed RabbitMQ. It’s in internal testing.
    • WhatsApp chatbots (production, Django): led the move to Meta’s WhatsApp Business API and cut a 100k-record workflow from ~2 minutes to under 2 seconds.
  2. ● 5c09b4d (eldorado)

    Software Analyst · Eldorado Institute

    Mar 2020 – Apr 2025 · Campinas

    • Led a Python/Flask platform and APIs managing thousands of smartphones for engineering and testing, on AWS.
    • Workflow automation that removed 80% of manual intervention and started tests 60% faster.
    • Lab automation with Python, Arduino and ESP32; image-quality research tools with OpenCV, Pandas and NumPy, with teams in the U.S., China and India.
  3. ● 1e2d0aa (init)

    Software Intern · Eldorado Institute

    Sep 2019 – Feb 2020 · Campinas

    • Python scripts for camera image-quality test automation.

~ ❯ btop --highlights

Highlights

  • 2m → 2s100k-record Django workflow
  • 35 → 2,000+frontend tests on a CRM backoffice
  • 0 → 1multi-tenant platform, first commit to OCI staging
  • −80%manual work in device-lab workflows
  • −60%time to start a device test
  • +50%operational efficiency in the lab

~ ❯ cat profile.toml

Education, languages and company

[education]
school = "UNICAMP"
degree = "Tech. in Systems Analysis & Development"
years  = 2018..2021

[languages]
portuguese = "native"
english    = "advanced, daily at work"

[company]
name    = "Pym Software Development"
country = "Brazil"
for     = "contracts & invoicing"

Case studies

~/cases ❯ cat 01-rpa-platform.md

0 → 1

A multi-tenant RPA orchestration platform

[staging] OCI · OKE · in internal testing

FastAPIAPI Postgres+ outbox RabbitMQper tenant agentsWebSocket
context
The next generation of an RPA platform that schedules and runs automation bots for many customers. I designed it and wrote its core backend from the first commit.
constraints
Tenants must never see each other’s data or jobs. A retried or redelivered message must not run a job twice. Secrets reach a bot only when it runs.
decisions
A DDD modular monolith with a schema per domain and ports and adapters. RabbitMQ exchanges with per-tenant queues and priority dispatch. WebSocket agents with token revocation. A transactional outbox, idempotent workflows and an append-only credit ledger.
evidence
Architecture decision records, Testcontainers integration tests and contract gates in CI.
result
Deployed to staging on Oracle Cloud Kubernetes (OKE) through a pipeline I own: ARM64 images, OCI Vault, Cloudflare-restricted access and TLS-only RabbitMQ. Not yet in general production.

FastAPI · PostgreSQL · RabbitMQ · Redis · Celery · React

~/cases ❯ cat 02-n-plus-one.md

2m → 2s

Removing N+1 queries from a Django workflow

[production] WhatsApp chatbot backend

before~2 min after< 2 s
context
A Django workflow in a production chatbot backend processed about 100,000 records and took around two minutes to respond.
constraints
A live system: the fix had to return the same results without a rewrite.
decisions
Traced where the time went instead of guessing. Most of it was N+1 queries and the same data loaded again and again, so related rows are now fetched in bulk and each dataset is loaded once.
evidence
Response time measured before and after on the same workload.
result
From about 2 minutes to under 2 seconds.

Django · PostgreSQL · Celery

~/cases ❯ cat 03-frontend-contracts.md

35 → 2,000+

Tests and API contracts for a CRM backoffice

[building] CRM & contact center

OpenAPIspec clienttyped CIdrift check 2,000+tests
context
A large React/TypeScript operator backoffice with live chat, unified queues, scheduling, telephony and campaign journeys. I’m its main contributor.
constraints
About 35 frontend tests at the start, and a backend API that keeps changing under it.
decisions
An OpenAPI-generated typed client with runtime validation, and contract-drift checks so an API change breaks the build instead of a screen. Dependency advisories and an XSS issue fixed, and a tighter Content Security Policy.
evidence
The test suite and drift checks run on every pull request.
result
From about 35 to more than 2,000 frontend tests.

React · TypeScript · OpenAPI · .NET

Stack

~ ❯ pacman -Qe --groups

languages/

python go typescript javascript sql c#

backend/

fastapi django flask celery sqlalchemy pydantic openapi .net

distributed/

rabbitmq redis websockets sse outbox domain-events idempotency

data/

postgresql sql-server mysql duckdb explain-analyze

cloud/

oci oke kubernetes aws docker cloudflare

devops/

github-actions azure-devops ansible nginx proxmox bash

frontend/

react typescript tanstack-query zustand signalr react-flow

practice/

ddd clean-architecture multi-tenancy rbac adrs pytest testcontainers contract-testing

~ ❯ tree homelab

Homelab

homelab
├── pve # Ryzen 5 5600X · 32 GB · ZFS
│   ├── lxc tailscale cloudflared gitea vaultwarden samba
│   └── vm  jellyfin + arr, immich, nextcloud, romm
├── lab # Ryzen 7 5700G
│   └── lxc agent + dev workspaces
└── backups # weekly, rclone crypt → Google Drive

Configs live at github.com/mateuspim/homelab.

~ ❯ gh api users/mateuspim/events

Recent GitHub activity

  • fetching…

Contact

Time zones

~ ❯ tty-clock --zones

Campinas · UTC−3

--:--

You ·

--:--

Terminal card

~ ❯ try it from your terminal

$ curl pymdev.com
$ curl pymdev.com/br
$ curl pymdev.com/api

A colored card in English or Portuguese, or the same profile as JSON.

Send a message

~ ❯ aerc compose

Opens your mail app with this filled in.