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.