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.
- 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.
- 01
The reader requests
Selects a membership or an outstanding fine.
- 02
Stripe processes
The server prepares checkout with a validated amount.
- 03
The backend confirms
Verifies the event and records the result once.
- 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
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.
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.
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.
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 CentralLet’s build something together.
Get in touch