diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index 069021b..03d3a2a 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -9,7 +9,7 @@
"name": "storebound",
"source": ".",
"description": "Take a mobile app or game from nothing to Submit for review on both stores: skills for every store step and questionnaire plus the storebound CLI and MCP server.",
- "version": "0.7.0",
+ "version": "0.7.1",
"category": "development",
"tags": [
"mobile",
diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json
index 09e4183..4a124ae 100644
--- a/.claude-plugin/plugin.json
+++ b/.claude-plugin/plugin.json
@@ -1,6 +1,6 @@
{
"name": "storebound",
- "version": "0.7.0",
+ "version": "0.7.1",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every questionnaire (Data safety, App access and demo accounts, account deletion, IARC, target audience, ads, App Privacy, age rating, export compliance), privacy, icons, screenshots and previews, validate, TestFlight, release management, and after launch: crash vitals, review replies, price sheets, store analytics, Product Page Optimization. Agent Skills plus a Bun CLI and MCP server (storebound); you press Submit. CRTkafa's own toolchain, open-sourced.",
"author": {
"name": "CRTkafa"
diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json
index 3f7f3f5..249b5bd 100644
--- a/.codex-plugin/plugin.json
+++ b/.codex-plugin/plugin.json
@@ -1,6 +1,6 @@
{
"name": "storebound",
- "version": "0.7.0",
+ "version": "0.7.1",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every questionnaire (Data safety, App access and demo accounts, account deletion, IARC, target audience, ads, App Privacy, age rating, export compliance), privacy, icons, screenshots and previews, validate, TestFlight, release management, and after launch: crash vitals, review replies, price sheets, store analytics, Product Page Optimization. Agent Skills plus a Bun CLI and MCP server (storebound); you press Submit. CRTkafa's own toolchain, open-sourced.",
"author": {
"name": "CRTkafa"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 857d0a4..4f5b5ab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 0.7.1 · 2026-10-13
+
+- Fix: README links and images on npmjs.com resolved against npmjs.com and gave 404 (`docs/README.md`, the logo).
+ Every README link and image is now absolute (git.crt.fyi), and a test keeps it that way.
+
## 0.7.0 · 2026-10-13
Agent-first: the AI does the whole job ("do it, don't ask") and the owner presses only the final public buttons, with
diff --git a/README.md b/README.md
index 2aa298b..1bf7789 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-

+
# storebound
@@ -8,14 +8,14 @@ Your AI agent does all of it with storebound: builds, uploads, store text, scree
in-app products and prices, the compliance forms, even the consoles that have no API. You only press Submit.
[](https://www.npmjs.com/package/storebound)
-[](LICENSE)
-[](CHANGELOG.md)
+[](https://git.crt.fyi/CRT/storebound/src/branch/main/LICENSE)
+[](https://git.crt.fyi/CRT/storebound/src/branch/main/CHANGELOG.md)
[](#install-and-start)
-[](package.json)
-[](skills)
-[](docs/mcp.md)
+[](https://git.crt.fyi/CRT/storebound/src/branch/main/package.json)
+[](https://git.crt.fyi/CRT/storebound/src/branch/main/skills)
+[](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/mcp.md)
-**Website: [storebound.dev](https://storebound.dev) · Docs: [docs/](docs/README.md) · `npx storebound init`**
+**Website: [storebound.dev](https://storebound.dev) · Docs: [docs/](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/README.md) · `npx storebound init`**
[](https://storebound.dev/#teaser)
@@ -31,8 +31,8 @@ and the console pages that have no API (the agent drives them from a `console pl

You press only the final public or irreversible buttons (Submit for review, releasing, App Privacy Publish, legal
-agreements) and answer, once and in one batch, the facts no file can prove. The full rules: [AGENTS.md](AGENTS.md);
-the whole journey step by step: [docs/journey.md](docs/journey.md).
+agreements) and answer, once and in one batch, the facts no file can prove. The full rules: [AGENTS.md](https://git.crt.fyi/CRT/storebound/src/branch/main/AGENTS.md);
+the whole journey step by step: [docs/journey.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/journey.md).
## You won't get rejected for the avoidable things
@@ -42,7 +42,7 @@ evidence as `file:line`, and the fix.

-Every rule, what it proves and what only a reviewer can see: [docs/rejections.md](docs/rejections.md).
+Every rule, what it proves and what only a reviewer can see: [docs/rejections.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/rejections.md).
## The desktop app: every app, both stores, one window
@@ -65,7 +65,7 @@ confirm, then your click. Same storebound underneath; store keys stay in the sys
Download for macOS, Windows and Linux: [storebound.dev/#download](https://storebound.dev/#download), or
-`storebound desktop --download` (checks the signature, never installs). Internals: [docs/desktop.md](docs/desktop.md).
+`storebound desktop --download` (checks the signature, never installs). Internals: [docs/desktop.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/desktop.md).
## Works with your AI, safe by design
@@ -75,8 +75,8 @@ stay in env vars or the gitignored `.storebound/`.

-Per-tool setup: [docs/getting-started.md](docs/getting-started.md#install-for-your-ai-tool) · MCP tools:
-[docs/mcp.md](docs/mcp.md) · Safety model: [docs/safety.md](docs/safety.md).
+Per-tool setup: [docs/getting-started.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/getting-started.md#install-for-your-ai-tool) · MCP tools:
+[docs/mcp.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/mcp.md) · Safety model: [docs/safety.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/safety.md).
## Install and start
@@ -93,7 +93,7 @@ npx storebound check # offline: config, limits, Data safety,
Every `npx storebound ...` below works as `bunx storebound ...` too.
Then ask your agent: "take my app to Google Play and the App Store". Claude Code plugin, credentials, coming from
-fastlane: [docs/getting-started.md](docs/getting-started.md). Desktop app: [storebound.dev/#download](https://storebound.dev/#download).
+fastlane: [docs/getting-started.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/getting-started.md). Desktop app: [storebound.dev/#download](https://storebound.dev/#download).
## What it covers
@@ -101,16 +101,16 @@ Store screenshots of the demo game, rendered by storebound in every size and lan

-- [The journey](docs/journey.md): every step from setup to Submit, what is API, what the agent drives in a console, what stays yours
-- [Rejection scan](docs/rejections.md): every rule with its App Store guideline or Play policy
-- [Commands](docs/commands.md): the full command reference
-- [Store art](docs/store-art.md): screenshots, fonts, previews, variants
-- [Growth extras and console forms](docs/growth.md): PPP prices, Apple Ads, web presence, RevenueCat, `console plan` / `console fill`
-- [Many apps, release trains, workflows](docs/studios.md) · [Listings in more languages](docs/listing-languages.md) · [Every API endpoint](docs/api.md)
-- [Skills](docs/skills.md) · [MCP server](docs/mcp.md) · [Safety model](docs/safety.md) · [Idempotency](docs/idempotency.md) · [Pitfalls](docs/pitfalls.md)
-- [Desktop app](docs/desktop.md) · [Desktop releases](docs/desktop-release.md) · [FAQ](docs/faq.md) · [Roadmap, contributing, credits](docs/project.md)
+- [The journey](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/journey.md): every step from setup to Submit, what is API, what the agent drives in a console, what stays yours
+- [Rejection scan](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/rejections.md): every rule with its App Store guideline or Play policy
+- [Commands](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/commands.md): the full command reference
+- [Store art](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/store-art.md): screenshots, fonts, previews, variants
+- [Growth extras and console forms](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/growth.md): PPP prices, Apple Ads, web presence, RevenueCat, `console plan` / `console fill`
+- [Many apps, release trains, workflows](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/studios.md) · [Listings in more languages](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/listing-languages.md) · [Every API endpoint](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/api.md)
+- [Skills](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/skills.md) · [MCP server](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/mcp.md) · [Safety model](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/safety.md) · [Idempotency](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/idempotency.md) · [Pitfalls](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/pitfalls.md)
+- [Desktop app](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/desktop.md) · [Desktop releases](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/desktop-release.md) · [FAQ](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/faq.md) · [Roadmap, contributing, credits](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/project.md)
## Contributing and license
-Issues and pull requests are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md) (`bun run ci` must be green).
-MIT, see [LICENSE](LICENSE). Copyright (c) 2026 CRTkafa. Not affiliated with Google or Apple.
+Issues and pull requests are welcome; see [CONTRIBUTING.md](https://git.crt.fyi/CRT/storebound/src/branch/main/CONTRIBUTING.md) (`bun run ci` must be green).
+MIT, see [LICENSE](https://git.crt.fyi/CRT/storebound/src/branch/main/LICENSE). Copyright (c) 2026 CRTkafa. Not affiliated with Google or Apple.
diff --git a/gemini-extension.json b/gemini-extension.json
index 3948e38..6357059 100644
--- a/gemini-extension.json
+++ b/gemini-extension.json
@@ -1,6 +1,6 @@
{
"name": "storebound",
- "version": "0.7.0",
+ "version": "0.7.1",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every questionnaire (Data safety, App access and demo accounts, account deletion, IARC, target audience, ads, App Privacy, age rating, export compliance), privacy, icons, screenshots and previews, validate, TestFlight, release management, and after launch: crash vitals, review replies, price sheets, store analytics, Product Page Optimization. Agent Skills plus a Bun CLI and MCP server (storebound); you press Submit. CRTkafa's own toolchain, open-sourced.",
"contextFileName": "GEMINI.md",
"mcpServers": {
diff --git a/package.json b/package.json
index 4bb8cd9..81c8601 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "storebound",
- "version": "0.7.0",
+ "version": "0.7.1",
"desktopVersion": "0.1.0",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every store questionnaire (incl. account deletion and App Review demo accounts), privacy, icons, screenshots and previews, TestFlight. After launch: crash vitals, review replies, price sheets, analytics and Product Page Optimization. One config, a CLI (Node 20+ or Bun), an MCP server and Agent Skills for your AI coding agent.",
"license": "MIT",
diff --git a/tests/docs-links.test.ts b/tests/docs-links.test.ts
index 3aff676..88f35df 100644
--- a/tests/docs-links.test.ts
+++ b/tests/docs-links.test.ts
@@ -67,6 +67,11 @@ describe('links resolve', () => {
test('README.md and docs/*.md', () => {
expect([join(ROOT, 'README.md'), ...docs].flatMap(problems)).toEqual([]);
});
+ test('README.md has only absolute links and images (npm renders it on npmjs.com, where relative paths 404)', () => {
+ const md = readFileSync(join(ROOT, 'README.md'), 'utf8');
+ const rel = [...md.matchAll(/!?\]\((?!https?:|#|mailto:)([^)\s]+)\)|(?:src|href)="(?!https?:|#|mailto:)([^"]+)"/g)].map(m => m[1] ?? m[2]);
+ expect(rel).toEqual([]);
+ });
test('site pages', () => {
const pages = ['site/index.html', 'site/desktop/index.html'].map(p => join(ROOT, p)).filter(existsSync);
expect(pages.flatMap(problems)).toEqual([]);