A demonstration of an enterprise-grade chat application built with modern technologies and architecture patterns.
BuzzLink is a class project demonstrating key enterprise software concepts including real-time communication, microservices architecture, authentication, monitoring, and CI/CD pipelines.
| Component | Technology | Status |
|---|---|---|
| Backend | Spring Boot 3.2 + Java 17 | Implemented |
| Frontend | Next.js 14 + TypeScript | Implemented |
| Authentication | Clerk (SSO + 2FA) | Implemented |
| Database | PostgreSQL / H2 | Implemented |
| Real-time | WebSocket (STOMP) | Implemented |
| Styling | Tailwind CSS | ✅ Implemented |
| Component | Technology | Status |
|---|---|---|
| Messaging/Events | Apache Kafka | 📋 Design Only |
| Monitoring | Prometheus + Grafana | 📋 Design Only |
| Analytics | Apache Superset | 📋 Design Only |
| CI/CD | Jenkins | 📋 Pipeline Definition |
| Infrastructure | Terraform (AWS) | ✅ Implemented |
Deploy to AWS EC2 with one command using Terraform:
# Configure and deploy
./scripts/setup-terraform.sh
./scripts/terraform-deploy.shSee: DEPLOYMENT_CHECKLIST.md for step-by-step guide
Features:
- ✅ Fully automated infrastructure provisioning
- ✅ Docker-based deployment
- ✅ Auto-scaling ready
- ✅ Production-ready security
- ✅ Free tier compatible (~$0/month for 12 months)
- Java 17+
- Node.js 18+
- PostgreSQL (or use H2 for development)
- npm or yarn
git clone https://github.com/your-username/buzzlink.git
cd buzzlinkcd backend
# Option A: Run with H2 (in-memory database)
./gradlew bootRun --args='--spring.profiles.active=dev'
# Option B: Run with PostgreSQL
# First, start PostgreSQL:
# docker run --name buzzlink-postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=buzzlink -p 5432:5432 -d postgres:15
./gradlew bootRunBackend will be available at http://localhost:8080
cd frontend
# Install dependencies
npm install
# Copy environment file
cp .env.local.example .env.local
# Edit .env.local and add your Clerk keys from https://dashboard.clerk.com
# Start development server
npm run devFrontend will be available at http://localhost:3000
- Create a free account at Clerk.com
- Create a new application
- Copy the publishable and secret keys to
frontend/.env.local - Enable email/password authentication in Clerk dashboard
curl -X POST http://localhost:8080/api/users/make-admin \
-H "Content-Type: application/json" \
-d '{"clerkId": "user_YOUR_CLERK_ID", "isAdmin": true}'Replace user_YOUR_CLERK_ID with your actual Clerk user ID (visible in the profile page after login).
buzzlink/
├── backend/ # Spring Boot backend
│ ├── src/main/java/
│ │ └── com/buzzlink/
│ │ ├── entity/ # JPA entities
│ │ ├── repository/ # Data access
│ │ ├── service/ # Business logic
│ │ ├── controller/ # REST endpoints
│ │ ├── websocket/ # WebSocket handlers
│ │ └── config/ # Configuration
│ └── build.gradle # Dependencies
│
├── frontend/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # Next.js pages (App Router)
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom hooks
│ │ ├── lib/ # API clients
│ │ └── types/ # TypeScript types
│ └── package.json
│
├── docs/ # Documentation
│ ├── ARCHITECTURE.md # System architecture
│ ├── API.md # API documentation
│ ├── BI_ANALYTICS.md # Superset design
│ └── MONITORING.md # Prometheus design
│
├── Jenkinsfile # CI/CD pipeline
└── README.md # This file
GET /api/channels- List all channelsGET /api/channels/{id}/messages- Get channel messagesDELETE /api/messages/{id}- Delete message (admin)POST /api/messages/{id}/reactions- Toggle reactionPOST /api/users/sync- Sync user from ClerkGET /api/users/me- Get current userPUT /api/users/me- Update profile
Connect to ws://localhost:8080/ws
- Send to
/app/chat.sendMessage- Send message - Send to
/app/chat.typing- Typing indicator - Subscribe to
/topic/channel.{id}- Receive messages - Subscribe to
/topic/channel.{id}.typing- Typing events - Subscribe to
/topic/channel.{id}.presence- Presence updates
See docs/API.md for detailed documentation.
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Next.js │◄───────►│ Spring Boot │◄───────►│ PostgreSQL │
│ Frontend │ REST │ Backend │ JPA │ Database │
│ │ + WS │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Clerk │ │ Kafka │
│ Auth/SSO │ │ (Design) │
└─────────────┘ └─────────────┘
See docs/ARCHITECTURE.md for detailed architecture.
- Sign up/Sign in - Show Clerk authentication
- Real-time chat - Send messages, see instant updates
- Typing indicators - Type in one browser, see indicator in another
- Presence - Show online user count
- Reactions - Click 👍 to add reactions
- File links - Share a file URL
- Admin delete - Make yourself admin and delete a message
- Profile - Update display name
- System diagram - Show components and data flow
- Tech stack - Explain technology choices
- Kafka design - How notifications would work at scale
- Prometheus - Monitoring and metrics strategy
- Superset - Analytics and BI dashboards
- Jenkins - CI/CD pipeline walkthrough
cd backend
./gradlew testcd frontend
npm testcd backend
./gradlew build
java -jar build/libs/buzzlink-backend-1.0.0.jarcd frontend
npm run build
npm startThese components are designed but not fully implemented for the demo:
- Purpose: Decouple real-time delivery from event processing
- Topics:
buzzlink.messages.new,buzzlink.mentions,buzzlink.reactions - Consumers: Email service, push notifications, analytics pipeline
- Implementation: Stub in
NotificationService.java
See docs/ARCHITECTURE.md for integration details.
- Purpose: Application metrics and alerting
- Metrics: Request rates, response times, WebSocket connections, JVM stats
- Dashboards: System health, application metrics, business KPIs
- Endpoints:
/actuator/prometheus(already exposed)
See docs/MONITORING.md for configuration.
- Purpose: Business intelligence dashboards
- Dashboards: Daily active users, channel analytics, engagement metrics
- Data Source: PostgreSQL (read-only replica)
- Queries: SQL views for common analytics
See docs/BI_ANALYTICS.md for dashboard designs.
- Purpose: Automated build, test, and deployment
- Stages: Build, test, security scan, Docker build, deploy
- Environments: Staging (auto), Production (manual approval)
- Definition: See Jenkinsfile
- Check Java version:
java -version(need 17+) - Check if port 8080 is available
- For PostgreSQL connection errors, verify database is running
- Check Node version:
node -v(need 18+) - Verify
.env.localhas Clerk keys - Clear Next.js cache:
rm -rf .next
- Verify backend is running on port 8080
- Check browser console for CORS errors
- Ensure SockJS library is loaded
- Check browser console for errors
- Verify WebSocket connection status
- Check backend logs for exceptions
- Student: [Your Name]
- Course: [Course Name]
- Instructor: [Instructor Name]
- Semester: [Semester/Year]
This project is for educational purposes only.
- DEPLOYMENT_CHECKLIST.md - Step-by-step AWS deployment guide
- INFRASTRUCTURE_SETUP.md - Detailed infrastructure setup
- terraform/README.md - Terraform configuration details
- docs/ARCHITECTURE.md - System architecture
- docs/API.md - API documentation
- docs/MONITORING.md - Monitoring design
- docs/BI_ANALYTICS.md - Analytics design