尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Extra time on your trip? Giggles Maps fills it with the best local stops across Thailand, then turns every visit into passport stamps, Siam Si fortunes and quests. React + MapLibre + Supabase, iOS via Capacitor.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Giggles Maps turns the spare minutes on a trip into a mini adventure. Say where you're going and how much extra time you're OK with: it plans a route through the best local stops on the way, across all 77 provinces of Thailand (temples, viewpoints, cafés, OTOP craft shops), ranked on quality, with paid Partners always labelled. At each stop you check in with a photo and collect passport stamps, XP, coins and Siam Si fortune sticks. Shops pay only for visits that really happened.
| 🧭 Detours that fit your time | Quick (+20 min), Relaxed (+45 min), Half day or Day out, each already planned on real road times, with the arrival and leave time at every stop. Add a stop between any two, or drag to reorder: the route follows. |
| 📍 Check in, collect Thailand | A photo at the stop stamps your passport: a visa for each of the 77 provinces, landmark stamps, a logbook of every visit. |
| 🎋 Siam Si fortune sticks | Every new place earns a shake of the เซียมซี cup: coins, XP boosts or cosmetics, with published odds and pity. |
| ⬆️ Level-up rewards | Each level lets you pick a permanent perk, +10% luck or +10% coins, and unlocks a sky-themed cosmetic. |
| ✍️ Give back, get rewarded | A written review of a place you visited earns a Siam Si shake; your first photo of a stop on its page earns coins. |
| 🏆 Play with friends | Weekly and all-time leaderboards, province champions, quests and chests, a friends feed, ride-along trips with live positions and a shared album. |
| 🌙 Dark mode | Light, Dark, or Auto (follows your phone). The map goes dark with it. |
| 🏪 For shops | Claim your listing free, add products and photos, see how many trips pass your door. Partners (฿299/month) show first on members' routes, always labelled, and take bookings. |
flowchart LR
subgraph Client["Web app (React + MapLibre) · iOS app (same code in Capacitor)"]
UI[Screens] --> API[lib/api.ts]
end
API -->|RPC + RLS| PG[(Supabase Postgres + PostGIS)]
API -->|Edge Functions| EF[plan-route · navigate · verify-checkin · payments]
EF --> V[Valhalla routing]
EF --> PG
PG --> ST[(Storage: check-in photos, place photos)]
plan-route shortlists places along the road corridor in PostGIS, gets real road times from Valhalla,
then picks and orders stops to fill your budget (insertion + 2-opt). Opening hours and meal windows are respected; a place with no listed hours gets the usual hours for its kind.
Algorithm notes · Thailand routing| Layer | Stack |
|---|---|
| Web | React 18, TypeScript, Vite, MapLibre GL, OpenFreeMap tiles, offline Protomaps packs |
| iOS | Capacitor 8 shell + Swift plugins (App Attest, StoreKit 2, Live Activities, location) |
| Backend | Supabase: Postgres + PostGIS, Auth, Storage, Deno Edge Functions |
| Routing | Valhalla (OpenStreetMap) |
| Hosting | Cloudflare Pages |
web/ landing page, web app (/app) and shop dashboard (/shop); tools/ renders the brand images
ios/ the iOS app: Capacitor shell, Swift plugins, widgets
android/ native Android app (Kotlin + Compose), see android/AGENTS.md
supabase/ migrations, Edge Functions, SQL tests
docs/ architecture, API contract, platforms, monetization, gamification
marketing/ the 10-second hype clip in HyperFrames: hype/ (16:9) and hype-vertical/ (9:16)
cd web
cp .env.example .env # Supabase URL + publishable key
npm install
npm run dev # http://localhost:5173/app/
# iOS (Capacitor): build the web app into the shell, then run the App scheme in Xcode
cd web && npm run ios && open ../ios/App/App.xcodeproj
# backend
supabase link --project-ref xrlxfvwrkowaybtkkrdl
supabase db push # migrations
supabase functions deploy --use-api # edge functions
# tests
cd supabase/functions/_shared && bun test # planner, corridor, navigation
cd web && bun test src # app logic
supabase db query --linked -f supabase/tests/level_rewards.sql # reward rules, rolled back
# deploy the web app
cd web && npm run build && npx wrangler pages deploy dist --project-name giggles-maps --branch main
Edge Function secrets (supabase secrets set): CRON_SECRET, SITE_URL, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET,
VALHALLA_URL.
Offline province maps are Protomaps packs in the R2 bucket giggles-maps-offline; rebuild with
python3 supabase/tools/offline_packs.py --build <YYYYMMDD> --upload (needs the pmtiles CLI).
Architecture · API contract · Gamification · Monetization · iOS vs Android · Android roadmap · App Store · Contributors and coding agents: start at AGENTS.md
Place data and routing © OpenStreetMap contributors (ODbL) · map tiles: OpenFreeMap, Protomaps · fonts: LINE Seed Sans TH, Mali, IBM Plex Mono (SIL OFL 1.1) · icons: Lucide (ISC) · clip music: "Whimsy Groove" by Kevin MacLeod (incompetech.com), CC BY 4.0.