SIGNAL ACQUIRED · ONLINE

João Abreu

Back-end developer · Java & Spring Boot

Explore my projects, technical decisions and learning journey.

  • 663contributions in the last year
  • 11public repositories
  • portfolio-apiThe Spring Boot back end of this site, for the visit counter and the contact form.
  • algorithms-and-data-structuresMy data structures and algorithms practice in Java and Python, on LeetCode and the other places I study.
  • daily-learning-logThe code I write while studying back-end courses, organized by level and topic, with one commit per lesson.
  • tutoring-management-systemAcademic tutoring platform with admin approvals, sessions with limited spots and an automatic waitlist.
  • electronics-and-roboticsPersonal studies and hands-on experiments with electronics, Arduino, ESP32, and robotics.
  • screenmatch-quotes-javaSpring Boot REST API that serves random movie and TV show quotes from PostgreSQL to an HTML/CSS/JavaScript front end.
  • screensound-javaCommand-line music catalog: register artists and songs in PostgreSQL and fetch artist biographies from Wikipedia. Java, Spring Boot, Spring Data JPA.
  • fipe-price-lookup-javaCLI that looks up Brazilian FIPE vehicle prices for every model year at once and saves each search to JSON. Java, Spring Boot, Jackson.

SECTION 01 / 07Projects

2 CONTACTS DETECTED

Closer to the center = pushed more recently

CLICK THE SCOPE TO PING

01 · Projects

Selected projects

In development

Portfolio API

The Spring Boot back end of this site, for the visit counter and the contact form.

Problem

This site is static, so counting visits and receiving messages from the contact form need a server of my own, without handing visitors' data to a third-party service.

Technical decisions

  • The PostgreSQL schema is versioned with Flyway, and the rules live in the database too, with CHECK constraints on lengths, statuses and the single-row counter.
  • Visitors are stored only as a 32-byte hash of the IP address, never the address itself.
  • Contact messages are saved before being sent, as an outbox with status, attempts and the next attempt time, so a failed e-mail can be retried instead of lost.
  • Tests run against a real PostgreSQL started by Testcontainers, not an in-memory database.

Result

In development. The database schema and the test setup are done; the visit counter, the contact form endpoint and the deploy to api.joaoabreu.dev come next.

  • Java 21
  • Spring Boot 4.1
  • PostgreSQL 18
  • Flyway
  • Testcontainers
  • Docker Compose

SECTION 02 / 07About

ORIGIN · RIO DE JANEIRO

02 · About

Where I come from

I'm João Abreu, a back-end developer and Computer Science student at Universidade Veiga de Almeida, in Rio de Janeiro. My path into tech started somewhere unexpected: studying for the entrance exam of the Brazilian Naval Academy (Escola Naval). That's where my passion for math was born, and with it, my passion for technology.

Today I build back-end systems with Java and Spring Boot, with a growing interest in software architecture and cloud. I believe great software starts before the first line of code: understanding the problem, modeling the domain carefully and designing a clean architecture.

In progress

  • Building v2.0 of the Tutoring Management System
  • Taking part in inHub, the first team project of the Papo de Dev RJ community
  • Practicing data structures and algorithms on LeetCode, in Java
  • Looking for my first back-end internship

SECTION 03 / 07Stack

19 INSTRUMENTS

03 · Stack

Instruments on board

Back-end

  • Java
  • Spring Boot
  • Spring Data JPA
  • Hibernate
  • Bean Validation

Data

  • PostgreSQL
  • MySQL
  • Flyway

Testing and quality

  • JUnit 5
  • Mockito

Infrastructure and tooling

  • Docker
  • GitHub Actions
  • Maven
  • Git
  • nginx

Also use

  • React
  • TypeScript
  • JavaScript
  • Python

SECTION 04 / 07Activity

58 ACTIVE DAYS THIS YEAR

04 · Activity

GitHub activity

Contributions in the last year
663
Active days
58
Current streak
26 days
Longest streak
26 days
Best day
68Oct 20, 2026
DecJanFebMarAprMayJunJulAugSepOctNov
Each square is a day. Stronger blue = more contributions. Outlined = today.

Recently pushed

  • portfolio-api ↗

    The Spring Boot back end of this site, for the visit counter and the contact form.

    JavaLast push

  • algorithms-and-data-structures ↗

    My data structures and algorithms practice in Java and Python, on LeetCode and the other places I study.

    JavaLast push

  • daily-learning-log ↗

    The code I write while studying back-end courses, organized by level and topic, with one commit per lesson.

    JavaLast push

  • tutoring-management-system ↗

    Academic tutoring platform with admin approvals, sessions with limited spots and an automatic waitlist.

    JavaLast push

SECTION 05 / 07Consistency

2 SIGNALS ON PATROL

05 · Consistency signals

Steady practice

  • Algorithms & Data Structures ↗

    My data structures and algorithms practice in Java and Python, on LeetCode and the other places I study.

    Days practiced
    18
    Current streak
    9 days
    Longest streak
    9 days
    Last practice

    A practice day is a day with a solution committed to this repository, counted in Rio de Janeiro time.

  • Daily Learning Log ↗

    The code I write while studying back-end courses, organized by level and topic, with one commit per lesson.

SECTION 06 / 07Pipeline

6 STAGES · BUILT Nov 11, 2026

06 · How this site reaches you

From commit to your screen

  1. Commit

    Every change lands on main through a reviewed pull request. Main is protected and always deployable.

  2. GitHub Actions

    npm ci and npm run build: type checks, a fresh GitHub snapshot, and every page rendered in English and Portuguese.

  3. rsync over SSH

    Only the files that changed go to the server, as a deploy user without sudo, with its own key and a pinned host key.

  4. nginx

    Ubuntu on AWS Lightsail serves the static files, with long caching for fingerprinted assets and security headers.

  5. Cloudflare

    DNS, CDN and HTTPS in front of the server, which it reaches over a verified origin certificate.

  6. You

    Your browser gets ready-made HTML. Live GitHub data loads on top; if it fails, the build snapshot stays.

Runs on every push to main and every day at 06:00 in Rio, with no manual step.

SECTION 07 / 07Contact

Email me directly

07 · Contact

Contact me

Have a project, an opportunity or a question? Let’s talk.

All fields are required.

Message delivery will be available soon. For now, contact me directly by email.

Email me directly

jgabreudev@gmail.com