One Entity, Many Content Types
Rather than maintain separate models for blog posts, services, case studies, and projects, ParsaLink uses a single Content Entity model with a flexible schema. You define your Content Types (Project, Blog Post, Case Study, Service, etc.), and every entity follows the schema of its type. The legacyBlog and Company apps (Project, CaseStudy, Service) are being migrated into this system — you’ll see them coexist for now, but new content should be created as Content Entities.
Anatomy of a Content Entity
Each entity carries:- Content Type — what kind of thing it is (Project, Blog Post, etc.)
- Data — structured JSON matching the type’s schema (title, author, hero image, summary, dates, etc.)
- Blocks — Tiptap-formatted rich content for the body (paragraphs, headings, images, callouts, embeds)
- Tags — hierarchical taxonomy via the core Tag system
- Status — Draft, Published, or Archived
- Parent — optional hierarchical link (e.g. a case study can have a parent project)
data field is type-aware: if your Project type has a tech_stack array field, every Project entity gets it; if your Blog Post type has an author text field, posts get that instead.
Creating Content
Pick the Content Type
Go to Marketing → New Content and pick which type you’re publishing (Project, Blog Post, etc.).
Fill in the type-specific fields
The form is generated from your Content Type’s schema — you only fill in what’s relevant.
Write the body
Use the block editor for paragraphs, headings, images, callouts, code blocks, embeds. Saved as Tiptap JSON so it renders consistently in any frontend.
Tag and link
Apply tags so it’s filterable. Optionally pick a parent entity (e.g. attach a Case Study to the Project it describes).
Defining Content Types
Admins can add new Content Types from Settings → Marketing → Content Types. A type definition includes:- The schema fields (with names, labels, types: text, number, boolean, date, list, image, etc.)
- Display order
- Whether each field is required
Pulling Content into Your Website (GraphQL)
The Marketing CMS exposes a GraphQL endpoint at/api/graphql/. One query replaces what used to be three separate REST calls:
Most websites need only the published GraphQL endpoint. Authenticated mutations (create/update/delete) still go through the REST API or the in-app editor.
Migration from Legacy Models
If you’re coming from the older Blog (Post / Category / Tag) or Company (Project / Case Study / Service) models:- New content is best created as ContentEntity.
- Existing rows in the old models stay queryable.
- ParsaLink will continue migrating them over time. No action required from your side.
