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.
Where can you work in London today? Verified wifi speeds for cafés, coworking spaces, and hotel lobbies — mapped like a metro network.
Translation pending
LifestyleTypeScript · CSSGitHub @thisyearnofearOnlineOwner 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
A crowdsourced metro map of café wifi speeds. Cafés are stations. The three lines are speed tiers, not geography.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A metro map of the best places to get coffee and get online. Live in London, Nairobi, and San Francisco.
Built for the Nimiq Pay Mini Apps Competition.
Lattency is a crowdsourced metro map of workable coffee spots — cafés, coworking spaces, hotel lobbies, and anywhere else you can sit down with a coffee and a laptop. Venues are stations. The three lines are speed tiers: Express (≥50 Mbps), Local (10–49 Mbps), and Suspended (<10 Mbps).
The engine works everywhere. The first three boards are London, Nairobi, and San Francisco — switch cities from the nav or deep-link directly to /london, /nairobi, or /sf.
| Layer | Choice | Why |
|---|---|---|
| Backend | Base44 (entities, auth, Deno functions) | Free backend with built-in auth, DB, and hosting — no infra to manage |
| Frontend | Next.js 16.3 on Vercel (App Router, RSC, ISR) | Multi-city SSG, schematic/geographic map, realtime Base44 subscriptions |
| Network | Base44 SDK via @base44/sdk | Serverless-safe — the SDK client is shared across invocations |
| Payments | Nimiq Pay via @nimiq/mini-app-sdk | Contributors earn NIM for verified speed tests; sponsors fund bounties |
A finished Mini App inside Nimiq Pay where anyone in a live city can:
The speed test is the trust mechanism. The NIM reward is the growth mechanism. The map is the product.
We believe the best data about a workspace comes from someone who is physically there. Lattency turns that private experience into a public good:
We started with cafés. The engine supports cafés, coworking spaces, hotel lobbies, libraries, and hybrid venues. We call them all stations.
AI agents cannot walk into a café and run a speed test. They need a trusted, verified, real-time source of physical-world infrastructure data to make decisions for their human users.
Lattency is a physical-world oracle for the agentic era. We don't build the agent — we build the ground-truth layer that agents consume.
app/
├── page.tsx # Root redirect → /london (carries query params)
├── [city]/page.tsx # Dynamic city route (London / Nairobi / SF), SSG
├── tour/ # Story page + self-running product-loop reel
├── cafes/[slug]/ # Per-venue standalone page
├── partners/ # Sponsorship / bounty dashboard
├── me/ # Contributor profile + payout rail
├── opengraph-image.tsx # OG image (1200×630, "Live in 3 cities")
├── api/cafes/ # POST /api/cafes (create venue + first measurement)
├── api/cafes/near # GET nearby venues (Haversine filter)
├── api/cafes/[id] # GET venue detail + stats
├── api/measurements # POST /api/measurements
├── api/bounties/claim/ # NIM payout flow
└── api/speedtest/ # download.bin, upload sink, whereami
base44/ # Base44 backend config
├── entities/
│ ├── Cafe.json # Venue entity schema
│ ├── Measurement.json # Speed measurement schema
│ ├── Sponsorship.json # Sponsor schema
│ └── Bounty.json # Bounty schema
├── functions/ # 7 Deno backend functions (service role)
└── agents/
└── workspace_concierge.jsonc # AI concierge agent
components/
├── top-nav.tsx # Sticky nav (multi-city links)
├── map-shell.tsx # SVG schematic ↔ Leaflet geographic map, optimistic pins, trail
├── live-map.tsx # Realtime wrapper (Measurement.subscribe)
├── city-switcher.tsx # Split-flap multi-city selector
├── station-directory.tsx # List + filter + geolocation
├── cafe-detail.tsx # Venue detail drawer
├── cafe-page.tsx # Per-venue page
├── cafe-contribution-form.tsx # Add a new venue flow + immediate tier verdict
├── measurement-form.tsx # In-browser speed test
├── bounties-board.tsx # City-aware sponsor-funded bounties
├── concierge-chat.tsx # AI oracle drawer
├── ai-venue-summary.tsx # Auto-generated editorial one-liner
├── map-toast.tsx # Shared toast system (arrival, promotion)
├── onboarding-overlay.tsx # First-visit coach ticket
└── loop-storyboard.tsx # Self-running product reel (SVG animation)
lib/
├── base44.ts # Base44 SDK client singleton
├── base44-data.ts # Data-access layer
├── cafes.ts # Read path + mock fallback
├── cities.ts # City registry (London, Nairobi, SF)
├── cafe-metadata.ts # Workspace metadata vocabulary
├── map-data.ts # Tier paths, waypoints, TIER_USE, tierForDown()
├── measurements.ts # Shared insert path
├── rate-limit.ts # Rate-limiting + outlier logic
├── speedtest.ts # In-browser speed test
├── bounties.ts # City-aware bounty logic
├── mock-cafes.ts # Bundled fallback (33 stations, 3 cities)
└── types.ts # Shared types
hooks/
├── use-personal-trail.ts # localStorage per-city contributed stations
└── use-realtime-cafes.ts # Measurement.subscribe wrapper
Cafe entity)| Field | Type | Notes |
|---|---|---|
name | string | Required |
neighbourhood | string | e.g. "Shoreditch" |
latitude | number | Required |
longitude | number | Required |
venue_type | string | cafe, coworking, hotel-lobby, library, hybrid |
vibe | string | Short editorial descriptor |
city | string | Default "london" |
price_tier | string | budget, mid, premium |
milk_options | array | e.g. ["oat", "soy"] |
power_outlets | boolean | Are outlets available? |
seating | string | bar, tables, lounge, mixed |
noise_level | string | quiet, moderate, loud |
table_space | string | small, standard, large |
wifi_network | string | SSID or password hint |
photo_url | string | Base64 data URL |
| Field | Type | Notes |
|---|---|---|
cafe_id | string | Required — Venue entity ID |
down_mbps | number | Required |
up_mbps | number | Required |
latency_ms | number | Required |
jitter_ms | number | |
loss_pct | number | |
measured_at | datetime | |
time_bucket | string | morning, afternoon, evening |
photo_url | string | |
test_method | string | manual, browser-auto |
target_server | string | Edge region id |
device_type | string | Derived from User-Agent |
contributor_ip_hash | string | Hashed for rate-limiting only |
is_outlier | boolean | Flagged by stats function |
contributor_user_id | string | Base44 User ID |
Contributors earn NIM for verified speed tests that complete sponsor-funded bounties. The flow:
NIM is the default reward token. USDT on supported EVM chains can be added later.
pnpm install
npx base44 create # scaffold or link the Base44 backend
npx base44 entities push # deploy entity schemas
npx base44 functions deploy # deploy geo-filter + stats functions
pnpm dev # random high port (see AGENTS.md)
Type-check the whole project:
pnpm exec tsc --noEmit
Run the smoke suite:
pnpm test
pnpm build
vercel --prod
npx base44 deploy
MIT