mAccess Map
An inclusive, community-powered accessibility review platform — with AI-driven feature suggestions and NFT badges to reward contributors.
Inspiration
We believe everyone deserves equal access to the built world. Too often, information about ramps, Braille signage, talking elevators or automatic doors lives in scattered spreadsheets or hard-to-find forums. At the 3PercentClub hackathon, we saw an opportunity to empower under-represented voices by letting anyone—with or without deep Web3 experience—crowdsource and share real-world accessibility data. By marrying AI, blockchain badges, and a familiar map interface, we wanted to lower barriers for both contributors and consumers of accessibility information.
What it does
- Search & discover public spaces (restaurants, transit, parks, etc.) on a map and see an accessibility summary (rating, features, comments).
- Add reviews using Google Places Autocomplete + map-based geocoding to capture location, rating, comments.
- AI suggestions: write a quick comment (“good lighting, clear signage”) and our HuggingFace model recommends relevant features to tag (e.g.
visual-aids,audio-cues). - Supabase backend with Row-Level Security ensures only authenticated users can write, while the world can read reviews in real time.
- NFT badges: every verified review earns you on-chain badges (First Steps, Community Builder, etc.). Metadata lives on IPFS and OpenZeppelin’s ERC-721 contract mints directly to your wallet.
How we built it
- Frontend: React + Vite + Tailwind.
- Google Maps JavaScript API (Places Autocomplete → PlaceAutocompleteElement migration ahead)
- Contexts for Auth (Supabase) and Wallet (Ethers.js)
- PhotoUpload component storing images in Supabase Storage
- Google Maps JavaScript API (Places Autocomplete → PlaceAutocompleteElement migration ahead)
- Backend: Supabase
- Tables for
locations,reviews,user_profiles,nft_badges - RLS policies: authenticated users can INSERT/UPDATE their own data; public role can SELECT
- Tables for
- AI: HuggingFace Zero-shot classification
- Candidate labels matched to our feature keys
- Explanation generation via template on top suggestions
- Candidate labels matched to our feature keys
- Blockchain:
- ERC-721 contract (OpenZeppelin’s
ERC721URIStorage+Ownable) deployed on Sepolia - BadgeMinted event for easy log parsing
- Metadata uploaded to IPFS via Pinata/Infura
- Ethers.js in
mintBadgeNFT()to send transactions, parseBadgeMintedor fallback toTransfer.
- ERC-721 contract (OpenZeppelin’s
- Badges System: badgeSystem.ts orchestrates eligibility → metadata → on-chain mint → Supabase record.
Challenges we ran into
- Row-Level Security: initially blocked INSERTs until we fine-tuned policies (
INSERTfor authenticated role, publicSELECT). - Token ID extraction: our first contract emitted only
Transfer; parsing logs to get the right tokenId took some trial and error. Now we emit a customBadgeMintedevent for reliability. - Google Places Autocomplete deprecation: migrating to
PlaceAutocompleteElementis next on our list. - Supabase timeouts: dealing with “raw fetch POST 401” until we unlocked RLS and refreshed anon keys correctly.
- UI state: keeping auth, maps, AI suggestions, photo uploads, and submit spinner in sync required careful effect and error handling.
Accomplishments that we're proud of
- End-to-end flow from typing an address → AI-powered feature tags → on-chain badge minting.
- Robust error handling with toasts, console logs and user-friendly messages for almost every edge case.
- Badge automation: users can click “Claim Badge” immediately after their first review, or watch it mint automatically on submission if they’ve connected a wallet.
- Polished UX: mobile-first, PWA install prompt, “Locate me” button, “Submitting…” spinners, and smooth map integration.
What we learned
- Security first: even in a hackathon, RLS + AccessControl patterns matter for protecting data integrity.
- Contract design: custom events (
BadgeMinted) pay dividends when you parse logs off-chain. - AI integration: zero-shot classification can drive real-time UX features, but you need thresholds to avoid spamming suggestions.
- Coordination: juggling Supabase auth state, map loading, photo uploads, AI calls, and wallet connections pushes React hooks to their limits—centralized state and disciplined logging saved the day.
What’s next for mAccess Map
- 🔄 PlaceAutocompleteElement migration for future-proof address input.
- 🌐 Multi-chain support (Polygon, BSC) so badges live in mainnet worlds.
- 📊 Enhanced Analytics dashboard to surface trending features and underserved neighborhoods using AI.
- 🌍 Offline reviews via Service Worker sync for when connectivity is spotty.
- 🛠️ AI Review Flag for reviewing & verifying user-submitted reviews to reduce manual approval timeframe.
- 🏆 Leaderboard Social Share: Show top contributors, share badges on Twitter / Discord.
Thanks for checking out mAccess Map! We can’t wait to see how this grows into a truly global, user-driven accessibility resource. 🎉
Built With
- google-geocoding
- react
- supabase
- vite


Log in or sign up for Devpost to join the conversation.