Compare commits

..
2 Commits
2 changed files with 46 additions and 102 deletions

No files matched your search

+46 -50
View File
@@ -1,77 +1,73 @@
<div align="center">
<img src="assets/readme/hero.svg" width="100%" alt="Evandro Fonseca Junior, backend engineer: APIs and integrations for IoT devices, web and mobile apps, in TypeScript, Python, NestJS and PostgreSQL. Code self-hosted at git.evandro.dev.br.">
<p>
<a href="https://evandro.dev.br/?utm_source=profile-readme">Portfolio</a> ·
<a href="https://git.evandro.dev.br/evandro">Gitea</a> ·
<a href="mailto:evandrofonsecajunior@gmail.com">Email</a>
</p>
</div>
# Evandro Fonseca Junior
Software engineer at Apolo Energia since 2022: APIs, IoT integrations and web and mobile apps, in TypeScript and Python.
**Software engineer building custom systems, apps and integrations.** Backend-focused with Node.js, NestJS, TypeScript, Python and PostgreSQL, and hands-on work with AI agents and MCP tooling.
Garuva, Santa Catarina, Brazil (UTC-3), working remotely. Open to backend roles and technical collaborations as of October 2026.
[Portfolio](https://evandro.dev.br) · [LinkedIn](https://www.linkedin.com/in/evandrodevbr/) · [Email](mailto:evandro[email protected]) · [WhatsApp](https://wa.me/5547992742365)
> [!NOTE]
> My GitHub account, [edevbr](https://github.com/edevbr), is only an entry point: it is where people can find me and how I contribute to projects I believe in. My own work runs locally and on my self-hosted Gitea at [git.evandro.dev.br](https://git.evandro.dev.br/evandro), since GitHub suspended my previous account. [What happened](#what-happened-to-my-previous-account).
![Node.js](https://img.shields.io/badge/Node.js-5FA04E?logo=nodedotjs&logoColor=white)
![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)
![NestJS](https://img.shields.io/badge/NestJS-E0234E?logo=nestjs&logoColor=white)
![Python](https://img.shields.io/badge/Python-3776AB?logo=python&logoColor=white)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-4169E1?logo=postgresql&logoColor=white)
![Docker](https://img.shields.io/badge/Docker-2496ED?logo=docker&logoColor=white)
## Work you can check
## What I do
Live client projects, each with a public case study on my portfolio.
I build software end to end: understanding the problem, choosing the trade-offs, modeling the data, writing the APIs and the interfaces, testing, deploying and following it in production.
- **[SEV Moda Íntima](https://evandro.dev.br/cases/sev-modaintima)**: catalog, online store and an operations panel for products, orders and stock by size. Live at [sevmodaintima.com.br](https://sevmodaintima.com.br).
- **[Lavação 047](https://evandro.dev.br/cases/lavacao-047)**: site and admin panel for a car wash. Customers pick a service and the order arrives on WhatsApp; the owner edits prices, text and photos without asking anyone.
- **[Julia Beauty](https://evandro.dev.br/cases/julia-beauty)**: static site for a lash studio in Camboriú, with an eye-effect simulator, local SEO with JSON-LD and WhatsApp booking. Live at [juliabeauty.com.br](https://juliabeauty.com.br).
- **[AS Serviços](https://evandro.dev.br/cases/as-servicos)**: institutional site for an engineering company, with a procedural Three.js scene that follows the page scroll (Next.js 16, React 19).
- **[SC Plus Aquicultura](https://evandro.dev.br/cases/sc-plus)**: institutional site with service areas, projects and contact for an aquaculture company.
- **Custom systems and apps**: web applications, mobile apps and internal tools, from discovery to production.
- **Integrations**: REST APIs, third-party services and IoT devices talking to the rest of the stack.
- **Backend engineering**: API design, data modeling, authentication and authorization, automated tests, CI/CD.
- **AI and agents**: MCP servers and agent tooling, mostly local-first and self-hosted.
- **Diagnostics**: performance, security and maintainability reviews of existing systems.
## At Apolo Energia and before
Five years of software work, with a longer background in hardware and infrastructure, which helps when a problem leaves the application layer. Based in Garuva, Santa Catarina, Brazil (UTC-3), working remotely. Open to backend engineering roles and to technical collaborations.
This work lives in private repositories, so here is the scope without the code.
## Selected projects
- Web and mobile apps, APIs and IoT device integrations for Apolo Energia's internal routines and renewable energy operations, including operations dashboards.
- A NestJS platform (TypeScript, PostgreSQL, Drizzle ORM) split into isolated domains, with OpenAPI docs, S3-compatible storage, health checks and test coverage thresholds of 80% of lines and 70% of branches.
- An offline-first TypeScript SDK with auth, sync and media modules, retry with backoff, dead-letter handling and SHA-256 deduplication.
- At Innovo, from December 2024 to February 2025: Angular components and Node.js back-end logic over PostgreSQL and MySQL, plus maintenance of legacy systems.
### AI and agent tooling
## Tools I build for myself
- **[PiAgentUI](https://github.com/evandrodevbr/PiAgentUI)**: desktop and web workspace for AI coding agents, with streaming sessions, MCP and skills panels, terminal and file explorer (React 19, TypeScript, Vite, Tauri 2, GPL-3.0).
- **[GeminiNexus](https://github.com/evandrodevbr/GeminiNexus)**: multi-account gateway for Gemini and Claude that exposes OpenAI- and Anthropic-compatible endpoints, with SSE streaming, usage analytics and credentials kept in the OS keychain (Electron, React 19).
- **[orelhIA](https://github.com/evandrodevbr/orelhIA)**: local PT-BR audio transcription MCP server on Parakeet TDT, with LRU cache, VAD, metrics, SSRF protection and automated tests (Python, Docker, MIT).
- **[latebra](https://github.com/evandrodevbr/latebra)**: self-hosted MCP server for private web access, search and extraction, with a three-layer anti-bot evasion pipeline, TLS impersonation, proxy rotation and a pytest suite covering the pipeline, proxy manager and stealth layers (Python, MIT).
- **[dev-workflows](https://github.com/evandrodevbr/dev-workflows)**: code review workflows shipped as agent skills, covering frontend, backend, architecture and security with explicit verification steps (MIT).
- **[oh-my-pi-telegram](https://github.com/evandrodevbr/oh-my-pi-telegram)**: Telegram adapter for the Oh My Pi coding agent, so a live terminal session can be driven from a private chat (TypeScript, Node 22).
- **[LocalMind](https://github.com/evandrodevbr/LocalMind)**: mobile chat client for models served by LM Studio on the local network, with no cloud and no API key (React Native, Expo).
These are private and not published as open-source packages. I can walk you through any of them on a call.
### Web apps and developer tools
- **orelhIA**: MCP server for local PT-BR audio transcription on Parakeet TDT, with an LRU cache, voice activity detection and SSRF protection.
- **latebra**: self-hosted MCP server for private web search and extraction, with TLS impersonation and proxy rotation.
- **PiAgentUI**: desktop and web workspace for AI coding agents, built with Tauri 2 and React 19.
- **gemini-nexus**: multi-account gateway that exposes OpenAI- and Anthropic-compatible endpoints for Gemini and Claude.
- **bthaven**: native Windows 11 Bluetooth device and audio hub in C#.
- **[nutriscan](https://github.com/evandrodevbr/nutriscan)**: nutrition platform over Open Food Facts (2M+ products), with barcode search, Nutri-Score and NOVA filters, multi-layer cache and offline support (Next.js, TypeScript, Prisma). [Live demo](https://nutriscan.evandro.dev.br)
- **[as-servicos](https://github.com/evandrodevbr/as-servicos)**: institutional site for an engineering company, with a procedural Three.js scene that follows the page scroll (Next.js 16, React 19, TypeScript).
- **[Downloader](https://github.com/evandrodevbr/Downloader)**: ephemeral download proxy that fetches files on a VPS into short-lived sessions and serves them to the browser, with SSRF protection (Fastify, React).
- **[cursorAI_install.sh](https://github.com/evandrodevbr/cursorAI_install.sh)**: Bash script that installs, repairs and removes the Cursor IDE on Linux, choosing AppImage, DEB or RPM from the detected distribution and architecture (MIT).
- **[bthaven](https://github.com/evandrodevbr/bthaven)**: native Windows 11 Bluetooth device and audio hub in C#, developed probe-first, so features land only after the underlying Windows behavior is demonstrated with code (MIT).
## Professional work
Part of my work lives in private repositories. The scope, without the code:
- Backend and integrations for the web and mobile applications that support Apolo Energia's internal routines, including IoT device integration and operations dashboards for renewable energy processes.
- A modular NestJS platform (TypeScript, PostgreSQL, Drizzle ORM) split into 8+ isolated domains, with OpenAPI documentation, S3-compatible storage, health checks and automated tests with coverage thresholds of 80% of lines and 70% of branches.
- An offline-first TypeScript SDK with auth, sync, media and transaction modules, including retry with backoff, dead-letter handling and SHA-256 deduplication.
- E-commerce systems with ACID inventory transactions, separate customer and admin authentication and relevance-ranked product search.
- At Innovo (December 2024 to February 2025): Angular front-end components and Node.js back-end logic over PostgreSQL and MySQL, internal libraries and maintenance of legacy systems.
## Stack
| Area | Technologies |
| --- | --- |
| Languages | TypeScript, JavaScript, Python, SQL, Bash, C# |
| Backend | Node.js, NestJS, Fastify, Express, PHP, Laravel, REST, OpenAPI |
| Backend | Node.js, NestJS, Fastify, Express, REST APIs, OpenAPI, PHP, Laravel |
| Frontend and mobile | React, Next.js, Astro, React Native, Expo, Tailwind CSS |
| Data | PostgreSQL, MySQL, SQLite, MongoDB, Prisma, Drizzle ORM |
| Infrastructure | Docker, Linux, S3-compatible storage, CI/CD, Firebase, self-hosted Gitea |
| Infrastructure | Docker, Linux, S3-compatible storage, CI/CD, Firebase |
| Quality and security | Jest, Vitest, pytest, Playwright, OAuth2, JWT, RBAC, Zod |
## What happened to my previous account
My previous GitHub account, evandrodevbr, was suspended after one of my repositories was flagged. That repository was my mistake, made without bad intent, and I offered to delete it right away so it could not affect anyone.
The offer changed nothing. There was no way to remove that one repository and keep the account, and the suspension made no distinction between it and years of unrelated work. I lost my personal repositories and the ones I maintained for companies I worked for, along with their issues, reviews and history.
I had backups, so the code survived. Since then my development setup runs on my own machines and my own server, where a decision I have no say in cannot take years of work offline.
## Contact
**Best way to reach me: [[email protected]](mailto:[email protected]).** I answer in Portuguese or English.
Elsewhere: [WhatsApp](https://wa.me/5547992742365) · [portfolio](https://evandro.dev.br/?utm_source=profile-readme) · [LinkedIn](https://www.linkedin.com/in/evandrodevbr/) · [Gitea](https://git.evandro.dev.br/evandro)
If you maintain a project you think I should contribute to, send me the link.
Open to backend engineering roles, technical collaborations and conversations about architecture, APIs and reliable systems. The fastest way to reach me is [email](mailto:[email protected]) or [LinkedIn](https://www.linkedin.com/in/evandrodevbr/).
<div align="center">
<sub>Made by <a href="https://evandro.dev.br">Evandro Fonseca Junior</a> · <a href="https://git.evandro.dev.br/evandro">git.evandro.dev.br</a></sub>
<img src="https://github-profile-summary-cards.vercel.app/api/cards/profile-details?username=evandrodevbr&theme=transparent" alt="Evandro's GitHub activity overview" />
</div>
<!-- Owner: Evandro. Review this page when the role changes, a project goes public, a job search starts or the portfolio changes. Last reviewed: 2026-10-24. -->
-52
View File
@@ -1,52 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="420" viewBox="0 0 1200 420" role="img" aria-labelledby="title desc">
<title id="title">Evandro Fonseca Junior</title>
<desc id="desc">Backend engineer who builds APIs and the integrations that connect IoT devices, web apps and mobile apps to a PostgreSQL database. His code is hosted on his own Gitea server at git.evandro.dev.br.</desc>
<rect width="1200" height="420" rx="24" fill="#0a0a0a"/>
<g id="title-block" font-family="system-ui, -apple-system, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif">
<text x="64" y="132" font-size="68" font-weight="700" fill="#f4f2ed">Evandro Fonseca</text>
<text x="64" y="208" font-size="68" font-weight="700" fill="#f4f2ed">Junior</text>
<text x="64" y="268" font-size="28" fill="#f4f2ed">Backend engineer: APIs and integrations</text>
<text x="64" y="306" font-size="28" fill="#f4f2ed">for IoT devices, web and mobile apps.</text>
<text x="64" y="360" font-size="20" fill="#ccff00" font-family="ui-monospace, &quot;SF Mono&quot;, Consolas, monospace">TypeScript · Python · NestJS · PostgreSQL</text>
</g>
<g id="integration-map" font-family="system-ui, -apple-system, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif" font-size="20">
<g id="sources" fill="#161616" stroke="#3a3a38" stroke-width="2">
<rect x="712" y="72" width="148" height="48" rx="10"/>
<rect x="712" y="138" width="148" height="48" rx="10"/>
<rect x="712" y="204" width="148" height="48" rx="10"/>
</g>
<g fill="#f4f2ed" text-anchor="middle">
<text x="786" y="103">IoT devices</text>
<text x="786" y="169">web apps</text>
<text x="786" y="235">mobile apps</text>
</g>
<g id="links" fill="none" stroke="#ccff00" stroke-width="3" stroke-linecap="round">
<path d="M860 96 C 892 96, 892 146, 920 146"/>
<path d="M860 162 L 920 162"/>
<path d="M860 228 C 892 228, 892 178, 920 178"/>
<path d="M1022 162 L 1046 162"/>
</g>
<g id="api">
<rect x="920" y="118" width="102" height="88" rx="12" fill="#ccff00"/>
<text x="971" y="171" text-anchor="middle" font-size="28" font-weight="700" fill="#0a0a0a">API</text>
</g>
<g id="database" stroke="#f4f2ed" stroke-width="2" fill="#161616">
<path d="M1046 132 L1046 192 A50 13 0 0 0 1146 192 L1146 132"/>
<ellipse cx="1096" cy="132" rx="50" ry="13"/>
</g>
<text x="1096" y="236" text-anchor="middle" font-size="18" fill="#a6a59f">PostgreSQL</text>
<g id="own-server">
<rect x="712" y="290" width="434" height="62" rx="12" fill="#161616" stroke="#3a3a38" stroke-width="2"/>
<circle cx="740" cy="321" r="6" fill="#ccff00"/>
<text x="760" y="328" fill="#f4f2ed" font-family="ui-monospace, &quot;SF Mono&quot;, Consolas, monospace">git.evandro.dev.br</text>
<text x="1126" y="327" text-anchor="end" font-size="18" fill="#a6a59f">self-hosted</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB