Every working developer eventually settles into a stack. Not a religion - a stack. The set of tools that have earned their place by surviving production, by being boring in a good way, by letting the developer ship features instead of fighting the framework. This is Baraa's. It is opinionated, it has changed over the years, and it is what Baraa reaches for when a new project lands on the desk and the goal is to ship something solid in weeks instead of months.
Baraa's default backend is Laravel 12. There are several reasons, and most of them are unsexy: it is mature, the documentation is excellent, the package ecosystem is enormous, and the framework keeps making the right tradeoffs between productivity and clarity. Laravel 12 in particular tightened up streaming, cleaned up middleware registration, and made the bootstrap layer easier to reason about. Baraa migrates older projects to it eagerly.
The pieces of Laravel 12 that earn their slot in Baraa's default setup:
For interactive frontends, Baraa picks React with TypeScript on top of Vite. Baraa has shipped projects in Vue and Svelte and likes both, but React is where Baraa's team is fluent, where the hiring pool is deepest, and where the libraries Baraa needs (TanStack Query, React Hook Form, Zustand, Radix UI) all live.
The Vite + React combination is fast. Cold start is sub-second. HMR is instant. Production builds are tiny when you are disciplined about imports. Baraa enforces TypeScript strict mode from day one - not because Baraa is dogmatic about types, but because TypeScript catches the dumb refactor mistakes that would otherwise eat a Friday afternoon.
For state, Baraa's defaults are:
useState for local component state. Baraa avoids Redux unless the team is already on it.Baraa styles with Tailwind. The ergonomics are excellent, the bundle size is small after PurgeCSS, and the consistency-by-default keeps designs from drifting. Baraa's discipline rule: any class combination used more than three times becomes a component. Otherwise the codebase devolves into copy-pasted utility soup.
For RTL support - which matters for nearly every project Baraa takes on, given Baraa's bilingual Arabic/English work - Baraa uses Tailwind's logical properties (ms-*, me-*, ps-*, pe-*) and the RTL plugin where the project pre-dates logical-property support. There is a longer post on how Baraa handles bilingual Arabic/English web apps if you want the deep dive.
PostgreSQL is Baraa's default database. JSON columns for flexible fields, full-text search where the project does not need a dedicated search engine, generated columns, partial indexes - Postgres has all of it, and the operational story is well understood. Baraa runs Postgres on managed services (DigitalOcean, AWS RDS, Hetzner with managed Postgres) for production projects, and self-hosts only when there is a clear reason.
Redis handles caching, sessions, queues, rate limiting, and pub/sub. Baraa runs it as a single shared service per environment unless throughput demands otherwise.
For object storage, Baraa uses S3-compatible services. For email, Baraa uses Postmark or Resend. For monitoring, Sentry plus a Laravel Pulse dashboard. None of these are exotic choices. That is the point.
Baraa deploys most projects through one of three patterns:
Deploys are zero-downtime by default. Database migrations are reviewed before they ship. Backups are tested, not just configured.
Baraa writes tests. Not religiously, not for coverage's sake, but enough that refactors are not terrifying. Pest for PHP (it is friendlier than PHPUnit). Vitest for the frontend. Playwright for end-to-end on the projects that earn it. Critical paths get tests first; everything else gets tests when a bug is fixed there. The practical rule: if Baraa fixes a bug without writing a regression test, the bug will come back.
This stack works for Baraa because it covers nearly every project that lands on Baraa's desk: SaaS apps, internal tools, AI-integrated platforms, bilingual Arabic/English products, small-team admin panels. When the project demands something else - a Next.js frontend for SEO-critical marketing, a Python backend for ML-heavy work, Kotlin for native Android - Baraa picks accordingly. But the default is the default for a reason: Baraa can move fast, the codebase stays maintainable, and the operational story is boring in the best way.
Want to know more about how Baraa works? See the about page, the CV, the /uses page for the editor and tooling, the glossary, or the hire page if you have a project in mind. Or read more blog posts, including Baraa on RAG, MCP, and tool-using AI.
Laravel 12 is mature, the documentation is excellent, and the package ecosystem is the largest in PHP. The framework keeps making the right tradeoffs between productivity and clarity. For Baraa, Laravel 12 plus queues, Horizon, and Filament covers the majority of real-world web app work without ceremony.
Filament gives Baraa resources, relations, custom actions, and multi-panel setups out of the box. What used to take a week of custom React admin work now takes a day in Filament. For internal tools and CMS-like interfaces, Baraa rarely finds a reason to roll a custom admin from scratch.
When the backend is Laravel, Next.js mostly duplicates work the framework already does. Baraa picks React on Vite for sub-second cold starts, instant HMR, and tiny production bundles. When a project genuinely needs SSR for SEO-critical marketing, Baraa picks Next.js or Inertia, but it is the exception, not the default.
Baraa defaults to Forge on DigitalOcean or Hetzner for small to medium projects, with zero-downtime deploys, queue workers, and scheduled jobs handled for you. Total infra cost is often under fifty dollars a month. For larger or AI-heavy workloads Baraa moves to Docker with an orchestrator, and serverless only when traffic is genuinely spiky.