# Page construction — the SINGLE source of truth for what the page is built # from, in order. Astro reads this and renders component-by-component via the # registry; the framework attributes (data-lpc-*) are derived from the flags # here, not hardcoded in the components. Turn a component off with `show: false`; # change its load strategy with `load:`; pass props with `data:`. # # load: inline | lazy | async | seo | eager (one) # flags: on: · minH · deps · prefetch · dynamic · trigger · tw # show: false to drop the component entirely (default true) # TRANSFORMERS — per-page pipe config (1/1 sa build-framework `build.config.yaml`). # Bira KOJI transformatori rade, KOJIM redom, sa KOJIM opcijama — grupisano po TIPU # (css/html/js), kao njihovi `css:/html:/javascript:` pipe-ovi. Default (ovaj blok # izostavljen) = registry redosled, SVE uključeno. Registrovani transformatori: # css: minify-css · stacked-css # html: minify-html · purge-unused-classes · inject-lpc-markers · normalize-lpc-scripts # js: minify-js # TRI REŽIMA (kao build-framework enabled:true/false + reorder): # MERGE (flat) — ugasi/upali/opcije pojedinačno, overlay na default: # transformers: { 8e: { enabled: false }, minify-html: { options: { collapseWhitespace: true } } } # OVERRIDE (tip) — zameni CEO pipe datog tipa eksplicitnim redosledom: # transformers: { css: [ { name: minify-css }, { name: stacked-css } ] } # transformers: {} # prazno/izostavljeno = default (sve uključeno) # SITE — per-page-tree identity. SSOT: src/config.ts reads `base`+`site` from # here, and the builder uses `base` for the lang map. `base` = mount path prefix # (always leading + trailing slash); `site` = canonical origin (for canonical + # og:image absolute URLs, previously hardcoded in the head components). base: /dev/ site: https://ltp.ge # DEV-MODE — when true, the optimizer ALSO preserves each route's COMPLETE original # (un-optimized, NON-inlined — real separate files) into `/_/_dev/`, beside the # optimized output and the inlined `_/un.html`. The whole point: both work; the second # is just optimized. Set false for a production-lean build. dev: true # LANGUAGES — this page tree's language set + how an external visitor is routed. # The default lang is served at `base` (no URL segment); each variant owns # `base//`. The builder turns this into functions/_lib/lang.json, which the # middleware's `lang` stage reads. Remove this block → empty map → NO language # routing (graceful fallback to nothing). Detection order: persisted JWT lang → # Accept-Language primary subtag in `accept` → CF country in `countries`. langs: default: en variants: rs: { accept: [sr, hr, bs, me], countries: [RS] } # PLUGINS — pluggable optimizer OUTPUT modules (scripts/plugins/.mjs), run # last in the build by scripts/build-plugins.mjs. Config lives here PER page-tree # for now; a future global.yml will toggle whole plugins on/off across trees. # `enabled: false` turns one off; `exclude:` drops routes (dev/build pages out of # the public sitemap + feeds). Feeds (rss/atom/jsonfeed) currently take the site's # pages as items — swap the source in scripts/plugins/_feed.mjs when a blog exists. plugins: # lightgraph — SEO/discovery owner (sitemap now; OG/meta later). sitemap config nested. lightgraph: { sitemap: { changefreq: weekly, priority: 0.8, exclude: [] } } # feeds (rss/atom/jsonfeed) now OWNED by indieweb (its _lib/feed.ts → /iw/{rss,atom,feed}); # indieweb registers the feed links into lightgraph's graph for autodiscovery. # nojs — JS-free fallback: per-URL `0.html` (every component as full inline # HTML, all CSS inlined, all JS stripped) + a