# API Contracts for Blog Feature This document outlines the "API contracts" for the static blog generation process. Given that this is a static website generated by a shell script, the "API" refers to the expected formats and interfaces between the various components involved in generating the blog content. ## 1. Article Metadata Contract This contract defines the expected JSON structure embedded within each article's HTML file. The `posodobi_blog.sh` script relies on this format to extract article details. * **Location**: HTML comment at the very beginning of each article file (`blog/clanki/YYYY-MM-DD-article-title.html`). * **Format**: JSON object. ### Expected Structure (`contracts/article-metadata.json`): ```json { "title": "string", // The title of the article "date": "YYYY-MM-DD", // The publication date of the article "image": "string", // Relative path to the main image (e.g., "/assets/images/blog/my-article-image.webp") "summary": "string" // A short summary or excerpt of the article } ``` ### Validation Rules: * The JSON block must be valid JSON. * All fields (`title`, `date`, `image`, `summary`) are mandatory. * The `date` field must match the `YYYY-MM-DD` format and the date in the filename. ## 2. Blog Template Contract This contract defines the placeholders expected by the `posodobi_blog.sh` script within the `blog/template.html` file. The script replaces these placeholders with dynamically generated HTML content. * **Location**: `blog/template.html` * **Format**: Specific string markers. ### Expected Placeholders: * `__NAJNOVEJSI_CLANEK__`: Replaced with the HTML block for the featured (newest) article. * `__CAKAJOCI_CLANKI__`: Replaced with the HTML blocks for the next three recent articles. * `__ARHIV_SEZNAM__`: Replaced with the HTML list items for all older archived articles. ## 3. Script Input/Output Contract (`posodobi_blog.sh`) This contract describes the expected inputs and outputs of the `posodobi_blog.sh` script. * **Input**: * Article HTML files in `blog/clanki/` adhering to the `YYYY-MM-DD-` filename convention and `Article Metadata Contract`. * `blog/template.html` adhering to the `Blog Template Contract`. * **Output**: * Generated `blog/index.html` file. * Warnings logged to `stderr` for malformed JSON or invalid filenames. * Error logged to `stderr` and script exits if `jq` is not found.