尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Berlin family address intelligence — turn a Berlin address into the assigned Grundschule, SESB flag, kita count, and nearest international school. Built on open Geoportal Berlin data.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Should I rent it?
Know your Berlin neighbourhood in thirty seconds — schools, transit, noise, air, history — before signing your next lease.
AddrLens takes any Berlin address and, in under 30 seconds, cross-checks it against 20+ open datasets published by the Berlin Senate, VBB, BVG, and OpenStreetMap:查看完整 README ↗Should I rent it? Know your Berlin neighbourhood in thirty seconds — schools, transit, noise, air, history — before signing your next lease.
Live at addrlens.de · MIT-licensed · No cookies · No signup · GDPR-clean
AddrLens takes any Berlin address and, in under 30 seconds, cross-checks it against 20+ open datasets published by the Berlin Senate, VBB, BVG, and OpenStreetMap:
Four curated Life Mode lenses (Young Family, Newcomer, Quiet Living, Commuter) surface the tiles most relevant to each situation. A Raw view lets anyone browse every dataset with full source attribution and licence tags.
Each lens ships an AI Insight panel — the model turns per-lens deterministic facts into a plain-English paragraph. Prod calls Cloudflare Workers AI (@cf/meta/llama-3.1-8b-instruct-fast); local dev falls back to mlx-lm on Apple Silicon or llama-cpp-python on Linux. Address-agnostic prompts + a 7-day server-side cache mean neighbours share the same LLM-derived text — cutting external calls and preserving privacy.
| Life Lens: Young Family | AI Insight |
|---|---|
| Raw view (all datasets, full attribution) | Life Lens compare (tier chips) |
|---|---|
| Source | Datasets used | Licence |
|---|---|---|
| Berlin Geoportal / FIS-Broker (gdi.berlin.de) | Schulen, Kitas, Krankenhäuser, Feuerwehr, Milieuschutz, Umweltatlas, Baumbestand, Trinkbrunnen, Grünanlagen, Bezirksgrenzen | dl-de/by-2-0 · dl-de/zero-2-0 |
| VBB Verkehrsverbund Berlin-Brandenburg | S-Bahn / U-Bahn / Tram station coordinates | CC-BY-4.0 |
| BVG Berliner Verkehrsbetriebe | Bus stops, service data | dl-de/by-2-0 |
| Geofabrik weekly extract of OpenStreetMap Berlin | International food, coworking, English clinics, language schools, libraries, Packstationen, Wochenmärkte, historic markers, address autocomplete | ODbL 1.0, © OpenStreetMap contributors |
| Berlin Senate GESIx 2022 (Gesundheits- und Sozialstrukturatlas) | Neighbourhood socioeconomic band per Planungsraum | dl-de/zero-2-0 |
Every card in the product surfaces its dataset name and licence tag. The full attribution list also lives in legal/impressum.md.
@cf/meta/llama-3.1-8b-instruct-fast) in prod; dev falls back to mlx-lm on Apple Silicon or llama-cpp-python (Qwen 2.5 1.5B Q4_K_M GGUF) on Linux — selected by INFERENCE_BACKENDsend_default_pii=False, address + IP redacted in before_sendThe active tree is v0.1/. Historical prototypes (phase0/–phase3/) are archived under docs/history/prototypes/ for lineage — many v0.1/app/core/* modules are ports of phase3/server.py and cite it in their comments.
| Directory | Purpose |
|---|---|
v0.1/app/ | FastAPI app — one process per city, selects CityConfig at boot via CITY=<slug> |
v0.1/inference/ | Shared LLM service (city-agnostic). Prod: Cloudflare Workers AI (INFERENCE_LOCAL_BACKEND=off). Dev: mlx (Apple Silicon) or llama.cpp (Linux) via INFERENCE_BACKEND |
v0.1/web/ | Single-page frontend (no bundler, no build step) — index.html + legal pages + static/app.js (126-LOC ES-module bootstrap) + 20 modules under static/modules/ (api, state, dom, maps, lens/, panels/) |
v0.1/scripts/ | Weekly OSM refresh (extracts amenities + addresses from Geofabrik) |
v0.1/ops/ | Dockerfiles, Cloudflare Tunnel config, systemd units, deploy scripts |
v0.1/docs/ | Deploy playbook, WAF setup, social-embed playbook |
legal/ | Impressum + Datenschutzerklärung (bilingual DE/EN, DDG §5 + DSGVO Art. 13 compliant) |
Two paths — pick one.
cd v0.1
# One-time on a fresh clone — same venv as the pytest suite (see ## Tests)
python3.13 -m venv .venv
uv pip install --python .venv/bin/python -e ".[dev]"
uv pip install --python .venv/bin/python -e "./inference[dev]" # mlx-lm
# Terminal 1 — inference on :8080
INFERENCE_BACKEND=mlx .venv/bin/uvicorn inference.main:app --port 8080
# Terminal 2 — app on :8003
CITY=berlin INFERENCE_URL=http://localhost:8080 \
.venv/bin/uvicorn app.main:app --port 8003
Open http://localhost:8003/.
cd v0.1
# Fetch the GGUF language model once (~940 MB)
mkdir -p models
curl -L -o models/Qwen2.5-1.5B-Instruct-Q4_K_M.gguf \
"https://huggingface.co/bartowski/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/Qwen2.5-1.5B-Instruct-Q4_K_M.gguf?download=true"
# The dev override mounts models/ + data/osm into the containers
docker compose up -d --build
Open http://localhost:8001/.
Neither path needs a Cloudflare Workers AI token — the app happily runs against the local llama.cpp fallback for every LLM call.
Two complementary test tiers:
pytest suite — 211 tests under v0.1/tests/ (unit + contract + opt-in integration). Runs in ~1 s. CI green on every push and PR via .github/workflows/test.yml.
cd v0.1
# One-time on a fresh clone
python3.13 -m venv .venv
uv pip install --python .venv/bin/python -e ".[dev]"
# Every time
.venv/bin/pytest # unit + contract, no network
.venv/bin/pytest -m integration # opt-in live Berlin Geoportal
.venv/bin/pytest --cov=app # coverage report
Selfchecks — every module ships a pure __main__ block that asserts its own contract; a single app.selfcheck orchestrator runs everything plus live-network checks against gdi.berlin.de. Kept alongside pytest for sub-second dev-loop feedback on a single module.
cd v0.1
# Pure asserts — no network, no model load, sub-second each
python -m app.core.scorer # tier boundaries + lens composers
python -m app.core.rate_limit # CF-Connecting-IP key extraction
python -m app.core.address_index # umlaut + street-suffix normalisation
python -m app.routes.lens_insight # per-lens AI template registration
# Live-network — pulls WFS layers, needs gdi.berlin.de reachable
python -m app.selfcheck
See v0.1/docs/hetzner-deploy.md for the full playbook — Debian 13 host bootstrap, Cloudflare Tunnel, secrets, systemd OSM refresh timer, Sentry + Umami wire-up.
Related runbooks:
v0.1/docs/social-embed-og-image.md — social preview cardsv0.1/docs/cloudflare-waf-setup.md — free-tier WAF rulesConcrete deliverables for the next six months, in rough order:
gdi.berlin.de. The Berlin Senate WFS had multi-day maintenance in August 2026; snapshot-based resilience is a prerequisite for treating this as public infrastructure.CityConfig at boot; each new city needs a data-source map and glossary translation.Bug reports, data-source additions, and small documentation fixes are welcome. See CONTRIBUTING.md for the layout, code style, and selfcheck workflow.
MIT — see LICENSE. Data sources retain their own licences (see the table above).
[email protected]