Lewati ke konten

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.

Konten dapat dikelola melalui SDK atau dengan meminta bantuan AI. Content API memiliki enam tipe resource:

Tab / ResourceKegunaannya
CollectionsMendefinisikan dan mengelola skema konten (misalnya, “Blog Post”, “FAQ”, “Product Spec”)
FieldsSlot bertipe dalam sebuah collection (dikelola sebagai sub-resource dari Collections)
EntriesMenelusuri, membuat, mengedit, mempublish, dan menghapus entries dalam sebuah collection
LocalesMenambahkan dan mengelola locale bahasa/wilayah untuk konten yang diterjemahkan
ReleasesMengelompokkan entries untuk ditayangkan (atau dihapus publikasinya) secara bersamaan; publish secara manual melalui releases.publish()
AssetsMengunggah 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).

KonsepPenjelasan
CollectionSebuah skema — bentuk dari satu tipe konten (misalnya “Blog Post”, “FAQ”, “Product Spec”)
FieldSlot bertipe dalam sebuah collection (misalnya title: string, body: rich_text, coverImage: asset)
EntrySatu instance dari sebuah collection (satu blog post, satu item FAQ)
AssetFile media yang diunggah dan dapat direferensikan dari entries
LocaleBahasa/wilayah tempat konten diterjemahkan
ReleaseSekelompok entries yang dijadwalkan untuk ditayangkan (atau dihapus publikasinya) pada waktu yang sama
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collection
const blog = await proyecta.content.collections.create({
api_id: 'blogPost',
name: 'Blog Post',
// fields are added via collections.fields.create()
});
// 2. Create an entry
const post = await proyecta.content.entries.create({
collection_id: blog.id,
data: {
title: 'Hello, world',
body: 'My very first post.',
},
});
// 3. Publish it
await proyecta.content.entries.publish({ entryId: post.id });
// Browse collections
for await (const collection of proyecta.content.collections.list()) {
console.log(collection.name);
}
// Add or remove fields on a collection
await proyecta.content.collections.fields.create(blog.id, {
/* field definition */
});
await proyecta.content.collections.fields.delete(blog.id, fieldId);

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 entry
await proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entry
await proyecta.content.entries.publish({ entryId: post.id });
// Delete an entry
await proyecta.content.entries.delete(post.id);

Upload asset adalah fitur utama — gunakan untuk melampirkan gambar, video, atau PDF ke entries kamu:

// Browse assets
for await (const asset of proyecta.content.assets.list()) {
console.log(asset);
}
// Upload, update, or delete via assets.create / assets.update / assets.delete

Untuk upload file melalui chat (drag-into-builder), lihat Files & Media.

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.

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_at akan masuk ke status scheduled, namun harus dipublish secara manual melalui releases.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 ready
await proyecta.content.releases.publish({ releaseId: release.id });
// Browse releases
for await (const r of proyecta.content.releases.list()) {
console.log(r);
}

Untuk mengubah jadwal sebuah release, hapus dan buat ulang — tidak ada endpoint update.

  • "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."
Kasus penggunaanGunakan ini
Konten editorial (postingan, FAQ, teks marketing) — membutuhkan status publish/draft, penjadwalan, lokalisasiContent API
Data aplikasi (pengguna, pesanan, item) — membutuhkan kecepatan query, transaksi, real-timeDatabase
Aset statis dalam kodeDirektori public/ dalam proyekmu
File yang diunggah penggunaFiles & Media
  • Editor rich-text untuk entries — pengeditan WYSIWYG penuh untuk field rich_text di panel Content
  • Live preview perubahan konten terhadap aplikasimu
  • Content roles — pemisahan izin editor dari izin developer