Track upcoming tech conferences & meet‑ups and get timely e‑mail reminders.
- Back‑end: Spring Boot 3 • Kafka • RabbitMQ • PostgreSQL
- Front‑end: React 18 • Vite • Tailwind CSS
- Infra: Docker Compose (local) • GitHub Actions (CI)
- High‑level Overview
- Architecture
- Quick Start
- Configuration
- Project Structure
- API Reference
- Running Tests
- Docker Compose
- CI / CD
- Contributing
- License
The service ingests raw tech‑event JSON payloads from Kafka, stores them in PostgreSQL via Spring Data JPA, then emits RabbitMQ messages that downstream workers (e‑mail, search‑index, etc.) can consume. Every evening at 20:00 server time a scheduled job publishes tomorrow’s event summary to the daily‑summary queue. A lightweight React SPA surfaces the events list and lets users subscribe with one click.
┌─────────────────────────────┐
│ Kafka Topic │
│ `events‑ingest` (JSON) │
└────────────┬───────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────┐
│ Spring Boot Service │
│ ──────────────────────────────────────────────────────────────────────── │
│ • @KafkaListener → validate & persist (JPA) │
│ • REST → GET /events, POST /subscribe │
│ • @Scheduled 20:00 → build next‑day summary → RabbitMQ │
└────────────┬─────────────────────────────────────────────────────────────┘
│ JDBC
▼
PostgreSQL 15
│
▼
RabbitMQ exchange
│
▼
Worker(s): e‑mail dispatcher, search indexer, etc.
▲
│ HTTPS
React + Vite front‑end SPA
git clone https://github.com/Mrigankkh/techeventstracker.git
cd techeventstracker(creates Postgres, Kafka & RabbitMQ)
docker compose -f docker/docker-compose.yml up -d./mvnw spring-boot:run # http://localhost:8080cd frontend
npm install
npm run dev # http://localhost:5173| Name | Purpose | Default | Where to set |
|---|---|---|---|
SPRING_DATASOURCE_URL |
Postgres JDBC URL | jdbc:postgresql://localhost:5432/techevents |
shell / .env |
SPRING_RABBITMQ_HOST |
RabbitMQ host | localhost |
.env |
KAFKA_BOOTSTRAP_SERVERS |
Kafka brokers | localhost:9092 |
.env |
VITE_API_BASE (frontend) |
Base URL for API requests | http://localhost:8080 |
frontend/.env.development |
Tip: the repo ignores
*.env*files—feel free to commit sample templates like.env.example.
.
├── docker/ # infra YAMLs
├── src/main/java/com/techevents
│ ├── config/ # Kafka & Rabbit configs
│ ├── controller/ # REST endpoints
│ ├── consumer/ # Kafka listener
│ ├── jobs/ # Daily scheduler
│ ├── model/ # JPA entities
│ ├── repository/ # Spring Data interfaces
│ └── service/ # business logic
├── src/test/ # unit + integration tests
├── frontend/ # Vite React app
└── README.md
Returns array of upcoming events.
Create / update a subscriber.
POST /subscribe
Content-Type: application/json
{ "email": "alice@example.com" }Responses
| Code | Meaning |
|---|---|
| 201 | Created |
| 400 | Bad Request |
Back‑end: runs with Embedded Kafka, Testcontainers Rabbit & H2.
./mvnw verifyFront‑end: uses Vitest + React Testing Library.
cd frontend
npm testCoverage reports land in target/site/jacoco (back‑end) and frontend/coverage/ (front‑end).
docker compose -f docker/docker-compose.yml up -d # infra only
docker compose -f docker/compose.full.yml up -d # infra + built images (optional)compose.full.yml can build a production‑grade stack: Spring Boot :8080, Vite static assets via nginx :80, all services on an internal network.
-
GitHub Actions
mvn verifyon Java 17npm ci && npm run buildon Node 20- Build & push Docker images to GHCR
- Deploy step: add Render, AWS ECS, Kubernetes, etc.
- Fork & create a feature branch.
- Run all tests (
./mvnw verify && (cd frontend && npm test)). - Open a pull request describing why the change is valuable.
- Ensure no advertisements or tracking scripts are introduced.
Built by Mrigank
[ { "id": 42, "title": "ReactConf NYC", "eventDate": "2025-07-14", "city": "New York", "tags": ["react", "frontend"] } ]