Abdelrahman
← all work

02 / 2023

Lesoll

3 years on a production real-estate marketplace — programmatic SEO at classifieds scale, a 20-module admin CMS, and Arabic-first bilingual UX.

RoleFront-End Engineer

TimelineJuly 2023 – present

Next.js 14React 18Redux Toolkitnext-i18nextReact Hook FormSocket.ioTailwind CSS 3Radix UITinyMCEChart.jsGoogle MapsDocker
Lesoll

Overview

Lesoll is a production classifieds marketplace for Egyptian real estate — buy, sell, and rent across residential, commercial, land, and compounds, with paid promotion packages, real-time chat, a blog, and a full internal admin CMS behind it. I was one of a two-person frontend team and authored ~54% of all commits (1,380 of 2,562) over 3 years, owning major feature areas, the entire SEO layer, and the admin dashboard. The codebase grew to ~74,000 lines across 900+ source files, 99 page routes, and 14 Redux feature domains. For part of its life the platform also ran a cars/motors vertical — search, detail pages, and admin analytics I built — which the business later retired.

The challenge

A classifieds site lives or dies by organic search: thousands of listing URLs across categories and two locales, listings that expire daily, and a crawl budget Google won't spend twice. Dead listings were being indexed, server redirects disagreed with client-side metadata, and every SEO fix had to ship to a live site without breaking real sellers mid-flow. On top of that: Arabic-first RTL, monetization woven into posting, and 3 years of keeping it all healthy.

What I did

  • Stopped Google indexing dead listings — removed ads return 410 Gone instead of soft-404s, query-string URLs get noindex,follow, and robots.txt is tuned per URL structure
  • Unified canonical URLs server-side — moved canonical generation into getServerSideProps as the single source of truth, fixing a server-redirect vs client-metadata mismatch that was causing incorrect 404 indexing, then synced OG tags and JSON-LD to the validated URL
  • Split crawl budget across 18 segmented XML sitemaps — by inventory type and locale (residential, commercial, land, compounds, finance × ar/en, plus blog) so search engines crawl each independently
  • Built the internal admin CMS that runs the business — 20+ modules covering user management with VIP tiers and plan assignment, listing moderation, a TinyMCE blog CMS, Chart.js analytics dashboards, sales-team management, pricing administration, and admin chat monitoring
  • Owned the multi-step post-ad wizard — seven sections from basics through media, draft save/resume, unsaved-change guards, Google Places location picking, and client-side image compression to cut upload failures on mobile networks
  • Built URL-driven property search where path segments encode category, location, and filters — each combination an SSR landing page with bilingual metadata, and the search works before hydration (no-JS support)
  • Shipped subscription commerce end-to-end — plan browse, payment redirect, post-payment callback, invoice download, and quota tracking inside the seller profile
  • Delivered Socket.io buyer↔seller chat with room management, typing indicators, automatic AR/EN text direction, and admin-side chat monitoring in the dashboard
  • Kept a live marketplace healthy for 3 years — dependency upgrades, memoization and image-performance refactors, Search-Console-driven SEO iteration, 30 permanent redirect rules for legacy URL migrations, and redirect-header sanitization that fixed invalid-character crashes

Deep dive

SEO at classifieds scale

142 commits of SEO work across the project's life — programmatic SEO for a listings site with thousands of URLs. Eighteen segmented sitemaps split by inventory type and locale, 410 Gone for removed listings, noindex,follow on query-string URLs, JSON-LD structured data per page type (property details, search ItemList, blog), hreflang across the bilingual URL structure, and 30 permanent redirect rules for legacy URL migrations. This is the work marketplace companies hire for specifically.

The canonical-URL war story

Search Console showed valid pages being indexed as 404s. The cause: server-side redirects and client-side metadata disagreed about what a page's canonical URL was, so Google saw two versions of the truth. The fix moved canonical generation into getServerSideProps as a single source of truth, synchronized OG tags and JSON-LD with the validated server-side URL, and added redirect-header sanitization — encoding URIs and sanitizing slugs — that also killed a class of invalid-character crashes.

Admin CMS: the back office

Twenty-plus dashboard modules run the business day to day: user management with VIP tiers and per-user plan assignment, listing moderation, a TinyMCE-powered blog CMS, analytics dashboards on Chart.js, sales-team management, pricing and plans administration, a contact-message inbox, admin chat views, an image gallery with search, compounds management, and 'hot of the week' curation. Most portfolios show the storefront; this is the machinery behind it.

Arabic-first internationalization

The default locale is Arabic with full RTL layout — English is the secondary locale and falls back to Arabic for missing keys. Built for the Egyptian market first, not translated as an afterthought: bilingual URL structure, localized sitemaps, localized structured data, and chat input that flips text direction automatically between Arabic and English.

Listing wizard & seller operations

A seven-section accordion form covers everything a property ad needs — basics, map-based location, specs, pricing (sale, rent, or installment), features, and media — with draft save/resume and publish-time monetization: post free or pick a paid package without leaving the flow. The seller hub filters ads by status, exposes role-aware actions (mark sold, pin in search, cohost assignment), and gives subscribed sellers per-ad analytics and a leads table.

The result

3 years of sustained production ownership and still shipping — launch, feature growth, Search-Console-driven SEO iteration, upgrades, and bug triage on a live marketplace. Alongside EgyStay it completes the picture: EgyStay shows modern App Router architecture, payments, and performance; Lesoll shows SEO at scale, admin systems, and longevity.

Next projectClickfold