AI-powered ambulance & medical transport finder untuk Indonesia
AmbulansKu membantu masyarakat Indonesia menemukan ambulans dan fasilitas medis terdekat dalam dua skenario: Darurat (kecelakaan, serangan jantung) dan Terjadwal (cuci darah, kontrol rutin). Menggunakan AI triage layer yang memahami bahasa Indonesia, langsung menampilkan fasilitas terdekat dengan satu ketukan telepon.
Tanpa login. Langsung pakai. Mobile-first.
- 🧠 AI Triage — Analisis situasi dalam bahasa Indonesia via OpenRouter (model-agnostic)
- 📍 Geolocation — Deteksi lokasi otomatis via browser
- 🗺️ Google Maps — Peta interaktif + marker fasilitas medis
- 📞 One-Tap Call — Telepon langsung ke fasilitas/faskes
- 🔴🟡 Urgency Badge — Klasifikasi DARURAT / TERJADWAL
- 🏥 Google Places API — Pencarian RS, Puskesmas, PMI, Klinik terdekat
- 📱 PWA Ready — Installable, offline capable, mobile-first
- 🌙 Dark UI — Navy dark theme, designed untuk situasi panik
| Layer | Teknologi |
|---|---|
| Framework | Next.js 16 (App Router) |
| Styling | Tailwind CSS v4 + shadcn/ui |
| AI | Vercel AI SDK + OpenRouter (provider-agnostic) |
| Maps | Google Maps JavaScript API + AdvancedMarkerElement |
| Database | Supabase (PostgreSQL + PostGIS) |
| PWA | Web App Manifest + Service Worker |
| Deployment | Render |
- Node.js 18+
- npm
- Google Maps API Key
- OpenRouter API Key
- Supabase project (optional, untuk DB fallback)
git clone https://github.com/your-username/ambulansku.git
cd ambulansku
npm installCopy .env.local.example dan isi dengan key kamu:
cp .env.local.example .env.local# AI - OpenRouter (supports multiple providers)
OPENROUTER_API_KEY=your_openrouter_key
AI_MODEL=openai/gpt-4o-mini
AI_BASE_URL=https://openrouter.ai/api/v1
# Google Maps (server-side for Places API)
GOOGLE_MAPS_API_KEY=your_google_maps_key
# Google Maps (client-side for Maps JS)
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=your_google_maps_key
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keyJalankan SQL di Supabase SQL Editor:
# Lihat file supabase-schema.sql untuk schema lengkapnpm run devnpm run build
npm startambulansku/
├── app/
│ ├── layout.tsx # Root layout + PWA meta
│ ├── page.tsx # Landing + triage input
│ ├── globals.css # Design tokens + Tailwind
│ ├── hasil/
│ │ └── page.tsx # Search results + map
│ └── api/
│ ├── triage/route.ts # AI triage endpoint
│ └── facilities/route.ts # Google Places + Supabase
├── components/
│ ├── TriageInput.tsx # Free text input
│ ├── FacilityCard.tsx # Result card
│ ├── MapView.tsx # Google Maps (AdvancedMarker)
│ ├── UrgencyBadge.tsx # DARURAT / TERJADWAL
│ ├── CallButton.tsx # One-tap tel: link
│ └── QuickSelect.tsx # Quick situation buttons
├── lib/
│ ├── ai.ts # Vercel AI SDK + OpenRouter
│ ├── cors.ts # CORS helpers
│ ├── places.ts # Google Places helper
│ └── supabase.ts # Supabase client
├── types/
│ └── index.ts # TypeScript types
├── public/
│ ├── manifest.json # PWA manifest
│ ├── sw.js # Service Worker
│ └── icons/ # PWA icons (72-512px)
└── supabase-schema.sql # Database schema + seed
Ganti provider AI tanpa code changes — cukup ubah .env.local:
| Provider | AI_BASE_URL |
AI_MODEL |
|---|---|---|
| OpenRouter (default) | https://openrouter.ai/api/v1 |
openai/gpt-4o-mini |
| OpenRouter + Claude | https://openrouter.ai/api/v1 |
anthropic/claude-sonnet-4-20250514 |
| OpenRouter + DeepSeek | https://openrouter.ai/api/v1 |
deepseek/deepseek-chat-v3-0324 |
| OpenAI langsung | https://api.openai.com/v1 |
gpt-4o-mini |
| Local (Ollama) | http://localhost:11434/v1 |
llama3 |
- Buka app di HP
- Tap "Kecelakaan" dari quick select
- App minta izin lokasi → allow
- AI loading screen → hasil muncul
- Tunjukkan: badge DARURAT, AI message, tombol 119
- Tunjukkan 3 fasilitas terdekat dengan jarak & tombol telepon
- Demo skenario "Cuci Darah" → badge berubah TERJADWAL
MIT
Built for Vibathon 2025 — Tema "Baru"