[portfolio](https://geonwoo.kim/en/portfolio) › Personal

# vortesso · coffee journal app

https://geonwoo.kim/en/portfolio/vortesso

Period: 2025.10 — 2026.03

An app for recording the taste and beans of each coffee. I built the Flutter app and Spring Boot API.

A coffee journal that fills in entries from the bean details on card photos

- [github](https://github.com/vortesso)

Team: Solo

Role: Planning · Flutter app · Spring Boot API · Home server deployment · CI/CD · Monitoring

Flutter · Dart · Java 17 · Spring Boot 3.5 · Spring Security · JPA · MariaDB · Redis · MinIO · Google Cloud Vision · OpenAI API · Docker · Jenkins · Proxmox

- Cup records with hot or iced preparation, tasting notes and memos
- Sensory ratings and journal analysis
- Journal calendar and recording streaks
- Google login

## Copying card information by hand

Problem: Users had to type the bean details printed on coffee cards, such as origin, farm, altitude, process, variety and cup notes.

Solution: The app uploads the card photo to MinIO, and Google Cloud Vision reads the text. The OpenAI API then turns that text into JSON with one field per bean detail. If the text has nothing to do with coffee, the server returns a not-a-coffee-card error. The photo stays at a temporary path and moves to its permanent path when the user saves the entry.

## Running services on one machine

Problem: The API, database, file storage, CI and monitoring needed to run on one server at home.

Solution: I split the proxy, CI, monitoring, file storage, database and API into 6 VMs and LXC containers on Proxmox. I ran 2 API servers and gathered their container logs in Dozzle. Jenkins reaches the API VM over SSH through the Proxmox server, pulls the new image and starts it. After each deployment it calls a health-check endpoint up to 20 times and sends the outcome as a push notification.

## Architecture

vortesso deployment diagram: proxy, CI, monitoring, file storage, database and API servers on Proxmox, with external OCR and AI

Six VMs and containers on a home Proxmox server, with two API servers


[Order automation](https://geonwoo.kim/en/portfolio/deepeet-order-engine) · [gloticker · macro indicators Chrome extension](https://geonwoo.kim/en/portfolio/gloticker)
