James Langridge

I'm a software engineer with an unorthodox, self-taught background. As a humanities graduate (French) and former in-house commercial lawyer for a multinational publisher, I'm a creative problem solver. With deep experience in TypeScript (React, Next.js), and some exposure to Rust and Angular, I've also written a good amount of C# recently. Enjoying experimenting with AI-Assisted software engineering.

James Langridge
Runner (1092 km this year)Juggler (5 balls)Poker (shark)Vim (btw)

Selected Projects

I like to build products that solve real problems for users, even in my personal projects. I also like to dogfood the software I build to really understand and develop the product. For all my personal projects, see my GitHub. For professional projects, see my CV.

Personal Trainer Planner

A client management and scheduling system for personal trainers built with Next.js 15, PostgreSQL, and TypeScript.

Next.jsPostgreSQLTypeScriptReactContentful
Rain Or Shine

Strava app for enriching activities with customisable weather data.

Node.js (Express)PostgreSQLReactTypeScriptOAuth
Garmin Export Parser

Comprehensive TypeScript/JavaScript library for parsing Garmin Connect export files.

TypeScriptNode.jsGarminData Parsingnpm Package
Pi In The Sky

A full-stack Raspberry Pi camera application featuring motion/audio detection with push notifications, photo capture, and a PWA app.

Raspberry PiPython (Flask)PWATypeScriptReact
Bingo

A real-time multiplayer Progressive Web Application for creating and playing custom bingo games.

ReactNode.js (Fastify)Server-Sent Events (SSE)Redis pub/subPWA

Building

A C#/.NET APIthat aggregates Mars rover photos from multiple NASA endpoints and stores complete telemetry data in PostgreSQL, with REST/GraphQL API, panorama detection, and location-based search.

C#/.NETPostgreSQLEvent-driven architectureGraphQLNASA API

Reading

  • Designing Data-Intensive Applications by Martin Kleppmann
  • The Design of Web APIs by Arnaud Lauret
  • A Philosophy of Software Design by John Ousterhout