Skip to content

Engineering Log

Engineering history.

Product launches, architecture decisions, tooling built, and infrastructure changes — documented as they happened. For the raw commit-level feed see /whats-new.

Apps catalog system + portfolio polish

Why →Released apps and pre-release projects were blurring together in one /apps grid, undermining the credibility of what was actually shipped. Splitting them by release state — and giving every project a real detail page — turns the portfolio from a list into a navigable product.

  • New /apps section with 9 dedicated catalog routes split by family and release state. The naming convention (*apps = released, *projects = pre-release) scales: same pattern for Android, web, CLI, and QA families.
  • 38 statically-generated detail pages built via a shared CatalogProjectDetail component. Trade-off: kept /apps/web and /apps/android bespoke (Play badge + icons) rather than forcing them into the shared shell — preserves family-specific affordances.
  • Status + category filters on /apps/androidprojects via an extracted client component AndroidProjectsGrid; page itself stays server-rendered for metadata. This is the right split: keep metadata + data fetch server-side, extract only interactive grids to client.
  • OpenGraph images for 10 catalog routes via next/og. Validated that next/og's ImageResponse works under output: 'export' — generates PNG at build time, no runtime cost.
  • Structured data layer: ItemList on /apps index + each family; SoftwareApplication on every detail page; BreadcrumbList on all nested routes; Person on /#about with sameAs[GitHub, LinkedIn, Play]. Targets Google's rich-result eligibility for apps + knowledge panel.
  • Cross-linking: home LiveApps → /apps/android, home AppsInDev → /apps/androidprojects, blog posts ↔ apps by tag intersection (lib/related.ts scores normalized tag overlap).
  • About section: real photo, linkable stat cards, Hire me + Now CTAs, 2-row timeline (2012-2024 QA → 2024-Now SudarshanTechLabs). Replaces 3 dense paragraphs with scannable structure.
  • Honest copy pass across uses, now, About, AppsInDev, KonamiEgg, GitHubStats — replaced '21+ live apps' marketing claims with explicit '1 live, 21 in development' matching the new routing split.
  • Engineering health: Vitest + React Testing Library wired in (41 tests pass), 4 stateless components moved from client to RSC (Aurora, Stack, Timeline, MobileBottomNav), Lighthouse baseline expanded to cover /apps routes.

Engineering depth layer

Why →A portfolio of 'I shipped X' bullets reads like every other indie dev site. Each card now states the specific technical decision behind a system — why Firebase Realtime DB over Firestore, why per-app keystore isolation, why Workers cold-start matters for the contact form. The point is to make trade-offs legible.

  • Upgraded all major sections with real engineering specificity — Systems, Timeline, Stack, ReleaseDiscipline, FeaturedApp.
  • MyFamilyTracker: Firebase Realtime DB vs Firestore decision documented — RT chosen for stream semantics at sub-second propagation; Firestore would have been over-billed at the read frequency this app needs.
  • Android Release Systems card: per-app keystore isolation prevents a single compromise from cascading across 22+ apps. Zero-manual-step workflow means a tagged commit produces a signed AAB without intervention.
  • QA Intelligence card: 18 device environments named explicitly — Fire OS, Android TV, Tizen, webOS, dedicated signage players — because 'cross-platform' is meaningless without the surface area called out.
  • AI Automation card: each plugin framed around the specific failure mode it was built to solve, not the framework it uses. DroidForge exists because signing was breaking releases, not because Claude Code exists.
  • Infrastructure Systems card: Firebase RT/Firestore tradeoff, Cloudflare Workers cold-start rationale, GitHub Pages as zero-infrastructure policy hosting — three boring decisions that compound.

Blog automation pipeline operational

Why →Solo dev + 22 apps = no time to write. The pipeline runs Telegram → GitHub Actions → MDX → PR auto-merge unattended, but topic-deduplication and editorial gates keep quality from collapsing into AI slop. Built it because the alternative was 'no blog at all'.

  • Telegram bot → GitHub Actions → MDX → PR auto-merge pipeline running fully unattended. Author intent enters via a Telegram message; the post lands on main within minutes.
  • Post generation structured around real engineering topics — QA strategy, Android systems, Kotlin patterns — drawn from a curated topic queue, not free-form LLM drift.
  • Duplicate topic detection via check-post-topic.mjs prevents regenerating existing content. Editorial gate (validate-post.mjs) blocks merges on missing frontmatter, broken links, or unsourced claims.
  • 159 posts redistributed across Jan–Jun 2026 date range with no gaps or duplicates, so the archive reads like consistent output rather than burst-and-die.

KotlinSense — LSP bridge for AI coding sessions

  • KotlinSense Claude Code plugin shipped: bridges Kotlin Language Server diagnostics into AI coding sessions.
  • LSP-aware code suggestions now carry type information, import resolution, and real compile-time errors.
  • Built because AI code generation without LSP context produces suggestions that compile but fail at runtime in Kotlin.

PushyUncommit — multi-repo git intelligence

  • PushyUncommit shipped: scans 80+ repositories for uncommitted changes, analyzes diffs, generates atomic commit messages.
  • Android companion app included for mobile monitoring of repo state.
  • Built after commit context was being lost across the full fleet — no tool existed to surface this at scale.

PrivacyPilot — policy generation and GitHub Pages hosting

  • PrivacyPilot Claude Code plugin shipped: generates Play Store-compliant privacy policies and hosts them via GitHub Pages.
  • Zero-infrastructure hosting model — each app gets a policy URL at sudarshanchaudhari.github.io/[appname]-privacy-policy/.
  • Built because manual policy management across 22+ apps was producing compliance drift.

PlayCraft — Play Store publishing workflow

  • PlayCraft Claude Code plugin shipped: structured Play Store listing, release notes, and Data Safety compliance workflow.
  • Encodes the Play Store submission checklist into a repeatable, auditable process.
  • Built because Play Store compliance had no repeatable structure — each submission was manually reconstructed.

DroidForge — Android fleet signing and build orchestration

  • DroidForge Claude Code plugin shipped to the Claude Code plugin registry.
  • Manages per-app keystore isolation, signing config generation, version.properties management, and Gradle orchestration.
  • First Claude Code plugin built for the Android ecosystem — shipped because keystore signing errors were causing release failures.

Fleet reached 22 live Android apps

  • 22+ apps live on Google Play across seven categories: Family, Health, Productivity, Wellness, Finance, Utilities, Developer Tools.
  • Identical architecture across the fleet: Clean Architecture, Hilt DI, StateFlow, Room — zero-context-reload debugging standard.
  • Shared Gradle version catalog finalized — single source of truth for dependency versions across all repos.
  • Per-app keystore isolation established: each app has its own .jks with a unique alias and separate keystore.properties.

MyFamilyTracker — first production family-tracking app shipped

  • MyFamilyTracker shipped to Google Play: real-time family location sharing with Firebase Realtime DB.
  • Firebase Realtime DB chosen over Firestore specifically for stream semantics — updates pushed to clients without polling.
  • Background location collection implemented via WorkManager + ForegroundService to stay within Android OS restrictions.
  • Room DB added for offline resilience — location cache survives connectivity drops without any UI state loss.
  • Google Maps Geofencing API integrated for configurable safe zones with zone-enter/exit event callbacks.

First Android app shipped to Google Play

  • First SudarshanTechLabs app published to Google Play — SudarshanTechLabs established as a solo product studio.
  • MVVM + Clean Architecture + Hilt established as the base pattern from day one — chosen for debuggability, not compliance.
  • Kotlin + Jetpack Compose chosen over XML — Compose removes an entire category of state synchronization bugs.
  • StateFlow over LiveData: lifecycle-aware observable state without the observer lifecycle management overhead.
  • Full ownership model from architecture to production — no co-founders, no outsourcing, no handoffs.