Dubai Startup Tech Stack 2026: The Boring Choices That Actually Work
- •
- 15 min
Forward Deployed Engineer · Dubai
In 2026, choosing a tech stack for a Dubai startup has never been harder — not because there are fewer good options, but because there are too many.
New JS frameworks appear monthly. AI-native tools promise to make architecture decisions irrelevant. Every option comes with a blog post explaining why it's the right choice for exactly your situation. And the developer you're hiring almost certainly has a strong opinion, shaped by whatever they built most recently or found most interesting.
The founders who move fastest make boring choices and build interesting products. The founders who make interesting choices spend 14 months debugging framework edge cases, writing "we're migrating everything" announcements, and explaining to investors why launch slipped again.
This is the opinionated stack I recommend for Dubai startups in 2026 — based on what I've built with, watched work, and watched fail across 20 years of production software development. The scope is specific: prototypes, working versions, and early MVPs. That constraint drives every choice here. The tools are well-known, widely adopted, and have large communities behind them — which matters when you're moving fast and can't afford to be the first person who's ever hit a particular error. Nothing exotic. Everything scales from 10 users to 100,000 without a rewrite.
One caveat worth stating before the list: this is not a universal prescription. The right stack depends on who's building it. If your team has deep experience in something different and a clear reason to prefer it, that matters more than anything written here. Get a technical person involved early — someone who has shipped production software with these tools, not someone who read the same blog posts — and make the decision with them, not instead of them.
The one principle worth keeping
Use the most boring tool that solves the problem. Save your originality for the product.
Boring tools have large communities, abundant documentation, easy hiring pools, and years of production battle-testing. When something breaks at 11pm — and it will — you want a StackOverflow thread from 2019 that already solved the exact problem. You don't want to be the first person who's ever seen this error in this framework.
Frontend
Default: Next.js + React + TypeScript
Next.js handles server-side rendering, static generation, API routes, image optimization, and deployment to Vercel with zero configuration. TypeScript catches bugs before your users do. React has the largest component ecosystem of any UI framework — every library, every design system, every SaaS tool SDK has a React version first.
The temptation is to reach for Remix, SvelteKit, Astro, or one of the newer AI-native UI builders. These are all legitimate technologies. None of them are worth the ecosystem cost at MVP stage. You'll find fewer developers, fewer solved problems, and more time spent in framework-specific territory instead of product territory.
Design system: shadcn/ui
Pre-built components (buttons, forms, dialogs, tables, date pickers) that look professional, are fully customizable, and sit in your own codebase rather than a dependency. Build your UI on top of this rather than custom from scratch. It's free, well-maintained, and saves 2–4 weeks of component work.
Alternative for very simple sites: if your product is marketing-site-heavy (think landing page + blog + one interactive tool), consider Astro. It renders essentially zero JavaScript to the browser and hits excellent Lighthouse scores without optimization effort. But switch back to Next.js the moment you need an authenticated user flow.
Backend
Default for most MVPs: Next.js API routes
For products that are primarily a web app — authenticated users, a database, some server logic — you don't need a separate backend service. Next.js API routes give you a fully capable server-side layer in the same codebase as your frontend. One repository, one deploy, one service to monitor.
The counter-argument — "but what if we need to separate them later?" — is a real concern, but "later" is when you have 10,000 active users and actual performance constraints, not when you're building MVP and trying to move fast. Premature separation costs you speed now for a flexibility you might not need for 18 months.
When to use a separate backend: when your server logic is genuinely complex (heavy data processing, batch jobs, complex real-time systems, microservices that need to scale independently), a separate service is the right call. Options:
- Express.js or Fastify — Node.js, same TypeScript codebase, zero context switch for your team
- Go — genuinely fast, low memory footprint, excellent for high-throughput or CPU-bound services. Worth it if you have someone on the team who knows it; wrong choice if you're hiring for it from scratch at MVP stage
- Ruby on Rails — moves fast for data-heavy CRUD products, strong conventions, good ecosystem. Same caveat: only reach for it if your team already knows Rails
The pattern is consistent: use whatever language your team can actually ship in. For most TypeScript-native teams, staying in Node.js removes the mental overhead entirely.
Language: TypeScript throughout
Same language frontend and backend means shared types, shared validation logic, and no context switch when moving between parts of the codebase. This has been my default for every MVP I've built over the last four years and I haven't had a reason to change it. Use Zod for runtime type validation at the boundaries — API inputs, external service responses, database records.
Database
Default: PostgreSQL
Every alternative has a specific use case where it wins. PostgreSQL is the general-purpose database that wins in every case that isn't that specific use case.
It handles structured data, unstructured JSON, full-text search, geographic queries, real-time subscriptions (with pgvector and pg_notify), vector embeddings for AI, and time-series data. It scales vertically to enormous data volumes and horizontally with read replicas. It has the best long-term ergonomics of any database — meaning the decisions you make in month 1 don't trap you in month 18.
Hosting: Neon, Supabase, or Railway
All three offer managed Postgres with automatic backups, connection pooling, and generous free tiers. Pick one and don't overthink it.
- Neon: serverless Postgres with branching (create a copy of your database per feature branch for testing — genuinely useful). Best-in-class cold start performance.
- Supabase: Postgres plus authentication, file storage, real-time, and auto-generated APIs — good if you want the full backend-as-a-service feature set.
- Railway: simplest interface, good for developers who want to co-locate the database with their backend service on one platform.
The alternatives and when they're right:
- Firebase/Firestore: fast to prototype, difficult to query later. Good for real-time apps where data access patterns are simple and predictable. Wrong for anything where you'll need reporting, analytics, or complex cross-collection queries.
- MongoDB: flexible schema sounds appealing at MVP; in practice you end up with six versions of the same document and no way to enforce consistency. Hard pass at MVP stage.
- DynamoDB: excellent at scale, genuinely unpleasant to develop against at startup speed. Requires understanding access patterns upfront in ways that are hard at MVP stage.
Authentication
Default: better-auth
better-auth handles email/password, magic link, OAuth (Google, GitHub, LinkedIn), two-factor, session management, and organisation support — open-source, TypeScript-native, and integrates directly with your Postgres database. Authentication data stays in your own schema, not a third-party service. Setup takes a few hours.
It's the auth library I reach for on every TypeScript project. The developer experience is clean, the documentation is accurate, and it covers everything an MVP needs without a monthly bill that scales with your user count.
Alternative: NextAuth.js (Auth.js)
The older, more established option. Handles the same OAuth flows, integrates with Postgres, and has years of community-solved problems behind it. More configuration than better-auth for the same result — but if you want something with a longer track record, it's the right pick.
Managed auth services (Clerk, Auth0): offload setup time but store your user records on third-party infrastructure and introduce a recurring cost that scales with user count. For a TypeScript-native stack, better-auth gives you the same coverage with full data ownership.
Don't build auth from scratch. JWT libraries, session management, password hashing — all of this is solved. The marginal benefit of custom auth is near zero; the marginal security risk is nonzero.
File storage
Default: Cloudflare R2
Object storage (user uploads, profile photos, document attachments, generated files) compatible with the S3 API, with zero egress fees. At MVP scale: about USD 0–5/month for most applications.
Alternative: AWS S3 if you're already using other AWS services and want consolidated billing. The egress costs matter at scale but not at MVP.
Avoid storing files in your database. Binary data in Postgres is an anti-pattern that inflates backup size and query performance.
Default: Resend
Transactional email (signup confirmation, password reset, notifications, invoices) via a developer-friendly API. Works natively with React components (React Email) so you write email templates in the same language as your UI. Generous free tier; excellent deliverability.
For marketing email (newsletters, product updates, campaigns): keep this separate from transactional email. Mailchimp, Loops, or ConvertKit depending on your needs. Don't use your transactional email provider for marketing — different deliverability domains, different compliance requirements.
Payments (UAE-specific)
This is the section that's most different from a generic tech stack guide. UAE payment processing has specific considerations.
One honest note before this section: I haven't personally shipped payment integrations in UAE apps — my own payment implementations have been crypto-based. What follows is from watching other Dubai products navigate this decision, not from first-hand integration work. Before making architecture decisions here, talk to a developer who has actually shipped payments in the UAE market.
International-first products (USD pricing, global audience):
Stripe is available in the UAE for UAE-registered businesses. If you have a UAE trade licence or NathanHR/freelance permit structure, Stripe works. It's the most developer-friendly payment API by a significant margin and handles subscriptions, invoicing, refunds, and disputes correctly out of the box.
UAE-consumer-first products (AED pricing, local payment methods):
Stripe doesn't cover:
- UAEFTS bank transfers (how many UAE B2B clients prefer to pay)
- UAE local debit cards via domestic payment schemes
- Buy-now-pay-later: Tabby and Tamara are major in UAE consumer e-commerce — expect conversion to drop if you don't offer at least one
Alternatives for UAE-centric products:
- Checkout.com: strong UAE presence, good API, supports local payment methods
- PayTabs: UAE-based processor, all local methods, simpler account setup for UAE-registered businesses
- Telr: UAE and GCC focused, widely used in the region, strong local support
Apple Pay: penetration in the UAE is among the highest globally — a disproportionate share of mobile transactions. If you're building a consumer product, Apple Pay support is not optional.
The default path for most Dubai startups: Stripe for the initial MVP (faster to integrate, better documentation), migrate to a local processor or add local methods as UAE-market revenue becomes material.
AI / ML integration
If your product includes AI features (there's a separate breakdown of what actually ships with AI in UAE products):
API calls: OpenAI or Anthropic
Both are battle-tested for production use. The mid-tier models (Claude Sonnet from Anthropic, GPT from OpenAI) cover the vast majority of business AI tasks — document analysis, structured generation, conversational AI, summarization. Use the flagship/reasoning models only for tasks that genuinely justify the cost differential. Model names and capability tiers change every few months; check current pricing before committing to a specific version.
API keys never go to the browser. All AI API calls must happen server-side. A key exposed in the browser is a leaked key — and leaked keys get abused within hours.
Next.js API routes handle this correctly by default.
Vector search (for RAG, semantic search):
- pgvector (Postgres extension): good for small-to-medium document corpora (<1M embeddings). If you're already on Postgres, this is zero additional infrastructure.
- Pinecone: purpose-built vector database for larger scale. Managed, pay-per-use, well-documented.
- Supabase with pgvector: if you're on Supabase, vector search is included with no additional service.
Local models for PDPL-sensitive workloads: If your AI feature processes personal data and you need to keep that data within UAE jurisdiction, calling OpenAI's US servers creates a data transfer that needs a legal basis under PDPL. Options:
- Azure OpenAI Service via Azure UAE North (same models, UAE data residency)
- Ollama running open-weight models (Mistral, Llama) on UAE-based infrastructure
- G42's Jais model for Arabic-specific workloads
Monitoring and observability
Error monitoring: Sentry
Set this up before you launch, not after. When something breaks in production — and it will — you want to know before users tell you. Sentry catches errors, groups them, and tells you which users were affected. The free tier covers most MVP workloads.
Analytics: PostHog
User behavior analytics, funnels, feature flags, session recording — open-source and self-hostable if you prefer, or managed on their cloud. More developer-friendly than Mixpanel, less enterprise-focused than Amplitude.
Uptime monitoring: Uptime Robot
Monitors your production URL every 5 minutes and alerts you when it's down. Free tier is sufficient. Takes 10 minutes to set up. Has saved me multiple times from extended outages nobody would have noticed for hours.
Logs: built into your hosting platform (Vercel, Railway, Render all have basic log streaming). Add Datadog or Logtail when you need cross-service log correlation — which is not at MVP stage.
Hosting and deployment
The choice that matters: managed platforms vs. self-managed infrastructure
Hosting breaks into two categories, and the right answer depends on who's building.
Managed platforms (Vercel, Railway, Render): Deploy from GitHub, zero server configuration, something running by end of day. The cost is platform dependency — your build config, environment assumptions, and cost structure get tied to the provider. Moving later means untangling that, not just copying files. A reasonable choice if nobody on your team has infrastructure experience and speed is the immediate constraint.
VPS / self-managed (Hetzner, DigitalOcean, Vultr): A developer who knows what they're doing can deploy a full-stack app on a €20/month server and own the entire stack — Nginx, Docker, deployments wired from GitHub Actions to a remote machine. No platform fees at scale, no migration tax, no surprises when you hit a managed platform's limits. The prerequisite is someone who has done this before and can maintain it.
My default is VPS. The operational complexity is manageable if the right person is involved, and the long-term flexibility is worth the upfront setup. "Nobody on the team can manage a server" is a hiring problem worth solving early — not a reason to lock into a platform you'll need to leave in 18 months when your cost or compliance requirements change.
CI/CD: GitHub Actions regardless of where you host. The YAML lives in your repository, deployment steps are versioned alongside the code, and it integrates with any hosting target.
UAE-specific technical considerations
Arabic and RTL support:
If your product targets UAE consumers or Arabic-speaking users, RTL is a hard requirement for that market segment — not something to retrofit later. The UAE developer community is consistent on what it takes:
- CSS
direction: rtlapplied conditionally, not hacked - UI components with genuine RTL support (many React libraries claim it; verify before committing to one)
- Fonts that cover Arabic well — Noto Sans Arabic, Cairo, and Tajawal are the common choices here
- Form validation that handles Arabic input correctly (diacritics, Arabic numeral variants)
One honest note: my own UAE products have been English-interface B2B tools, so this comes from watching others navigate the requirement rather than first-hand shipping experience. If RTL is core to your product, the stack decision around it is worth a separate conversation with a developer who has shipped it in production.
Data residency for PDPL compliance:
UAE Federal Decree-Law No. 45 of 2021 (PDPL) creates obligations around personal data of UAE residents. If you're processing UAE personal data — which most UAE-facing products do — data transfer to processors outside the UAE needs a legal basis.
Two options worth evaluating for UAE-sensitive data: Azure UAE North and AWS Middle East (Bahrain). Both are production-capable regions with full service support. Cost runs 20–30% higher than US or EU equivalents. If you're using Vercel for frontend (CDN edge nodes globally) and Neon/Railway/Supabase for data (likely EU or US regions), get legal advice on whether your data architecture needs adjustment for PDPL. Most early-stage startups with low-sensitivity data get this addressed at funding or regulated-client stage rather than MVP stage.
Domain and DNS:
.ae domains require a UAE trade licence or local entity for registration. If you want yourcompany.ae, have the licence or entity first. yourcompany.com is available without UAE registration and is often the right choice for products targeting an international audience from Dubai.
What to skip at MVP stage
Things developers often propose at MVP that aren't worth it yet (the full MVP scope checklist goes deeper on this):
- Kubernetes / container orchestration: managed hosting services (Vercel, Railway) abstract this away. Kubernetes is appropriate when you have multiple services, complex scaling requirements, and a DevOps engineer to maintain it. That's not MVP.
- Microservices: one codebase, one deployment until you have a genuine reason to split. The coordination overhead of microservices costs more than it saves below a team of ~8 engineers.
- GraphQL: REST works. GraphQL solves real problems at scale (flexible querying from multiple client types). At MVP, it's overhead.
- Custom design system: use shadcn/ui. A custom design system is a 4–8 week project that produces what shadcn/ui ships for free.
- Separate mobile apps: a responsive Next.js web app runs in mobile browsers and can be wrapped in a shell (Capacitor, Expo's web target) if you need App Store presence. Native mobile adds 30–60% to scope. Build it when your users tell you — with their behavior, not their words — that the mobile experience matters.
- Analytics dashboards in-product: use PostHog, Mixpanel, or Google Analytics. Don't build charts and dashboards in your own codebase until users are asking for them specifically.
What to revisit at Series A (or 50K monthly active users)
The stack above runs to serious scale. But some decisions should be revisited when you have real product-market fit and a real engineering team:
- Move to dedicated cloud infrastructure (AWS/GCP/Azure directly) rather than managed hosting, if your usage patterns or security requirements justify it.
- Add a proper data warehouse (BigQuery, Snowflake, Redshift) if you have analytics needs that outgrow your Postgres schema.
- Separate the mobile app if web metrics show that the majority of your users are on mobile and the web experience is causing churn.
- Introduce a real DevOps function — dedicated infrastructure engineering, not developer-as-sysadmin.
All of these are the right problems to have. None of them are the right problems to solve in month one.
Every recommendation in this article comes from what I've used, watched work, and watched fail. It is not a universal answer — and anyone who gives you a universal tech stack answer without understanding your team and your product is doing you a disservice.
The worst technical decisions I've seen in Dubai startups come from chasing the stack that just got a high-profile blog post, without anyone on the team who understood its actual failure modes. Don't build on a framework your lead developer learned last month. Don't let a developer with strong opinions about a technology they've never shipped into production make that call alone. Get two or three people who have actually built with these tools in a production context and talk to them. Their disagreements will tell you more than any article.
If you're not sure which stack choices fit your specific product — or you're inheriting a codebase where some of these decisions were already made poorly — that's a common starting point for fractional CTO engagements.