Arthur Duarte
Backend and systems architecture
I design systems and take part in implementing them. Linux and infrastructure enthusiast.
Porto Alegre, Brazil
About
Student at Colégio Militar de Porto Alegre (military high school), graduating in 2027.
My focus is backend and systems architecture: I want to design systems and also take part in implementing them.
Linux and infrastructure enthusiast.
Languages
- Portuguese
- Native
- English
- C1
- German
- A1, learning
Stack
Languages
- Python
- JavaScript
- TypeScript
- SQL
- Rust
Backend
- Node.js
- Fastify
- Prisma
- Zod
- PostgreSQL
Infra
- Arch
- CachyOS
- Fedora
- Debian
- Ubuntu Server
- Docker
- SSH
- Oracle Cloud
- GitHub Actions
Studying
- Java
- React
- Functional programming
Projects
Event ticketing system
Ticket sales API for events. For now it has user sign-up; events, orders and tickets are already in the data model.
- Fastify with Zod validation, OpenAPI documentation at /docs and argon2 password hashing.
- Data model in Prisma 8 and PostgreSQL, with users in tiers (free, verified, pro), events, orders and tickets.
- Database constraints, such as sold_tickets <= capacity, protect event capacity.
- TypeScript
- Fastify
- PostgreSQL
- Prisma
- Zod
- OpenAPI
- Docker Compose
dev-tool-cli
CLI that sets up development environments in one command, the same way on every machine.
- Installs the Python (uv) and Rust (rustup) toolchains, creates the project and records the versions in dev.toml. dev doctor checks what is missing on the machine.
- Single binary for macOS and Linux, with an installer that verifies the SHA-256 checksum.
- Modular architecture (cli, config, core, errors, os, providers) based on a Provider trait and a Registry.
- Tests using fakes. Automated releases via GitHub Actions.
- Rust
- GitHub Actions
multi-llm-cli
- Python
- uv
Terminal CLI for chatting with several LLMs, built to make free models from different providers easier to access.
- Supports OpenRouter, Groq and Google. Multi-turn history, markdown in the terminal, switching model and provider mid-conversation and importing files into the context.
- Optional tool calling (bash, read_file, write_file) on OpenRouter and Groq. Every execution asks for confirmation, defaulting to no.
Discord welcome bot
- JavaScript
- discord.js
- Docker
- Oracle Cloud
Automatically welcomes new members and assigns them a role. Containerized deployment on an Oracle Cloud VM.
View codeYouTube notification bot for Discord
- JavaScript
- discord.js
- Docker
Announces on the server when a new video is published on the YouTube channel or a livestream starts. Uses the RSS feed, no Google API key.
- The RSS feed only shows a stream after it ends. So the bot also checks the channel's /live page on every cycle.
- Stores already-announced IDs in data/state.json so it does not repeat announcements after a restart.
Homelab
- Ubuntu Server
- Netplan
- SSH
- Docker
Ubuntu Server machine built from an old computer, with a static IP via Netplan and key-based SSH access.
- Used as a lab for backend, databases and Docker.
Personal portfolio
- TypeScript
- Next.js
- nginx
- Oracle Cloud
- GitHub Actions
This site: Next.js with static export in three languages, served by nginx on an Oracle Cloud VM.
- Deployed via GitHub Actions. The project list is updated weekly by Claude.
How this site reaches you
No hosting platform: this is the path from a commit to your browser, built and run by me.
git push
Commit to the main branch on GitHub.
GitHub Actions
npm ci and next build produce the static site in out/.
rsync over SSH
Sends only what changed, as a deploy user without sudo.
nginx
Ubuntu VM on Oracle Cloud, with gzip and long caching for assets.
HTTPS
Let's Encrypt certificate, renewed by certbot.
You
The root redirects to /pt/, /en/ or /de/ based on your browser language.
Every Monday, a workflow with Claude reads my repositories tagged portfolio and opens a PR updating the projects in all three languages. I review and merge; the deploy runs by itself.
Technical YouTube channel
Explanations of data structures and LeetCode problems.
- subscribers
- 1,000+
- views on one video
- 40K+