# Data Model for Blog Feature

## Entity: Article

Represents a single blog post.

### Fields:

*   **`title`** (String): The title of the article.
    *   **Source**: Extracted from the `title` field within the JSON metadata block at the top of the article's HTML file.
*   **`date`** (String): The publication date of the article in `YYYY-MM-DD` format.
    *   **Source**: Extracted from the `date` field within the JSON metadata block. This also serves as the prefix for the article's filename.
*   **`image`** (String): The relative path to the main image associated with the article.
    *   **Source**: Extracted from the `image` field within the JSON metadata block.
*   **`summary`** (String): A brief summary or excerpt of the article (1-2 sentences).
    *   **Source**: Extracted from the `summary` field within the JSON metadata block.
*   **`content`** (String): The full HTML content of the article.
    *   **Source**: The body of the article's HTML file, following the JSON metadata block.

### Relationships:

*   **Implicit Relationship with Blog Page**: Multiple `Article` entities are displayed on the main `Blog Page` (`/blog/index.html`), which dynamically aggregates and presents them.

### Validation Rules:

*   **Filename Format**: Each article HTML file in `blog/clanki/` MUST be named with a `YYYY-MM-DD-` prefix (e.g., `2025-11-15-medkulturnost-prostor-za-rast.html`). Files not adhering to this convention will be ignored with a warning.
*   **JSON Metadata**: Each article HTML file MUST contain a valid JSON block within an HTML comment at its very beginning. Malformed JSON will cause the article to be skipped with a warning.
*   **Required Metadata Fields**: The JSON metadata block MUST include `title`, `date`, `image`, and `summary` fields.
*   **`jq` Dependency**: The `posodobi_blog.sh` script requires `jq` to parse JSON metadata. The script will check for `jq`'s presence and exit with an error if it's not found.

### State Transitions:

*   Not applicable, as articles are static content files.
