Skip to content
Open source

Five packages, zero vaporware.

Everything below is published on npm, documented, and running in production somewhere. Two of them you can run on this page, right now.

doclens

Universal document viewer for the web

One component, any file. Renders PDFs, spreadsheets, presentations, code, media, and more — with full-text search, OCR, zoom, and dark mode. 14+ formats, tree-shakeable, framework-agnostic.

TypeScriptReactWebAssemblyTesseract.js
npm install doclens

pdfnova

PDFium-powered PDF library for JavaScript

Chrome-grade PDF rendering via WebAssembly with full TypeScript types. Text extraction, search, bookmarks, annotations, forms, and digital signatures. Powers doclens under the hood.

TypeScriptWebAssemblyPDFium
npm install pdfnova

testpilot-ai

AI-powered test generation that actually works

Generates, runs, and auto-fixes tests in a loop until they pass. AST analysis via the TypeScript compiler API, coverage-gap filling from lcov/cobertura, works with any LLM.

TypeScriptASTLLM APIsVitest/Jest
npm install -D @amit641/testpilot-ai

aiclientjs

Lightweight universal AI client for JS & TS

Zero dependencies. Works everywhere — browser, Node, Deno, edge. Unified API for OpenAI, Anthropic, Google, and any OpenAI-compatible provider. Streaming, tool calls, structured output.

TypeScriptZero-depStreaming
npm install aiclientjs

llmmeter

Drop-in observability and cost tracking for any LLM SDK

One line of code to track spend in USD, token counts, latency (TTFT), and error rates for any LLM SDK. Costs computed locally from a versioned price table, written to a sink you control.

TypeScriptOpenAI / AnthropicSQLite
npm install @amit641/llmmeter

Don’t take my word for it

This is my resume, rendered live in your browser by doclens + pdfnova — the exact packages above, installed from npm. PDFium compiled to WebAssembly, running right here.

One API, every provider

Switch the provider. The code doesn’t change — that’s aiclientjs. Zero dependencies, runs in browser, Node, Deno, and edge runtimes.

import { createClient } from "aiclientjs";

const ai = createClient({
  provider: "openai",
  model: "gpt-4o",
});

// Same streaming API for every provider — no SDK juggling.
for await (const chunk of ai.stream({
  messages: [{ role: "user", content: "Explain microfrontends" }],
})) {
  process.stdout.write(chunk.text);
}