fimo 2.2.0-staging.1 → 2.2.0-staging.11
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 +3 -2
- package/assets/agent-templates/_default/config.yaml +1 -0
- package/assets/agent-templates/broken-link-sweeper/config.yaml +1 -0
- package/assets/agent-templates/content-translator/config.yaml +1 -0
- package/assets/agent-templates/post-deploy-check/config.yaml +1 -0
- package/assets/agent-templates/seo-audit/config.yaml +1 -0
- package/assets/skills/fimo-cli/SKILL.md +5 -5
- package/assets/skills/fimo-cli/references/agents.md +2 -1
- package/assets/skills/fimo-cli/references/assets.md +42 -3
- package/assets/skills/fimo-cli/references/content.md +3 -3
- package/assets/skills/fimo-cli/references/deploy.md +2 -2
- package/assets/skills/fimo-cli/references/forms.md +3 -1
- package/assets/skills/fimo-cli/references/history.md +1 -0
- package/assets/skills/fimo-cli/references/init.md +30 -39
- package/assets/skills/fimo-cli/references/schedules.md +4 -2
- package/assets/skills/fimo-cli/references/webhooks.md +2 -0
- package/assets/skills/fimo-code/references/frameworks/next.md +4 -1
- package/assets/skills/fimo-code/references/frameworks/react-router.md +4 -3
- package/assets/skills/fimo-migration/SKILL.md +44 -13
- package/assets/skills/fimo-migration/references/frameworks/nextjs.md +8 -0
- package/assets/skills/fimo-migration/references/qa.md +30 -4
- package/assets/skills/fimo-migration/references/questions-and-improvements.md +188 -0
- package/assets/skills/fimo-migration/references/workers/content-planner.md +8 -3
- package/assets/skills/fimo-migration/references/workers/validator.md +20 -6
- package/assets/skills/fimo-migration/references/workers.md +17 -6
- package/assets/skills/fimo-migration/references/workflow.md +33 -6
- package/assets/skills/fimo-studio/SKILL.md +3 -1
- package/assets/skills/fimo-studio/references/agents.md +25 -0
- package/assets/skills/fimo-studio/references/preview-and-responsive.md +4 -1
- package/assets/skills/fimo-studio/references/visual-editing.md +9 -1
- package/dist/build/astro/config.js +2 -1
- package/dist/build/vite/plugins/preview-health.d.ts +4 -0
- package/dist/build/vite/plugins/preview-health.js +40 -0
- package/dist/cli/bundle.json +1 -1
- package/dist/cli/index.js +113 -113
- package/dist/runtime/content/client/collection-core.js +3 -2
- package/dist/runtime/content/client/core-types.d.ts +4 -3
- package/dist/runtime/content/client/internal.d.ts +2 -0
- package/dist/runtime/content/client/internal.js +54 -25
- package/dist/runtime/content/client/singleton-core.js +2 -1
- package/dist/runtime/content/index.d.ts +1 -1
- package/dist/runtime/content/index.js +1 -1
- package/dist/runtime/primitives/lib/index.d.ts +1 -1
- package/dist/runtime/primitives/lib/index.js +1 -1
- package/dist/runtime/primitives/lib/primitives.d.ts +24 -5
- package/dist/runtime/primitives/lib/primitives.js +69 -16
- package/dist/runtime/primitives/lib/template.js +2 -2
- package/dist/runtime/templates.d.ts +9 -2
- package/dist/runtime/templates.js +37 -8
- package/package.json +14 -9
- package/templates/astro/package.json +2 -2
- package/templates/nextjs/AGENTS.md +1 -1
- package/templates/nextjs/package.json +4 -4
- package/templates/react-router/.fimo/config.json +1 -2
- package/templates/react-router/AGENTS.md +1 -1
- package/templates/react-router/package.json +4 -4
- package/templates/sveltekit/package.json +2 -2
- package/templates/vite/package.json +4 -4
- package/templates/welcome/manifest.json +404 -0
- package/templates/welcome/media/analytics-overview.avif +0 -0
- package/templates/welcome/media/autonomous-loop.avif +0 -0
- package/templates/welcome/media/editable-preview.avif +0 -0
- package/templates/welcome/media/media-library.avif +0 -0
- package/templates/welcome/media/slack-teams.avif +0 -0
- package/templates/welcome/template/.fimo/agents/welcome-guide/GOAL.md +7 -0
- package/templates/welcome/template/.fimo/agents/welcome-guide/config.yaml +8 -0
- package/templates/welcome/template/.fimo/config.json +53 -0
- package/templates/welcome/template/src/font.css +60 -0
- package/templates/welcome/template/src/pages/ArticleDetail.tsx +68 -0
- package/templates/welcome/template/src/pages/Index.tsx +32 -0
- package/templates/welcome/template/src/pages/SiteContent.tsx +413 -0
- package/templates/welcome/template/src/pages/fallback-content.ts +133 -0
- package/templates/welcome/template/src/routes.ts +9 -0
- package/templates/welcome/template/src/schemas/Article.json +12 -0
- package/templates/welcome/template/src/schemas/Article.ts +59 -0
- package/templates/welcome/template/src/schemas/Article.types.ts +73 -0
- package/templates/welcome/template/src/schemas/HomePage.json +39 -0
- package/templates/welcome/template/src/schemas/HomePage.types.ts +114 -0
- package/assets/starters/fimo-site/manifest.json +0 -64
- package/assets/starters/fimo-site/template/.fimo/agents/content-guide/GOAL.md +0 -8
- package/assets/starters/fimo-site/template/.fimo/agents/content-guide/capabilities.yaml +0 -1
- package/assets/starters/fimo-site/template/.fimo/agents/content-guide/config.yaml +0 -9
- package/assets/starters/fimo-site/template/.fimo/agents/site-review/GOAL.md +0 -14
- package/assets/starters/fimo-site/template/.fimo/agents/site-review/capabilities.yaml +0 -3
- package/assets/starters/fimo-site/template/.fimo/agents/site-review/config.yaml +0 -9
- package/assets/starters/fimo-site/template/src/forms/contact.json +0 -14
- package/assets/starters/fimo-site/template/src/forms/contact.ts +0 -46
- package/assets/starters/fimo-site/template/src/pages/Contact.tsx +0 -193
- package/assets/starters/fimo-site/template/src/pages/Index.tsx +0 -27
- package/assets/starters/fimo-site/template/src/pages/SiteContent.tsx +0 -191
- package/assets/starters/fimo-site/template/src/schemas/HomePage.json +0 -28
- package/assets/starters/fimo-site/template/src/schemas/HomePage.ts +0 -29
- package/assets/starters/fimo-site/template/src/schemas/HomePage.types.ts +0 -64
|
@@ -28,7 +28,7 @@ const PACKAGE_ROOT = path.resolve(MODULE_DIR, '..', '..');
|
|
|
28
28
|
const RELEASE_FILE = path.join(PACKAGE_ROOT, 'release.json');
|
|
29
29
|
const PACKAGE_JSON_FILE = path.join(PACKAGE_ROOT, 'package.json');
|
|
30
30
|
export const TEMPLATE_FRAMEWORKS = ['react-router', 'vite', 'astro', 'nextjs', 'sveltekit'];
|
|
31
|
-
export const DEFAULT_TEMPLATE = '
|
|
31
|
+
export const DEFAULT_TEMPLATE = 'nextjs';
|
|
32
32
|
/**
|
|
33
33
|
* Absolute path to the requested framework's template directory.
|
|
34
34
|
*
|
|
@@ -42,6 +42,9 @@ export const DEFAULT_TEMPLATE = 'react-router';
|
|
|
42
42
|
export function getTemplatePath(framework = DEFAULT_TEMPLATE) {
|
|
43
43
|
return path.resolve(PACKAGE_ROOT, 'templates', framework);
|
|
44
44
|
}
|
|
45
|
+
export function getWelcomeTemplatePath() {
|
|
46
|
+
return path.resolve(PACKAGE_ROOT, 'templates', 'welcome');
|
|
47
|
+
}
|
|
45
48
|
/**
|
|
46
49
|
* Absolute path to the legacy template at `apps/api/templates/default/`.
|
|
47
50
|
*
|
|
@@ -69,8 +72,8 @@ export function readReleaseMeta() {
|
|
|
69
72
|
try {
|
|
70
73
|
const raw = fs.readFileSync(RELEASE_FILE, 'utf8');
|
|
71
74
|
const parsed = JSON.parse(raw);
|
|
72
|
-
const source = parsed.source === 'npm' || parsed.source === 'dev' ? parsed.source : null;
|
|
73
|
-
return { source };
|
|
75
|
+
const source = parsed.source === 'npm' || parsed.source === 'dev' || parsed.source === 'url' ? parsed.source : null;
|
|
76
|
+
return { source, url: typeof parsed.url === 'string' && parsed.url.length > 0 ? parsed.url : null };
|
|
74
77
|
}
|
|
75
78
|
catch {
|
|
76
79
|
return { source: null };
|
|
@@ -91,16 +94,34 @@ export function readCliSemver() {
|
|
|
91
94
|
}
|
|
92
95
|
/**
|
|
93
96
|
* Pure version: given a release manifest + CLI semver, return the value
|
|
94
|
-
* to pin `fimo` to (or null
|
|
97
|
+
* to pin `fimo` to (or null when nothing is known). Exported for unit tests.
|
|
98
|
+
*
|
|
99
|
+
* Throws rather than returning an unreproducible pin: a project that records a
|
|
100
|
+
* package-manager cache path (or a `fimo` its companions cannot follow) is
|
|
101
|
+
* broken on every other machine, and the error names the missing publish step.
|
|
95
102
|
*/
|
|
96
103
|
export function computeFimoPin(meta, semver, options = {}) {
|
|
97
104
|
if (meta.source === 'npm') {
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
return semver;
|
|
106
|
+
}
|
|
107
|
+
// A checkout wins over a baked artifact URL: `publish-cli --id` keeps its
|
|
108
|
+
// release.json in the workspace so the next local run still iterates on
|
|
109
|
+
// source, not on the tarball it just uploaded.
|
|
110
|
+
const localPin = options.devPackageRoot ? `file:${options.devPackageRoot}` : null;
|
|
111
|
+
if (localPin && pinsWholeGroup(localPin)) {
|
|
112
|
+
return localPin;
|
|
113
|
+
}
|
|
114
|
+
if (meta.source === 'url') {
|
|
115
|
+
if (!meta.url) {
|
|
116
|
+
throw new Error('Refusing to create a project from a development CLI that was published without a public artifact URL. ' +
|
|
117
|
+
'Republish it remotely with `pnpm -F fimo publish-cli -- --id <task-name>` and install that artifact.');
|
|
100
118
|
}
|
|
119
|
+
return meta.url;
|
|
101
120
|
}
|
|
102
|
-
if (
|
|
103
|
-
|
|
121
|
+
if (localPin) {
|
|
122
|
+
throw new Error(`Refusing to create a project pinned to ${localPin}: that path is not a Fimo checkout, so it is neither ` +
|
|
123
|
+
'reproducible on another machine nor able to pin the matching companion packages. Install `fimo` from npm, ' +
|
|
124
|
+
'or publish this CLI with `pnpm -F fimo publish-cli -- --id <task-name>` and install that artifact.');
|
|
104
125
|
}
|
|
105
126
|
return null;
|
|
106
127
|
}
|
|
@@ -233,6 +254,14 @@ export function deriveFimoPackagePin(name, fimoPin) {
|
|
|
233
254
|
}
|
|
234
255
|
return fimoPin;
|
|
235
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Whether every Fimo package can be pinned from this `fimo` pin. A pin that
|
|
259
|
+
* only the CLI can follow leaves the companions on the template's `latest`,
|
|
260
|
+
* which silently mixes channels inside one project (FIMO-2070).
|
|
261
|
+
*/
|
|
262
|
+
function pinsWholeGroup(fimoPin) {
|
|
263
|
+
return FIMO_PACKAGES.every((name) => deriveFimoPackagePin(name, fimoPin) !== null);
|
|
264
|
+
}
|
|
236
265
|
/**
|
|
237
266
|
* Rewrite `fimo` and any companion packages present (in dependencies +
|
|
238
267
|
* devDependencies) to the current pin. Only touches entries that look like a
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fimo",
|
|
3
|
-
"version": "2.2.0-staging.
|
|
3
|
+
"version": "2.2.0-staging.11",
|
|
4
4
|
"description": "Fimo CLI - create, deploy, and manage Fimo projects",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"astro-component"
|
|
@@ -77,6 +77,10 @@
|
|
|
77
77
|
"types": "./dist/runtime/astro/internal.d.ts",
|
|
78
78
|
"import": "./dist/runtime/astro/internal.js"
|
|
79
79
|
},
|
|
80
|
+
"./vite/preview-health": {
|
|
81
|
+
"types": "./dist/build/vite/plugins/preview-health.d.ts",
|
|
82
|
+
"import": "./dist/build/vite/plugins/preview-health.js"
|
|
83
|
+
},
|
|
80
84
|
"./next": {
|
|
81
85
|
"types": "./dist/build/next/moved.d.ts",
|
|
82
86
|
"import": "./dist/build/next/moved.js"
|
|
@@ -172,6 +176,7 @@
|
|
|
172
176
|
"test:integration:frameworks": "vitest run --config vitest.integration.config.ts",
|
|
173
177
|
"test:integration:next": "vitest run --config vitest.integration.config.ts test/integration/next-runtime.test.ts",
|
|
174
178
|
"test:integration:sveltekit": "vitest run --config vitest.integration.config.ts test/integration/sveltekit-runtime.test.ts",
|
|
179
|
+
"test:package-manager-compat": "pnpm --workspace-root run build --filter=fimo && node test/package-manager-compat/run.mjs",
|
|
175
180
|
"test:watch": "vitest",
|
|
176
181
|
"clean": "rm -rf dist *.tsbuildinfo"
|
|
177
182
|
},
|
|
@@ -184,12 +189,12 @@
|
|
|
184
189
|
"devDependencies": {
|
|
185
190
|
"@clack/core": "^1.2.0",
|
|
186
191
|
"@clack/prompts": "^1.2.0",
|
|
187
|
-
"@fimo/agents-bundle": "2.2.0-staging.
|
|
188
|
-
"@fimo/api-contracts": "2.2.0-staging.
|
|
189
|
-
"@fimo/cli-kit": "2.2.0-staging.
|
|
190
|
-
"@fimo/framework-detect": "2.2.0-staging.
|
|
191
|
-
"@fimo/routes": "2.2.0-staging.
|
|
192
|
-
"@fimo/tsconfig": "2.2.0-staging.
|
|
192
|
+
"@fimo/agents-bundle": "2.2.0-staging.11",
|
|
193
|
+
"@fimo/api-contracts": "2.2.0-staging.11",
|
|
194
|
+
"@fimo/cli-kit": "2.2.0-staging.11",
|
|
195
|
+
"@fimo/framework-detect": "2.2.0-staging.11",
|
|
196
|
+
"@fimo/routes": "2.2.0-staging.11",
|
|
197
|
+
"@fimo/tsconfig": "2.2.0-staging.11",
|
|
193
198
|
"@types/node": "22.18.6",
|
|
194
199
|
"agent-install": "^0.0.5",
|
|
195
200
|
"astro": "^7.1.6",
|
|
@@ -201,8 +206,8 @@
|
|
|
201
206
|
"tsx": "4.22.4",
|
|
202
207
|
"typescript": "7.0.2",
|
|
203
208
|
"vite": "8.2.2",
|
|
204
|
-
"vitest": "4.1.
|
|
205
|
-
"wrangler": "4.
|
|
209
|
+
"vitest": "4.1.11",
|
|
210
|
+
"wrangler": "4.126.0",
|
|
206
211
|
"yaml": "2.8.2"
|
|
207
212
|
},
|
|
208
213
|
"engines": {
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"check": "astro sync && astro check"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"fimo": "2.2.0-staging.
|
|
13
|
-
"fimo-astro": "2.2.0-staging.
|
|
12
|
+
"fimo": "2.2.0-staging.11",
|
|
13
|
+
"fimo-astro": "2.2.0-staging.11"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@astrojs/check": "^0.9.10",
|
|
@@ -37,7 +37,7 @@ The scaffolded homepage is disposable. Replace it on the first real generation.
|
|
|
37
37
|
- **Deploy is on-demand**, not a save step. Batch related edits into one deploy.
|
|
38
38
|
- Use the selected package manager's committed build-script policy. pnpm projects pin `pnpm@10.26.0` and approve `esbuild` and `fimo` through `pnpm-workspace.yaml#allowBuilds`; Bun projects trust the same packages through `package.json#trustedDependencies`. Run a plain install with the selected manager so local installation matches Preview and production publishing. Review new dependencies before extending the policy; all three paths stop on unreviewed scripts.
|
|
39
39
|
- Treat the user's language request as part of setup. The first explicitly requested locale is the primary locale; put it first and set it as `i18n.defaultLocale` in `.fimo/config.json`, with every requested locale in `i18n.locales`. If no language is requested, keep `en` and state that choice. That file is the only place to change: `src/locales.ts` reads it, so the served language and `<html lang>` follow. It does not create locale URLs; implement a URL strategy only when the product asks for one. Never introduce a default-locale environment variable.
|
|
40
|
-
- Next's `app` tree is the router and stays authoritative: the
|
|
40
|
+
- Next's `app` tree is the router and stays authoritative: the default shell is one ordinary root layout plus `/` as the homepage, and unknown paths get Next's native 404. When a product requires locale URLs, implement the framework-native strategy (`[locale]` segments, middleware, cookies, domains, or an i18n library), pass the resolved locale into Fimo server reads and `FimoProvider`, and load `fimo skills get fimo-code --ref frameworks/next/locales` first. Do not impose locale-prefixed URLs on a default-only project.
|
|
41
41
|
- `FimoProvider` owns the optional Studio preview runtime. Do not add a preview bridge component, read Fimo preview environment variables, or inject Fimo scripts in application code.
|
|
42
42
|
- Keep `.fimo/config.json#routes` as Studio metadata, not as the Next.js router. Describe only URLs the application actually serves; add a `:locale` segment to a route's metadata only after the application implements that locale routing. There, `params.locale.optional: true` means omit the configured default locale from the URL; use `optional: false` only when every locale, including the default, must be prefixed.
|
|
43
43
|
- The application owns routes, locale resolution, links, HTML language/direction, and SEO. Fimo connects to those decisions.
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@tanstack/react-query": "^5.80.6",
|
|
15
|
-
"fimo": "2.2.0-staging.
|
|
16
|
-
"fimo-next": "2.2.0-staging.
|
|
17
|
-
"fimo-react": "2.2.0-staging.
|
|
18
|
-
"next": "^16.3.
|
|
15
|
+
"fimo": "2.2.0-staging.11",
|
|
16
|
+
"fimo-next": "2.2.0-staging.11",
|
|
17
|
+
"fimo-react": "2.2.0-staging.11",
|
|
18
|
+
"next": "^16.3.3",
|
|
19
19
|
"react": "^19.2.7",
|
|
20
20
|
"react-dom": "^19.2.7"
|
|
21
21
|
},
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
"runtime": { "framework": "react-router" },
|
|
3
3
|
"seo": {
|
|
4
4
|
"title": "Welcome to your Fimo website",
|
|
5
|
-
"description": "A default homepage
|
|
6
|
-
"siteName": "Fimo Starter Site",
|
|
5
|
+
"description": "A default homepage for Fimo projects.",
|
|
7
6
|
"url": "https://fimo.ai/",
|
|
8
7
|
"image": "https://fimo.ai/socials/og_cover.png",
|
|
9
8
|
"favicon": "https://fimo.ai/favicon-orange.svg",
|
|
@@ -47,6 +47,6 @@ breaks that. Load `fimo-code` for the exact primitives, but the rule is:
|
|
|
47
47
|
- Do not add a second deploy tool (Vercel, Netlify, etc.).
|
|
48
48
|
- **Never edit `.fimo/project.json`** — it links this folder to the remote project.
|
|
49
49
|
- **Keep `.fimo/config.json#runtime` true to the code** — framework, `dev`/`build`/`install` commands, output directory. Update it when you rename a package script, move the build output, or change framework; the reference is `fimo skills get fimo-code --ref frameworks/hosting`.
|
|
50
|
-
- The scaffolded homepage is disposable
|
|
50
|
+
- The scaffolded homepage is disposable template content. Replace it on the first real generation.
|
|
51
51
|
- **Secrets live in the Fimo dashboard**, not in a committed `.env`.
|
|
52
52
|
- When scripting, pass flags to `fimo` commands (`fimo deploy -m "…"`, `fimo delete -y`) — bare interactive forms hang in non-TTY shells.
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"cmdk": "^1.1.1",
|
|
22
22
|
"date-fns": "^4.1.0",
|
|
23
23
|
"embla-carousel-react": "^8.6.0",
|
|
24
|
-
"fimo": "2.2.0-staging.
|
|
25
|
-
"fimo-react": "2.2.0-staging.
|
|
26
|
-
"fimo-react-router": "2.2.0-staging.
|
|
27
|
-
"fimo-vite": "2.2.0-staging.
|
|
24
|
+
"fimo": "2.2.0-staging.11",
|
|
25
|
+
"fimo-react": "2.2.0-staging.11",
|
|
26
|
+
"fimo-react-router": "2.2.0-staging.11",
|
|
27
|
+
"fimo-vite": "2.2.0-staging.11",
|
|
28
28
|
"input-otp": "^1.4.2",
|
|
29
29
|
"isbot": "^5",
|
|
30
30
|
"lucide-react": "^0.577.0",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"prepare": "svelte-kit sync"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"fimo": "2.2.0-staging.
|
|
15
|
-
"fimo-sveltekit": "2.2.0-staging.
|
|
14
|
+
"fimo": "2.2.0-staging.11",
|
|
15
|
+
"fimo-sveltekit": "2.2.0-staging.11"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@sveltejs/kit": "^2.70.2",
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@tanstack/react-query": "^5.80.6",
|
|
14
|
-
"fimo": "2.2.0-staging.
|
|
15
|
-
"fimo-react": "2.2.0-staging.
|
|
16
|
-
"fimo-react-router": "2.2.0-staging.
|
|
17
|
-
"fimo-vite": "2.2.0-staging.
|
|
14
|
+
"fimo": "2.2.0-staging.11",
|
|
15
|
+
"fimo-react": "2.2.0-staging.11",
|
|
16
|
+
"fimo-react-router": "2.2.0-staging.11",
|
|
17
|
+
"fimo-vite": "2.2.0-staging.11",
|
|
18
18
|
"react": "^19.2.7",
|
|
19
19
|
"react-dom": "^19.2.7",
|
|
20
20
|
"react-router": "^8.3.0"
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fimo-site",
|
|
3
|
+
"version": 14,
|
|
4
|
+
"description": "An editable Welcome to Fimo tutorial with real CMS content, media, branches, and an autonomous agent.",
|
|
5
|
+
"assets": [
|
|
6
|
+
{
|
|
7
|
+
"key": "editable-preview",
|
|
8
|
+
"file": "editable-preview.avif",
|
|
9
|
+
"name": "Editable Preview",
|
|
10
|
+
"altText": "A cursor selecting an orange image frame inside an editable website",
|
|
11
|
+
"caption": "Select this image in Preview to replace it."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"key": "media-library",
|
|
15
|
+
"file": "media-library.avif",
|
|
16
|
+
"name": "Media Library",
|
|
17
|
+
"altText": "A contact sheet of black, white, and orange website assets",
|
|
18
|
+
"caption": "These tutorial images are available in your Media Library."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"key": "autonomous-loop",
|
|
22
|
+
"file": "autonomous-loop.avif",
|
|
23
|
+
"name": "Autonomous Website Loop",
|
|
24
|
+
"altText": "A repeating website, check, edit, and deploy automation loop",
|
|
25
|
+
"caption": "Fimo agents keep a finished website healthy after the first build."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"key": "slack-teams",
|
|
29
|
+
"file": "slack-teams.avif",
|
|
30
|
+
"name": "Slack and Microsoft Teams",
|
|
31
|
+
"altText": "Slack and Microsoft Teams logos connected side by side",
|
|
32
|
+
"caption": "Connect Fimo to the collaboration tools your team already uses."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"key": "analytics-overview",
|
|
36
|
+
"file": "analytics-overview.avif",
|
|
37
|
+
"name": "Analytics Overview",
|
|
38
|
+
"altText": "A browser window with an ascending bar chart and an orange trend arrow",
|
|
39
|
+
"caption": "Follow your traffic in the Analytics workspace."
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"singletons": [
|
|
43
|
+
{
|
|
44
|
+
"type": "HomePage",
|
|
45
|
+
"data": {
|
|
46
|
+
"title": "This site is yours to change.",
|
|
47
|
+
"intro": {
|
|
48
|
+
"type": "doc",
|
|
49
|
+
"content": [
|
|
50
|
+
{
|
|
51
|
+
"type": "paragraph",
|
|
52
|
+
"content": [
|
|
53
|
+
{
|
|
54
|
+
"type": "text",
|
|
55
|
+
"text": "Four actions, five minutes. Every change is safe to make in this tutorial project."
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"heroImage": {
|
|
62
|
+
"$asset": "editable-preview"
|
|
63
|
+
},
|
|
64
|
+
"heroImageHint": "Select this image in Edit mode",
|
|
65
|
+
"startLabel": "Start the 5-minute tour",
|
|
66
|
+
"tourTitle": "Try the essentials in five minutes",
|
|
67
|
+
"tourIntro": "Follow these steps in order. Every change is safe to make in this tutorial project.",
|
|
68
|
+
"steps": [
|
|
69
|
+
{
|
|
70
|
+
"number": "1",
|
|
71
|
+
"title": "Edit this page",
|
|
72
|
+
"body": "Edit mode lets you change text and images directly on the website.\n- Select the big title and replace it with “Welcome, [your name]”.",
|
|
73
|
+
"actionLabel": "Activate Edit mode",
|
|
74
|
+
"action": "toggleEditMode"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"number": "2",
|
|
78
|
+
"title": "Open the CMS",
|
|
79
|
+
"body": "The website content also lives in the CMS, as structured data.\n- Change “Title” and watch the site update.",
|
|
80
|
+
"actionLabel": "Jump to the Home page",
|
|
81
|
+
"action": "openHomePage"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"number": "3",
|
|
85
|
+
"title": "Explore branches",
|
|
86
|
+
"body": "Branches let people and agents work without touching the live site.\n- Try a change on “tutorial/first-change”.",
|
|
87
|
+
"actionLabel": "Show the branch menu",
|
|
88
|
+
"action": "openBranches"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"number": "4",
|
|
92
|
+
"title": "Meet your agent",
|
|
93
|
+
"body": "Your agent maintains this website on a schedule.\n- Click “Run now” and review the result and cost.",
|
|
94
|
+
"actionLabel": "Meet Welcome Guide",
|
|
95
|
+
"action": "openAgents"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"articlesTitle": "Continue learning in the CMS",
|
|
99
|
+
"articlesIntro": "These are real entries in the Articles collection. Open Content to edit their titles, summaries, bodies, and cover images.",
|
|
100
|
+
"migrationTitle": "Migrate my existing website",
|
|
101
|
+
"migrationBody": {
|
|
102
|
+
"type": "doc",
|
|
103
|
+
"content": [
|
|
104
|
+
{
|
|
105
|
+
"type": "paragraph",
|
|
106
|
+
"content": [
|
|
107
|
+
{
|
|
108
|
+
"type": "text",
|
|
109
|
+
"text": "Open your existing local project with Codex, Claude Code, Cursor, or another coding agent. Copy the prompt below so the agent connects the website you already trust to Fimo, with a recoverable backup first."
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"migrationPrompt": "Before changing anything, create a recoverable backup of this website. If it uses Git, create a branch and commit the current state. If it does not use Git, duplicate the entire project folder and confirm the copy opens. Then inspect the existing codebase and migrate this website to Fimo in place. Preserve every route, visible piece of content, media asset, form, SEO field, redirect, and locale. Connect the existing implementation to Fimo rather than generating a new empty site. Report any item you cannot migrate safely before changing it.",
|
|
116
|
+
"buildTitle": "Create my website",
|
|
117
|
+
"buildBody": {
|
|
118
|
+
"type": "doc",
|
|
119
|
+
"content": [
|
|
120
|
+
{
|
|
121
|
+
"type": "paragraph",
|
|
122
|
+
"content": [
|
|
123
|
+
{
|
|
124
|
+
"type": "text",
|
|
125
|
+
"text": "Use your Codex, Claude Code, Cursor, or other coding-agent subscription to design and build the first version in a local repository. Connect it to Fimo when the foundation is ready. Fimo starts where the first build ends: content, visual editing, environments, agents, and hosting."
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"closingTitle": "Fimo keeps finished websites autonomous",
|
|
132
|
+
"closingBody": "Fimo Credits are designed for the agents that maintain your website and for teammates who use Studio chat without a local coding tool."
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
"collections": [
|
|
137
|
+
{
|
|
138
|
+
"type": "Article",
|
|
139
|
+
"entries": [
|
|
140
|
+
{
|
|
141
|
+
"slug": "create-your-first-agent",
|
|
142
|
+
"data": {
|
|
143
|
+
"title": "Create your first agent",
|
|
144
|
+
"summary": "Build a weekly SEO agent with one prompt: full audit, safe fixes applied to the CMS, and a report you can trust.",
|
|
145
|
+
"body": {
|
|
146
|
+
"type": "doc",
|
|
147
|
+
"content": [
|
|
148
|
+
{
|
|
149
|
+
"type": "paragraph",
|
|
150
|
+
"content": [
|
|
151
|
+
{
|
|
152
|
+
"type": "text",
|
|
153
|
+
"text": "Agents are teammates with one clear mission. In a few minutes you can build one that keeps your SEO healthy: a full audit every week, safe fixes applied for you, and a report for everything else."
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"type": "heading",
|
|
159
|
+
"attrs": {
|
|
160
|
+
"level": 2
|
|
161
|
+
},
|
|
162
|
+
"content": [
|
|
163
|
+
{
|
|
164
|
+
"type": "text",
|
|
165
|
+
"text": "Start with the prompt"
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"type": "paragraph",
|
|
171
|
+
"content": [
|
|
172
|
+
{
|
|
173
|
+
"type": "text",
|
|
174
|
+
"text": "Open the chat and paste this:"
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"type": "codeBlock",
|
|
180
|
+
"content": [
|
|
181
|
+
{
|
|
182
|
+
"type": "text",
|
|
183
|
+
"text": "Create an agent called SEO Guardian. Every Monday morning it runs a full SEO audit of this website: page titles, meta descriptions, headings, image alt texts, internal links, and last week's analytics. It applies the safe fixes directly to the CMS content, and lists anything that needs my decision in its report. It never touches the design or the code."
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"type": "paragraph",
|
|
189
|
+
"content": [
|
|
190
|
+
{
|
|
191
|
+
"type": "text",
|
|
192
|
+
"text": "Fimo builds the agent from that sentence. You will find it in the Agents workspace, right next to Welcome Guide."
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"type": "heading",
|
|
198
|
+
"attrs": {
|
|
199
|
+
"level": 2
|
|
200
|
+
},
|
|
201
|
+
"content": [
|
|
202
|
+
{
|
|
203
|
+
"type": "text",
|
|
204
|
+
"text": "What the agent is made of"
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"type": "paragraph",
|
|
210
|
+
"content": [
|
|
211
|
+
{
|
|
212
|
+
"type": "text",
|
|
213
|
+
"text": "Every agent is a small bundle of three things:"
|
|
214
|
+
}
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"type": "bulletList",
|
|
219
|
+
"content": [
|
|
220
|
+
{
|
|
221
|
+
"type": "listItem",
|
|
222
|
+
"content": [
|
|
223
|
+
{
|
|
224
|
+
"type": "paragraph",
|
|
225
|
+
"content": [
|
|
226
|
+
{
|
|
227
|
+
"type": "text",
|
|
228
|
+
"text": "The goal is its soul: one clear mission written in plain words. The agent re-reads it on every run, and it is the file you edit to change how it thinks."
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"type": "listItem",
|
|
236
|
+
"content": [
|
|
237
|
+
{
|
|
238
|
+
"type": "paragraph",
|
|
239
|
+
"content": [
|
|
240
|
+
{
|
|
241
|
+
"type": "text",
|
|
242
|
+
"text": "Capabilities are the strict list of what it may touch. SEO Guardian reads and writes CMS content, fetches your pages, and reads your analytics. Nothing else, unless you grant it."
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"type": "listItem",
|
|
250
|
+
"content": [
|
|
251
|
+
{
|
|
252
|
+
"type": "paragraph",
|
|
253
|
+
"content": [
|
|
254
|
+
{
|
|
255
|
+
"type": "text",
|
|
256
|
+
"text": "The trigger decides when it runs: a weekly schedule here, plus Run now whenever you want."
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
}
|
|
262
|
+
]
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"type": "heading",
|
|
266
|
+
"attrs": {
|
|
267
|
+
"level": 2
|
|
268
|
+
},
|
|
269
|
+
"content": [
|
|
270
|
+
{
|
|
271
|
+
"type": "text",
|
|
272
|
+
"text": "Adjust it"
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"type": "bulletList",
|
|
278
|
+
"content": [
|
|
279
|
+
{
|
|
280
|
+
"type": "listItem",
|
|
281
|
+
"content": [
|
|
282
|
+
{
|
|
283
|
+
"type": "paragraph",
|
|
284
|
+
"content": [
|
|
285
|
+
{
|
|
286
|
+
"type": "text",
|
|
287
|
+
"text": "Sharpen the goal: add rules like never touch the pricing page or keep titles under 60 characters."
|
|
288
|
+
}
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"type": "listItem",
|
|
295
|
+
"content": [
|
|
296
|
+
{
|
|
297
|
+
"type": "paragraph",
|
|
298
|
+
"content": [
|
|
299
|
+
{
|
|
300
|
+
"type": "text",
|
|
301
|
+
"text": "Tighten or widen the capabilities as your trust grows."
|
|
302
|
+
}
|
|
303
|
+
]
|
|
304
|
+
}
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"type": "listItem",
|
|
309
|
+
"content": [
|
|
310
|
+
{
|
|
311
|
+
"type": "paragraph",
|
|
312
|
+
"content": [
|
|
313
|
+
{
|
|
314
|
+
"type": "text",
|
|
315
|
+
"text": "Change the cadence, or keep it manual while you evaluate its work."
|
|
316
|
+
}
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"type": "listItem",
|
|
323
|
+
"content": [
|
|
324
|
+
{
|
|
325
|
+
"type": "paragraph",
|
|
326
|
+
"content": [
|
|
327
|
+
{
|
|
328
|
+
"type": "text",
|
|
329
|
+
"text": "Read every report: it lists each change, why it was made, and what the run cost."
|
|
330
|
+
}
|
|
331
|
+
]
|
|
332
|
+
}
|
|
333
|
+
]
|
|
334
|
+
}
|
|
335
|
+
]
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"type": "paragraph",
|
|
339
|
+
"content": [
|
|
340
|
+
{
|
|
341
|
+
"type": "text",
|
|
342
|
+
"text": "Start with one manual run: open the agent, click Run now, and read what it did. That first report is the best way to understand how your new teammate thinks."
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
]
|
|
347
|
+
},
|
|
348
|
+
"cover": {
|
|
349
|
+
"$asset": "autonomous-loop"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"slug": "branches-and-environments",
|
|
355
|
+
"data": {
|
|
356
|
+
"title": "How branches and environments work",
|
|
357
|
+
"summary": "Branches isolate changes. Environments group related branches under shared deployment configuration.",
|
|
358
|
+
"body": {
|
|
359
|
+
"type": "doc",
|
|
360
|
+
"content": [
|
|
361
|
+
{
|
|
362
|
+
"type": "paragraph",
|
|
363
|
+
"content": [
|
|
364
|
+
{
|
|
365
|
+
"type": "text",
|
|
366
|
+
"text": "Every branch has its own content, database, preview runtime, URL, and assets, so work does not affect other branches or the live website. Several teammates can collaborate on the same branch when they want to work together. Environments group branches by deployment purpose and matching rules, with shared configuration such as secrets and webhook scopes."
|
|
367
|
+
}
|
|
368
|
+
]
|
|
369
|
+
}
|
|
370
|
+
]
|
|
371
|
+
},
|
|
372
|
+
"cover": {
|
|
373
|
+
"$asset": "editable-preview"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"slug": "discover-the-analytics",
|
|
379
|
+
"data": {
|
|
380
|
+
"title": "Discover the analytics",
|
|
381
|
+
"summary": "See who visits your website: pageviews, top pages, sources, devices, and countries.",
|
|
382
|
+
"body": {
|
|
383
|
+
"type": "doc",
|
|
384
|
+
"content": [
|
|
385
|
+
{
|
|
386
|
+
"type": "paragraph",
|
|
387
|
+
"content": [
|
|
388
|
+
{
|
|
389
|
+
"type": "text",
|
|
390
|
+
"text": "Open the Analytics workspace to follow visitors, pageviews, bounce rate, top pages, and where your traffic comes from. Analytics persists across publications, so your history stays intact every time you ship."
|
|
391
|
+
}
|
|
392
|
+
]
|
|
393
|
+
}
|
|
394
|
+
]
|
|
395
|
+
},
|
|
396
|
+
"cover": {
|
|
397
|
+
"$asset": "analytics-overview"
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
]
|
|
404
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|