Appearance
Roadmap (open items)
What's not done yet. The platform's Phases 0–4 (usability → data depth → admin/ops → buyer accounts → intelligence) have largely shipped; everything below is either structurally in place but waiting on an external provider/infra, an open product decision, or out of scope for this horizon. Each item names the seam to plug into.
The test & hardening suite (seeding · E2E · integration · load · security) is done — see Testing.
Needs an external provider / credentials
- NL-search LLM provider — implement the
NlSearchProviderinterface inapps/mcp-server/src/search/nlSearch.ts(alongsideHeuristicNlSearchProvider) and select it by env. Open: EU/CH region, budget, query-retention policy. The heuristic parser is the working fallback today. - Transactional email + web-push delivery — implement the
Notifierinterface inapps/mcp-server/src/notify/notifier.ts(aBrevoSmtpNotifierusing the Brevo config in Operations; a VAPID web-push notifier).LogNotifieralready runs the saved-search alert pass. - Schedule the alert pass — call
runSavedSearchAlertson a cron (or hitPOST /v1/admin/run-alertsfrom the host scheduler). Idempotent via each saved search'slastNotifiedAthigh-water mark.
Needs Keycloak / infra config
- Buyer role + email-verified self-registration — re-enable
registrationAllowedwith email verification and add a buyer role inkeycloak/realm-export.json+ the live-realm provisioning script. Buyer endpoints already authenticate vialistings:read; no code change needed when the role lands. - Off-box backup copy (rclone → object storage) + Tailscale no-SSH access — optional infra upgrades (daily on-box Postgres backups already run).
- External uptime/alerting + slow-query logging —
/healthzand/readyzexist; wire an external monitor + Postgreslog_min_duration_statement. - Final legal copy — Impressum / nDSG privacy / ToS pages are scaffolded with placeholders (
apps/webapp/src/components/Legal.tsx); drop in counsel-supplied text.
Webapp UI (backend complete; serves any client today)
- Moderation views —
/v1/admin/*is ready; the webapp needs thelistings:moderatescope wired into its OIDC client + granted to staff first. - Recently-viewed rail on the listing detail (the similar-vehicle rail already ships).
Open product decisions
- Equipment taxonomy — adopt AutoScout24's ~70-attribute set, or keep our own canonical enums (current)?
- Prod/staging Postgres — keep the shared instance, or split DBs/roles per env?
- Legal copy — who supplies Impressum / privacy / ToS text?
Out of scope this horizon (Phase 5+)
Financing/leasing + calculator, valuation, promotion/featured listings, billing/subscriptions, PWA, DMS feed import, instant-offer auctions, integrated vehicle-history reports.