Technology Apr 17, 2026 · 3 min read

Lessons from building a home services marketplace in Morocco

I spent the last few months shipping Allo Maison, a home services marketplace for Morocco. Here's the tech stack and the hard-won lessons that might save you a week or three. The stack Next.js 15 App Router with SSG everywhere possible. 148 static pages at build time. Tailwind CSS 3 +...

DE
DEV Community
by Allo Maison
Lessons from building a home services marketplace in Morocco

I spent the last few months shipping Allo Maison, a home services marketplace for Morocco. Here's the tech stack and the hard-won lessons that might save you a week or three.

The stack

  • Next.js 15 App Router with SSG everywhere possible. 148 static pages at build time.
  • Tailwind CSS 3 + shadcn/ui for the design system.
  • Supabase for the artisan database (Postgres + RLS), plus a small Convex sidecar that runs the scraper pipelines.
  • Resend for transactional email, Netlify for hosting, Cloudflare for the DNS and root domain routing.

Morocco has ~250K–435K monthly searches across the home services category (plumbing, electricity, cleaning, AC). There was no programmatic SEO competitor covering all cities × services in French and Arabic, so that became the moat.

Programmatic SEO that actually indexes

I templated every service-city combination (16 services × 10 cities = 160 pages) and every service-ville-urgence (18 more). Each page has:

  1. Unique intro paragraph generated from a structured data file (service specifics, city particulars, local prices in MAD)
  2. A dynamic list of verified artisans from Supabase (average 6–12 per page)
  3. LocalBusiness + Service JSON-LD schema
  4. Hreflang pairs for fr-MA and ar-MA

For example, our plombier Casablanca page pulls real-time artisan counts, aggregates ratings, and surfaces an urgency CTA for night-time calls. Early ranking signals are encouraging for a brand-new domain.

What I'd do differently

1. Get Google Search Console set up on day zero

I lost three weeks debugging an indexation drop that turned out to be a misconfigured robots.txt rule. GSC's coverage report would have caught it in 24h.

2. Skip the headless scraper for sourcing

I built a Playwright scraper to source 1000+ artisans across MA directories. 40% of records needed manual cleanup anyway. For v2 I moved to a hybrid approach: WhatsApp verification + Google Places API + a lightweight cron that cross-references.

3. Structured data before content polish

Rich results in Google beat pretty copy for a new site. I should have shipped FAQPage + HowTo + BreadcrumbList schemas the first week, not month three.

4. French + Arabic from the start, not retrofitted

Arabic SEO in Morocco is under-served. Competitors ignore it. Going bilingual from v1 would have captured an extra segment that's now cold traffic I have to warm up.

Metrics after launch

  • 141 URLs submitted to sitemap
  • 9 high-DA backlinks acquired via content + directories in week one
  • Average Lighthouse Performance: 92 mobile / 98 desktop
  • Time-to-first-interactive on /plombier-casablanca: 1.3s

Takeaway

A small market with a programmatic SEO gap plus bilingual content plus shipped-this-week schemas beats another generic global SaaS any day. If you're eyeing a vertical nobody has technically taken, the playbook is still alive.

Happy to swap notes in the comments — especially with anyone bootstrapping directory-style products in emerging markets.

DE
Source

This article was originally published by DEV Community and written by Allo Maison.

Read original article on DEV Community
Back to Discover

Reading List