콘텐츠 관리
컬렉션, 항목, 로케일, 릴리스를 갖춘 헤드리스 CMS. Content 패널 또는 SDK로 콘텐츠를 관리하세요.
Proyecta는 완전한 헤드리스 CMS를 제공합니다. 스키마 우선 방식으로 동작합니다. 먼저 컬렉션(구조화된 콘텐츠 유형)을 정의하고, 각 컬렉션의 필드에 맞는 항목을 생성합니다. 항목은 로컬라이즈하거나 릴리스로 묶을 수 있습니다.
Content 패널
섹션 제목: “Content 패널”콘텐츠는 SDK를 통하거나 AI에게 요청하는 방식으로 관리할 수 있습니다. Content API에는 여섯 가지 리소스 유형이 있습니다.
| 탭 / 리소스 | 용도 |
|---|---|
| Collections | 콘텐츠 스키마 정의 및 관리 (예: “Blog Post”, “FAQ”, “Product Spec”) |
| Fields | 컬렉션 내 타입이 지정된 슬롯 (Collections의 하위 리소스로 관리) |
| Entries | 컬렉션 내 항목 탐색, 생성, 편집, 게시, 삭제 |
| Locales | 번역 콘텐츠를 위한 언어/지역 로케일 추가 및 관리 |
| Releases | 항목을 묶어 동시에 게시하거나 게시 취소; releases.publish()로 수동 게시 |
| Assets | 항목에서 참조 가능한 미디어 파일(이미지, 동영상, PDF) 업로드 및 관리 |
Collections 탭에서 컬렉션을 클릭하면 해당 항목으로 바로 이동합니다. Entries 탭에서는 개별 콘텐츠 항목을 생성, 편집, 게시, 삭제할 수 있습니다.
SDK(proyecta.content)를 통해 모든 것을 프로그래밍 방식으로 관리할 수도 있습니다.
| 개념 | 설명 |
|---|---|
| Collection | 스키마 — 한 가지 콘텐츠 유형의 구조 (예: “Blog Post”, “FAQ”, “Product Spec”) |
| Field | 컬렉션 내 타입이 지정된 슬롯 (예: title: string, body: rich_text, coverImage: asset) |
| Entry | 컬렉션의 단일 인스턴스 (블로그 포스트 하나, FAQ 항목 하나) |
| Asset | 항목에서 참조 가능한 업로드된 미디어 파일 |
| Locale | 콘텐츠가 번역되는 언어/지역 |
| Release | 동시에 게시되거나 게시 취소될 항목의 묶음 |
빠른 시작
섹션 제목: “빠른 시작”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 });컬렉션
섹션 제목: “컬렉션”// 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);항목은 실제 콘텐츠 행입니다. 각 항목은 하나의 컬렉션에 속하며, 해당 컬렉션의 필드에 맞는 데이터를 담습니다.
// 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);에셋 업로드는 일급 기능입니다. 이미지, 동영상, PDF를 항목에 첨부하는 데 활용하세요.
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.delete채팅 기반 파일 업로드(Builder로 드래그)는 파일 & 미디어를 참고하세요.
로컬라이제이션
섹션 제목: “로컬라이제이션”콘텐츠는 여러 로케일로 번역할 수 있습니다. 각 로케일은 proyecta.content.locales를 통해 관리되는 레코드입니다.
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}항목을 가져올 때 특정 로케일의 번역을 요청할 수 있습니다. 더 넓은 i18n 관련 내용은 국제화를 참고하세요.
릴리스
섹션 제목: “릴리스”릴리스는 동시에 게시되거나 게시 취소될 항목의 묶음입니다. 마케팅 런칭, 신제품 페이지, FAQ 갱신 등 협업이 필요한 콘텐츠 배포를 스테이징하고, 모든 변경 사항을 원자적으로 전환할 수 있습니다.
참고: 시간 예약 자동 게시 기능은 아직 구현되지 않았습니다.
scheduled_at날짜가 설정된 릴리스는scheduled상태로 진입하지만,releases.publish()를 통해 수동으로 게시해야 합니다. 지정된 시간에 자동으로 게시되는 기능은 곧 제공될 예정입니다.
// 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);}릴리스 일정을 변경하려면 삭제 후 새로 생성하세요. update endpoint는 제공되지 않습니다.
자주 쓰는 패턴 (AI에게 맡겨보세요)
섹션 제목: “자주 쓰는 패턴 (AI에게 맡겨보세요)”"Proyecta Content API를 사용해 블로그를 만들어줘. 'Blog Post' 컬렉션에 title, slug, excerpt, body (rich text), coverImage (asset), author 필드를 추가하고, /blog와 /blog/[slug] 경로에 공개 페이지를 만들어줘.""Proyecta Content에 FAQ 컬렉션을 만들어줘. FAQ를 추가/편집할 수 있는 관리자 페이지와 공개 /faq 페이지를 만들어줘.""영어와 스페인어 로케일을 사용해 Proyecta Content로 다국어 랜딩 페이지를 구성해줘.""블로그 포스트 세 개를 담은 릴리스를 만들고, 준비되면 수동으로 게시할 수 있게 해줘."
Content와 Database 중 무엇을 쓸까
섹션 제목: “Content와 Database 중 무엇을 쓸까”| 사용 사례 | 사용할 것 |
|---|---|
| 에디토리얼 콘텐츠 (포스트, FAQ, 마케팅 카피) — 게시/초안 상태, 예약, 로컬라이제이션 필요 | Content API |
| 앱 데이터 (사용자, 주문, 항목) — 쿼리 속도, 트랜잭션, 실시간 처리 필요 | Database |
| 코드 내 정적 에셋 | 프로젝트의 public/ 디렉터리 |
| 사용자가 업로드한 파일 | 파일 & 미디어 |
출시 예정
섹션 제목: “출시 예정”- 리치 텍스트 항목 편집기 — Content 패널에서
rich_text필드를 위한 완전한 WYSIWYG 편집 기능 - 콘텐츠 변경 사항 라이브 미리보기 — 앱과 연동하여 실시간으로 확인
- 콘텐츠 역할 — 개발자 권한과 편집자 권한 분리