Today I switched from payments to the challenge every board asks for: trustworthy dashboards.

I built a Reporting Service that turns raw events into executive-level metrics.

📊 What went live

  • Daily snapshots using Spring Batch + SQL ON CONFLICT → no more recomputing six months of data.
  • Insight APIs powered by JPA projections + Redis cache → dashboards respond in milliseconds.
  • Self-service exports (PDF/CSV) via Thymeleaf templates + OpenPDF, with S3 upload and email delivery.
  • RBAC/OAuth2 → finance sees everything; leadership only what’s relevant.
  • Observability: metrics (reporting.batch.duration, reporting.export.count) feeding Grafana and Kibana.

💡 Why it matters

  • Provides full traceability — no hidden spreadsheets.
  • Frees squads from daily “can you pull this report for me?” requests.
  • Keeps OLTP healthy: aggregations and exports run in isolation.

📚 Full deep dive (+ code)


Next episodeDay 11/30 — Logging Service in Spring Boot