TypeScript on the Server, Not Just the Browser
Node.js put JavaScript on the server. TypeScript made it reliable. I wrote about why Node.js is my go-to for backend development. I build backend systems, APIs, and full-stack applications with TypeScript running across every layer of the stack. One language from the React frontend through the API middleware to the database queries means fewer integration bugs, faster development, and a codebase any TypeScript developer can pick up and maintain.
Every Node.js project I deliver ships with strict TypeScript configuration, Zod runtime validation on all external inputs, and typed database queries. The compiler catches type mismatches before code reaches production. Runtime validation catches malformed data at the API boundary. Between the two, an entire category of bugs never makes it past development.
Express, Hono, and Cloudflare Workers
I choose the framework based on your deployment target. Express for traditional Node.js servers that need long-running processes, WebSocket connections, or filesystem access. Hono for edge-deployed applications on Cloudflare Workers in production that need sub-50ms response times and automatic global scaling. Both are lightweight, well-tested, and have mature ecosystems.
Sacramento Groceries runs its entire backend on Cloudflare Workers with Hono and a D1 database. The API handles price comparisons across multiple stores with responses under 50ms from any location. Zero cold starts, zero server management, and the infrastructure scales automatically. ContentMK uses Express on a traditional Node.js server because it needs long-running WordPress sync operations and local SQLite database access.
APIs That Other Systems Depend On
Most Node.js projects I build are API-driven systems that connect multiple clients and services. I cover the fundamentals of API development in a separate guide. A React frontend calls the API for user data. A mobile app calls it for product listings. A webhook receiver processes events from Stripe or a partner system. The Node.js API is the central hub that enforces business logic and keeps all clients in sync.
Amazon Creators API is a TypeScript MCP server that wraps the Amazon Product Advertising API into a clean, typed interface. It handles authentication, request signing, response parsing, and error handling so consuming applications get structured product data through a simple function call. That is the level of API design I apply to every backend project.
Database Design and Data Modeling
The database schema is the foundation of every backend system. I design the data model before writing application code. Entity relationships, indexes, constraints, and migration strategies are documented and reviewed before the first table is created. ContentMK has a 13-table schema that manages content, tags, media, AI configurations, and WordPress sync state across isolated workspaces. That schema was designed upfront, and it has not needed restructuring as the application grew.
I use SQLite for applications that need simplicity and portability, PostgreSQL for applications with complex queries and high concurrent writes, and Cloudflare D1 for edge-deployed backends. Every database integration uses parameterized queries and typed models. No raw SQL strings concatenated with user input.
Working with Existing Codebases
Not every project starts from scratch. I work with existing Node.js applications that need new features, TypeScript migration, performance optimization, or architectural cleanup. Common engagements include adding TypeScript to a JavaScript codebase, building new API endpoints on an existing Express server, replacing callback patterns with async/await, and improving error handling and observability.
I review the existing code before proposing changes. Every modification ships with the same TypeScript strictness and testing standards I apply to greenfield projects. For applications that need ongoing development and SEO, I partner with Frog Stone Media for growth strategy alongside the technical work.