3 services in production

Backends
that
stay up

PHP, Symfony, Laravel, Docker, Vue.js. I take services from idea to production — and keep them alive there.

Since 2022
writing backends
3
services in production
PHP · Docker
core stack
amirjon@srv-01 — zsh

Projects

Services I designed, built and deployed myself.

billing-api

running2024

Subscription billing for SaaS

Problem
Invoicing was kept in spreadsheets. As soon as plans, proration and refunds appeared, every month ended with manual reconciliation and mistakes that reached customers.
My role
Sole backend developer: domain model, REST API, payment-provider webhooks, containerisation and deployment.
Hard part
Payment webhooks arrive out of order and more than once — a naive handler charges twice. I built an idempotent event log with a deduplication key and a retry queue on RabbitMQ, so a repeated callback is recorded but never billed again.
  • PHP 8.4
  • Symfony
  • PostgreSQL
  • Docker
  • RabbitMQ
Demo coming soonSource ↗

crm-lite

running2023

CRM for small teams

Problem
A small sales team tracked deals in chat and notes. Nothing was searchable, nobody could tell which deals had gone quiet, and handover between people lost context.
My role
Full stack: Laravel API and admin, Vue 3 interface, role model, Docker Compose setup for local work and production.
Hard part
The deals list grew to thousands of rows with related contacts, tasks and stages — classic N+1, the page took seconds. Eager loading plus a materialised summary table brought it under 100 ms and kept it there as the data grew.
  • PHP 8.3
  • Laravel
  • Vue 3
  • MySQL
  • Docker
Demo coming soonSource ↗

tg-notifier

running2023

Notification bus over RabbitMQ

Problem
Several services each sent their own Telegram messages. Rate limits were hit, failed sends disappeared silently, and every new service duplicated the same code.
My role
Designed and built the service: message contract, queue topology, templates, retries and monitoring.
Hard part
Telegram limits the send rate and returns errors that must be treated differently — some are worth retrying, some are not. I added exponential backoff with a dead-letter queue, so a broken message stops eating the queue instead of blocking everything behind it.
  • PHP 8.3
  • Symfony
  • RabbitMQ
  • Redis
  • Docker
Demo coming soonSource ↗

Stack

What I use daily, not what I once read about.

Languages
PHP 8.4JavaScriptTypeScriptSQLBash
Frameworks
SymfonyLaravelVue 3Nuxt
Data & queues
PostgreSQLMySQLRedisRabbitMQ
Infrastructure
DockerDocker ComposeNginxGitLab CIGitHub ActionsLinux
Quality
PHPUnitPHPStanPHP CS FixerXdebug

About

I'm Amirjon, a backend engineer from Uzbekistan. I started writing PHP in 2022 and stayed with it: Symfony where the domain matters, Laravel where speed of delivery matters more.

What I enjoy most is the part after the code is written — packing a service into a container, giving it a pipeline, metrics and backups, and watching it run without waking anyone at night.

Right now I'm looking for a team where I can own services end to end: from the data model to the deployment that ships them.

Path

How I got here.

  1. 2022

    First line of PHP

    Moved from scripts to real applications: MVC, databases, HTTP. Learned by rebuilding things that already existed until they worked the same way.

  2. 2023

    Laravel in practice

    First delivered projects: admin panels, APIs, integrations. Learned that most of the work is not writing code but keeping it readable six months later.

  3. 2024

    Symfony and Docker

    Moved to stricter architecture and containers. Test suites, static analysis, CI pipelines, deployment without downtime.

  4. Now

    Looking for a team

    Open to backend / DevOps roles — remote or relocation.

Let's talk

Open to backend and DevOps roles, remote or relocation. Fastest reply is on Telegram.