Courier is a Spring Boot backend application for managing company mail (courrier) in the French administrative sense.
It handles incoming and outgoing mail, attachments metadata, and administrative workflows, with a clean, modular architecture designed for long-term evolution.
This is not a logistics or shipping platform.
Courier focuses on administrative mail registration, traceability, and documentation.
-
📥 Incoming mail (Réception)
- Register received mail
- Attach metadata (pièces jointes)
- History tracking
-
📤 Outgoing mail (Envoi)
- Register outgoing mail
- Recipients and references
- Attachment metadata
-
🧾 Administrative documents
- Designed to support PDF bordereaux / registers
- Company settings reusable across documents
-
🔐 Security
- JWT-based authentication
- Secure-by-default endpoints
- Centralized security configuration
-
🧩 Clean architecture
- Feature-first modular structure
- Clear separation between web, application, domain, and persistence
- Designed for future extensions (desktop/offline clients, batch jobs, etc.)
- Language: Java
- Framework: Spring Boot
- Persistence: Spring Data JPA + Hibernate
- Database: PostgreSQL
- Migrations: Flyway
- Security: Spring Security (JWT) and OAuth2 Resource Server
- Validation: Jakarta Bean Validation
- Observability: Spring Boot Actuator
- Testing: JUnit 5, Testcontainers (PostgreSQL)
- Feature-first packaging (
envoi,reception,settings, …) - DTOs owned by features, not tied to HTTP-only packages
- Boring controllers, business logic in services
- Explicit error models and pagination contracts
The architecture is intentionally pragmatic: clean boundaries where they matter, without unnecessary ceremony.
This project is actively developed as part of a portfolio-grade backend showcasing:
- real-world Spring Boot practices
- clean layering
- database migrations
- security configuration
- testable design
io.github.rivon0507.courier
├── common
├── security
├── envoi
├── reception
├── settings
└── CourierApplication.java
For detailed architectural conventions, see: ARCHITECTURE.md
-
📄 Setup & development instructions
See: SETUP.md -
🏗️ Architecture & code organization
See: ARCHITECTURE.md
Flavien TSIRIHERIVONJY
Software Engineering & Databases
Java / Spring Boot Backend Developer