@rm-industries/create-forge 0.4.0-beta.2 → 0.4.0-beta.3

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.
@@ -11,6 +11,30 @@ The template's `.editorconfig` shares UTF-8, LF, final-newline, two-space, and
11
11
  120-column settings with supported editors and Oxfmt. `oxfmt.config.ts` contains
12
12
  only formatter-specific behavior such as quote and import ordering.
13
13
 
14
+ ## Start here
15
+
16
+ The generated documentation is organized by task:
17
+
18
+ - [Getting started and site configuration](docs/guides/getting-started.md)
19
+ covers installation, local development, branding, identity assets, pages, and
20
+ the first verification pass.
21
+ - [Content and CMS editing](docs/guides/content-and-cms.md) covers Markdown
22
+ articles, drafts, Sveltia local mode, deployed editing, shared model changes,
23
+ media, and recovery.
24
+ - [Themes and accessibility](docs/guides/themes-and-accessibility.md) covers
25
+ themes, fonts, layout semantics, automated checks, and manual review.
26
+ - [Quality checks, dependency updates, and troubleshooting](docs/guides/quality-and-troubleshooting.md)
27
+ explains the validation layers, common failures, Dependabot review, and safe
28
+ support requests.
29
+ - [GitHub Pages deployment](docs/github-pages.md) covers project sites, custom
30
+ domains, environment protection, and deployment diagnosis.
31
+ - [Accessibility review](docs/accessibility-checklist.md) and the
32
+ [Lighthouse performance budget](docs/performance-budget.md) record the
33
+ generated baseline and the manual checks projects must maintain.
34
+
35
+ The remainder of this README is the complete command and implementation
36
+ reference.
37
+
14
38
  | Command | Purpose |
15
39
  | ------------------------ | ---------------------------------------------------------------- |
16
40
  | `npm run dev` | Start Astro's local development server. |
@@ -0,0 +1,123 @@
1
+ # Content and CMS editing
2
+
3
+ Forge stores article content as Markdown in `src/content/articles/`. Astro and
4
+ Sveltia use the same model from
5
+ `src/config/content-models/articles.ts`, so field rules are not duplicated.
6
+
7
+ ## Publish an article in Markdown
8
+
9
+ Create `src/content/articles/my-first-article.md`:
10
+
11
+ ```md
12
+ ---
13
+ title: My first article
14
+ description: What I learned while building this site.
15
+ publishedAt: 2026-09-02
16
+ tags:
17
+ - notes
18
+ draft: false
19
+ ---
20
+
21
+ # My first article
22
+
23
+ Write the article body here.
24
+ ```
25
+
26
+ The file name becomes the article slug. Use a unique lowercase, hyphenated file
27
+ name. Required fields, dates, defaults, and body content are validated during
28
+ development, type checking, and builds.
29
+
30
+ Set `draft: true` while writing. Draft articles appear during local development
31
+ but are omitted from production article pages and RSS output. Before publishing:
32
+
33
+ ```sh
34
+ npm run typecheck
35
+ npm test
36
+ npm run build
37
+ npm run validate:build
38
+ ```
39
+
40
+ Then inspect the article route and `/rss.xml` in the production preview:
41
+
42
+ ```sh
43
+ npm run preview
44
+ ```
45
+
46
+ ## Edit content with Sveltia locally
47
+
48
+ Local editing writes directly to the checked-out project; it does not require a
49
+ GitHub token.
50
+
51
+ 1. Start the site with `npm run dev`.
52
+ 2. Open the printed local address with `/admin/`, normally
53
+ `http://localhost:4321/admin/`.
54
+ 3. Choose **Work with Local Repository**.
55
+ 4. Grant access to the generated project root, not only the content folder.
56
+ 5. Create or edit an article and save it.
57
+ 6. Review the resulting files with Git, run the checks above, and commit them
58
+ through the normal project workflow.
59
+
60
+ A Chromium-based browser is the supported baseline for the local directory
61
+ picker. The browser controls directory permission; if access is denied or
62
+ revoked, reload `/admin/` and select the project again. Sveltia does not run a
63
+ separate local proxy server in this setup.
64
+
65
+ ## Configure the deployed CMS
66
+
67
+ Edit `src/integrations/sveltia/config.ts` and replace:
68
+
69
+ ```ts
70
+ repo: 'your-github-user/your-repository',
71
+ ```
72
+
73
+ with the same `owner/repository` configured in `src/config/site.ts`. The
74
+ generated backend targets `main` and offers Sveltia's GitHub token flow. Tokens
75
+ are entered by each editor in the CMS and must never be committed to the
76
+ repository, configuration, documentation, or environment files.
77
+
78
+ Before enabling editors, decide who may push to `main`, which branch protections
79
+ apply, and whether the project needs a supported OAuth service instead of
80
+ personal tokens. Treat `/admin/` as an editing application: it is excluded from
81
+ search indexing and public Lighthouse budgets, but it is still publicly
82
+ reachable on a deployed static site.
83
+
84
+ ## Change article fields
85
+
86
+ Edit only `src/config/content-models/articles.ts`. The registry passes the model
87
+ to both the Astro and Sveltia adapters.
88
+
89
+ When adding or changing a field:
90
+
91
+ 1. choose whether it is required and whether it needs a default;
92
+ 2. update existing Markdown files to satisfy the new model;
93
+ 3. update pages or components that render the value;
94
+ 4. update or add model, Astro, Sveltia, and preview tests; and
95
+ 5. run `npm run quality:core` before checking the editor manually.
96
+
97
+ Do not create a separate CMS YAML schema. A second schema can drift from the
98
+ validation applied during builds.
99
+
100
+ ## Media
101
+
102
+ The default CMS stores uploaded media under `public/assets/` and publishes it
103
+ from `/assets`. Add only purposeful assets, keep file sizes appropriate for the
104
+ [performance budget](../performance-budget.md), and provide useful alternative
105
+ text where media conveys meaning. Decorative imagery should use empty
106
+ alternative text at its rendering site.
107
+
108
+ ## Recover from an editing problem
109
+
110
+ - If an article is missing in production, confirm `draft` is `false`, its front
111
+ matter passes `npm run typecheck`, and the file extension is `.md` or
112
+ `.mdx`.
113
+ - If the CMS shows the wrong fields, confirm the model is registered in
114
+ `src/config/content-models/registry.ts` and reload the editor.
115
+ - If local CMS changes appear in an unexpected directory, revoke the browser's
116
+ directory permission and select the project root again.
117
+ - If deployed authentication fails, verify the repository identifier, branch,
118
+ token permissions, and organization access before changing content fields.
119
+ - If a save produced an unwanted change, use Git to inspect and restore the
120
+ affected content file before committing it.
121
+
122
+ For broader command failures, use
123
+ [quality checks and troubleshooting](quality-and-troubleshooting.md).
@@ -0,0 +1,96 @@
1
+ # Getting started and site configuration
2
+
3
+ This guide takes a newly generated Forge project from installation to a branded
4
+ local site. Run every command from the project root.
5
+
6
+ ## Install and start the site
7
+
8
+ Use a supported Node.js and npm version from the `engines` field in
9
+ `package.json`, then install the committed dependency graph:
10
+
11
+ ```sh
12
+ npm ci
13
+ npm run dev
14
+ ```
15
+
16
+ Astro prints the local address, normally `http://localhost:4321`. Stop the
17
+ server with `Control+C`.
18
+
19
+ Use `npm ci`, rather than `npm install`, when reproducing the committed project.
20
+ Use `npm install <package>` only when deliberately changing dependencies and
21
+ commit both `package.json` and `package-lock.json` afterward.
22
+
23
+ ## Change the site identity
24
+
25
+ Edit `src/config/site.ts`. The exported `site` object is the single source for
26
+ page metadata, navigation, feeds, the manifest, and CMS branding.
27
+
28
+ ```ts
29
+ export const site = defineSiteConfig({
30
+ name: 'Example Studio',
31
+ description: 'Notes about thoughtful product design.',
32
+ author: 'Example Team',
33
+ url: 'https://example.com',
34
+ repository: 'example/example-site',
35
+ language: 'en',
36
+ socialImage: '/social-card.svg',
37
+ navigation: [
38
+ { label: 'Home', href: '/' },
39
+ { label: 'Articles', href: '/articles/' },
40
+ { label: 'About', href: '/about/' },
41
+ ],
42
+ socialLinks: [{ label: 'GitHub', href: 'https://github.com/example' }],
43
+ });
44
+ ```
45
+
46
+ Use the complete production URL for `url`. A GitHub Pages project site includes
47
+ its repository path, for example `https://example.github.io/example-site`.
48
+ Root-hosted and custom-domain sites use only their origin. The
49
+ [GitHub Pages guide](../github-pages.md) explains each form.
50
+
51
+ Keep `repository` in `owner/repository` form. An empty value is valid while a
52
+ repository does not exist, but configure it before using the deployed CMS.
53
+
54
+ ## Replace identity assets
55
+
56
+ - Replace `public/favicon.svg` with the browser icon.
57
+ - Replace `public/social-card.svg` with the default sharing image.
58
+ - Change `site.socialImage` when the sharing image has a different path.
59
+ - Edit `src/pages/about.astro` and the homepage copy in
60
+ `src/pages/index.astro` to describe the project.
61
+
62
+ Files under `public/` are copied to the production build without processing.
63
+ Reference them with site-relative paths and use the path helpers already used
64
+ by the template when a component must support a GitHub Pages project prefix.
65
+
66
+ ## Add a page
67
+
68
+ Create an Astro file under `src/pages/` and compose the shared layout:
69
+
70
+ ```astro
71
+ ---
72
+ import BaseLayout from '../layouts/BaseLayout.astro';
73
+ ---
74
+
75
+ <BaseLayout title="Contact" description="How to contact Example Studio.">
76
+ <h1>Contact</h1>
77
+ <p>Send us a message.</p>
78
+ </BaseLayout>
79
+ ```
80
+
81
+ Add the route to `site.navigation` if it belongs in primary navigation. Do not
82
+ add another `main` element: `BaseLayout` already supplies the document shell,
83
+ skip link, landmarks, metadata, header, and footer.
84
+
85
+ ## Verify the first customization
86
+
87
+ ```sh
88
+ npm run quality:core
89
+ npm run dev
90
+ ```
91
+
92
+ Inspect the homepage, the changed page, `/articles/`, and `/admin/` in the
93
+ browser. Run the complete `npm run quality` gate before opening a pull request.
94
+
95
+ Continue with [content and CMS editing](content-and-cms.md), then review
96
+ [themes and accessibility](themes-and-accessibility.md).
@@ -0,0 +1,118 @@
1
+ # Quality checks, dependency updates, and troubleshooting
2
+
3
+ Forge provides fast focused commands and one complete release-blocking command.
4
+ Run commands from the generated project root.
5
+
6
+ ## Choose the right check
7
+
8
+ ```sh
9
+ npm run quality:static
10
+ npm run quality:core
11
+ npm run quality
12
+ ```
13
+
14
+ - `quality:static` checks formatting, code, CSS, Markdown, spelling, unused code,
15
+ types, Astro diagnostics, and dependency policy.
16
+ - `quality:core` adds coverage-enforced unit tests, a production build, and
17
+ required-output validation.
18
+ - `quality` adds Playwright browser/accessibility tests and Lighthouse budgets.
19
+
20
+ Use the focused command while developing and run `npm run quality` before
21
+ requesting review. The complete pipeline stops at the first failure.
22
+
23
+ ## Fix common failures
24
+
25
+ ### Installation fails
26
+
27
+ Confirm the Node.js and npm versions satisfy `package.json`, then retry the
28
+ committed graph:
29
+
30
+ ```sh
31
+ npm ci
32
+ ```
33
+
34
+ Do not delete or regenerate `package-lock.json` merely to bypass an error. If a
35
+ dependency intentionally changes, use npm to update the manifest and lockfile
36
+ together and review the resulting install scripts and package contents.
37
+
38
+ ### Formatting or linting fails
39
+
40
+ Apply the available safe fixes, then rerun the reported check:
41
+
42
+ ```sh
43
+ npm run format:fix
44
+ npm run lint:code:fix
45
+ npm run lint:css:fix
46
+ npm run lint:markdown:fix
47
+ ```
48
+
49
+ Spelling, type, accessibility, and behavioral failures require a deliberate
50
+ source or dictionary change; do not suppress them without documenting why.
51
+
52
+ ### Type checking or Astro diagnostics fail
53
+
54
+ Run `npm run typecheck` and `npm run astro:check` separately for focused output.
55
+ Check content front matter, import paths, component props, and the shared content
56
+ model before changing compiler settings.
57
+
58
+ ### A browser test fails
59
+
60
+ Install the browser version required by the committed Playwright package when
61
+ working on a new machine:
62
+
63
+ ```sh
64
+ npx playwright install chromium
65
+ ```
66
+
67
+ Rerun `npm run test:e2e`. Screenshots and traces are written to
68
+ `test-results/`; the HTML report is written to `playwright-report/`. Both are
69
+ generated and ignored. CI retains them for failed runs.
70
+
71
+ ### Lighthouse fails
72
+
73
+ Run `npm run lighthouse:ci` and inspect `.lighthouseci/`. Confirm the test used
74
+ the production build, then compare the failing route and resource type with
75
+ `docs/performance-budget.md`. Optimize the change or document a deliberately
76
+ reviewed budget revision; do not raise a threshold only to pass CI.
77
+
78
+ ### The build succeeds but output is incomplete
79
+
80
+ Run `npm run validate:build`. It verifies the required pages and supporting
81
+ files and scans generated text for unresolved starter values. Add an output to
82
+ the validator when introducing a route that is part of the public contract.
83
+
84
+ ### GitHub Pages does not deploy
85
+
86
+ Open the `Project` workflow first. Deployment is intentionally blocked unless
87
+ all quality jobs pass on `main`. If they pass, inspect the `github-pages`
88
+ environment, Pages source, branch restrictions, URL configuration, and deploy
89
+ job. Follow the [GitHub Pages guide](../github-pages.md) rather than bypassing
90
+ the quality dependency.
91
+
92
+ ## Review dependency updates
93
+
94
+ Dependabot proposes npm and GitHub Actions updates. Before merging one:
95
+
96
+ 1. read the upstream release notes and security advisory;
97
+ 2. confirm the supported Node.js range and licenses remain acceptable;
98
+ 3. review changes to `package.json` and `package-lock.json` together;
99
+ 4. keep Sveltia updates within the exact content-model compatibility range;
100
+ 5. run `npm run audit`, `npm run quality`, and any affected manual check; and
101
+ 6. merge only after project and security workflows pass.
102
+
103
+ Do not widen `@rm-industries/content-model` peer compatibility inside a
104
+ generated project. Forge publishes tested content-model compatibility first,
105
+ then template dependency automation can adopt it. Existing generated projects
106
+ remain owner-maintained source and do not receive template files automatically.
107
+
108
+ High-severity audit exceptions are documented narrowly in `audit-ci.jsonc` and
109
+ `docs/performance-budget.md`. Review their expiry and exposure; do not copy an
110
+ exception to silence an unrelated advisory.
111
+
112
+ ## Ask for help safely
113
+
114
+ When reporting a reproducible problem, include the Node.js and npm versions,
115
+ operating system, exact command, error output, and the smallest safe reproduction.
116
+ Remove tokens, repository secrets, private URLs, and unpublished content. Follow
117
+ the upstream Forge `SECURITY.md` process for vulnerabilities rather than opening
118
+ a public issue.
@@ -0,0 +1,85 @@
1
+ # Themes and accessibility
2
+
3
+ Forge starts with four Catppuccin themes, bundled fonts, semantic layout
4
+ components, keyboard navigation, reduced-motion behavior, and automated
5
+ accessibility checks. Customization must preserve those user-facing guarantees.
6
+
7
+ ## Choose a theme
8
+
9
+ The site follows the operating-system color preference: Latte is the default
10
+ light theme and Mocha is the dark theme. Theme definitions live in
11
+ `src/themes/`, and `src/components/theme/ThemeHead.astro` initializes them.
12
+
13
+ The available `data-theme` values are `latte`, `frappe`, `macchiato`, and
14
+ `mocha`. If a project adds a theme control, apply one of those values to the
15
+ document element, persist only a validated value, and retain an operating-system
16
+ fallback. Test the control with JavaScript disabled so content and navigation
17
+ remain usable.
18
+
19
+ ## Change colors or add a theme
20
+
21
+ Keep theme values in `src/themes/` instead of scattering colors through Astro
22
+ components. Update `src/themes/site-theme.test.ts` whenever the registered theme
23
+ set or light/dark defaults change.
24
+
25
+ Prefer DaisyUI component classes in templates. Use Tailwind utilities only for
26
+ layout or behavior that DaisyUI does not provide, and keep ordinary CSS in
27
+ `src/styles/global.css` or `src/styles/print.css`. Do not add component-local CSS
28
+ for patterns that belong to a shared primitive.
29
+
30
+ After changing a theme, inspect text, links, controls, focus indicators, code,
31
+ cards, and article typography in both color schemes. Then run:
32
+
33
+ ```sh
34
+ npm run lint:css
35
+ npm run test:e2e
36
+ npm run lighthouse:ci
37
+ ```
38
+
39
+ ## Replace fonts
40
+
41
+ Fira Sans and Fira Code are installed through Fontsource and imported by
42
+ `src/styles/global.css`; no remote font service is used. To replace them:
43
+
44
+ ```sh
45
+ npm uninstall @fontsource/fira-sans @fontsource/fira-code
46
+ npm install @fontsource/inter @fontsource/source-code-pro
47
+ ```
48
+
49
+ Replace the imports and the `--font-sans` and `--font-mono` values in
50
+ `src/styles/global.css`. Import only weights the site uses. For system fonts,
51
+ remove the Fontsource packages and imports and retain suitable generic fallback
52
+ families.
53
+
54
+ Run `npm run build` after changing fonts. Missing weights fail at build time;
55
+ unexpected transfer growth fails the Lighthouse budget.
56
+
57
+ ## Preserve layout semantics
58
+
59
+ - Wrap pages in `src/layouts/BaseLayout.astro`.
60
+ - Keep one level-one heading that identifies each page.
61
+ - Do not add a second `main` landmark inside the layout.
62
+ - Use real links and buttons rather than clickable generic elements.
63
+ - Preserve the skip link, visible focus states, current-page indication, and
64
+ named navigation.
65
+ - Use `navigation/Pagination.astro` only with real previous and next routes.
66
+ - Use the shared container and card primitives before creating a new variant.
67
+
68
+ ## Review accessibility
69
+
70
+ Automation catches many regressions but cannot judge wording, reading order,
71
+ alternative-text quality, or every visual state. After changing content,
72
+ navigation, themes, components, or interaction:
73
+
74
+ 1. run `npm run test:a11y`;
75
+ 2. complete `docs/accessibility-checklist.md` with the actual date, browsers,
76
+ screen sizes, input methods, and result;
77
+ 3. test keyboard-only use at desktop and mobile widths;
78
+ 4. inspect light, dark, reduced-motion, and print behavior; and
79
+ 5. record unresolved failures as issues rather than checking an unverified item.
80
+
81
+ The CMS interface is supplied by Sveltia and is outside the template's public
82
+ site audit. Evaluate that interface with the people who will edit the site.
83
+
84
+ See the [accessibility review checklist](../accessibility-checklist.md) and
85
+ [performance budget](../performance-budget.md) for the enforced baseline.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rm-industries/create-forge",
3
- "version": "0.4.0-beta.2",
3
+ "version": "0.4.0-beta.3",
4
4
  "description": "Create a content-driven Forge website",
5
5
  "keywords": [
6
6
  "astro",