I'm from AzerbaijanIlgar Huseynli
Full stack web developer
Overview
Full stack developer @UltraFix
7+ years · PHP, Laravel, React.js
he/him
--:-- · Baku
Social links
About
- Full stack web developer with 5+ years of experience, specialising in backend development with PHP and Laravel.
- Built and contributed to large systems: CRM and ERP platforms with many integrated modules, from payroll and dispatching to chat, invoices and GPS tracking.
- Strong in API design, databases and scalable architecture; on the front end I work with React, Next.js and TypeScript.
- Based in Baku, working with teams in Azerbaijan and the United States.
Stack
Blog
- laravel
- php
- architecture
Laravel structure for a scalable monolith
Most apps I build are monoliths, and they hold up fine. The trick is not microservices, it is keeping one Laravel app organized: thin controllers, one class per job, slow work in queues, and an eye on the database.- Published on
- laravel
- php
- enums
How I use string enums in Laravel
A typo between 'complete' and 'completed' lived in production for two weeks. Since then every status is a string enum: cast on the model, validated with Rule::enum, with its labels, colors and rules inside it.- Published on
- laravel
- php
- api
Rate limiting in Laravel: we built it ourselves, then Laravel shipped it
We needed limits per minute, per hour and per day, so we wrote a middleware with three cache counters. It had a race, wrong headers and a day that reset at 3:47 PM. Laravel's RateLimiter does all of it in three lines.- Published on
- laravel
- php
- api
I wrote a rate limiter Laravel already had
A 190-line class with three windows, tests and hand-built headers, for an app on Laravel 8.83. Limit::perHour and perDay had been in vendor/ since 2020, and a named limiter can return all three at once.- Published on
Tips
- Laravel
- rate-limiting
- security
- http
Count only the responses you choose in a rate limit
Limit::after() decides after the response which requests count: only 404s for someone guessing ids, and never 422s, so a user fixing a form does not spend their own limit.- Published on
- Laravel
- cache
- concurrency
Lock the rebuild, not the read
Wrap the expensive rebuild in Cache::lock() so one request fills the key while the others wait a moment and read the result.- Published on
- Laravel
- enums
- php
One details() match instead of label(), color() and hint()
Put everything the UI needs about a case in one array per case, and read label() and meta() from it; adding a case means one new arm, and match still throws when it is missing.- Published on
- Laravel
- enums
- php
Give every enum the same ten lines
A small trait adds values(), names() and options() to every backed enum, so whereIn clauses, validation lists and select inputs read the cases instead of a copied array.- Published on
Experience
UltraFix
Current employerBackend and frontend of a field service platform: payroll, dispatching, messaging and a call center, on Laravel and React.
- Built the modules managers use to calculate and pay technicians, with automated weekly reports that cut manual entry and errors.
- Developed dispatcher order assignment that matches a customer with the nearest technician by location and rating, shortening response times.
- Automated salary recalculation and refunds for post-payment service recalls.
- Created a unified messaging module that brings SMS and email into one chat, and a real-time channel between dispatchers and technicians per order.
- Integrated Twilio and RingCentral into a call center module with call logging and recording; manage deployments on DigitalOcean.
Houston, United States, remote
- PHP
- Laravel 12
- React
- MySQL
- Redis
- Horizon
- Sanctum
- AWS S3
- Stripe Connect
- Square
- Twilio
- RingCentral
- Gmail API
- Google Document AI
- OpenAPI
- DigitalOcean
- Linux
Navimax
Backend of a GPS tracking system for phones and in-car devices, in PHP.
- Built the services that receive and store location data from phones and tracking devices.
- Developed the APIs behind live tracking, history and reports.
Baku, Azerbaijan, remote
- PHP
- MySQL
- REST
- GPS
Fogito
Core modules of a microservice CRM: chat, tasks, time tracking, GPS tracking, accounting, invoices and files, on PHP, React and WebSocket.
- Implemented real-time WebSocket messaging in the chat module.
- Built recurring tasks and linked tasks to invoices, so a finished task issues its invoice and payment request on its own.
- Developed the invoice module from scratch with Stripe and Danish payment systems for online payment.
- Extended the permission system across modules, down to access on a single task.
- Added time tracking statistics, shift exchange, recurring schedules and limits by location, network and schedule.
- Built the main GPS tracking features: live map, device history, vehicle logs, parking history, zone events, overspeed and acceleration alerts, statistics.
Baku, Azerbaijan
- PHP
- React
- JavaScript
- MySQL
- REST
- WebSocket
- Microservices
- Stripe
- MobilePay
- Linux
Freelance
Websites for news platforms, car sales portals and small businesses, on Laravel.
- Built Laravel MVC applications with Blade, MySQL, JavaScript and jQuery.
- Created admin panels, content management and dynamic pages to each client's brief.
- Deployed and configured the projects on Apache and Linux servers.
Baku, Azerbaijan
- PHP
- Laravel
- Blade
- MySQL
- JavaScript
- jQuery
- Apache
- Linux
Pronet
Features of an ERP system in core PHP, with a focus on the call center module.
- Developed and maintained ERP features in core PHP, JavaScript, jQuery and MySQL.
- Fixed and improved the call center module used by the support team.
- Optimised the SQL behind call center statistics, speeding up the reports.
Baku, Azerbaijan
- PHP
- MySQL
- JavaScript
- jQuery
- REST
- Linux
Education
Education
- PHP, MySQL, HTML, CSS, JavaScript, jQuery
- Faculty of Information Technology
- Specialty: computer engineering
- C#, SQL, HTML, CSS
Contact
Have a project, a role or a question in mind? Write to me and I will answer within a day or two.