SHIVANSH AGARWAL
✦ CASE STUDY04 / 04
← Back to all work

CASE STUDY 04 - FULL-STACK PRODUCT

Smart Contact Manager

A production-style contact intelligence platform built to do more than store names. It detects duplicate records, shows who you are losing touch with, maps relationship clusters, automates tagging and reminders, and protects the account with serious authentication and endpoint ownership checks.

JAVA 21SPRING BOOT 3.4SPRING SECURITYREACT 19MYSQL 8DOCKERRAILWAY
Smart Contact Manager dashboard with contacts, stats and activity views
200demo contacts seeded into the public Railway demo
72Java files across the Spring Boot backend
2FARFC 6238 TOTP built and tested without a third-party TOTP dependency
1 jarReact SPA and Spring API deployed together on one origin

OVERVIEW

A contact app that understands relationships, not just records.

Most contact managers stop at CRUD and search. I built Smart Contact Manager around the workflows that make a contact system useful in real life: detecting duplicates before the address book becomes messy, surfacing people you have not spoken to recently, grouping contacts by business context, and keeping reminders, notes, events and interaction history connected to each person.

The project is deployed as a full-stack product. Vite builds the React frontend into Spring Boot static resources, Spring serves the app and API from the same origin, and Docker brings up the app with MySQL for a production-shaped local or hosted environment.

PRODUCT DEPTH

The features that make it more than a CRUD app.

DUPLICATES

Merge without losing history

Contacts are grouped by phone, email and normalized names. During merge, notes, reminders, events and interactions are moved onto the surviving contact.

RECONNECT

Know who is going cold

The reconnect view ranks contacts by how long it has been since the last interaction, with a threshold visitors can tune.

GRAPH

Canvas relationship map

A force-directed graph clusters contacts by tag or company, with drag, pan, zoom and profile drill-down built without D3.

AUTOMATION

Rule-based tags

Tags can carry rules such as company matching, and the app applies them automatically when a contact is saved.

SHARING

Import, export and share

CSV import/export, vCard and QR sharing, printable directories and calendar exports make the data portable.

DEMO

Public product demo

The live Railway deployment includes a shared demo account with 200 seeded contacts that resets cleanly after restart.

SCREENSHOTS

Important screens from the shipped app.

Relationship graph clustered by tag
RELATIONSHIP GRAPHForce-directed canvas layout with tag-based clustering, dragging, zooming and contact drill-down.
Relationship graph clustered by company
COMPANY CLUSTERSThe same graph engine can cluster the network by company to reveal business-side relationships.
Duplicate detection and merge workflow
DUPLICATE MERGEGrouped by shared fields and merged while preserving child records and contact history.
Reconnect list ranked by stale interactions
RECONNECTRanks stale relationships by last interaction date and separates contacts with no recorded interaction.
Contact detail with interactions and reminders
CONTACT DETAILNotes, interaction history, reminders and events stay connected to each contact profile.
Business detail with linked staff
BUSINESSESCompanies can be managed as records with linked staff, context and relationship history.
Smart Contact Manager dashboard
DASHBOARDSearch, quick stats and contact activity in a polished light/dark themed interface.
Smart Contact Manager landing page
LANDING PAGEKinetic type, marquees and a canvas constellation animation built without a UI framework.

SECURITY

Security work that is visible in the code.

ARCHITECTURE

One deployable system, cleanly layered.

React 19 SPA Vite build Spring Boot static resources Spring MVC + Security Spring Data JPA MySQL 8

The frontend is compiled into the backend, so the app ships as a single Spring Boot jar on one origin. That avoids CORS setup, cross-site cookie problems and preflight overhead for normal writes.

Backend

Spring Boot 3.4.4, Java 21, Spring Security, Spring Data JPA, Hibernate 6.6, Maven

Frontend

React 19, Vite 7, plain CSS custom properties, lucide-react

Database

MySQL 8 in production-shaped setup, with H2 and PostgreSQL drivers available via environment config

Auth

Session-based login, email verification, Google/GitHub OAuth2 and TOTP 2FA

Infra

Docker multi-stage build, docker-compose, Railway deployment and GitHub Actions CI

Testing

Unit tests for TOTP and recurring reminders, plus HTTP smoke tests for auth boundaries and contact workflows

The UI is intentionally custom-built rather than assembled from a component framework, including the relationship graph, landing-page constellation animation and resizable app panes.

IMPLEMENTATION DETAILS

Engineering choices worth discussing.

Explore the product.