Manajemen Konten
Sebuah headless CMS dengan collections, entries, locales, dan releases. Kelola konten dari panel Content atau melalui SDK.
Proyecta memiliki headless CMS yang lengkap. Sistemnya berbasis skema: kamu mendefinisikan collections (tipe konten terstruktur), lalu membuat entries yang sesuai dengan field masing-masing collection. Entries dapat dilokalisasi dan dikelompokkan ke dalam releases.
Panel Content
Section titled “Panel Content”Konten dapat dikelola melalui SDK atau dengan meminta bantuan AI. Content API memiliki enam tipe resource:
| Tab / Resource | Kegunaannya |
|---|---|
| Collections | Mendefinisikan dan mengelola skema konten (misalnya, “Blog Post”, “FAQ”, “Product Spec”) |
| Fields | Slot bertipe dalam sebuah collection (dikelola sebagai sub-resource dari Collections) |
| Entries | Menelusuri, membuat, mengedit, mempublish, dan menghapus entries dalam sebuah collection |
| Locales | Menambahkan dan mengelola locale bahasa/wilayah untuk konten yang diterjemahkan |
| Releases | Mengelompokkan entries untuk ditayangkan (atau dihapus publikasinya) secara bersamaan; publish secara manual melalui releases.publish() |
| Assets | Mengunggah dan mengelola file media (gambar, video, PDF) yang dapat direferensikan dari entries |
Klik sebuah collection di tab Collections untuk langsung menuju entries-nya. Tab Entries memungkinkan kamu membuat, mengedit, mempublish, dan menghapus item konten secara individual.
Kamu juga dapat mengelola semuanya secara programatik melalui SDK (proyecta.content).
Konsep
Section titled “Konsep”| Konsep | Penjelasan |
|---|---|
| Collection | Sebuah skema — bentuk dari satu tipe konten (misalnya “Blog Post”, “FAQ”, “Product Spec”) |
| Field | Slot bertipe dalam sebuah collection (misalnya title: string, body: rich_text, coverImage: asset) |
| Entry | Satu instance dari sebuah collection (satu blog post, satu item FAQ) |
| Asset | File media yang diunggah dan dapat direferensikan dari entries |
| Locale | Bahasa/wilayah tempat konten diterjemahkan |
| Release | Sekelompok entries yang dijadwalkan untuk ditayangkan (atau dihapus publikasinya) pada waktu yang sama |
Quickstart
Section titled “Quickstart”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });Collections
Section titled “Collections”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);Entries
Section titled “Entries”Entries adalah baris konten yang sebenarnya. Setiap entry dimiliki oleh sebuah collection dan membawa data yang sesuai dengan field collection tersebut.
// Browse entries (pass the collection's api_id, not its numeric id)for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) { console.log(entry);}
// Update an entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);Assets
Section titled “Assets”Upload asset adalah fitur utama — gunakan untuk melampirkan gambar, video, atau PDF ke entries kamu:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteUntuk upload file melalui chat (drag-into-builder), lihat Files & Media.
Lokalisasi
Section titled “Lokalisasi”Konten dapat diterjemahkan ke dalam beberapa locale. Setiap locale adalah sebuah record yang dikelola melalui proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}Saat mengambil entries, kamu dapat meminta terjemahan untuk locale tertentu. Lihat Internationalization untuk gambaran i18n yang lebih luas.
Releases
Section titled “Releases”Sebuah release adalah kumpulan entries yang ditayangkan (atau dihapus publikasinya) pada waktu yang sama. Ini memungkinkan kamu untuk menyiapkan peluncuran konten yang terkoordinasi — seperti kampanye marketing, halaman produk baru, atau pembaruan FAQ — dan semuanya berjalan secara atomik.
Catatan: Penerbitan otomatis terjadwal belum tersedia. Releases dengan tanggal
scheduled_atakan masuk ke statusscheduled, namun harus dipublish secara manual melaluireleases.publish(). Fitur auto-publishing pada waktu yang ditentukan akan segera hadir.
// Create a release (optionally with a target date)const release = await proyecta.content.releases.create({ name: 'Monday launch', scheduled_at: '2024-01-08T09:00:00Z',});
// Manually publish a release when readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor await (const r of proyecta.content.releases.list()) { console.log(r);}Untuk mengubah jadwal sebuah release, hapus dan buat ulang — tidak ada endpoint update.
Pola umum (biarkan AI yang mengaturnya)
Section titled “Pola umum (biarkan AI yang mengaturnya)”"Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug].""Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page.""Set up a multi-language landing page using Proyecta Content with English and Spanish locales.""Create a release containing three blog posts and publish it manually when ready."
Kapan menggunakan Content vs Database
Section titled “Kapan menggunakan Content vs Database”| Kasus penggunaan | Gunakan ini |
|---|---|
| Konten editorial (postingan, FAQ, teks marketing) — membutuhkan status publish/draft, penjadwalan, lokalisasi | Content API |
| Data aplikasi (pengguna, pesanan, item) — membutuhkan kecepatan query, transaksi, real-time | Database |
| Aset statis dalam kode | Direktori public/ dalam proyekmu |
| File yang diunggah pengguna | Files & Media |
Segera hadir
Section titled “Segera hadir”- Editor rich-text untuk entries — pengeditan WYSIWYG penuh untuk field
rich_textdi panel Content - Live preview perubahan konten terhadap aplikasimu
- Content roles — pemisahan izin editor dari izin developer