---
name: media-seo-publishing
description: Model media, SEO, and publishing workflows for website projects on this starter. Covers file fields, image validation/filtering, alt texts, social metadata, publication windows, and SSR/cache implications.
---

# media-seo-publishing

## When to use this skill

Use this skill when:

- Designing media-heavy website content models
- Adding image/file fields and image filters
- Modeling SEO fields for pages or reusable content
- Defining publication windows and how they interact with runtime and SSR
- Building authoring workflows around images, metadata, and release control

## Goal

The goal is to make media, SEO, and publishing part of the actual solution design instead of leaving them as late add-ons.

For real website projects, these concerns affect:

- collection schema
- admin ergonomics
- frontend rendering
- SSR/cache validity
- editorial quality

## Source of truth

Use these sources when implementing or reviewing these areas:

- `tibi-server/docs/08-file-upload-images.md`
- `api/collections/medialib.yml`
- `api/collections/content.yml`
- `tibi-admin-nova/docs/collection-config.md`
- `api/hooks/config.js`
- `api/hooks/lib/ssr-server.js`

## Media modeling

Use file fields deliberately.

Typical choices:

- `file` for a single image or asset
- `file[]` for galleries or multi-asset attachments
- foreign references to a media collection when assets need their own lifecycle or reuse

Choose between inline file fields and dedicated media references based on reuse and editorial workflow, not just convenience.

## File validation rules

For serious website builds, do not leave file fields unconstrained.

Define validators where appropriate:

- accepted mime types
- max file size
- min/max image dimensions
- whether mixed media is allowed

This should reflect actual content needs. Hero images, logos, documents, and gallery media often need different constraints.

## Image filters

If the project serves resized or transformed assets, define image filters intentionally.

Use filters for:

- thumbnails
- card images
- hero images
- OpenGraph/social images when relevant

Do not leave every consuming component to invent its own ad hoc asset sizes.

## Alt texts and captions

Accessibility and SEO-relevant image metadata should be explicit in the model.

Recommended approach:

- store alt text explicitly
- keep captions separate from alt text
- use localized fields if the site is multilingual
- optionally use AI assistance only as a suggestion flow

Do not treat filenames as acceptable alt text.

## SEO modeling

Page-like collections should usually model SEO explicitly.

Typical fields:

- `meta.title`
- `meta.description`
- social/share image
- optional canonical information if required
- optional index/follow controls for advanced projects

SEO fields should be easy to find in Nova, usually via sidebar groups or clearly named sections.

## Publishing model

If the site uses publication timing, define it intentionally.

Typical concerns:

- draft versus active state
- publication window (`from` / `to`)
- visibility of unpublished content in public reads
- SSR cache validity for time-sensitive content

Publishing is not just a boolean. If publication windows exist, they must influence runtime and cache behavior.

## SSR implications

Media, SEO, and publishing affect SSR directly.

Examples:

- page meta tags must exist in SSR HTML when relevant
- navigation or content with publication windows must invalidate cached HTML correctly
- image-driven blocks must render stable URLs/markup in SSR

If publication timing can make cached HTML stale, the relevant collections must be accounted for in SSR publish-check logic.

## Admin ergonomics

Use current Nova features to make media/SEO workflows usable:

- sidebar groups for SEO/publication fields
- `viewHint.media` for media-focused collections
- previews for image-bearing entities
- layout grouping so editors do not scroll through one long file/SEO form

Media and SEO fields are often technically present but operationally poor if the admin layout is ignored.

## Recommended modeling patterns

### Marketing page

Recommended shape:

- main content blocks
- explicit SEO object or fields
- hero/share image strategy
- publication controls in sidebar

### Media library entry

Recommended shape:

- file field
- title/name
- alt text / caption
- optional copyright/source
- image-focused admin view

### Reusable teaser or card entity

Recommended shape:

- image reference or file
- short label/title
- teaser text
- consistent image filter usage in frontend components

## Anti-patterns

- No file validators on public/editor-uploaded images
- No explicit alt field
- Mixing captions and alt text into one field
- Hardcoding image sizes only in frontend CSS/components
- Treating publication as frontend-only logic
- Forgetting that publish windows can invalidate SSR HTML

## Verification checklist

After changing media/SEO/publishing behavior, verify all of these:

1. Upload validation matches the intended asset type.
2. Image filters are named and used consistently.
3. Alt/caption/SEO fields are explicit and editor-friendly.
4. Publication state affects public output correctly.
5. SSR HTML still reflects the intended published state.
6. `yarn validate` stays clean.

## What an LLM should inspect first

When asked to work on media, SEO, or publishing on this starter, inspect in this order:

1. `tibi-server/docs/08-file-upload-images.md`
2. the relevant collection YAML
3. admin layout and previews for those fields
4. frontend components consuming the media/SEO data
5. SSR publish-check and invalidation logic if timing matters

This prevents “just add an image field” changes that break runtime, editorial UX, or caching.
