SPB Git forge

spb/rent-ka

Public
8commits 1branches 0releases
7.4 MBsize
maindefault branch
21 days agolast push
Python 68.8% TypeScript 18.6% CSS 8.7% JavaScript 3.3% HTML 0.6%
8.9 KB · 152 lines html
Raw Blame History
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