Backend & Infrastructure This page covers the core parts of the backend whicih works with Spring Boot. Consider taking a proper look at the SpringBoot's documentation. It is not hard, most of the backend code are basic spring boot elements and concepts https://docs.spring.io/spring-boot/index.html 1. Technical Core Language/Framework: Java 21 (Eclipse Temurin) using Spring Boot 3.4.0. Build System: Gradle. The project is built inside the container using ./gradlew build . API Port: The backend runs internally on port 8081 . 2. The Bootstrap Logic (Admin Seeder) We have a custom safety mechanism called AdminUserSeeder.java . The Purpose: If the database is fresh (0 users), the app will automatically create a "Super User." Requirement: You must provide ADMIN_USER and ADMIN_PASS environment variables in your .env file for the first startup. Behavior: If an admin already exists in the admin_users table, this seeder does nothing. 3. Security & Session Management We use a hybrid security model to ensure the team can always access the dashboard. Google OAuth 2.0: Primary login for team members. Emails must be whitelisted in the Google Cloud Console. Spring Session (JDBC): Unlike standard apps, we store sessions in the PostgreSQL database (table: SPRING_SESSION ). Benefit: If the backend container restarts or updates, users are not logged out. Cookie Policy: SameSite=Lax and HttpOnly are enabled. Note: In full production with HTTPS, server.servlet.session.cookie.secure should be set to true . 4. Database & Persistence We use PostgreSQL 15 as our source of truth. JPA/Hibernate: Configured with ddl-auto: update . This automatically creates tables based on Java Entities. File Uploads: News images and team photos are stored in /app/uploads . Volumes: To ensure data isn't lost when containers stop, we use two named volumes: postgres_data : For all SQL records. uploads_data : For all physical images.