@janga/norna 0.7.11 → 0.7.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -108
- package/bin/norna-cli.mjs +1 -1
- package/docs/README.md +107 -75
- package/docs/assets/norna-dog-shelter.jpg +0 -0
- package/docs/commands.md +7 -4
- package/docs/configuration.md +86 -185
- package/docs/design/command-organization.md +1 -1
- package/docs/design/norna-diagram-design.md +2 -1
- package/docs/design/site-examples-structure.md +4 -1
- package/docs/engine-development.md +15 -8
- package/docs/getting-started.md +126 -144
- package/docs/how-to/embedded-site.md +35 -0
- package/docs/publishing.md +47 -46
- package/docs/requirements.md +54 -0
- package/docs/routes.md +1 -1
- package/docs/site-structure.md +4 -4
- package/docs/sitewide-content.md +2 -1
- package/docs/theme.md +18 -0
- package/examples/README.md +26 -24
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +4 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +6 -8
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +26 -53
- package/examples/complete-sites/dog-shelter-multi-page/README.md +7 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +29 -35
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{astro-D_GIpJIE.js → astro-B3JHJyiv.js} +4 -4
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +151 -151
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +131 -131
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{audit-DM9Hkl5B.js → audit-C3SVr7dT.js} +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{highlight-DnZ1ULOL.js → highlight-BLtvqtzO.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{icons-RyebKi45.js → icons-C92i61-2.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{settings-DaU-gNnK.js → settings-v5GgKks_.js} +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{toolbar-63PA619H.js → toolbar-BFvJVp26.js} +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{ui-library--bkcNSYz.js → ui-library-Cd35oAvo.js} +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{window-jPkpKVcy.js → window-vo3A6TMn.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{xray-BXCHpEJP.js → xray-DwhzGckb.js} +3 -3
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +92 -12
- package/examples/complete-sites/dog-shelter-multi-page/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/content.md +12 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/images/intro/shelter-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +9 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +11 -19
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/images/adopt/adoption-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/route-content.md +11 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +12 -2
- package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +1 -23
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +59 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +138 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +755 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +4 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +1 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +183 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +13 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +14 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +5 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +2 -0
- package/examples/complete-sites/dog-shelter-single-page/README.md +7 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +3 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +44 -12
- package/examples/complete-sites/dog-shelter-single-page/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-single-page/site/content.md +20 -24
- package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/rescue-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/foster-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +9 -0
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +12 -2
- package/examples/complete-sites/dog-shelter-single-page/site/theme.md +1 -23
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +15 -2
- package/examples/feature-demos/media-and-surfaces/README.md +7 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +7 -1
- package/examples/{complete-sites/dog-shelter-multi-page → feature-demos/media-and-surfaces}/node_modules/.vite/deps/embla-carousel.js +1 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/site/config.md +4 -0
- package/examples/feature-demos/media-and-surfaces/site/content.md +5 -51
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/route-content.md +10 -25
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/route-content.md +1 -1
- package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +138 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +1 -0
- package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +1 -0
- package/examples/feature-demos/sitewide-content/.astro/content.d.ts +183 -0
- package/examples/feature-demos/sitewide-content/.astro/data-store.json +1 -0
- package/examples/feature-demos/sitewide-content/.astro/dev.json +13 -0
- package/examples/feature-demos/sitewide-content/.astro/dev.log +18 -0
- package/examples/feature-demos/sitewide-content/.astro/settings.json +5 -0
- package/examples/feature-demos/sitewide-content/.astro/types.d.ts +2 -0
- package/examples/feature-demos/sitewide-content/README.md +18 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +1 -0
- package/examples/feature-demos/sitewide-content/site/config.md +3 -0
- package/examples/feature-demos/sitewide-content/site/content.md +16 -0
- package/examples/feature-demos/sitewide-content/site/public/logo.svg +6 -0
- package/examples/feature-demos/sitewide-content/site/public/robots.txt +2 -0
- package/examples/feature-demos/sitewide-content/site/routes/010-identity/route-content.md +20 -0
- package/examples/feature-demos/sitewide-content/site/routes/020-notices/route-content.md +22 -0
- package/examples/feature-demos/sitewide-content/site/routes/030-footer/route-content.md +17 -0
- package/examples/feature-demos/sitewide-content/site/sitewide-content.md +33 -0
- package/examples/feature-demos/sitewide-content/site/theme.md +3 -0
- package/examples/feature-demos/theme-presets/.astro/dev.log +37 -0
- package/examples/feature-demos/theme-presets/README.md +5 -1
- package/examples/feature-demos/theme-presets/site/config.md +3 -0
- package/fixtures/basic/site/config.md +3 -0
- package/fixtures/content-model-v2/site/config.md +3 -0
- package/package.json +12 -7
- package/scripts/build-pages.mjs +4 -6
- package/scripts/check-config.mjs +1 -10
- package/scripts/deploy-site.mjs +12 -8
- package/scripts/lib/example-sites.mjs +3 -0
- package/scripts/lib/github-repository.mjs +44 -0
- package/scripts/lib/norna-markdown-blocks.mjs +97 -10
- package/scripts/lib/project-config.mjs +112 -123
- package/scripts/lib/site-content.mjs +7 -0
- package/scripts/lib/site-paths.mjs +6 -2
- package/scripts/test-client-javascript.mjs +236 -0
- package/scripts/test-content-check.mjs +103 -0
- package/scripts/test-content-model-v2.mjs +9 -13
- package/scripts/test-documentation.mjs +116 -0
- package/scripts/test-engine-commands.mjs +12 -3
- package/scripts/test-examples.mjs +9 -0
- package/scripts/test-package-check.mjs +17 -9
- package/scripts/test-project-config.mjs +130 -0
- package/scripts/test-temporary-visibility.mjs +3 -10
- package/scripts/test-theme-presets.mjs +3 -8
- package/scripts/watch-pages-deploy.mjs +15 -11
- package/src/components/GalleryGrid.astro +30 -230
- package/src/components/ImageCarousel.astro +184 -0
- package/src/components/MobileSectionNavigationScript.astro +14 -0
- package/src/components/NornaSmoothScrollScript.astro +250 -0
- package/src/components/SiteNavigation.astro +58 -341
- package/src/components/SiteNotesScript.astro +43 -0
- package/src/components/SitePage.astro +4 -1
- package/src/components/SiteSection.astro +4 -47
- package/src/layouts/BaseLayout.astro +1 -1
- package/src/lib/galleryImages.ts +53 -0
- package/src/styles/global.css +81 -1
- package/starters/basic/.github/workflows/deploy.yml +1 -2
- package/starters/basic/README.md +10 -8
- package/starters/basic/site/config.md +3 -0
- package/starters/project/.github/workflows/deploy.yml +1 -2
- package/starters/project/README.md +3 -4
- package/starters/project/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/embla-carousel.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/site/config.mjs +0 -30
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +0 -19
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +0 -19
- package/examples/complete-sites/dog-shelter-single-page/site/config.mjs +0 -30
- package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/dog-house.svg +0 -25
- package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/heart.svg +0 -13
- package/examples/feature-demos/media-and-surfaces/site/config.mjs +0 -30
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +0 -3
- package/examples/feature-demos/theme-presets/site/config.mjs +0 -30
- package/fixtures/basic/site/config.mjs +0 -27
- package/fixtures/content-model-v2/site/config.mjs +0 -11
- package/starters/basic/site/config.mjs +0 -27
- package/starters/project/site/config.mjs +0 -30
package/README.md
CHANGED
|
@@ -1,126 +1,138 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
`norna` is a reusable command-line toolchain for small static websites.
|
|
4
|
-
It provides the CLI, Astro renderer, validation scripts, image pipeline,
|
|
5
|
-
starter project, fixtures, and deploy helpers used by site repositories such as
|
|
6
|
-
`www.walde.se`.
|
|
7
|
-
|
|
8
|
-
Use this repository when you are:
|
|
9
|
-
|
|
10
|
-
- creating a new site repository from the starter,
|
|
11
|
-
- maintaining the reusable `@janga/norna` engine,
|
|
12
|
-
- looking up the generic CLI, content, configuration, image, build, or deploy
|
|
13
|
-
behavior.
|
|
14
|
-
|
|
15
|
-
Site-specific content, domain files, source images, and publication decisions
|
|
16
|
-
belong in each site repository. For example, Karin Walde's site lives in
|
|
17
|
-
`www.walde.se` and depends on a pinned version of this package.
|
|
18
|
-
|
|
19
|
-
## Mental Model
|
|
20
|
-
|
|
21
|
-
A `norna` site is file-driven:
|
|
22
|
-
|
|
23
|
-
1. A site repository depends on this package.
|
|
24
|
-
2. The site keeps technical settings, including public URL and optional URL
|
|
25
|
-
base path, in `site/config.mjs`.
|
|
26
|
-
3. The site selects a complete visual preset, with optional focused overrides
|
|
27
|
-
for layout, image sizing, font, typography, palettes, and section surfaces,
|
|
28
|
-
in `site/theme.md`.
|
|
29
|
-
4. The site keeps homepage content, Markdown section order, managed media
|
|
30
|
-
blocks, alt text, captions, and optional section metadata in
|
|
31
|
-
`site/content.md`.
|
|
32
|
-
5. Optional route pages live under
|
|
33
|
-
`site/routes/<NNN-route-id>/route-content.md`.
|
|
34
|
-
6. Source images live under `site/images/<section-id>/` for the homepage, or
|
|
35
|
-
under `site/routes/<NNN-route-id>/images/<section-id>/` for a route.
|
|
36
|
-
7. Static public files live under `site/public/`.
|
|
37
|
-
8. `norna` validates the files, prepares managed images, builds static Astro
|
|
38
|
-
pages, and can help publish the committed branch through GitHub Pages.
|
|
39
|
-
|
|
40
|
-
The default site directory is `site/`. Commands can also use another directory
|
|
41
|
-
with `NORNA_SITE_DIR` or `norna --site-dir <path>`. Without an explicit site
|
|
42
|
-
directory, commands first accept the current directory when it contains
|
|
43
|
-
`config.mjs` and `content.md`; otherwise they walk upward looking for a
|
|
44
|
-
`site/` directory with those files.
|
|
1
|
+
# Norna
|
|
45
2
|
|
|
46
|
-
|
|
3
|
+
**Build responsive websites from Markdown, images, and a theme preset.**
|
|
47
4
|
|
|
48
|
-
|
|
5
|
+
Norna is an opinionated, open source CLI for building websites from plain
|
|
6
|
+
files. You write the content, keep images beside the content they belong to,
|
|
7
|
+
and choose a visual preset. Norna provides the page structure, navigation,
|
|
8
|
+
responsive image output, validation, and static build.
|
|
49
9
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
npm run package:check
|
|
55
|
-
```
|
|
10
|
+
The result stays readable as source files and works naturally with Git and
|
|
11
|
+
AI-assisted editing. Norna deliberately offers fewer architectural choices
|
|
12
|
+
than a general-purpose site generator: you describe the site instead of
|
|
13
|
+
implementing a new presentation layer for every project.
|
|
56
14
|
|
|
57
|
-
|
|
15
|
+
[Documentation](https://janga.github.io/norna/) |
|
|
16
|
+
[Five-minute tutorial](docs/getting-started.md) |
|
|
17
|
+
[Live examples](https://janga.github.io/norna/examples/) |
|
|
18
|
+
[npm package](https://www.npmjs.com/package/@janga/norna)
|
|
19
|
+
|
|
20
|
+
[](https://janga.github.io/norna/examples/complete-sites/dog-shelter-multi-page/)
|
|
21
|
+
|
|
22
|
+
The screenshot shows the built
|
|
23
|
+
[multi-page example source](examples/complete-sites/dog-shelter-multi-page/).
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
You need Node.js 22.12 or later.
|
|
58
28
|
|
|
59
29
|
```sh
|
|
60
|
-
cd ../
|
|
61
30
|
npx @janga/norna@latest init my-site
|
|
62
31
|
cd my-site
|
|
63
32
|
npm install
|
|
64
33
|
npm run dev
|
|
65
34
|
```
|
|
66
35
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
36
|
+
Open the URL printed by the development server, then edit the files under
|
|
37
|
+
`site/`. The generated project pins its Norna version and includes the npm
|
|
38
|
+
scripts and GitHub Pages workflow needed to check, build, and publish it.
|
|
39
|
+
|
|
40
|
+
Follow the [five-minute tutorial](docs/getting-started.md) for a first edit and
|
|
41
|
+
verified build.
|
|
42
|
+
|
|
43
|
+
## The Site Model
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
site/
|
|
47
|
+
|-- config.md
|
|
48
|
+
|-- theme.md
|
|
49
|
+
|-- sitewide-content.md
|
|
50
|
+
|-- content.md
|
|
51
|
+
|-- images/
|
|
52
|
+
|-- routes/
|
|
53
|
+
`-- public/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- `content.md` holds the homepage and its sections.
|
|
57
|
+
- `images/` holds managed source images beside the content they belong to.
|
|
58
|
+
- `routes/` adds pages, each with content and optional local images and theme.
|
|
59
|
+
- `theme.md` normally selects one complete visual preset.
|
|
60
|
+
- `sitewide-content.md` holds shared identity, banners, and footer content.
|
|
61
|
+
- `config.md` holds the public URL and optional language and scroll behavior.
|
|
62
|
+
- `public/` holds static files copied without processing.
|
|
63
|
+
|
|
64
|
+
Norna validates this structure, processes managed images when needed, and
|
|
65
|
+
builds the generated website into `dist/`.
|
|
66
|
+
|
|
67
|
+
## Why Norna?
|
|
68
|
+
|
|
69
|
+
- **Useful defaults instead of a new layout project.** Presets coordinate
|
|
70
|
+
typography, spacing, palettes, image sizing, and section surfaces.
|
|
71
|
+
- **Images without the repetitive work.** Norna creates responsive variants,
|
|
72
|
+
selects suitable browser sources, and reuses unchanged generated output.
|
|
73
|
+
- **Files that remain manageable.** Content and assets can be inspected,
|
|
74
|
+
reviewed, versioned, and edited with the tools you already use.
|
|
75
|
+
- **A complete publishing path.** The starter includes validation, static
|
|
76
|
+
builds, and an integrated GitHub Pages workflow.
|
|
77
|
+
|
|
78
|
+
## Examples
|
|
79
|
+
|
|
80
|
+
Every example is built in the repository test suite and published with the
|
|
81
|
+
documentation.
|
|
82
|
+
|
|
83
|
+
| Example | Live site | Source |
|
|
84
|
+
| --- | --- | --- |
|
|
85
|
+
| Dog shelter, single page | [Open demo](https://janga.github.io/norna/examples/complete-sites/dog-shelter-single-page/) | [View files](examples/complete-sites/dog-shelter-single-page/) |
|
|
86
|
+
| Dog shelter, multi-page | [Open demo](https://janga.github.io/norna/examples/complete-sites/dog-shelter-multi-page/) | [View files](examples/complete-sites/dog-shelter-multi-page/) |
|
|
87
|
+
| Theme presets | [Open demo](https://janga.github.io/norna/examples/feature-demos/theme-presets/) | [View files](examples/feature-demos/theme-presets/) |
|
|
88
|
+
| Media and surfaces | [Open demo](https://janga.github.io/norna/examples/feature-demos/media-and-surfaces/) | [View files](examples/feature-demos/media-and-surfaces/) |
|
|
89
|
+
| Sitewide content | [Open demo](https://janga.github.io/norna/examples/feature-demos/sitewide-content/) | [View files](examples/feature-demos/sitewide-content/) |
|
|
90
|
+
|
|
91
|
+
See [examples/README.md](examples/README.md) for what each example is intended
|
|
92
|
+
to demonstrate and how to run it locally.
|
|
93
|
+
|
|
94
|
+
## Is Norna A Good Fit?
|
|
95
|
+
|
|
96
|
+
Norna is designed for sites that should be straightforward to edit, review,
|
|
97
|
+
and publish without creating a custom presentation architecture. Typical uses
|
|
98
|
+
include project and product sites, documentation, portfolios, personal sites,
|
|
99
|
+
and organisation or information sites.
|
|
100
|
+
|
|
101
|
+
Norna is not intended for dynamic applications, database-backed publishing,
|
|
102
|
+
visual CMS workflows, or projects that need complete control over templates,
|
|
103
|
+
components, and rendering logic.
|
|
104
|
+
|
|
105
|
+
## Requirements And Current Limits
|
|
106
|
+
|
|
107
|
+
- Node.js `>=22.12.0` is required.
|
|
108
|
+
- ImageMagick is required when Norna generates responsive raster image variants.
|
|
109
|
+
- GitHub Pages is the only publishing provider integrated by Norna today.
|
|
110
|
+
- The build output is static and written to `dist/`; other static hosts can
|
|
111
|
+
serve that output, but Norna does not currently configure or publish to them.
|
|
112
|
+
- Norna is pre-1.0 software. Its file model and CLI may still change between
|
|
113
|
+
releases.
|
|
114
|
+
|
|
115
|
+
GitHub CLI and Playwright are needed only for specific deploy helpers and
|
|
116
|
+
engine diagnostics, not for ordinary editing and local preview. See
|
|
117
|
+
[Requirements and limitations](docs/requirements.md) for the exact boundaries.
|
|
114
118
|
|
|
115
119
|
## Documentation
|
|
116
120
|
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
- [Five-minute tutorial](docs/getting-started.md)
|
|
122
|
+
- [Task-oriented documentation map](docs/README.md)
|
|
123
|
+
- [How-to guides](docs/README.md#how-to-guides)
|
|
124
|
+
- [Concepts and explanation](docs/README.md#concepts-and-explanation)
|
|
125
|
+
- [Technical reference](docs/README.md#reference)
|
|
126
|
+
- [Troubleshooting](docs/README.md#troubleshooting)
|
|
127
|
+
- [AI-readable documentation index](https://janga.github.io/norna/llms.txt)
|
|
128
|
+
|
|
129
|
+
Engine contributors should start with
|
|
130
|
+
[Engine Development](docs/engine-development.md). Planning and future work are
|
|
131
|
+
tracked in [BACKLOG.md](BACKLOG.md).
|
|
119
132
|
|
|
120
|
-
|
|
121
|
-
recommended reading order.
|
|
133
|
+
## Support And License
|
|
122
134
|
|
|
123
|
-
|
|
135
|
+
Use the [issue tracker](https://github.com/janga/norna/issues) for reproducible
|
|
136
|
+
bugs, documentation problems, and focused feature proposals.
|
|
124
137
|
|
|
125
|
-
|
|
126
|
-
and workflow documentation should live in this README and `docs/`.
|
|
138
|
+
Norna is licensed under [GNU GPL v3](LICENSE).
|
package/bin/norna-cli.mjs
CHANGED
|
@@ -14,7 +14,7 @@ Commands:
|
|
|
14
14
|
dev:status Show local dev server status
|
|
15
15
|
dev:logs Show local dev server logs
|
|
16
16
|
dev:stop Stop local dev server
|
|
17
|
-
config:check Validate site/config.
|
|
17
|
+
config:check Validate site/config.md
|
|
18
18
|
content:check Validate site/content.md and image references
|
|
19
19
|
content:sync Move misplaced Norna-managed images and refresh generated images
|
|
20
20
|
theme:export Export a commented theme preset reference
|
package/docs/README.md
CHANGED
|
@@ -1,75 +1,107 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
1. [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- [
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
- [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
- [
|
|
54
|
-
|
|
55
|
-
- [
|
|
56
|
-
- [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- [
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
1
|
+
# Norna Documentation
|
|
2
|
+
|
|
3
|
+
Use this page to choose documentation by what you are trying to accomplish.
|
|
4
|
+
The [Norna introduction site](https://janga.github.io/norna/) explains the
|
|
5
|
+
product; these Markdown files provide the tutorial, task guides, explanation,
|
|
6
|
+
and exact reference.
|
|
7
|
+
|
|
8
|
+
## Start Here
|
|
9
|
+
|
|
10
|
+
1. [Build your first Norna site](getting-started.md) follows one short path from
|
|
11
|
+
an empty directory to a checked build.
|
|
12
|
+
2. [Requirements and limitations](requirements.md) states what must be
|
|
13
|
+
installed and what Norna does and does not support today.
|
|
14
|
+
3. [Examples](../examples/README.md) pairs complete and focused source projects
|
|
15
|
+
with their rendered sites.
|
|
16
|
+
|
|
17
|
+
Do not read the reference from beginning to end before trying Norna. Complete
|
|
18
|
+
the tutorial, then use the task links below when a real site needs them.
|
|
19
|
+
|
|
20
|
+
## How-To Guides
|
|
21
|
+
|
|
22
|
+
### Create And Run A Site
|
|
23
|
+
|
|
24
|
+
- [Create a standalone site](getting-started.md#1-create-and-run-the-site)
|
|
25
|
+
- [Add Norna to an existing Node project](how-to/embedded-site.md)
|
|
26
|
+
- [Start and manage local preview](local-development.md)
|
|
27
|
+
- [Inspect or update the installed engine](commands.md#command-summary)
|
|
28
|
+
|
|
29
|
+
### Write And Organise Content
|
|
30
|
+
|
|
31
|
+
- [Write page sections](content.md#sections)
|
|
32
|
+
- [Use image stacks, carousels, and cards](content.md#managed-media-blocks)
|
|
33
|
+
- [Add notes to prose](content.md#markdown-text)
|
|
34
|
+
- [Add another page](routes.md)
|
|
35
|
+
- [Add shared identity, banners, and a footer](sitewide-content.md)
|
|
36
|
+
|
|
37
|
+
### Work With Images
|
|
38
|
+
|
|
39
|
+
- [Add managed source images](images-and-metadata.md#managed-source-images)
|
|
40
|
+
- [Place image blocks in Markdown](content.md#managed-media-blocks)
|
|
41
|
+
- [Check and sync moved image references](content.md#validation-and-sync)
|
|
42
|
+
- [Understand generated variants and SVG handling](images-and-metadata.md#generated-variants-and-static-svg)
|
|
43
|
+
|
|
44
|
+
### Change The Presentation
|
|
45
|
+
|
|
46
|
+
- [Choose a complete theme preset](theme.md#theme-presets)
|
|
47
|
+
- [Inspect and override a preset](theme.md#overrides)
|
|
48
|
+
- [Give a route a different theme](theme.md#route-themes)
|
|
49
|
+
- [Adjust typography](typography.md)
|
|
50
|
+
|
|
51
|
+
### Check, Build, And Publish
|
|
52
|
+
|
|
53
|
+
- [Run content and configuration checks](commands.md#starter-npm-scripts)
|
|
54
|
+
- [Build and inspect generated output](site-structure.md#generated-files)
|
|
55
|
+
- [Publish through the included GitHub Pages workflow](publishing.md#github-pages-workflow)
|
|
56
|
+
- [Monitor or troubleshoot a deployment](publishing.md)
|
|
57
|
+
|
|
58
|
+
## Concepts And Explanation
|
|
59
|
+
|
|
60
|
+
- [Norna's site model](https://janga.github.io/norna/concepts/) explains how
|
|
61
|
+
files, sections, images, and routes become a website.
|
|
62
|
+
- [Site Structure](site-structure.md) separates source files, generated files,
|
|
63
|
+
examples, fixtures, and engine code.
|
|
64
|
+
- [Images and Metadata](images-and-metadata.md) explains why Norna manages image
|
|
65
|
+
variants and published URLs.
|
|
66
|
+
- [Command Organization](design/command-organization.md) explains the command
|
|
67
|
+
model for standalone sites, embedded sites, and engine development.
|
|
68
|
+
- [Site Examples Structure](design/site-examples-structure.md) explains the
|
|
69
|
+
difference between starters, examples, documentation sites, and fixtures.
|
|
70
|
+
|
|
71
|
+
## Reference
|
|
72
|
+
|
|
73
|
+
- [Configuration](configuration.md): `site/config.md` fields and defaults.
|
|
74
|
+
- [Sitewide Content](sitewide-content.md): shared identity, banners, and footer.
|
|
75
|
+
- [Content](content.md): page frontmatter, sections, blocks, notes, and checks.
|
|
76
|
+
- [Theme](theme.md): presets, overrides, layout, image sizing, and surfaces.
|
|
77
|
+
- [Typography](typography.md): typography roles, rhythms, and inspection.
|
|
78
|
+
- [Routes](routes.md): directory names, route IDs, URLs, and route images.
|
|
79
|
+
- [Images and Metadata](images-and-metadata.md): source formats, variants, and
|
|
80
|
+
generated manifests.
|
|
81
|
+
- [Commands](commands.md): CLI commands, npm scripts, options, and exit behavior.
|
|
82
|
+
- [Requirements and limitations](requirements.md): runtime dependencies,
|
|
83
|
+
optional tools, and current product boundaries.
|
|
84
|
+
|
|
85
|
+
## Troubleshooting
|
|
86
|
+
|
|
87
|
+
- [Common first problems](getting-started.md#common-first-problems)
|
|
88
|
+
- [Manage and restart local preview](local-development.md#manage-preview)
|
|
89
|
+
- [Rebuild a stale preview](local-development.md#rebuild-stale-preview)
|
|
90
|
+
- [Validate and sync content](content.md#validation-and-sync)
|
|
91
|
+
- [Inspect publishing failures](publishing.md)
|
|
92
|
+
- [Report a reproducible problem](https://github.com/janga/norna/issues)
|
|
93
|
+
|
|
94
|
+
## Engine Contributors
|
|
95
|
+
|
|
96
|
+
Start with [Engine Development](engine-development.md). Design documents live
|
|
97
|
+
under [`docs/design/`](design/), and planned work is tracked in
|
|
98
|
+
[BACKLOG.md](../BACKLOG.md).
|
|
99
|
+
|
|
100
|
+
## AI-Readable Access
|
|
101
|
+
|
|
102
|
+
The documentation source is Markdown and can be read directly from this
|
|
103
|
+
repository. The published site also exposes
|
|
104
|
+
[`llms.txt`](https://janga.github.io/norna/llms.txt), which links AI tools to
|
|
105
|
+
the authoritative Markdown entry points rather than duplicating them.
|
|
106
|
+
|
|
107
|
+
Norna is licensed under [GNU GPL v3](../LICENSE).
|
|
Binary file
|
package/docs/commands.md
CHANGED
|
@@ -101,7 +101,7 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
101
101
|
- `doctor`: prints resolved engine root, site project root, site directory,
|
|
102
102
|
content/config/image/public paths, generated manifest, Astro output paths, and
|
|
103
103
|
cache path.
|
|
104
|
-
- `config:check`: validates `site/config.
|
|
104
|
+
- `config:check`: validates `site/config.md` against the runtime config
|
|
105
105
|
reader.
|
|
106
106
|
- `content:check`: validates section structure, managed media references,
|
|
107
107
|
inline styles, and common content mistakes.
|
|
@@ -148,10 +148,11 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
148
148
|
server tracked under `.astro/`.
|
|
149
149
|
- `preview`: runs Astro preview with the `norna` Astro config.
|
|
150
150
|
- `astro`: runs Astro with the `norna` Astro config.
|
|
151
|
-
- `deploy`:
|
|
151
|
+
- `deploy`: discovers the GitHub repository and default branch, then builds and
|
|
152
|
+
publishes the already committed branch.
|
|
152
153
|
- `deploy:commit`: older convenience flow that builds, stages allowed site
|
|
153
154
|
changes, commits, pushes, and checks Pages.
|
|
154
|
-
- `deploy:watch`: follows
|
|
155
|
+
- `deploy:watch`: follows the included `deploy.yml` GitHub Pages workflow run.
|
|
155
156
|
|
|
156
157
|
## Deploy Watch Options
|
|
157
158
|
|
|
@@ -169,4 +170,6 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
169
170
|
```
|
|
170
171
|
|
|
171
172
|
Durations may use `ms`, `s`, or `m`, for example `500ms`, `10s`, or `15m`.
|
|
172
|
-
Without
|
|
173
|
+
Without repository and branch options, Norna discovers the current GitHub
|
|
174
|
+
repository and its default branch. Without `--sha`, the current `HEAD` is
|
|
175
|
+
monitored.
|