Skip to content

Competitor Deep-Dive Analysis โ€‹

Aldilaijan & Khobara Real Estate โ€” Kuwait Market Gaps โ€‹

Date: 2026-07-23
Scope: 5 competitors, 4 chosen gaps, exhaustive sub-page scraping
Analyst: Kimi Work agent
Methodology: Playwright stealth scraping of homepages + 25+ sub-pages; HTML/JSON extraction; direct codebase comparison.


Table of Contents โ€‹

  1. Executive Summary
  2. Methodology & Competitor Map
  3. Gap 1 โ€” Public Registered-Deals Feed
  4. Gap 2 โ€” SEO Landing Pages + English Locale
  5. Gap 3 โ€” Reverse Demand Board
  6. Gap 4 โ€” Financing Products
  7. Appendix: Other Missed Capabilities
  8. Master Build-Spec Summary

1. Executive Summary โ€‹

GapPrimary Competitor(s)Our Current StateGap SeverityEffort
Public Registered-Deals Feedalhisba.com (blocked by CF but homepage shows deals), taqeemkw.com (listings with license numbers)real_estate_transactions (~149k rows), get_public_real_estate_transactions RPC, public transactions browser, market indicators, price indexMedium โ€” we have data but no deal-card social feedM
SEO Landing Pages + English Localeboshamlan.com (764+ indexable URLs, /en, Astro SSR), bu3qar.com (Next.js, area slug pages), alhisba.com (Nuxt SSR, multi-page)Flutter web app; no SSR/prerendering; no English public routes; single / landingHigh โ€” invisible to Google for long-tail queriesL
Reverse Demand Boardalhisba.com (ุทู„ุจ ุดุฑุงุก / ุทู„ุจ ุฅูŠุฌุงุฑ tabs)Internal CRM requests table + matching feature; no public posting or broker response UIHigh โ€” entirely internal todayMโ€“L
Financing Productsalhisba.com (/constructionfinance โ€” bank partner form), taqeemkw.com (no financing found), estater.com (B2B advisory only)mortgage_calculator_screen (pure client-side annuity), roi_calculator_screen (pure client-side yield); no bank APIs, no product marketplaceMedium โ€” calculators exist, product engine missingL

Key first-pass misses discovered in this round:

  • taqeemkw has a consumer property portfolio (/Frontend/Account/Portfolio) โ€” login-gated but a major consumer retention feature we lack.
  • taqeemkw lists license numbers on every ad detail (e.g., "ุชุฑุฎูŠุต ุฑู‚ู… 1989/2936") โ€” builds trust via Ministry of Commerce attribution.
  • alhisba has WhatsApp Channel + direct wa.me links for every listing โ€” no email/phone intermediation.
  • alhisba runs a newsletter + news section citing Ministry of Justice deal aggregates (928M KWD in 5 days, 153 deals).
  • boshamlan has /agents directory with license numbers + ad counts per office โ€” 71+ offices listed.
  • bu3qar has C2C self-serve posting ("ู…ุงู„ูƒ ุนู‚ุงุฑ? ุฃุถู ุฅุนู„ุงู†ูƒ") + video content channel (ุชู„ูุฒูŠูˆู† ุจูˆุนู‚ุงุฑ) + YouTube integration.
  • estater exposes a Google Maps API key in client HTML (AIzaSyAmnH9DzaMJXdNw2TzgZ18RydRBDIhWHUo) โ€” client-side security anti-pattern.

2. Methodology & Competitor Map โ€‹

Scraped Pages (25+ URLs) โ€‹

CompetitorHomeSub-pages ScrapedAnti-bot Hit?
taqeemkw.comโœ…Rent estimator, Price estimator, Construction estimator, Search, Ad detail, Portfolio (login gate), English attempt (404)No
alhisba.comโœ…/deals (CF 403), /constructionfinance, /evaluation/ive/land (CF 403), /ads (CF 403)Yes โ€” Cloudflare challenge on /deals, /ads, /evaluation
boshamlan.comโœ…/sitemap, /en, /sale/apartments, /sale/properties/area, /agentsNo
bu3qar.comโœ…/companies-list, /product-details, /products-for-sale, /tv-serieses impliedNo
estater.comโœ…/products, /-en/api ("Coming Soon"), /-en/estater-advisoryNo

Data Extraction โ€‹

  • Routes: Python script extracted 1,100+ unique hrefs from boshamlan sitemap alone.
  • Meta tags: Title/description/OG tags captured for all 5 homepages.
  • Feature flags: Boolean capability matrix (estimators, WhatsApp, financing, video, etc.).
  • Screenshots: 20+ PNGs saved to docs/competitor_scrape/ for visual reference.

3. Gap 1 โ€” Public Registered-Deals Feed โ€‹

3.1 Competitor Capabilities โ€‹

alhisba.com /deals (Cloudflare-protected; inferred from homepage + public reports) โ€‹

Data fields per deal (from homepage cards + news citations):

  • Price (ุฏ.ูƒ)
  • Price per mยฒ (computed)
  • % share sold (partial deals noted in news)
  • Plot/piece number (ู‚ุทุนุฉ)
  • Category (ุณูƒู†ูŠ / ุชุฌุงุฑูŠ / ุงุณุชุซู…ุงุฑูŠ)
  • Area / governorate
  • Transaction date
  • Source attribution: "ู…ู† ูˆุฒุงุฑุฉ ุงู„ุนุฏู„" (MoJ sourced)
  • Deal volume aggregates (weekly headlines: "928 ู…ู„ูŠูˆู† ุฏูŠู†ุงุฑ ุฎู„ุงู„ 5 ุฃูŠุงู…")

Filter/facet options (inferred from Nuxt route structure):

  • /deals โ€” all registered deals
  • /ads/for-sale โ€” broker listings (separate tab)
  • /auctions/organizer โ€” Ministry of Justice auctions
  • Homepage tabs: ู„ู„ุจูŠุน / ู„ู„ุงูŠุฌุงุฑ / ุทู„ุจ ุดุฑุงุก / ุทู„ุจ ุฅูŠุฌุงุฑ / ู„ู„ุจุฏู„

Features:

  • News integration: Links to Al-Qabas, Al-Rai, Al-Seyassah with deal aggregates
  • WhatsApp channel for deal alerts (0029VbBk51I1HspwgRMIqg1p)
  • App: iOS + Android (2018 founding, 18+ years team experience)
  • No observable export/share API from scraped HTML

taqeemkw.com (valuation portal with listings) โ€‹

Listing data fields (from search + ad detail):

  • Purpose: ู„ู„ุจูŠุน / ู„ู„ุฅูŠุฌุงุฑ / ู„ู„ุจุฏู„
  • Date (e.g., 22/07/2026)
  • Area (e.g., ุงู„ุฒู‡ุฑุงุก)
  • Category: ุณูƒู†ูŠ
  • Property type: ุจูŠุช / ุฃุฑุถ ูุถุงุก / ุดู‚ุฉ / ููŠู„ุง
  • Size in mยฒ
  • Price in ุฏ.ูƒ
  • License number on every ad detail (e.g., "ุชุฑุฎูŠุต ุฑู‚ู… 1989/2936")
  • Agent contact: WhatsApp + Call buttons
  • Suggested properties (ุนู‚ุงุฑุงุช ู…ู‚ุชุฑุญุฉ) โ€” cross-sell

Search filters (from /Frontend/Ads/Search):

  • Purpose (ForSale / ForRent / ForExchange)
  • Area / Governorate
  • Price range
  • Size range
  • Property type

Valuation estimators (10 types):

  • Rent: House, Investment, Artisanal, Commercial
  • Price: House (plot + house), Investment (plot + property), Apartment, Artisanal
  • Construction: House (skeleton + detailed), Investment (skeleton + detailed)

Consumer portfolio feature:

  • /Frontend/Account/Portfolio โ€” login-gated consumer property portfolio tracker

No observable registered-deals feed โ€” taqeemkw is listing-centric, not MoJ transaction-centric.

estater.com (B2B data platform) โ€‹

  • Estater Markets: Data platform with API ("Coming Soon" page observed)
  • 500M data points, 6M+ properties, 75+ property details
  • Advisory services: Feasibility studies, market reports, highest-and-best-use
  • No consumer-facing deal feed

3.2 Our Assets vs. Gap โ€‹

CapabilityOur StateGap
MoJ transaction datareal_estate_transactions table (~149k rows), refreshed from Ministry of Justiceโœ… Strong
Public transaction browserget_public_real_estate_transactions RPC + public transactions screenโœ… Strong
Analytics RPCsget_transaction_stats, get_transaction_gov_distribution, get_transaction_cat_distribution, get_transaction_area_prices, get_transaction_monthly_trend, get_transaction_yearly_comparisonโœ… Strong
Price indexprice_index_screen.dart + price_index_repository.dartโœ… Exists
Market indicatorsmarket_indicators_screen.dart + market_indicators_repository.dartโœ… Exists
Comparables explorercomparables_screen.dart + comparables_repository.dartโœ… Exists
Deal cards with share %Not exposed in public UIโŒ Missing
Weekly aggregate headlinesNot auto-generatedโŒ Missing
License number on listingsNot shown on public catalogโŒ Missing
WhatsApp integrationNot implementedโŒ Missing
Newsletter / news sectionNot implementedโŒ Missing
Consumer property portfolioNot implementedโŒ Missing

3.3 Build Spec โ€” Public Registered-Deals Feed โ€‹

Phase 1 (S effort, 1โ€“2 sprints):

  • Add license number display to PublicPropertyTile and property detail screens (data already in properties table from broker profiles).
  • Add "Suggested properties" cross-link widget to property detail (similar listings by area + type + price band).

Phase 2 (M effort, 2โ€“3 sprints):

  • New screen: PublicRegisteredDealsScreen under lib/features/public/screens/
    • Reuse TransactionsFeedController from transactions_repository.dart
    • Card design: price, price/mยฒ, area, governorate, date, property type, share % (if available)
    • Filter sheet: governorate, area, property type, date range, price range
    • Sort: date desc/asc, price desc/asc, price/mยฒ desc/asc
  • Add weekly aggregate headline generator edge function:
    • Cron weekly, computes total volume, deal count, top area
    • Store in new market_headlines table
    • Display on public landing as live stat strip

Phase 3 (M effort, 2โ€“3 sprints):

  • Consumer property portfolio (property_portfolio_screen.dart exists but is calculator-only; expand):
    • Allow logged-in users to save favorite properties
    • Track saved search alerts
    • New table: user_favorites (user_id, property_id, created_at)
    • RLS: users can only read/write their own rows

Data/RLS changes:

sql
-- market_headlines table
CREATE TABLE market_headlines (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  week_start date NOT NULL,
  week_end date NOT NULL,
  headline_ar text NOT NULL,
  headline_en text,
  total_volume numeric,
  deal_count int,
  top_area text,
  created_at timestamptz DEFAULT now()
);

-- user_favorites table
CREATE TABLE user_favorites (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id uuid REFERENCES auth.users(id) ON DELETE CASCADE,
  property_id uuid REFERENCES properties(id) ON DELETE CASCADE,
  created_at timestamptz DEFAULT now(),
  UNIQUE(user_id, property_id)
);
ALTER TABLE user_favorites ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users manage own favorites" ON user_favorites
  FOR ALL USING (auth.uid() = user_id);

Edge functions needed:

  • generate-weekly-headline (cron trigger, weekly)

Effort: M (4โ€“6 sprints total)


4. Gap 2 โ€” SEO Landing Pages + English Locale โ€‹

4.1 Competitor Capabilities โ€‹

boshamlan.com (Astro-based, SSR/static generation) โ€‹

URL taxonomy (from sitemap scrape โ€” 764+ unique URLs):

/{purpose}/{type}/                    โ†’ e.g. /sale/apartments
/{purpose}/{type}/{governorate}/      โ†’ e.g. /sale/apartments/al-asimah-governorate
/{purpose}/{type}/{governorate}/{area}/ โ†’ e.g. /sale/apartments/al-asimah-governorate/yarmouk

Purpose values: sale, rent, exchange
Type values: apartments, houses, lands, buildings, chalets, commercials, offices, properties
Governorates: al-ahmadi, al-asimah, al-farwaniya, al-jahra, hawally, mubarak-al-kabeer
Areas: 70+ slugs (yarmouk, salmiya, jabriya, etc.)

Meta patterns:

  • Title: "ุดู‚ู‚ ู„ู„ุงูŠุฌุงุฑ | ุจูŠูˆุช ู„ู„ุจูŠุน | ุจูˆุดู…ู„ุงู† ุฏู„ูŠู„ ุนู‚ุงุฑุงุช ุงู„ูƒูˆูŠุช #1" (homepage)
  • Area page title: "ุนู‚ุงุฑุงุช ู„ู„ุจูŠุน ููŠ ุงู„ูŠุฑู…ูˆูƒ | ุจูŠูˆุช ูˆุงุฑุงุถูŠ | ุจูˆุดู…ู„ุงู†"
  • Description: "ุดู‚ู‚ ู„ู„ุฅูŠุฌุงุฑ ููŠ ุงู„ูƒูˆูŠุช | ุจูŠูˆุช ุงุฑุงุถูŠ ุนู‚ุงุฑุงุช ู„ู„ุจูŠุน | ู…ู† ุงู„ู…ุงู„ูƒ ู…ุจุงุดุฑุฉ ูˆุจุฏูˆู† ุนู…ูˆู„ุฉ"

English locale:

  • /en โ€” full English mirror of Arabic site
  • Property types translated: "Apartments for Rent", "Houses for Sale"
  • Area names romanized: "yarmouk", "salmiya", "al-ahmadi-governorate"

Internal linking:

  • Footer links to all governorate ร— type combinations
  • Sitemap page (/sitemap) lists all indexable URLs for crawlers

bu3qar.com (Next.js, Arabic-only) โ€‹

URL patterns:

/products-for-sale/{slug}   โ†’ SEO slug with Arabic keywords
/products-for-rent/{slug}
/products-for-exchange/{slug}
/companies-list             โ†’ Office directory
/tv-serieses/{slug}         โ†’ Video content

SEO features:

  • Arabic keyword-rich URLs (ุนู‚ุงุฑุงุช-ู„ู„ุจูŠุน-ููŠ-ุงู„ูƒูˆูŠุช)
  • Product detail pages with related properties (ุนู‚ุงุฑุงุช ุฐุงุช ุตู„ุฉ)
  • Office profile pages (/profile/{company-slug})

No English version observed.

alhisba.com (Nuxt.js, SSR) โ€‹

Routes:

/                    โ†’ Homepage with tabs
/ads/for-sale        โ†’ Broker listings
/deals               โ†’ Registered deals (CF protected)
/evaluation/ive/land โ†’ Instant valuation
/constructionfinance โ†’ Financing calculator
/auctions/organizer  โ†’ MoJ auctions

Meta:

  • Title: "ู…ูˆู‚ุน ุงู„ุนู‚ุงุฑุงุช #1 ููŠ ุงู„ูƒูˆูŠุช | ุงู„ุญุณุจุฉ ุงู„ุนู‚ุงุฑูŠุฉ ุฏู„ูŠู„ ุณูˆู‚ ุงู„ุนู‚ุงุฑุงุช"
  • Description mentions "ู…ุฒุงุฏ ูˆุฒุงุฑุฉ ุงู„ุนุฏู„", "ุชูุงุตูŠู„ ุงู„ู…ุฒุงุฏุงุช ุงู„ุนู‚ุงุฑูŠุฉ ูˆุงู„ุตูู‚ุงุช ุงู„ุนู‚ุงุฑูŠุฉ", "ุชูƒู„ูุฉ ุงู„ุจู†ุงุก", "ุงู„ุชู‚ูŠูŠู… ุงู„ุฑุณู…ูŠ ูˆุงู„ููˆุฑูŠ"

No English version observed.

estater.com (Webflow/custom, bilingual) โ€‹

Bilingual: / (Arabic default), /-en (English)

  • Full English version with all product pages
  • API docs page (/-en/api) โ€” currently "Coming Soon"

4.2 Our Assets vs. Gap โ€‹

CapabilityOur StateGap
Flutter web appSingle-page app, all routes hash-based (/#/sign-in)โŒ No SSR/prerendering
Public routes/, /catalog, /tools, /transactions, /contact, etc.โœ… Functional but not indexable
English localeAppLocalizations supports en, but no public English routesโŒ Missing
Area-specific pagesNoneโŒ Missing
Property-type-specific pagesNoneโŒ Missing
SitemapNoneโŒ Missing
Meta tags per routeGeneric, not dynamic per listing/areaโŒ Missing

4.3 Build Spec โ€” SEO Landing Pages + English Locale โ€‹

Architecture decision: Flutter Web cannot do true SSR. Two viable paths:

Option A: Prerender service (recommended for Phase 1)

  • Use flutter build web + a prerenderer (e.g., rendertron, Puppeteer prerender) to generate static HTML for key routes
  • Host prerendered HTML via Cloudflare Pages or a lightweight Node service
  • Map /sale/apartments/yarmouk โ†’ prerendered HTML with proper meta tags

Option B: Hybrid Astro site (recommended for Phase 2)

  • Build a separate Astro site (docs/seo-site/ or separate repo) that consumes our Supabase API
  • Astro generates static pages at build time for all area ร— type ร— purpose combinations
  • Embed Flutter app as the interactive layer (e.g., /app/ routes)

Phase 1 (M effort, 2โ€“3 sprints) โ€” Prerender + meta injection:

  • Create SeoMetaInjector widget in Flutter that updates document.title and <meta name="description"> dynamically per route
  • Generate a static sitemap.xml from our area + property type data:
    • Export all areas from area_repository.dart
    • Export property types from property_choice_labels.dart
    • Script generates sitemap.xml with all combinations
  • Add robots.txt pointing to sitemap

Phase 2 (L effort, 4โ€“6 sprints) โ€” English public routes:

  • Duplicate public route tree under /en/ prefix:
    • public_landing_screen_en.dart (or reuse with locale switch)
    • All tool screens get English copy review
  • Add language switcher to PublicVisitorShell
  • Update GoRouter to support /:lang/ prefix or query param

Phase 3 (L effort, 4โ€“6 sprints) โ€” Area landing pages:

  • New edge function: generate-area-pages that creates static HTML for each area
    • Consumes get_public_real_estate_transactions RPC for area stats
    • Consumes properties table for active listings in area
    • Generates: avg price, price/mยฒ, recent transactions, active listings count
  • New screen: AreaLandingScreen (lib/features/public/screens/area_landing_screen.dart)
    • Hero: area name + stats
    • Tabs: For Sale / For Rent / Transactions / Price Trend
    • Related areas links (internal linking)

Data/RLS changes:

  • No schema changes needed โ€” reads from existing properties, real_estate_transactions, areas tables
  • Add seo_slugs column to areas table (English URL slug) if not present

Edge functions needed:

  • generate-sitemap (manual or scheduled)
  • generate-area-page-html (on-demand or scheduled)

Effort: L (10โ€“15 sprints across phases)


5. Gap 3 โ€” Reverse Demand Board โ€‹

5.1 Competitor Capabilities โ€‹

alhisba.com (ุทู„ุจ ุดุฑุงุก / ุทู„ุจ ุฅูŠุฌุงุฑ) โ€‹

From homepage content preview:

  • Tabs on homepage: "ุทู„ุจ ุดุฑุงุก" (Purchase Request) and "ุทู„ุจ ุฅูŠุฌุงุฑ" (Rent Request)
  • These appear alongside "ู„ู„ุจูŠุน" / "ู„ู„ุงูŠุฌุงุฑ" / "ู„ู„ุจุฏู„" tabs
  • Routing: inferred to be query params on /ads or separate /requests routes

Data model (inferred from UI patterns + industry standards):

  • Budget range (min/max)
  • Area preferences (governorate + specific areas)
  • Property type (ุจูŠุช / ุดู‚ุฉ / ุฃุฑุถ / ููŠู„ุง)
  • Purpose (ุณูƒู†ูŠ / ุงุณุชุซู…ุงุฑูŠ / ุชุฌุงุฑูŠ)
  • Contact method (phone, WhatsApp)
  • Expiry date
  • Visibility: public vs. registered brokers only

Broker response flow (inferred):

  • Broker sees request, contacts requester via WhatsApp/phone
  • No observable in-app messaging from scraped data

boshamlan.com / bu3qar.com โ€‹

  • No reverse demand board observed โ€” both are supply-side (listing) only
  • bu3qar has C2C posting but no "I'm looking for" feature

5.2 Our Assets vs. Gap โ€‹

CapabilityOur StateGap
Internal requests CRMrequests table with: name, phone, budget, areas, property types, purpose, status, assigned_agent, follow_up_dateโœ… Strong (internal)
Matching enginematching_screen.dart, request_matches_screen.dart, buyer_journey_screen.dartโœ… Strong (internal)
Request formrequest_form_screen.dart โ€” rich form with areas, budget, size, street type, subdividable, tagsโœ… Strong (internal)
Public request postingNoneโŒ Missing entirely
Public request browsingNoneโŒ Missing entirely
Broker response UIInternal only (request_suggestions_list_screen.dart)โŒ Missing
Request-to-listing matchingInternal algorithm exists; not exposed publiclyโŒ Missing

5.3 Build Spec โ€” Reverse Demand Board โ€‹

Phase 1 (M effort, 3โ€“4 sprints) โ€” Public request posting:

  • New screen: PublicRequestBoardScreen (lib/features/public/screens/)
    • Tabbed: Purchase Requests / Rent Requests
    • List cards: budget, areas, property type, date posted, requester initials (anonymized)
    • Filter: governorate, area, property type, budget range
  • New table: public_requests (or reuse requests with visibility column)
sql
-- Add visibility column to existing requests table
ALTER TABLE requests ADD COLUMN IF NOT EXISTS visibility text DEFAULT 'internal'
  CHECK (visibility IN ('internal', 'public', 'public_anonymous'));

-- Or new table if schema divergence is too high
CREATE TABLE public_demand_requests (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  requester_name text,
  requester_phone text,
  budget_min numeric,
  budget_max numeric,
  areas text[],
  governorates text[],
  property_types text[],
  purpose text,
  details text,
  status text DEFAULT 'active' CHECK (status IN ('active', 'fulfilled', 'expired')),
  expires_at timestamptz,
  created_at timestamptz DEFAULT now(),
  user_id uuid REFERENCES auth.users(id) ON DELETE SET NULL
);
  • Posting flow:
    • Anonymous or logged-in user fills simplified PublicRequestFormScreen
    • Fields: name, phone, budget, areas (multi-select), property type, purpose, details
    • OTP verification for phone (optional Phase 2)
    • Request expires in 30 days by default

Phase 2 (M effort, 3โ€“4 sprints) โ€” Broker response + matching:

  • New screen: PublicRequestDetailScreen
    • Shows full request details
    • "I have a match" button for logged-in brokers
    • Contact requester via WhatsApp (deep link) or in-app message
  • Extend request_matches or create public_request_responses:
sql
CREATE TABLE public_request_responses (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  request_id uuid REFERENCES public_demand_requests(id) ON DELETE CASCADE,
  responder_id uuid REFERENCES auth.users(id),
  responder_type text DEFAULT 'broker' CHECK (responder_type IN ('broker', 'owner')),
  message text,
  property_id uuid REFERENCES properties(id),
  status text DEFAULT 'pending' CHECK (status IN ('pending', 'accepted', 'rejected')),
  created_at timestamptz DEFAULT now()
);
  • Integrate with existing matching feature:
    • When a new listing is posted, auto-match against active public requests
    • Notify requester (SMS/WhatsApp in Phase 3)

Phase 3 (S effort, 1โ€“2 sprints) โ€” Notifications + expiry:

  • Edge function: expire-old-requests (daily cron)
  • Edge function: notify-request-matches (on property insert trigger)

RLS policies:

sql
-- Public can read active requests
CREATE POLICY "Public reads active requests" ON public_demand_requests
  FOR SELECT USING (status = 'active' AND expires_at > now());

-- Users manage own requests
CREATE POLICY "Users manage own requests" ON public_demand_requests
  FOR ALL USING (auth.uid() = user_id);

-- Brokers can create responses
CREATE POLICY "Brokers create responses" ON public_request_responses
  FOR INSERT WITH CHECK (auth.uid() = responder_id);

Effort: Mโ€“L (6โ€“10 sprints)


6. Gap 4 โ€” Financing Products โ€‹

6.1 Competitor Capabilities โ€‹

alhisba.com /constructionfinance โ€‹

User flow (from scraped page):

  1. Header: "ุญุณุจุฉ ุงู„ุชู…ูˆูŠู„" (Financing Calculator)
  2. Service definition + terms of use disclaimer
  3. Form fields:
    • "ู‡ู„ ู„ุฏูŠูƒ ุญุณุงุจ ููŠ ุจู†ูƒ ุจูˆุจูŠุงู† ุŸ" (Do you have a Boubyan Bank account?) โ€” yes/no
    • "ู‚ูŠู…ุฉ ุงู„ุนู‚ุงุฑ" (Property value)
    • "ุงู„ุฏูุนุฉ ุงู„ุฃูˆู„ู‰" (Down payment)
    • "ูุชุฑุฉ ุงู„ุณุฏุงุฏ" (Repayment period) โ€” dropdown: 12 months default, up to 25 years inferred
  4. "ุงู„ุชุงู„ูŠ" (Next) button

What's behind the form (inferred):

  • Bank partner: Boubyan Bank (Islamic bank)
  • Calculation uses bank's approved rates/formulas
  • Likely redirects to bank application or generates a referral code
  • Monetization: Lead generation / referral fee from bank

Other financing features on alhisba:

  • "ู…ูˆู‘ู„ ุจูŠุช ุฃุญู„ุงู…ูƒ" (Finance your dream home) โ€” homepage CTA
  • Instant residential rent estimator (for investment yield calculation)
  • IVE (Instant Valuation Engine) for land
  • CCE (construction cost estimator)

taqeemkw.com โ€‹

  • No financing products observed
  • Pure valuation + listing portal
  • No bank partnerships visible

estater.com โ€‹

  • B2B advisory only โ€” no consumer financing
  • "Highest and Best Use Study", "Feasibility Study", "Market Report"
  • Client-base: developers, banks, government (100+ GCC clients)

6.2 Our Assets vs. Gap โ€‹

CapabilityOur StateGap
Mortgage calculatormortgage_calculator_screen.dart โ€” pure client-side annuity formula (principal ร— rate / (1-(1+r)^-n))โœ… Basic calc
ROI calculatorroi_calculator_screen.dart โ€” gross yield + cap rate, client-sideโœ… Basic calc
Construction cost calcconstruction_cost_calculator_screen.dartโœ… Exists
Bank partner integrationNoneโŒ Missing
Rate feed from banksNoneโŒ Missing
Eligibility checkNoneโŒ Missing
Product comparisonNoneโŒ Missing
Application / referral flowNoneโŒ Missing
Construction financeNoneโŒ Missing

6.3 Build Spec โ€” Financing Products โ€‹

Phase 1 (M effort, 3โ€“4 sprints) โ€” Mortgage product marketplace:

  • New table: mortgage_products
sql
CREATE TABLE mortgage_products (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  bank_name text NOT NULL,
  bank_name_en text,
  product_name text NOT NULL,
  product_type text CHECK (product_type IN ('residential_purchase', 'construction', 'refinance', 'investment')),
  min_down_payment_pct numeric DEFAULT 20,
  max_loan_amount numeric,
  max_term_years int DEFAULT 25,
  profit_rate_fixed numeric,
  profit_rate_variable numeric,
  profit_rate_type text DEFAULT 'fixed' CHECK (profit_rate_type IN ('fixed', 'variable', 'diminishing')),
  eligibility_notes text,
  application_url text,
  is_active boolean DEFAULT true,
  created_at timestamptz DEFAULT now()
);
  • New screen: MortgageMarketplaceScreen

    • List active products from mortgage_products
    • Filter: product type, bank, down payment, term
    • Card: bank logo, product name, rate, max amount, eligibility teaser
    • CTA: "Apply" โ†’ opens bank application URL or pre-fills referral form
  • Extend existing MortgageCalculatorScreen:

    • After calculation, show "Compare bank products" CTA
    • Pre-fill calculator inputs into product filter

Phase 2 (M effort, 3โ€“4 sprints) โ€” Eligibility engine + referral:

  • New edge function: check-financing-eligibility

    • Inputs: salary, existing debt, property value, down payment
    • Outputs: eligible products, max loan amount, estimated monthly payment per product
    • Rules based on Kuwait Central Bank guidelines (debt-to-income โ‰ค 50%)
  • New screen: FinancingEligibilityScreen

    • Wizard: salary โ†’ existing debt โ†’ property value โ†’ down payment
    • Results: eligible banks + products + pre-approved amount
    • "Request callback" CTA (creates CRM lead)
  • New table: financing_referrals

sql
CREATE TABLE financing_referrals (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id uuid REFERENCES auth.users(id),
  product_id uuid REFERENCES mortgage_products(id),
  property_value numeric,
  down_payment numeric,
  loan_amount numeric,
  term_years int,
  monthly_payment numeric,
  status text DEFAULT 'submitted' CHECK (status IN ('submitted', 'contacted', 'approved', 'rejected', 'closed')),
  broker_notes text,
  created_at timestamptz DEFAULT now()
);

Phase 3 (S effort, 1โ€“2 sprints) โ€” Construction finance:

  • Add construction to mortgage_products.product_type
  • New screen: ConstructionFinanceScreen (inspired by alhisba)
    • Staged disbursement calculator (foundation, skeleton, finishing)
    • Link to CCE (construction cost estimator) for baseline property value

RLS policies:

sql
CREATE POLICY "Public reads active products" ON mortgage_products
  FOR SELECT USING (is_active = true);

CREATE POLICY "Users manage own referrals" ON financing_referrals
  FOR ALL USING (auth.uid() = user_id);

CREATE POLICY "Staff read all referrals" ON financing_referrals
  FOR SELECT USING (is_staff_or_admin());

Effort: L (7โ€“10 sprints)


7. Appendix: Other Missed Capabilities โ€‹

7.1 Saved Searches & Alerts โ€‹

  • boshamlan: No explicit saved search observed, but "ู…ู…ูŠุฒ" (featured) badge system implies promotion capability
  • alhisba: WhatsApp channel acts as passive alert system
  • Our gap: No saved search or price-drop alert system
  • estater: Uses Google Maps (API key exposed in HTML โ€” security issue)
  • taqeemkw: No map search observed
  • Our state: public_price_map_screen.dart exists โ€” โœ… competitive
  • boshamlan: "ู…ู…ูŠุฒ" (featured) badge on listings โ€” paid promotion
  • taqeemkw: No promotion observed
  • Our gap: No paid promotion system for listings

7.4 WhatsApp Integration Patterns โ€‹

  • alhisba: WhatsApp Channel (0029VbBk51I1HspwgRMIqg1p) + direct wa.me links + WhatsApp button on every listing
  • taqeemkw: "ูˆุชุณุงุจ" button on ad detail pages
  • bu3qar: No WhatsApp observed; phone-only
  • Our gap: No WhatsApp integration anywhere

7.5 Video Content / TV Channel โ€‹

  • bu3qar: "ุชู„ูุฒูŠูˆู† ุจูˆุนู‚ุงุฑ" โ€” dedicated video content section with meetings, discussions, news, programs
  • YouTube channel: UC8saXgab00UZFBKZWchBSCA
  • Our gap: No video content strategy

7.6 Newsletter / Email Subscription โ€‹

  • alhisba: Email subscription widget on homepage
  • News integration: Links to Al-Qabas, Al-Rai, Al-Seyassah
  • Our gap: No newsletter or content marketing

7.7 Agent / Office Directory โ€‹

  • boshamlan: /agents โ€” 71+ offices with license numbers, ad counts, addresses
  • bu3qar: /companies-list โ€” filterable by area, licensed office badge
  • Our gap: No public office directory (internal broker profiles only)

7.8 C2C Self-Serve Listing Posting โ€‹

  • bu3qar: "ู…ุงู„ูƒ ุนู‚ุงุฑ? ุฃุถู ุฅุนู„ุงู†ูƒ" โ€” owner self-serve posting with simple signup
  • taqeemkw: /Frontend/Ads/AddAdLocation โ€” multi-step ad creation (location โ†’ category โ†’ details)
  • Our gap: Only staff can post listings via CRM

7.9 Property Portfolio for Consumers โ€‹

  • taqeemkw: /Frontend/Account/Portfolio โ€” consumer can track their properties
  • Our gap: No consumer property portfolio (only staff deal portal)

7.10 Report Verification โ€‹

  • Our state: report_verify_screen.dart exists โ€” โœ… unique competitive advantage

8. Master Build-Spec Summary โ€‹

GapPriorityPhase 1 (Quick Wins)Phase 2 (Core)Phase 3 (Scale)Total Effort
1. Registered DealsP2License numbers on listings; Suggested propertiesPublic deals feed screen; Weekly headline generatorConsumer portfolio; Favorites; AlertsM (4โ€“6 sprints)
2. SEO + EnglishP1Dynamic meta injection; robots.txt; sitemap.xmlEnglish public route tree; Language switcherAstro hybrid site; Area landing pagesL (10โ€“15 sprints)
3. Reverse DemandP1Public request board; Simplified posting formBroker response UI; Auto-match on new listingsSMS/WhatsApp notifications; OTP verificationMโ€“L (6โ€“10 sprints)
4. FinancingP2Mortgage product marketplace table + screenEligibility engine; Referral workflowConstruction finance; Bank API integrationL (7โ€“10 sprints)

Q3 2026 โ€” Foundation (SEO + Demand):

  • Sprint 1โ€“2: SEO meta injection, sitemap, robots.txt
  • Sprint 3โ€“4: English public routes (language switcher)
  • Sprint 5โ€“6: Public reverse demand board (posting + browsing)
  • Sprint 7โ€“8: Broker response UI for demand board

Q4 2026 โ€” Growth (Deals + Financing):

  • Sprint 1โ€“2: Public registered-deals feed (reuse transactions RPC)
  • Sprint 3โ€“4: Weekly headline generator; License numbers on listings
  • Sprint 5โ€“6: Mortgage product marketplace
  • Sprint 7โ€“8: Eligibility engine + referral workflow

Q1 2027 โ€” Scale:

  • Area landing pages (Astro hybrid or prerender)
  • Consumer property portfolio
  • Construction finance
  • WhatsApp integration (dependent on business API approval)
  • Video content strategy

End of report. All scraped artifacts (HTML, PNG screenshots, extraction scripts) are preserved in docs/competitor_scrape/.

Aldilaijan & Khobara Real Estate Platform