Software that runs real businesses
Products live with real users, for ad-tech, travel and real estate teams: the problem each business had, what I built, and what changed after launch.
AI ad platform
Meta ads without the agency. A business pastes its website, and the platform plans, writes, designs, launches and monitors the whole campaign for them.
- My role
- Full-stack engineer on the AI generation pipeline, the Meta Ads integration and the campaign dashboard.
- Next.js
- TypeScript
- Supabase
- Meta Marketing API
- Gemini
- Claude
- Upstash Workflow
- Stripe
Problem
Good Meta ads take expertise: picking audiences, writing creatives, setting budgets. Most small business owners don't have it, so they spend money on campaigns that never perform.
Outcome
One link in, a live campaign out. Owners launch and keep improving their ads without ever opening Meta Ads Manager.
How it works
- A pasted URL feeds an analysis pipeline that reads the site and builds a brand profile: colors, tone of voice, audience and offers.
- Durable workflows generate ad images and copy with Gemini and Claude, and every ad passes compliance checks before it reaches Meta.
- A campaign planner turns the brand profile into ad sets, audiences, locations and a daily budget.
- Daily cron jobs sync results from Meta, raise spend and fatigue alerts, and step the pixel goal up the funnel as data comes in.
Architecture
- Next.js App Router for the dashboard and its API.
- Supabase Postgres for brands, campaigns and results, with row-level security per workspace.
- Upstash Workflow for long-running, retryable generation and publishing jobs.
- Meta Marketing API for publishing and insights; Stripe for billing.
What it does
- Reads a business's website and proposes ad sets, audiences, locations and a daily budget it can justify.
- Generates ad images and copy with Gemini and Claude, with compliance checks that block ads Meta would reject.
- Publishes straight to Meta, then moves to stronger conversion goals as each campaign gathers enough data.
- Syncs results daily, flags overspend and ad fatigue, and locks in final numbers for benchmarking.
Travel agency CRM
One system in place of spreadsheets and chat threads, taking every travel lead from first call to quote, booking and invoice.
- My role
- Full-stack engineer on the sales, operations and HR modules.
- Next.js
- TypeScript
- Supabase
- Puppeteer
- WhatsApp API
- Resend
Problem
Leads arrived through the website, WhatsApp, calls and email, then lived in spreadsheets and chat threads. Follow-ups slipped through the cracks and every quote took hours.
Outcome
Every lead is assigned, followed up and quoted in minutes, in one system from first call to final invoice.
How it works
- Website forms, WhatsApp, cloud calls and email all land in one shared lead inbox through webhooks.
- Leads are assigned by role, with team visibility rules and real-time notifications.
- Follow-ups, quotes and invoices all hang off the same lead record, so nothing falls between steps.
- Quotes render as branded PDFs and go out by email or WhatsApp, with delivery tracking.
Architecture
- Next.js app and API covering sales, operations and HR.
- Supabase Postgres with role-based access for each team.
- Puppeteer renders PDF quotes and invoices; Resend sends email.
- WhatsApp Business API webhooks feed a shared team inbox.
What it does
- Role-based lead assignment with team visibility rules and real-time notifications.
- Quote builder that prices hotels, transfers and activities, then sends a branded PDF by email or WhatsApp.
- Click-to-call with call recording, plus reports on sales performance, revenue and lead sources.
- HR module covering biometric attendance, leave and payroll.
Property listings portal
A Dubai real estate marketplace where agents list projects, admins approve them, and buyers search by city, area and budget.
- My role
- Full-stack engineer on the public site, search and admin panel.
- Next.js
- TypeScript
- MongoDB
- Ant Design
- Tailwind CSS
- Cloudinary
- Resend
Problem
Agents had nowhere central to list Dubai projects, and buyers couldn't search them by area, budget or payment plan.
Outcome
Agents list, admins approve, and buyers find the right project in one place, with smart filters, a mortgage calculator and an enquiry form.
How it works
- Agents submit listings from a dashboard form with gallery uploads and a rich text editor.
- Admins work through a review queue, approve or reject listings, and flag them as featured, high ROI or exclusive.
- Buyers search by city and area, filtering by type, bedrooms, furnishing, handover date and payment plan.
- Every property page adds a mortgage calculator, a brochure download and an enquiry form that feeds the dashboard.
Architecture
- Next.js App Router with server-rendered property pages and a generated sitemap for search engines.
- MongoDB with Mongoose models for properties, areas, developers and enquiries.
- Ant Design for the admin dashboard; Tailwind CSS for the public site.
- Cloudinary for images and floor plans; Resend for enquiry emails.
What it does
- Search by city and area, with filters for type, bedrooms, furnishing, handover date and payment plan.
- Listing approval workflow, with separate pending and approved queues for admins.
- Agent profiles, a blog, a careers page with applications, and enquiry inboxes.
Property referral app
The backend and admin panel behind a mobile app where people refer property buyers, follow each lead and track what they've earned.
- My role
- Built the REST API for the mobile app and the web admin panel.
- Next.js
- TypeScript
- Supabase
- Firebase
- Cloudinary
Problem
People who referred property buyers had no way to see where a lead stood or when they would be paid.
Outcome
Referrers follow every lead live and get a push notification the moment their commission is released.
How it works
- The mobile app talks to a token-secured REST API for search, leads, profiles and payouts.
- Each referral becomes a lead that moves through six stages, from submitted to commission released.
- Every stage change in the admin panel sends a Firebase push notification to the referrer.
- Releasing a commission updates the referrer's earnings and records the bank payout.
Architecture
- Next.js API routes serving the mobile app with token-based auth.
- Supabase Postgres for leads, referrers and payouts.
- Firebase Cloud Messaging for push notifications.
- Cloudinary for project images, plus a web admin panel for the sales team.
What it does
- Token-secured mobile API for search, leads, profiles, bank details and payouts.
- Admin panel to manage leads, update their status and release referral earnings.
- Push notifications through Firebase whenever a lead moves forward.