Skip to content
View sathishjayapal's full-sized avatar

Organizations

@SKMINFOTECH

Block or report sathishjayapal

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
sathishjayapal/README.md

πŸ› οΈ Sathish Jayapal – Laboratory of Systems & Resilience

Cloud Architect | Event-Driven Systems Builder | Marathon Runner | Learning in Public

I design distributed systems for cloud platforms and explore how resilience principles from endurance sports apply to building reliable software. This is my laboratory β€” where architecture thinking meets code, and theory meets the constraints of running real applications.


🎯 Where to Start

If you're interested in:

πŸ“ Event-Driven Systems & Distributed Transactions

β†’ Start with EventsTracker
A multi-service event ingestion platform exploring RabbitMQ choreography, ShedLock coordination, and Kubernetes operations. Self-hosted and deployed via a Portainer CI/CD pipeline, running Spring Boot 3.5.7, Java 21, and Spring Cloud Config integration. Recently added: correlation-ID propagation into the new centralized logging service. Built to answer: How do you handle distributed transactions and race conditions at scale?

πŸƒ Full-Stack Systems (Backend + Frontend)

β†’ Start with Runs App
The most complete end-to-end system in the lab: Spring Boot 4.0.1 backend + React 19/TypeScript frontend, Garmin FIT file import, Strava sync, ShedLock-scheduled jobs, RabbitMQ event publishing into the EventsTracker topology, and a full Docker Compose + Testcontainers setup. The clearest single repo to judge how I structure a production-shaped app end to end.

πŸƒβ€β™‚οΈ Analytics for Distributed Systems (via Running Data)

β†’ Start with Runs AI Analyzer (Active Development)
Using semantic caching (PgVector + Claude API + Ollama embeddings) to analyze running data as a testbed for RAG patterns and real-time anomaly detection. Accepts Garmin payloads, publishes RabbitMQ events into EventTracker topology. Recent work: async analysis job tracking (AnalysisJob entity with status polling), AI fallback between Anthropic and Ollama, Flyway migrations, Docker CI. Why? Because marathons taught me that resilience is a system property, not a component.

πŸ—οΈ Infrastructure as Code & Kubernetes Ops

β†’ Start with iAC-NikeRuns
Dual-cloud Terraform codebase provisioning the same microservices ecosystem on both Azure and AWS ACG sandbox β€” composable modules, a code-status diagram distinguishing active/standalone/legacy paths, and working around real sandbox restrictions (e.g. an SCP blocking rds:CreateDBInstance). Learning to go from "eksctl create cluster" to "infrastructure as a git-reviewed system."

πŸ€– Agentic AI for Engineering Workflows

β†’ Explore AI Agent Experiments
Auto-triaging stale branches, reconciling Terraform state with live resources, drafting ADRs from commit history. Early-stage exploration of how AI agents can reduce toil.


πŸ“š Architecture Deep Dives (Read First, Then Code)

I write longer pieces at sathishjayapal.me (canonical source) and cross-post to Medium @dotsky.

Featured Posts (Start Here)

β†’ See all posts


πŸ—οΈ What I'm Building Now

EventsTracker β€” Self-Hosted, Actively Deployed

A multi-service event ingestion platform with config server integration, deploy profiles, and Kubernetes-native design.

  • Why: To understand how production systems handle distributed transactions, race conditions, and resilience at small scale before enterprise scale.
  • Tech: Java 21 β€’ Spring Boot 3.5.7 β€’ Spring Cloud Config β€’ RabbitMQ β€’ PostgreSQL/Flyway β€’ Kubernetes β€’ Maven
  • Focus: Event-driven choreography, ShedLock coordination, zero-trust microservice security, self-hosted deploy pipeline.
  • Status: Core event ingestion stable; config-server integration tested; deployed via a GitHub Actions β†’ Portainer pipeline to a home-lab VM (not a commercial production environment); runs locally with spring profiles (local/prod).
  • Recent: Correlation-ID filter wired into the new centralized logging service; dev-up.sh consolidated onto shared Postgres/RabbitMQ infra; Run Journal Entry management (CRUD + embedding service).
  • Next: Zero-downtime deployments, comprehensive observability (metrics/tracing/logging), Kubernetes Helm charts.

β†’ Go to EventsTracker | Read the blog post


Runs App β€” Most Complete End-to-End System

The flagship full-stack app in the lab: running-activity tracker with Garmin FIT import, Strava sync, and event publishing into the EventsTracker topology.

  • Why: The clearest single repo to see backend, frontend, scheduling, and messaging working together as one system.
  • Tech: Java 21 β€’ Spring Boot 4.0.1 β€’ React 19 + TypeScript β€’ Tailwind CSS β€’ RabbitMQ β€’ PostgreSQL/Flyway β€’ Testcontainers
  • Focus: Garmin FIT SDK ingestion, ShedLock-scheduled import jobs, Spring Security (RBAC), RabbitMQ event publishing.
  • Status: Actively developed; backend (:8080) and React dev server (:3000) run side by side; CI builds Docker images.
  • Recent: Docker/Testcontainers version bumps; PostgreSQL env-var handling hardened; ACG/production .env support added to dev-up.sh.

β†’ Go to Runs App


Runs AI Analyzer β€” Active Development

A multi-service platform for ingesting Garmin running data, analyzing via Claude API, storing in PgVector, and publishing events.

  • Why: Marathons taught me that resilience is a system property. I'm applying that insight to real-time athletic performance analytics using RAG patterns.
  • Tech: Java 21 β€’ Spring Boot 4.0.1 β€’ Spring AI 2.0.0-M1 (Claude + Ollama) β€’ PGVector β€’ PostgreSQL β€’ RabbitMQ β€’ OpenAPI/Swagger
  • Focus: RAG-based semantic caching, async analysis job tracking, EventTracker integration (RabbitMQ topology), AI fallback between Anthropic and Ollama, Garmin payload compatibility.
  • Status: Core analysis stable; PgVector RAG cache working; EventTracker event publishing integrated; Ollama embeddings live; async AnalysisJob tracking with status polling; Docker CI active.
  • Recent: AnalysisJob entity + batch service for async run analysis; Flyway migrations; Run Journal event publishing; Docker build/push CI workflow.
  • Next: Kubernetes deployment (helm), multi-region event consistency patterns, anomaly detection for injury prevention signals.

β†’ Go to Runs AI Analyzer | Read the blog post


MyGithubCleaner (verbose-barnacle) β€” Active

A Spring Boot multi-module app that syncs, manages, and deletes GitHub repositories, integrated with EventTracker via RabbitMQ.

  • Tech: Java 24 β€’ Spring Boot 3.5.3 β€’ React 19 + TypeScript β€’ RabbitMQ β€’ Spring Cloud Config β€’ Spring Cloud Kubernetes Discovery
  • Focus: GitHub API integration, repo lifecycle management, event publishing to EventTracker topology.
  • Status: Actively maintained; recently updated for EventTracker RabbitMQ routing key changes and Java version bump to 24.

β†’ Go to MyGithubCleaner


DBCleaner β€” Active

A Spring Boot 4 / Java 25 application (scaffolded with Bootify.io) for database cleanup workflows with a Thymeleaf + Node.js dev server frontend and Spring Modulith structure.

  • Tech: Java 25 β€’ Spring Boot 4.0.6 β€’ Thymeleaf β€’ Testcontainers β€’ Spring Modulith β€’ Docker CI
  • Status: Past initial scaffold; CI/CD pipeline hardened (Docker Hub tagging, image verification, smoke tests), HikariCP tuning for its external datasource, home page showing live project statistics.

β†’ Go to DBCleaner


SathishLogger (sathish-projects-logger) β€” Active

A parameterized, Docker-based centralized logging service deployable once and reusable across all projects. Provides REST APIs for log ingestion, correlation ID tracking, and log aggregation.

  • Tech: Java 21 β€’ Spring Boot 3.5.9 β€’ Docker Compose β€’ AOP-based correlation tracking β€’ Flyway
  • Status: Repo renamed to sathish-projects-logger; Flyway migration for the log_entries schema landed; CI/CD pipeline rebuilt with dynamic image naming, JAR verification, and smoke tests; first consumer (EventsTracker) now sends correlation IDs to it.

β†’ Go to SathishLogger


iAC-NikeRuns β€” Dual-Cloud Terraform, Active

Reverse-engineering cloud-click infrastructure into clean, versioned Terraform modules across Azure and AWS.

  • Why: Too many teams run "cloud click-next" deployments. This is how you move from ad-hoc to reviewable infrastructure.
  • Tech: Terraform β€’ AWS (EC2, planned EKS/MSK/Aurora) β€’ Azure Container Apps β€’ Kubernetes β€’ Infrastructure as Code
  • Status: Azure stack composed as one root module; AWS modules applied independently under aws-modules/, with a maintained code-status diagram (active/standalone/legacy) since the repo carries multiple approaches to the same ACG sandbox SCP restrictions. Recently extended with database resources for the my-github-cleaner and dbcleaner projects.

β†’ Go to iAC-NikeRuns | Read the blog post


Agentic AI Experiments β€” Early Stage

Exploring AI agents to reduce engineering toil:

  • Auto-triaging stale branches and PRs
  • Reconciling Terraform state with live Kubernetes/EKS/AKS resources
  • Drafting ADRs and changelogs from commit history

β†’ Browse AI experiments


πŸ’» Technical Comfort Zone

Languages & Frameworks
Java (21/24/25) β€’ Spring Boot β€’ Spring Cloud β€’ Spring AI β€’ REST APIs β€’ Event-Driven Architectures

Cloud & Infrastructure
AWS (EKS, RDS, S3, ECS) β€’ Azure β€’ Kubernetes β€’ Terraform β€’ Infrastructure as Code β€’ Spring Cloud Config

Data & Patterns
PostgreSQL β€’ RabbitMQ/Kafka β€’ Distributed Transactions β€’ PGVector/Semantic Search β€’ Real-Time Analytics β€’ RAG Caching

Architecture Styles
Microservices β€’ Event-Driven β€’ Domain-Driven Design β€’ CQRS β€’ Spring Modulith β€’ Zero-Trust Security

Java Spring Boot Kubernetes Terraform AWS PostgreSQL RabbitMQ


πŸƒβ€β™‚οΈ Beyond Code

Marathoner: 9 marathon finishes including the Flying Pig Half Marathon (Cincinnati, May 2026). Now in post-race recovery and planning the next training cycle. Every long run is a lesson in system design β€” feedback loops, resilience, constraint management, recovery.

Thesis: The principles that make distributed systems resilient (redundancy, graceful degradation, observability, feedback loops) are the same principles that make training cycles effective. I explore this at the intersection of both domains.

Location: Madison/Sun Prairie, Wisconsin. Always happy to discuss architecture over South Indian coffee.


🌐 Stay Connected

πŸ“ Blog β€” sathishjayapal.me (canonical source of all posts)
πŸ”— Medium β€” @dotsky (cross-posted, always with canonical link back)

Interested in collaborating, discussing architecture, or connecting on cloud modernization?
β†’ Open an issue on any repo or reach out at contact@sathishjayapal.me


πŸ“Š Recent Activity

  • EventsTracker: Correlation-ID filter feeding the new logging service; deploy-to-Portainer workflow tuned; consolidated onto shared Postgres/RabbitMQ dev infra
  • Runs App: Docker/Testcontainers hardening; ACG + production .env support in dev-up.sh; Axios request/response handling enhanced
  • SathishLogger: Renamed to sathish-projects-logger; Flyway migration for log_entries; CI/CD pipeline rebuilt with JAR verification and smoke tests
  • DBCleaner: CI/CD hardened (dynamic image naming, Docker Hub tagging); HikariCP tuning; home page now shows live project stats
  • Runs AI Analyzer: Async AnalysisJob entity + batch service; AI fallback (Anthropic ↔ Ollama); Flyway migrations; Docker CI active
  • MyGithubCleaner: Java 24 upgrade; EventTracker RabbitMQ routing key alignment; env file consolidation
  • iAC-NikeRuns: Terraform database resources added for my-github-cleaner and dbcleaner
  • Infrastructure: consolidated-postgres dev-up scripts extended across projects; ACG sandbox Terraform fixes
  • Running: Post-Flying Pig (May 2026) recovery; planning next training cycle

πŸ“ How to Use This Space

βœ… Learn from the code: Each project has a detailed README explaining the "why" alongside the "how."
βœ… Read the architecture posts first: Blog posts provide context for why code is structured the way it is.
βœ… Follow the learning journey: From CKAD exploration β†’ EventsTracker β†’ Kubernetes ops patterns β†’ RAG systems.
βœ… Engage & discuss: Open issues for questions, architecture debates, or alternative approaches.
βœ… Contribute: Forks, PRs, and improvements welcome.


πŸŽ“ What This Lab is About

This is not a portfolio of finished products. It's a learning laboratory in public:

  • Real constraints (Kubernetes, distributed transactions, RAG patterns, Spring AI integration)
  • Real decisions (documented in Architecture Decision Records)
  • Real friction (MapStruct compilation, reconciling Terraform state, Ollama embedding complexity)
  • Real outcomes (blog posts, working applications, operational insights)

The goal is to show how I think, not just what I've built.


Built with β˜• and πŸƒ. Always learning. Always building. Always honest.

Pinned Loading

  1. runs-ai-analyzer runs-ai-analyzer Public

    Java

  2. eventstracker eventstracker Public

    Events Tracker Repo

    Java

  3. runs-app runs-app Public

    Runs-App

    Java

  4. iAC-NikeRuns iAC-NikeRuns Public

    HCL 1

  5. consolidated-postgres consolidated-postgres Public

    Multi-project orchestration scripts for local dev environment

    Shell