Senior Software Engineer · AI automation & architecture

Christopher Alatorre

Systems and interfaces, built to the same standard.

Eight years shipping production software, backend to browser. Now building the AI layer on top: LLM pipelines, agents, and automations that take repetitive work off people's hands.

End-to-end: APIs to interface.

Christopher Alatorre

Senior software engineer across backend and frontend: PHP (Laravel, Symfony), Node.js, Vue and the web stack, with particular depth in relational database architecture. Currently at Firstbase.io (YC W21), on the Internal Tools team.

Owning both service boundaries and UI cuts handoffs. PSR-12, SOLID, OWASP-aware review, and production metrics: non-negotiable on the server and in the browser.

Leadership and delivery: five-engineer squads, mentorship, CI/CD, retrospectives, technical direction up to CTO. First place, 2019 generational project contest (Universidad de Guadalajara). Rigor and clarity as the default.

Systems that take repetitive work off people's hands.

At Firstbase I build the AI layer over US company formation and compliance. Not demos: pipelines that run against real filings, with real money and real deadlines behind them. Roughly 50 government letters classified per day, and around 50 automated filings a day landing in our operations channel.

  • Document intelligence. The IRS exposes no API, so its correspondence reaches the business only as scanned mail and inbound fax, with nothing attached to say which company it belongs to. The pipeline classifies the letter, resolves the entity against our records, and delivers it straight to the customer's dashboard. Read the case study.
  • Agentic browser automation. Playwright, Browserbase and Stagehand driving remote sessions across state government portals: incorporations, annual reports, EIN registration, business-name availability checks.
  • RAG and orchestration. Multi-step LLM orchestrators in Node.js, wiring Anthropic Claude and Google Gemini to vector stores and internal services on PostgreSQL.

Earlier, at CyberPuerta, I shipped their first production AI use case: a review-moderation service that decides whether a submitted review genuinely concerns the product, then approves it on its own, positive or negative.

The judgment stays human. Models get measured on latency, cost, privacy and failure modes like any other dependency, and nothing reaches production unreviewed.

Three systems, in detail.

The work is proprietary, so there is no repository to browse. Here is what the problems actually were and how they were solved.

Firstbase.io · 2024 to present

Turning government mail into structured data

An LLM pipeline that ingests IRS and state correspondence arriving as scanned paper and inbound fax, identifies what each letter is, works out which company it belongs to, and puts it on that customer's dashboard. Around 50 letters a day.

The problem

The IRS publishes no API and fires no webhooks. Its correspondence reaches a company formation business the same way it reaches everyone else: as physical mail and as fax. Neither carries any metadata about which of thousands of registered entities it concerns, and a compliance deadline missed because a notice sat unread is a real cost to a real customer.

Getting the documents in

Physical mail was the tractable half. Letters arrive at a mailbox address, the provider opens the envelope, scans the contents and posts them to a webhook.

Fax had no such path. The fax provider offered no webhook at all. What it did offer was the ability to forward every received fax to an email address, so I chained two providers into the integration that neither one shipped: I stood up an inbound mail server on Postmark, pointed the fax provider's forwarding rule at it, and consumed Postmark's inbound webhook. Fax provider to email, email to Postmark, Postmark to us. From that point both channels are the same document on the same queue.

Making sense of them

The unified flow calls Gemini with a purpose built prompt that first decides whether the document is government correspondence at all, because bank letters and unrelated post arrive through the same mailbox and have to be dropped rather than misfiled. For anything that is, the model extracts the letter type, the notice code, the entity it addresses and the specific mailbox it landed in. That gets matched against internal records, attached to the right company, and surfaced on the customer's dashboard for download.

  • Node.js
  • Google Gemini
  • Postmark inbound
  • Webhooks
  • PostgreSQL
  • Document classification

Braigo · Allypat · 2019 to 2023

30,000 designs into 30 million product images

A render farm built on Photoshop running headless in Azure, so a marketplace could show every design on every product at every repeat scale without manufacturing or photographing a single one.

The problem

Allypat was a community marketplace: artists uploaded artwork, customers bought it printed. Two ways to buy, and both multiplied the catalogue.

You could buy fabric by the metre, choosing how densely the motif repeated. Rolls are 1.40 m wide, so a repeat scale of two meant the motif tiled twice across a metre of length and as many times as fit down the width, and customers could go all the way to ten. Every scale is a visually different product.

Or you could buy the design already made into something: cushions, curtains, shirts, pillows, and the rest of the apparel and home catalogue. Roughly a hundred products.

Thirty thousand designs, ten repeat scales, a hundred products. Photographing the result would have meant physically producing tens of millions of items to keep in stock. That is not a budget problem, it is an impossibility.

What I built

Flat repeats were the easy case. Products were not, because each one needs the artwork to sit convincingly on a real object rather than as a flat rectangle. I worked with the design team so they produced lightweight Photoshop mockups: a blank product template that accepts an incoming design and composites it onto the finished item.

Then I stood up a virtual machine on Azure running Photoshop driven entirely through JSX scripting, and put it behind a job queue. When an artist's upload cleared content review, the system dispatched render jobs, the machine worked through them, and the finished images came back into the platform. By the time a customer picked a curtain, the image of that curtain in that design at that repeat scale already existed.

Result

A catalogue of 30,000 designs became over 30 million generated images, produced automatically. Moving rendering off the request path and rebuilding the product index around lazy loading, optimised images and caching took catalogue load from about 60 seconds to under one, at half the previous infrastructure cost.

The storefront supported both directions of the same catalogue: browse designs and then choose what to print them on, or browse products and then choose a design for them.

  • PHP · Laravel
  • Azure VM
  • Photoshop JSX scripting
  • Async job queue
  • MySQL
  • Redis
  • AWS

CyberPuerta · 2023 to 2024

Decomposing a live monolith at millions of requests a week

Leading a five engineer squad through an incremental migration from an unmaintainable monolith to microservices, plus a read architecture that put a denormalised NoSQL mirror in front of the relational source of truth.

The problem

CyberPuerta is Mexico's leading specialist electronics retailer, serving millions of requests a week against databases holding millions of records. The backend was a monolith that had grown past the point of being maintainable or extensible.

You cannot rewrite that and swap it in. It is a living system with customers on it. The migration had to happen underneath a business that never stopped trading, one piece at a time.

How we did it

I led the five engineer squad that carried out the decomposition, several of them more senior than me, working from the evolutionary patterns in Sam Newman's Monolith to Microservices. We defined service boundaries, settled on REST and JSON:API contracts, and held the line on SOLID and PSR-12 as the new services landed.

Not everything became a microservice. The admin surface stayed a modular monolith, because splitting it would have bought us distribution costs and no benefit. Knowing where to stop was part of the design.

The read architecture

Read latency was the other half of the work. Beyond caching, the piece I found most satisfying was a pattern borrowed from how the very large social platforms serve feeds: keep a relational database, MySQL with some PostgreSQL, as the transactional source of truth where every write lands with its integrity guarantees intact, then project that data into a denormalised NoSQL mirror and read replicas that the frontend reads from.

Writes keep the constraints. Reads stop paying for them. Services settled at around 150 ms under production load.

And one more thing

On top of that platform I shipped the company's first production AI use case: a review moderation service that judges whether a submitted review genuinely concerns the product, then publishes it on its own authority, positive or negative.

  • PHP · Laravel · Symfony
  • Microservices
  • REST · JSON:API
  • MySQL · PostgreSQL
  • Read replicas · NoSQL mirror
  • Redis
  • Team leadership

Roles & impact

  • Sep 2024 to present · Remote

    Senior Software Engineer · Internal Tools

    Firstbase.io · YC W21

    Automating US company formation and compliance with AI: an LLM pipeline that reads IRS correspondence arriving as scanned mail and fax, and agentic browser automations that file across state government portals. Around 50 letters classified and 50 filings automated per day. Node.js and PostgreSQL underneath. Case study.

  • Apr 2023 to Sep 2024 · Remote

    Senior Software Engineer · Cell Lead

    CyberPuerta

    Led the five-engineer squad that moved the core backend from a legacy monolith to clean microservices, at millions of requests per week. Read replicas and a denormalised NoSQL mirror behind it; ~150 ms under production load; the company's first production AI use case on top. Case study.

  • Sep 2019 to Apr 2023 · Remote

    Full Stack Developer → CTO

    Braigo

    Allypat, a marketplace for textile and product designers: 30,000+ designs rendered into 30M+ product images by an asynchronous Azure service driving Photoshop. Catalogue load from ~60 s to under 1 s at half the infrastructure cost. Led the five-person development department for the last year and a half. Case study.

  • Jul 2018 to Jul 2019

    Mobile Application Developer

    Universidad de Guadalajara, CUCEI

    iBike: React Native routing around Guadalajara's public bike-share stations, on a PHP/Laravel API. First place, 2019 generational project contest.

Education

  • 2015 to 2019

    Informatics engineering

    Universidad de Guadalajara

  • 2019 to 2020

    Specialization · Project management

    Universidad Panamericana

  • Certifications

    Transformational leadership, Tecnológico de Monterrey (2023) · TOEFL, ETS (2018)

Stack & practice

AI, APIs and data behind the scenes; Vue, Vite, and Tailwind in the UI. TypeScript where it earns its keep, same rigor from migrations to components.

LLMs · RAG · AI agents · Prompt engineering Playwright · Browserbase · Stagehand Anthropic Claude · OpenAI · Google Gemini PHP · Laravel · Symfony Node.js · REST · JSON:API · GraphQL Vue.js · Vite · Tailwind CSS JavaScript · TypeScript · HTML · Blade · CSS PostgreSQL · MySQL · Redis · SQL / NoSQL Microservices · Read replicas · Schema design Docker · GCP · AWS · Azure · CI/CD SOLID · PSR-12 · OWASP

People & process

Listening, alignment, candor: the human layer, separate from stack choices.

Leadership · Mentorship Communication · Active listening Stakeholder alignment · Clarity of expectations Written clarity · Async collaboration Feedback · Candor in review Facilitation · Retrospectives Cross-functional partnership Prioritization · Calm under pressure

References

Everything above was built inside companies, so the code is theirs and not mine to publish. The people I built it with are the next best evidence. These are the managers and leads I reported to, and they are welcome to be asked.

Colleague references from all three teams available on request.

Let’s talk

Consulting, collaboration, or a senior role: email or WhatsApp works.

Location

Guadalajara, México · GMT−6 · Remote

WhatsApp

+52 331 445 8908

Profiles

GitHub · LinkedIn