04Rekayasa Produk AI

Neraya AI — Ruang Kerja Proyek Berbasis AI

Ruang kerja AI serbaguna yang mengubah percakapan menjadi artefak proyek yang terstruktur dan berversi, dengan seluruh panggilan model lewat gateway di sisi server.

Peran
Pengembang & Arsitek Tunggal
Teknologi
Next.js 15 · React 19 · TypeScript · Tailwind CSS 4 · PostgreSQL · Drizzle ORM · zod · Vitest
Hasil Terukur
Sedang Dikembangkan — Belum Dirilis Publik · Gateway AI di Sisi Server; Kunci Provider Tidak Pernah Sampai ke Browser · Autentikasi Sesi Sendiri (Argon2id, Tanpa JWT)

Konteks & Ringkasan

Neraya AI adalah ruang kerja AI privat berbasis akun yang saya bangun sendiri. Premisnya sederhana: sesi obrolan adalah wadah yang buruk untuk pekerjaan. Anda bertanya sesuatu yang berguna, jawabannya tergulir jauh ke atas, dan seminggu kemudian Anda menjelaskan ulang konteks yang sama dari awal. Neraya memperlakukan percakapan sebagai masukan untuk sesuatu yang bertahan — sebuah proyek yang memiliki pesan, referensi, berkas, dan artefaknya sendiri, lalu menyimpannya lintas sesi.

Proyek ini sedang aktif dikembangkan. Kerangka aplikasi, skema basis data, autentikasi, dan registri model sudah berjalan, tetapi belum dirilis ke publik, jadi tidak ada yang di halaman ini yang saya klaim sebagai produk yang sudah tayang.

Peran & Tanggung Jawab

Saya satu-satunya pengembang di proyek ini, jadi setiap lapisan ada di tangan saya:

  • Menentukan definisi produk, model data, dan kontrak API sebelum menulis fitur.
  • Membangun kerangka aplikasi Next.js: routing, tata letak, tema, dan lapisan i18n.
  • Merancang skema PostgreSQL beserta migrasi Drizzle, termasuk perilaku penghapusan datanya.
  • Mengimplementasikan autentikasi: hashing kredensial, penerbitan sesi, pencabutan, dan proteksi rute.
  • Menulis adapter model di sisi server yang berbicara ke router dan meneruskan keluaran provider sebagai aliran data.
  • Memelihara rangkaian tes dan kumpulan dokumen yang menjelaskan sistemnya.

Permasalahan & Tantangan Operasional

  • Konteks menguap. Transkrip obrolan bersifat linear dan sementara. Ia tidak punya gagasan tentang "hal yang sedang kita kerjakan", sehingga konteks harus disusun ulang secara manual tiap sesi.
  • Hasil kerja hilang di gulirannya. Keluaran berguna datang sebagai pesan dan berhenti di situ. Tidak ada versi, tidak ada pembandingan, dan tidak ada cara mengekspor versi yang terbaik.
  • Kunci provider itu beban risiko. Desain yang paling mudah — membiarkan browser memanggil provider model langsung — menaruh API key dalam jangkauan siapa pun yang membuka devtools. Itu bukan hal yang mau saya rilis.
  • Model berganti lebih cepat dari frontend. Menulis ID dan endpoint model secara hard-code berarti harus mengubah kode setiap kali ada provider merilis sesuatu yang baru.

Pendekatan Arsitektur & Keputusan Rekayasa

  1. Satu monolit modular TypeScript. Next.js 15 App Router di runtime Node, dengan lapisan yang jelas alih-alih memecahnya jadi banyak layanan terlalu dini. Tipe mengalir dari skema basis data ke luar.
  2. Otoritas di sisi server untuk trafik model. Browser hanya berbicara ke API Neraya. Server memegang konfigurasi router, memetakan ID model publik ke target router, lalu meneruskan responsnya kembali sebagai SSE. Tidak ada kredensial provider maupun endpoint upstream yang dikirim ke klien.
  3. Model sebagai data, bukan kode. Registri model disimpan di konfigurasi dan basis data, sehingga menambah model baru adalah pekerjaan operasional, bukan rilis frontend. Registri yang kosong menampilkan status "tidak tersedia" secara jujur, bukan mengarang entri.
  4. PostgreSQL dengan migrasi Drizzle. Migrasi SQL yang ditinjau dan masuk kontrol versi, dengan skema yang menempatkan percakapan, artefak, dan pengaturan sebagai milik tiap proyek, beserta perilaku penghapusan yang eksplisit untuk setiap relasinya.
  5. Sesi sendiri, tanpa JWT. Kredensial di-hash dengan Argon2id. Sesi berupa baris di server yang dirujuk cookie HTTP-only, sehingga pencabutan cukup dengan menghapus barisnya, bukan menunggu token kedaluwarsa.
  6. Validasi di setiap batas. Body permintaan, parameter query, konfigurasi environment, dan respons router semuanya diparse dengan zod. Kesalahan konfigurasi gagal saat start dengan pesan yang jelas, bukan saat runtime dengan misteri.
  7. Dokumentasi sebagai bagian dari proses build. Sistemnya dijelaskan oleh sekumpulan dokumen spesifikasi yang ikut masuk repositori dan diperiksa oleh skrip, sehingga deskripsinya tidak bisa diam-diam menyimpang dari kodenya.

Hasil Operasional & Keterbatasan

  • Status jujur: masih dikembangkan, belum dirilis. Tidak ada metrik produksi untuk dilaporkan, dan saya tidak akan mengarangnya.
  • Yang sudah ada hari ini: kerangka aplikasi berjalan, konfigurasi divalidasi saat start, skema dan migrasi sudah tersedia, autentikasi serta registri model sudah diimplementasikan, dan lint, typecheck, tes, serta build berjalan di CI.
  • Yang belum ada: pengalaman obrolan secara utuh, pencarian dan penataan percakapan, penyuntingan pesan dan versi jawaban, serta lampiran berkas. Semuanya tercatat di roadmap repositori, bukan disiratkan oleh halaman ini.
  • Keterbatasan Terbuka: repositori masih privat dan belum ada URL publik, jadi tidak ada apa pun di sini yang bisa diklik. Sistem ini juga bergantung pada router yang terkonfigurasi dan basis data — dengan registri kosong ia menolak menghasilkan jawaban, bukan menurunkan mutunya jadi respons palsu. Penjelasan langsung bisa diminta.

Teknologi yang Digunakan

  • Kerangka Kerja: Next.js 15 (App Router, runtime Node), React 19, TypeScript
  • Tampilan: Tailwind CSS 4 dengan lapisan token semantik
  • Data: PostgreSQL, Drizzle ORM dan migrasi SQL berversi
  • Autentikasi: lapisan sesi sendiri, hashing Argon2id, cookie HTTP-only, siap OAuth
  • Integrasi AI: adapter sisi server ke router kompatibel OpenAI yang di-host sendiri, streaming SSE
  • Validasi & Mutu: zod di setiap batas, Vitest, ESLint, Prettier, CI