7.8 KiB
Setrip — Social Repositioning Roadmap
Status implementasi reposisi dari "open trip pendakian" → "platform untuk menemukan teman aktivitas & trip bareng".
Prinsip pembeda: Setrip bukan trip-marketplace. Trip adalah kendaraan untuk koneksi sosial (stranger → teman → circle). Setiap fitur dievaluasi: apakah memperkuat find a companion, atau hanya book a trip? Kalau cuma yang kedua → tolak.
Phase A — Quick wins (sinyal sosial dari data yang sudah ada) ✅
Selesai. tsc --noEmit lulus. Migration 20260508120000_add_profile_vibe belum di-apply ke DB.
| # | Item | Status | File |
|---|---|---|---|
| A1 | Hapus ikon 🏔️ hardcoded di trip detail → ikon + label kategori dinamis |
✅ | app/trips/[id]/page.tsx |
| A2 | Banner onboarding profil di layout (muncul kalau UserProfile kosong) |
✅ | components/shared/profile-nudge-banner.tsx, app/layout.tsx |
| A3 | Confirmed-peserta dirombak: chip nama → kartu (avatar + kota + 3 tag minat) | ✅ | server/repositories/trip.repo.ts, app/trips/[id]/page.tsx |
| A4 | Field vibe (CHILL/BALANCED/HARDCORE) di UserProfile + UI editor + badge di profil publik |
✅ | prisma/schema.prisma, prisma/migrations/20260508120000_add_profile_vibe/migration.sql, lib/vibe.ts, features/profile/schemas.ts, features/profile/actions.ts, server/repositories/profile.repo.ts, server/repositories/user.repo.ts, server/services/profile.service.ts, features/profile/components/profile-editor.tsx, app/profile/page.tsx, app/u/[id]/page.tsx |
Tindakan manual: jalankan npx prisma migrate deploy (atau dev) untuk apply migration 20260507185257_add_user_profile + 20260508120000_add_profile_vibe.
Phase B — Discovery (people-first, bukan price-first) ✅
Selesai. tsc --noEmit lulus. Migration 20260508130000_add_trip_vibe belum di-apply ke DB.
Keputusan desain: Trip reuse enum Vibe yang sama dengan UserProfile (alih-alih bikin pace/level baru) supaya matching peserta↔trip langsung selaras tanpa mapping.
| # | Item | Status | File |
|---|---|---|---|
| B1 | Halaman /people — daftar user dengan profil terisi |
✅ | app/people/page.tsx, server/repositories/user.repo.ts (findPeople), server/services/profile.service.ts |
| B2 | Filter kota, interests, vibe di /people |
✅ | features/profile/components/people-filter.tsx, features/profile/components/user-card.tsx |
| B3 | Field vibe di Trip + tampil di trip detail & TripCard + filter di /trips |
✅ | prisma/schema.prisma, prisma/migrations/20260508130000_add_trip_vibe/migration.sql, features/trip/schemas.ts, features/trip/actions.ts, server/services/trip.service.ts, features/trip/components/create-trip-form.tsx, features/trip/components/trip-card.tsx, app/trips/[id]/page.tsx |
| B4 | TripCard: 3 avatar peserta confirmed + counter +N |
✅ | server/repositories/trip.repo.ts (include participants di findOpen), features/trip/components/trip-card.tsx, app/page.tsx, app/trips/page.tsx |
| B5 | TripCard: badge "✨ X peserta sama minat" untuk user login | ✅ | features/trip/components/trip-card.tsx (compute overlap), homepage & /trips (fetch viewer interests) |
| B6 | Filter ukuran grup (Small ≤10 / Medium 11–20 / Large 21+) | ✅ | server/repositories/trip.repo.ts (GroupSize filter), features/trip/components/trip-filter.tsx, app/trips/page.tsx |
| B7 | Section "Budget Friendly" → "Lagi Ramai" (social proof) | ✅ | app/page.tsx — sort by participantCount desc, framing "kamu nggak bakal jalan sendirian" |
| B+ | Link /people di navbar (desktop + mobile) |
✅ | components/shared/navbar.tsx |
Tindakan manual: jalankan npx prisma migrate deploy untuk apply migration 20260508130000_add_trip_vibe (selain 2 migration Phase A yang masih pending).
Phase C — Interaksi & continuity (separate, lebih besar) ⏳
Belum mulai. Setiap item bisa jadi PR terpisah karena perlu schema baru + UI substansial.
| # | Item | Status | Catatan |
|---|---|---|---|
| C1 | Model TripMessage — Q&A publik per trip (sebelum berangkat) |
⏳ pending | Schema + actions + UI di trip detail. Calon peserta tanya organizer tanpa keluar app. |
| C2 | Group chat untuk peserta CONFIRMED (post-confirmation) | ⏳ pending | Bisa pakai tabel TripMessage yang sama dengan flag audience (PUBLIC/CONFIRMED_ONLY). |
| C3 | Model Connection (follow / circle) antar user |
⏳ pending | Foundation untuk "from strangers → circle". Halaman "Circle saya". |
| C4 | Notifikasi: organizer punya pending join, peserta dapat balasan Q&A, dst | ⏳ pending | Bisa email dulu, in-app belakangan. |
| C5 | Post-trip continuity: tombol "follow buddies dari trip ini" + album foto bareng | ⏳ pending | Momen konversi stranger → circle terbesar saat ini terbuang. |
| C6 | Review user (bukan cuma trip) — reputasi peserta (no-show? kooperatif?) | ⏳ pending | Lengkapi trust layer. Anti-scam. |
| C7 | Onboarding flow wajib post-register (bukan banner) — minta minimal 3 interests + city + vibe sebelum bisa join trip | ⏳ pending | Banner Phase A2 cuma soft nudge. Hard-gate saat user pertama kali pencet "Join". |
| C8 | Referral / invite-with-link | ⏳ pending | Loop pertumbuhan komunitas. |
❌ Anti-list (yang harus DITOLAK kalau muncul)
Fitur-fitur ini akan menarik Setrip ke arena OTA (Traveloka/Klook) yang tidak bisa dimenangkan:
- Booking hotel / tiket pesawat
- Tour massal tanpa interaksi (>30 orang, bus pariwisata)
- Mass listing dari travel agent (B2B aggregator)
- Filter & sort harga yang lebih agresif (price-low-to-high, dll.) — perkuat framing harga-dulu
- Affiliate/komisi dari pihak ketiga yang bukan organizer terverifikasi
- SEO-driven mass content untuk destinasi (artikel "10 Gunung Terbaik di Jawa") tanpa angle social
- Integrasi pembayaran kompleks (split-bill, escrow rumit) sebelum chat dasar (C1) ada — prioritas terbalik
Kalau muncul request ke arah ini, tanya: "ini meningkatkan kemungkinan dua orang asing kenalan, atau cuma memudahkan transaksi?" Kalau jawabannya yang kedua → tolak / tunda.
Konteks positioning (referensi cepat)
Untuk siapa: orang yang ingin pergi tapi tidak punya teman, ingin kenalan baru lewat aktivitas bareng.
Bukan untuk: orang yang sudah punya grup dan tinggal cari paket trip termurah.
Categories yang valid (semua harus punya: organizer, group kecil, interaksi sosial):
- Core: hiking, camping
- Natural expansion: snorkeling, diving, island hopping
- Social activity: city trip, kulineran, konser bareng
- Semi-professional: workshop, kelas outdoor, retreat
Tagline: "Pergi bareng, bukan sendiri" / "From strangers to travel buddies".