Personal project, live with 25 users
Subscription Master
Detects your subscriptions in Gmail, reminds you before each charge and flags failed payments. A Spring Boot backend on AWS powering a React + TypeScript frontend on Vercel.

What I built
- Built a Spring Boot backend, live with 25 users, that detects subscriptions in Gmail via Google OAuth2 and the Gmail API, trusting only SPF/DKIM/DMARC-verified billing emails, powering a React + TypeScript frontend on Vercel.
- Replaced manual subscription entry and renewal tracking by deriving status from Gmail receipts, reminding users before each charge and flagging failed payments as Billing required, in-app, by Gmail and Web Push.
- Protected mailbox data by encrypting Google refresh tokens with AES-256-GCM, exchanging single-use 60-second login codes for JWTs, serving emails sanitized under a strict CSP, and hard-deleting all data on disconnect.
- Added an admin dashboard to audit Gmail detection for 25 users, with role checks that revoke access instantly.
- Set up a GitHub Actions and Jib pipeline to AWS EC2 that fails a release unless the new container passes a health check, behind Nginx TLS with PostgreSQL on Amazon RDS.
- Blocked 2 deploy misconfigurations in the Amazon RDS migration with JUnit tests on the Docker Compose and CI config, part of 471 tests (Testcontainers, WireMock) gating every pull request.
Stack
- Backend
Java 21
Spring Boot
Spring Security
OAuth2 / OIDC
JWT
Spring Data JPA / Hibernate
REST APIs
OpenAPI / Swagger
Resilience4jBucket4j
MapStruct
jsoup
Apache POI
- Data
PostgreSQL
Flyway
Caffeine
- Integrations
Gmail API
Web Push (VAPID)
- Testing
JUnit 5
MockitoAssertJ
Testcontainers
WireMock
- Delivery
Docker
JibMaven
GitHub Actions
AWS EC2
Amazon RDS
Nginx
- Frontend
React
TypeScript
Vite
Tailwind CSS
TanStack Query
Vercel