diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6fb85bb..dc5f1b3 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -11,7 +11,10 @@ "PowerShell(npx tsc --noEmit 2>&1)", "PowerShell(npx eslint server/services/refund.service.ts server/repositories/refund.repo.ts features/refund app/admin/refunds 2>&1)", "PowerShell(npx eslint server lib features app 2>&1)", - "Bash(npx eslint *)" + "Bash(npx eslint *)", + "Bash(Get-ChildItem -Path \"D:\\\\development\\\\weekly-project\\\\setrip\" -Recurse -Directory -Depth 2)", + "Bash(Select-Object FullName)", + "Bash(Get-Content -Path \"D:\\\\development\\\\weekly-project\\\\setrip\\\\.env.example\" -ErrorAction SilentlyContinue)" ] } } diff --git a/PRIVACY.md b/PRIVACY.md index 9820bcc..34d7e87 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -1,6 +1,6 @@ # 🔒 Privacy Policy (Kebijakan Privasi) SeTrip -**Terakhir diperbarui: 2026-04-27** +**Terakhir diperbarui: 2026-06-02** SeTrip menghargai privasi Anda. Kebijakan Privasi ini menjelaskan bagaimana kami mengumpulkan, menggunakan, dan melindungi informasi Anda saat menggunakan platform SeTrip. @@ -10,62 +10,83 @@ Dengan menggunakan SeTrip, Anda menyetujui praktik yang dijelaskan dalam Kebijak # 1. Informasi yang Kami Kumpulkan -Kami dapat mengumpulkan informasi berikut: - ## a. Informasi Akun - Nama - Email -- Nomor telepon -- Password (disimpan dalam bentuk terenkripsi) +- Password (disimpan dalam bentuk hash bcrypt, tidak pernah dalam teks asli) -## b. Informasi Profil +Anda dapat mendaftar menggunakan email & password atau melalui akun Google. Jika Anda masuk dengan Google, kami menerima nama, email, foto profil, dan token akun dari Google; tidak ada password yang dibuat untuk akun tersebut. + +## b. Informasi Profil (Publik) + +Informasi yang Anda pilih untuk dibagikan dan ditampilkan ke pengguna lain untuk penemuan teman dan pencocokan trip: - Foto profil -- Deskripsi diri -- Riwayat trip +- Bio / deskripsi diri +- Kota domisili +- Minat/aktivitas favorit (interests) +- Username Instagram (opsional) +- Gaya perjalanan / vibe (chill, balanced, hardcore) +- Riwayat trip yang diikuti -## c. Informasi Transaksi +## c. Verifikasi Identitas Organizer (KYC) -- Data booking trip -- Status pembayaran -- Riwayat aktivitas +Khusus bagi pengguna yang ingin menjadi organizer: -## d. Informasi Teknis +- Nama lengkap sesuai KTP +- Nomor Induk Kependudukan (NIK) +- Tanggal lahir dan alamat +- Foto KTP +- Foto liveness (memegang kertas bertuliskan "SETRIP") +- Data rekening bank (nama bank, nomor rekening, nama pemilik) untuk pencairan dana + +NIK serta foto KTP dan liveness disimpan dalam bentuk terenkripsi (AES-256-GCM) pada penyimpanan privat di luar akses publik. NIK juga di-hash (HMAC) sehingga kami dapat memeriksa keunikannya tanpa membuka data aslinya. + +## d. Informasi Transaksi & Pembayaran + +- Data booking trip dan nominal pembayaran +- Status pembayaran dan metode pembayaran (mis. virtual account, GoPay, QRIS, transfer manual) +- ID transaksi dan catatan callback dari penyedia pembayaran (Midtrans) +- Riwayat refund dan pencairan dana (payout), termasuk data rekening tujuan + +Pembayaran kartu/e-wallet diproses langsung oleh penyedia pembayaran Midtrans. Kami tidak menyimpan nomor kartu, PIN, atau kredensial pembayaran Anda. + +## e. Informasi Teknis - Alamat IP - Browser - Perangkat yang digunakan -- Log aktivitas +- Log aktivitas dan sistem (termasuk log pengiriman email dan log tindakan admin) --- # 2. Cara Kami Menggunakan Informasi -Kami menggunakan informasi Anda untuk: - - Membuat dan mengelola akun -- Menghubungkan pengguna dengan organizer -- Memproses booking dan aktivitas trip +- Menghubungkan pengguna dengan organizer serta mencocokkan teman/trip berdasarkan minat dan vibe +- Memproses booking, pembayaran, escrow, refund, dan pencairan dana +- Memverifikasi identitas organizer (KYC) +- Mengirim email dan notifikasi terkait aktivitas akun dan transaksi - Meningkatkan layanan dan pengalaman pengguna -- Mengirim notifikasi terkait aktivitas - Mencegah penipuan dan penyalahgunaan --- # 3. Pembagian Informasi -Kami tidak menjual data pribadi Anda. +Kami tidak menjual data pribadi Anda. Namun, kami dapat membagikan informasi dalam kondisi berikut: -Namun, kami dapat membagikan informasi dalam kondisi berikut: +## a. Dengan Organizer & Peserta Lain -## a. Dengan Organizer +- Profil publik Anda dan informasi dasar (seperti nama) dapat dibagikan kepada organizer dan peserta lain untuk keperluan trip -- Informasi dasar seperti nama dan kontak dapat dibagikan kepada organizer untuk keperluan trip +## b. Dengan Penyedia Layanan Pihak Ketiga -## b. Dengan Penyedia Layanan - -- Untuk kebutuhan teknis (hosting, analytics, dll) +- Midtrans — untuk memproses pembayaran +- Resend — untuk mengirim email transaksional +- Google — saat Anda memilih masuk dengan akun Google +- Penyedia hosting dan basis data — untuk menjalankan layanan ## c. Kewajiban Hukum @@ -75,82 +96,66 @@ Namun, kami dapat membagikan informasi dalam kondisi berikut: # 4. Keamanan Data -Kami berusaha melindungi data Anda dengan: - -- Enkripsi password -- Pembatasan akses data +- Hash password (bcrypt) +- Enkripsi data KYC sensitif (AES-256-GCM) di penyimpanan privat +- Pembatasan akses data dan pencatatan tindakan admin (audit log) +- Verifikasi tanda tangan (signature) pada callback pembayaran - Sistem keamanan standar industri Namun, tidak ada sistem yang 100% aman. --- -# 5. Penyimpanan Data +# 5. Penyimpanan & Retensi Data -Kami menyimpan data Anda selama: +Kami menyimpan data Anda selama akun aktif dan selama dibutuhkan untuk keperluan layanan. -- Akun Anda aktif -- Dibutuhkan untuk keperluan layanan - -Data dapat dihapus atas permintaan pengguna, kecuali diwajibkan oleh hukum untuk disimpan. +Data dapat dihapus atas permintaan pengguna. Namun, catatan keuangan dan audit (pembayaran, refund, pencairan dana, log email, dan log tindakan admin) bersifat permanen (append-only) dan dapat tetap disimpan meskipun akun dihapus, sepanjang diwajibkan untuk kepatuhan hukum, akuntansi, dan penyelesaian sengketa. Data KYC disimpan selama dibutuhkan untuk verifikasi dan kewajiban hukum. --- # 6. Hak Pengguna -Anda memiliki hak untuk: - - Mengakses data pribadi Anda - Memperbarui informasi - Menghapus akun - Menarik persetujuan +Penghapusan akun tidak menghapus catatan keuangan dan audit yang wajib kami simpan sebagaimana dijelaskan pada bagian 5. + --- # 7. Cookie & Tracking -SeTrip dapat menggunakan: - -- Cookie -- Teknologi pelacakan sederhana - -Untuk: - -- Menyimpan sesi login -- Meningkatkan pengalaman pengguna +SeTrip hanya menggunakan cookie sesi (JWT) untuk menjaga Anda tetap login. Kami **tidak** menggunakan cookie iklan maupun layanan analitik/pelacakan pihak ketiga. --- # 8. Layanan Pihak Ketiga -SeTrip dapat menggunakan layanan pihak ketiga seperti: +SeTrip menggunakan layanan pihak ketiga berikut: -- Hosting -- Analytics -- Payment gateway (di masa depan) +- Google — autentikasi (login dengan Google) +- Midtrans — payment gateway +- Resend — pengiriman email +- Penyedia hosting dan basis data -Kami tidak bertanggung jawab atas kebijakan privasi pihak ketiga tersebut. +Kami tidak bertanggung jawab atas kebijakan privasi pihak ketiga tersebut. Silakan tinjau kebijakan privasi masing-masing penyedia. --- # 9. Perlindungan terhadap Penipuan -Kami dapat menggunakan data untuk: - - Mendeteksi aktivitas mencurigakan - Mencegah penipuan +- Menangguhkan akun yang melanggar - Melindungi pengguna lain --- # 10. Perubahan Kebijakan Privasi -SeTrip dapat memperbarui Kebijakan Privasi ini sewaktu-waktu. - -Pengguna disarankan untuk: - -- Membaca secara berkala -- Memahami perubahan yang berlaku +SeTrip dapat memperbarui Kebijakan Privasi ini sewaktu-waktu. Pengguna disarankan untuk membaca secara berkala dan memahami perubahan yang berlaku. --- diff --git a/TERMS.md b/TERMS.md index 13bd66e..43a49fc 100644 --- a/TERMS.md +++ b/TERMS.md @@ -1,6 +1,6 @@ # 📜 Terms & Conditions (Syarat & Ketentuan) SeTrip -**Terakhir diperbarui: 2026-04-27** +**Terakhir diperbarui: 2026-06-02** Selamat datang di SeTrip. Dengan mengakses atau menggunakan platform SeTrip, Anda menyetujui untuk terikat oleh Syarat & Ketentuan berikut. @@ -12,15 +12,16 @@ Dalam dokumen ini: - **SeTrip**: Platform yang menghubungkan pengguna dengan penyelenggara trip. - **Pengguna (User)**: Individu yang menggunakan aplikasi SeTrip. -- **Organizer (Penyelenggara)**: Pengguna yang membuat dan mengelola trip. +- **Organizer (Penyelenggara)**: Pengguna terverifikasi yang membuat dan mengelola trip. - **Trip**: Kegiatan perjalanan yang dibuat oleh organizer. +- **Escrow**: Penahanan dana peserta oleh SeTrip sampai trip selesai sebelum diteruskan ke organizer. - **Platform**: Website atau aplikasi SeTrip. --- # 2. Peran SeTrip -SeTrip bertindak sebagai **platform perantara** yang menghubungkan pengguna dan organizer. +SeTrip bertindak sebagai **platform perantara** yang menghubungkan pengguna dan organizer serta memfasilitasi pembayaran. SeTrip: @@ -51,7 +52,17 @@ Dengan menggunakan SeTrip, Anda menyatakan bahwa: --- -# 5. Trip & Booking +# 5. Verifikasi Organizer (KYC) + +Untuk dapat membuat dan mengelola trip, pengguna wajib melalui proses verifikasi identitas (KYC): + +- Organizer mengunggah data identitas (KTP, NIK, foto liveness) dan informasi rekening bank untuk pencairan dana +- SeTrip meninjau pengajuan secara manual dan berhak menyetujui, menolak, atau meminta dokumen diunggah ulang +- Data verifikasi disimpan secara terenkripsi sesuai Kebijakan Privasi + +--- + +# 6. Trip & Booking - Organizer bertanggung jawab atas seluruh informasi trip - Pengguna wajib membaca detail trip sebelum melakukan join @@ -59,7 +70,7 @@ Dengan menggunakan SeTrip, Anda menyatakan bahwa: --- -# 6. Pembayaran & Escrow +# 7. Pembayaran & Escrow - Pembayaran dilakukan melalui metode yang tersedia di platform (Midtrans atau transfer manual yang dikonfirmasi organizer) - **Uang peserta ditahan oleh SeTrip (escrow)** sejak pembayaran berhasil hingga trip selesai + 3 hari, baru kemudian diteruskan ke organizer @@ -68,7 +79,7 @@ Dengan menggunakan SeTrip, Anda menyatakan bahwa: --- -# 7. Pembatalan & Refund +# 8. Pembatalan & Refund **Saat peserta membatalkan booking sendiri** (kebijakan default platform): @@ -84,7 +95,7 @@ Kebijakan di atas berlaku platform-wide; organizer tidak dapat menetapkan policy --- -# 8. Tanggung Jawab Organizer +# 9. Tanggung Jawab Organizer Organizer wajib: @@ -94,7 +105,7 @@ Organizer wajib: --- -# 9. Risiko Perjalanan +# 10. Risiko Perjalanan Pengguna memahami bahwa aktivitas perjalanan, terutama kegiatan outdoor, memiliki risiko termasuk namun tidak terbatas pada: @@ -109,7 +120,7 @@ Dengan mengikuti trip, pengguna menyatakan: --- -# 10. Batasan Tanggung Jawab +# 11. Batasan Tanggung Jawab SeTrip tidak bertanggung jawab atas: @@ -120,7 +131,7 @@ SeTrip tidak bertanggung jawab atas: --- -# 11. Larangan Transaksi di Luar Platform +# 12. Larangan Transaksi di Luar Platform Pengguna disarankan untuk tidak melakukan transaksi di luar platform. @@ -132,15 +143,15 @@ SeTrip tidak bertanggung jawab atas: --- -# 12. Sistem Review +# 13. Sistem Review -- Pengguna dapat memberikan review setelah trip +- Peserta dapat memberikan review setelah trip selesai - Review harus jujur dan tidak mengandung unsur fitnah - SeTrip berhak menghapus review yang melanggar --- -# 13. Penangguhan & Penghentian Akun +# 14. Penangguhan & Penghentian Akun SeTrip berhak untuk: @@ -156,7 +167,7 @@ Jika pengguna: --- -# 14. Perubahan Layanan +# 15. Perubahan Layanan SeTrip dapat: @@ -168,7 +179,7 @@ Tanpa pemberitahuan sebelumnya --- -# 15. Perubahan Syarat & Ketentuan +# 16. Perubahan Syarat & Ketentuan SeTrip dapat memperbarui Syarat & Ketentuan ini kapan saja. @@ -179,13 +190,13 @@ Pengguna disarankan untuk: --- -# 16. Hukum yang Berlaku +# 17. Hukum yang Berlaku Syarat & Ketentuan ini diatur oleh hukum yang berlaku di Republik Indonesia. --- -# 17. Kontak +# 18. Kontak Jika Anda memiliki pertanyaan, silakan hubungi: diff --git a/app/(public)/privacy/page.tsx b/app/(public)/privacy/page.tsx index 572e0f0..bf2287b 100644 --- a/app/(public)/privacy/page.tsx +++ b/app/(public)/privacy/page.tsx @@ -16,7 +16,7 @@ export default function PrivacyPage() { Kebijakan Privasi SeTrip

- Terakhir diperbarui: 2026-04-27 + Terakhir diperbarui: 2026-06-02

SeTrip menghargai privasi Anda. Kebijakan Privasi ini menjelaskan @@ -36,30 +36,75 @@ export default function PrivacyPage() {

+

+ Anda dapat mendaftar menggunakan email & password atau melalui + akun Google. Jika Anda masuk dengan Google, kami menerima nama, + email, foto profil, dan token akun dari Google; tidak ada password + yang dibuat untuk akun tersebut. +

-

b. Informasi Profil

+

+ b. Informasi Profil (Publik) +

+

+ Informasi yang Anda pilih untuk dibagikan dan ditampilkan ke + pengguna lain untuk keperluan penemuan teman dan pencocokan trip: +

-

c. Informasi Transaksi

+

+ c. Verifikasi Identitas Organizer (KYC) +

+

+ Khusus bagi pengguna yang ingin menjadi organizer, kami + mengumpulkan data verifikasi identitas: +

+

+ NIK serta foto KTP dan liveness disimpan dalam bentuk terenkripsi + (AES-256-GCM) pada penyimpanan privat di luar akses publik. NIK + juga di-hash (HMAC) sehingga kami dapat memeriksa keunikannya tanpa + membuka data aslinya. +

-

d. Informasi Teknis

+

+ d. Informasi Transaksi & Pembayaran +

+ +

+ Pembayaran kartu/e-wallet diproses langsung oleh penyedia + pembayaran Midtrans. Kami tidak menyimpan nomor kartu, PIN, atau + kredensial pembayaran Anda. +

+ +

e. Informasi Teknis

@@ -70,10 +115,11 @@ export default function PrivacyPage() {

Kami menggunakan informasi Anda untuk:

@@ -85,19 +131,24 @@ export default function PrivacyPage() { informasi dalam kondisi berikut:

-

a. Dengan Organizer

+

+ a. Dengan Organizer & Peserta Lain +

- b. Dengan Penyedia Layanan + b. Dengan Penyedia Layanan Pihak Ketiga

c. Kewajiban Hukum

@@ -110,23 +161,29 @@ export default function PrivacyPage() {

4. Keamanan Data

Kami berusaha melindungi data Anda dengan:

Namun, tidak ada sistem yang 100% aman.

-

5. Penyimpanan Data

+

5. Penyimpanan & Retensi Data

Kami menyimpan data Anda selama:

- Data dapat dihapus atas permintaan pengguna, kecuali diwajibkan - oleh hukum untuk disimpan. + Data dapat dihapus atas permintaan pengguna. Namun, catatan + keuangan dan audit (pembayaran, refund, pencairan dana, log email, + dan log tindakan admin) bersifat permanen (append-only) dan dapat + tetap disimpan meskipun akun dihapus, sepanjang diwajibkan untuk + kepatuhan hukum, akuntansi, dan penyelesaian sengketa. Data KYC + disimpan selama dibutuhkan untuk verifikasi dan kewajiban hukum.

@@ -139,35 +196,35 @@ export default function PrivacyPage() {
  • Menghapus akun
  • Menarik persetujuan
  • +

    + Penghapusan akun tidak menghapus catatan keuangan dan audit yang + wajib kami simpan sebagaimana dijelaskan pada bagian 5. +

    7. Cookie & Tracking

    -

    SeTrip dapat menggunakan:

    - -

    Untuk:

    - +

    + SeTrip hanya menggunakan cookie sesi (JWT) untuk menjaga Anda tetap + login. Kami tidak menggunakan cookie iklan maupun + layanan analitik/pelacakan pihak ketiga. +

    8. Layanan Pihak Ketiga

    -

    SeTrip dapat menggunakan layanan pihak ketiga seperti:

    +

    SeTrip menggunakan layanan pihak ketiga berikut:

    Kami tidak bertanggung jawab atas kebijakan privasi pihak ketiga - tersebut. + tersebut. Silakan tinjau kebijakan privasi masing-masing penyedia.

    @@ -179,6 +236,7 @@ export default function PrivacyPage() { diff --git a/app/(public)/terms/page.tsx b/app/(public)/terms/page.tsx index 213d8a2..9c508b8 100644 --- a/app/(public)/terms/page.tsx +++ b/app/(public)/terms/page.tsx @@ -16,7 +16,7 @@ export default function TermsPage() { Syarat & Ketentuan SeTrip

    - Terakhir diperbarui: 2026-04-27 + Terakhir diperbarui: 2026-06-02

    Selamat datang di SeTrip. Dengan mengakses atau menggunakan platform @@ -38,13 +38,17 @@ export default function TermsPage() { aplikasi SeTrip.

  • - Organizer (Penyelenggara): Pengguna yang membuat - dan mengelola trip. + Organizer (Penyelenggara): Pengguna terverifikasi + yang membuat dan mengelola trip.
  • Trip: Kegiatan perjalanan yang dibuat oleh organizer.
  • +
  • + Escrow: Penahanan dana peserta oleh SeTrip + sampai trip selesai sebelum diteruskan ke organizer. +
  • Platform: Website atau aplikasi SeTrip.
  • @@ -55,7 +59,8 @@ export default function TermsPage() {

    2. Peran SeTrip

    SeTrip bertindak sebagai platform perantara yang - menghubungkan pengguna dan organizer. SeTrip: + menghubungkan pengguna dan organizer serta memfasilitasi + pembayaran. SeTrip: