Manajemen Konten
CMS Proyecta adalah lapisan data utama aplikasimu — bukan sekadar posting blog dan konten pemasaran, melainkan rekaman nyata yang menjadi fondasi aplikasimu. Koleksi disiapkan dan diisi dengan konten sampel nyata sebelum UI ada, sehingga aplikasimu langsung terhubung ke data yang dapat diedit sejak build pertama.
Sebagian besar aplikasi Proyecta menyimpan datanya di CMS bawaan. Saat kamu mendeskripsikan aplikasimu, Proyecta merancang model data, membuat koleksi yang dibutuhkan, dan mengisinya dengan konten sampel yang realistis — semuanya sebelum satu halaman pun dibangun. Halaman-halamanmu kemudian membaca konten nyata yang dapat diedit oleh pemilik melalui typed hooks yang disiapkan AI untukmu. Untuk gambaran besar tentang bagaimana ini semua berhubungan, lihat Cara kerja data aplikasimu.
Kamu tidak perlu memikirkan semua ini untuk memulai — semuanya terjadi secara otomatis. Halaman ini menjelaskan apa yang ada di baliknya agar kamu bisa membentuknya sesuai kebutuhan.
Koleksi dan singleton
Section titled “Koleksi dan singleton”Konten diorganisasikan ke dalam koleksi dan singleton:
| Tipe | Apa itu | Contoh |
|---|---|---|
| Collection | Tipe konten dengan banyak entri — satu skema, banyak baris. | posts, services, testimonials, catalogItems |
| Singleton | Tipe konten dengan tepat satu entri — konten global yang bersifat tunggal. | businessInfo, seoSettings |
Koleksi adalah sebuah bentuk; setiap entri adalah satu item dari bentuk tersebut (satu posting blog, satu layanan, satu FAQ). Singleton menyimpan satu rekaman yang dapat diedit — identitas bisnismu, atau teks hero/seksi untuk sebuah halaman.
Jenis konten apa saja
Section titled “Jenis konten apa saja”Proyecta hadir dengan desain koleksi siap pakai — field yang logis, petunjuk admin, dan konten awal — untuk jenis rekaman yang umumnya dibutuhkan bisnis nyata: posting blog dan artikel, layanan, katalog produk, menu makanan, testimoni dan ulasan, anggota tim, galeri foto, FAQ, acara, lokasi, sumber daya yang dapat diunduh, lowongan kerja, kursus, tur, dan daftar akomodasi, di antara lainnya.
Kamu tidak perlu memilih dari menu mana pun. Saat kamu mendeskripsikan aplikasimu, Proyecta memilih yang sesuai dengan kebutuhanmu — tipe bisnismu, fitur yang kamu minta, bahasamu — dan membuatnya, sudah terisi dengan konten sampel yang realistis. Jika aplikasimu membutuhkan sesuatu yang tidak tercakup oleh semua itu, Proyecta merancang koleksi kustom dengan field-nya sendiri.
Karena itu, panel admin aplikasimu menampilkan koleksi aplikasimu — bukan daftar yang sudah ditetapkan. Panel tersebut membangun dirinya sendiri dari model konten live aplikasimu, sehingga apa pun yang dibuat Proyecta untukmu, bawaan maupun kustom, adalah persis yang kamu lihat dan edit. Dua aplikasi Proyecta jarang memiliki kumpulan koleksi yang sama, dan memang begitu rancangannya.
Setiap koleksi terdiri dari field bertipe. Tipe field diberlakukan secara menyeluruh — panel admin merender editor yang tepat, dan halamanmu mendapatkan nilai dengan tipe yang benar.
| Tipe field | Gunakan untuk |
|---|---|
string |
Nilai satu baris pendek — judul, nama, alamat. |
text |
Satu paragraf teks biasa. |
markdown |
Teks kaya panjang — isi artikel, teks “tentang kami”. |
slug |
Pengenal URL, diturunkan otomatis dari field lain (misalnya judul). |
number |
Hitungan, penilaian, durasi. |
money |
Harga atau jumlah mata uang — ditampilkan dan diedit sebagai uang. |
boolean |
Tanda aktif/nonaktif. |
date |
Tanggal kalender. |
datetime |
Timestamp — tanggal publikasi, waktu mulai acara. |
weeklyHours |
Jam buka untuk setiap hari dalam seminggu. |
asset |
Gambar, video, atau PDF (disimpan sebagai URL publik). |
reference |
Tautan ke entri di koleksi lain. |
enum |
Nilai dari daftar pilihan yang sudah ditetapkan. |
array |
Daftar string — tag, nomor telepon, zona. |
blocks |
Blok konten yang dapat ditumpuk — halaman yang dibangun dari seksi bertipe. |
json |
Data terstruktur yang tidak cocok dengan tipe mana pun di atas. |
Entri, draf, dan penerbitan
Section titled “Entri, draf, dan penerbitan”Entri adalah satu item dalam koleksi. Setiap entri memiliki status:
- Draft — pekerjaan yang sedang berjalan; tidak pernah ditampilkan di situs live-mu.
- Published — live dan terlihat oleh pengunjung.
- Archived — sudah dinonaktifkan, disimpan agar tidak mengganggu.
Halaman publikmu hanya melihat entri yang published — draf dan item yang diarsipkan disembunyikan secara otomatis, sehingga kamu dapat menyiapkan konten dengan aman sebelum ditayangkan.
Mengelola konten (tanpa kode)
Section titled “Mengelola konten (tanpa kode)”Ada dua cara untuk menambah dan mengedit konten — keduanya tidak memerlukan sentuhan kode:
- Minta AI melalui chat. Cukup deskripsikan perubahan yang diinginkan dan AI akan mengedit konten yang tepat untukmu:
"Add a testimonial from María González: 'Best service in town', 5 stars.""Change the tagline in Business Info to 'Café de especialidad en la Roma'.""Mark the last five contact-form submissions as read."
- Panel admin aplikasimu. Setiap aplikasi yang dipublikasikan mendapatkan panel admin bawaan yang dilindungi login, tempat kamu (dan staf yang kamu beri akses) mengelola konten dan pengiriman formulir secara langsung — editor bergaya spreadsheet per koleksi, ditambah kotak masuk pengiriman. Panel ini mengonfigurasi dirinya sendiri dari model konten live aplikasimu, sehingga koleksi baru muncul di sana secara otomatis. Lihat Admin Panel.
Kelola konten CMS-mu melalui panel admin aplikasi atau AI — editor konten dalam builder sedang dalam roadmap (lihat Segera hadir). Browser rekaman realtime untuk aplikasi yang diperbarui secara live segera hadir.
Cara aplikasimu membaca konten
Section titled “Cara aplikasimu membaca konten”Halamanmu membaca konten melalui sekumpulan typed hooks di @/hooks/useContent — dan AI yang menulis pengkabelan itu untukmu. Kamu mendeskripsikan halaman; Proyecta menghasilkan komponen yang memanggil hooks ini terhadap koleksi nyatamu. Kamu jarang menyentuhnya sendiri, tetapi inilah yang mereka lakukan:
| Hook | Fungsinya |
|---|---|
useCollection('posts') |
Mencantumkan entri yang dipublikasikan dari sebuah koleksi (dengan filter/sort/limit opsional). |
useEntry('posts', slug) |
Mengambil satu entri yang dipublikasikan berdasarkan slug (halaman detail). |
useSingleton('businessInfo') |
Membaca singleton (info bisnis, konten halaman). |
useFormSubmit('contactForm') |
Mengirimkan formulir dan melaporkan kesalahan validasi. |
// A blog index — exactly the kind of code the AI generates for youimport { useCollection } from '@/hooks/useContent';
function BlogList() { const { data: posts, isLoading } = useCollection('posts', { sort: 'published_at:desc' }); if (isLoading) return <Spinner />; return posts?.map((post) => <PostCard key={post._id} post={post} />);}Saat Proyecta menghasilkan typed interface untuk koleksimu, hooks menjadi sepenuhnya bertipe (useCollection<Post>('posts')), sehingga editormu mengisi otomatis setiap field. Pembacaan di-hydrate pada paint pertama dari snapshot yang sudah dipanggang — halaman dirender secara instan dan ramah SEO, lalu diperbarui secara live di latar belakang.
Formulir
Section titled “Formulir”Formulir adalah kemampuan kelas satu, bukan sesuatu yang dibangun AI secara manual. Tambahkan blok formulir dan ia akan merender field, memvalidasi input, mengirimkan, dan menampilkan status berhasil:
<FormBlock form="contactForm" />Formulir juga hadir siap pakai — formulir kontak, permintaan penawaran, formulir pemesanan, formulir pesanan, formulir pendaftaran — dan Proyecta menghubungkan yang tepat ke halamanmu. Pengiriman masuk ke kotak masuk panel admin aplikasimu, dan pemilik mendapat email ketika ada pengiriman baru. Lihat Formulir untuk gambaran lengkapnya.
Lokalisasi
Section titled “Lokalisasi”Konten dapat diterjemahkan ke beberapa locale. Field yang ditandai sebagai terlokalisasi menyimpan nilai per bahasa, dan hooks pembacaan menyelesaikannya melalui rantai fallback (bahasa yang diminta → fallback yang dikonfigurasi → default) saat kamu mengoper locale aktif pengunjung:
const { data: posts } = useCollection('posts', { locale: 'es' });Aplikasi satu bahasa mengabaikan locale sepenuhnya — tidak ada yang perlu dikonfigurasi. Untuk gambaran terjemahan yang lebih luas, lihat Internasionalisasi.
Sebuah rilis menggabungkan beberapa entri agar ditayangkan (atau dicabut penerbitannya) secara bersamaan — siapkan perilisan konten yang terkoordinasi (sebuah peluncuran, halaman produk baru, pembaruan FAQ) dan aktifkan semuanya sekaligus.
Catatan: Penerbitan terjadwal otomatis belum diimplementasikan. Rilis dengan tanggal
scheduled_atmasuk ke statusscheduledtetapi harus diterbitkan secara manual. Penerbitan otomatis pada waktu yang dijadwalkan segera hadir.
Pola umum (biarkan AI yang menyiapkannya)
Section titled “Pola umum (biarkan AI yang menyiapkannya)”Kamu jarang menulis ini secara manual — deskripsikan yang kamu inginkan dan Proyecta membangunnya terhadap koleksi nyata:
"Build a blog. Each post has a title, cover image, rich-text body, category, and tags. Public routes at /blog and /blog/[slug], newest first.""Add an FAQ section the owner can edit, grouped by category.""Add a bookable services list with a request-a-quote form.""Make the site bilingual — English and Spanish — with a language switcher.""Seed the testimonials with five realistic reviews for a coffee shop."
Tempat data aplikasimu tinggal
Section titled “Tempat data aplikasimu tinggal”CMS adalah rumah default untuk konten dan rekaman yang tahan lama. Beberapa jenis data tinggal di sistem yang dirancang khusus:
| Jenis data | Tempat penyimpanannya |
|---|---|
| Konten & rekaman (posting, layanan, listing, FAQ, katalog, pemesanan) | Proyecta CMS (halaman ini) — default |
| Status realtime / perilaku (live chat, feed, presence, status game) | Realtime store — segera hadir |
| Akun pengguna & login | Auth |
| Produk, pesanan, langganan, pembayaran | Commerce |
| File yang diunggah & media | Files & Media |
| Aset statis yang dipanggang ke dalam build | direktori public/ di proyekmu |
CMS adalah yang default. Realtime store untuk perilaku yang benar-benar realtime segera hadir; bahkan saat itu tiba pun, konten yang tahan lama dan katalog commerce akan tetap tinggal di CMS.
Segera hadir
Section titled “Segera hadir”- Editor konten dalam builder — telusuri dan edit koleksi CMS-mu langsung dari dashboard builder (saat ini: kelola konten melalui panel admin atau AI).
- Editor WYSIWYG teks kaya — pengeditan visual untuk field
markdown(saat ini diedit sebagai markdown). - Penerbitan otomatis terjadwal — rilis yang ditayangkan secara otomatis pada waktu yang dijadwalkan.
- Preview live dari perubahan konten terhadap aplikasimu.
- Peran konten — izin editor yang terpisah dari izin developer.