Platform e-commerce modern untuk UMKM kuliner dengan AI assistant terintegrasi
Demo โข Fitur โข Tech Stack โข Quick Start โข Arsitektur โข API โข Kontribusi
|
๐ Homepage Hero section dengan statistik dan menu unggulan |
๐ค AI Assistant Chatbot multi-provider untuk rekomendasi menu |
|
๐ Katalog Menu Filter interaktif berdasarkan kategori |
๐ Detail Menu Halaman detail dengan pairing suggestions |
๐ Live Demo: Jalankan
npm run devdan bukahttp://localhost:3000atau bisa akses mirror berikut https://testhac.biezz.my.id https://hackathonweb2.biezz.my.id https://kulinaai.biezz.my.id https://kulina-ai.vercel.app
| Fitur | Deskripsi |
|---|---|
| Hero Section | Statistik real-time (25K+ menu terjual, rating 4.8/5) dengan dual CTA |
| Menu Showcase | Grid menu unggulan dengan badge kategori dan label best seller |
| Selling Points | Animasi hover effect menggunakan Framer Motion |
| Testimonials | Review pelanggan dalam layout card yang elegan |
| CTA Section | Promosi catering dengan gradient background |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ค Chatbot Features โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
Multi-provider: Claude, Gemini, Kolosal โ
โ โ
Context-aware dengan data menu UMKM โ
โ โ
Rekomendasi porsi & pairing otomatis โ
โ โ
Sanitasi input (redaksi email & telepon) โ
โ โ
Suggestion chips untuk quick questions โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- 7 Filter Dinamis: Semua, Pedas, Tidak Pedas, Keluarga, Personal, Dingin, Hangat
- Responsive Grid: Otomatis menyesuaikan jumlah kolom
- Static Generation: Pre-rendered untuk performa optimal
- Detail Page: Gambar HD, tags, dan CTA ke AI chat
- ๐ Dark Theme dengan mesh gradient yang elegan
- ๐ฑ๏ธ Custom Cursor dengan snap-to-element effect
- โจ Smooth Animations menggunakan Framer Motion
- ๐ฑ Mobile-First responsive design
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FRONTEND โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Next.js 14.2 โ App Router, SSG, API Routes โ
โ React 18.3 โ Server Components, Hooks โ
โ TypeScript 5.6 โ Full type safety โ
โ Tailwind CSS 3.4 โ Utility-first styling โ
โ Framer Motion 12 โ Animations & transitions โ
โ Lucide React โ SVG icon library โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BACKEND โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ API Routes โ Serverless endpoints โ
โ AI Proxy Layer โ Multi-provider integration โ
โ Input Sanitizer โ PII redaction & validation โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Package | Version | Purpose |
|---|---|---|
next |
14.2.10 | React framework |
react |
18.3.1 | UI library |
typescript |
5.6.3 | Type system |
tailwindcss |
3.4.14 | CSS framework |
framer-motion |
12.23.25 | Animations |
lucide-react |
0.556.0 | Icons |
clsx |
2.1.1 | Classname utility |
tailwind-merge |
3.4.0 | Tailwind class merging |
node --version # v18.0.0 atau lebih tinggi
npm --version # v8.0.0 atau lebih tinggi# 1๏ธโฃ Clone repository
git clone https://github.com/yourusername/ridha-foods.git
cd ridha-foods
# 2๏ธโฃ Install dependencies
npm install
# 3๏ธโฃ Setup environment (opsional untuk AI chat)
cp .env.example .env.local
# Edit .env.local dengan API key Anda
# 4๏ธโฃ Jalankan development server
npm run devhttp://localhost:3000
Buat file .env.local di root project:
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ๐ AI PROVIDER CONFIGURATION
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Kolosal API (required untuk provider Kolosal)
KOLOSAL_API_KEY=your_kolosal_api_key_here
KOLOSAL_MODEL=Llama 4 Maverick
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ๐ OPTIONAL: Override Provider URLs
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# PROVIDER_BASEURL_CLAUDE=https://your-claude-endpoint.com
# PROVIDER_BASEURL_GEMINI=https://your-gemini-endpoint.com
# PROVIDER_BASEURL_KOLOSAL=https://api.kolosal.ai/v1/chat/completions๐ฆ ridha-foods/
โ
โโโ ๐ public/ # Static assets
โ โโโ favicon.svg
โ
โโโ ๐ src/
โ โ
โ โโโ ๐ app/ # Next.js App Router
โ โ โโโ ๐ layout.tsx # Root layout (fonts, metadata)
โ โ โโโ ๐ page.tsx # Homepage
โ โ โโโ ๐ globals.css # Global styles
โ โ โ
โ โ โโโ ๐ menu/
โ โ โ โโโ ๐ page.tsx # Katalog menu + filter
โ โ โ โโโ ๐ [id]/
โ โ โ โโโ ๐ page.tsx # Detail menu (SSG)
โ โ โ
โ โ โโโ ๐ api/
โ โ โโโ ๐ chat/
โ โ โ โโโ ๐ route.ts # AI chat endpoint
โ โ โโโ ๐ health/
โ โ โโโ ๐ route.ts # Health check
โ โ
โ โโโ ๐ components/ # React Components
โ โ โโโ ๐ hero.tsx # Hero section
โ โ โโโ ๐ menu-showcase.tsx # Menu grid
โ โ โโโ ๐ selling-points.tsx # USP cards
โ โ โโโ ๐ testimonials.tsx # Customer reviews
โ โ โโโ ๐ cta-section.tsx # Call-to-action
โ โ โโโ ๐ floating-chat.tsx # ๐ค AI chatbot widget
โ โ โโโ ๐ navbar.tsx # Navigation
โ โ โโโ ๐ cursor.tsx # Custom cursor
โ โ โโโ ๐ Tabs.tsx # Tab component
โ โ โโโ ๐ TabSelect.tsx # Tab selector
โ โ โโโ ๐ ui/
โ โ โโโ ๐ card-hover-effect.tsx
โ โ
โ โโโ ๐ data/
โ โ โโโ ๐ menu.ts # Menu data & types
โ โ
โ โโโ ๐ lib/
โ โโโ ๐ aiClient.ts # AI provider integration
โ โโโ ๐ aiSanitizer.ts # Input sanitization
โ โโโ ๐ utils.ts # Utility functions (cn)
โ
โโโ ๐ tailwind.config.ts # Tailwind configuration
โโโ ๐ next.config.mjs # Next.js configuration
โโโ ๐ tsconfig.json # TypeScript configuration
โโโ ๐ package.json # Dependencies
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ layout.tsx โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Cursor + Navbar โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ page.tsx โ โ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ โ Hero โ โ Menu โ โ Selling โ โ โ
โ โ โ Section โ โ Showcase โ โ Points โ โ โ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ โTestimoni โ โ CTA โ โ โ
โ โ โ als โ โ Section โ โ โ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FloatingChat (Fixed) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
AI chat endpoint dengan multi-provider support.
POST /api/chat HTTP/1.1
Content-Type: application/json
{
"question": "Rekomendasi menu untuk 10 orang?",
"provider": "claude",
"context": "Katalog menu..."
}| Field | Type | Required | Description |
|---|---|---|---|
question |
string | โ | Pertanyaan user |
provider |
string | โ | claude | gemini | kolosal (default: claude) |
context |
string | โ | Context menu (auto-generated jika tidak ada) |
{
"message": "Untuk 10 orang, saya sarankan Paket Keluarga...",
"provider": "claude"
}| Status | Body | Cause |
|---|---|---|
400 |
{"error": "Pertanyaan kosong."} |
Empty question |
502 |
{"error": "Gagal memanggil AI"} |
AI provider error |
Health check endpoint.
{
"status": "ok",
"timestamp": "2024-12-07T10:00:00.000Z"
}type MenuItem = {
id: string; // Unique identifier (slug)
name: string; // Nama menu
description: string; // Deskripsi menu
price: number; // Harga (IDR)
category: string; // Kategori
tags: string[]; // Tags untuk filtering
spicyLevel?: number; // Level pedas 1-5
bestSeller?: boolean; // Flag best seller
imageUrl: string; // URL gambar (Unsplash)
profile: {
spice: "pedas" | "tidak pedas";
serve: "keluarga" | "personal";
temp: "hangat" | "dingin";
};
};| Menu | Price | Category | Profile |
|---|---|---|---|
| Rendang Rumah | Rp68.000 | Lauk Rumahan | ๐ถ๏ธ Pedas, ๐จโ๐ฉโ๐งโ๐ฆ Keluarga, ๐ฅ Hangat |
| Ayam Bakar Madu | Rp54.000 | Lauk Rumahan | ๐ฟ Tidak Pedas, ๐จโ๐ฉโ๐งโ๐ฆ Keluarga, ๐ฅ Hangat |
| Nasi Liwet Komplit | Rp49.000 | Nasi Box | ๐ฟ Tidak Pedas, ๐จโ๐ฉโ๐งโ๐ฆ Keluarga, ๐ฅ Hangat |
| Sambal Matah Fresh | Rp18.000 | Sambal | ๐ถ๏ธ Pedas, ๐ค Personal, โ๏ธ Dingin |
| Es Cincau Kelapa | Rp22.000 | Minuman | ๐ฟ Tidak Pedas, ๐ค Personal, โ๏ธ Dingin |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PRIMARY COLORS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Dark #0b1021 โโโโโโโโ Background utama โ
โ Brand 500 #2d6bfa โโโโโโโโ Primary brand color โ
โ Accent #f59e0b โโโโโโโโ Highlights, CTAs โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BRAND SCALE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ 50 #f0f7ff โโโโโโโโ โ
โ 100 #d7e9ff โโโโโโโโ โ
โ 200 #b3d5ff โโโโโโโโ โ
โ 300 #82b6ff โโโโโโโโ โ
โ 400 #4d90ff โโโโโโโโ โ
โ 500 #2d6bfa โโโโโโโโ โ
โ 600 #1d4ae3 โโโโโโโโ โ
โ 700 #173ab5 โโโโโโโโ โ
โ 800 #153291 โโโโโโโโ โ
โ 900 #132d78 โโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Font | Usage | Weights |
|---|---|---|
| Space Grotesk | Headlines, display text | 400-700 |
| Manrope | Body text, paragraphs | 400-600 |
/* Card shadow - untuk elevated components */
shadow-card: 0 25px 50px -12px rgba(0,0,0,0.3)
/* Soft shadow - untuk subtle elevation */
shadow-soft: 0 10px 30px rgba(0,0,0,0.12)| Script | Command | Description |
|---|---|---|
| Dev | npm run dev |
Start development server with hot reload |
| Build | npm run build |
Create optimized production build |
| Start | npm run start |
Run production server |
| Lint | npm run lint |
Run ESLint for code quality |
| Type Check | npm run typecheck |
TypeScript type checking |
- Custom font families (Space Grotesk, Manrope)
- Extended color palette dengan brand colors
- Custom shadows (card, soft)
- Mesh gradient background
- Image optimization settings
- External image domains whitelist
- Path aliases:
@/*โsrc/* - Strict mode enabled
- ES2017 target
// Otomatis redaksi data sensitif
sanitizeQuestion("Email saya john@gmail.com")
// โ "Email saya [REDACTED_EMAIL]"
sanitizeQuestion("WA 081234567890")
// โ "WA [REDACTED_PHONE]"- AI client hanya berjalan di server
- API keys tidak terekspos ke client
- Environment variable validation
Kami menyambut kontribusi dari komunitas!
# 1๏ธโฃ Fork repository
# Klik tombol "Fork" di GitHub
# 2๏ธโฃ Clone fork Anda
git clone https://github.com/YOUR_USERNAME/ridha-foods.git
# 3๏ธโฃ Buat branch fitur
git checkout -b feature/amazing-feature
# 4๏ธโฃ Commit perubahan
git commit -m "feat: add amazing feature"
# 5๏ธโฃ Push ke branch
git push origin feature/amazing-feature
# 6๏ธโฃ Buat Pull Request
# Buka GitHub dan klik "New Pull Request"| Type | Description |
|---|---|
feat |
Fitur baru |
fix |
Bug fix |
docs |
Dokumentasi |
style |
Formatting, styling |
refactor |
Refactoring code |
test |
Testing |
chore |
Maintenance |
MIT License
Copyright (c) 2024 Ridha Foods
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
- Next.js - The React Framework
- Tailwind CSS - Utility-first CSS
- Framer Motion - Animation library
- Lucide - Beautiful icons
- Unsplash - Free images
Made with โค๏ธ for UMKM Indonesia ๐ฎ๐ฉ