026 - Court Detail Showcase (Home → Detail → Book by court)
- Tanggal: 2026-08-11
- Chat/topik: Halaman showcase Court Detail dari list Available Courts di Home, CTA Book → Time Slot preselect court; konten dikelola admin.
Ringkasan perubahan
Court sekarang punya konten showcase di DB (description, gallery, specs, perks) yang dikelola dari Admin. Di Android, tap card court di Home membuka halaman Court Detail (hero gallery, About, Specifications, Perks) dengan CTA "Book This Court" yang membuka Time Slot mode "By court" ter-preselect ke court itu. Setelah review Android disetujui, port iOS & Web done (jejak di mpc-dev/docs/ios-changes/031).
Tanpa bump versi (permintaan user): gabung ke BE v1.6, Admin v0.7, Android v1.16 (APK rebuild overwrite).
Impact bisnis
- Court jadi produk yang "dijual", bukan sekadar baris di picker — mendukung positioning premium (VIP court dengan perks lounge, dsb.).
- Admin bisa mengatur narasi/foto/spesifikasi per court tanpa rilis app.
- Jalur booking tetap pendek: Home → Detail → Book (1 tap ekstra, opsional — "See All" tetap langsung ke Time Slot).
Epic / User stories
- Epic: Court showcase & booking by court.
- US1: Sebagai member, saya ingin melihat foto, spesifikasi, dan perks sebuah court, agar yakin memilih court yang sesuai.
- US2: Sebagai member, saya ingin langsung booking court yang sedang saya lihat, agar tidak memilih ulang di picker.
- US3: Sebagai admin, saya ingin mengelola konten showcase per court, agar materi marketing selalu up to date.
User terdampak
Member (Android/iOS/Web), admin klub.
Aplikasi terdampak
- mpc-be: PERLU — kolom baru courts + response GET /courts & /courts/:id. (Done)
- mpc-admin: PERLU — CourtForm kelola description/main image/gallery/specs/perks; sync Prisma (+
imageUrlyang drift). (Done) - mpc-android: PERLU — CourtDetailScreen + nav Home→detail + TimeSlot preselect. (Done, v1.16)
- mpc-ios: PERLU — Done, v1.5 (CourtDetailScreen immersive + Route.courtDetail + TimeSlot preselect + favorite/share).
- mpc-web: PERLU — Done, v0.6 (page
/courts?id=+/book?mode=court&courtId=+ Home card link). - mpc-be-pos / mpc-pos: TIDAK — POS tidak menampilkan konten marketing court.
- mpc-owner / ksr-sync: TIDAK — tidak menyentuh datamart.
Perubahan schema
courts: + description text, + gallery jsonb [] (array URL), + specs jsonb [] (array {label,value}), + perks jsonb [] (array string). Seed konten 3 court aktif (CRT-01/02/03). Migration: mpc-dev/docs/schema/migration/019-court-showcase-content.md.
Perubahan kode
- mpc-be:
internal/courts/entity.go— fieldDescription,Gallery,Specs,Perks(datatypes.JSON); response GET /courts & /courts/:id otomatis;mpc-dev/docs/api/be.md§2.1–2.2; changelog v1.6. - mpc-admin:
prisma/schema.prismaCourt + showcase fields +imageUrl;src/actions/courts.tspersist showcase;CourtForm.tsxsection "Showcase Content" (description, main image URL, gallery add/remove, specs label+value dinamis, perks dinamis); changelog v0.7. - mpc-android:
Models.kt(Court+CourtSpec),Dtos.kt/Mappers.kt,MpcRepository.getCourt,CourtDetailScreen.ktbaru,Routes.kt(courtDetail,timeSlot(courtId)),AppNavHost.kt(route detail + arg courtId),TimeSlotScreen.kt(initialCourtId→ mode By court),HomeScreen.kt(card → detail),HomeCards.kt(tombol "Book Court" dihapus, card tappable, gambar card = gallery[0] konsisten dengan hero detail); changelog v1.16; APKmpc-android-demo-v1.16.apk→ Downloads. Seed gallery migration 019 diganti foto lapangan padel asli dari Pexels (hero = court kosong: indoor kaca / kanopi semi-outdoor / golden hour utk VIP; sekunder = detail net & racket) + diterapkan di DB prod & lokal. Fix ikutan:BookingScreen.kttypomodifier.height→Modifier.height(sisa sesi FnB pickup, sebelumnya gagal compile). - mpc-ios (v1.5, no bump):
Models.swift(Court+CourtSpec+gallerySources),Dtos.swift/Mappers.swift(CourtSpecDto, field showcase),MpcApi.swift/MpcRepository.swift(getCourt(id:)),Route.swift(courtDetail,timeSlot(addToOrder:courtId:)),RootView.swift,CourtDetailScreen.swiftbaru (hero TabView full-bleed + scrim + back/share/favorite + perk chips + specs + sticky CTA),TimeSlotScreen.swift(initialCourtId→ By court),HomeCards.swift/HomeScreen.swift(card tappable → detail, gambar gallery[0]). BuildxcodebuildOK. - mpc-web (v0.6, no bump):
types.ts(Courtshowcase +Favorite),repo.ts(mapCourtshowcase,getCourt, favorites API), page barusrc/app/courts/page.tsx(?id=),BookClient.tsx(?mode=court&courtId=),page.tsxHome card link + gambar gallery[0].tsc --noEmit+next buildOK.