Reinterpretasi modern website booking penginapan Visual segar, alur pemesanan yang nyaman, dan pengalaman browsing properti yang terasa ringan dan natural.
Homynomad.id adalah project redesign dari homynomad.com β bukan sekadar meniru, melainkan membangun ulang dengan pendekatan visual dan pengalaman yang lebih modern.
| ASPEK | DESKRIPSI |
|---|---|
| π¨ Tampilan lebih segar | Desain kontemporer yang terasa ringan, lapang, dan nyaman di mata |
| π± Responsif sempurna | Pengalaman mobile, tablet, dan desktop yang konsisten tanpa zoom |
| π§ Booking flow natural | Dari lihat properti hingga konfirmasi, setiap langkah terasa jelas |
| π Dark mode | Tampilan gelap nyaman untuk browsing malam hari, konsisten di mana pun |
| β¨ Detail yang diperhatikan | Transisi halus, tipografi enak dibaca, tata letak yang memberi ruang |
| AREA | ARAH DESAIN |
|---|---|
| Visual Identity | Warna yang menenangkan, tipografi modern, foto properti sebagai pusat perhatian |
| Booking Experience | Alur pemesanan yang terasa singkat, jelas, dan tidak membuat ragu |
| Browsing Experience | Menelusuri properti terasa menyenangkan β seperti window shopping |
| Kenyamanan | Tidak ada informasi berlebihan, tidak ada langkah yang membingungkan |
| Kepercayaan | Informasi properti transparan, foto asli, harga jelas sejak awal |
| Konsistensi | Tampilan seragam di setiap sudut website, tanpa kejutan visual |
Struktur routing ini mengacu pada
docs/information-architecture/route-structure.md.
| RUTE | JENIS | PERILAKU | KETERANGAN |
|---|---|---|---|
/ |
Halaman | Standar | Beranda β hero, properti unggulan |
/#explore |
Anchor | Scroll smooth | Eksplorasi β pencarian dengan filter |
/location/[location] |
Modal | Overlay di / |
Detail lokasi β foto, kamar, harga |
/location/[location]/room/[room] |
Modal | Nested overlay | Detail kamar β fasilitas, harga, booking |
/about |
Halaman | Standar | Filosofi, visi, misi |
/booking |
Halaman | Standar | Form booking, riwayat pemesanan |
/auth/login |
Halaman | Guest only | Masuk |
/auth/register |
Halaman | Guest only | Daftar akun baru |
/profile |
Halaman | Authenticated | Profil pengguna β data diri, riwayat |
/profile/wishlist |
Halaman | Authenticated | Favorit β properti tersimpan |
/profile/settings |
Halaman | Authenticated | Pengaturan tema, bahasa, mata uang |
/support |
Halaman | Standar | Pusat bantuan β FAQ, kontak |
| FITUR | PRIORITAS | DESKRIPSI |
|---|---|---|
| π Login & Registrasi | P0 | Daftar dan masuk dengan mudah, akses booking & profil |
| π Eksplorasi Penginapan | P0 | Cari properti dengan filter, galeri foto, peta lokasi |
| π Booking & Reservasi | P0 | Kalender ketersediaan, konfirmasi cepat, riwayat |
| π Pencarian Tersimpan + Alert | P1 | Simpan pencarian, notifikasi harga & ketersediaan |
| π Informasi Komutasi | P1 | Estimasi waktu ke kantor, stasiun, transportasi umum |
| π Visibilitas Ketersediaan | P1 | Indikator real-time "tinggal 2 kamar", popularitas |
| π€ Profil Pengguna | P1 | Data pribadi, riwayat booking, pengaturan preferensi |
| β€οΈ Wishlist | P1 | Simpan properti favorit, lihat lagi kapan saja |
| π Dark Mode | P1 | Beralih tema gelap/terang, nyaman di segala suasana |
| π Pusat Bantuan | P2 | FAQ, kontak support, bantuan seputar booking |
Homynomad.id menggunakan Feature-Sliced Design (FSD) β arsitektur frontend yang memisahkan kode berdasarkan domain fitur, bukan tipe teknis.
Hirarki layer (hanya boleh mengimpor dari layer di bawahnya):
app/ β components/ β features/ β entities/ β shared/
| Layer | Isi |
|---|---|
app/ |
Layout root, global providers, globals CSS, favicon |
components/ui/ |
Komponen dasar shadcn/ui (Button, Typography, Section, Input, Badge, dll) |
components/widgets/ |
Blok UI besar reusable (Banner, Header, BentoCard, FloatingActionButton) |
components/layouts/ |
Layout wrapper (AppLayout, Navigation, Footer, CTA, NewsletterBanner) |
features/ |
Interaksi pengguna reusable (Landing β Hero, FeatureGrid) |
lib/ |
Utilitas umum (utils.ts) |
shared/api/ |
API client, fetch wrapper, konfigurasi endpoint |
shared/config/ |
Environment, route constants, tema |
shared/data/ |
Data dummy untuk prototyping (navigation, features, footer, banner, dll) |
shared/hooks/ |
Custom hooks global (useActivePath, useScroll) |
shared/motion/ |
Konfigurasi animasi Framer Motion (presets, transitions) |
| AREA | DOKUMEN | TUJUAN | LOKASI |
|---|---|---|---|
| Product | Roadmap | Fase pengembangan dan timeline fitur | docs/product/roadmap.md |
| Product | Feature List | Daftar fitur prioritas (P0/P1/P2) | docs/product/feature-list.md |
| Product | PRD | Product Requirement Document | docs/product/prd.md |
| Product | User Flow | Alur pengguna di setiap fitur | docs/product/user-flow.md |
| Design | Design System | Panduan design system dan komponen | docs/design/design-system.md |
| Design | Design Principles | Prinsip dan pendekatan desain | docs/design/design-principles.md |
| Design | Color System | Palet warna, semantic tokens, dark mode | docs/design/color-system.md |
| Design | Typography | Skala tipografi dan hierarki teks | docs/design/typography.md |
| Information Architecture | Route Structure | Pattern routing, parameter URL, modal routing | docs/information-architecture/route-structure.md |
| Jenis | Aturan | Contoh |
|---|---|---|
File komponen (ui/, layouts/) |
kebab-case |
app-layout.tsx, footer.tsx, typography.tsx |
File komponen (widgets/, features/) |
PascalCase |
Banner.tsx, BentoCard.tsx, Hero.tsx, FeatureGrid.tsx |
| File utility / data | kebab-case |
utils.ts, formatDate.ts, navigation.ts |
| File hook | kebab-case |
use-active-path.ts, use-scroll.tsx |
| File konfigurasi / motion | kebab-case |
presets.ts, transitions.ts, siteConfig.ts |
| Folder layer FSD | plural | components/, features/, shared/ |
| Folder slice | kebab-case |
auth-form/, property-card/, landing/ |
| Folder segment | lowercase | ui/, model/, api/, lib/, hooks/, motion/ |
| Named export (komponen) | PascalCase | AppLayout, Button, Banner, FeatureGrid |
| Named export (hook) | camelCase | useActivePath, useScroll |
| Named export (utility) | camelCase | formatDate, cn |
Pendekatan visual yang konsisten di seluruh website:
| ELEMEN | PENDEKATAN |
|---|---|
| Warna | Palet menenangkan dengan aksen kontras, dark mode penuh |
| Tipografi | Font modern untuk judul dan body, hierarki yang jelas |
| Spasi | Tata letak lapang, tidak padat, konten punya ruang bernapas |
| Komponen | Tombol, kartu, input, modal β semuanya seragam |
| Foto | Gambar properti sebagai pusat visual, gallery yang imersif |
| Animasi | Transisi halus, micro-interaction yang memperkuat pengalaman |
Project menggunakan Husky + lint-staged untuk automated validation pada setiap commit dan push.
# Validasi penuh β lint, type-check, build
bun run validate
# Format semua file
bun run format
# Lint saja
bun run lint
# Type-check saja
bun run checkSetiap git commit akan secara otomatis:
- Format staged files dengan Prettier
- Lint & fix staged
.ts,.tsx,.js,.jsxdengan ESLint - Jika ada error, commit gagal β perbaiki dulu
Setiap git push akan menjalankan bun run build. Pastikan build sukses.
# Jika build gagal, push tertolak
# Fix error dan push ulang| Script | Perintah | Deskripsi |
|---|---|---|
dev |
next dev |
Development server |
build |
next build |
Production build |
start |
next start |
Start production server |
lint |
eslint . |
Lint semua file |
check |
tsc --noEmit |
Type-check seluruh project |
format |
prettier --write . |
Format semua file dengan Prettier |
validate |
bun run lint && bun run check && bun run build |
Full validation pipeline |
Saat pertama kali clone project:
git clone <repo-url>
cd homynomad.id
bun install # Otomatis mengaktifkan Husky hooks via prepare script
cp .env.example .env.local
bun devCatatan: Husky hooks aktif otomatis setelah
bun install. Tidak perlu setup manual.
git clone https://github.com/username/homynomad.id.git
cd homynomad.id
bun install
cp .env.example .env.local
bun devBuka http://localhost:3000 di browser.
Project ini dilisensikan di bawah MIT License β lihat file LICENSE untuk detail.