Skip to content
Photo of Arthur Duarte

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

In progress

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
View code

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
View code
  • 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.
    View code
  • 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 code
  • YouTube 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.
    View code
  • 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.
    View code

How this site reaches you

No hosting platform: this is the path from a commit to your browser, built and run by me.

  1. git push

    Commit to the main branch on GitHub.

  2. GitHub Actions

    npm ci and next build produce the static site in out/.

  3. rsync over SSH

    Sends only what changed, as a deploy user without sudo.

  4. nginx

    Ubuntu VM on Oracle Cloud, with gzip and long caching for assets.

  5. HTTPS

    Let's Encrypt certificate, renewed by certbot.

  6. 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+