Tools I build with.

Backend

PHP

PHP remains a strong choice for business software when framework and architecture are deliberate. I use it as the foundation for Laravel products in production from Tangier.

Laravel

Laravel is my primary framework for domain-heavy products: tenancy, billing, permissions, jobs and APIs other clients consume.

Interface

React

I build React interfaces as product surfaces, not page templates — with TypeScript, clear domains and components that match the business language.

TypeScript

TypeScript is the default on new frontend and Node work. Types are a communication tool between backend contracts and UI.

Tailwind CSS

Tailwind is a styling system, not a look. I use it to keep product UIs consistent and fast to change.

Next.js

I use Next.js when the public site needs server rendering, metadata and static generation. Authenticated product UIs often stay on Vite + React when that is faster to operate.

Runtime

Node.js

Node.js shows up in Playwright automation, workers, and tooling around the product. Anybot is a Node-heavy system.

Data

PostgreSQL

PostgreSQL is the default database. Constraints and indexes are part of the product design, not an afterthought after the UI ships.

Redis

Redis is used for queues, cache and locks — the unglamorous parts that keep a SaaS responsive under load.

SQLite

SQLite is the right database when the product is a desktop operator tool, as with FRIGO SYS. Embedded, transactional, no extra server.

Operations

Docker

Docker keeps development and production close. Compose for the stack, images for the app — no “works on my machine” as a release strategy.

Linux

Most products I ship run on Linux. Users, TLS, Nginx, logs and backups so the box is boring — which is the goal.