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.
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.