Skip to content

Full-Stack Developer · Available for contract

Abdulaziz Hatamov

I build and ship production systems end to end — database, API, frontend, deploy — and then keep them running.

Three of them are live right now: a QuickBooks SaaS I built and operate, an ecommerce platform that has been trading for about a year, and an internal mobile app in the App Store.

abdulaziz@abdulaziz.cvMargilan, Uzbekistan · UTC+5 · Remote

Selected work

Automated invoice collection for QuickBooks

Live · my own product

Small businesses on QuickBooks quietly write off overdue invoices. Not because the money is gone, but because chasing it is manual, socially awkward, and the first thing dropped when the week gets busy. The invoices that need the most persistence get the least.

A multi-tenant SaaS that connects to a company's QuickBooks over OAuth, syncs every overdue invoice, and runs a six-step sequence across email and SMS over forty-five days — escalating in tone from friendly to final notice. The first two steps are templated; the rest are written by Claude with the full engagement history as context and a hard monthly spend cap per organisation, falling back to templates once the cap is hit. Replies are classified automatically and pause the sequence. When the QuickBooks balance reaches zero, the invoice closes itself.

The hard part: never sending the same message twice

Automated messages about money are unforgiving. One duplicate demand to a customer who already paid costs the business the relationship, and no apology undoes it. So every send is idempotent three ways: an idempotency key at the delivery provider, a unique database index on (sequence, step, channel), and crash recovery that advances the sequence rather than retrying it. On top of that, a distributed lock and a twenty-four hour cooldown mean a customer with six overdue invoices still receives at most one message a day. The scheduled jobs fan out — one child task per organisation — so a slow tenant cannot delay everyone else's sends.

  • 6-step sequence over 45 days
  • 11-table multi-tenant schema
  • 5 signature-verified webhook integrations
  • AI generation with per-plan spend caps
  • CAN-SPAM · TCPA windows · RFC 8058 one-click unsubscribe
  • 3 Stripe subscription tiers

Next.js · React · TypeScript · PostgreSQL · Drizzle · tRPC · Trigger.dev · Anthropic Claude · Stripe · Redis

Nordfiord

nordfiord.com

Ecommerce platform for a supplements brand

Live · trading about a year · client work

A supplements brand needed a storefront that could describe what it actually sells — the form, the ingredients, what each one does, who it is for, what the evidence says. Off-the-shelf platforms model a T-shirt with a size and a colour. They also needed an admin their own team could run the business from, not a developer.

Three applications in one monorepo: a Next.js storefront, a React admin panel, and a NestJS API. The catalog is modelled to the domain — products carry forms, ingredients, effects, target audiences, benefits, science references and reviews as first-class relations rather than free text. Checkout runs through Stripe with a webhook-driven order state machine. Product images upload straight from the browser to object storage over presigned URLs, so large files never touch the API server. Carts live in Redis. The admin dashboard streams revenue, month-over-month growth and a thirty-day series over WebSockets, behind role-based access enforced at the API and again at the route.

The hard part: a checkout that cannot oversell

Selling stock you do not have is the failure that costs a store both money and trust, and it happens in the gap between a customer starting checkout and the payment clearing. Stock is never decremented when someone reaches the checkout page — only once Stripe's webhook confirms the payment, inside a database transaction that takes a row-level lock on the item. Two people buying the last unit in the same second cannot both succeed. The same webhook is written to be safe on redelivery, because payment providers retry.

  • 3 applications — storefront, admin, API
  • 116 API endpoints across ~26 modules
  • 23 data models
  • 21 admin routes
  • Domain-specific catalog modelling
  • Real-time analytics over WebSockets

Next.js 15 · React 19 · NestJS · TypeScript · PostgreSQL · Prisma · Redis · Stripe · Cloudflare R2 · Docker

Goodwell

App Store

Internal ordering and field-sales app for an appliance retailer

In production · published to the App Store

A large appliance retailer — fridges, air conditioners, gas appliances — was running branch ordering, seller payments and stock requisitions across paper and spreadsheets. Managers and field sellers needed genuinely different tools, on phones, in their own language, across multiple branches.

A cross-platform React Native application covering the operation end to end: catalog and ordering, cart and checkout, stock and inventory, requisitions, seller payments and payment types, KPI planning and tracking, vouchers, sales reporting and notifications. Fifteen service modules sit behind it. State is split between server cache and local stores so the app stays usable on a bad connection, and the whole interface is translated rather than hard-coded in one language.

The hard part: two products in one app

Managers and sellers do different jobs, and bolting both onto one navigation produces an app that neither trusts. The application splits at the router: separate navigation stacks, separate carts, separate permissions, resolved at sign-in from the user's role and store assignment. Neither role ever sees a screen that is not theirs, and adding a capability for one does not risk leaking it to the other — which matters when one of those roles handles money.

  • 41 screens
  • 15 API service modules
  • Separate manager and seller applications
  • Multi-language throughout
  • iOS 15.1+ · iPhone, iPad, Apple Silicon
  • Android

React Native · Expo · TypeScript · TanStack Query · Zustand · expo-router

What I take on

Web & app development
Full-stack builds from schema to deploy. Next.js and React on the front, NestJS or Node behind it, PostgreSQL underneath. Including the parts most people skip — auth, roles, billing, background jobs, and the deploy pipeline.
AI & automation
Putting a model inside a working system rather than beside it: generation with cost caps and template fallbacks, classification that drives real state changes, and background jobs that keep running when the request is long gone.
Ecommerce
Catalogs that model your actual product, checkouts that cannot oversell, admin panels your team can run the business from, and payment flows that stay correct when a webhook arrives twice.
Frontend & performance
Interfaces that stay responsive at real data volumes — server-side filtering and pagination over tens of thousands of rows, virtualized lists, precise cache invalidation, and honest load times.

How I work

  1. Fixed scope, fixed price, a date

    You get one number and one delivery date, not an hourly rate and a running meter. If the scope changes, we agree a new number before anything is built.

  2. The first milestone is small

    We start with one concrete deliverable in days, not months. If it is not what we agreed, you do not pay for it and we stop. Nothing to unwind.

  3. You own everything from day one

    Code lands in your repository, deployed to your infrastructure, with your keys. No lock-in, no hosting arrangement you have to keep paying me for.

  4. I answer within a day

    Including the awkward messages. Most problems on a project are communication problems that were left for a week.

Background

Five years building software, self-employed since 2023. Before that, two years at RTM on an education management platform used daily by hundreds of staff — student records, grades, financial operations.

The work there was mostly the unglamorous kind: migrating a legacy jQuery interface to React module by module, so the platform stayed shippable the whole way through rather than freezing for a rewrite. And moving record tables holding tens of thousands of rows to server-side pagination, filtering and sorting, which is what removed the multi-second loads people had stopped complaining about because they assumed that was normal.

Since then: ecommerce, SaaS and mobile, owned end to end — schema and API through to deployment and the on-call afterwards.

Contact

Write to me with what you are trying to ship and by when. You will get back a fixed price, a date, and an honest answer about whether I am the right person for it.

I answer everything within a day, including the awkward messages.