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.

Portfolio metrics refresh

Why →The GitHub-derived headline numbers (repository count, total stars, and trailing-12-month contributions) drift as new work lands. The catalog counts stay honest automatically via a test guard, but these live figures have to be re-pulled from GitHub and updated in the single source of truth so the site keeps matching the real profile.

  • Repositories: 280+ total (up from 240+) across public and private, with 165 public (up from 163), refreshed from `gh repo list SUDARSHANCHAUDHARI`.
  • Total stars across public repositories updated to 165 (from 137) to match the live GitHub count.
  • GitHub contributions raised to 7,384 for the trailing 12 months (public + private) — updated both the credibility metric and the GitHubStats floor so the profile number is never undercounted by the public API.
  • All figures updated in lib/stats.ts, the single source of truth, so every page, chip, and metadata string stays consistent.

iOS + macOS: portfolio goes multi-platform

Why →The studio was Android-only in public. With 15 iPhone editions rebuilt natively in Swift and SwiftUI — plus a set of macOS desktop tools — the portfolio now spans mobile and desktop on both major platforms. The catalog, counts, and site copy needed to reflect that instead of reading as a single-platform Android shop.

  • Added the iOS family to /apps — 15 native iPhone editions (DreamWeave, FitQuick, FocusPulse, HabitForge, HydraTrack, MoodFlow, SleepSync, SpendWise, and more) at /apps/iosapps, each rebuilt in Swift + SwiftUI as the Android app's native counterpart.
  • Added the macOS family at /apps/macosapps — ClaudeWrangler, MyMacMario, PocketDeskiesMacOS, and VoiceOfIU — spanning menu-bar utilities, desktop experiments, and an AI companion.
  • Every iOS and macOS entry gets a statically-generated detail page and OpenGraph image via the shared catalog shell, and both families are wired into the sitemap (list + per-app routes) and /apps family totals.
  • Refreshed portfolio counts in the single source of truth (lib/stats.ts): 240+ repositories (137 public), 189 cataloged projects, 222 blog posts, and 11 domains now that iOS/macOS is its own platform track.
  • Corrected the GitHub contributions figure to 6,650 (last 12 months, public + private) to match the profile — the public API alone undercounts private work.
  • Added an 'iOS + macOS apps' credibility metric and threaded iOS/macOS through the site summary, GitHubStats copy, and the /apps 'how to add' docs in the README.

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 Android apps

  • Portfolio reached 22 Android apps: 1 live on Google Play and 21 in development.
  • 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.