Bikash Lama
Eight years turning ideas into reliable, scalable products — for teams and clients alike. Full-stack on Rails, Python, and Vue.js, with AWS infrastructure automated through Terraform. Lately: shipping production AI tools alongside leading delivery teams.
I'm a full-stack engineer and project lead in Tokyo, shipping with Ruby on Rails, Python & Vue.js on AWS infrastructure I automate with Terraform. Lately I've been leaning into AI-augmented development — Claude and Cursor in the daily loop, plus production tools built on Claude's API so a small team ships like a big one.
What I work with
Things I've built
Restaurant Management SaaS
Grew a small MVP into a multi-tenant SaaS over two years of continuous delivery — now integrated into an ecosystem where the same restaurant is discoverable and reservable across collaborating partner platforms.
- Google reservation flow + cross-platform listing — one restaurant is bookable from any partner in the ecosystem.
- AI-in-the-loop optimization: used Claude and Cursor to surface API bottlenecks and tighten hot-path UI renders.
- Multi-OEM architecture deployed via Terraform with a dev → staging → production CI/CD gate.
Reservations don't just hit our DB — they coordinate across partner systems, so consistency and latency are everyone's problem at once.
↗ Two-year client retention; scope grew from MVP to multi-OEM ecosystem product, with team standards keeping quality and delivery in lockstep as headcount scaled.
AI document translator (JP → EN)
An internal tool that translates any Japanese document — Excel, Word, drawio diagrams — to English via Claude on the fly.
- Format-preserving extraction across xlsx, docx, drawio — formulas, styles, and shape positions stay intact; only the human-readable text is replaced.
- Translation cache keyed on normalized source text + target language: identical strings are never paid for twice.
- Tiered model routing — bulk and low-complexity content goes through cheaper models; technical or mixed-domain text routes to the larger one.
Two engineering problems at once. (1) Translate only the human-readable text — Excel formulas, Word styles, and drawio layouts must survive untouched, so we built format-aware parsers that round-trip cleanly back to the source structure. (2) Keep the Claude bill bounded under heavy use — made cost a routing decision: every chunk hits the cache first, then routes to the cheapest model that can handle it.
↗ In daily use across the team for spec docs, customer materials, and architecture diagrams; outputs preserve the original template so they're ready to send, and per-document cost stays bounded thanks to cache hits + model tiering.
Live commerce & consultation platform
A WebRTC-based real-time consultation product that lets customers talk live to agents across sectors — banking advisory, telemedicine, retail product demos. COVID pushed demand sharply, forcing a hard-deadline reengineering of the thin MVP into a production-grade architecture without slowing the delivery cadence.
- Real-time video consultation over WebRTC + Twilio, shipped across banking advisors, online clinics, and apparel retail under one product surface.
- Re-engineered the MVP skeleton from the ground up as customer load grew — moved from 'demo works' to '100% uptime SLA' shape.
- Observability pipeline tuned for live-call triage: structured logs make it possible to chase a dropped call back to the exact request that failed.
A real-time call is the worst place to lose a request mid-flight. Designed a version-retention deploy strategy so every release leaves the previous build live for an interval — in-flight calls finish on the version they started on, no dropped sessions.
↗ Sustained near-100% availability across multi-sector clients over a 2-year run, with zero-downtime releases that never interrupted active sessions.
Things I've built · AI experiments
Personal projects — hands-on learning, not client work. Deep-dives on the blog.
Internal AI assistant — RAG with citation verification
A chatbot for internal document Q&A. The LLM writes the answer; my code checks every citation before the user sees it. Ungrounded answers get replaced with a refusal server-side.
- Streamed answers get replaced with a refusal if a parser can't tie every [N] citation to a real retrieved chunk.
- Refusal short-circuits before the LLM even runs when retrieval returns nothing above threshold — no tokens spent, no hallucinated citations.
- Per-user daily token caps enforced in application code. Every OpenAI call writes cost to a `usage_events` table for the admin dashboard.
Naive RAG lets the LLM narrate whatever it wants and hopes the citations are real. I wanted the opposite: the citation list is a set my code owns, the LLM can't manipulate it, and refusal is structural — not a prompt-cooperated 'please say I don't know'.
↗ Deployed on Vercel + Neon at ai-assistant.bikashlama.com. Cost is bounded per user per day; refusals happen before an LLM call whenever retrieval fails; the LLM has no way to lie about its sources without being caught server-side.
LLM harness pattern — eight rules for keeping AI honest
A Python script that drives a real browser via plain-English instructions. First draft was 80 lines and lied about everything. Rebuilding it produced a reusable pattern I now apply to every piece of LLM-touching code.
- Every tool call is validated by code; success is proven by re-reading state, not by the LLM's claim.
- Cost and iteration ceilings live in the harness — the LLM can't loop indefinitely on a broken action.
- Refusals short-circuit in code, not by prompt persuasion. Same pattern powers the RAG assistant's citation check.
The first working demo felt magical and quietly betrayed me the next day. It claimed successes it hadn't done, upvoted the wrong story, burned 30 calls looping on variations of the same bad action, and once replied in Nepali because I typed transliterated Nepali. Every failure pointed at the same question: how much can I trust the LLM's report of what it did?
↗ Eight design rules that now govern every LLM-touching piece of code I write, including the RAG assistant above. Written up as a reusable pattern in the blog post.
Where I've worked
Senior Software Engineer · Project Lead
Nov 2022 — Present- Full-stack engineering on the Restaurant Management SaaS — Ruby on Rails backend, Vue.js + Vuex frontend, AWS infrastructure — owning features end-to-end from data model and API design through UI implementation, testing, and deploy.
- Coordinated a 20-person team (engineers + QA) on the multi-tenant client SaaS — owning sprint cadence, release planning, feature scope, and the cross-partner integrations (Google reservation flow, cross-platform listing) that make the ecosystem work.
- Drove team-wide AI-augmented development — integrated Claude and Cursor into the daily workflow and codified a shared code skeleton and conventions, so velocity grows without compromising review rigor or post-incident traceability.
- Built an internal AI document translator (Claude API) that turns Japanese xlsx / docx / drawio files into English while preserving formulas, styles, and shape layouts — cache + tiered model routing keep cost bounded under heavy use.
- Standardized multi-tenant SaaS deploys with Terraform — dev, staging, and production go through the same modules; cutovers are debuggable and reversible.
Full Stack Engineer
Sep 2020 — Oct 2022- Led the rebuild of an in-house live commerce & consultation platform (WebRTC + Twilio) from MVP to production-grade as COVID drove demand sharply across banking, telemedicine, and apparel retail.
- Designed a version-retention deploy strategy that lets releases ship without dropping in-flight video calls — sustained near-100% availability across multi-sector clients over a 2-year run.
- Built observability tuned for live-call triage; integrated Stripe/PayPal payment flows and Twilio/WebRTC video infrastructure, powering 10k+ monthly transactions across the product.
- Designed PubSub/RPC messaging and JWT-secured public REST APIs for partner integrations.
Dispatch Web Engineer
Sep 2019 — Sep 2020- Dispatched to Rakuten's e-commerce team on a short engagement — built Python pipelines that mined trending Twitter terms and surfaced them as market signals.
- Output fed product and SEO decisions: which categories were heating up, which keywords to target, which themes the site should lean into.
Junior Software Developer
2017 — 2019- Two years on an e-commerce product as a junior engineer — shipped bug fixes and feature work under the team lead's direction, learning the day-to-day rhythm of keeping a live product moving.
Writing & notes
Education
Bachelor In Information Management
High School
Let's build something good together.
Got a question, a project, or just want to swap notes on building with AI? Drop me a line — I read every message.