<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Allo Maison</title>
    <description>The latest articles on Forem by Allo Maison (@allo_maison).</description>
    <link>https://forem.com/allo_maison</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3885211%2F34b7e9fd-fc3a-4a9b-a511-e429e6b4d992.png</url>
      <title>Forem: Allo Maison</title>
      <link>https://forem.com/allo_maison</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/allo_maison"/>
    <language>en</language>
    <item>
      <title>Lessons from building a home services marketplace in Morocco</title>
      <dc:creator>Allo Maison</dc:creator>
      <pubDate>Fri, 17 Apr 2026 21:44:17 +0000</pubDate>
      <link>https://forem.com/allo_maison/lessons-from-building-a-home-services-marketplace-in-morocco-2i96</link>
      <guid>https://forem.com/allo_maison/lessons-from-building-a-home-services-marketplace-in-morocco-2i96</guid>
      <description>&lt;p&gt;I spent the last few months shipping &lt;a href="https://allo-maison.ma" rel="noopener noreferrer"&gt;Allo Maison&lt;/a&gt;, a home services marketplace for Morocco. Here's the tech stack and the hard-won lessons that might save you a week or three.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

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

&lt;p&gt;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 &lt;em&gt;and&lt;/em&gt; Arabic, so that became the moat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programmatic SEO that actually indexes
&lt;/h2&gt;

&lt;p&gt;I templated every &lt;code&gt;service-city&lt;/code&gt; combination (16 services × 10 cities = 160 pages) and every &lt;code&gt;service-ville-urgence&lt;/code&gt; (18 more). Each page has:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unique intro paragraph generated from a structured data file (service specifics, city particulars, local prices in MAD)&lt;/li&gt;
&lt;li&gt;A dynamic list of verified artisans from Supabase (average 6–12 per page)&lt;/li&gt;
&lt;li&gt;LocalBusiness + Service JSON-LD schema&lt;/li&gt;
&lt;li&gt;Hreflang pairs for &lt;code&gt;fr-MA&lt;/code&gt; and &lt;code&gt;ar-MA&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, our &lt;a href="https://allo-maison.ma/plombier-casablanca" rel="noopener noreferrer"&gt;plombier Casablanca&lt;/a&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Get Google Search Console set up on day zero
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  2. Skip the headless scraper for sourcing
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Structured data before content polish
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. French + Arabic from the start, not retrofitted
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Metrics after launch
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Happy to swap notes in the comments — especially with anyone bootstrapping directory-style products in emerging markets.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>seo</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
