Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Dependencies
node_modules/

# Astro build output
dist/
.astro/

# Package tarballs
*.tgz

# Local env and editor
.env
.env.*
.DS_Store
*.log
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@ All notable changes, newest first. Versions follow semver.

## Unreleased

## 0.5.0 — 2026-10-16

- **Fixed: every `npx` bin was a silent no-op.** The CLI guard compared `import.meta.url` to the basename of `process.argv[1]`, but npm runs bins through a `node_modules/.bin/*` symlink, so `argv[1]` was the link (`astro-seo-llms`) and never matched the real file (`llms-txt.mjs`). `npx astro-seo-llms`, `npm run` build hooks and the `github:RelayStack/...` form all exited `0` and wrote nothing. Now resolved with `realpathSync` + `pathToFileURL`, covered by a regression test that executes a bin through a symlink.
- New: `astro-seo-toolkit/integration` — a real Astro integration that writes `llms.txt`, `llms-full.txt`, `sitemap.xml` and `robots.txt` during `astro build`. Exposes `generate()`, `writeFiles()` and `normalizeOptions()` for build scripts.
- New bins: `astro-seo-toolkit` (everything at once) and `astro-seo-check` (validator).
- New: `scripts/sync-skill.mjs` generates the skill's vendored script copies; `npm run check:skill` fails CI if they drift.
- Usage hints now print the `npx astro-seo-*` invocation instead of `node <file>.mjs`.
- Docs: README rewritten — who it's for, Astro integration, comparison table, tighter install paths; social card redesigned and exported to `docs/social-preview.png`.
- Packaging: `engines`, `publishConfig`, optional `astro` peer dependency, expanded keywords, `.gitignore`.
- Tests: 33 (was 27).

## 0.4.0 — 2026-10-11

- `llms-full.mjs`: spec-companion generator with full bodies inlined + `--limit` guard
Expand Down
3 changes: 2 additions & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ authors:
website: "https://github.com/RelayStack/astro-seo-toolkit"
repository-code: "https://github.com/RelayStack/astro-seo-toolkit"
license: MIT
version: 0.4.0
version: 0.5.0
date-released: "2026-10-16"
83 changes: 83 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, colour, religion, or sexual
identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behaviour that contributes to a positive environment:

- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologising to those affected by our mistakes,
and learning from the experience
- Focusing on what is best for the community, not just for us as individuals

Examples of unacceptable behaviour:

- Sexualised language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email address,
without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Maintainers are responsible for clarifying and enforcing these standards and
will take appropriate and fair corrective action in response to any behaviour
they deem inappropriate, threatening, offensive, or harmful.

Maintainers have the right and responsibility to remove, edit, or reject
comments, commits, code, issues, and other contributions that are not aligned
with this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behaviour may be
reported to the maintainers by opening a report through GitHub. All complaints
will be reviewed and investigated promptly and fairly. Maintainers are obligated
to respect the privacy and security of the reporter of any incident.

## Enforcement Guidelines

Maintainers will follow these Community Impact Guidelines in determining the
consequences for any action they deem in violation of this Code of Conduct:

**1. Correction** — A private, written warning from maintainers, providing
clarity around the nature of the violation and an explanation of why the
behaviour was inappropriate, possibly including a public apology.

**2. Warning** — A warning with consequences for continued behaviour, including
no interaction with the people involved for a specified period of time.

**3. Temporary Ban** — A temporary ban from any sort of interaction or public
communication with the community for a specified period of time.

**4. Permanent Ban** — A permanent ban from any sort of public interaction
within the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

[homepage]: https://www.contributor-covenant.org
7 changes: 4 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@ Questions and ideas go to [Discussions](https://github.com/RelayStack/astro-seo-

- Zero dependencies in `seo-toolkit/` and `skills/astro-seo/scripts/`. Node 18+ stdlib only.
- Every helper works as CLI and import, with usage errors on bad flags and non-zero exit on failure.
- `skills/astro-seo/scripts/` must stay byte-identical to `seo-toolkit/` (enforced by test). Edit the `seo-toolkit/` copy, then copy over.
- `skills/astro-seo/scripts/` is generated from `seo-toolkit/` by `npm run sync:skill` and must stay byte-identical. Edit the `seo-toolkit/` copy, then run `npm run sync:skill`. `npm test` and `npm run check:skill` both fail on drift.
- Bins are executed through a `node_modules/.bin/` symlink by npm. Detect "am I the CLI?" by comparing resolved paths (`pathToFileURL(realpathSync(process.argv[1]))`), never by matching the file name — a suffix check silently turns the CLI into a no-op under `npx`.
- No locale defaults: country/currency explicit, neutral examples (`example.com`, Acme Co.).
- No personal data in code, docs, or tests — brand-neutral examples only.

## Flow

1. Fork, branch from `main` (`feat/…`, `fix/…`, `docs/…`).
2. Add tests in `seo-toolkit/test.mjs` (`npm test`, must stay green).
2. Add tests in `seo-toolkit/test.mjs` (`npm test`, must stay green). If you touched `seo-toolkit/`, run `npm run sync:skill` and commit the vendored copies.
3. Open a PR with what changed and how you verified it.
4. One concern per PR; docs updates ride with the feature they describe.

## Releases

Maintainers cut releases from `main` (`vX.Y.Z`, semver) with notes in CHANGELOG.md.
Maintainers bump `package.json` + `CHANGELOG.md` on `main`, then push a `vX.Y.Z` tag. CI (`.github/workflows/release.yml`) checks the tag matches the version and publishes to npm with provenance.
Loading
Loading