Skip to content

Explore the portfolio

All projects

Personal project · Web application

Obsidian Library

A library. A whole product behind it.

Obsidian connects the reader’s experience with the rules of a library: finding a book, checking availability, managing loans and reservations, and keeping a membership current. A personal project published as a demo, with Next.js on the frontend and Java and Spring Boot on the backend.

Obsidian Library · Application screenshot
My contribution
Frontend and API integration; backend, data and payments.
Status
Live demo · Interface being refined
Year
2026

The starting point

What happens between a click and a confirmation.

A book can be on loan, reserved or available. A payment can still be pending when the reader returns from Stripe. The challenge is to coordinate those states and communicate them while the server enforces availability, membership and payment rules.

A journey through the system

A confirmed payment takes more than a screen.

  1. 01

    The reader requests

    Selects a membership or an outstanding fine.

  2. 02

    Stripe processes

    The server prepares checkout with a validated amount.

  3. 03

    The backend confirms

    Verifies the event and records the result once.

  4. 04

    The interface responds

    Checks the confirmed status and updates the experience.

Diagram of the implemented flow. Returning from Stripe alone does not activate a membership: the server must confirm payment.

Decisions that shape the product

01

Confirm before activating

The payment screen checks the backend status and displays the confirmation wait. The server verifies Stripe signatures, recognizes repeated deliveries and prevents a late failure event from reversing a successful payment.

02

A queue that respects availability

Reservations advance in request order as copies become available. Readers have 48 hours to collect a book. Once that window expires, the system can advance the next reservation.

03

Coordinated sessions

Next.js connects the browser to the Spring Boot API. Authentication combines HTTP-only cookies, CSRF protection and refresh-token rotation. The client coordinates requests that need a session refresh.

04

Rules close to the data

Loans validate membership limits and availability. Critical operations use transactions and locks. Flyway tracks schema changes, while PostgreSQL adds integrity constraints.

Implementation and verification

67

tests recorded in backend reports

48 h

reservation pickup window

CI

verification with GitHub Actions

Local reports dated September 20, 2026 record 67 passing tests, including 8 PostgreSQL integration tests using Testcontainers.

Technologies

  • Next.js
  • TypeScript
  • Java
  • Spring Boot
  • PostgreSQL
  • Stripe

Current scope

Personal project demo. The reader experience is published and the interface is being refined. The API includes administrative features; their interface is not yet complete. Membership renewal prepares a payment link sent by email.

A clear interface also needs to represent waiting, expiration and operations that require confirmation.

Next project

La Central

Let’s build something together.

Get in touch