Online and for hire

Raymond Russell Dias

I build systems that talk to other systems — and then I explain them to people.

Full-stack Rails developer in the Hudson Valley, New York. I make systems that were never designed for each other agree — normalizing incompatible APIs, moving orders one way and menus the other without losing or duplicating either, keeping data in sync across parties who each think they are the source of truth. Restaurant technology most recently, travel before that.

Aspiring Agentic AI Coding Virtuoso. A person who can conduct AI agents: decompose problems, supply the right context, choose the appropriate level of autonomy, inspect outputs, detect plausible garbage, redirect agents, parallelize work, integrate the results, test them, and ultimately own the result.

Research, writing, and teaching skills — what a historian trains for, and what I bring to an engineering team alongside the code.

rdias23@gmail.com Résumé LinkedIn

01 Checkmate · 2019–2026 · Team Lead, Engineering

Making systems agree

Seven years of POS order injection — the seam between the apps people order food on and the terminals restaurants actually run. It is the least screenshot‑able work I have ever done, so instead of showing it to you, here is how it works. The domain is restaurants. The problem — two systems that were never built for each other, agreeing about money over a network — is ubiquitous.

Order and menu flow between ordering platforms, the integration layer, and point-of-sale systems Orders flow left to right from ordering platforms such as DoorDash, Uber Eats, Grubhub and ezCater, through an integration layer of two paired Rails applications, into point-of-sale systems including Toast, SpotOn and HungerRush. Order status and menu data flow back in the opposite direction. Delivery orchestration hangs below the integration layer. ORDERING PLATFORMS DoorDash Uber Eats Grubhub ezCater, et al. INTEGRATION LAYER TWO PAIRED RAILS APPS Normalize ONE COMMON SHAPE Map to the store ITEMS · MODIFIERS Inject & reconcile NO DUPLICATE TICKETS POINT OF SALE Toast SpotOn HungerRush …and the rest ORDERS STATUS MENUS Delivery orchestration COURIER DISPATCH · GEOFENCED NOTICES 1 2 3 4 5 6
Orders, inbound Status, back to the customer Menus, out of the POS

Six places where this gets hard. Click a number above, or read straight through.

01Every platform means something different by “cheeseburger”

An order arrives as JSON. That is where the similarity between platforms ends. They disagree about how to express a modifier, whether a modifier can itself carry modifiers, where tax lives, whether a discount attaches to the order or to the line item, and what a “special instruction” is allowed to contain.

So the first job is to flatten all of them into one internal representation that is strict enough to reason about and loose enough to survive a platform shipping a schema change on a Friday. Everything downstream depends on that shape being right, which means the normalization layer is where you want your tests, and where a bug is cheapest to catch.

02And every POS means something different by “ticket”

Now run it in reverse. The normalized order has to become a ticket that a specific POS will accept and that a specific kitchen will read correctly — with that restaurant's own item IDs, its own modifier groups, its own tax rules, its own tender types.

The mapping is per‑store, not per‑brand, because a franchise location will have quietly renamed half its menu. When the mapping is wrong the failure is not an exception in a log; it is the wrong food, in a bag, going out the door. That asymmetry drives most of the design decisions on this side of the system.

03Once we answer 200, the order is in our custody

When the ordering platform hands us an order and gets a 200 back, that response is a promise. The order is in our custody now. Whatever happens between us and the point of sale after that is our problem to solve, not the platform's and not the customer's. The ticket is going to reach the kitchen, by hook or by crook.

Most of the time it goes in clean, as a fully mapped ticket. When it doesn't, there is a ladder to climb down. An item that won't map goes in as an open item the kitchen can still read. A ticket that half-maps goes in as a hybrid, the mapped items alongside the open ones. A POS that won't take the ticket at all gets an email to the store so the food gets made while the automatic retries keep working, each one carrying the same order reference so nothing is cooked twice. And behind all of it there is a person: somebody fixes the mapping, re-sends the order, and confirms the success webhook went back to the platform so the customer's app is telling the truth. We have our ways.

04Telling the truth back to the customer's phone

Accepted, in progress, ready, picked up. Each of those has to travel back out to the platform the order came from, so that the little progress bar in someone's app is not lying to them.

The states don't line up cleanly between vendors, the transitions don't always arrive in order, and some POS systems will happily tell you an order is ready before anyone has touched it. Mapping a messy real-world lifecycle onto each platform's stricter one — without inventing information you don't have — is most of the work.

05The menu goes the other way, and never stops moving

Orders flow into the POS. The menu flows out of it, and has to be projected onto every platform the restaurant sells on, in each platform's own vocabulary. Modifier groups with minimum and maximum selections. Nested modifiers. Per‑platform price overrides, because delivery menus are marked up.

Then it changes. An item gets 86'd at 7pm on a Saturday and every platform needs to know now. Hours are per‑store and per‑timezone, holidays are per‑franchise, and a store that pauses for a rush has to come back on by itself. Menu drift is the quiet killer — nothing errors, the menus just gradually stop agreeing, and you find out from a customer.

06Somebody still has to drive it there

A restaurant taking an order on its own website still needs a driver. So the platform dispatches a third-party courier on the merchant's behalf, and now you are tracking a person moving through a city on top of everything else.

Live order management, status updates as the courier is assigned and picks up, and geofenced notifications that fire when the driver comes within a radius of the drop‑off. It is the one part of this system with a physical object moving through the world, which makes it the one part where the failure modes are the most fun to explain and the least fun to be on call for.

December 2025

Eight-hour credentials

Engineering got seventeen days' notice that IAM accounts and long-lived access keys were being switched off company-wide in favor of Google SSO — with credentials that expired every eight hours.

The clean fix was to let the applications resolve credentials from an AWS profile and refresh themselves. That meant bumping the AWS SDK, and therefore the Gemfile and Gemfile.lock of a Rails 4.2 codebase. With the cutover that close we decided together that it wasn't the month for a dependency upgrade — a fair call, and it meant somebody had to hold the workarounds instead.

This is the part of the job that can be invisible — and it is vital to the smooth functioning of the machine. How to open an SSO session, how to get eight-hour credentials into a local environment, how to reach an instance through Systems Manager rather than the console. I wrote it down — shell helpers for the routine parts, an article on the internal wiki for the rest — and was the person you asked when your development environment would not come up. Every long-lived codebase has this role in it. It is unglamorous, it is hard to put on a résumé, and a team without somebody doing it loses a great deal of time.

  • Ruby on Rails 4.2
  • PostgreSQL
  • Sidekiq
  • Delayed Job
  • RSpec
  • CircleCI
  • AWX
  • Datadog
  • Scout APM
  • AWS EC2
  • AWS Systems Manager (SSM)
  • AWS S3
  • REST
  • OAuth provider & consumer

02 Checkmate · Open API & POS Preparation

The specs

Two public documents — one for the ordering platforms, one for the point-of-sale vendors. Both were handed to me, and I carried them for years. Writing a specification for stakeholders to build against is the same job in any industry.

For an integration to work, two companies that have never met have to agree on what an order is. Sometimes that agreement is theirs, and sometimes it is yours.

The large ordering platforms and the large POS vendors already had APIs — some built for their own internal use, some already published for other partners. Integrating with them meant building to what they had, which is what the normalization layer in the previous section is for. Not all of it arrived as JSON posted to an endpoint, either: some came through a publish-subscribe queue, and some through parsing email.

The two documents were for the other direction. Open API told ordering platforms how to send us orders and keep their menus current — the shape of the JSON, authentication, and automatic menu updates delivered by webhook that you were expected to act on in minutes rather than hours. POS Preparation told point-of-sale vendors how they might shape their own endpoints for menu import, dining options, payment options, discounts, service charges, order calculation and order submission, “to whatever extent is reasonable and expedient.” Plenty of companies built to them.

Open API began with an API key and secret in the headers. When it grew into a developer marketplace that became OAuth 2.0 with Checkmate as the provider — scopes, app registration, token refresh. The section headings from the original are still in the current version: default modifiers, nested modifiers, special hours, alcohol items. The awkward cases outlive everything.

For a while the policy was simply this: build to our specification and we will work with you, even if you are just starting out and have hardly any customers. A separate application worked something like a school for new partners — test cases, configuration, and a sandbox that mirrored production. I didn't build that app. I joined the team that supported it, and I was on the other end of the questions when a partner's OAuth implementation didn't work. It was a genuinely generous policy, and small startups did take it up and get a route into restaurants they could not have reached alone. Good for them.

  • REST
  • JSON
  • OAuth 2.0 provider
  • Webhooks
  • API Blueprint
  • Postman
  • Sandbox environments
  • Partner support
  • Technical writing

03 Pictoura LLC · 2014–2018 · Full-stack developer

GYDR

A museum to my failed aspirations at a startup that no longer exists. I am showing it to you anyway, because I built almost all of it, and because the parts that were good were very good.

Pictoura began as a geo-tagged photo-sharing site for travel photography — Rails 3.2 on Heroku, a curated world gallery on an interactive map. Then we pivoted. The idea was that anyone with genuine knowledge of a place or a subject should be able to sell themselves as a guide, and the photo platform we already had became the raw material for it.

I renovated it into a two-sided marketplace: guide onboarding and profiles, a tour builder with an interactive itinerary authoring tool, availability and scheduling, custom tour requests and proposals, real-time messaging, payments, search, and video. The screenshots below are the real application, running on staging in 2017.

It never launched. The stakeholders fell out, the money stopped, and that was the end of it — not for any technical reason, which is either consoling or the opposite depending on the day. Dead a long time now, and dead enough that I can show you the whole thing.

  • Rails 3.2 → 4
  • Heroku
  • PostgreSQL
  • Backbone & Marionette
  • Elasticsearch
  • OpenLayers
  • Braintree
  • Pusher
  • vzaar
  • EvaporateJS
  • CarrierWave
  • Blitline
  • Geocoder
  • S3
  • jQuery & Underscore

04 Words

The documentation is the job

Research, writing, and critically engaging with the text. The examples below come from two places: the years I spent in graduate study of history, and the start-up where I wrote the business plan for a local tour-guide marketplace. It is the same muscle in both.

Course paper · History MA · Indiana University Bloomington

The Death of Alexander Hamilton: Constructing Meaning and Narrative from Chronicle

Given the same discrete set of building blocks Rogow and Fleming have constructed completely different structures, but both are equally as valid because both arrange them in a manner that is a recognizable story to its audience: one is a tragedy, the other is a romance. Neither is the “truth” in an absolute sense, nor could they possibly be, because the meaning of Hamilton's death is a human creation—the only hard fact in it being that a bullet entered Hamilton's body on July 11th 1804 and a short time thereafter his heart stopped.

Two historians, one archive, two different books: one a tragedy, the other a romance. I wrote it for a seminar on history and fiction, and it asks what a historian actually adds when no new facts have turned up. The answer, by way of Hayden White, is the shape of the story. Seven pages.

Seminar paper · History MA · Indiana University Bloomington

Jonathan Edwards: Scientist of the Soul

For Edwards, the quandary of the drunkard only represents an extreme type of us all; we are all free to do as we please, but we are not free to please as we please. In Edwards' judgment, the drunkard is not excused because of his disease; it is his disease itself that warrants condemnation.

A seminar paper arguing that an eighteenth-century Calvinist theologian should be read as a psychologist, a century and a half before the discipline had a name. It works through how Edwards thought we know, feel, and act, tests his account of the will against the twelve steps of Alcoholics Anonymous, and finds him anticipating Jung and William James. Seventeen pages, single spaced, fifty-nine footnotes.

Business plan · Pictoura LLC · 2017

A Rare Opportunity

Future historians will remember the early 21st century as the epoch wherein the promise of a global community finally came to fruition. What Napoleon failed to accomplish with bullets and bayonets, was instead wrought with TCP/IP packets and microprocessors. For those of us who've come of age during this transition, the juxtaposition is striking: we grew up using “road maps” and “pay phones,” but now live enmeshed within a worldwide cybernetic neurology—never lost, and always on the line.

The opening of the business plan I drafted for the GYDR project. Two pages. It argues that the sharing economy had only ever been applied to physical assets, and that the interesting version starts when you apply it to intangible ones.

Business plan · Pictoura LLC · 2017

After GYDR's First Steps: What Dreams May Come

Of course, that distant Shangri-La lies at the end of a very long and windy road. However, standing on our doorstep, knapsack at the ready and boots still unworn, we needn't fret about the likelihood of failure; should we gather the courage to step onto the road before us, we need only aim for the horizon, secure in the knowledge that all of life is an experiment—and, if that is our fate, we must do the best we can.

The closing section — the deliberately over-reaching one, where a business plan is allowed to describe the ten-year version of itself. Two pages.

Software design document · Pictoura LLC · 2017

The GYDR SDD

Cancellation Policy — GYDRs specify the Cancellation Policy on a per Tour basis. This setting is accessible within the “availabilities” section of the Tour Builder Environment. There are three Cancellation Policy options: “Flexible,” “Moderate,” and “Strict.”

A full design document for the platform above, written to its fifth draft. The glossary alone runs fourteen pages and defines every noun in the product — which is the part that actually matters, because a team that hasn't agreed on its nouns hasn't agreed on anything. The figures appendix benchmarks fifty pages of the running interface. The business plan alongside them is the draft I prefer — the director's cut, with the marketing and financial sections left out, because what I am showing you here is the writing.

Ray Dias — résumé

Your browser will not display the PDF inline. Use Download or Open in a tab above.