Case study ยท Solo project

Blog platform

01Blog is a social blogging platform: people publish posts with images, follow each other, comment and like, and report what breaks the rules to admins who can act on it. A Spring Boot API with Spring Security and PostgreSQL, an Angular frontend, running in Docker.

Role
Built alone, backend to deployment
Stack
Java 17, Spring Boot 3, PostgreSQL 15, Angular 20
Status
Live at blog.bouchikhi.com

What it does

Architecture

One Spring Boot application with a controller per area, behind a stateless Spring Security filter chain. Select a part to see what it does.

The interactive diagram needs JavaScript. In short: Angular โ†’ Spring Security (JWT filter) โ†’ auth, posts, users, notifications and admin controllers โ†’ PostgreSQL, with post images on a Docker volume.

Decisions worth explaining

Stateless authentication

A JWT filter runs before Spring Security's own login filter and the session policy is STATELESS: the server keeps no session, so every request carries its proof. Admin routes are closed at the security configuration level (/api/admin/** needs ROLE_ADMIN), not only in the UI.

Cursor pagination for the feed

The feed asks for "posts older than this time and id" instead of "page 7". New posts arriving while someone scrolls don't shift the pages, so nothing is shown twice or skipped.

Hidden, not only deleted

An admin can hide a post instead of deleting it. Hidden posts are filtered out for everyone but admins, which keeps the evidence of a report while removing the post from view.

Security

Deployment

Docker Compose runs three containers: PostgreSQL 15, the Spring Boot backend and the Angular frontend, with the database and the uploaded images on named volumes. It runs on the same server as this portfolio, behind Caddy for HTTPS.

Testing: 62 JUnit tests with Mockito on the services (auth, posts, comments, likes, notifications, users), counted in October 2026.