CMS / Shopify / Stripe

Available - Remote - UTC-6

Custom CMS, Shopify and Stripe for businesses that already sell and have outgrown the template.

I am Angel Mora, a senior Ruby on Rails developer. I build three things: the back office that runs your content and catalog, the Shopify store that behaves like your actual operation, and Stripe billing with idempotent webhooks reconciled against your database. Not a payment button held together with tape.

Who it is for
Businesses already billing
How I deliver
Closed scope or retainer
Code ownership
Yours from commit one
01 The problem

The problem is not your product. It is the software layer that sells it.

Shopify that will not bend

The theme held until the catalog grew. Now six apps fight each other, a discount only half works, and nobody can touch the checkout.

A generic CMS in the way

A plugin defined your content model, not your business. Publishing takes fifteen clicks and nobody on the team enters the admin unsupervised.

A checkout that does not convert

Extra steps, card errors with no message, 3D Secure breaking the mobile flow, and payments charged in Stripe but never recorded in your database.

Headless done badly

A monolith became three services. Now changing one line of copy needs a deploy, the source of truth lives in two places, and maintenance cost doubled.

It is almost never a platform problem. The platform simply never learned how your business works.

Where every discovery starts

02 Services

Three fronts. Hire them separately or as one piece: catalog, storefront and billing are usually the same problem seen from three sides.

01

Custom CMS

A back office shaped like your operation, not like a 2009 blog.

Rails 8 / Hotwire / PostgreSQL / Active Storage

What it includes

  • A content model built on your real entities: products, collections, locations, authors, whatever actually moves the business.
  • Rails 8 + Hotwire admin: Turbo Frame navigation and forms that respond without a reload, with no runtime JS framework shipped to the browser.
  • Per-team roles and permissions, drafts, change history and scheduled publishing.
  • Search and filtering straight in PostgreSQL (full-text and trigram), no extra service to run.
  • Images through Active Storage: variants, crops and optimized delivery.
  • JSON API or feeds when the front end lives elsewhere: mobile app, in-store screens, another site.

Who it is for

Teams updating catalog or content every day who already know the plugin is never going to get there.

Who it is not for

A five-page site that barely changes. You want something off the shelf, and I will say so.

02

Shopify

Make the platform behave like your business, not the other way around.

Liquid / Admin GraphQL API / Functions / Storefront API

What it includes

  • Custom Liquid themes: reusable sections, metafields and metaobjects so the catalog speaks your language.
  • Private apps against the Admin GraphQL API: inventory, pricing, tagging and internal workflow automation.
  • Signature-verified webhooks processed in a queue: orders, refunds and fulfillment that actually reach your ERP.
  • Shopify Functions for discount and shipping rules; checkout extensions as far as your plan allows.
  • Data migration: products, variants, customers, historical orders and redirects so SEO survives.
  • Storefront API or headless only when the case justifies it, with the reasoning written down before any code.

Who it is for

Stores already selling that keep hitting the ceiling of the theme or of this month's app.

Who it is not for

Anyone validating the product this week: start on a standard theme and come back when it hurts.

03

Stripe

Charging is easy. Making the money and your database agree is the work.

Payment Elements / Billing / Connect / Webhooks

What it includes

  • Checkout or Payment Elements with SCA and 3D Secure, local payment methods and real card-error handling.
  • Subscriptions with Billing: plans, proration, trials, dunning and the customer portal.
  • Connect for marketplaces: seller onboarding, commissions and payouts.
  • Idempotent webhooks: signature verification, event log, retries and a job queue. A payment is never charged or recorded twice.
  • Reconciliation against your database, so the state in Stripe and the state in your app stop contradicting each other.
  • Stripe CLI tests and fixtures in the pipeline, plus a live run with small amounts before opening the tap.

Who it is for

Anyone billing recurring revenue, running a marketplace, or whose support team hunts orphan payments.

Who it is not for

If you sell three things a month and need a button, Payment Links is enough.

03 Who builds it

One senior Rails developer, running the same stack I am proposing to you.

I have spent six-plus years shipping production Rails monoliths: Hotwire, background jobs, PostgreSQL at scale and third-party API integrations. I do not subcontract the work: whoever runs your discovery is the one writing the code and the one answering the day something breaks.

Technical stack
Layer What runs there
Framework Ruby on Rails 8.0 on Ruby 3.4. A monolith, not microservices without a reason.
Interface Hotwire (Turbo + Stimulus), Tailwind v4 and importmap. No JavaScript build, no SPA.
Data PostgreSQL 17, Active Storage, background jobs for anything slow.
Deploy Kamal over Docker on Hetzner servers. One-command rollback.
This page Runs on exactly that stack. The proof is the site you are reading.

Track record

40% page load reduction Turbo Frames lazy loading · Inktavo / Printavo

120 hrs/month saved 30+ Rake automation tasks · SEPROBAN

Test suite 45 -> 38 min TestProf profiling · Info-Tech Research Group

04 How I work

Four phases. Each one ends with something you can open, read or click.

Discovery, build, deploy, handoff. No surprises at the end.

  1. 01

    Discovery

    One call and read access to what already exists: repo, store, Stripe dashboard, analytics. I go through the data model and every point where money changes state.

    Deliverable: Scope document: entities, integrations, risks and what is out.

  2. 02

    Build

    Short branches, staging from week one and a working demo every week. Tests go where the money moves: webhooks, totals, taxes and order states.

    Deliverable: A staging environment you can click through, plus a weekly demo.

  3. 03

    Deploy

    Kamal to your server or mine. Reviewed migrations, backups and monitoring before opening the tap. Payments run in test mode first, then live with small amounts.

    Deliverable: Production with one-command rollback.

  4. 04

    Handoff

    The repository is yours from the first commit, with no dependency on my infrastructure. I document the operation and record the handover session.

    Deliverable: Operations README, incident runbook and a recorded session.

05 Questions

What people ask me before signing.

Why Rails and not a JavaScript stack?
Because a small team maintains a monolith better. Hotwire gives you the interactivity without duplicating the data model in the browser or dragging in a runtime framework. If your case calls for something else, I will say so in discovery.
I already run Shopify. Do I have to migrate?
Almost never. Most of the work is making Shopify do what your operation needs. Migrating only makes sense when fighting the platform costs more than leaving it.
Who owns the code?
You do. The repository is in your name from the first commit, no odd licenses and no services of mine it depends on to run.
Do you work inside my team or outside it?
Both. I can join as a contractor inside your repo and your process, or deliver the whole project turnkey.
Timezone and availability?
Mexico City, UTC-6. Full overlap with the Americas and with European mornings.
What does it cost?
Two formats: a fixed-price project with closed scope, or a monthly retainer by block of hours. The number comes out of the discovery document. If your budget and the scope do not match, I will tell you on the first call.
06 Contact

Next step

Tell me what is breaking.

One email with context beats three discovery calls. The button opens your mail client with a short template already written: what you sell, what stack you run, what is breaking today. If the project is not for me, I will say so right away.

angelmomaa@gmail.com · linkedin.com/in/angelmoradev

Timezone

UTC-6

Mexico City

Write the email