LLM features inside Rails
Designing OpenAI-powered features for production Rails apps — content generation, structured extraction, evaluation harnesses. The boring, production-shaped half of AI work.
I'm Andy Wang, a full-stack Ruby on Rails engineer based in Beijing (UTC+8). Twenty-one years writing code for the web, eighteen of them in Rails, and the last few shipping OpenAI-powered features into production Rails apps. I work remotely with US and European teams as a long-term contractor.
Now / what I'm working on
Designing OpenAI-powered features for production Rails apps — content generation, structured extraction, evaluation harnesses. The boring, production-shaped half of AI work.
Building Hotwire-driven, SPA-like portals on Rails — recent work includes a JSON schema management tool and admin surfaces that feel native without leaving the Rails monolith.
Translating chapters of the Diamond Sutra and the Heart Sutra for my own study. A long-running, life-long-learner project that quietly informs how I think about clarity in code.
About
I've been a Rails developer for the entirety of Rails being a thing people did for a living — and a remote one for almost as long. Most of what I do is the unglamorous, careful work of building maintainable web applications for teams that need to keep shipping.
I started writing code professionally in 2005, building projects for Japanese customers in VBS, C#, Java, and HTML. In 2008 I went all-in on Ruby on Rails at Idapted, leading a small team on a world-class English-learning platform. Since 2011 I've worked remotely full time — first at Intridea in the D.C. area on more than ten client projects, then on a long string of contracts including Spire Health, imToken, and a multi-year run owning the codebase for a Stripe-powered swimming-lessons marketplace.
In the last few years my focus has shifted toward AI in Rails. Not the demo kind — the kind that sits inside a production app, talks to the OpenAI API, and has to behave under load. I work on the Rails seams: tool inputs, structured outputs, retries, observability, and the unsexy middle layer between the model and the user.
Outside work I read, walk, and translate Buddhist sutras for my own practice. A full-stack engineer by day; a life-long learner by night.
What I do
Senior-level Rails engineering, end to end. Greenfield products, long-term ownership of mature codebases, and the awkward middle: the app that worked fine until it didn't.
OpenAI-powered features inside Rails apps — content generation, structured extraction, third-party integrations for richer output. The production-shaped half of AI work: retries, evals, observability, guardrails.
Stripe integrations with real business logic — subscriptions, marketplace splits, refunds, dunning. Recently spent two years on a swimming-lessons marketplace combining scheduling, payments, and admin reporting.
Rails-based content systems with sprawling third-party reach — content publishing tools that integrate with Google Docs, Medium, HubSpot, and WordPress; customizable CMS + payment combos for scheduled, payable interactions.
Clean REST & GraphQL APIs, plus the messy half: integrating with payment providers, blogging platforms, calendar systems, and assorted vendors who consider documentation optional.
React for the parts that genuinely benefit from React; Hotwire/Turbo for the parts that don't. I don't believe in framework loyalty — I believe in shipping the thing.
A short timeline
Stack
Words
Andy is very intelligent and has a strong understanding of web development principles. I've always been comfortable handing him a project and knowing that he'll be able to solve even the most difficult problems.
Andy is an experienced software engineering professional that excelled at tackling every single challenge thrown at him. I had witnessed him pick up several different codebases and be instantly productive.
A superstar with a finely honed ability to deliver well-tested, well-executed code. Consistently amazed with his ability to think creatively to solve hard problems with the resources on hand — usually while juggling two or more projects at once.
Any kind of bug or feature he took on was done quickly and done well. He communicated very clearly when he needed clarification. I never needed to worry that something would get done.
Best for long-term contracts where the work is real and the codebase is going to outlive the conversation. I usually take one or two clients at a time. UTC+8, but well practiced at meeting US/EU teams in the middle.