pedro@engine:~/

Pedro Augusto, Engenheiro de Software

[0.000] engine: boot · TypeScript strict

[0.011] world: — glyphs spawned

[0.021] ready — role pra baixo. eles vão junto.

TS world/formations/hero.ts13 linhas
1import { formation, rasterize } from "@/engine";
2
3export const hero = formation("hero", (box) =>
4 rasterize(["PEDRO", "AUGUSTO"], {
5 font: "Geist 900",
6 cell: 11,
7 box,
8 }),
9);
10
11world.addSystem(SpringSystem({ k: 0.045, damping: 0.8 }));
12world.addSystem(RepelSystem({ source: pointer, radius: 120 }));
13world.on("pointerdown", (p) => world.impulse(p, 45));

Engenheiro de Software

Construo sistemas de ponta a ponta: SaaS multi-tenant, plataformas para o setor público e pipelines de dados com LLMs. Auditáveis, seguros e feitos pra escalar.

01 · src/about.ts

TSX sections/About.tsx15 linhas
1export function About() {
2 return (
3 <Section path="src/about.ts" title={t("about.title")}>
4 <Intro
5 greeting={t("about.hello")}
6 highlights={["auditable", "multi-tenant", "ai-data"]}
7 />
8 <Formation name="about" glyph="</>" />
9 <SkillModule module="backend" accent="orange" />
10 <SkillModule module="data-ai" accent="purple" />
11 <SkillModule module="product" accent="blue" />
12 <SkillModule module="govtech" accent="green" />
13 </Section>
14 );
15}

Olá! Trabalho com engenharia de software e engenharia de dados nos setores privado e público: de sistemas para processos de licitação à transformação digital no governo. Em paralelo, construo e opero produtos próprios como o PresContas e o Neurodados. Gosto de sistemas auditáveis, arquitetura multi-tenant e dados com IA, do banco ao front.

import backend● loaded

Backend & Arquitetura

APIs em NestJS e FastAPI, monorepos, filas e workers. Decisões registradas em ADRs, migrações reversíveis e deploy automatizado.

NestJSFastAPIPostgreSQLValkey/RedisDocker

import data-ai● loaded

Dados & IA

Scraping em escala, pipelines Bronze/Silver/Gold e enriquecimento com LLMs e agentes: classificação, sentimento, entidades e relatórios gerados.

PythonClaude APILangGraphLangChainAgnopgvector

import product● loaded

Produto Full-stack

Do banco ao front: Next.js 16, React 19, PWA, dashboards por perfil e design systems próprios.

TypeScriptNext.jsReactTailwindDrizzle

import govtech● loaded

Sistemas Auditáveis

Isolamento por RLS, trilhas de auditoria imutáveis, assinatura ICP-Brasil, SSO estadual e LGPD desde o desenho.

RLSAudit trailICP-BrasilOIDCLGPD

02 · env --list

Já construí pra quem fiscaliza, pra quem entrega e pra quem vende.
Cada lado cobra uma coisa que os outros não cobram.

TS sections/envs.ts7 linhas
1export const envs = {
2 public: { requires: ["auditing", "LGPD", "access control"] },
3 private: { requires: ["client", "deadline", "delivery"] },
4 owner: { requires: ["all of the above", "+ the server bill"] },
5} satisfies Record<Env, Experience>;
6
7export const matrix = capabilities.map((c) => evidence(c, envs));

env: public

Setor Público

Onde auditoria, LGPD e controle de acesso são requisito, não feature. Sistema errado aqui vira processo.

governoauditoriaLGPD

env: private

Setor Privado

Fábrica de software e engenharia de dados por projeto: cliente, prazo e entrega. O que foi vendido tem que funcionar.

fábrica de softwarelicitaçãoengenharia de dados

env: owner

Dono do Produto

Quem decide o escopo, escreve o código, coloca no ar e paga a conta do servidor.

SaaSmulti-tenantIA
CAPACIDADEPÚBLICOPRIVADODONO
Arquitetura & backend
Segurança & auditoria
Dados & IA
Produto & negócio
Infra & deploy
env: owner × Arquitetura & backendMonorepos NestJS + Next.js com workers, filas transacionais e decisões de arquitetura documentadas.

● domínio ◐ parcial ○ ainda não · passe o mouse numa célula

03 · pnpm ls @pedro/conhecimento

Dependências instaladas e as que estão compilando agora.

TS sections/education.ts8 linhas
1export const knowledge = [
2 pkg("@unic/postgrad-generative-ai", { until: "2027-08" }),
3 pkg("@unic/postgrad-software-engineering", { until: "2027-08" }),
4 pkg("@unic/postgrad-data-engineering", { installed: true }),
5 pkg("@unic/systems-analysis-development", { installed: true }),
6];
7
8const progress = (p: Pkg) => elapsed(p.from, p.until, Date.now());

$ pnpm add @pedro/conhecimento · 2 instaladas · 2 compilando · 0 vulnerabilidades

@unic/pos-ia-generativa◐ compilando

Pós-Graduação em Desenvolvimento de Aplicações de IA Generativa

LLMs, agentes, RAG e avaliação de modelos em produção.

Universidade de Cuiabá (UNIC)0% · previsão ago/2027
@unic/pos-engenharia-de-software◐ compilando

Pós-Graduação em Engenharia de Software

Arquitetura, qualidade e processos de engenharia em escala.

Universidade de Cuiabá (UNIC)0% · previsão ago/2027
@unic/pos-engenharia-de-dados✓ instalado

Pós-Graduação em Engenharia de Dados

Pipelines, ETL, big data e arquitetura de dados.

Universidade de Cuiabá (UNIC)concluído
@unic/analise-desenvolvimento-sistemas✓ instalado

Bacharelado em Análise e Desenvolvimento de Sistemas

Engenharia de software, bancos de dados e arquitetura de sistemas.

Universidade de Cuiabá (UNIC)concluído

04 · stack.graph.ts

Os mesmos glyphs agora desenham o grafo. Passe o mouse ou toque num nó.

TS world/formations/stack.ts11 linhas
1export const stack = formation("stack", (box) => {
2 const graph = radialLayout({
3 root: me,
4 ring1: [...areas, ...projects],
5 ring2: techs,
6 box,
7 });
8 return graph.edges.flatMap((e) => sample(e.curve, 11));
9});
10
11stack.on("hover", (node) => highlight(pathToRoot(node)));

05 · pnpm test projects/

Suites: 3 passed, 3 total

TS projects/prescontas.spec.ts12 linhas
1describe("PresContas", () => {
2 it("isolates tenants in the database (RLS FORCE)", async () => {
3 await expect(readAs(councilA, dataOf(councilB)))
4 .rejects.toThrow();
5 });
6 it("hash-chains the audit trail (SHA-256)", ...);
7 it("validates ICP-Brasil signatures", ...);
8 it("reads receipts: QR → SEFAZ → AI → manual", ...);
9});
10
11// neurodados.spec.ts · mistura-cuiabana.spec.ts
12expect(sourceFiles.filter(isJs)).toHaveLength(0);
PASSprojects/prescontas.spec.ts

SAAS GOVTECH · EM PRODUÇÃO

PresContas

Prestação de contas de verba indenizatória para câmaras municipais: do lançamento do vereador ao parecer do controle interno, aprovação da Mesa e dossiê assinado e verificável.

✓ Multi-tenant com isolamento no banco (Postgres RLS) testado no CI

✓ Trilha de auditoria encadeada por hash, à prova de adulteração

✓ Comprovantes imutáveis e validação de assinaturas ICP-Brasil

✓ Leitura de notas em cascata: QR Code → SEFAZ → IA de visão → manual

✓ Decisões de arquitetura documentadas e migrações reversíveis

NestJSNext.js 16PostgreSQL 18DrizzlepgmqPython · pyHanko
prescontas.com.br ↗
PASSprojects/neurodados.spec.ts

DADOS & IA · EM PRODUÇÃO

Neurodados

Inteligência de opinião pública: coleta de notícias e redes sociais, enriquecimento com LLMs e painel multi-tenant com briefings diários por município.

✓ Coleta multicanal, cada fonte com agendamento próprio

✓ Pipeline de enriquecimento com LLMs sobre camadas Bronze/Silver/Gold

✓ Relatórios gerados por cadeia de prompts, com cache por cidade e dia

✓ Scrapers que se monitoram: falha, degradação silenciosa e descoberta de fontes

✓ CI/CD com testes de backend, frontend e E2E e deploy com smoke test

Python 3.13Claude APIOpenAINext.js 16PostgreSQL + pgvectorRedis
neurodados.com.br ↗
PASSprojects/mistura-cuiabana.spec.ts
Captura do portal Mistura Cuiabana

FULL-STACK · EM PRODUÇÃO

Mistura Cuiabana

Portal de notícias regional com CMS headless de nível empresarial.

✓ Fluxo editorial baseado em funções (admin, editor, jornalista, colaborador)

✓ Cache Redis com invalidação inteligente por padrões

✓ Mídia em object storage compatível com S3

✓ ISR + SWR para performance máxima

Next.jsPayload CMSPostgreSQLRedisS3
Ver projeto ↗

06 · ls /var/classified

Sempre tem algo compilando. Alguns ficam atrás de NDA, outros não faz sentido assinar. Daqui só sai a ficha técnica.

SH /var/classified11 linhas
1$ ls -la /var/classified
2drwx------ root root proj-0x01/
3drwx------ root root proj-0x02/
4drwx------ root root proj-0x03/
5drwx------ root root ███████/
6
7$ cat proj-0x01/README.md
8cat: permission denied (NDA)
9
10$ cat proj-0x01/stack.json
11{ "api": "NestJS 11", "db": "PostgreSQL 18 + RLS" }
CLASSIFIEDproj-0x01

DOMÍNIO

XXXXX

api
NestJS 11 · Node 24
front
Next.js 16 · React 19
dados
PostgreSQL 18 · RLS
orm / cache
Drizzle · Valkey
auth
OIDC
infra
Docker · Traefik
ci
Trivy · OSV

$ cat README.md → permission denied

CLASSIFIEDproj-0x02

DOMÍNIO

XXXXXX

mobile
Expo · React Native
admin
React · Vite
api
NestJS · Prisma
dados
PostgreSQL 16 · pg-boss
storage
S3
infra
Turborepo · Caddy

$ cat README.md → permission denied

CLASSIFIEDproj-0x03

DOMÍNIO

XXXXXX

arquitetura
multiagente · agentes especializados por etapa
pipeline
planejar → gerar → revisar → canonizar
memória
estado persistente e versionado entre sessões
consistência
ledgers + auditoria automática
base
corpus de conhecimento + templates próprios
i/o
importação · tradução · exportação
llm
Claude

$ cat README.md → permission denied

CLASSIFIEDproj-0x04..0x0?

DOMÍNIO

XXXXXXX

stack
TypeScript · Python · SQL
status
sempre compilando…

$ cat README.md → permission denied

07 · ./contact --open

Aberto a oportunidades e colaborações.

TS contact.ts8 linhas
1export const contact = {
2 github: "github.com/PedroAMDC",
3 linkedin: "linkedin.com/in/pedroamdc",
4 email: "[email protected]",
5 status: "open to opportunities",
6} satisfies Channels;
7
8world.formation("contact", vortex({ turns: 7 }));

08 · pnpm run game

O Que é Possível com TypeScript

Uma engine de jogo completa, construída do zero. Todo glyph que te seguiu até aqui vai pra dentro dela.

TS lib/petri/engine.ts14 linhas
1import { Loop } from "@/lib/engine";
2
3const loop = new Loop(gameLoop, { maxDt: 0.1 });
4
5function gameLoop(dt: number): void {
6 if (gameState === "MENU" || gameState === "GAME_OVER") {
7 loop.stop();
8 return;
9 }
10 if (gameState === "PLAYING") {
11 update(dt * 1000);
12 }
13 renderGame();
14}
process: petri-evolution · ○ idle/game

WASD ou setas pra mover · as armas disparam sozinhasjoystick na tela · as armas disparam sozinhas

src/lib/engine/ · src/lib/petri/

Por dentro da engine

Nenhum framework de jogo, nenhum arquivo de áudio, nenhum .js. Cada sistema abaixo foi escrito à mão em TypeScript. É ele que roda quando você aperta RUN, e é ele que move esta página agora.

0 frameworks de jogo0 arquivos de áudio0 arquivos .jsTypeScript strict
GlyphWorld.ts[ ok ]

Núcleo compartilhado

Loop, spatial hash e partículas moram em @/lib/engine e rodam no jogo e nesta página ao mesmo tempo. Ligue o Inspect para ver ao vivo.

import { Loop, ParticleSystem, SpatialHash, separate } from "@/lib/engine";
engine/loop.ts[ ok ]

Game loop

requestAnimationFrame com delta time limitado e relógio reiniciado quando a aba volta: trocar de aba não teleporta o mundo.

const dt = Math.min(Math.max(0, now - this.last) / 1000, this.maxDt);
entities.ts[ ok ]

Spatial hashing

Grade espacial de buckets: cada inimigo, projétil e glyph desta página só testa colisão com os vizinhos, nunca com o mundo inteiro.

separate(enemyHash, enemies, bodyRadius, 0.5, isSolid);
entities.ts[ ok ]

Orçamento de entidades

Teto para inimigos, gemas e partículas, com entidades mortas removidas a cada frame. Performance previsível.

const MAX_ENEMIES = 60;
renderer.ts[ ok ]

Mundo infinito

Mundo carregado em chunks de 512px, com decoração gerada por seed e pré-carregada antes da câmera chegar.

visibleDecorations.push(...getChunkDecorations(cx, cy));
engine.ts[ ok ]

Diretor de ondas

Ondas guiadas por tabelas de inimigos com peso: a dificuldade mora nos dados, não em código espalhado.

random -= enemyConfig.weight;
engine.ts[ ok ]

Armas & evolução

7 armas e 10 passivos com efeitos que escalam por nível e três escolhas de upgrade a cada level up.

const selected = shuffled.slice(0, 3);
audio.ts[ ok ]

Áudio procedural

Todo som é sintetizado na hora com a Web Audio API. Nenhum arquivo de áudio.

const osc = this.ctx.createOscillator();
sprites.ts[ ok ]

Animação de sprites

Máquinas de estado por entidade (idle, walk, attack, death) sobre atlas de sprites.

return `${state}_${dirName}`;
© 2026 Pedro Augusto. Todos os direitos reservados100% TypeScript · strict · 0 arquivos .js
pedro@engine: ~/

docked terminal. it follows you down the page.

try: help · cd projects · mode split · run