Skip to content

Photogram

An unfinished microservices study: a gateway, service discovery and a user service wired together. The remaining services are scaffolds.

Role
Solo: architecture study
Year
2024
Status
Paused
Type
Systems study
ARCHITECTUREPHOTOGRAM · SYSTEMS STUDYLOOKUPEurekaservice discoveryClientGatewayroutingUser serviceregister · statusPost servicescaffoldFeed servicescaffoldAuth serverscaffoldEmailscaffoldPassword resetscaffold

01Problem

Why it exists

After building Pulse as a single application, I wanted to see what the same kind of product costs when it is split into services: discovery, routing, and identity that has to cross a network boundary.

02Approach

How I went about it

Start with the platform pieces, then add services one at a time behind the gateway. I got as far as the first one.

03Architecture

Decisions that shaped it

Diagram aboveSolid boxes run. Dashed boxes are scaffolds with no behaviour yet.

  1. 01

    Discovery before services

    A Eureka server runs first; the gateway and the user service register with it, and the gateway resolves routes by service name rather than by address.

  2. 02

    One real service

    The user service registers a user with validated input and a hashed password, and exposes a status route through the gateway. Token issuance from the authorisation server is marked as a to-do in the code.

  3. 03

    The rest is outline

    Post, feed, email verification and password reset are runnable Spring applications with empty controllers and the intended endpoints written as comments.

04Build

What it does

  • Gateway routing through service discovery works end to end for one route
  • User registration with validation and password hashing
  • Eight separately buildable Spring Boot modules
Services
Java 21 · Spring Boot 3.2 · Spring Data JPA
Platform
Spring Cloud Gateway · Netflix Eureka
Scaffolded
Spring Authorization Server

05Outcome

Where it stands

Paused, and listed here as what it is: a study, not a product. Roughly five hundred lines of Java.

The useful lesson: the platform work arrived long before the first feature did. That is the trade-off LedgerOne’s first decision record weighs before choosing a monolith.

Checked against the repository on 11 November 2026