Riajul Islam Home
What I build with

The tools, and
why I picked them.

I start from a setup I already trust rather than re-litigating the stack every project. Here's what I reach for, what each piece is actually doing, and what goes into a build whether or not anyone asks for it.

I start from a setup I already trust, not a fresh argument about tools.

4
Setups I build from
27
Tools in rotation
8
Things set up every time
— How I start

Four setups I
build from.

Which one a project gets depends on whether it needs a login, a database and money changing hands. When it is borderline I take the heavier one — switching mid-build is the expensive mistake.

01

Landing / Marketing

Content-driven sites with no login and no database.

Best forMarketing sites, landing pages, portfolios, blogs
  • Astro
  • Tailwind
  • GSAP
  • Sanity
  • Resend
  • Cloudflare Pages
  • Turnstile
  • PostHog
  • +3

Ships in days and costs almost nothing to run.

02

Standard Web App

The default the moment someone says portal, dashboard or booking.

Best forCustomer portals, dashboards, booking systems, SaaS v1
  • Next.js
  • Tailwind
  • Supabase
  • Prisma
  • Stripe
  • Resend
  • Vercel
  • Sentry
  • PostHog
  • +4

One vendor for database, auth and storage keeps the moving parts low.

03

B2B / Multi-Tenant

When organizations, roles and SSO are real requirements.

Best forTeam accounts, role hierarchies, invites, single sign-on
  • Next.js
  • Tailwind
  • Neon
  • Prisma
  • Clerk
  • Cloudflare R2
  • Stripe
  • Sentry
  • PostHog
  • +4

Only when the org model genuinely needs it — it costs more to run.

04

AI Feature App

Template 02 or 03 with an AI module bolted on properly.

Best forAssistants, semantic search, extraction, chat booking
  • Provider-agnostic SDK
  • Validated tool calls
  • Job queue
  • Streaming UI
  • Per-user cost logging
  • Rate limiting
  • +1

AI is a module on a real app, never a stack of its own.

— The toolbox

The toolbox.

Chosen once and used consistently, so I get faster with them rather than starting over each time. The boring, proven option wins unless there is a specific reason it cannot.

Frontend

Astro
Static & content sites
Next.js
Apps with auth and server logic
Tailwind CSS
Styling
GSAP
Animation

Mobile

React Native (Expo)
Cross-platform apps

Backend & data

Supabase
Postgres, auth, storage, realtime
Neon
Postgres with branching
Prisma
ORM
Clerk
Orgs, roles and SSO

Hosting & storage

Cloudflare Pages
Static sites and workers
Vercel
Next.js apps
Render
Long-running services and cron
Cloudflare R2
Object storage

Content & commerce

Sanity
Structured content
Shopify
Commerce (Liquid & Hydrogen)
Stripe
Payments
Resend
Transactional email

AI

Claude & GPT
Assistants and reasoning
Groq
Latency-critical inference
Zod
Validating every tool call

Booking & automation

Cal.com
Scheduling engine
n8n
Workflow automation
WhatsApp API
Conversations and reminders

Quality & insight

Sentry
Error tracking
PostHog
Analytics, replay, funnels
Turnstile
Form spam protection
Vitest & Playwright
Tests on the paths that matter
— In every build

What I set up
without being asked.

  • A staging environment as well as production
  • CI that type-checks and tests on every push
  • Error tracking wired up before launch
  • Uptime monitoring, not just app errors
  • Automated backups with a tested restore
  • Spam protection on every public form
  • Email domain records (SPF, DKIM, DMARC) set up
  • Your own accounts — you own the infrastructure

None of this is an upsell. It is the difference between a site that launches and a site that keeps running after I hand it over.

Want to talk
through a build?