> ## Documentation Index
> Fetch the complete documentation index at: https://bobbysantiago.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Senior Rails Engineer, building AI into real apps

> 15+ years of Ruby on Rails, now consulting and integrating LLMs into Rails applications in a way that survives contact with production.

15+ years of Rails. Recently focused on integrating LLMs without turning a clean codebase into a science experiment.

I've spent most of the last two decades writing Ruby on Rails — from early-stage startups to SurveyMonkey. I like the unglamorous parts: the background job that has to be idempotent, the integration that can't drop a record, the migration that runs against a live database without anyone noticing.

For the last couple of years I've been **consulting and taking freelance Rails work**, experimenting with the latest agentic-AI frameworks, and building my own developer tooling. The throughline: **putting AI and LLMs into Rails applications in a way that survives contact with production.** Most "add AI to your app" advice stops at the happy-path API call — the interesting problems start right after: timeouts, retries, rate limits, cost, and keeping a slow model off your web request path.

## What I do

* **Rails, at depth.** Rails across many versions, including 7 and 8. PostgreSQL, Redis, background processing, RESTful APIs, and the service-object discipline that keeps a large app from collapsing under its own weight.
* **AI integration that doesn't rot.** Calling LLMs from app code, experimenting with agentic frameworks and RAG, and building my own tooling — while isolating that work behind background jobs with sane timeouts, retries, and rate limiting so the rest of the app stays fast and predictable.
* **Production judgment.** Testing and CI, encryption and PII handling, and knowing when *not* to reach for the clever option.

## Featured work

**[Adding AI to a Rails app the right way](/blog/rails-python-ai-services)** — a runnable reference implementation: Rails 8 calling an LLM service through a service object with retries, timeouts, auth, and rate limiting, plus a background-job example for moving the slow call off the request path — all wired up with Docker Compose. Runs locally in mock mode (no GPU or API key needed). Code on [GitHub](https://github.com/bullrico/code_examples).

## Right now

I'm currently **consulting and taking freelance Rails work**, and I'm open to a **senior Rails role where AI is part of the product** — somewhere I can bring 15 years of Rails judgment to LLM-backed features. Remote.

[Get in touch →](/contact) · [me@bobbysantiago.com](mailto:me@bobbysantiago.com) · [GitHub @bullrico](https://github.com/bullrico)
