diff --git a/app/Http/Controllers/HomepageController.php b/app/Http/Controllers/HomepageController.php
index 71933c8..234b332 100644
--- a/app/Http/Controllers/HomepageController.php
+++ b/app/Http/Controllers/HomepageController.php
@@ -38,6 +38,7 @@ public function __invoke(Request $request): Response
'categories:id,name,slug',
'productVariants:id,product_id,name,stock',
'productVariants.productPrices:id,variant_id,type,price',
+ 'productVariants.media',
]);
if ($search !== '') {
@@ -53,9 +54,23 @@ public function __invoke(Request $request): Response
});
}
- $products = Inertia::scroll(
- fn () => $productsQuery->orderBy('created_at', 'desc')->paginate(12)
- );
+ $s3Service = $this->s3Service;
+ $products = Inertia::scroll(function () use ($productsQuery, $s3Service) {
+ $paginator = $productsQuery->orderBy('created_at', 'desc')->paginate(12);
+
+ $paginator->getCollection()->each(function ($product) use ($s3Service) {
+ $product->productVariants->each(function ($variant) use ($s3Service) {
+ $media = $variant->getMedia('images');
+ $variant->photo_urls = $media->map(
+ fn ($m) => str_starts_with($m->getPath(), 'http')
+ ? $m->getPath()
+ : $s3Service->getTemporaryUrl($m->getPath(), 60)
+ )->toArray();
+ });
+ });
+
+ return $paginator;
+ });
$galleryImages = array_map(
fn ($key) => str_starts_with($key, 'http') ? $key : $this->s3Service->getTemporaryUrl($key, 60),
@@ -72,44 +87,13 @@ public function __invoke(Request $request): Response
'facebookUrl' => $socialMedia->facebook_url,
'tiktokUrl' => $socialMedia->tiktok_url,
'homepage' => [
- 'hero_badge' => $homepage->hero_badge,
- 'hero_title_line1' => $homepage->hero_title_line1,
- 'hero_title_line2' => $homepage->hero_title_line2,
- 'hero_title_highlight' => $homepage->hero_title_highlight,
- 'hero_description' => $homepage->hero_description,
- 'hero_cta_primary_text' => $homepage->hero_cta_primary_text,
- 'hero_cta_secondary_text' => $homepage->hero_cta_secondary_text,
'hero_image_url' => $homepage->hero_image_url
? (str_starts_with($homepage->hero_image_url, 'http') ? $homepage->hero_image_url : $this->s3Service->getTemporaryUrl($homepage->hero_image_url, 60))
: null,
- 'hero_bg_text_left' => $homepage->hero_bg_text_left,
- 'hero_bg_text_right' => $homepage->hero_bg_text_right,
- 'scroll_hashtag' => $homepage->scroll_hashtag,
- 'scroll_tagline' => $homepage->scroll_tagline,
- 'catalog_badge' => $homepage->catalog_badge,
- 'catalog_title' => $homepage->catalog_title,
- 'catalog_description' => $homepage->catalog_description,
- 'catalog_search_placeholder' => $homepage->catalog_search_placeholder,
- 'gallery_badge' => $homepage->gallery_badge,
- 'gallery_title' => $homepage->gallery_title,
- 'gallery_description' => $homepage->gallery_description,
- 'gallery_images' => $galleryImages,
- 'order_guide_badge' => $homepage->order_guide_badge,
- 'order_guide_title' => $homepage->order_guide_title,
- 'order_guide_description' => $homepage->order_guide_description,
- 'order_steps' => $homepage->order_steps,
- 'about_badge' => $homepage->about_badge,
- 'about_title' => $homepage->about_title,
'about_image_url' => $homepage->about_image_url
? (str_starts_with($homepage->about_image_url, 'http') ? $homepage->about_image_url : $this->s3Service->getTemporaryUrl($homepage->about_image_url, 60))
: null,
- 'about_features' => $homepage->about_features,
- 'contact_badge' => $homepage->contact_badge,
- 'contact_title' => $homepage->contact_title,
- 'contact_description' => $homepage->contact_description,
- 'contact_form_title' => $homepage->contact_form_title,
- 'footer_description' => $homepage->footer_description,
- 'footer_copyright' => $homepage->footer_copyright,
+ 'gallery_images' => $galleryImages,
],
'categories' => $categories,
'products' => $products,
@@ -118,8 +102,8 @@ public function __invoke(Request $request): Response
'category' => $category,
],
'seo' => [
- 'title' => $system->app_name.' - '.$homepage->hero_badge,
- 'description' => $homepage->hero_description,
+ 'title' => $system->app_name.' - Koleksi Segar 2026',
+ 'description' => 'Selamat datang di '.$system->app_name.'. Temukan keanggunan motif batik modern dan setelan pakaian santai berkualitas premium.',
'image' => url('/assets/logo.png'),
'url' => url('/'),
],
diff --git a/app/Settings/HomepageSettings.php b/app/Settings/HomepageSettings.php
index d851f7c..3aea90f 100644
--- a/app/Settings/HomepageSettings.php
+++ b/app/Settings/HomepageSettings.php
@@ -6,73 +6,11 @@
class HomepageSettings extends Settings
{
- public string $hero_badge;
-
- public string $hero_title_line1;
-
- public string $hero_title_line2;
-
- public string $hero_title_highlight;
-
- public string $hero_description;
-
- public string $hero_cta_primary_text;
-
- public string $hero_cta_secondary_text;
-
public ?string $hero_image_url;
- public string $hero_bg_text_left;
-
- public string $hero_bg_text_right;
-
- public string $scroll_hashtag;
-
- public string $scroll_tagline;
-
- public string $catalog_badge;
-
- public string $catalog_title;
-
- public string $catalog_description;
-
- public string $catalog_search_placeholder;
-
- public string $gallery_badge;
-
- public string $gallery_title;
-
- public string $gallery_description;
-
- public array $gallery_images;
-
- public string $order_guide_badge;
-
- public string $order_guide_title;
-
- public string $order_guide_description;
-
- public array $order_steps;
-
- public string $about_badge;
-
- public string $about_title;
-
public ?string $about_image_url;
- public array $about_features;
-
- public string $contact_badge;
-
- public string $contact_title;
-
- public string $contact_description;
-
- public string $contact_form_title;
-
- public string $footer_description;
-
- public string $footer_copyright;
+ public array $gallery_images;
public static function group(): string
{
diff --git a/database/settings/2026_06_20_110000_create_homepage_settings.php b/database/settings/2026_06_20_110000_create_homepage_settings.php
index 13cc1a1..2141360 100644
--- a/database/settings/2026_06_20_110000_create_homepage_settings.php
+++ b/database/settings/2026_06_20_110000_create_homepage_settings.php
@@ -8,82 +8,16 @@
public function up(): void
{
$this->migrator->inGroup('homepage', function (SettingsBlueprint $blueprint): void {
- // Hero Section
- $blueprint->add('hero_badge', 'Koleksi Segar 2026');
- $blueprint->add('hero_title_line1', 'Ekspresikan');
- $blueprint->add('hero_title_line2', 'Gaya');
- $blueprint->add('hero_title_highlight', 'Segar Anda');
- $blueprint->add('hero_description', 'Selamat datang di {app_name}. Temukan keanggunan motif batik modern dan setelan pakaian santai berkualitas premium. Dirancang khusus dengan bahan adem yang menyejukkan aktivitas harian Anda.');
- $blueprint->add('hero_cta_primary_text', 'Beli Sekarang');
- $blueprint->add('hero_cta_secondary_text', 'Tentang Kami');
$blueprint->add('hero_image_url', 'https://images.unsplash.com/photo-1490481651871-ab68de25d43d?w=1000&auto=format&fit=crop&q=80');
- $blueprint->add('hero_bg_text_left', 'DST');
- $blueprint->add('hero_bg_text_right', 'Collection');
-
- // Scroll Indicator
- $blueprint->add('scroll_hashtag', '#DSTCollection');
- $blueprint->add('scroll_tagline', 'Bahan Adem & Lembut');
-
- // Catalog Section
- $blueprint->add('catalog_badge', 'Katalog Eksklusif');
- $blueprint->add('catalog_title', 'Koleksi Busana Pilihan');
- $blueprint->add('catalog_description', 'Gunakan kategori dan filter di bawah untuk menyesuaikan pencarian busana idaman Anda dengan mudah.');
- $blueprint->add('catalog_search_placeholder', 'Cari nama pakaian...');
-
- // Deal Section
- $blueprint->add('deal_badge', 'Promo Terbatas');
- $blueprint->add('deal_title', 'Penawaran Bulan Ini');
- $blueprint->add('deal_description', 'Jangan lewatkan promosi batik dan daster eksklusif kami! Dapatkan potongan harga spesial up to 25% untuk varian daster pilihan dan setelan pakaian modern. Dapatkan kenyamanan ekstra dengan bahan menyejukkan sebelum masa promo habis!');
- $blueprint->add('deal_cta_text', 'Jelajahi Produk Diskon');
- $blueprint->add('deal_images', [
+ $blueprint->add('about_image_url', 'https://images.unsplash.com/photo-1595777457583-95e059d581b8?w=800&auto=format&fit=crop&q=80');
+ $blueprint->add('gallery_images', [
'https://images.unsplash.com/photo-1595777457583-95e059d581b8?w=800&auto=format&fit=crop&q=80',
'https://images.unsplash.com/photo-1572804013309-59a88b7e92f1?w=800&auto=format&fit=crop&q=80',
'https://images.unsplash.com/photo-1515886657613-9f3515b0c78f?w=800&auto=format&fit=crop&q=80',
'https://images.unsplash.com/photo-1539109136881-3be0616acf4b?w=800&auto=format&fit=crop&q=80',
+ 'https://images.unsplash.com/photo-1496747611176-843222e1e57c?w=800&auto=format&fit=crop&q=80',
+ 'https://images.unsplash.com/photo-1509631179647-0177331693ae?w=800&auto=format&fit=crop&q=80',
]);
-
- // Order Guide Section
- $blueprint->add('order_guide_badge', 'Langkah Pemesanan');
- $blueprint->add('order_guide_title', 'Cara Melakukan Pemesanan');
- $blueprint->add('order_guide_description', 'Sistem pemesanan kami sangat mudah dan terhubung langsung via WhatsApp untuk pelayanan cepat dan personal.');
- $blueprint->add('order_steps', [
- [
- 'title' => 'Pilih Produk',
- 'description' => 'Jelajahi pakaian batik dan daster favorit Anda, lalu ketuk "Lihat Detail" untuk memeriksa ukuran.',
- ],
- [
- 'title' => 'Pilih Varian & Harga',
- 'description' => 'Tentukan varian ukuran yang diinginkan dan pilih jenis harga (Eceran, Grosir, Agen, dll.).',
- ],
- [
- 'title' => 'Masukkan Keranjang',
- 'description' => 'Masukkan ke Keranjang Belanja untuk menampung seluruh daftar pakaian yang ingin Anda beli.',
- ],
- [
- 'title' => 'Kirim ke WhatsApp',
- 'description' => 'Klik tombol kirim pesanan, admin kami akan merespons rincian transfer bank dan pengiriman kurir.',
- ],
- ]);
-
- // About Section
- $blueprint->add('about_badge', 'Tentang Kami');
- $blueprint->add('about_title', 'DST Collection');
- $blueprint->add('about_image_url', 'https://images.unsplash.com/photo-1595777457583-95e059d581b8?w=800&auto=format&fit=crop&q=80');
- $blueprint->add('about_features', [
- 'Kain Rayon Super Tebal & Menyerap Keringat',
- 'Motif Eksklusif & Tidak Pasaran',
- 'Dukungan Penuh Layanan Admin Via WhatsApp',
- ]);
-
- // Contact Section
- $blueprint->add('contact_badge', 'Kontak Kami');
- $blueprint->add('contact_title', 'Ada Pertanyaan? Hubungi Kami');
- $blueprint->add('contact_description', 'Kami sangat senang mendengarkan pertanyaan Anda terkait spesifikasi produk, ketersediaan grosir, atau kemitraan. Hubungi tim admin kami melalui media di bawah.');
- $blueprint->add('contact_form_title', 'Kirim Pesan Cepat');
-
- // Footer
- $blueprint->add('footer_description', 'Galeri resmi {app_name}. Pilihan busana lokal premium berpotongan modern dengan kenyamanan menyejukkan.');
- $blueprint->add('footer_copyright', '© 2026 {app_name} DST Collection. Hak Cipta Dilindungi.');
});
}
};
diff --git a/database/settings/2026_06_20_120000_rename_deal_to_gallery_in_homepage.php b/database/settings/2026_06_20_120000_rename_deal_to_gallery_in_homepage.php
index 29eeac2..e9fa72c 100644
--- a/database/settings/2026_06_20_120000_rename_deal_to_gallery_in_homepage.php
+++ b/database/settings/2026_06_20_120000_rename_deal_to_gallery_in_homepage.php
@@ -8,25 +8,11 @@
public function up(): void
{
$this->migrator->inGroup('homepage', function (SettingsBlueprint $blueprint): void {
- // Delete old deal fields
$blueprint->delete('deal_badge');
$blueprint->delete('deal_title');
$blueprint->delete('deal_description');
$blueprint->delete('deal_cta_text');
$blueprint->delete('deal_images');
-
- // Add new gallery fields
- $blueprint->add('gallery_badge', 'Galeri Kami');
- $blueprint->add('gallery_title', 'Koleksi Lookbook');
- $blueprint->add('gallery_description', 'Intip koleksi lookbook kami untuk inspirasi gaya sehari-hari. Padu padan batik modern dan daster yang nyaman untuk berbagai suasana.');
- $blueprint->add('gallery_images', [
- 'https://images.unsplash.com/photo-1595777457583-95e059d581b8?w=800&auto=format&fit=crop&q=80',
- 'https://images.unsplash.com/photo-1572804013309-59a88b7e92f1?w=800&auto=format&fit=crop&q=80',
- 'https://images.unsplash.com/photo-1515886657613-9f3515b0c78f?w=800&auto=format&fit=crop&q=80',
- 'https://images.unsplash.com/photo-1539109136881-3be0616acf4b?w=800&auto=format&fit=crop&q=80',
- 'https://images.unsplash.com/photo-1496747611176-843222e1e57c?w=800&auto=format&fit=crop&q=80',
- 'https://images.unsplash.com/photo-1509631179647-0177331693ae?w=800&auto=format&fit=crop&q=80',
- ]);
});
}
};
diff --git a/resources/js/app.tsx b/resources/js/app.tsx
index 5721e83..2ae9f15 100644
--- a/resources/js/app.tsx
+++ b/resources/js/app.tsx
@@ -1,6 +1,7 @@
import { FlashToast, PWAUpdateToast } from '@/components/notifications';
import { Toaster } from '@/components/ui/sonner';
import { TooltipProvider } from '@/components/ui/tooltip';
+import { CartProvider } from '@/contexts/cart-context';
import { initializeTheme } from '@/hooks/use-appearance';
import AppLayout from '@/layouts/app-layout';
import AuthLayout from '@/layouts/auth-layout';
@@ -38,12 +39,14 @@ createInertiaApp({
strictMode: true,
withApp(app) {
return (
-
Keranjang kosong
+Tambahkan produk untuk mulai berbelanja
+{item.productName}
+{item.variantName} · {item.priceType === 'retail' ? 'Retail' : 'Grosir'}
+Rp {formatRupiah(item.price)}
+- {product.description || 'Koleksi fashion berkualitas'} -
{getProductPriceRange(product)}
+Harga
Rp {formatRupiah(currentPrice)}
- {selectedPriceType === 'wholesale' && wholesalePrice > 0 && ( -- Harga retail: Rp {formatRupiah(retailPrice)} -
- )}Varian
Jenis Harga
Jumlah
Stok tersedia: {maxStock}
+
- - {homepage.hero_description} + Koleksi fashion wanita dengan sentuhan elegan, material berkualitas, dan kenyamanan yang dapat Anda rasakan di setiap pemakaian.
{homepage.catalog_description}
+Gunakan kategori dan filter di bawah untuk menyesuaikan pencarian busana idaman Anda dengan mudah.
Mohon maaf, kami tidak menemukan pakaian yang cocok dengan kata kunci pencarian Anda.
-{homepage.gallery_description}
+Intip koleksi lookbook kami untuk inspirasi gaya sehari-hari. Padu padan pakaian modern yang nyaman untuk berbagai suasana.
{homepage.order_guide_description}
+Sistem pemesanan kami sangat mudah dan terhubung langsung via WhatsApp untuk pelayanan cepat dan personal.
- {aboutApp || 'Kami adalah rumah produksi busana dan batik lokal berkualitas tinggi. Berfokus pada keindahan motif, ketepatan detail jahitan, dan pemilihan kain adem yang mengedepankan aspek fungsionalitas dan estetika.'} + {aboutApp || 'Kami adalah rumah produksi busana lokal berkualitas tinggi. Berfokus pada keindahan motif, ketepatan detail jahitan, dan pemilihan kain adem yang mengedepankan aspek fungsionalitas dan estetika.'}
- {homepage.about_features.map((feature, index) => ( + {['Kain Rayon Super Tebal & Menyerap Keringat', 'Motif Eksklusif & Tidak Pasaran', 'Dukungan Penuh Layanan Admin Via WhatsApp'].map((feature, index) => ({homepage.contact_description}
+Kami sangat senang mendengarkan pertanyaan Anda terkait spesifikasi produk, ketersediaan grosir, atau kemitraan. Hubungi tim admin kami melalui media di bawah.
-