A full-stack email application with real-time notifications, smart filtering, and a rich set of software design patterns.
Jaryn is a full-stack email application built with Spring Boot and Angular. It covers the core email workflow — sending, receiving, drafts, trash, attachments, contacts, and automated filtering — with stateless JWT authentication and real-time inbox updates via Server-Sent Events.
The project was built as a deep exploration of software design patterns, applying seven distinct patterns across the backend.
- Send, receive, reply, and forward emails
- Draft saving and trash management
- File attachments with time-bound IDs and expiry enforcement
- Real-time inbox updates via SSE
Filtering
- User-defined rules that automatically move, delete, star, or forward incoming emails
- Composable search with AND/OR logic across subject, sender, and content
Contacts
- Contact book with strategy-based search (by name, email, or all)
- Sorting by name or date
Authentication
- Stateless JWT-based login and registration
| Layer | Technology |
|---|---|
| Backend | Java 17, Spring Boot 4, Maven |
| Database | PostgreSQL (users), File System JSON (emails/attachments) |
| Security | JWT (JJWT) |
| Frontend | Angular 21, TypeScript, Tailwind CSS v4 |
| Real-time | Server-Sent Events (SSE) |
| Pattern | Where |
|---|---|
| Command | Filter actions — Move, Delete, Star, Forward executed dynamically |
| Strategy | Contact search (by name / email / all) and contact sorting |
| Factory | FilterFactory generates matching logic from filter rule definitions |
| Builder | EmailBuilder — fluent API for constructing and cloning email objects |
| Observer | SSE event publishing on email receipt and draft save |
| Filter | Composable search criteria — AndFilter, OrFilter, SubjectFilter, SenderFilter |
| Proxy | AttachmentService manages lifecycle, expiry, and encryption of stored files |
Prerequisites: Java 17+, Maven, Node.js 18+, PostgreSQL
Backend
Configure backend/src/main/resources/application.properties with your DB credentials, then:
cd backend
./mvnw spring-boot:runFrontend
cd frontend
npm install
ng serveApp available at http://localhost:4200
Jana Rashed · Ahmed Sherif Abd El-Moniem · Mohamed Radwan · Yousef Walid · Nour El Atawy