aanish.com | Los Angeles

Aanish Sachdev

type Aanish = ProductEngineer & AIHealthcareBuilder & OpenSourceMaintainer;

I build clinical software, agent tooling, and typed infrastructure for healthcare products that need to be reliable from day one.

At Simplest Healthcare, I work as a co-founder and full-stack engineer: turning clinical workflows, healthcare data, and compliance constraints into production software.

Los Angeles | USC CS '26 | available for 2026 full-time software engineering roles | healthcare data / AI tooling / developer infrastructure

Role fit

"full-stack software engineer" | "AI / developer tooling engineer" | "healthcare data / FHIR systems engineer";

Best fit: small teams building product-critical software across healthcare data, AI agents, and typed infrastructure.

Proof of work

CoralEHR

live

A behavioral-health EHR for private-pay clinicians, built on FHIR R4 with clinician workflows at the center.

status:
'live',
stack:
[ 'React', 'TypeScript', 'AWS Lambda', 'API Gateway', 'Cognito', 'HealthLake FHIR R4', 'DynamoDB', 'CDK' ]

USC x Techstars University Catalyst | 80+ clinician interviews | live FHIR R4 on AWS with Cognito RBAC, relationship-based access checks, AuditEvent logs, and clinician-reviewed AI workflows over HealthLake

Live product Case study

TicVision

live

Tic tracking for remote therapeutic monitoring, so clinicians can monitor treatment between sessions.

status:
'live',
stack:
[ 'React Native', 'Expo', 'AWS serverless', 'API Gateway', 'Cognito' ]

250+ downloads | presented at TIC-CON 2025 | exploratory ML study on de-identified tic-intensity patterns

Live product Case study

Open source

3 shipped | 2 building

aanishs/em-dash

most starred shipped TypeScript ★ 9

Compliance assistant for Claude Code that scans infrastructure, drafts fixes, and produces signed SOC 2, HIPAA, and GDPR evidence.

fhir-craft

building TypeScript

TypeScript builders for app-level FHIR R4 resource shapes. Write createPatient(), not raw FHIR JSON. Define your app's FHIR vocabulary once with defineCode(); reuse the same builders across the app.

aanishs/dunning-kruger

shipped TypeScript

Interviews you about your own codebase, scores your answers against the source with file:line receipts, and plots what you think you understand against what the code proves.

aanishs/simply-html

shipped TypeScript

Turns agent-written markdown into living, PIN-gated HTML pages. The model writes the content; it never writes the JavaScript.

bonfireDB

building TypeScript

Typed clinical primitives on Postgres with FHIR R4 export paths underneath, so teams can build FHIR-aware apps without starting from raw resource JSON.

Type safety loops

Type safety turns assumptions into contracts. Compilers, builders, validators, and CI turn those contracts into feedback loops. Four of them:

01 the origin: API drift

I learned this wiring a TypeScript frontend to a separate backend through an OpenAPI contract. (the pattern came from CoralEHR's frontend/backend contract work)

// the backend renamed a field:
type User = { id: string; displayName: string };

// the frontend still reads the old name:
user.name
//   ~~~~ Property 'name' does not exist on type 'User'.

TypeScript turns a rename into a compiler-guided checklist.

02 what TypeScript achieves: impossible states

loose

type State = {
  loading: boolean;
  error?: string;
  user?: User;
}; // loading + error + user can all be true at once

typed

type State =
  | { status: "loading" }
  | { status: "error"; message: string }
  | { status: "success"; user: User };

Good types make invalid states unrepresentable, a class of tests you never write.

03 how a compiler thinks: type-loupe

Edit the code. A hand-built checker runs live in your browser. No TypeScript shipped; type-loupe is its own tiny parser and checker.

// symbol table

  • type User: { name: string }
  • let user: { name: string }

// diagnostics

  • 2:26 user.name: expected string, found number

04 the agent loop: model drafts, compiler checks

Watch it run: the agent writes FHIR, the compiler rejects it, the agent patches the code with fhir-craft, and the check passes. (fixture replay; real tool output; no live model)

Animation: an agent drafts a FHIR Patient with name as a string; the compiler reports it is not assignable to HumanName[]; the agent reasons and rewrites it with fhir-craft's createPatient; the type check passes. Loops continuously.

Contact

If you're hiring for healthcare software, AI tooling, developer infrastructure, or high-trust systems, email me.

// history: internships, before the 0 to 1
  • ArcOne ML Engineer Intern | Summer 2025 | Austin, TX Built an AutoML churn pipeline (AutoGluon + MLflow) and a LangGraph agent that surfaces at-risk accounts.
  • TimeRewards Software Engineer Intern | Summer 2024 | Austin, TX Salesforce to Slack integrations on AWS Lambda + Node.js with OAuth-secured workflows.
  • Hackathons National hackathons, India 1st place; top 100 of 50,000+ teams.

Side projects

Stack

type tools = 'TypeScript' | 'React' | 'React Query' | 'React Native' | 'Node' | 'AWS Lambda' | 'API Gateway' | 'Cognito' | 'DynamoDB' | 'S3' | 'HealthLake / FHIR R4' | 'CDK / SAM' | 'LangGraph' | 'AutoGluon' | 'MLflow' | 'Playwright' | 'OAuth2' | 'CI/CD';

Generated types

The site exports a declaration file from the same project data, content routes, and local TypeScript packages that render this page.

declare namespace Aanish {
  type ProjectName = "bonfireDB" | "CoralEHR" | "dunning-kruger" | "em-dash" | "fhir-craft" | "pokerinsite" | "simply-html" | "TicVision" | "wavelength";
  type CaseStudyRoute = "/case-studies/coralehr" | "/case-studies/ticvision";
  type LocalPackageName = "fhir-craft" | "type-loupe";
}

Open aanish.d.ts