Skip to content

Struktur Proyek ​

Gambaran lengkap setiap folder dan file penting dalam starter kit ini.

.
├── app/                        # Semua kode frontend (Vue/Nuxt)
│   ├── assets/css/             # File CSS global (Tailwind entry point)
│   ├── components/             # Komponen Vue yang dapat digunakan ulang
│   ├── composables/            # Logika reaktif yang dapat dibagikan antar halaman
│   ├── layouts/                # Layout template halaman
│   ├── middleware/             # Middleware route (auth, guest)
│   ├── pages/                  # Halaman aplikasi (otomatis jadi route)
│   ├── plugins/                # Plugin Nuxt sisi client
│   ├── types/                  # Definisi TypeScript
│   └── app.vue                 # Root component
│
├── server/                     # Semua kode backend (Nitro)
│   ├── api/auth/               # Endpoint REST autentikasi
│   ├── database/
│   │   ├── migrations/         # Logika pembuatan tabel
│   │   ├── seeders/            # Pengisian data awal
│   │   └── schema.ts           # Definisi skema tabel (Drizzle ORM)
│   ├── plugins/
│   │   └── db.ts               # Plugin inisialisasi database saat server start
│   ├── tasks/db/               # Nitro tasks (dapat dijalankan via CLI atau HTTP)
│   └── utils/
│       ├── db.ts               # Koneksi & fungsi query SQLite
│       └── session.ts          # Helper cookie & token autentikasi
│
├── test/
│   ├── unit/                   # Unit tests (Vitest)
│   └── setup.ts                # Konfigurasi global test
│
├── docs/                       # Dokumentasi (format VitePress)
├── .data/                      # Folder runtime — TIDAK di-commit ke git
│   └── database.sqlite         # File database SQLite (di-generate otomatis)
├── .env                        # Variabel lingkungan lokal (TIDAK di-commit)
├── .env.example                # Contoh variabel lingkungan (di-commit)
├── .npmignore                  # Daftar file yang dikecualikan saat publish npm
├── nuxt.config.ts              # Konfigurasi utama Nuxt
├── tailwind.config.ts          # Konfigurasi Tailwind CSS
├── vitest.config.ts            # Konfigurasi Vitest
└── package.json                # Dependensi dan script NPM

Detail Setiap Bagian ​

app/ ​

Seluruh kode frontend ada di sini. Nuxt 4 memisahkan kode client ke dalam folder app/ agar tidak bercampur dengan kode server.

app/pages/ ​

FileRouteKeterangan
index.vue/Halaman landing / beranda
login.vue/loginForm login, dilindungi middleware guest
register.vue/registerForm registrasi, dilindungi middleware guest
dashboard.vue/dashboardHalaman dashboard, dilindungi middleware auth

app/composables/ ​

FileFungsi
useAuth.tsState user, login, register, logout, fetchUser
useApi.tsWrapper $fetch dengan baseURL dari runtimeConfig
useUserService.tsContoh service layer menggunakan useApi
useTheme.tsToggle dark/light mode

app/middleware/ ​

FileDeskripsi
auth.tsRedirect ke /login jika user belum terautentikasi
guest.tsRedirect ke /dashboard jika user sudah terautentikasi

app/plugins/ ​

FileDeskripsi
auth.tsMenjalankan fetchUser() saat aplikasi pertama kali dimuat

server/ ​

Kode backend berjalan di Nitro (server-side Nuxt). Semua file di sini tidak dikirim ke browser.

server/api/auth/ ​

FileMethodEndpointFungsi
login.post.tsPOST/api/auth/loginVerifikasi email + password
register.post.tsPOST/api/auth/registerBuat akun user baru
logout.post.tsPOST/api/auth/logoutHapus session & cookie
me.get.tsGET/api/auth/meAmbil data user dari session

server/database/schema.ts ​

Definisi struktur tabel menggunakan Drizzle ORM. Ini adalah sumber kebenaran tunggal untuk skema database.

typescript
// Tabel users
export const users = sqliteTable("users", {
  id: integer("id").primaryKey({ autoIncrement: true }),
  name: text("name").notNull(),
  email: text("email").notNull().unique(),
  password: text("password").notNull(),
  created_at: text("created_at"),
  updated_at: text("updated_at"),
});

// Tabel sessions
export const sessions = sqliteTable("sessions", { ... });

server/database/migrations/index.ts ​

Bertanggung jawab membuat tabel di database. Mendukung dua mode via DB_TYPE:

  • update — CREATE TABLE IF NOT EXISTS, data tidak hilang
  • create-drop — drop semua tabel lalu buat ulang dari nol

server/database/seeders/ ​

FileFungsi
Seeder.tsAbstract base class — semua seeder extends class ini
UserSeeder.tsBuat user admin default (admin@example.com / password)
DatabaseSeeder.tsTitik masuk utama — mendaftarkan semua seeder yang akan dijalankan

server/plugins/db.ts ​

Plugin Nitro yang berjalan satu kali saat server start. Menjalankan migrasi dan seeder secara otomatis. Developer tidak perlu menjalankan perintah migrasi secara manual di development.

server/tasks/db/ ​

Nitro Tasks yang bisa dipanggil via CLI atau HTTP endpoint (/_nitro/tasks/db:migrate, dll.). Berguna untuk keperluan deployment atau reset database manual.

FileScript NPMFungsi
migrate.tspnpm db:migrateJalankan migrasi saja
seed.tspnpm db:seedJalankan seeder saja
fresh.tspnpm db:freshDrop semua tabel + migrasi ulang
pnpm db:fresh:seedDrop + migrasi + seed

server/utils/db.ts ​

Singleton koneksi SQLite + semua fungsi query yang dibutuhkan oleh API handlers.

FungsiKeterangan
getConnection()Mengembalikan koneksi SQLite (singleton)
findUserByEmail(email)Cari user berdasarkan email (case-insensitive)
findUserById(id)Cari user berdasarkan ID
createUser(...)Buat user baru
createSession(...)Buat session baru
findSessionByToken()Cari session + data user berdasarkan token
deleteSession(token)Hapus session (logout)

server/utils/session.ts ​

Helper untuk membaca dan menulis token autentikasi dari/ke HTTP request.

FungsiKeterangan
getSessionToken(event)Baca token dari cookie auth_token atau header Bearer
setSessionCookie(...)Tulis token ke cookie (httpOnly, secure di production)
clearSessionCookie(...)Hapus cookie saat logout
getUserFromEvent(event)Shortcut: baca token → cari session → kembalikan user

test/ ​

Unit test menggunakan Vitest. Semua test berjalan di environment node dengan SQLite in-memory — tidak mempengaruhi database development.

FileYang Diuji
migrations.spec.tsPembuatan tabel, constraint, CASCADE
db.spec.tsCRUD users & sessions
session.spec.tsParsing cookie & Bearer token
useAuth.spec.tsComposable fetchUser, login, logout
useUserService.spec.tsComposable service layer

File Konfigurasi Root ​

FileFungsi
nuxt.config.tsKonfigurasi Nuxt: modules, runtimeConfig, Nitro tasks, CSS
tailwind.config.tsKonfigurasi Tailwind CSS + plugin @tailwindcss/forms
vitest.config.tsKonfigurasi test runner: alias, environment, coverage
.biome.jsonKonfigurasi linter & formatter (Biome, pengganti ESLint+Prettier)
.env.exampleTemplate variabel lingkungan yang aman untuk di-commit
.npmignoreFile/folder yang dikecualikan saat publish ke npm
pnpm-lock.yamlLockfile pnpm — pastikan versi dependency konsisten

Dirilis di bawah MIT License.