Simon-Pierre Boucher
All apps & projects
Lou·Ka iOS icon
iOS App
Swift

Lou·Ka iOS

Every Quebec rental in your pocket — and a swipe that learns your taste

The native SwiftUI companion to lou-ka.com: 9,000+ live listings from 190+ sources with full filters, a province-wide map, market stats — and a Discover mode driven by an on-device recommender.

9,000+

live listings

190+

sources aggregated

255

managers in the registry

5

native tabs

0

external dependencies

1/6

exploration cards vs. filter bubble

Overview

Lou·Ka iOS is the 100% native companion to Quebec's rental aggregator — the same 9,000+ live listings, the same paper/ink/lime editorial design, connected directly to the production API. Five tabs cover the search: filterable listings, a swipe-based Discover mode, a MapKit province map, market statistics, and the registry of 255 property-manager sources.

Discover is the app's signature: one full-screen listing at a time with story-style photos — swipe right to love, left to pass. Each swipe feeds an on-device recommender that decomposes listings into features (city, neighbourhood, size, price band, furnished, pets, balcony, parking, manager), maintains Laplace-smoothed appreciation rates weighted by confidence, and re-ranks the stack every 8 decisions — with one card in six drawn from the wider pool to avoid a filter bubble. The taste profile is persisted locally and never leaves the device.

The full listing sheet carries everything the website shows: paginated gallery, facts, inclusions, structured description digest, map, nearby points of interest, neighbourhood statistics, and a direct link to the original ad. Decoding is deliberately tolerant — one malformed source never makes other listings disappear — and the app has zero external dependencies: SwiftUI, MapKit, and Observation are all it needs.

Key Features

Full filtering

Debounced search, size chips, and complete filters — city, city-dependent neighbourhood, rent range, availability, pets, furnished, area, manager — with one-tap removable filter pills.

Discover mode

One full-screen listing at a time, story-style photos, swipe right to love — and the stack re-ranks continuously as the recommender learns.

On-device recommender

Laplace-smoothed appreciation rates per feature, confidence weighting, re-ranking every 8 decisions, and deliberate exploration to escape the filter bubble.

Province-wide map

Lime pins on MapKit with city presets — Québec, Lévis, Montréal, Gatineau — and mini-cards that open the full listing.

Market stats

KPI tiles (median, mean, available now), rent histogram, region/city/size leaderboards, offer inclusions, and price drops.

Robust by design

Field-by-field tolerant decoding with fallbacks: a malformed source never makes the other listings disappear.

How It Works

  1. One API, one truth

    The app talks HTTPS to the production lou-ka.com API with the site's full filter set — same data, same prices, nothing invented.

  2. Decompose every listing

    The recommender breaks each listing into features: city, neighbourhood, size, $300 price band, furnished, pets, balcony, parking, and manager.

  3. Learn from every swipe

    Each feature keeps a Laplace-smoothed appreciation rate (👍+1)/(👍+👎+2), weighted by confidence 1+log(1+n); a listing's score is the weighted mean.

  4. Re-rank, but explore

    The stack re-sorts every 8 decisions while ~1 card in 6 comes from the wider pool — recommendations without a filter bubble.

  5. Keep taste on the device

    The whole profile persists locally and never leaves the phone; loved listings live under the heart button.

Tech Stack

Platform

Swift 5.9
SwiftUI (iOS 17+)
Observation
XcodeGen
TestFlight (com.spboucher.louka)

Apple frameworks

MapKit
UserDefaults persistence
Zero SPM/Pods dependencies

Design & data

Lou-Ka production API
Editorial-sharp design system
Space Grotesk + JetBrains Mono (static instances via fontTools)

Highlights

  • After 4 likes on ~$900 studios, the header already reads "Your taste: Studio · ~$900" and the stack adapts
  • The full listing sheet matches the website feature-for-feature, down to the link to the original ad
  • Forced light theme so the phone's dark mode never renders unreadable text over the paper/ink design
  • Space Grotesk static instances generated with fontTools because the variable font exposes no PostScript names on iOS
  • Zero external dependencies — SwiftUI, MapKit, Observation, and nothing else
  • On TestFlight (1.2), uploading straight from xcodebuild with automatic signing

Explore Lou·Ka iOS

Quebec rentals, with swipe-to-discover — the full source is on GitHub.