Pedro M. Dominguez pedromdominguez.dev

Oklahoma City · Independent Software Engineering

One Person. One Paradigm Shift.

in Business Websites

I design, build, secure and maintain software for Oklahoma City businesses — the whole job, by one engineer working with AI, at a pace that used to require an agency.

A development session: a request in plain English, the standard library and Zod added from JSR, a small Deno web application written and tested, and the whole thing deployed to a live address with one command.

A session, condensed — Claude Code and Codex do the typing. Built on Deno with the JSR standard library and Zod, then deployed by one command.

01 The thesis

Software has been getting heavier. Yours does not have to.

I am Pedro M. Dominguez. I build business software in Oklahoma City, and I build it deliberately small. Most of what makes modern web projects expensive is not the problem being solved — it is the machinery bolted around it: build pipelines, framework migrations, hundreds of transitive dependencies, and a team large enough to keep all of it standing.

Strip that away and something surprising happens. A single engineer with good tools and AI assistance can deliver, secure and maintain real systems on a timeline that used to require a firm. Not by cutting corners — by removing the parts that were never load-bearing.

This site is the argument and the evidence. It is a few hundred lines of TypeScript on the Deno runtime, standard library only, no framework, served straight from a single process. Read the source; it is the same way I build for clients.

  1. 01 Internet
  2. 02 Nginx
  3. 03 Deno
  4. 04 Your functions
The entire request path. Four hops, one process, no orchestration layer to operate at two in the morning.

02 What I build

Practical systems for businesses that run on them.

Websites that bring in work

A site that loads instantly on a phone in a parking lot, says what you do, and makes it easy to call you. Fast because it is small — not because it was optimised afterwards.

Quotes, bookings and intake

The form that turns a visitor into a job on your calendar, wired to your inbox and checked hard enough that spam and half-filled requests never reach you.

The software you run the business on

Scheduling, dispatch, inventory, invoicing — built around how the work is really done, including the paper and the whiteboard and the spreadsheet everyone maintains.

Hosting, on infrastructure you choose

A Contabo VPS, Deno Deploy, or a server already in your name — the same software runs on any of them. You own the accounts, you hold the source, and you are never captive to me. Backups, certificates and updates are handled.

03 Approach

Every engineering decision, translated into what it costs you or saves you.

04 The advantage

An agency has more people. That was only ever an advantage when software required more people.

One person, several businesses

The sites listed below run day and night on one small server, maintained by one engineer. That is only possible because each one is small, boring and built the same way — and it is why a project here does not carry the overhead of a firm.

Nothing lost in the handoff

The person in your first meeting is the person writing the code and the person answering at 7pm when something looks wrong. No account manager, no offshore team, no ticket queue between you and the person who can fix it.

You are not paying for the machinery

An agency's price carries its standard toolkit — the build pipeline, the yearly framework upgrade, the security audit of code nobody there wrote. Take that away and the same working software costs less to build and far less to keep.

The result is not a smaller version of an agency engagement. It is a different shape: less surface area, fewer meetings, and a system you could hand to another engineer tomorrow without an archaeology budget.

05 Selected work

Software for the businesses that keep this city running.

Not demos. Systems that a shop, a distributor or a contractor depends on during business hours — each one small enough to explain in a paragraph and to maintain for years.

Running right now

4 sites · one engineer · one small server in Oklahoma City. That is only possible because each one is small and built the same way.

Route Ledger

Delivery logging for a regional distributor whose drivers lose signal every day.

Distribution & logistics 2025

The problem

Drivers covering rural routes outside the metro were recording deliveries on paper because the vendor app blanked out the moment cell coverage dropped. Proof of delivery arrived at the office a day late, disputed invoices took a week to settle, and the office manager re-keyed every ticket by hand.

What was built

A route application that runs entirely in the driver's browser and keeps working with the radio off. Stops, signatures and photos are captured locally and reconciled with the office the next time the truck has a usable connection.

Architecture

IndexedDB holds the day's route as the source of truth on the device. A service worker serves the application shell so a cold start needs no network at all. Completed stops queue as an append-only log and sync through a single Deno endpoint that validates every record and resolves conflicts by stop id and timestamp.

Why this way

Connectivity is the constraint, so the design starts there. Treating the device as authoritative and the server as a reconciler removes the entire class of failures where a spinner blocks a driver who is standing at a loading dock.

  • Paper tickets eliminated on all rural routes
  • Invoice disputes settle same-day instead of within a week
  • Office re-keying reduced to exception handling only
  • Deno
  • TypeScript
  • IndexedDB
  • Service Worker
  • SQLite
  • Nginx

Shop Scheduler

Bay scheduling and customer messaging for an independent auto shop.

Automotive service 2025

The problem

Three service bays were booked on a paper calendar at the counter. Double-bookings were routine, customers called constantly for status updates, and the shop was paying a monthly per-seat fee for a scheduling product that still could not answer 'is my car ready'.

What was built

A scheduling board sized for the counter monitor and a status page each customer reaches from a texted link. Writing a status on the board is what sends the update; there is no second system to keep in sync.

Architecture

Server-rendered HTML with progressive enhancement: the board is usable with JavaScript disabled, and a small script upgrades it to live updates over server-sent events. State is a single SQLite database file. Customer links are signed, expiring tokens that grant read access to exactly one work order.

Why this way

A repair shop needs the counter screen to be correct, fast and boring. Server-rendered pages with one enhancement layer meant no build pipeline, no client framework to upgrade every quarter, and a system the owner can back up by copying a file.

  • Double-bookings ended in the first week
  • Status calls to the front desk down sharply
  • Per-seat subscription retired; the shop owns the software outright
  • Deno
  • TypeScript
  • SQLite
  • Server-Sent Events
  • Zod
  • systemd

Permit Intake

Document intake and review queue for a specialty contractor.

Construction & trades 2024

The problem

Permit packets arrived as email attachments, lived in one estimator's inbox, and went missing whenever that estimator was on a jobsite. Nobody could say which packets were waiting on the city and which were waiting on the office.

What was built

An intake form and a review queue with an audit trail. Every packet has a state, an owner and a history, and the queue is the only place work is tracked.

Architecture

Uploads are size-capped and content-type checked at the edge, written outside the web root with generated names, and served back only through an authenticated handler — the filesystem is never addressable from a URL. Form input is validated with Zod at the boundary, and state transitions are explicit functions with no hidden effects.

Why this way

File upload is where small business applications get breached. Making uploads unreachable by path, non-executable by storage location and validated by schema removes the common failure modes rather than filtering for them after the fact.

  • Packet status answerable in seconds by anyone in the office
  • Complete audit trail for every submission
  • Estimator's inbox no longer a single point of failure
  • Deno
  • TypeScript
  • Zod
  • SQLite
  • Nginx
  • Ubuntu LTS

Counter Menu

Self-hosted menu and ordering page for a family restaurant.

Food service 2024

The problem

The restaurant's menu lived inside a hosted page builder that loaded slowly on phones, charged a monthly fee to change prices, and pushed customers toward a delivery marketplace that took a cut of every order.

What was built

A fast, static-first menu the owner edits directly, with call-ahead ordering that sends tickets straight to the kitchen printer.

Architecture

The menu is generated from one structured data file into static HTML at startup. No client-side framework, no third-party scripts, no fonts or trackers from other origins — which is also what makes the Content-Security-Policy strict enough to be meaningful.

Why this way

Most of a restaurant's traffic is a hungry person on a phone on mobile data. Shipping static HTML and a few kilobytes of CSS is not a compromise for that audience; it is the best possible experience, and it costs a few dollars a month to run.

  • Menu loads in well under a second on mobile data
  • Price changes made by the owner in minutes, at no cost
  • Orders taken directly instead of through a marketplace commission
  • Deno
  • HTML
  • CSS
  • Static generation
  • Nginx

06 What it costs

Your own software, at about a tenth of what it used to cost.

An Oklahoma City business is typically quoted thousands to get a real website built, and thousands more every year to keep it running. That price is not the software. It is the firm around the software — the account manager, the project manager, the designer, the developer and the person who bills you for all four.

Take the firm away and the number changes completely. $295 builds and launches your site. $20 a month keeps it fast, patched, backed up and current — and your domain is managed free for the first year. That is $535 for your entire first year, from one engineer who answers his own phone.

$295
to design, build and launch — one time
$20/mo
care, support, hosting and small changes
Included
your domain, registered and managed for year one

07 Working together

Four steps, no discovery-phase invoice.

  1. Sit down at your counter

    Free

    An hour watching how the work moves today — the paper, the whiteboard, the spreadsheet everyone quietly maintains. Most of the design is already there.

  2. The smallest useful thing

    Week 1

    A written proposal for the one change that removes the biggest daily friction, with a fixed price and a date. Not a platform. The part that pays for itself first.

  3. Watch it get built

    Weeks 2–5

    Working software at a real web address from the first week, updated as it goes. You use it while it is being built, so corrections happen while they are still cheap.

  4. Launch, and hand over the keys

    Launch

    Live on hosting in your name, with the source, the documentation and the backups. Ongoing support is a choice you keep making, not a contract you signed once.

08 Common questions

The things people ask before they text.

What do I actually own?
All of it. The domain is registered in your name, the site runs on hosting in your name, and you get the source code. Nothing is held hostage — if you stop working with me tomorrow, the site keeps running and another developer can pick it up.
What happens after the first year?
The $20 a month continues if you want it to, and covers hosting, backups, security updates and small changes. There is no second build fee and no renewal contract. The domain renews at cost, usually around $20 a year.
What if I want to leave?
You give me a month's notice and I hand over everything: the domain, the hosting login, the code and the backups. No exit fee, no data to extract, no held credentials. The one-year agreement covers the build, not your freedom to walk away from it.
Who fixes it when something breaks?
I do, and you text me directly — no ticket queue, no account manager. The sites I run are monitored, so most problems I know about before the owner does.
How can it be this much cheaper than an agency?
Two reasons. There is one person instead of a team of six, so you are not paying for account management, project management and handoffs between them. And I use AI to do the mechanical half of the work — scaffolding, tests, the tedious refactors — so a build that would have taken weeks takes days. The judgment is still mine; the typing is not.
Do I need to understand any of the technical side?
No. We talk about your business — what you sell, who calls you, what you wish the phone asked before it rang. I handle everything else and explain anything you want explained, in plain words.
How long does it take?
A straightforward business site is usually live within two to three weeks of our first conversation, and you see it at a real web address from the first week rather than at the end. Bigger builds take longer, and I tell you the date before you pay anything.
What is not included?
Advertising budget, professional photography or video, payment processing fees if you sell online, and the domain renewal after year one at roughly $20. Everything else that keeps the site up and current is in the monthly fee.

09 Start here

Tell me what is slowing your business down.

The first conversation is free and it is with me — not a salesperson. Describe the part of your day that runs on paper, a whiteboard or a spreadsheet nobody trusts, and I will tell you honestly whether software is the answer.

Submissions are validated on the server, stored on my own machine, and never shared. No tracking scripts run on this page.