A Next.js + Supabase app with an auth-gated landing experience and an interactive full-screen Google Map for discovering accessible locations in NYC.
Amy Arias, Noor Kanaan, Justin Lema, Raynelis Villa
- Unauthenticated users on
/see a centered auth modal with:- Sign in
- Sign up
- Authenticated users on
/see:- Full-screen NYC map with location search
- Browser location permission request
- User location marker plotting
- Top overlay search bar for place/address search
- Use My Location action to re-center on current location
- Interactive location detail panels with reviews, ratings, and service request submission
- Location Search: Search for addresses and places using Google Places API
- Location Details: View reviews, comfort ratings, and accessibility tags for each location
- User Reviews: Add reviews with comfort scores and accessibility information
- Service Requests: Report accessibility issues (broken ramps, elevator outages, etc.)
- Responsive Design: Mobile-friendly interface with Tailwind CSS and shadcn/ui
- Framework: Next.js 14+ (App Router)
- Authentication: Supabase Auth (SSR + client auth)
- Styling: Tailwind CSS + shadcn/ui
- Maps: Google Maps JavaScript API
- State Management: React Context API
- Storage: Browser SessionStorage (for client-side review persistence)
app/page.tsx— Auth-gated root routeapp/layout.tsx— Root layout with providerscomponents/auth-landing-modal.tsx— Authentication modalcomponents/nyc-map.tsx— Interactive Google Map componentcomponents/home-map-client.tsx— Client-side map wrappercomponents/location-detail-panel.tsx— Location reviews, ratings, and service requestscomponents/selected-location-context.tsx— Shared location state context
Create a .env.local file in the project root:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=your_google_maps_api_key- Node.js 18+ and npm/yarn
- A Supabase project
- A Google Cloud project with Maps API enabled
- Create/select a Supabase project at supabase.com
- Go to Project Settings → API
- Copy
Project URLandAnon Public Key - Set in
.env.local:NEXT_PUBLIC_SUPABASE_URL= Project URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY= Anon Public Key
- Create/select a Google Cloud project
- Enable these APIs:
- Maps JavaScript API
- Geocoding API
- Places API (recommended for address search)
- Create an API key (Credentials → Create Credentials → API Key)
- Restrict your API key:
- Application restriction: HTTP referrers
- Allowed referrers:
http://localhost:3000/*(development)- Your production domain (when deployed)
- API restriction: Limit to Maps JavaScript API, Geocoding API, and Places API only
- Set in
.env.local:NEXT_PUBLIC_GOOGLE_MAPS_API_KEY= Your API key
- Clone the repository:
git clone <your-repo-url>
cd AccessibilityQuackHacks- Install dependencies:
npm install-
Create
.env.localwith the variables from above -
Start the dev server:
npm run dev- Open http://localhost:3000 in your browser
npm run dev— Start local development servernpm run lint— Run ESLintnpm run build— Production buildnpm run start— Run production server
- Next.js — React framework with App Router
- React — UI library
- Supabase — Open-source Firebase alternative for auth
- Tailwind CSS — Utility-first CSS framework
- shadcn/ui — High-quality React components
- Google Maps JavaScript API — Interactive maps
- Google Geocoding API — Address-to-coordinates conversion
- Google Places API — Place search and autocomplete
If any API keys are ever pushed to version control or shared publicly:
- Immediately revoke the key in the provider dashboard
- Regenerate a new key
- Update
.env.localwith the new key - Consider using git-secrets or similar tools to prevent future leaks
Artifical Intelligence was used to prepare frontend templates and speed up debbuging process.
Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)
For more information, see the LICENSE file or visit creativecommons.org/licenses/by-nc/4.0/.