@janga/norna 0.7.11 → 0.7.13
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 +3 -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 +221 -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 +125 -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/SiteNavigation.astro +54 -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/docs/getting-started.md
CHANGED
|
@@ -1,206 +1,188 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Build Your First Norna Site
|
|
2
2
|
|
|
3
|
-
This
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
This tutorial takes the shortest path from an empty directory to a running,
|
|
4
|
+
edited, and verified Norna site. Follow the steps in order. Installation time
|
|
5
|
+
depends on your npm connection, but the site work itself should take about five
|
|
6
|
+
minutes.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
At the end you will have:
|
|
8
9
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
10
|
+
- a standalone site project with a pinned Norna version,
|
|
11
|
+
- a homepage with your own content and navigation,
|
|
12
|
+
- a complete visual preset,
|
|
13
|
+
- validated source files and a static build in `dist/`.
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
## Before You Start
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
You need:
|
|
18
|
+
|
|
19
|
+
- Node.js `22.12` or later,
|
|
20
|
+
- npm, which is included with Node.js,
|
|
21
|
+
- a terminal and a text editor.
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
ImageMagick is needed when you add raster images that Norna should process. It
|
|
24
|
+
is not needed to make the text-only first edit in this tutorial. GitHub CLI and
|
|
25
|
+
Playwright are not required.
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
See [Requirements and limitations](requirements.md) for platform details and
|
|
28
|
+
the current product boundaries.
|
|
22
29
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
directory:
|
|
30
|
+
## 1. Create And Run The Site
|
|
31
|
+
|
|
32
|
+
Run these commands from the directory where you keep projects:
|
|
26
33
|
|
|
27
34
|
```sh
|
|
28
|
-
cd path/to/your/projects
|
|
29
35
|
npx @janga/norna@latest init my-site
|
|
30
36
|
cd my-site
|
|
31
37
|
npm install
|
|
32
38
|
npm run dev
|
|
33
39
|
```
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
dependency, it delegates to the project's local version.
|
|
41
|
+
`init` creates the project before `npm install` runs. The generated
|
|
42
|
+
`package.json` pins the Norna engine version so this project keeps using the
|
|
43
|
+
same version until you update it deliberately.
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
site when `init` copies the starter files, including `package.json`. If you run
|
|
42
|
-
`npm install` in an empty directory, npm may walk up to a parent directory and
|
|
43
|
-
install dependencies for another project instead.
|
|
45
|
+
### Checkpoint: The Starter Is Visible
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
Open the URL printed by the development server. It is normally
|
|
48
|
+
`http://localhost:4321/`, but Norna uses another available port when necessary.
|
|
49
|
+
You should see the starter homepage and its section navigation.
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
Projects/
|
|
50
|
-
norna/
|
|
51
|
-
my-site/
|
|
52
|
-
```
|
|
51
|
+
Leave the development server running while you complete the next steps.
|
|
53
52
|
|
|
54
|
-
The
|
|
53
|
+
## 2. Replace The Homepage Content
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
- `.github/workflows/deploy.yml` for GitHub Pages
|
|
58
|
-
- `site/config.mjs`
|
|
59
|
-
- `site/theme.md`
|
|
60
|
-
- `site/sitewide-content.md`
|
|
61
|
-
- `site/content.md`
|
|
62
|
-
- `site/public/robots.txt`
|
|
55
|
+
Replace `site/content.md` with:
|
|
63
56
|
|
|
64
|
-
|
|
57
|
+
```md
|
|
58
|
+
---
|
|
59
|
+
title: My first Norna site
|
|
60
|
+
description: A website built from plain files.
|
|
61
|
+
---
|
|
65
62
|
|
|
66
|
-
|
|
63
|
+
## Welcome {#welcome}
|
|
67
64
|
|
|
68
|
-
|
|
69
|
-
GitHub project:
|
|
65
|
+
This page is written in Markdown. Norna provides its layout and navigation.
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
cd existing-project
|
|
73
|
-
npx @janga/norna@latest init . --type embedded --site-dir presentation
|
|
74
|
-
npm install
|
|
75
|
-
npm run norna:dev
|
|
76
|
-
```
|
|
67
|
+
## Next {#next}
|
|
77
68
|
|
|
78
|
-
|
|
79
|
-
Norna to the current project" instead of creating a new directory.
|
|
80
|
-
`--site-dir presentation` tells Norna to manage `presentation/` as the site
|
|
81
|
-
directory instead of the default `site/`.
|
|
82
|
-
|
|
83
|
-
Embedded setup keeps the surrounding project structure. It adds namespaced
|
|
84
|
-
`norna:*` scripts so Norna does not take over the project's normal `build`,
|
|
85
|
-
`test`, or deploy scripts.
|
|
86
|
-
|
|
87
|
-
Relevant documentation: [Commands](commands.md), [Site Structure](site-structure.md).
|
|
88
|
-
|
|
89
|
-
## First Edits
|
|
90
|
-
|
|
91
|
-
1. Edit `site/config.mjs` for the site's URL, language labels, GitHub
|
|
92
|
-
repository, and deploy settings.
|
|
93
|
-
2. Edit `site/sitewide-content.md` for the shared brand or logo, banners and
|
|
94
|
-
footer content.
|
|
95
|
-
3. Keep `site/theme.md` and select a complete theme preset. Add focused visual
|
|
96
|
-
overrides only when the preset needs adjustment.
|
|
97
|
-
4. Edit `site/content.md` for homepage title, description, Markdown sections,
|
|
98
|
-
text, Norna managed media blocks, alt text, and captions.
|
|
99
|
-
5. Put source images under `site/images/<section-id>/`, where `<section-id>`
|
|
100
|
-
matches a `## Section {#section-id}` heading in `site/content.md`.
|
|
101
|
-
6. Add optional route pages under
|
|
102
|
-
`site/routes/<NNN-route-id>/route-content.md`, for example
|
|
103
|
-
`site/routes/010-about/route-content.md`.
|
|
104
|
-
7. Put static files such as `robots.txt`, `CNAME`, and favicons under
|
|
105
|
-
`site/public/`.
|
|
106
|
-
8. Run:
|
|
107
|
-
|
|
108
|
-
```sh
|
|
109
|
-
npm run norna:config:check
|
|
110
|
-
npm run norna:content:check
|
|
111
|
-
npm run norna:sync
|
|
112
|
-
npm run norna:check
|
|
113
|
-
npm run build
|
|
69
|
+
Edit this file while the development server is running and the browser updates.
|
|
114
70
|
```
|
|
115
71
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
writes require a clean Git working tree so the operation is easy to roll back.
|
|
119
|
-
Publishing is normally done by committing the site files and pushing them with
|
|
120
|
-
Git; the starter GitHub Pages workflow runs the required checks before
|
|
121
|
-
publishing.
|
|
72
|
+
Each `##` heading is a page section. Its explicit `{#section-id}` gives the
|
|
73
|
+
section a stable identity and is required by Norna.
|
|
122
74
|
|
|
123
|
-
|
|
124
|
-
[Typography](typography.md), [Routes](routes.md), [Images And Metadata](images-and-metadata.md).
|
|
75
|
+
### Checkpoint: Content And Navigation Update
|
|
125
76
|
|
|
126
|
-
|
|
77
|
+
Return to the browser. The page should now contain `Welcome` and `Next`, and
|
|
78
|
+
the single-page navigation should link to those two sections. You should not
|
|
79
|
+
need to restart the server.
|
|
127
80
|
|
|
128
|
-
|
|
81
|
+
## 3. Set The Shared Brand
|
|
82
|
+
|
|
83
|
+
Replace `site/sitewide-content.md` with:
|
|
129
84
|
|
|
130
85
|
```yaml
|
|
131
86
|
---
|
|
132
|
-
|
|
87
|
+
navigation:
|
|
88
|
+
brand: My first Norna site
|
|
89
|
+
footer:
|
|
90
|
+
copyrightMessage: My first Norna site.
|
|
133
91
|
---
|
|
134
92
|
```
|
|
135
93
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
94
|
+
The brand and footer are site-wide content rather than page sections. If you
|
|
95
|
+
add routes later, they inherit these values.
|
|
96
|
+
|
|
97
|
+
### Checkpoint: The Brand Is Shared
|
|
98
|
+
|
|
99
|
+
The navigation should now display `My first Norna site`. The footer should show
|
|
100
|
+
the new message.
|
|
101
|
+
|
|
102
|
+
## 4. Choose A Complete Theme
|
|
139
103
|
|
|
140
|
-
|
|
104
|
+
Replace `site/theme.md` with:
|
|
141
105
|
|
|
142
106
|
```yaml
|
|
143
107
|
---
|
|
144
108
|
preset: project
|
|
145
|
-
layout:
|
|
146
|
-
pageWidth: 1240px
|
|
147
109
|
---
|
|
148
110
|
```
|
|
149
111
|
|
|
150
|
-
|
|
112
|
+
The preset supplies coordinated layout, typography, spacing, image sizing,
|
|
113
|
+
palette, and section surfaces. Add overrides only when a real site needs to
|
|
114
|
+
differ from the preset.
|
|
115
|
+
|
|
116
|
+
### Checkpoint: The Preset Is Active
|
|
117
|
+
|
|
118
|
+
The browser should refresh with the `project` presentation. Your content files
|
|
119
|
+
remain unchanged because presentation belongs in `theme.md`.
|
|
120
|
+
|
|
121
|
+
## 5. Check And Build
|
|
122
|
+
|
|
123
|
+
Open another terminal in `my-site` and run:
|
|
151
124
|
|
|
152
125
|
```sh
|
|
153
|
-
npm run norna:
|
|
126
|
+
npm run norna:check
|
|
127
|
+
npm run build
|
|
154
128
|
```
|
|
155
129
|
|
|
156
|
-
The
|
|
157
|
-
loaded by Norna. The command does not overwrite an existing reference file.
|
|
130
|
+
The check should complete without errors. The build should create:
|
|
158
131
|
|
|
159
|
-
|
|
160
|
-
|
|
132
|
+
```text
|
|
133
|
+
dist/
|
|
134
|
+
```
|
|
161
135
|
|
|
162
|
-
|
|
136
|
+
`dist/` is generated output. Continue editing the files under `site/`; do not
|
|
137
|
+
edit the built HTML as the source of the website.
|
|
163
138
|
|
|
164
|
-
|
|
139
|
+
### Checkpoint: The Source Produces A Clean Build
|
|
165
140
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
```
|
|
141
|
+
Confirm that both commands exit successfully and that `dist/index.html`
|
|
142
|
+
exists. You now have a complete local Norna workflow: edit, preview, check, and
|
|
143
|
+
build.
|
|
144
|
+
|
|
145
|
+
## What To Do Next
|
|
172
146
|
|
|
173
|
-
|
|
174
|
-
|
|
147
|
+
- [Add and manage images](content.md#managed-media-blocks)
|
|
148
|
+
- [Add another page](routes.md)
|
|
149
|
+
- [Inspect and adjust the theme](theme.md)
|
|
150
|
+
- [Configure the public URL](configuration.md)
|
|
151
|
+
- [Publish with GitHub Pages](publishing.md)
|
|
152
|
+
- [Browse complete and focused examples](../examples/README.md)
|
|
175
153
|
|
|
176
|
-
|
|
177
|
-
site
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
154
|
+
To add Norna inside an existing Node project instead of creating a standalone
|
|
155
|
+
site, see [Add an embedded site](how-to/embedded-site.md).
|
|
156
|
+
|
|
157
|
+
The [documentation map](README.md) separates task guides, explanation, and
|
|
158
|
+
reference so you can continue from the kind of question you have.
|
|
159
|
+
|
|
160
|
+
## Common First Problems
|
|
161
|
+
|
|
162
|
+
### The Default Port Is Occupied
|
|
163
|
+
|
|
164
|
+
Start the development server with:
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
npm run dev -- --kill
|
|
181
168
|
```
|
|
182
169
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
170
|
+
This tells Norna to stop the process occupying its standard port before
|
|
171
|
+
starting. The separator `--` is required so npm forwards `--kill` to Norna.
|
|
172
|
+
|
|
173
|
+
### Images Fail During Checking Or Building
|
|
186
174
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
Actions.
|
|
175
|
+
Install ImageMagick and confirm that either `magick` or the older `identify`
|
|
176
|
+
and `convert` commands are available. Then rerun the failed command.
|
|
190
177
|
|
|
191
|
-
|
|
178
|
+
### The Page Reports Invalid Content
|
|
192
179
|
|
|
193
|
-
|
|
194
|
-
[Theme](theme.md), [Typography](typography.md), [Routes](routes.md), and
|
|
195
|
-
[Configuration](configuration.md) before publishing a real site.
|
|
180
|
+
Run:
|
|
196
181
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
182
|
+
```sh
|
|
183
|
+
npm run norna:content:check
|
|
184
|
+
```
|
|
200
185
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
Use `norna typography presets` to inspect the installed preset and rhythm values
|
|
205
|
-
and `norna typography show` to inspect the resolved typography for the selected
|
|
206
|
-
site.
|
|
186
|
+
Read all reported issues before editing. Norna reports file and line context
|
|
187
|
+
for invalid sections and managed content blocks. See [Content](content.md) for
|
|
188
|
+
the accepted Markdown forms.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Add Norna To An Existing Project
|
|
2
|
+
|
|
3
|
+
Use embedded setup when the website should live inside an existing Node
|
|
4
|
+
project rather than in its own repository.
|
|
5
|
+
|
|
6
|
+
From the existing project root, run:
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npx @janga/norna@latest init . --type embedded --site-dir presentation
|
|
10
|
+
npm install
|
|
11
|
+
npm run norna:dev
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The arguments are intentionally different from standalone setup:
|
|
15
|
+
|
|
16
|
+
- `.` means that Norna should update the current project instead of creating a
|
|
17
|
+
new project directory.
|
|
18
|
+
- `--type embedded` preserves the surrounding project's role and scripts.
|
|
19
|
+
- `--site-dir presentation` puts the site source in `presentation/` instead of
|
|
20
|
+
the default `site/` directory.
|
|
21
|
+
|
|
22
|
+
Embedded setup adds `@janga/norna` as a project dependency and adds namespaced
|
|
23
|
+
`norna:*` npm scripts. It refuses to overwrite conflicting scripts or a
|
|
24
|
+
non-empty target site directory.
|
|
25
|
+
|
|
26
|
+
The surrounding project keeps its normal `build`, `test`, and deploy commands.
|
|
27
|
+
Use the added commands for the embedded site:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
npm run norna:check
|
|
31
|
+
npm run norna:build
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
See [Commands](../commands.md) for the complete script list and
|
|
35
|
+
[Site Structure](../site-structure.md) for source and generated files.
|
package/docs/publishing.md
CHANGED
|
@@ -1,52 +1,47 @@
|
|
|
1
1
|
# Publishing
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Norna includes a GitHub Pages workflow and deploy helpers. The public URL is
|
|
4
|
+
declared in `site/config.md`; repository and default branch are discovered from
|
|
5
|
+
GitHub when a deploy command runs.
|
|
6
6
|
|
|
7
7
|
Do not run deploy commands from the engine repository unless you deliberately
|
|
8
|
-
want to
|
|
8
|
+
want to deploy the documentation site.
|
|
9
9
|
|
|
10
10
|
## GitHub Pages Workflow
|
|
11
11
|
|
|
12
|
-
Each site repository
|
|
13
|
-
workflow:
|
|
12
|
+
Each site repository owns `.github/workflows/deploy.yml`. The starter workflow:
|
|
14
13
|
|
|
15
|
-
1.
|
|
16
|
-
2.
|
|
17
|
-
3.
|
|
14
|
+
1. runs for the repository's default branch,
|
|
15
|
+
2. checks out the site repository,
|
|
16
|
+
3. sets up Node and image tools,
|
|
18
17
|
4. restores the generated image cache,
|
|
19
|
-
5. runs `npm ci`,
|
|
20
|
-
6.
|
|
21
|
-
|
|
22
|
-
7. uploads `dist/`,
|
|
23
|
-
8. deploys to GitHub Pages.
|
|
18
|
+
5. runs `npm ci` and `npm run build`,
|
|
19
|
+
6. uploads `dist/`,
|
|
20
|
+
7. deploys the artifact to GitHub Pages.
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
In the GitHub repository settings, set Pages to build from GitHub Actions.
|
|
23
|
+
Site-specific public files such as `site/public/CNAME`, `robots.txt` and
|
|
26
24
|
`sitemap.xml` belong in the site repository.
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
`site/config.mjs`:
|
|
26
|
+
For a project site without a custom domain, include the repository path in
|
|
27
|
+
`site/config.md`:
|
|
31
28
|
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
29
|
+
```yaml
|
|
30
|
+
---
|
|
31
|
+
url: https://owner.github.io/repository-name/
|
|
32
|
+
---
|
|
37
33
|
```
|
|
38
34
|
|
|
39
|
-
For a custom domain
|
|
35
|
+
For a custom domain or root-hosted site:
|
|
40
36
|
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
37
|
+
```yaml
|
|
38
|
+
---
|
|
39
|
+
url: https://example.com/
|
|
40
|
+
---
|
|
46
41
|
```
|
|
47
42
|
|
|
48
|
-
Norna
|
|
49
|
-
|
|
43
|
+
Norna derives the base path from the URL pathname and applies it to generated
|
|
44
|
+
internal links, favicons, managed images and root-relative Markdown links.
|
|
50
45
|
|
|
51
46
|
## Deploy An Already Committed Branch
|
|
52
47
|
|
|
@@ -56,16 +51,17 @@ Use:
|
|
|
56
51
|
npm run norna:deploy
|
|
57
52
|
```
|
|
58
53
|
|
|
59
|
-
The
|
|
54
|
+
The command requires an authenticated GitHub CLI. It asks GitHub for the
|
|
55
|
+
current repository and its default branch, then:
|
|
60
56
|
|
|
61
|
-
- requires the current branch to
|
|
62
|
-
- requires a clean worktree before build,
|
|
57
|
+
- requires the current branch to be that default branch,
|
|
58
|
+
- requires a clean worktree before the build,
|
|
63
59
|
- fetches `origin`,
|
|
64
60
|
- refuses to proceed when the branch is behind or diverged,
|
|
65
61
|
- runs the full build,
|
|
66
62
|
- requires the build to leave the worktree clean,
|
|
67
|
-
- pushes only when
|
|
68
|
-
- checks the
|
|
63
|
+
- pushes only when local `HEAD` is ahead of the remote branch,
|
|
64
|
+
- checks the included `deploy.yml` GitHub Pages workflow.
|
|
69
65
|
|
|
70
66
|
It does not create commits or push uncommitted changes.
|
|
71
67
|
|
|
@@ -77,11 +73,11 @@ The older convenience flow remains available:
|
|
|
77
73
|
npm run norna:deploy:commit -- "Commit message"
|
|
78
74
|
```
|
|
79
75
|
|
|
80
|
-
It
|
|
81
|
-
The allowlist is implemented in
|
|
82
|
-
site
|
|
83
|
-
generated image
|
|
84
|
-
|
|
76
|
+
It discovers the same repository/default branch, builds, stages only allowed
|
|
77
|
+
site changes, commits, pushes and checks Pages. The allowlist is implemented in
|
|
78
|
+
`scripts/deploy-site.mjs` and includes site content and configuration, expected
|
|
79
|
+
managed images and generated image state, public files, package files and
|
|
80
|
+
renderer source changes.
|
|
85
81
|
|
|
86
82
|
## Watch A Deploy
|
|
87
83
|
|
|
@@ -91,14 +87,19 @@ Use:
|
|
|
91
87
|
npm run norna:deploy:watch
|
|
92
88
|
```
|
|
93
89
|
|
|
94
|
-
By default it monitors
|
|
95
|
-
|
|
90
|
+
By default it monitors `deploy.yml` for the current `HEAD` in the discovered
|
|
91
|
+
repository and default branch. Useful one-run overrides include:
|
|
96
92
|
|
|
97
93
|
```sh
|
|
98
94
|
npm run norna:deploy:watch -- --timeout 20m --interval 5s
|
|
99
95
|
npm run norna:deploy:watch -- --sha <commit-sha>
|
|
96
|
+
npm run norna:deploy:watch -- --repo owner/name --branch main
|
|
100
97
|
```
|
|
101
98
|
|
|
102
|
-
The
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
The default poll interval is 10 seconds, timeout is 15 minutes and recent-run
|
|
100
|
+
limit is 10. `--workflow`, `--site-url` and `--limit` provide further one-run
|
|
101
|
+
overrides; these operational values do not belong in `config.md`.
|
|
102
|
+
|
|
103
|
+
The monitor prints the run id, run URL, Actions URL, branch, commit SHA, status
|
|
104
|
+
and public site URL. On failures it fetches failed job details and a log
|
|
105
|
+
excerpt.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Requirements And Limitations
|
|
2
|
+
|
|
3
|
+
This page separates requirements for ordinary site work from optional tooling
|
|
4
|
+
and current product boundaries.
|
|
5
|
+
|
|
6
|
+
## Required For Every Site
|
|
7
|
+
|
|
8
|
+
- Node.js `22.12.0` or later.
|
|
9
|
+
- npm or another package manager capable of installing the project-local
|
|
10
|
+
`@janga/norna` dependency. Generated standalone sites use npm scripts and a
|
|
11
|
+
committed `package-lock.json` by default.
|
|
12
|
+
- A terminal and a text editor.
|
|
13
|
+
|
|
14
|
+
## Required For Managed Raster Images
|
|
15
|
+
|
|
16
|
+
ImageMagick is required when Norna reads raster image dimensions or generates
|
|
17
|
+
responsive raster variants. Norna accepts either the current `magick` command
|
|
18
|
+
or the older `identify` and `convert` commands.
|
|
19
|
+
|
|
20
|
+
Static SVG images with an intrinsic aspect ratio are rendered directly and do
|
|
21
|
+
not need raster variants. See [Images and Metadata](images-and-metadata.md) for
|
|
22
|
+
the supported managed-image behavior.
|
|
23
|
+
|
|
24
|
+
## Optional Tools
|
|
25
|
+
|
|
26
|
+
- Git is strongly recommended for reviewing and restoring site changes. It is
|
|
27
|
+
used by the normal commit-and-push publishing workflow.
|
|
28
|
+
- GitHub CLI (`gh`) is needed only for Norna's deploy status and monitoring
|
|
29
|
+
helpers.
|
|
30
|
+
- Playwright Chromium is needed only for navigation diagnostics used while
|
|
31
|
+
developing the Norna engine.
|
|
32
|
+
|
|
33
|
+
Neither GitHub CLI nor Playwright is required to edit, preview, check, or build
|
|
34
|
+
an ordinary Norna site.
|
|
35
|
+
|
|
36
|
+
## Current Product Boundaries
|
|
37
|
+
|
|
38
|
+
- Norna builds generated static output into `dist/`.
|
|
39
|
+
- GitHub Pages is the only publishing provider with an included integration.
|
|
40
|
+
Other static hosts can serve the generated files, but Norna does not
|
|
41
|
+
currently configure or publish to them.
|
|
42
|
+
- Norna provides its own site model and presentation layer. A project does not
|
|
43
|
+
supply custom page templates, component trees, or rendering logic through
|
|
44
|
+
the normal site interface.
|
|
45
|
+
- Norna is intended for content-driven websites. Dynamic applications,
|
|
46
|
+
database-backed publishing, and visual CMS editing are outside its current
|
|
47
|
+
scope.
|
|
48
|
+
- Norna is pre-1.0. Breaking changes to files, configuration, and commands may
|
|
49
|
+
occur between releases and should be reviewed before updating a project.
|
|
50
|
+
|
|
51
|
+
These constraints are part of the product's current scope, not hidden setup
|
|
52
|
+
steps. Start with [the tutorial](getting-started.md), and use
|
|
53
|
+
[`norna engine:version`](commands.md#command-summary) to inspect the version
|
|
54
|
+
installed by an existing project.
|
package/docs/routes.md
CHANGED
|
@@ -13,7 +13,7 @@ an optional route-local `theme.md`. The route theme replaces the root visual
|
|
|
13
13
|
theme for that route and can select any complete top-level theme preset. Route
|
|
14
14
|
directories cannot contain technical site
|
|
15
15
|
configuration; technical configuration stays in the selected site directory's
|
|
16
|
-
top-level `config.
|
|
16
|
+
top-level `config.md`.
|
|
17
17
|
|
|
18
18
|
## Route Directory Format
|
|
19
19
|
|
package/docs/site-structure.md
CHANGED
|
@@ -9,7 +9,7 @@ The selected site directory defaults to `site/`:
|
|
|
9
9
|
|
|
10
10
|
```text
|
|
11
11
|
site/
|
|
12
|
-
|-- config.
|
|
12
|
+
|-- config.md
|
|
13
13
|
|-- theme.md
|
|
14
14
|
|-- sitewide-content.md
|
|
15
15
|
|-- content.md
|
|
@@ -28,7 +28,7 @@ site/
|
|
|
28
28
|
|
|
29
29
|
Use `NORNA_SITE_DIR` or `norna --site-dir <path>` to select another
|
|
30
30
|
site directory. Without an explicit site directory, commands first accept the
|
|
31
|
-
current directory when it contains both `config.
|
|
31
|
+
current directory when it contains both `config.md` and `content.md`.
|
|
32
32
|
Otherwise, commands started from a subdirectory walk upward until they find the
|
|
33
33
|
default `site/` directory containing those files.
|
|
34
34
|
`theme.md` is required. It can contain only a complete preset selection.
|
|
@@ -37,7 +37,7 @@ default `site/` directory containing those files.
|
|
|
37
37
|
|
|
38
38
|
Version these files in a site repository:
|
|
39
39
|
|
|
40
|
-
- `site/config.
|
|
40
|
+
- `site/config.md`: public URL and optional language and smooth scrolling.
|
|
41
41
|
- `site/theme.md`: required site-wide visual theme. It normally selects a
|
|
42
42
|
complete preset and may add focused layout, image, typography, palette, or
|
|
43
43
|
section-surface overrides.
|
|
@@ -75,7 +75,7 @@ Do not edit these by hand:
|
|
|
75
75
|
|
|
76
76
|
Favicons are convention-based. Put files such as `favicon.svg`, `favicon.ico`,
|
|
77
77
|
`favicon.png`, or `apple-touch-icon.png` in `site/public/`. The renderer emits
|
|
78
|
-
icon links only for files that exist and prefixes them with
|
|
78
|
+
icon links only for files that exist and prefixes them with the base path
|
|
79
79
|
when the site is published below a path such as `/repository-name/`.
|
|
80
80
|
|
|
81
81
|
## Engine Repository Layout
|
package/docs/sitewide-content.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
`site/sitewide-content.md` contains content and settings shared by the whole site. It
|
|
4
4
|
is separate from `content.md`, which defines the homepage, and from
|
|
5
|
-
`config.
|
|
5
|
+
`config.md`, which defines the public URL and optional language and scroll
|
|
6
|
+
behaviour.
|
|
6
7
|
|
|
7
8
|
## Site identity
|
|
8
9
|
|
package/docs/theme.md
CHANGED
|
@@ -263,3 +263,21 @@ technical configuration.
|
|
|
263
263
|
Section surfaces render as full-width horizontal bands while the section
|
|
264
264
|
content keeps the normal page and image widths. Links keep the palette's global
|
|
265
265
|
accent color.
|
|
266
|
+
|
|
267
|
+
## Common Questions
|
|
268
|
+
|
|
269
|
+
### Should every route select its own preset?
|
|
270
|
+
|
|
271
|
+
No. A route without its own `theme.md` inherits the root theme, which is the
|
|
272
|
+
normal choice when the site should keep one visual expression.
|
|
273
|
+
|
|
274
|
+
Add a route theme only when the route should intentionally look different. If
|
|
275
|
+
the route should keep the same preset but demonstrate a focused change, repeat
|
|
276
|
+
the root preset in the route theme and override only that setting. This is
|
|
277
|
+
necessary because a route theme replaces the root visual theme rather than
|
|
278
|
+
merging with it.
|
|
279
|
+
|
|
280
|
+
For example, a route demonstrating section surfaces may keep `preset: project`
|
|
281
|
+
and change only `presentation.sectionSurfaces`. A route demonstrating media or
|
|
282
|
+
content blocks should normally inherit the root preset so that the media or
|
|
283
|
+
content remains the only variable being compared.
|