Torres 57fae0df49 app: no-build PWA frontend (fidelity port) + image mirror
- app/static/index.html: single-file app — DOM/CSS/stack engine ported
  verbatim from reference/mockup-001-fidelity.html (DEPTH/SC/TY/DIM, drag/
  fly/undo, one .topcard, no-lock commits, stamps, dossier sheet,
  pull-to-close, empty state); production deltas only (UI-SPEC §7): deck
  buffer + cursor refill (40/page), optimistic swipe persistence with
  2s/5s/10s/15s retry queue + toast, badge-once-per-session, real list
  filters + search (server-side), real Matches screen, /img/{id} everywhere
  with placeholder fallback, SW registration, safe areas, desktop centering
- manifest.json + sw.js (precache shell, network-first API, cache-first imgs)
- icons: 192/512/maskable/apple-touch-180, dark tile with the brand
  accent-gradient mark (Pillow)
- app/imgfetch.py: local mirror, hunt's Chrome-120 UA, ~1s pacing,
  skip-existing, .part writes atomic, per-item failure isolation,
  fetched/skipped/failed summary; verified: --limit 15 -> 15 fetched, full
  run 5 more, re-run 0 fetched 20 skipped (20/20 mirrored)
2026-11-10 21:21:27 -04:00

Bike-Tinder

A private, Tinder-style web app for browsing the motorcycle market: swipe real listings (like / nope / maybe), see everything on one editable list, and let the deck learn your taste. Built for Glenn; runs on the Rotarran, published to the tailnet only.

Status: v0.1 — design phase. No code yet; this repo currently holds the design docs. Build begins once the docs are approved.

How it works

[single-source crawler] → [nightly importer] → [app DB] → [API + PWA deck] → Glenn's thumb
                                                                  ↓
                                                        [swipe history] → [ranking]
  • Crawl — Kijiji (NS + NB; decided 2026-11-10 — see docs/SOURCES.md) is swept nightly by the existing hunt crawler; a script-only importer folds the results in. No LLM involved, zero token cost.
  • Import — the importer upserts the source's catalog into the app database: new listings appear, changes update, vanished listings retire after repeated misses (never a blocked page, never a guess).
  • Deck — a Tinder-like PWA: card stack, drag to swipe, big buttons. Like / Nope / Maybe. "It's a match" moment when you like something.
  • List & edit — every entry in one table; re-file any call later (a nope can become a like).
  • Ranking — cold start uses the hunt's rubric score; a cheap, fully explainable swipe-boost lands first (v1.x), then a small learned model (Phase 3, retrained nightly) orders the deck by your taste. "Because you liked X" chips, never a black box.

Docs

Branches

  • main — stable trunk (docs + verified code); the default branch.
  • dev — active development; build work lands here first.
  • release — deployable cuts; the Rotarran stack tracks this branch.

Deployment (planned)

A small podman compose stack on the Rotarran under /var/mnt/DATA/podman-stacks/bike-tinder/, its own systemd user unit (Delegate=yes), SQLite database. The stack ships its own Tailscale node (sidecar container — no host-tailnet coupling) and serves the app privately at https://biketinder.tailf35a34.ts.net. Single user; reachable only from Glenn's own devices.

Crew

  • Glenn — owner; the thumb that swipes.
  • Alex — resident agent; architecture, orchestration, docs.
  • Torres — engineer; builds and maintains this repo.
Description
Tinder. For motorcycles.
Readme 1 MiB
2026-11-13 14:29:08 -04:00
Languages
Python 74.7%
HTML 24.6%
JavaScript 0.5%
Dockerfile 0.2%