Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Love the flat? Check the Neighbourhood. Discover what life around any Berlin address is really like — schools, transit, noise, air, history — in just 30 seconds.
LifestylePython · JavaScriptGitHub @saptadipOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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:Read the full 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]