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.
What it does
- Posts with images: create, edit, delete; comments and likes.
- People: profiles, follow and unfollow, followers and following lists, user search.
- Feed with infinite scroll, including a feed of the people you follow.
- Notifications when someone you follow publishes, with an unread count.
- Reports and moderation: users report posts or users; admins see statistics, ban or delete users, and hide or delete posts.
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
- Passwords hashed with BCrypt; JWTs with a one-hour lifetime and the signing key from the environment.
- Role-based access: users and admins, enforced on the server.
- Input sanitisation and file validation services for what users submit and upload.
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.