Toolkit
Stack
What I build with, ranked by actual usage across 15+ projects. Not a wish list — a frequency map.
Primary Stack — used in most projects
TypeScript
11 of 15 projects
Primary language for everything. Strict mode. Type safety isn't optional when you're the only developer.
JWT Authentication
10 of 15 projects
Stateless auth across every backend. HS256 tokens, row-level security, rate limiting.
Claude API
9 of 15 projects
AI backbone. Sonnet for speed, Opus for depth. Tutoring, synthesis, analysis, document intelligence, vision.
React / React Native
9 of 15 projects
Component architecture for web and mobile. React 18 and 19. Expo for cross-platform. Radix UI and shadcn/ui for accessible primitives.
WebSockets
8 of 15 projects
Real-time everything. Live data feeds, multiplayer, collaborative features, streaming AI responses.
Tailwind CSS
8 of 15 projects
Utility-first. Fast iteration. Consistent design tokens. Dark mode by default.
Express.js
7 of 15 projects
Backend workhorse. REST APIs, WebSocket servers, file processing pipelines, AI proxy layers.
PostgreSQL
7 of 15 projects
Primary database. PostGIS for geospatial. Full-text search. Row-level security via Supabase. 35 models in the largest project.
Vite
7 of 15 projects
Build tool. Fast HMR, ESBuild bundling, clean dev experience. Replaced Webpack everywhere.
Also build in — used in multiple projects
Railway
6 projects
Primary hosting for backends. Docker deployments, persistent storage, easy scaling.
Prisma
5 projects
Type-safe ORM. Schema-first migrations. Generates TypeScript types from database schema.
RevenueCat
5 projects
Subscription management for mobile. Handles App Store and Play Store billing so I don't have to.
Supabase
4 projects
Hosted PostgreSQL with auth, real-time subscriptions, row-level security, and edge functions.
ElevenLabs
4 projects
HD voice synthesis, music generation. Three-tier voice quality for different use cases.
Stripe
4 projects
Payment processing for web apps. Webhooks, subscription billing, metered usage.
Vercel
4 projects
Frontend hosting, serverless functions, Next.js deployment. Fast CDN, automatic HTTPS.
shadcn/ui
4 projects
Copy-paste component library built on Radix UI. Accessible, customizable, no vendor lock-in.
Vitest
4 projects
Fast unit testing. Vite-native, compatible with Jest API. 196 tests in the largest project.
Specialized — deep expertise, fewer projects
Python / FastAPI
3 projects
Scientific computing backends. scipy, statsmodels, scikit-learn, pandas, numpy. 240+ statistical endpoints in one project.
Expo / React Native
3 projects
Cross-platform mobile from a single codebase. EAS builds for iOS and Android. File-based routing via Expo Router.
Docker
3 projects
Containerized deployments. Multi-stage builds (Node 20 Alpine). Reproducible environments.
Next.js
2 projects
Full-stack React framework. App Router, server components, API routes, ISR. Used for content-heavy sites.
Drizzle ORM
2 projects
Lightweight, type-safe alternative to Prisma. SQL-like API, minimal abstraction.
Playwright
2 projects
End-to-end testing. Browser automation, visual regression, CI integration.
One-of-a-kind — specialized tools for specific problems
CesiumJS + PostGIS
3D globe with 106 data layers. Geospatial queries, SGP4 satellite propagation, GWR statistics.
Neo4j + Sigma.js
50,000-node knowledge graph at 60fps. Parallel queries, Dijkstra pathfinding, WebGL rendering.
astronomy-engine
Client-side orbital mechanics. Keplerian calculations with full precession and nutation. 1-arcminute accuracy.
VADER + AFINN NLP
Sentiment analysis, TF-IDF keyword extraction, named entity recognition, Flesch-Kincaid readability. Real computation, not AI guesses.
HMAC-DRBG + SHA-256
Cryptographic randomness from device sensors. Physical entropy harvesting for provably unpredictable outputs.
Capacitor
Web-to-native bridge. Wrap web apps for iOS and Android distribution with access to native APIs.
How I choose tools
Boring where it matters, interesting where it counts. The database should be PostgreSQL because PostgreSQL works. The auth should be JWT because JWT is understood. The build tool should be Vite because Vite is fast. These aren't exciting choices. They're correct choices. Excitement goes into the problem domain — the statistical engines, the knowledge graphs, the entropy harvesting, the real-time data fusion — not the plumbing.
I trust battle-tested libraries (scipy, statsmodels, scikit-learn) over custom implementations. The innovation is the interface and the integration, not the underlying math. When PsyStat produces a t-test result, it matches SPSS because the computation underneath is scipy — the same engine the academic world trusts.
The right amount of complexity is what the problem actually requires. Three similar lines of code is better than a premature abstraction. A solo developer maintaining 15+ projects doesn't have the luxury of architectural tourism.