Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ibexa DXP editions > Ibexa Headless #2242

Merged
merged 67 commits into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
575e112
main.py: Add external URL handling to cards()
adriendupuis Dec 6, 2023
db3b3d6
Start Ibexa products/Ibexa DXP editions
adriendupuis Dec 6, 2023
73a7a16
Start Ibexa products/Ibexa DXP editions
adriendupuis Dec 6, 2023
a7fe626
main.py: Fix href slashes in cards
adriendupuis Dec 6, 2023
57f290e
Merge branch 'enh-cards' into editions
adriendupuis Dec 6, 2023
1e910a9
mkdocs.yml: Reword ToC about editions
adriendupuis Dec 7, 2023
431b1a6
mkdocs.yml: Add connect_doc
adriendupuis Dec 7, 2023
519b80c
headless.md: Start "Ibexa DXP Headless edition product guide"
adriendupuis Dec 7, 2023
b263a90
headless.md: Update Availability
adriendupuis Dec 11, 2023
5c2c17e
main.py cards use og:
adriendupuis Dec 11, 2023
09a7c6f
Merge branch 'enh-cards' into editions
adriendupuis Dec 11, 2023
ac190bf
main.py: `cards` accepts only external URLs to *.ibexa.co
adriendupuis Dec 11, 2023
b7c2b62
Merge branch 'enh-cards' into editions
adriendupuis Dec 11, 2023
81a12b5
headless.md: Partially fix style w/ vale
adriendupuis Dec 11, 2023
c1f195e
headless.md: Ibexa.VariablesGlobal
adriendupuis Dec 11, 2023
763d122
headless.md: Partially fix style w/ vale
adriendupuis Dec 12, 2023
b88006a
headless.md: Continue "Use cases"
adriendupuis Dec 13, 2023
355ffb8
Headless product guide: Remove raw feature list
adriendupuis Dec 19, 2023
3754632
headless.md: "back office" → "Back Office"
adriendupuis Dec 19, 2023
c54749f
headless.md: Fix Ibexa.VariablesGlobal
adriendupuis Dec 19, 2023
813241f
headless.md: Fix Ibexa.DomainTermCapitalization
adriendupuis Dec 19, 2023
cb2a152
headless.md: Fix Microsoft.Terms
adriendupuis Dec 19, 2023
6df32d0
headless.md: Illustrate headless
adriendupuis Dec 19, 2023
d7c30f8
headless.md: Illustrate headless
adriendupuis Dec 19, 2023
204f143
headless.md: Illustrate headless
adriendupuis Dec 19, 2023
d5dee2e
headless.md: Illustrate headless
adriendupuis Dec 19, 2023
b83a836
Onion skin diagram version
dabrt Dec 19, 2023
59b5e33
Add png
dabrt Dec 19, 2023
46c506f
Headless Ibexa onion skin
adriendupuis Dec 19, 2023
c2183ba
Headless Ibexa onion skin
adriendupuis Dec 19, 2023
fc4be31
Headless Ibexa onion skin
adriendupuis Dec 19, 2023
c0f0aba
Headless Ibexa onion skin
adriendupuis Dec 19, 2023
32a5082
headless.md: Rewording
adriendupuis Dec 20, 2023
03dd362
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
8e4f04b
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
4cfecca
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
c64689d
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
e08e76a
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
c5c9d6d
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
93156cc
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
400ccdc
Headless Ibexa onion skin
adriendupuis Dec 20, 2023
90bb806
headless.md: Fix list indent
adriendupuis Dec 20, 2023
51f4f3b
Headless Ibexa onion skin: remove inspiring counter-proposal
adriendupuis Dec 20, 2023
d0df4c2
Apply suggestions from code review
adriendupuis Dec 21, 2023
981b31f
Apply suggestions from code review
adriendupuis Dec 21, 2023
8030b4e
headless.md: Reorder "Technical backstage" section
adriendupuis Dec 21, 2023
baeed8e
Apply suggestions from code review
adriendupuis Dec 21, 2023
6c0a2c2
Apply suggestions from code review
adriendupuis Dec 21, 2023
403e581
Update docs/ibexa_products/headless.md
adriendupuis Dec 21, 2023
7574aac
Change links to other product guides
adriendupuis Dec 21, 2023
d72fbd7
headless.md: Rework "Use cases"
adriendupuis Dec 21, 2023
f0d4381
headless.md: Fix style
adriendupuis Dec 21, 2023
0397f9b
headless.md: Rm instruction manual phone app
adriendupuis Dec 21, 2023
c6c93b3
Headless Ibexa onion skin: Colorize, capitalize
adriendupuis Dec 21, 2023
85f9cb8
headless.md: Add a section intro
adriendupuis Dec 22, 2023
7ec9b4d
Update docs/ibexa_products/headless.md
adriendupuis Dec 22, 2023
59d7458
headless.md: Add a section intro
adriendupuis Dec 22, 2023
31964d7
headless.md: Fix meta-desc not displayed in card
adriendupuis Dec 22, 2023
fa5e4b0
headless.md: change sentence of links to other product guides.
adriendupuis Dec 22, 2023
35c5024
Update docs/ibexa_products/headless.md
adriendupuis Jan 2, 2024
33246f4
headless.md: Balance "Ibexa DXP Headless edition"/"Ibexa Headless" us…
adriendupuis Jan 2, 2024
6b7ad15
headless.md: Balance "Ibexa DXP Headless edition"/"Ibexa Headless" us…
adriendupuis Jan 2, 2024
f9ce5c8
headless.md: Balance "Ibexa DXP Headless edition"/"Ibexa Headless" us…
adriendupuis Jan 2, 2024
0154b42
headless.md: Balance "Ibexa DXP Headless edition"/"Ibexa Headless" us…
adriendupuis Jan 2, 2024
82b90bd
Update docs/ibexa_products/headless.md
adriendupuis Jan 5, 2024
af9e4bd
Update Ibexa Headless schema
adriendupuis Jan 12, 2024
6696497
Apply suggestions from code review
adriendupuis Jan 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docs/ibexa_products/editions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---

Check warning on line 1 in docs/ibexa_products/editions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/editions.md#L1

[Ibexa.ReadingLevel] The grade level is 11.23. Aim for 8th grade or lower by using shorter sentences and words.
Raw output
{"message": "[Ibexa.ReadingLevel] The grade level is 11.23. Aim for 8th grade or lower by using shorter sentences and words.", "location": {"path": "docs/ibexa_products/editions.md", "range": {"start": {"line": 1, "column": 1}}}, "severity": "WARNING"}
description: Learn more about various Ibexa DXP editions' features to help yourself choose the right one for your project.
page_type: landing_page
---

# Ibexa DXP editions

[[= cards([
"ibexa_products/headless",
"https://www.ibexa.co/products/ibexa-experience",
"https://www.ibexa.co/products/ibexa-commerce",
], columns=4) =]]
195 changes: 195 additions & 0 deletions docs/ibexa_products/headless.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
---

Check warning on line 1 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L1

[Ibexa.ReadingLevel] The grade level is 10.21. Aim for 8th grade or lower by using shorter sentences and words.
Raw output
{"message": "[Ibexa.ReadingLevel] The grade level is 10.21. Aim for 8th grade or lower by using shorter sentences and words.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 1, "column": 1}}}, "severity": "WARNING"}
description: Ibexa DXP Headless edition features, capabilities and benefits.
---

# Ibexa DXP Headless edition product guide

## What is Ibexa Headless

Ibexa DXP Headless edition focuses on content management. It provides tools to collaboratively create content,

Check failure on line 9 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L9

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 9, "column": 1}}}, "severity": "ERROR"}
and interfaces (API) to distribute this content.

Multilingual, multichannel, extensible, Ibexa Headless is an advanced Content Management Framework (CMF),

Check failure on line 12 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L12

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 12, "column": 41}}}, "severity": "ERROR"}
a Product Information Management (PIM) platform, and even a Digital Asset Management (DAM) repository.
It is provided without a default front office but with a complete back office, and several APIs to manage and access content.

Check failure on line 14 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L14

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 14, "column": 67}}}, "severity": "ERROR"}

## Availability

Ibexa Headless license is available from 30k€/year.

Check failure on line 18 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L18

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 18, "column": 1}}}, "severity": "ERROR"}
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
You can [contact us](https://www.ibexa.co/products/pricing) or [contact one of our partners](https://www.ibexa.co/partners).

## How it works

Check warning on line 21 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L21

[Ibexa.HeadingContent] Rename the heading '## How it works', or re-purpose the content elsewhere.
Raw output
{"message": "[Ibexa.HeadingContent] Rename the heading '## How it works', or re-purpose the content elsewhere.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 21, "column": 1}}}, "severity": "WARNING"}

### Contributor's practical usage
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved

You access with any web browser from any platform to a rich back office, the main place to

Check failure on line 25 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L25

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 25, "column": 61}}}, "severity": "ERROR"}

- define users and their rights (customers, subscribers, editors, etc.),
- organize content (content types, fields, tree, tags, languages and more),

Check warning on line 28 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L28

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 28, "column": 21}}}, "severity": "WARNING"}
- edit content in a collaborative workplace with versions and workflows.

Then, content is available to end users through REST, GraphQL or every output you can imagine like websites or apps.

Check warning on line 31 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L31

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 31, "column": 1}}}, "severity": "WARNING"}

### Technical backstage

When you have a license, you install Ibexa Headless through Composer

Check failure on line 35 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L35

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 35, "column": 38}}}, "severity": "ERROR"}
on an architecture including at least a web server with PHP and a relational database server
(for performance, several bricks can be added to your stack such as a reverse proxy or a search engine).

By using a version control system and environment variables, you can deploy your configuration and extensions on several environments including Ibexa Cloud.

Check failure on line 39 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L39

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 39, "column": 145}}}, "severity": "ERROR"}

adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
Standard web APIs and Ibexa Connect help, even non-developers, to establish interoperability.

Check failure on line 41 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L41

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 41, "column": 23}}}, "severity": "ERROR"}

Ibexa Headless is based on Symfony. Any Symfony developer, or even PHP developer, can quickly learn how to extend it with the help of an online documentation.

Check failure on line 43 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L43

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 43, "column": 1}}}, "severity": "ERROR"}

APIs summary:

- The REST and GraphQL APIs give access to access the content in standardized ways.
- The OAuth 2 Client and Server allow to connect to an SSO or be the SSO.
- The design engine and its theme templates mechanism allows to serve the content in several shapes.
- The PHP API allows to extend Ibexa Headless and fit your needs. For example, content can be manipulated or served in specific ways (such as scheduled/live imports/exports, automated edition tasks, specific output controllers to feed a mobile app, etc.)

Check failure on line 50 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L50

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 50, "column": 32}}}, "severity": "ERROR"}

## Capabilities and benefits

Ibexa Headless is a tool box with a back office.

Check failure on line 54 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L54

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 54, "column": 1}}}, "severity": "ERROR"}

Check failure on line 54 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L54

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 54, "column": 37}}}, "severity": "ERROR"}
It comes without a default front office.
You don't lose time to develop a theme for a provided front office before discovering it won't fit your needs.
No distraction.
Ibexa Headless helps you focus on the content, create and organize with its straightforward user interface (UI),

Check failure on line 58 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L58

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 58, "column": 1}}}, "severity": "ERROR"}
imagine its inputs/outputs, and implement them with its various layers' APIs.

### Core features

The core of Ibexa DXP Headless edition is already awesome as it offers everything to structure your content repositories and access them.

Check failure on line 63 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L63

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 63, "column": 13}}}, "severity": "ERROR"}

#### Content model

- Content items are organized as a tree in a repository.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- An item can have multiple locations in this tree.
- Content items are typed.
- Content types are sets of typed data fields, with eventually conditions on the possible values.
- Rich Text field type comes with an online editor. See [Online Editor product guide](online_editor_guide.md) for more.

Check failure on line 71 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L71

[Ibexa.DomainTermCapitalization] Use 'Field Type' instead of 'field type'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Field Type' instead of 'field type'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 71, "column": 13}}}, "severity": "ERROR"}
- Multilingual, it can store a content in several languages, the content model define which field must be translated and which do not vary.

Check warning on line 72 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L72

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 72, "column": 3}}}, "severity": "WARNING"}

See [Content management product guide](content_management_guide.md) for more.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved

#### User management

- User and user group rights are set by roles with thin granular limited permission policies in a safe deny-by-default security system.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- Users are content items as well, so your knowledge about content management is reused.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved

See [User management product guide](user_management_guide.md) for more.

#### Content access

adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- The REST API and GraphQL API allow to access and edit the content.
- Ibexa Headless offers a complete PHP API to extend the ways to access content.

Check failure on line 86 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L86

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 86, "column": 3}}}, "severity": "ERROR"}
- A design engine and a view controller allow to create plain text content views (such as HTML, JSON, XML, CSS, JS, CSV or Markdown),

Check warning on line 87 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L87

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 87, "column": 83}}}, "severity": "WARNING"}
and to factorize those views using theme cascades.
This very design engine is used in the back office which is equally extendable.

Check warning on line 89 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L89

[Ibexa.VerySimply] Avoid using 'very'.
Raw output
{"message": "[Ibexa.VerySimply] Avoid using 'very'.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 89, "column": 8}}}, "severity": "WARNING"}

Check failure on line 89 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L89

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 89, "column": 42}}}, "severity": "ERROR"}
- Multichannel, content can be accessed through several channel configurations,
such as the domain name it replies to, the sub-part of the content tree it starts from, the users rights, or the design theme.
The back office itself is such a channel.

Check failure on line 92 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L92

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 92, "column": 7}}}, "severity": "ERROR"}
- Multi-repository, the same platform can use separate databases if impermeability is needed between channel groups.

### Advanced features

On top of this strong core, Ibexa DXP Headless edition brings tools to increase user experience, from final front users to back office contributors.

Check failure on line 97 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L97

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 97, "column": 29}}}, "severity": "ERROR"}

Check failure on line 97 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L97

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 97, "column": 124}}}, "severity": "ERROR"}

#### Ibexa Headless is a complete Digital Experience Platform (DXP)

- Ibexa Headless comes with a personalization engine, allowing to recommend content to the front user according to its behavior,

Check failure on line 101 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L101

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 101, "column": 3}}}, "severity": "ERROR"}
or, when authenticated, contents matching user's segment/group. See [Personalization product guide](personalization_brochure.md) for more.
- Ibexa Headless' scheduler allows to establish the future of the content and having a living front application with events even when the editorial team is absent or reduced. At midnight, during weekends or vacations, front users can discover new contents. A calendar summaries those scheduled content event. The calendar is extendable as everything in the back office, some event source could be added to coordinate content events with other company events.

Check failure on line 103 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L103

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 103, "column": 3}}}, "severity": "ERROR"}

Check failure on line 103 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L103

[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Back Office' instead of 'back office'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 103, "column": 358}}}, "severity": "ERROR"}

#### Ibexa Headless adds more ways to structure and organize your content

- Ibexa Headless has specific feature to organise complex products and their catalogs, making it a strong Product Information Management (PIM) software.

Check failure on line 107 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L107

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 107, "column": 3}}}, "severity": "ERROR"}
- Product are organised per product types × variants × catalogs × categories × tags.

Check failure on line 108 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L108

[Ibexa.British] Use the US spelling 'organize' instead of the British 'organise'.
Raw output
{"message": "[Ibexa.British] Use the US spelling 'organize' instead of the British 'organise'.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 108, "column": 17}}}, "severity": "ERROR"}
- Product attributes are grouped and factorized among product types. For example, fabric + color + size can be shared by many clothing product types.
- Product variants can rapidly be created by the automatic declination of attributes having a defined set of values.
- See [PIM product guide](pim_guide.md) for more.
- Ibexa Headless' taxonomy feature allows to tag content items to organize them by topics in a much intuitive way for the editor than a content tree with multiple locations would.

Check failure on line 112 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L112

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 112, "column": 3}}}, "severity": "ERROR"}
Tags themselves are organized in a tree, and synonyms are linked to a favorite terms. This tags organisation can be the task of a supervisor who won't need to move content items around a corporate content tree. At search time, tags can be keywords with a high value in relevance score to help the end user having results closer to the searched topic.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved

#### Ibexa Headless is a collaborative workplace

adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- Version comparison helps to track changes and to solve concurrent editing conflicts.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- Workflows helps with collaborative editing chain.
A built-in “Quick review“ workflow allows an editor to send a content draft to a colleague for review, and comment or publishing.
But, as a framework, more complex workflows can be imagined, with several steps and paths, even some automated tasks.

Check warning on line 120 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L120

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 120, "column": 3}}}, "severity": "WARNING"}

#### Ibexa Headless accelerates content editing

adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- The Headless edition's content tree has several actions available directly on its items. For example, no need to open a content to hide it, you can do it directly from the content tree.
- An Image Editor offers to crop and flip images. When serving the image in various context, you can even set a focal point to indicate to automated cropping which part of the image should be kept.
- A Digital Asset Management (DAM) help to crawl in your image ressources to use and reuse them in your content. And a DAM connector allows to also search in your images hosted on third party DAM servers.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved

#### Ibexa Headless integrates into the networks

##### Intranets and extranets

- Ibexa Connect is to create application interconnections with low code, drag-and-drop and a very visual interface.

Check warning on line 132 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L132

[Ibexa.VerySimply] Avoid using 'very'.
Raw output
{"message": "[Ibexa.VerySimply] Avoid using 'very'.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 132, "column": 94}}}, "severity": "WARNING"}
Complex data flows can be easily implemented with a huge library of connectors and actions for famous to specific applications.

Check warning on line 133 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L133

[Ibexa.VerySimply] Avoid using 'easily'.
Raw output
{"message": "[Ibexa.VerySimply] Avoid using 'easily'.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 133, "column": 29}}}, "severity": "WARNING"}
See [Ibexa Connect product guide]([[= connect_doc =]]/general/ibexa_connect/) for more.

Check failure on line 134 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L134

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 134, "column": 8}}}, "severity": "ERROR"}

Check warning on line 134 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L134

[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.
Raw output
{"message": "[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 134, "column": 90}}}, "severity": "WARNING"}
- An OAuth 2 server offers the possibility to use the DXP as the authentification service for other applications.
adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- An OAuth 2 client allows authentication with a third-party OAuth 2 server.
- A DAM Connector, previously mentioned, helps to access any image repository when needing to illustrate a content.
- Ibexa Headless supports Elasticsearch and Solr.

Check failure on line 138 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L138

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 138, "column": 3}}}, "severity": "ERROR"}
It gives the choice between using Solr or Elasticsearch as a search engine, whether hosted on Ibexa Cloud or on-premises.

Check failure on line 139 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L139

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 139, "column": 97}}}, "severity": "ERROR"}
This choice might be influenced by technology you already use, or you want to invest in for other internal projects.
- Ibexa Headless offers to export and import from command line part of the content model or content items.

Check failure on line 141 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L141

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 141, "column": 3}}}, "severity": "ERROR"}
For example, it can be used to move new content types and items from a staging instance to the production one.

##### Internet, delivery, web search engines and social networks

Check warning on line 144 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L144

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 144, "column": 7}}}, "severity": "WARNING"}

- Ibexa Headless comes with the support of Fastly content delivery network (CDN).

Check failure on line 146 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L146

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 146, "column": 3}}}, "severity": "ERROR"}
The HTTP cache varies on current user's role and is purged when content change.
With is huge network of points of presence (POP) around the world, Fastly is quickly delivering cached content from nearest server for a better user experience.
- A Search Engine Optimization (SEO) field implements best practices about web search engine indexing and social network sharing.
It covers canonical URLs which are mandatory if multiple locations are used for a same content item to avoid duplicate content, Open Graph protocol to better describe a content item to social networks and search engine, and Twitter Cards.

Check failure on line 150 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L150

[Ibexa.DomainTermCapitalization] Use 'Content item' instead of 'content item'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Content item' instead of 'content item'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 150, "column": 90}}}, "severity": "ERROR"}

Check failure on line 150 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L150

[Ibexa.DomainTermCapitalization] Use 'Content item' instead of 'content item'
Raw output
{"message": "[Ibexa.DomainTermCapitalization] Use 'Content item' instead of 'content item'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 150, "column": 172}}}, "severity": "ERROR"}

## Feature summary

To summarize, here is a list of the main Ibexa Headless features:

Check failure on line 154 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L154

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 154, "column": 42}}}, "severity": "ERROR"}

* Structured content
* PIM/Product catalog
* Multilingual
* Taxonomy
* Collaboration and Workflow
* Version comparison
* Rich text editor
* Image Editor
* Scheduler and Calendar
* SEO
* Behavioral-driven personalization
* Recommendations
* Interoperability
* DAM Connector
* Ibexa Connect

Check failure on line 170 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L170

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 170, "column": 3}}}, "severity": "ERROR"}
* REST and GraphQL APIs
* Continuous Deployment
* Oauth2 Client & Server
* Fastly/Varnish
* Elasticsearch/Solr
* Data migrations
* Web development framework
* PHP API
* Extendability

At last and not least, Ibexa DXP Headless edition can be upgraded to Experience and Commerce editions with minimal effort (for example, to start selling online what you exposed in your product catalog).

Check failure on line 181 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L181

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 181, "column": 24}}}, "severity": "ERROR"}

## Use cases

Check warning on line 183 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L183

[Ibexa.HeadingContent] Rename the heading '## Use cases', or re-purpose the content elsewhere.
Raw output
{"message": "[Ibexa.HeadingContent] Rename the heading '## Use cases', or re-purpose the content elsewhere.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 183, "column": 1}}}, "severity": "WARNING"}

adriendupuis marked this conversation as resolved.
Show resolved Hide resolved
- A corporate website to inform about your organization
- An online catalog to expose your products and convince potential customer to contact you
- A feed providing contents to a partner or parent company's network
- A structuring first step to create online presence, before increasing user experience with Ibexa Experience, and finally becoming an online store with Ibexa Commerce.

Check failure on line 188 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L188

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 188, "column": 94}}}, "severity": "ERROR"}

Check failure on line 188 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L188

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 188, "column": 154}}}, "severity": "ERROR"}
- A smartphone app feed allowing to consult instructions manual with mobility while using your product

### Brick and mortar, but with an online showcase

If you prefer the human warmth of a retail store, if your products' numerous options should be discussed, or if you're simply not ready yet to sell online,

Check warning on line 193 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L193

[Ibexa.VerySimply] Avoid using 'simply'.
Raw output
{"message": "[Ibexa.VerySimply] Avoid using 'simply'.", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 193, "column": 120}}}, "severity": "WARNING"}
Ibexa Headless helps to build an exposition of your product catalog and your philosophy,

Check failure on line 194 in docs/ibexa_products/headless.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ibexa_products/headless.md#L194

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/ibexa_products/headless.md", "range": {"start": {"line": 194, "column": 1}}}, "severity": "ERROR"}
an online presence to keep previous customers interested and gather new ones.
78 changes: 48 additions & 30 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import os
import pprint
import re
import urllib.request
from mkdocs.structure.pages import Page
from mkdocs.utils import meta

CARDS_TEMPLATE = """
<div class="card-wrapper">
<div>
<a href="/%s" class="card">
<a href="%s" class="card">
<div>
<p class="title">%s</p>
<p class="description">%s</p>
Expand Down Expand Up @@ -55,35 +56,52 @@ def cards(pages, columns=1, style="cards", force_version=False):
pages = [pages]
cards = []
for page in pages:
with open("docs/%s.md" % page, "r") as doc_file:
doc = doc_file.read()
match = re.search("^# (.*)", doc, re.MULTILINE)
if match:
header = match.groups()[0]
else:
header = ""
default_meta = {
"title": header,
"short": "",
"description": ""
}
doc_meta = {
**default_meta,
**meta.get_data(doc)[1]
}
cards.append(
CARDS_TEMPLATE % (
'/'.join((
'',
site,
language,
version,
page
)),
doc_meta['short'] or doc_meta['title'],
doc_meta['description'] or "&nbsp;"
# site_url
)
if page.startswith("https://") or page.startswith("http://"):
with urllib.request.urlopen(page) as file:
content = file.read().decode('utf-8')
match = re.search("<title>(.*)</title>", content, re.MULTILINE)
if match:
title = match.groups()[0]
else:
title = ""
match = re.search("<meta name=\"description\" content=\"(.*)\"", content, re.MULTILINE)
if match:
description = match.groups()[0]
else:
description = ""
href = page
else:
with open("docs/%s.md" % page, "r") as doc_file:
doc = doc_file.read()
match = re.search("^# (.*)", doc, re.MULTILINE)
if match:
header = match.groups()[0]
else:
header = ""
default_meta = {
"title": header,
"short": "",
"description": ""
}
doc_meta = {
**default_meta,
**meta.get_data(doc)[1]
}
href = '/'.join((
'/',
site,
language,
version,
page
))
title = doc_meta['short'] or doc_meta['title']
description = doc_meta['description'] or "&nbsp;"
cards.append(
CARDS_TEMPLATE % (
href,
title,
description
)
)

return """<div class="%s col-%s">%s</div>""" % (style, columns, "\n".join(cards))
4 changes: 4 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ site_url: https://doc.ibexa.co/en/latest/
copyright: "Copyright 1999-2023 Ibexa AS and others"
nav:
- Ibexa Developer Documentation: index.md
- Ibexa DXP editions:
- Editions: ibexa_products/editions.md
- Ibexa Headless: ibexa_products/headless.md
- Getting started:
- Getting started: getting_started/getting_started.md
- Requirements: getting_started/requirements.md
Expand Down Expand Up @@ -847,6 +850,7 @@ extra:

symfony_doc: 'https://symfony.com/doc/5.4'
user_doc: 'https://doc.ibexa.co/projects/userguide/en/master'
connect_doc: 'https://doc.ibexa.co/projects/connect/en/latest'

extra_css:
- fonts/MavenPro.css
Expand Down