preflight

6. Menjalankan lokal

DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/preflight

Prasyarat

Node22 atau lebih baru
PostgreSQL14+ — Laragon, Postgres.app, Docker, apa saja
API keyGratis dari Google AI Studio

Pasang

git clone https://github.com/znlumins/Preflight.git
cd Preflight
npm install
cp .env.example .env.local

Isi .env.local

# Ambil gratis, tanpa kartu kredit: https://aistudio.google.com/apikey
GOOGLE_GENERATIVE_AI_API_KEY=AIza...

# Opsional. Didukung, tapi throughput gratisnya rendah untuk beban ini.
GROQ_API_KEY=

DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/preflight

# Kunci enkripsi untuk API key milik user. Wajib.
ENCRYPTION_KEY=

# Dipakai untuk sitemap, canonical link, tautan berbagi, dan URL MCP.
NEXT_PUBLIC_SITE_URL=http://localhost:3000

Buat ENCRYPTION_KEY:

node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

Siapkan database

createdb preflight
npm run db:push

Kalau pakai Laragon: jalankan PostgreSQL dari panelnya, lalu

"C:/laragon/bin/postgresql/postgresql-14.5-1/bin/psql.exe" -h 127.0.0.1 -U postgres -c "CREATE DATABASE preflight;"

Password default Laragon untuk postgres adalah postgres.

Jalankan

npm run dev

http://localhost:3000


Perintah

Sehari-hari

npm run dev          # jalankan aplikasi
npm run build        # build produksi
npm run start        # jalankan hasil build
npm run typecheck    # tsc --noEmit
npm run lint

Database

npm run db:push      # terapkan perubahan skema
npm run db:studio    # Drizzle Studio, lihat isinya

db:push akan bertanya kalau ada perubahan yang berisiko, dan gagal di shell tanpa TTY. Kalau itu terjadi, terapkan DDL-nya langsung lewat psql.

Lokal atau produksi

Semua perintah di atas memakai database lokal. Untuk menyentuh database produksi, taruh connection string-nya di .env.local sebagai DATABASE_URL_PROD, lalu pakai varian :prod:

npm run dev:prod         # aplikasi lokal, data produksi
npm run db:push:prod     # terapkan skema ke produksi
npm run db:studio:prod   # lihat isi database produksi

Saklarnya variabel DB_TARGET (local atau prod), dan defaultnya local. Jadi produksi hanya tersentuh kalau kamu memintanya, dan terminal akan memasang peringatan merah selama itu. Nilai selain local/prod membuat aplikasi berhenti, bukan diam-diam memilih salah satunya.

db:push:prod otomatis memakai port session Supabase (5432) walau DATABASE_URL_PROD menunjuk port transaction (6543), karena drizzle-kit butuh prepared statement.

Mengukur biaya pipeline

npm run spike                        # jalankan pipeline penuh, laporkan biayanya
npm run spike -- --no-interview      # jawaban tetap, untuk A/B prompt
npm run spike -- --single-tier       # konfigurasi kuota bersama
npm run spike -- --provider groq

Hasilnya ditulis ke out/: satu file Markdown berisi rencananya, satu JSON berisi metrik per panggilan.

Keluarannya juga memuat pemeriksaan struktur — jumlah task per subfitur, panjang prompt, konsistensi bahasa. Selalu jalankan ini setelah mengubah prompt apa pun.

Memeriksa batas provider

npx tsx scripts/list-models.ts    # model yang benar-benar bisa dipanggil key kamu
npx tsx scripts/probe-limits.ts   # rate limit asli dari header respons

Batas provider bergerak tanpa pengumuman. Jangan percaya angka di dokumen ini — ukur ulang.

Pengujian

Semua suite dijalankan terhadap server yang sedang hidup, lewat HTTP asli dengan cookie asli. Jalankan npm run dev di terminal lain dulu.

npx tsx scripts/e2e.ts          # alur utama: ide → PRD → fitur → spec → task
npx tsx scripts/e2e-byok.ts     # API key milik user
npx tsx scripts/e2e-revise.ts   # revisi, undo, rate limit
npx tsx scripts/e2e-public.ts   # berbagi publik dan SEO
npx tsx scripts/e2e-mcp.ts      # MCP, pakai klien SDK sungguhan

Suite ini memakai kuota AI sungguhan — tiap run membuat rencana baru.

Screenshot untuk review desain

npx tsx scripts/shots.ts

Menulis ke shots/. Butuh npx playwright install chromium sekali di awal.


Struktur folder

app/
  api/plan/…            pipeline per tahap
  api/key               API key milik user
  api/agent-token       token MCP
  api/mcp/[transport]   server MCP
  plans/[id]            tampilan pemilik
  p/[slug]              tampilan publik
  rencana               indeks publik
  pengaturan

components/
  IdeaFlow              ide + kuesioner
  PlanDocument          dokumen interaktif
  PlanParts             bagian yang hanya merender — dipakai dua tampilan
  PromptBlock           blok gelap yang bisa disalin
  ReviseChat            revisi + undo
  SharePlan             terbitkan / turunkan
  KeySettings           BYOK
  AgentSetup            token MCP

lib/
  ai/                   pipeline: schemas, prompts, provider, validate, meter
  db/                   skema Drizzle + klien
  plans.ts              persistensi
  revise.ts             menerapkan diff + undo
  publish.ts            berbagi publik
  keys.ts, crypto.ts    BYOK
  limits.ts             rate limit kuota bersama
  agent-token.ts        token MCP
  agent-tools.ts        tiga tool MCP

scripts/                spike, e2e, utilitas
docs/                   manual ini

Berikutnya