Pelajari cara menginstal, mengonfigurasi, dan mengembangkan aplikasi web modern menggunakan Next.js 14, fitur App Router, dan Server Actions—teknologi yang menjadi standar industri untuk performa tinggi dan developer experience terbaik pada tahun 2026.

1. Prasyarat dan Persiapan Lingkungan

Sebelum memulai, pastikan Anda sudah memasang:

  • Node.js 20.x atau lebih baru (disarankan LTS 20.15)
  • npm 10.x atau yarn 4.x
  • Git untuk version control
  • Editor kode modern, contoh VS Code dengan ekstensi ESLint dan Prettier

Jika belum terpasang, unduh Node.js dari situs resmi dan ikuti petunjuk instalasinya.

2. Membuat Proyek Next.js 14 Baru

npx create-next-app@latest my-next14-app \
  --ts \
  --eslint \
  --app
cd my-next14-app

Perintah di atas melakukan:

  • Inisialisasi proyek dengan TypeScript (--ts)
  • Menambahkan konfigurasi ESLint default (--eslint)
  • Mengaktifkan struktur App Router (--app) yang menjadi standar di Next.js 14

Setelah selesai, jalankan server development untuk memastikan semuanya berfungsi:

npm run dev
# atau yarn dev

Buka http://localhost:3000 di browser; Anda akan melihat halaman beranda default.

3. Memahami Struktur App Router

Folder app/ menggantikan pages/ tradisional. Berikut contoh struktur penting:

app/
│   layout.tsx          // Layout global
│   page.tsx            // Home page
│   globals.css         // CSS global
│   (auth)/
│       login/page.tsx // Nested route contoh
│   dashboard/
│       page.tsx       // Protected route
│   api/
│       hello/route.ts // API route (Server Action contoh)

Setiap folder dapat memiliki layout.tsx, page.tsx, dan loading.tsx untuk mengontrol UI dan loading state.

4. Menambahkan Server Action (Beta) untuk Formulir

Server Actions memungkinkan Anda mengeksekusi kode server langsung dari komponen React tanpa membuat endpoint API terpisah.

4.1 Buat Folder actions

mkdir -p app/actions
touch app/actions/contact.ts

4.2 Implementasikan Server Action

// app/actions/contact.ts
'use server';
import { revalidatePath } from 'next/cache';

export async function submitContact(formData: FormData) {
  // Validasi sederhana
  const name = formData.get('name')?.toString().trim();
  const email = formData.get('email')?.toString().trim();
  const message = formData.get('message')?.toString().trim();

  if (!name || !email || !message) {
    throw new Error('Semua field wajib diisi');
  }

  // Simulasi penyimpanan ke DB (misal Prisma)
  // await prisma.contact.create({ data: { name, email, message } });

  // Revalidasi halaman kontak agar data terbaru muncul
  revalidatePath('/contact');
  return { success: true };
}

4.3 Gunakan Action di Komponen

// app/contact/page.tsx
import { submitContact } from '../actions/contact';

export default function ContactPage() {
  return (