GEOSEEK 3.0

This commit is contained in:
Flatlogic Bot 2026-06-18 02:02:31 +00:00
parent 9fb349ab84
commit 05b4206387
2 changed files with 1133 additions and 270 deletions

File diff suppressed because it is too large Load Diff

View File

@ -153,6 +153,7 @@ type TrendingMeta = {
type SearchMeta = {
count: number;
radius_km?: number | null;
effective_radius_km?: number | null;
radius_zone?: RadiusZone | null;
radius_zones: RadiusZone[];
distance_buckets: DistanceBucket[];
@ -520,103 +521,214 @@ const categoryKeywordGroups: KeywordGroup[] = [
{
title: 'Kuliner',
description:
'Intent restoran, cafe, warung makan, kuliner, dan makan enak.',
'Intent makanan, restoran, cafe, warung makan, warteg, bakso, soto, seafood, dan catering.',
keywords: [
{
label: 'Restoran terdekat',
query: 'restoran terdekat',
category: 'cafe-melayu',
},
{
label: 'Cafe terdekat',
query: 'cafe terdekat',
category: 'cafe-melayu',
},
{
label: 'Warung makan terdekat',
query: 'warung makan terdekat',
category: 'cafe-melayu',
},
{
label: 'Kuliner terdekat',
query: 'kuliner terdekat',
category: 'cafe-melayu',
},
{
label: 'Makan enak dekat saya',
query: 'makan enak dekat saya',
category: 'cafe-melayu',
},
{ label: 'Makanan terdekat', query: 'makanan terdekat' },
{ label: 'Restoran terdekat', query: 'restoran terdekat' },
{ label: 'Cafe terdekat', query: 'cafe terdekat' },
{ label: 'Warung makan terdekat', query: 'warung makan terdekat' },
{ label: 'Warteg terdekat', query: 'warteg terdekat' },
{ label: 'Bakso terdekat', query: 'bakso terdekat' },
{ label: 'Soto terdekat', query: 'soto terdekat' },
{ label: 'Ayam goreng terdekat', query: 'ayam goreng terdekat' },
{ label: 'Seafood terdekat', query: 'seafood terdekat' },
{ label: 'Catering terdekat', query: 'catering terdekat' },
{ label: 'Minuman terdekat', query: 'minuman terdekat' },
],
},
{
title: 'Kesehatan',
title: 'Produk & Toko',
description:
'Intent apotek, klinik, rumah sakit, dokter, dan layanan 24 jam.',
'Intent penjual, toko, ready stock, elektronik, fashion, herbal, furniture, bayi, buku, perhiasan, dan kebutuhan kantor.',
keywords: [
{ label: 'Smartphone terdekat', query: 'penjual smartphone terdekat' },
{ label: 'Laptop terdekat', query: 'penjual laptop terdekat' },
{ label: 'Elektronik terdekat', query: 'toko elektronik terdekat' },
{ label: 'Fashion terdekat', query: 'toko fashion terdekat' },
{ label: 'Sepatu terdekat', query: 'toko sepatu terdekat' },
{ label: 'Tas terdekat', query: 'toko tas terdekat' },
{ label: 'Kosmetik terdekat', query: 'toko kosmetik terdekat' },
{ label: 'Skincare terdekat', query: 'toko skincare terdekat' },
{ label: 'Herbal terdekat', query: 'toko herbal terdekat' },
{ label: 'Obat terdekat', query: 'toko obat terdekat' },
{ label: 'Furniture terdekat', query: 'toko furniture terdekat' },
{
label: 'Apotek terdekat',
query: 'apotek terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Klinik terdekat',
query: 'klinik terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Rumah sakit terdekat',
query: 'rumah sakit terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Dokter terdekat',
query: 'dokter terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Apotek 24 jam terdekat',
query: 'apotek 24 jam terdekat',
category: 'toko-herbal-kesehatan',
label: 'Peralatan rumah tangga',
query: 'peralatan rumah tangga terdekat',
},
{ label: 'Peralatan dapur', query: 'peralatan dapur terdekat' },
{ label: 'Perlengkapan bayi', query: 'perlengkapan bayi terdekat' },
{ label: 'Mainan anak', query: 'mainan anak terdekat' },
{ label: 'Buku terdekat', query: 'toko buku terdekat' },
{ label: 'Kebutuhan kantor', query: 'kebutuhan kantor terdekat' },
{ label: 'Perhiasan terdekat', query: 'toko perhiasan terdekat' },
{ label: 'Jam tangan terdekat', query: 'toko jam tangan terdekat' },
{ label: 'Aksesoris terdekat', query: 'toko aksesoris terdekat' },
],
},
{
title: 'Otomotif',
title: 'Bangunan & Otomotif',
description:
'Intent bengkel, tambal ban, cuci mobil, SPBU, dan servis kendaraan.',
'Intent toko bahan bangunan, renovasi, servis AC, bengkel, sparepart, dealer, tambal ban, dan cuci mobil.',
keywords: [
{
label: 'Bengkel terdekat',
query: 'bengkel terdekat',
category: 'bengkel-mobil',
},
{
label: 'Tambal ban terdekat',
query: 'tambal ban terdekat',
category: 'bengkel-mobil',
},
{
label: 'Cuci mobil terdekat',
query: 'cuci mobil terdekat',
category: 'bengkel-mobil',
},
{
label: 'SPBU terdekat',
query: 'SPBU terdekat',
category: 'bengkel-mobil',
},
{ label: 'Toko bahan bangunan', query: 'toko bahan bangunan terdekat' },
{ label: 'Servis AC terdekat', query: 'servis ac terdekat' },
{ label: 'Tukang bangunan', query: 'tukang bangunan terdekat' },
{ label: 'Renovasi rumah', query: 'renovasi rumah terdekat' },
{ label: 'Jasa kebersihan', query: 'jasa kebersihan terdekat' },
{ label: 'Bengkel motor', query: 'bengkel motor terdekat' },
{ label: 'Bengkel mobil', query: 'bengkel mobil terdekat' },
{ label: 'Sparepart motor', query: 'sparepart motor terdekat' },
{ label: 'Sparepart mobil', query: 'sparepart mobil terdekat' },
{ label: 'Dealer motor', query: 'dealer motor terdekat' },
{ label: 'Tambal ban', query: 'tambal ban terdekat' },
{ label: 'Cuci mobil', query: 'cuci mobil terdekat' },
{ label: 'SPBU terdekat', query: 'SPBU terdekat' },
],
},
{
title: 'Belanja',
title: 'Kesehatan & Hewan',
description:
'Intent toko, minimarket, pasar, mall, produk, dan stok ready.',
'Intent rumah sakit, klinik, apotek, dokter, laboratorium, alat kesehatan, pet shop, klinik hewan, dan grooming.',
keywords: [
{ label: 'Toko terdekat', query: 'toko terdekat' },
{ label: 'Minimarket terdekat', query: 'minimarket terdekat' },
{ label: 'Pasar terdekat', query: 'pasar terdekat' },
{ label: 'Mall terdekat', query: 'mall terdekat' },
{ label: 'Rumah sakit terdekat', query: 'rumah sakit terdekat' },
{ label: 'Klinik terdekat', query: 'klinik terdekat' },
{ label: 'Apotek terdekat', query: 'apotek terdekat' },
{ label: 'Dokter terdekat', query: 'dokter terdekat' },
{ label: 'Dokter gigi', query: 'dokter gigi terdekat' },
{ label: 'Laboratorium', query: 'laboratorium terdekat' },
{ label: 'Alat kesehatan', query: 'alat kesehatan terdekat' },
{ label: 'Pet shop', query: 'pet shop terdekat' },
{ label: 'Klinik hewan', query: 'klinik hewan terdekat' },
{ label: 'Grooming hewan', query: 'grooming hewan terdekat' },
],
},
{
title: 'Properti',
description:
'Intent properti, rumah dijual, tanah dijual, ruko, apartemen, kost, dan kontrakan.',
keywords: [
{ label: 'Properti terdekat', query: 'properti terdekat' },
{ label: 'Rumah dijual', query: 'rumah dijual terdekat' },
{ label: 'Tanah dijual', query: 'tanah dijual terdekat' },
{ label: 'Ruko terdekat', query: 'ruko terdekat' },
{ label: 'Apartemen terdekat', query: 'apartemen terdekat' },
{ label: 'Kost terdekat', query: 'kost terdekat' },
{ label: 'Kontrakan terdekat', query: 'kontrakan terdekat' },
],
},
{
title: 'Jasa Profesional & Digital',
description:
'Intent notaris, pengacara, guru privat, digital marketing, website, aplikasi, desain, foto/video, pajak, dan konsultan.',
keywords: [
{ label: 'Notaris terdekat', query: 'notaris terdekat' },
{ label: 'Pengacara terdekat', query: 'pengacara terdekat' },
{ label: 'Guru privat', query: 'guru privat terdekat' },
{ label: 'Les privat', query: 'les privat terdekat' },
{ label: 'Digital marketing', query: 'digital marketing terdekat' },
{ label: 'SEO terdekat', query: 'jasa seo terdekat' },
{ label: 'Pembuatan website', query: 'pembuatan website terdekat' },
{ label: 'Pembuatan aplikasi', query: 'pembuatan aplikasi terdekat' },
{ label: 'Desain grafis', query: 'desain grafis terdekat' },
{ label: 'Fotografer', query: 'fotografer terdekat' },
{ label: 'Videografer', query: 'videografer terdekat' },
{ label: 'Wedding organizer', query: 'wedding organizer terdekat' },
{ label: 'Event organizer', query: 'event organizer terdekat' },
{ label: 'Jasa pajak', query: 'jasa pajak terdekat' },
{ label: 'Konsultan bisnis', query: 'konsultan bisnis terdekat' },
{ label: 'Konsultan hukum', query: 'konsultan hukum terdekat' },
{ label: 'Konsultan keuangan', query: 'konsultan keuangan terdekat' },
{ label: 'Percetakan', query: 'percetakan terdekat' },
{ label: 'Konveksi', query: 'konveksi terdekat' },
],
},
{
title: 'Pertanian & Peternakan',
description:
'Intent pupuk, bibit tanaman, pestisida, alat pertanian, peternakan, dan pakan ternak.',
keywords: [
{ label: 'Pupuk terdekat', query: 'pupuk terdekat' },
{ label: 'Bibit tanaman', query: 'bibit tanaman terdekat' },
{ label: 'Pestisida terdekat', query: 'pestisida terdekat' },
{ label: 'Alat pertanian', query: 'alat pertanian terdekat' },
{ label: 'Peternakan', query: 'peternakan terdekat' },
{ label: 'Pakan ternak', query: 'pakan ternak terdekat' },
],
},
{
title: 'Keuangan',
description: 'Intent bank, ATM, koperasi, pegadaian, pembayaran, dan QRIS.',
keywords: [
{ label: 'Bank terdekat', query: 'bank terdekat' },
{ label: 'ATM terdekat', query: 'ATM terdekat' },
{ label: 'Koperasi terdekat', query: 'koperasi terdekat' },
{ label: 'Pegadaian terdekat', query: 'pegadaian terdekat' },
],
},
{
title: 'Travel & Logistik',
description:
'Intent rental mobil/motor, travel, agen travel, kurir, logistik, ekspedisi, dan pengiriman barang.',
keywords: [
{ label: 'Rental mobil', query: 'rental mobil terdekat' },
{ label: 'Rental motor', query: 'rental motor terdekat' },
{ label: 'Travel terdekat', query: 'travel terdekat' },
{ label: 'Agen travel', query: 'agen travel terdekat' },
{ label: 'Kurir terdekat', query: 'kurir terdekat' },
{ label: 'Logistik terdekat', query: 'logistik terdekat' },
{ label: 'Ekspedisi terdekat', query: 'ekspedisi terdekat' },
{ label: 'Pengiriman barang', query: 'pengiriman barang terdekat' },
],
},
{
title: 'Kecantikan',
description: 'Intent salon, barbershop, skincare, kosmetik, dan beauty care.',
keywords: [
{ label: 'Salon terdekat', query: 'salon terdekat' },
{ label: 'Barbershop terdekat', query: 'barbershop terdekat' },
{ label: 'Skincare terdekat', query: 'skincare terdekat' },
{ label: 'Kosmetik terdekat', query: 'kosmetik terdekat' },
],
},
{
title: 'Komputer & Internet',
description:
'Intent service laptop, service printer, komputer, CCTV, internet, wifi, dan toko IT.',
keywords: [
{ label: 'Service laptop', query: 'service laptop terdekat' },
{ label: 'Service printer', query: 'service printer terdekat' },
{ label: 'Komputer terdekat', query: 'komputer terdekat' },
{ label: 'CCTV terdekat', query: 'cctv terdekat' },
{ label: 'Internet terdekat', query: 'internet terdekat' },
{ label: 'Wifi terdekat', query: 'wifi terdekat' },
],
},
{
title: 'Kerja, Event & UMKM',
description:
'Intent lowongan kerja, freelance, magang, seminar, festival, bazar, UMKM, toko kelontong, dan home industry.',
keywords: [
{ label: 'Lowongan kerja', query: 'lowongan kerja terdekat' },
{ label: 'Freelance', query: 'freelance terdekat' },
{ label: 'Magang', query: 'magang terdekat' },
{ label: 'Seminar', query: 'seminar terdekat' },
{ label: 'Festival', query: 'festival terdekat' },
{ label: 'Bazar', query: 'bazar terdekat' },
{ label: 'UMKM terdekat', query: 'umkm terdekat' },
{ label: 'Toko kelontong', query: 'toko kelontong terdekat' },
{ label: 'Home industry', query: 'home industry terdekat' },
],
},
{
title: 'Wisata & Penginapan',
description: 'Intent tempat wisata, hotel, penginapan, villa, dan pantai.',
keywords: [
{ label: 'Tempat wisata', query: 'tempat wisata terdekat' },
{ label: 'Hotel terdekat', query: 'hotel terdekat' },
{ label: 'Penginapan terdekat', query: 'penginapan terdekat' },
{ label: 'Villa terdekat', query: 'villa terdekat' },
{ label: 'Pantai terdekat', query: 'pantai terdekat' },
],
},
{
@ -634,114 +746,84 @@ const categoryKeywordGroups: KeywordGroup[] = [
{ label: 'Kantor BPJS terdekat', query: 'kantor bpjs terdekat' },
],
},
{
title: 'Wisata',
description: 'Intent tempat wisata, pantai, hotel, dan penginapan.',
keywords: [
{ label: 'Tempat wisata terdekat', query: 'tempat wisata terdekat' },
{ label: 'Pantai terdekat', query: 'pantai terdekat' },
{ label: 'Hotel terdekat', query: 'hotel terdekat' },
{ label: 'Penginapan terdekat', query: 'penginapan terdekat' },
],
},
];
const requiredLocationKeywords: KeywordChip[] = [
{ label: 'Terdekat', query: 'terdekat' },
{ label: 'Dekat Saya', query: 'dekat saya' },
{ label: 'Near Me', query: 'near me' },
{ label: 'Sekitar Saya', query: 'sekitar saya' },
{ label: 'Lokasi Terdekat', query: 'lokasi terdekat' },
{ label: 'Alamat Penjual', query: 'alamat penjual terdekat' },
{ label: 'Lokasi Penjual', query: 'lokasi penjual terdekat' },
{ label: 'Buka Sekarang', query: 'buka sekarang' },
{ label: '24 Jam', query: '24 jam' },
{ label: 'Radius 1 Km', query: 'radius 1 km', radiusKm: 1 },
{ label: 'Radius 5 Km', query: 'radius 5 km', radiusKm: 5 },
{ label: 'Radius 10 Km', query: 'radius 10 km', radiusKm: 10 },
{ label: 'Dalam Kota Saya', query: 'dalam kota saya' },
{ label: 'Dalam Kecamatan Saya', query: 'dalam kecamatan saya' },
{ label: 'Dalam Kelurahan', query: 'dalam kelurahan' },
{ label: 'Dalam Desa', query: 'dalam desa' },
{ label: 'Populer', query: 'populer' },
{ label: 'Murah', query: 'murah terdekat' },
{ label: 'Terbaik', query: 'terbaik terdekat' },
{ label: 'Terlaris', query: 'terlaris terdekat' },
{ label: 'Terpopuler', query: 'terpopuler terdekat' },
{ label: 'Rating Tertinggi', query: 'rating tertinggi' },
{ label: 'Paling Ramai', query: 'paling ramai' },
{ label: 'Paling Murah', query: 'paling murah' },
{ label: 'Terlaris', query: 'terlaris' },
{ label: 'Terbaru', query: 'terbaru' },
{ label: 'Direkomendasikan', query: 'direkomendasikan' },
{ label: 'Terverifikasi', query: 'terverifikasi' },
{ label: 'Promo', query: 'promo terdekat' },
{ label: 'Diskon', query: 'diskon terdekat' },
{ label: 'Ready Stock', query: 'ready stock terdekat' },
{ label: 'Tersedia', query: 'tersedia terdekat' },
{ label: 'Terverifikasi', query: 'terverifikasi terdekat' },
{ label: 'Radius 1 Km', query: 'dalam radius 1 km', radiusKm: 1 },
{ label: 'Radius 5 Km', query: 'dalam radius 5 km', radiusKm: 5 },
{ label: 'Radius 10 Km', query: 'dalam radius 10 km', radiusKm: 10 },
{ label: 'RT/RW', query: 'sekitar rt rw' },
{ label: 'Dusun', query: 'sekitar dusun' },
{ label: 'Desa', query: 'sekitar desa' },
{ label: 'Kelurahan', query: 'sekitar kelurahan' },
{ label: 'Kecamatan', query: 'sekitar kecamatan' },
{ label: 'Kabupaten', query: 'sekitar kabupaten' },
{ label: 'Kota', query: 'sekitar kota' },
{ label: 'Provinsi', query: 'sekitar provinsi' },
{ label: 'Beli', query: 'beli terdekat' },
{ label: 'Pesan', query: 'pesan terdekat' },
{ label: 'Booking', query: 'booking terdekat' },
{ label: 'Reservasi', query: 'reservasi terdekat' },
{ label: 'Order', query: 'order terdekat' },
{ label: 'Antar', query: 'antar terdekat' },
{ label: 'Kirim', query: 'kirim terdekat' },
{ label: 'COD', query: 'cod terdekat' },
{ label: 'QRIS', query: 'qris terdekat' },
{ label: 'E-Wallet', query: 'e-wallet terdekat' },
{ label: 'Cashback', query: 'cashback terdekat' },
{ label: 'Gratis Ongkir', query: 'gratis ongkir terdekat' },
{ label: 'Same Day', query: 'same day terdekat' },
{ label: 'Instant', query: 'instant terdekat' },
];
const topTrafficKeywords: KeywordChip[] = [
{ label: 'Terdekat', query: 'terdekat' },
{ label: 'Dekat Saya', query: 'dekat saya' },
{ label: 'Near Me', query: 'near me' },
{ label: 'Buka Sekarang', query: 'buka sekarang' },
{ label: '24 Jam', query: '24 jam' },
{
label: 'Restoran Terdekat',
query: 'restoran terdekat',
category: 'cafe-melayu',
},
{ label: 'Cafe Terdekat', query: 'cafe terdekat', category: 'cafe-melayu' },
{
label: 'Warung Makan Terdekat',
query: 'warung makan terdekat',
category: 'cafe-melayu',
},
{
label: 'Kuliner Terdekat',
query: 'kuliner terdekat',
category: 'cafe-melayu',
},
{
label: 'Makan Enak Dekat Saya',
query: 'makan enak dekat saya',
category: 'cafe-melayu',
},
{
label: 'Apotek Terdekat',
query: 'apotek terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Klinik Terdekat',
query: 'klinik terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Rumah Sakit Terdekat',
query: 'rumah sakit terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Dokter Terdekat',
query: 'dokter terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Apotek 24 Jam Terdekat',
query: 'apotek 24 jam terdekat',
category: 'toko-herbal-kesehatan',
},
{
label: 'Bengkel Terdekat',
query: 'bengkel terdekat',
category: 'bengkel-mobil',
},
{
label: 'Tambal Ban Terdekat',
query: 'tambal ban terdekat',
category: 'bengkel-mobil',
},
{
label: 'Cuci Mobil Terdekat',
query: 'cuci mobil terdekat',
category: 'bengkel-mobil',
},
{ label: 'SPBU Terdekat', query: 'SPBU terdekat', category: 'bengkel-mobil' },
{ label: 'Makanan Terdekat', query: 'makanan terdekat' },
{ label: 'Warteg Terdekat', query: 'warteg terdekat' },
{ label: 'Restoran Terdekat', query: 'restoran terdekat' },
{ label: 'Cafe Terdekat', query: 'cafe terdekat' },
{ label: 'Apotek Terdekat', query: 'apotek terdekat' },
{ label: 'Rumah Sakit Terdekat', query: 'rumah sakit terdekat' },
{ label: 'Bengkel Terdekat', query: 'bengkel terdekat' },
{ label: 'Hotel Terdekat', query: 'hotel terdekat' },
{ label: 'ATM Terdekat', query: 'ATM terdekat' },
{ label: 'SPBU Terdekat', query: 'SPBU terdekat' },
{ label: 'Toko Terdekat', query: 'toko terdekat' },
{ label: 'Toko Bahan Bangunan', query: 'toko bahan bangunan terdekat' },
{ label: 'Laundry Terdekat', query: 'laundry terdekat' },
{ label: 'Servis AC Terdekat', query: 'servis ac terdekat' },
{ label: 'Service Laptop', query: 'service laptop terdekat' },
{ label: 'Dokter Terdekat', query: 'dokter terdekat' },
{ label: 'Kost Terdekat', query: 'kost terdekat' },
{ label: 'Rumah Dijual', query: 'rumah dijual terdekat' },
{ label: 'Lowongan Kerja', query: 'lowongan kerja terdekat' },
{ label: 'Pupuk Terdekat', query: 'pupuk terdekat' },
{ label: 'Rental Mobil', query: 'rental mobil terdekat' },
{ label: 'Kurir Terdekat', query: 'kurir terdekat' },
{ label: 'Jasa Terdekat', query: 'jasa terdekat' },
{ label: 'Wifi Terdekat', query: 'wifi terdekat' },
{ label: 'Kantor BPN Terdekat', query: 'kantor bpn terdekat' },
{ label: 'Kantor Camat Terdekat', query: 'kantor camat terdekat' },
{ label: 'Samsat Terdekat', query: 'samsat terdekat' },
{ label: 'Kantor PLN Terdekat', query: 'kantor pln terdekat' },
{ label: 'Toko Terdekat', query: 'toko terdekat' },
];
const hyperlocalPatternLevels: PatternLevel[] = [
@ -924,7 +1006,7 @@ export default function Starter() {
lat: nextLocation.lat,
lng: nextLocation.lng,
radiusKm: nextRadiusKm,
limit: 18,
limit: 30,
},
});
@ -932,6 +1014,7 @@ export default function Starter() {
setSearchMeta({
count: Number(response.data?.count || 0),
radius_km: response.data?.radius_km,
effective_radius_km: response.data?.effective_radius_km,
radius_zone: response.data?.radius_zone || null,
radius_zones: Array.isArray(response.data?.radius_zones)
? response.data.radius_zones
@ -1178,7 +1261,7 @@ export default function Starter() {
<input
value={query}
onChange={(event) => setQuery(event.target.value)}
placeholder='Cari “kantor BPN”, “kantor camat”, “Samsat”, “SPBU terdekat”, “nasi goreng dekat saya”...'
placeholder='Cari “warteg terdekat”, “toko bahan bangunan”, “service laptop”, “smartphone”, “Samsat”, “SPBU terdekat”...'
className='h-14 w-full rounded-2xl border border-[#E0D6C3] bg-[#FCFAF5] pl-12 pr-4 text-sm outline-none transition focus:border-[#2CA58D] focus:ring-4 focus:ring-[#2CA58D]/15'
/>
</label>
@ -1226,7 +1309,8 @@ export default function Starter() {
<div className='mt-6 inline-flex rounded-full border border-white/15 bg-white/10 px-4 py-2 text-sm font-bold text-white/80'>
Kategori pencarian dikosongkan otomatis hasil ditentukan
dari kata kunci dan jarak.
dari kata kunci dan jarak. GeoSeek mengejar minimal 10 hasil
terdekat bila data tersedia.
</div>
</div>
@ -1319,7 +1403,7 @@ export default function Starter() {
. Ditemukan {searchMeta.count} hasil dari{' '}
{searchMeta.total_candidates} kandidat terindeks.
{searchMeta.expanded_for_nearest
? ' Radius awal kosong, jadi hasil diperluas ke kandidat terdekat dan tetap diurutkan berdasarkan jarak.'
? ` Radius awal ${formatRadius(radiusKm)} belum memenuhi target minimal 10 hasil, jadi GeoSeek memperluas pencarian sampai ${formatRadius(searchMeta.effective_radius_km || radiusKm)} dan tetap mengurutkan berdasarkan jarak.`
: ''}
</p>
</div>
@ -1526,10 +1610,24 @@ export default function Starter() {
</p>
</div>
<p className='mt-4 text-sm text-[#5D6B62]'>
{place.address ||
[place.city, place.province].filter(Boolean).join(', ')}
</p>
<div className='mt-4 rounded-2xl bg-[#F7F2E8] p-4 text-sm text-[#5D6B62]'>
<p className='text-xs font-black uppercase tracking-wide text-[#087F6D]'>
Alamat / lokasi penjual
</p>
<p className='mt-1 font-semibold'>
{place.address ||
[place.city, place.province].filter(Boolean).join(', ') ||
(place.latitude && place.longitude
? `${place.latitude}, ${place.longitude}`
: 'Alamat detail belum tersedia')}
</p>
<p className='mt-1 text-xs font-bold text-[#6A7A70]'>
Sumber:{' '}
{place.external_source === 'openstreetmap'
? 'OpenStreetMap'
: 'Database GeoSeek'}
</p>
</div>
<div className='mt-auto pt-5'>
<Link
href={buildPlaceHref(place)}
@ -1555,17 +1653,26 @@ export default function Starter() {
) : (
<div className='rounded-[2rem] border border-dashed border-[#CDBF9E] bg-white p-10 text-center'>
<h3 className='text-2xl font-black'>
Belum ada hasil dalam radius ini
Data asli belum ditemukan untuk kata kunci ini
</h3>
<p className='mx-auto mt-3 max-w-xl text-[#5D6B62]'>
Perbesar radius ke City/Regional Zone, coba kata kunci seperti
kantor BPN, kantor camat, Samsat, cafe melayu, atau
minta admin menambahkan listing baru.
<p className='mx-auto mt-3 max-w-2xl text-[#5D6B62]'>
GeoSeek sudah mencoba memperluas radius dan mencari dari database
GeoSeek + OpenStreetMap. Sistem tidak membuat alamat palsu; jika
sumber publik belum punya data, tambahkan listing resmi agar
pencarian seperti warteg terdekat atau toko bahan bangunan
tidak kosong.
</p>
<div className='mt-6'>
<div className='mt-6 flex flex-wrap justify-center gap-3'>
<button
type='button'
onClick={() => setRadiusKm(100)}
className='rounded-full bg-[#073B3A] px-5 py-3 text-sm font-black text-white transition hover:bg-[#087F6D]'
>
Perluas radius 100 km
</button>
<BaseButton
href='/login'
label='Masuk panel admin'
label='Tambah listing resmi'
color='warning'
roundedFull
/>
@ -1587,7 +1694,7 @@ export default function Starter() {
Klik chip untuk langsung live search. GeoSeek mengenali intent
seperti terdekat, dekat saya, near me, buka sekarang, 24 jam,
radius, jenis usaha, kota, kecamatan, rating, populer, murah,
terbaru, terverifikasi, kantor pemerintahan, dan BUMN/BUMD.
terbaru, terverifikasi, produk, jasa, properti, kantor pemerintahan, dan BUMN/BUMD.
</p>
</div>
<div className='rounded-[2rem] bg-white p-5 text-sm font-bold text-[#5D6B62] shadow-sm'>
@ -1635,8 +1742,8 @@ export default function Starter() {
Kombinasi kata kunci
</p>
<h3 className='text-2xl font-black'>
Kuliner, kesehatan, otomotif, belanja, wisata, pemerintahan
& BUMN
Produk, jasa, kuliner, properti, logistik, pemerintahan
& semua intent hyperlocal
</h3>
</div>
</div>
@ -1681,7 +1788,7 @@ export default function Starter() {
size={22}
className='text-[#087F6D]'
/>{' '}
Top 20 keyword trafik tertinggi
Keyword trafik tertinggi
</div>
<div className='flex flex-wrap gap-2'>
{topTrafficKeywords.map((keyword, index) => (