# Input schema

The root is `{ "en": { "posts": [], "shorts": [] }, "pt": { "posts": [], "shorts": [] } }`.

Both languages must contain the same slug set within each collection. Slugs must be lowercase ASCII letters/numbers separated by single hyphens and unique within a collection. Empty collections are valid; an empty catalog does not prove that anything has been published.

All entries require non-empty `title` and `date` strings and a non-empty `tags` array of non-empty strings. Dates are checked for presence, not calendar validity. A `views` field is rejected because this portfolio does not measure public page views.

Articles additionally need `summary`, `read`, and `category` strings, plus a non-empty `sections` array. Each section needs a `title` and non-empty `paragraphs` array. Optional rendering fields are outside this check.

Short notes additionally need `deck`, `readTime`, and `takeaway` strings and a non-empty `body` array of non-empty strings.

The checker accepts additional fields except `views`. It checks neither translation meaning nor factual correctness, URLs, publication permissions, or draft imports. Browser and route checks remain separate.
