Tutorial · Part 3 of 7

Content

Markdown in a page, a YAML data file for a listing, and the annotation that renders a page as pure Markdown.

  1. Write prose with the markdown tag

    In atelier/_index.php, drop Markdown straight into the page — it's converted to HTML after PHP runs, so PHP variables and Markdown mix freely. Wrap the paragraph between an opening and a closing tag named markdown, the same way every paragraph on this tutorial page is written — view this page's source to see the real thing, since showing the tag's own angle brackets here would trip the very tag it's demonstrating.

    Add a prose attribute on the opening tag to wrap the output in .prose — this site's own @kirigami/canva-based typography for long-form content.

  2. List notes from a YAML file

    notes/_notes.yaml:

    
                                    - title: The first pleat
                                      date: 2026-08-02
                                      excerpt: Where the studio's name actually comes from.
                                    - title: Paper weights, compared
                                      date: 2026-08-19
                                      excerpt: 80gsm folds crisp; 120gsm holds a curve.
                                

    notes/_index.php points a PHPDOC annotation at it, and gets the parsed data back as a plain array of objects — no manual file_get_contents() / yaml_parse():

    
                                    /**
                                     * @title Notes
                                     * @posts _notes.yaml
                                     */
                                
    
                                    foreach ($posts as $post) {
                                        echo '<h3>' . str_htmlesc($post->title) . '</h3>';
                                        echo '<p>' . str_htmlesc($post->excerpt) . '</p>';
                                    }
                                

    Any annotation value ending in .yaml, .yml, .json or .md that resolves to a real file is loaded and parsed automatically — the string becomes structured data instead.

  3. A whole page that's just Markdown

    For a single note that's pure prose, skip writing PHP at all. notes/premier-pli/_premier-pli.md holds the text; the page file becomes almost nothing:

    
                                    /**
                                     * @title   The first pleat
                                     * @content _premier-pli.md
                                     */
                                

    @content renders that file's contents as the page body and skips executing the PHP file entirely — reserved for pages that are pure data or Markdown, wrapped by the same shared header/footer as everything else.


NOTE

Three different shapes, same output family: <markdown> for prose mixed with logic, an auto-loaded data file for structured listings, @content for pages that are only ever going to be prose. Pick the one that matches the page, not one convention for the whole site.