Skip to content

Repository files navigation

Roda Belém

A crowdsourced accessibility map for Belém, Pará. "Is this place accessible?" is not a yes/no question, so this app does not ask it that way — venues are scored against twelve concrete criteria that a wheelchair user, a blind visitor or a Deaf visitor can actually act on.

Ramp Elevator Adapted bathroom
Braille signage Tactile paving Reserved parking
Adapted tables & counters Wheelchair available on site Libras (sign language)
Guide dog allowed Online accessibility Assistive technology access

How it works

The map is the interface. On load, +layout.server.ts injects the Google Maps key server-side (never shipped in the bundle), Capacitor Geolocation resolves the visitor's position — falling back to navigator.geolocation on the web — and the app asks the backend for venues inside the current radius.

  • Custom markers, not default pins. src/routes/+page.svelte renders SVG AdvancedMarkerView markers and fills rated-accessible places green, so the answer is visible before any tap.
  • Radius-based discovery. distGeographicTwoPoints() in utils.ts does the haversine locally, and panning the map refetches only what moved into view.
  • Accessibility filtering is a server query. GET /places/accessibility?feature=X is answered in SQL by the backend rather than filtered client-side, so a visitor on mobile data downloads only matching venues.
  • State kept small and explicit. stores.ts holds exactly four stores — mapStore, mapLoaded, currPosition, radiusStore.

Backend: roda-belem-service (Go + MySQL + sqlc). Landing page: smoke-test-roda-belem.

Stack

SvelteKit 1 · Svelte 4 · TypeScript · Tailwind CSS · Flowbite Svelte · Google Maps JS API · Capacitor 5 (Android target configured) · anime.js · Notyf · adapter-vercel

Run it

pnpm install
pnpm dev                  # localhost:5173
pnpm run update-app       # Capacitor sync for the Android target

Environment: MAPS_API_KEY — read server-side in src/routes/+layout.server.ts. The API base URL is currently hardcoded in src/lib/api/; point it at your own roda-belem-service instance.

Status — alpha, self-host to try it

Working: map with custom markers, geolocation, nearby discovery, accessibility filtering, favourites and profile views, search.

Not wired yet: the login form validates locally but never calls POST /users/login; review submission and the individual place page are unbuilt; Capacitor is configured but no service worker exists, so there is no offline mode.

The previous Vercel deployment is gone — run it locally against your own backend.

About

Crowdsourced accessibility map for Belém: rate venues against a 12-point checklist (ramps, Braille, adapted bathrooms) — SvelteKit + Google Maps + Capacitor.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages