Project tutorial

Build a Spring Blog

Build Ironclad Gazette with Spring Boot 3, Thymeleaf, Bootstrap 5, Spring Security, JPA/Hibernate, MySQL, owned post CRUD, search, password recovery, and a Railway deployment.

  • Difficulty Intermediate
  • Parts 12
  • Stack Java 17, Spring Boot 3, Thymeleaf, Bootstrap 5, Spring Security, JPA, MySQL 8

How this project works

Ironclad Gazette is an original teaching blog in twelve complete snapshots. Clone once and run any numbered folder without rebuilding earlier stages.

The path starts with Spring Boot and routing, adds Thymeleaf and Bootstrap, then introduces isolated MySQL databases. Later parts add registration, form login, media, ownership, pagination, search, reset tokens, and Railway deploy notes.

Snapshots 4–12 seed [email protected] and [email protected] with password123.

Local MySQL runs through Docker Compose on host port 3308 with databases ironclad_01ironclad_12.

Start with part 1 Open GitHub repo

Parts in order

Work through the parts in sequence. Each lesson explains the ideas in plain language, then points you to a complete runnable snapshot on GitHub for that stage.

  1. Part 1: Getting StartedCreate a minimal Spring Boot app on port 8080.
  2. Part 2: RoutingOrganize page routes with Spring MVC controllers.
  3. Part 3: Layout and UIRender Thymeleaf pages with Bootstrap 5.
  4. Part 4: Data LayerPersist authors and posts with JPA and MySQL.
  5. Part 5: Feed and DetailBuild a database-backed feed and post detail pages.
  6. Part 6: RegistrationValidate accounts and store bcrypt password hashes.
  7. Part 7: Login and SessionsAuthenticate with Spring Security form login.
  8. Part 8: Profiles and MediaShow author profiles and accept constrained avatar uploads.
  9. Part 9: Posts CRUD and OwnershipCreate, edit, and delete posts with owner authorization.
  10. Part 10: Pagination and SearchPaginate the feed and search post text.
  11. Part 11: Password ResetIssue expiring one-use password reset tokens.
  12. Part 12: DeployPrepare Ironclad Gazette for Railway and managed MySQL.