The Content Calendar API is a full Spring Boot 3 backend application built as part of my advanced learning path. This project demonstrates how to build, structure, deploy, and operate a real-world Spring Boot service β from local development with H2 to a fully deployed PostgreSQL-backed service on Railway.
I built this project to:
- Refresh and deepen my Spring Boot knowledge (especially SB3 changes)
- Strengthen my Java backend portfolio for job applications
- Learn modern deployment workflows (Docker β Railway)
- Understand environment configurations (dev vs prod)
- Build a real API that is accessible online
Backend engineering involves much more than writing endpoints. This project shows full-stack backend competency:
- Building REST APIs the Spring way
- Managing two databases (H2 for dev, PostgreSQL for prod)
- Working with Docker containers
- Using profiles for environment-specific behavior
- Deploying production-ready apps using Railway
- Handling sensitive configuration with environment variables
- Debugging DB schema & connection issues in real deployment environments
It demonstrates the skills companies expect from a Junior β Mid Java Backend Developer.
This project is a teaching and demonstration tool. It solves the questions every beginner backend engineer faces:
- How do I build a Spring Boot 3 REST API?
- How do I work with PostgreSQL and H2?
- How do I configure Docker + containers?
- How do I switch between dev and prod environments?
- How do I deploy a Java backend to Railway?
- How do I manage environment variables safely?
- How do I structure a real backend application cleanly?
| Layer | Technology |
|---|---|
| Language | Java 17 |
| Framework | Spring Boot 3 |
| Web | Spring MVC |
| Persistence | Spring Data JPA |
| Local DB | H2 (in-memory) |
| Production DB | PostgreSQL |
| Deployment | Railway |
| Container | Docker / Docker Compose |
| Monitoring | Spring Boot Actuator |
| Build Tool | Maven |
| Version Control | GitHub |
ββββββββββββββββββββββββββββββββ
β Frontend (optional) β
β React / Next.js / Vue β
βββββββββββββββββ¬βββββββββββββββ
β HTTP/JSON
βΌ
ββββββββββββββββββββββββββ
β Spring Boot API β
β Controllers (MVC) β
ββββββββββββββββββββββββββ€
β Service Layer β
β Business Logic β
ββββββββββββββββββββββββββ€
β Repository Layer (JPA) β
ββββββββββββββββ¬ββββββββββ
β
ββββββββββββ΄ββββββββββββ
β β
ββββββββββββββββ ββββββββββββββββββ
β H2 (Dev) β β PostgreSQL Prod β
ββββββββββββββββ ββββββββββββββββββ
This uses the development profile and H2 in-memory DB.
git clone <YOUR_GITHUB_REPO_LINK>
cd content-calendar
./mvnw spring-boot:runAccess H2 console (dev only):
http://localhost:8080/h2-console
docker compose up -d
SPRING_PROFILES_ACTIVE=prod ./mvnw spring-boot:run-
Push code to GitHub
-
Connect Railway β New Service β Deploy from Repo
-
Add environment variables:
SPRING_DATASOURCE_URLSPRING_DATASOURCE_USERNAMESPRING_DATASOURCE_PASSWORD
-
Deploy Docker image
-
Railway auto-creates PostgreSQL DB
-
Run health checks via Actuator
-
The API becomes public
POST /api/content
Content-Type: application/json
{
"title": "First Content",
"description": "Learning Spring Boot",
"status": "IDEA",
"contentType": "VIDEO"
}GET /api/content
[
{
"id": 1,
"title": "First Content",
"description": "Learning Spring Boot",
"status": "PUBLISHED",
"contentType": "ARTICLE"
}
]- Instant startup
- No external dependencies
- Perfect for fast testing
-
Durable / reliable
-
Cloud compatible
-
Supports real-world scaling needs
devβ H2, debug logsprodβ PostgreSQL, env variables, no dev tools
- Standardized environment
- Same config everywhere
- Railway supports Docker natively
- Health checks
- Metrics
- Info endpoints
Railway requires correct env variable mapping + working Dockerfile. Solved via standardized Dockerfile + Railway environment config.
Learned to avoid hardcoded DB credentials. Used environment variables everywhere.
Implemented profile-based config:
application-dev.ymlapplication-prod.yml
Railway calls schema at startup β needed to ensure proper migrations per profile.
- Spring Boot 3 fundamentals (MVC, JPA, Actuator)
- Dependency Injection, IoC, Spring Context
- REST API structure & layering
- PostgreSQL & H2 configuration
- Docker images, containers, Compose
- Railway deployment pipeline
- Working with profiles & env variables
- Diagnosing real production failures
This project made me more confident as a backend developer.
Jo β Java Backend Developer Building production-ready backend services with Spring Boot.