# Type: LinkedIn Post

Changes to how this Type behaves are requested through a GitHub Issue and implemented, together with this reference page, through the repository's normal workflow. See /_docs/posts for how Post Types and Content Types work in general, and docs/Internal/type-doc-templates.md for the Post Type Doc template this file follows.

A standalone Post Type for an owner-authored LinkedIn post imported by an external converter (out of scope for this Type; see /_docs/json-import) — text, an article/link share, media, an attachment, or a reshare with the owner's own commentary. No PostType inheritance: this Type reuses the ordinary Post/Version/Content Element/Role/Slot/Stage model exactly as every other Type does. An imported LinkedIn Post normally starts PrePub, same as any other import.

## Schema

```
Slots:
- text        : text       | optional | single
- images      : image      | optional | repeatable
- videos      : video      | optional | repeatable
- links       : link       | optional | repeatable
- attachments : attachment | optional | repeatable
- audios      : audio      | optional | repeatable
- contacts    : contact    | optional | repeatable
- geospatials : geospatial | optional | repeatable
- timelines   : timeline   | optional | repeatable
```

`text` is this Type's one featured Text role — the owner's own post text or reshare commentary. `images`/`videos`/`links`/`attachments`/`audios`/`contacts`/`geospatials`/`timelines` are wildcard slots (the same "any role of this kind" meaning as Article's own `images`/`videos` rows — see /_docs/posts). **At least one of `text`, an Image/Video, a Link, or an Attachment is required** — an owner-authored LinkedIn Post is never entirely empty. For a reshare, the owner's own commentary is preserved as `text`; the reshared third-party material is represented as a Link (plus its own source-provenance metadata), never as if it were itself owner-authored.

## Content placement (Full rendering)

`text` and every eligible Image/Video are this Type's own primary content, combined into one ordered Media grid — Image and Video interleaved by Rank, not grouped by kind; see "Mixed-media order," below. Every other eligible Content Element the Post holds (Links, Attachments, Contacts, Geospatial, Timelines) flows into the shared "Additional Information" container, same fixed group order every other Post Type uses — empty groups omitted, Text/Free-form HTML never shown there. Image is the one documented duplication exception: every Image the Post holds also appears in the Additional Information Media group even though it's already shown in the primary grid. A reshared article/link share's own Link appears in the Links group like any other Link, distinguishable from the owner's own `text` commentary above it — never merged into one element.

### Mixed-media order

The Media Slot has no separate ordering field of its own — it reuses each element's existing per-(Role, kind) Rank column, the same mechanism every other repeatable Slot in this codebase already uses. Image and Video are still two separate Content Types with two separate Rank sequences; when a real source post genuinely interleaves an image and a video, the converter assigns Rank from one shared incrementing counter across both kinds for that Role, and rendering merges the Post's Images and Videos sharing that Role and sorts the combined list by Rank.

## Rendering contracts

### Summary (in a list of posts)

Title, the first Image/Video (combined Rank order) as a thumbnail, a short excerpt of `text`, published date.

### Full (its own page)

The normal compact Post header (title, Published/Updated/Original/History line, Tags), `text` (if present) directly below it, then the ordered Media grid, then the shared Additional Information container for Links/Attachments/Contacts/Geospatial/Timelines — a reshared article/link's own Link appears there, alongside the owner's own commentary above.

## Page regions (Full rendering)

- **Header** — the Hidden/PrePub/Private banner (if applicable), the title, the compact Published/Updated/Original/History metadata line (see /_docs/article's own "Metadata line" for the full item-by-item detail), and a row of Tag links (if the Version has any).
- **Introduction** — `text`, then the Media grid.
- **Supplementary** — the Additional Information container, when eligible content exists.
- **Main**, **Footer** — not currently used by LinkedIn Post.

Responsive order: Header, Introduction, Supplementary — unchanged across viewport sizes (no reading-column primary presentation).

## Public metadata exposure

Title, type, Stage, Category, published/updated timestamps, Version ordinal, Tags (as JSON-LD `keywords`), every Content Element the Post holds, and this Version's own source-provenance facts (platform, source account identity, stable source-post ID, canonical URL, original publish timestamp, converter provenance, checksum — see docs/Internal/data-model.md's "Source provenance") are all exposed via the Metadata page, JSON-LD export, and native JSON export, same as every Type.

## Admin editor

Every Content Element section is available here, same as every Type. `text` is this Type's one standard Text role; at least one of Text, an Image/Video, a Link, or an Attachment is required — the Admin editor does not block a save with none, but publishing rejects an entirely-empty Post with an actionable error. Any Image/Video you add is shown in the Media grid, in Rank order; anything else you add is still saved and shown in the Additional Information container afterward. Any element can also be referenced inline in a text block via content references, e.g. `{{role}}` or `{{link:role}}`.
