WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.