Python 68.8%
TypeScript 18.6%
CSS 8.7%
JavaScript 3.3%
HTML 0.6%
1<!DOCTYPE html>2<!-- SHARED TEMPLATE — /doc page of Groupe KA sites (2026-08-24), Rent-Ka edition.3 Self-sufficient page (no JS required). Screenshots in ./img/ to regenerate. -->4<html lang="en-CA">5<head>6<meta charset="utf-8">7<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">8<title>Documentation — Rent·Ka</title>9<meta name="description" content="How Rent·Ka works: step-by-step guide, data, architecture.">10<style>11 :root{ --ink:#101014; --paper:#faf9f6; --accent:#2456e6; --muted:#6b6b70; --line:#e6e4de; }12 *{box-sizing:border-box} html,body{margin:0;padding:0;background:var(--paper);color:var(--ink);13 font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;-webkit-text-size-adjust:100%}14 .container{max-width:960px;margin:0 auto;padding:0 20px}15 header.doc{background:var(--ink);color:var(--paper);padding:20px 0}16 header.doc .container{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}17 header.doc a{color:var(--paper);text-decoration:none}18 .wordmark{font-weight:800;font-size:20px;letter-spacing:.02em}19 .wordmark .ka{color:var(--accent)}20 .btn-pdf{display:inline-block;background:var(--accent);color:#fff;font-weight:700;21 padding:10px 18px;border-radius:999px;text-decoration:none;font-size:15px}22 .hero{padding:48px 0 8px}23 .hero h1{font-size:clamp(28px,5vw,44px);line-height:1.1;margin:0 0 12px}24 .hero h1 mark{background:var(--accent);color:#fff;padding:2px 8px}25 .hero p.lead{font-size:18px;color:var(--muted);max-width:640px}26 .kicker{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);27 border-left:3px solid var(--accent);padding-left:10px;margin:40px 0 8px;font-weight:700}28 section{padding:8px 0 16px}29 h2{font-size:26px;margin:6px 0 12px}30 .step{display:grid;grid-template-columns:56px 1fr;gap:16px;margin:26px 0;align-items:start}31 .step .num{width:44px;height:44px;border-radius:50%;background:var(--ink);color:var(--accent);32 display:flex;align-items:center;justify-content:center;font-weight:800;font-size:18px}33 .step h3{margin:6px 0 6px;font-size:19px}34 .step p{margin:0 0 12px;color:#3a3a40}35 .shot{border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:0 8px 30px rgba(16,16,20,.08)}36 .shot img{display:block;width:100%;height:auto}37 .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:16px 0}38 .card{border:1px solid var(--line);border-radius:12px;padding:16px;background:#fff}39 .card b{display:block;margin-bottom:6px}40 table{border-collapse:collapse;width:100%;font-size:15px}41 th,td{border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}42 th{background:var(--ink);color:var(--paper)}43 footer.doc{margin-top:56px;background:var(--ink);color:var(--paper);padding:28px 0;font-size:14px}44 footer.doc a{color:var(--accent);text-decoration:none}45 @media print{46 header.doc .btn-pdf{display:none}47 .shot{box-shadow:none;break-inside:avoid}48 .step{break-inside:avoid}49 a{color:inherit;text-decoration:none}50 }51 @media(max-width:640px){ .step{grid-template-columns:40px 1fr} .step .num{width:34px;height:34px;font-size:15px} }52</style>53</head>54<body>55<header class="doc">56 <div class="container">57 <a class="wordmark" href="/">Rent<span class="ka">·Ka</span></a>58 <nav style="display:flex;gap:14px;align-items:center">59 <a href="/">← Back to the site</a>60 </nav>61 </div>62</header>6364<div class="container">65 <div class="hero">66 <p class="kicker">Documentation</p>67 <h1>How <mark>Rent·Ka</mark> works</h1>68 <p class="lead">Apartments and homes for rent across Canada, gathered in one place — a faithful index, with no invented price or guessed coordinate.</p>69 </div>7071 <section>72 <p class="kicker">Overview</p>73 <h2>What the site is for</h2>74 <p>Looking for an apartment in Canada means opening dozens of different sites. <b>Rent·Ka</b>75 (<a href="https://www.rent-ka.com">www.rent-ka.com</a>) flips the problem: a <b>dedicated connector per property manager</b>76 visits each site, normalizes every listing to a single schema and detects changes continuously — additions, updates77 and automatic removals. Every listing links back to the manager's original ad through the exit gateway78 <code>/gateway/{uid}</code>. For tenants (filtered search, 3D map, complete listings), market watchers79 (rent observatory, PDF reports) and managers (claimable pages).</p>80 <div class="cards">81 <div class="card"><b>Thousands of active listings</b>Across Canadian cities outside Québec, Ontario first — coverage growing continuously.</div>82 <div class="card"><b>Dedicated connectors</b>Each property manager has its own connector, resynced continuously.</div>83 <div class="card"><b>Nothing invented</b>No invented price or guessed coordinate; a vanished listing answers 410 Gone.</div>84 <div class="card"><b>Enriched listings</b>Fair value, price history, building passport, KA Scores, Winter Score, nearby amenities.</div>85 </div>86 </section>8788 <section>89 <p class="kicker">Step-by-step guide</p>90 <h2>Use the site in 4 steps</h2>91 <div class="step">92 <div class="num">1</div>93 <div>94 <h3>Search from the home page</h3>95 <p>Enter a city or neighbourhood, pick the type (studio, 1 bedroom, 2 bedrooms…), the min/max rent and your options (pets, furnished, area). The list and the 3D map stay synchronized: the counters match the markers exactly.</p>96 </div>97 </div>98 <div class="step">99 <div class="num">2</div>100 <div>101 <h3>Browse a city's results</h3>102 <p>City pages (e.g. /city/toronto) list all active listings with their filters. On the Rent-Ka Maps view: clusters by average price, "Search this area", 3D/2D toggle.</p>103 </div>104 </div>105 <div class="step">106 <div class="num">3</div>107 <div>108 <h3>Open a listing page</h3>109 <p>All the photos, a structured digest of the description, the fair-value badge, price history, building passport, KA Scores and a Winter Score. The button to the original ad goes through the transparent gateway.</p>110 </div>111 </div>112 <div class="step">113 <div class="num">4</div>114 <div>115 <h3>Follow the market on /stats</h3>116 <p>The market observatory: real-time KPIs, median rents by region, city and size, plus a downloadable multi-page PDF market report.</p>117 </div>118 </div>119 </section>120121 <section>122 <p class="kicker">Under the hood</p>123 <h2>Where the data comes from</h2>124 <p>Pipeline: <b>connectors → normalization → deduplication → SQLite → API/frontend</b>. Auto-discovered connectors125 visit each property manager at the source (direct extraction or Scrapfly depending on the site), and a resync loop126 (<code>rent-ka-sync</code>) runs continuously: each listing's content hash detects additions, updates127 and removals — a vanished listing answers <code>410 Gone</code>. An anti-drift guardrail suspends removals if a source128 suddenly returns far fewer listings. Enrichment crosses geocoding (Nominatim/OpenStreetMap), OpenStreetMap points of129 interest and Statistics Canada proximity measures. The public registry <a href="/sources">/sources</a> shows every source, its status and its last sync.</p>130 </section>131132 <section>133 <p class="kicker">Frequently asked questions</p>134 <h2>FAQ</h2>135 <div class="card" style="margin:10px 0"><b>Are the prices reliable?</b><p style="margin:6px 0 0">Displayed rents are those published by the managers themselves, captured at the source. Rent·Ka invents no price and guesses no coordinate.</p></div>136 <div class="card" style="margin:10px 0"><b>Can I rent directly on Rent·Ka?</b><p style="margin:6px 0 0">No. Rent·Ka is an index: every listing links back to the manager's original ad through the exit gateway. Groupe KA is not a party to any transaction.</p></div>137 <div class="card" style="margin:10px 0"><b>How often are listings updated?</b><p style="margin:6px 0 0">The resync runs in a continuous loop; listings removed at the manager disappear automatically (410 Gone).</p></div>138 <div class="card" style="margin:10px 0"><b>Where do the location scores come from?</b><p style="margin:6px 0 0">From public sources: OpenStreetMap (amenities, roads, bike lanes) and Statistics Canada proximity measures (2021) — see /ka-scores for the full methodology.</p></div>139 <div class="card" style="margin:10px 0"><b>I'm a manager — can I manage my page?</b><p style="margin:6px 0 0">Yes: every source has a claimable page (/g/{source}); sign in with your KA ID to claim it.</p></div>140 </section>141</div>142143<footer class="doc">144 <div class="container">145 <p><b>Rent·Ka</b> — a <a href="https://www.groupe-ka.com">Groupe KA</a> service.146 Ecosystem: all the platforms are linked in each site's footer.</p>147 <p>© 2026 Groupe KA — Simon-Pierre Boucher · <a href="mailto:contact@spboucher.ai">contact@spboucher.ai</a></p>148 </div>149</footer>150</body>151</html>152