Weeradeth Supajirakit

Full-Stack Developer · 10 years of experience · Age 32

Scan · GitHub

Stack

Backend
NestJS · Express · Hono · Go · Python · FastAPI · TypeScript · Node.js · Swagger / OpenAPI · class-validator · Zod · Pydantic
Data
MongoDB/Mongoose · PostgreSQL (Kysely, SQLAlchemy async, Alembic) · pgvector · row-level security · Redis · BullMQ · pandas · NumPy
Frontend
React 19 · Next.js · Vite · Tailwind · shadcn · React Router · React Native · TanStack Query / Router / Table · Radix UI · Paraglide i18n · Recharts · lightweight-charts · Lucide · DOMPurify
Realtime
WebSocket (ws, socket.io) · Redis pub/sub
AI
Gemini · DeepSeek · RAG document retrieval · hybrid search (BM25 + vector + trigram, RRF, reranker) · local embeddings (EmbeddingGemma) · retrieval evals (MRR, nDCG) · LLM-as-judge · Model Context Protocol (MCP)
Integrations
multi-channel messaging APIs (LINE, with Facebook integration support) · TradingView market data · webhooks · QR slip reading (jsQR) · file uploads (multer)
Ops / security
Pino structured logging · Helmet · rate limiting (@nestjs/throttler) · Ed25519 request signing (RFC 9421) · Argon2id · AES-256-GCM · Standard Webhooks · scheduled jobs (@nestjs/schedule) · ESLint · Prettier
Testing
Jest · Vitest · pytest · go test (-race) · staticcheck · govulncheck · Testing Library · mutation testing · Supertest · jsdom · pyright · ruff · Newman
Delivery
Docker · docker-compose · GitHub Actions · gitleaks · Coolify · nginx
Infra / DevOps
Vultr VM · Google Cloud (Compute Engine) · Traefik (file-provider routing, hot-reload switches) · Cloudflare (proxy + origin firewall) · Backblaze B2 · SSH key-only hardening

Projects I've Developed

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.

Omni-Channel Chat & Commerce Platform · NestJS + React

A multi-account support and commerce platform where agents, AI and payments work from one console. It connects directly to each business's core customer API — signed, cached and normalised per site — and to its payment providers, so every conversation is answered with live account data, while ticket queues, counts and notices stay in sync across every agent in real time through WebSocket and Redis pub/sub. AI drafts replies grounded in each account's own documents (RAG), and slips are verified and campaigns sent from the same place. Channel-neutral from the data model up: it runs on LINE and supports Facebook integration through one channel registry, with Telegram for operator alerts. I own both the API and the console.

Project stack

System overview

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.

MindGrid — RAG Engine for Knowledge & Playbooks · Python + React

A self-hosted RAG (retrieval-augmented generation) engine that gives people, scripts and AI clients one governed place to ask a project's documents and run repeatable analyses on its live data. Answers cite their sources and are checked line by line; numbers come from code, never from a model. Designed and built end to end — data model, retrieval, security, console and deployment — and running on Coolify behind Cloudflare.

Project stack

System overview

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.

Market Data Service (z-service) — Python + React

A service that collects US stock price data from TradingView, calculates technical indicators and keeps the history in MongoDB, then supplies it to research scripts, reports and other systems through an API and file exports. I built the fetch scheduler, the API and a new React console that replaces the old dashboard.

Project stack

System overview

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.

Algorithmic Trading Platform (Z-Trader) — NestJS + React

An automated gold and FX trading system on the cTrader Open API. A NestJS service analyses the market, sizes each trade and places orders under hard risk rails; a React dashboard runs and audits it; an optional strategy runner (zTraderActor) signs its users in through the service. It trades on DEMO by default, and LIVE needs two explicit switches.

Project stack

System overview

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.


Mobile Applications — React Native (iOS + Android) + Go API

Aurum TV — Live TV App + Go API

Go 1.27net/httpExporeact-native-tvosexpo-videoDockerGitHub Actions

A live-TV player for Android TV and Apple TV, and the API that feeds it. The app is built for remote control first: channel rail with enlarged numbers, CH+/CH− without opening menus, air-mouse hover, a rail that folds itself away, Thai and English. The backend serves the channel list, plays every stream link to prove it works, and fails over to backups on its own.

Source · github.com/wsupajirakit/aurum-tv-backend · github.com/wsupajirakit/aurum-tv-app

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.

Per-app VPN / proxy client — Android

React NativeML Kit OCRJest

An Android client that routes selected apps through a chosen proxy, with on-device OCR (ML Kit text recognition) to read configuration from screenshots and images rather than making the user retype it. React Navigation, image picker, persisted settings, and a test suite.

Several of my systems are in production with real clients. If you would like to see this one running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.


Smaller Services

AI equity research agent — Python. Long-running agent that maintains its own state files between sessions.

Equity screener and automation — Python screening pipeline with symbol-health checks and scheduled watchlist updates.

Realtime WebSocket gateway — standalone ws + Redis + JWT service, kept separate from the API so a socket restart cannot take the HTTP tier with it.

Telegram automation over MCP — TypeScript service exposing its tooling through the Model Context Protocol.

AI messaging service — Node service on Google Generative AI.

Customer onboarding landing — Hono + TypeScript, with field validation that warns early and stays quiet while the user is still typing.

Analytics dashboard — React + Recharts with i18n.

Encrypted internal task board — a single static file, AES-256-GCM with PBKDF2 at 310,000 rounds; the deployed file contains neither plaintext nor a password hash.

Domain worker — Express + MongoDB background worker.

AI crew agent — Python agent running as a systemd service.

Chatwoot — forked, customised and operated in production (not authored).

Several of my systems are in production with real clients. If you would like to see any of them running or try it hands-on, I would be glad to arrange a demo or test access — please feel free to get in touch.


How I Work

Tests are part of the work, not an afterthought.

The suite is kept comparable in size to the code it guards, and it runs green before anything is called done.

Mutation testing on every feature.

Real code is broken on purpose; a test that stays green was measuring nothing. This caught a test that had transcribed the implementation instead of calling it — deleting the real feature still passed until the test was rewritten to invoke the shipping method.

Read the row before writing the code.

Field names are never guessed: a query on a field that does not exist returns null, and the feature disappears with no error to trace.

Schema changes are announced and approved first.

Code can be reverted; production data cannot. New fields are designed so existing rows already mean the right thing — no migration, no backfill.

Prove a new feature cannot reach an old one by sweeping the full cross, not by sampling.

Every combination of the old inputs against every shape of the new ones, asserting the old answer does not move. A sweep that finds nothing is a proof of independence; a sample that finds nothing is only an absence of evidence.

Establish who owns a failing test

by re-running an untouched earlier revision before attributing it — neither inheriting blame nor hiding my own breakage.

Keep files small with a ratchet.

A file that outgrows the limit is split rather than excused, and the exemption list is only ever allowed to shrink.

Write down why, not what.

Comments carry the decision and the way back out, so the next person can revert something safely without reconstructing the argument first.

✓