Backend & AI systems engineer — English / 日本語
TypeScript and React across the front end · streaming speech pipelines in Python ·
event-driven ingestion in Go | .NET services over well-modeled data —
and the realtime clients, maps and dashboards that sit on top of them.
github.com/jon-jc/fluxgate · Go GCP Pub/Sub PostgreSQL Cloud Run Terraform OpenTelemetry
Three stateless services that accept high-volume metric points over HTTP, publish them onto a durable event bus, aggregate them into event-time windows across a worker fleet, and serve the rollups back over a query API.
202 means the broker has it. The response is withheld until Pub/Sub acknowledges. The faster answer is to buffer in-process and reply immediately — which is a lie about durability, told at exactly the moment durability is the whole product.
Exactly-once accumulation under redelivery, via a delivery ledger keyed by (batch, window)
where the rollup and the ledger entry commit in the same transaction. Redelivery is normal operation
for a broker; double-counting a metric is not.
Partial success is reported, not rounded off. One bad point returns which points landed and why the others didn't, rather than rejecting the batch and making the client bisect it.
Cardinality is bounded by construction — labels come from route patterns, never raw paths, so a metrics backend can't be taken down by a caller with creative URLs. Circuit breakers turn a dependency outage into fast 503s instead of a timeout queue; a three-phase drain keeps deploys from shedding.
8,970 points/s sustained at p99 60.7 ms · watermark lag 4.2 s against a 10 s window · fuzz targets, integration tests against real services, and Terraform for the entire GCP footprint including per-service accounts, dead-lettering and four alert policies
Bounding-box spatial queries, RFC 7946 GeoJSON, statistical rollups, annual reports and CSV export across 11 OpenAPI-documented endpoints · clustered incident map, trend and substance analytics, URL-encoded shareable filter state, and an intake audit view
spillsense.vercel.app · src · C# ASP.NET Core EF Core SQL Server / SQLite Leaflet
A spill incident data management and analytics platform for Washington State, modeled on how spill-response programs actually work rather than on what a CRUD scaffold produces.
Auditable ETL intake. Every row is validated against its full rule set at once, and rejected rows are quarantined verbatim with each failure reason attached rather than dropped — because the row someone has to fix is the row you just deleted. Re-importing a file is idempotent by natural key.
Spatial validation at the boundary. Statewide WGS 84 bounds catch swapped or malformed coordinates before they reach the database; all 39 counties are seeded with FIPS codes and Department of Ecology regional assignments, so geography is reference data rather than free text.
Two deployment targets, one contract. An ASP.NET Core system of record owning the database and
intake pipeline, plus a serverless read replica serving a published snapshot — held together by 109
automated tests: xUnit integration tests running real migrations, and node:test contract tests that
stop the two hosts drifting apart.
NEO TOKYO TRANSIT · src · TypeScript Next.js React three.js React Three Fiber zustand
An explorable 3D map and journey planner spanning 22 lines and 269 stations across JR, Tokyo Metro, Toei, Yurikamome and Rinkai. Elevated rail, underground lines and interchange stations form a layered city that can be searched, filtered and used to plan a trip in English or Japanese.
A transfer is part of the route's cost. Dijkstra runs over a station × line graph, so changing lines incurs an explicit transfer penalty. Designated walking links connect nearby stations such as Tokyo and Otemachi. Results break the journey into line segments, stops, transfers and walking time, with curated exit guidance for the connections that need it.
The renderer and planner share geometry. Rail lines are cached Catmull–Rom curves through station coordinates at their elevation layers. Animated trains and route highlights follow those same curves; selecting a journey dims unrelated lines and emphasizes its endpoints and interchanges. The visual interface stays connected to the underlying network model.
Navigation works through search as well as the map. Japanese and romaji fuzzy search supports keyboard navigation. Station cards set an origin or destination, operator filters reduce visual clutter, and rail/subway views expose different layers of the network.
The data model is tested alongside the interface. Vitest checks dataset integrity, geographic projection and routing invariants; CI tests and builds the static application before deployment. Journey times are distance-based estimates, train movement is simulated, and exit guidance is curated.
japanese-live-transcriber.vercel.app · Python FastAPI Celery Redis faster-whisper UniDic Next.js Docker
A self-hosted Japanese→English video translator. Subtitles publish as the video processes, and every synchronized Japanese word stays clickable for readings, definitions, confidence and contextual examples. The complete translation path runs in your own containers — no hosted model API, no key, no metered service.
Playback never waits for inference. The worker prepares the first 12 seconds, then stays ahead with bounded overlapping audio windows pushed to the browser over SSE. Durable Redis snapshots and adaptive polling mean an interrupted connection recovers instead of restarting.
Morphology, because Japanese has no spaces. Fugashi + UniDic tokenization drives a locally indexed JMdict lookup with Tatoeba example sentences — readings, Hepburn, parts of speech, bilingual SRT export.
Work is deduplicated at the fingerprint. Public analyses are keyed by video ID and inference profile; concurrent requests for the same video share one in-flight task, tracking parameters don't fork it, and uploads never enter the shared cache.
Production ops, not a demo. PRs run lint, types, builds, dependency audits, analyzer tests, Compose validation, container builds and a same-origin health smoke test. Merges publish immutable images to GHCR with OCI SBOMs and provenance; deploys are opt-in to a labeled self-hosted runner behind a protected environment, with Caddy terminating TLS and everything else on a private network.
github.com/jon-jc/kotoba-studio · Screenshots & setup · Python TypeScript React PySide6 ONNX
A Windows desktop workspace that connects Japanese and English speech to reviewable text, AI conversations and development tools. I extended DeepSeek Harness and integrated OpenWhispr components to bring voice input, multiple model providers and desktop workflows into one application.
Model selection belongs to each conversation. Independent chats can use OpenAI, Anthropic Claude, Kimi, DeepSeek or local models concurrently. Provider and model controls are separate, the chat menu shows configured providers, and each conversation preserves its own selection. A code viewer, terminal and plugin system keep the surrounding development workflow close to the agent.
Local inference has an explicit setup flow. English defaults to Parakeet; Japanese uses Kotoba-Whisper, with other Whisper models available. Missing weights trigger a download prompt and progress display before transcription starts. GGUF support through llama.cpp, plus Ollama and LM Studio connections, lets users choose local execution alongside cloud APIs.
Voice stays reviewable before it becomes an action. Capture a microphone, system audio or an application process; import a recording; or use a global hotkey for dictation at the cursor. Review names, numbers and intent before sending a transcript to an agent. Evaluation exposes Japanese CER, English WER, transcription latency and real-time factor against supplied reference text.
Delivery includes the desktop lifecycle. The app ships as an installable Windows executable with English/Japanese controls, persistent chat views, user-selectable access policies and system-tray operation. Packaged-app checks cover actual Harness startup, workspace navigation, language switching and tray restoration, alongside focused UI and backend regression tests.
| Project | What it does | Stack |
|---|---|---|
| ChordLab · src | Music analysis entirely in the browser, nothing uploaded. Chord recognition over 145 states smoothed by a Viterbi decoder, Krumhansl–Schmuckler key detection, note-level transcription to playable guitar tab, MIDI export. FFT, chromagram, onset detection and pitch estimation written from scratch — zero runtime dependencies, all of it off the main thread in a Web Worker. | TypeScript Web Audio Web Workers DSP |
| LanguageRooms | Persistent practice rooms by language and CEFR level on a self-hosted LiveKit SFU: multi-party video and voice, shared whiteboard with photo upload, host controls, active-speaker detection and connection-quality indicators. Moderation, reporting and a review queue are a first-class subsystem rather than an afterthought. | Next.js LiveKit Prisma Postgres JWT |
| Tokyo Move-in Cost Calculator · src | Japanese leases front-load 4.5–6 months of rent. This models the entire 初期費用 stack — deposit, key money, agency, guarantor, insurance — against a choropleth of all 23 wards on live SUUMO / HOME'S data. Ward boundaries are compiled to ~28 KB of precomputed SVG paths at build time; 23 ward guides regenerate daily on ISR. Fully bilingual. | Next.js TypeScript ISR i18n |
| Portfolio · src | Content-driven site where projects, experience and skills are data — routes, sitemaps, metadata and per-project social cards all generate from it at build time. Command palette with fuzzy matching, pointer-tracking cursor, scroll-triggered reveals, hand-drawn SVG posters from seeded randomness, a print-optimized resume route. Every route prerendered, no client-side fetching. | Next.js 16 React 19 TypeScript Motion |
Front end — TypeScript, React 19, Next.js (App Router), Tailwind CSS, three.js, Motion, WebSocket & SSE, WebRTC/LiveKit, Web Audio & Web Workers, i18n, accessible and themeable UI
Backend & data — Go, C#, ASP.NET Core, EF Core, Python, FastAPI, Node.js, PostgreSQL, SQL Server, Redis, SQLite, Prisma, REST/OpenAPI, event-driven architecture, ETL pipeline design
AI & audio — streaming ASR, speaker diarization, LLM orchestration and guardrails, evaluation harnesses (CER/WER/DER, bootstrap CIs, regression gates), VAD and endpointing, DSP
GIS & visualization — Leaflet, GeoJSON, spatial queries, coordinate-system validation, choropleths, Chart.js
Delivery — Docker, Terraform, GitHub Actions, GCP (Pub/Sub, Cloud Run), AWS (ECS Fargate), Vercel, xUnit, pytest, Vitest, integration & contract testing, fuzzing
The language card is generated from the GitHub API and committed to this repo by a scheduled workflow — no third-party stats service to rate-limit or go down.
Open to software engineering roles in the US and Japan — 日英バイリンガル対応可。
Jonathancho.jc@gmail.com · LinkedIn · 日本語版


