fimo 2.8.0-staging.8 → 2.8.0

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.
Files changed (129) hide show
  1. package/assets/skills/fimo/SKILL.md +0 -1
  2. package/assets/skills/fimo-cli/SKILL.md +6 -7
  3. package/assets/skills/fimo-cli/references/assets.md +2 -0
  4. package/assets/skills/fimo-cli/references/deploy.md +1 -1
  5. package/assets/skills/fimo-cli/references/init.md +1 -2
  6. package/assets/skills/fimo-cli/references/integrations/firecrawl.md +1 -41
  7. package/assets/skills/fimo-cli/references/integrations.md +2 -38
  8. package/assets/skills/fimo-cli/references/knowledge.md +1 -1
  9. package/assets/skills/fimo-cli/references/mcp.md +5 -6
  10. package/assets/skills/fimo-cli/references/preview.md +1 -1
  11. package/assets/skills/fimo-cli/references/project-vars-and-secrets.md +0 -16
  12. package/assets/skills/fimo-cli/references/webhooks.md +0 -2
  13. package/assets/skills/fimo-code/SKILL.md +1 -0
  14. package/assets/skills/fimo-code/references/assets.md +5 -5
  15. package/assets/skills/fimo-code/references/design.md +1 -1
  16. package/assets/skills/fimo-code/references/ui.md +1 -1
  17. package/assets/skills/fimo-studio/SKILL.md +13 -7
  18. package/assets/skills/fimo-studio/references/ai-chat.md +15 -2
  19. package/assets/skills/fimo-studio/references/billing-and-credits.md +4 -6
  20. package/assets/skills/fimo-studio/references/cms.md +1 -1
  21. package/assets/skills/fimo-studio/references/command-palette.md +1 -2
  22. package/assets/skills/fimo-studio/references/connections.md +3 -4
  23. package/assets/skills/fimo-studio/references/custom-domains.md +2 -2
  24. package/assets/skills/fimo-studio/references/media-library.md +1 -2
  25. package/assets/skills/fimo-studio/references/preview-and-responsive.md +4 -9
  26. package/assets/skills/fimo-studio/references/project-creation.md +24 -6
  27. package/assets/skills/fimo-studio/references/publish-and-deploy.md +2 -2
  28. package/assets/skills/fimo-studio/references/schedules.md +2 -3
  29. package/assets/skills/fimo-studio/references/seo-settings.md +2 -2
  30. package/assets/skills/fimo-studio/references/sharing-and-collaboration.md +2 -3
  31. package/assets/skills/fimo-studio/references/visual-editing.md +1 -1
  32. package/assets/skills/fimo-studio/references/webhooks.md +7 -8
  33. package/dist/cli/bundle.json +2 -2
  34. package/dist/cli/index.js +153 -162
  35. package/dist/runtime/paths/get-fimo-paths.js +2 -24
  36. package/dist/runtime/project-layout.d.ts +0 -1
  37. package/dist/runtime/project-layout.js +1 -5
  38. package/dist/runtime/shared/local-runtime-env.js +2 -14
  39. package/dist/runtime/templates.d.ts +0 -1
  40. package/dist/runtime/templates.js +0 -3
  41. package/package.json +10 -10
  42. package/release.json +2 -2
  43. package/templates/astro/.fimo/config.json +0 -14
  44. package/templates/astro/AGENTS.md +2 -1
  45. package/templates/astro/_gitignore +3 -0
  46. package/templates/astro/package.json +3 -3
  47. package/templates/astro/src/layouts/Base.astro +0 -48
  48. package/templates/nextjs/AGENTS.md +1 -1
  49. package/templates/nextjs/_gitignore +3 -0
  50. package/templates/nextjs/package.json +5 -5
  51. package/templates/react-router/AGENTS.md +1 -1
  52. package/templates/react-router/_gitignore +3 -0
  53. package/templates/react-router/package.json +5 -5
  54. package/templates/sveltekit/AGENTS.md +1 -0
  55. package/templates/sveltekit/_gitignore +3 -0
  56. package/templates/sveltekit/package.json +3 -3
  57. package/templates/vite/AGENTS.md +2 -0
  58. package/templates/vite/_gitignore +3 -0
  59. package/templates/vite/package.json +5 -5
  60. package/assets/agent-templates/_default/GOAL.md +0 -21
  61. package/assets/agent-templates/_default/capabilities.yaml +0 -11
  62. package/assets/agent-templates/_default/config.yaml +0 -13
  63. package/assets/agent-templates/broken-link-sweeper/GOAL.md +0 -51
  64. package/assets/agent-templates/broken-link-sweeper/capabilities.yaml +0 -1
  65. package/assets/agent-templates/broken-link-sweeper/config.yaml +0 -13
  66. package/assets/agent-templates/content-translator/GOAL.md +0 -33
  67. package/assets/agent-templates/content-translator/capabilities.yaml +0 -5
  68. package/assets/agent-templates/content-translator/config.yaml +0 -12
  69. package/assets/agent-templates/content-translator/scripts/translate-entries.ts +0 -69
  70. package/assets/agent-templates/post-deploy-check/GOAL.md +0 -23
  71. package/assets/agent-templates/post-deploy-check/capabilities.yaml +0 -1
  72. package/assets/agent-templates/post-deploy-check/config.yaml +0 -10
  73. package/assets/agent-templates/post-deploy-check/scripts/check-logs.ts +0 -39
  74. package/assets/agent-templates/post-deploy-check/scripts/probe-routes.ts +0 -53
  75. package/assets/agent-templates/seo-audit/GOAL.md +0 -43
  76. package/assets/agent-templates/seo-audit/capabilities.yaml +0 -3
  77. package/assets/agent-templates/seo-audit/config.yaml +0 -14
  78. package/assets/agent-templates/seo-audit/references/report-template.md +0 -28
  79. package/assets/agent-templates/seo-audit/references/scoring-methodology.md +0 -30
  80. package/assets/agent-templates/seo-audit/scripts/analyze-html.ts +0 -82
  81. package/assets/agent-templates/seo-audit/scripts/fetch-page.ts +0 -39
  82. package/assets/agent-templates/seo-audit/scripts/list-routes.ts +0 -46
  83. package/assets/agent-templates/seo-audit/scripts/report.ts +0 -82
  84. package/assets/agent-templates/seo-audit/scripts/score.ts +0 -131
  85. package/assets/skills/fimo-cli/references/agents.md +0 -298
  86. package/assets/skills/fimo-studio/references/agents.md +0 -33
  87. package/assets/skills/fimo-studio/references/drawing-and-wireframing.md +0 -61
  88. package/templates/astro/src/components/ProjectOverview.astro +0 -45
  89. package/templates/astro/src/pages/[locale]/projects/[slug].astro +0 -38
  90. package/templates/astro/src/pages/[locale]/projects/index.astro +0 -19
  91. package/templates/astro/src/pages/projects/[slug].astro +0 -31
  92. package/templates/astro/src/pages/projects/index.astro +0 -13
  93. package/templates/astro/src/schemas/Project.json +0 -9
  94. package/templates/astro/src/schemas/Project.ts +0 -29
  95. package/templates/astro/src/schemas/Project.types.ts +0 -70
  96. package/templates/astro/src/schemas/SiteSettings.json +0 -10
  97. package/templates/astro/src/schemas/SiteSettings.ts +0 -31
  98. package/templates/astro/src/schemas/SiteSettings.types.ts +0 -69
  99. package/templates/react-router/src/pages/Privacy.tsx +0 -79
  100. package/templates/react-router/src/pages/Terms.tsx +0 -48
  101. package/templates/react-router/src/pages/legal/LegalPage.tsx +0 -42
  102. package/templates/welcome/manifest.json +0 -655
  103. package/templates/welcome/media/analytics-overview.avif +0 -0
  104. package/templates/welcome/media/autonomous-loop.avif +0 -0
  105. package/templates/welcome/media/editable-preview.avif +0 -0
  106. package/templates/welcome/media/media-library.avif +0 -0
  107. package/templates/welcome/media/slack-teams.avif +0 -0
  108. package/templates/welcome/template/.fimo/agents/welcome-guide/GOAL.md +0 -12
  109. package/templates/welcome/template/.fimo/agents/welcome-guide/capabilities.yaml +0 -3
  110. package/templates/welcome/template/.fimo/agents/welcome-guide/config.yaml +0 -8
  111. package/templates/welcome/template/.fimo/config.json +0 -52
  112. package/templates/welcome/template/src/font.css +0 -60
  113. package/templates/welcome/template/src/pages/ArticleDetail.tsx +0 -104
  114. package/templates/welcome/template/src/pages/Index.tsx +0 -36
  115. package/templates/welcome/template/src/pages/SiteContent.tsx +0 -674
  116. package/templates/welcome/template/src/pages/fallback-content.ts +0 -152
  117. package/templates/welcome/template/src/routes.ts +0 -9
  118. package/templates/welcome/template/src/schemas/Article.json +0 -34
  119. package/templates/welcome/template/src/schemas/Article.ts +0 -54
  120. package/templates/welcome/template/src/schemas/Article.types.ts +0 -93
  121. package/templates/welcome/template/src/schemas/Author.json +0 -17
  122. package/templates/welcome/template/src/schemas/Author.ts +0 -51
  123. package/templates/welcome/template/src/schemas/Author.types.ts +0 -54
  124. package/templates/welcome/template/src/schemas/Category.json +0 -17
  125. package/templates/welcome/template/src/schemas/Category.ts +0 -51
  126. package/templates/welcome/template/src/schemas/Category.types.ts +0 -54
  127. package/templates/welcome/template/src/schemas/HomePage.json +0 -110
  128. package/templates/welcome/template/src/schemas/HomePage.ts +0 -22
  129. package/templates/welcome/template/src/schemas/HomePage.types.ts +0 -116
@@ -1,31 +0,0 @@
1
- ---
2
- import { getLabels } from 'fimo/astro';
3
- import { Text } from 'fimo/astro/components';
4
- import { resolveSeoForPath } from 'fimo/seo';
5
-
6
- import config from '../../../.fimo/config.json';
7
- import Base from '../../layouts/Base.astro';
8
- import { defaultLocale } from '../../locales';
9
- import * as Project from '../../schemas/Project';
10
-
11
- export const prerender = false;
12
-
13
- const locale = Astro.currentLocale ?? defaultLocale;
14
- const slug = Astro.params.slug ?? '';
15
- const [project, labels] = await Promise.all([Project.getBySlug(slug, { locale }), getLabels({ locale })]);
16
-
17
- if (!project) {
18
- return Astro.redirect('/404');
19
- }
20
- const seo = resolveSeoForPath(Astro.url.pathname, config, { project });
21
- ---
22
-
23
- <Base lang={locale} seo={seo} title={seo?.title ?? String(project.title)}>
24
- <main data-framework="astro" data-rendering="server" data-project-slug={slug}>
25
- <a href="/projects"><Text as="span" value={labels.t('navigation.projects')} /></a>
26
- <article>
27
- <Text as="h1" value={project.title} />
28
- <Text as="p" value={project.summary} />
29
- </article>
30
- </main>
31
- </Base>
@@ -1,13 +0,0 @@
1
- ---
2
- import ProjectOverview from '../../components/ProjectOverview.astro';
3
- import Base from '../../layouts/Base.astro';
4
- import { defaultLocale } from '../../locales';
5
-
6
- export const prerender = false;
7
-
8
- const locale = Astro.currentLocale ?? defaultLocale;
9
- ---
10
-
11
- <Base lang={locale} title="Projects">
12
- <ProjectOverview {locale} rendering="server" />
13
- </Base>
@@ -1,9 +0,0 @@
1
- {
2
- "uid": "Project",
3
- "name": "Projects",
4
- "i18n": { "enabled": true },
5
- "fields": {
6
- "title": { "type": "string", "required": true },
7
- "summary": { "type": "text", "required": true }
8
- }
9
- }
@@ -1,29 +0,0 @@
1
- // AUTO-GENERATED by `fimo` from src/schemas/Project.json - DO NOT EDIT.
2
- // Runtime implementation lives in the project-local fimo/astro package export.
3
- import { createContentClient } from 'fimo/astro';
4
- import type { CollectionContentClient, ContentSchema } from 'fimo/astro';
5
-
6
- import schema from './Project.json';
7
- import type { Project, ProjectFields, ProjectInput, ProjectPopulate, ProjectQuery } from './Project.types';
8
-
9
- export type {
10
- Project,
11
- ProjectFields,
12
- ProjectFimoMeta,
13
- ProjectInput,
14
- ProjectPopulate,
15
- ProjectQuery,
16
- ProjectReferences,
17
- ProjectResult,
18
- ProjectSort,
19
- ProjectWhere,
20
- } from './Project.types';
21
- export type { CollectionPage, CollectionPageInfo } from 'fimo/astro';
22
-
23
- const client: CollectionContentClient<Project, ProjectInput> = createContentClient<Project, ProjectInput>({
24
- schema: schema as unknown as ContentSchema,
25
- });
26
-
27
- export const { wrapWithSource, meta, getById, getBySlug, getByField, list, get, create, update, remove } = client;
28
-
29
- export default client;
@@ -1,70 +0,0 @@
1
- // AUTO-GENERATED ⚠️ – do not edit by hand
2
- import {
3
- type Fields,
4
- type FimoBoolean,
5
- type FimoMedia,
6
- type FimoPolymorphicReference,
7
- type FimoReference,
8
- type FimoRichText,
9
- type FimoRichTextContent,
10
- type FimoString,
11
- type Populate,
12
- type PopulatedResult,
13
- type ProjectedWithPopulate,
14
- type Query,
15
- type Sort,
16
- type Where,
17
- type WithReferences,
18
- } from 'fimo/astro';
19
-
20
- /*───────────────────────────────────────────────────────────────*/
21
- /* ──────────── 📄 Type definitions ──────────── */
22
- /*───────────────────────────────────────────────────────────────*/
23
-
24
- /**
25
- * Project entity interface
26
- */
27
- export interface ProjectFimoMeta {
28
- contentType: 'Project';
29
- }
30
-
31
- export interface Project extends WithReferences<ProjectReferences> {
32
- id: string;
33
- entryId: string;
34
- documentId: string;
35
- slug: FimoString;
36
- locale: string;
37
- createdAt: string;
38
- updatedAt: string;
39
- __fimo: ProjectFimoMeta;
40
- title: FimoString;
41
- summary: FimoString;
42
- }
43
-
44
- export interface ProjectInput {
45
- slug?: string;
46
- locale?: string;
47
- documentId?: string;
48
- title: string;
49
- summary: string;
50
- }
51
-
52
- export type ProjectReferences = Record<never, never>;
53
-
54
- export type ProjectPopulate = Populate<Project>;
55
-
56
- /*───────────────────────────────────────────────────────────────*/
57
- /* ──────────── 🔎 Query types ──────────── */
58
- /*───────────────────────────────────────────────────────────────*/
59
-
60
- export type ProjectWhere = Where<Project>;
61
- export type ProjectSort = Sort<Project>;
62
- export type ProjectFields = Fields<Project>;
63
- export type ProjectQuery<
64
- TFields extends ProjectFields | undefined = ProjectFields | undefined,
65
- TPopulate extends ProjectPopulate | undefined = ProjectPopulate | undefined,
66
- > = Query<Project, TFields, TPopulate>;
67
- export type ProjectResult<
68
- TFields extends ProjectFields | undefined = undefined,
69
- TPopulate extends ProjectPopulate | undefined = undefined,
70
- > = ProjectedWithPopulate<PopulatedResult<Project, TPopulate>, TFields, TPopulate>;
@@ -1,10 +0,0 @@
1
- {
2
- "uid": "SiteSettings",
3
- "name": "Site settings",
4
- "isSingleton": true,
5
- "i18n": { "enabled": true },
6
- "fields": {
7
- "studioName": { "type": "string", "required": true },
8
- "intro": { "type": "text", "required": true }
9
- }
10
- }
@@ -1,31 +0,0 @@
1
- // AUTO-GENERATED by `fimo` from src/schemas/SiteSettings.json - DO NOT EDIT.
2
- // Runtime implementation lives in the project-local fimo/astro package export.
3
- import { createSingletonClient } from 'fimo/astro';
4
- import type { ContentSchema, SingletonContentClient } from 'fimo/astro';
5
-
6
- import schema from './SiteSettings.json';
7
- import type { SiteSettings, SiteSettingsInput } from './SiteSettings.types';
8
-
9
- export type {
10
- SiteSettings,
11
- SiteSettingsFields,
12
- SiteSettingsFimoMeta,
13
- SiteSettingsInput,
14
- SiteSettingsPopulate,
15
- SiteSettingsQuery,
16
- SiteSettingsReferences,
17
- SiteSettingsResult,
18
- SiteSettingsSort,
19
- SiteSettingsWhere,
20
- } from './SiteSettings.types';
21
-
22
- const client: SingletonContentClient<SiteSettings, SiteSettingsInput> = createSingletonClient<
23
- SiteSettings,
24
- SiteSettingsInput
25
- >({
26
- schema: schema as unknown as ContentSchema,
27
- });
28
-
29
- export const { get, update, wrapWithSource, meta } = client;
30
-
31
- export default client;
@@ -1,69 +0,0 @@
1
- // AUTO-GENERATED ⚠️ – do not edit by hand
2
- import {
3
- type Fields,
4
- type FimoBoolean,
5
- type FimoMedia,
6
- type FimoPolymorphicReference,
7
- type FimoReference,
8
- type FimoRichText,
9
- type FimoRichTextContent,
10
- type FimoString,
11
- type Populate,
12
- type PopulatedResult,
13
- type ProjectedWithPopulate,
14
- type Query,
15
- type Sort,
16
- type Where,
17
- type WithReferences,
18
- } from 'fimo/astro';
19
-
20
- /*───────────────────────────────────────────────────────────────*/
21
- /* ──────────── 📄 Type definitions ──────────── */
22
- /*───────────────────────────────────────────────────────────────*/
23
-
24
- /**
25
- * SiteSettings entity interface
26
- */
27
- export interface SiteSettingsFimoMeta {
28
- contentType: 'SiteSettings';
29
- }
30
-
31
- export interface SiteSettings extends WithReferences<SiteSettingsReferences> {
32
- id: string;
33
- entryId: string;
34
- documentId: string;
35
- slug: FimoString;
36
- locale: string;
37
- createdAt: string;
38
- updatedAt: string;
39
- __fimo: SiteSettingsFimoMeta;
40
- studioName: FimoString;
41
- intro: FimoString;
42
- }
43
-
44
- export interface SiteSettingsInput {
45
- slug?: string;
46
- locale?: string;
47
- studioName: string;
48
- intro: string;
49
- }
50
-
51
- export type SiteSettingsReferences = Record<never, never>;
52
-
53
- export type SiteSettingsPopulate = Populate<SiteSettings>;
54
-
55
- /*───────────────────────────────────────────────────────────────*/
56
- /* ──────────── 🔎 Query types ──────────── */
57
- /*───────────────────────────────────────────────────────────────*/
58
-
59
- export type SiteSettingsWhere = Where<SiteSettings>;
60
- export type SiteSettingsSort = Sort<SiteSettings>;
61
- export type SiteSettingsFields = Fields<SiteSettings>;
62
- export type SiteSettingsQuery<
63
- TFields extends SiteSettingsFields | undefined = SiteSettingsFields | undefined,
64
- TPopulate extends SiteSettingsPopulate | undefined = SiteSettingsPopulate | undefined,
65
- > = Query<SiteSettings, TFields, TPopulate>;
66
- export type SiteSettingsResult<
67
- TFields extends SiteSettingsFields | undefined = undefined,
68
- TPopulate extends SiteSettingsPopulate | undefined = undefined,
69
- > = ProjectedWithPopulate<PopulatedResult<SiteSettings, TPopulate>, TFields, TPopulate>;
@@ -1,79 +0,0 @@
1
- import { LegalPage } from './legal/LegalPage';
2
-
3
- const privacyHtml = `
4
- <p><strong>Last updated:</strong> January 1, 2026</p>
5
- <h2>Overview</h2>
6
- <p>
7
- This Privacy Policy explains how this website collects, uses, and discloses information when you use this website.
8
- </p>
9
- <h2>Data We Collect</h2>
10
- <p>We may collect:</p>
11
- <ul>
12
- <li>Usage information (such as visited pages, timestamps, and navigation flow).</li>
13
- <li>Technical information (such as browser type, operating system, device type, and approximate region derived from IP metadata).</li>
14
- <li>Referral information (such as referrer URL).</li>
15
- <li>Identifiers used for analytics (such as visitor and session identifiers stored in browser storage).</li>
16
- </ul>
17
- <h2>How We Use Data</h2>
18
- <p>
19
- We use data to operate this website, measure traffic and performance, detect abuse, troubleshoot errors, and improve
20
- content and product decisions.
21
- </p>
22
- <h2>Legal Basis</h2>
23
- <p>Depending on your location, processing may rely on:</p>
24
- <ul>
25
- <li>Your consent (for example, where analytics consent is required).</li>
26
- <li>Legitimate interests (for example, service reliability, security, and product improvement).</li>
27
- <li>Compliance with legal obligations when applicable.</li>
28
- </ul>
29
- <h2>Cookies and Similar Technologies</h2>
30
- <p>
31
- This website may use cookies or browser storage for session continuity and analytics measurement. Where required by
32
- law, non-essential analytics technologies are used only after consent.
33
- </p>
34
- <h2>Sharing and Processors</h2>
35
- <p>
36
- We may use service providers to process analytics and infrastructure data on our behalf. For this website, analytics
37
- events may be processed by Fimo infrastructure providers as a data processor for the site operator.
38
- </p>
39
- <h2>International Transfers</h2>
40
- <p>
41
- Data may be processed in countries other than your own. When required, we apply appropriate safeguards for
42
- cross-border transfers.
43
- </p>
44
- <h2>Retention</h2>
45
- <p>
46
- We retain analytics data only for as long as reasonably necessary for operational, reporting, security, and
47
- compliance needs, then delete or de-identify it.
48
- </p>
49
- <h2>Your Rights</h2>
50
- <p>
51
- Depending on your jurisdiction, you may have rights to access, correct, delete, restrict, object to certain
52
- processing, or receive a copy of your personal data.
53
- </p>
54
- <h2>Children's Privacy</h2>
55
- <p>
56
- This website is not intended for children under the age required by applicable law, and we do not knowingly collect
57
- personal data from children where prohibited.
58
- </p>
59
- <h2>Security</h2>
60
- <p>
61
- We apply reasonable technical and organizational safeguards to protect data, but no method of transmission or
62
- storage is completely secure.
63
- </p>
64
- <h2>Policy Changes</h2>
65
- <p>
66
- We may update this policy from time to time. Material changes will be reflected by updating the "Last updated" date
67
- on this page.
68
- </p>
69
- <h2>Contact</h2>
70
- <p>
71
- Privacy requests can be sent to <a href="mailto:privacy@fimo.ai">privacy@fimo.ai</a>.
72
- </p>
73
- `;
74
-
75
- const Privacy = () => {
76
- return <LegalPage title="Privacy Policy" lastUpdated="January 1, 2026" html={privacyHtml} />;
77
- };
78
-
79
- export default Privacy;
@@ -1,48 +0,0 @@
1
- import { LegalPage } from './legal/LegalPage';
2
-
3
- const termsHtml = `
4
- <p><strong>Last updated:</strong> January 1, 2026</p>
5
- <h2>Acceptance</h2>
6
- <p>By using this website, you agree to these Terms of Service.</p>
7
- <h2>Operator</h2>
8
- <p>
9
- This website is operated by the site owner and may use third-party infrastructure and analytics processors to
10
- provide the service.
11
- </p>
12
- <h2>Permitted Use</h2>
13
- <p>You agree not to misuse the site, interfere with its operation, or attempt unauthorized access.</p>
14
- <h2>Analytics and Privacy</h2>
15
- <p>
16
- Use of this website may involve collection of usage and technical analytics data as described in the Privacy Policy.
17
- Where required, analytics is subject to user consent choices.
18
- </p>
19
- <h2>Intellectual Property</h2>
20
- <p>
21
- Unless otherwise stated, site content and branding are protected by applicable intellectual property laws and may
22
- not be reused without permission.
23
- </p>
24
- <h2>Changes</h2>
25
- <p>We may update these terms from time to time. Updated terms are effective when posted on this page.</p>
26
- <h2>Disclaimer</h2>
27
- <p>The website is provided on an "as is" and "as available" basis to the extent permitted by law.</p>
28
- <h2>Limitation of Liability</h2>
29
- <p>
30
- To the maximum extent permitted by law, the site operator is not liable for indirect, incidental, special,
31
- consequential, or punitive damages arising from use of the website.
32
- </p>
33
- <h2>Governing Law</h2>
34
- <p>
35
- These terms are governed by applicable law in the operator's jurisdiction, unless mandatory local consumer law
36
- provides otherwise.
37
- </p>
38
- <h2>Contact</h2>
39
- <p>
40
- Legal requests can be sent to <a href="mailto:privacy@fimo.ai">privacy@fimo.ai</a>.
41
- </p>
42
- `;
43
-
44
- const Terms = () => {
45
- return <LegalPage title="Terms of Service" lastUpdated="January 1, 2026" html={termsHtml} />;
46
- };
47
-
48
- export default Terms;
@@ -1,42 +0,0 @@
1
- import { FimoLink } from 'fimo-react-router';
2
-
3
- interface LegalPageProps {
4
- title: string;
5
- lastUpdated: string;
6
- html: string;
7
- }
8
-
9
- export function LegalPage({ title, lastUpdated, html }: LegalPageProps) {
10
- return (
11
- <div className="bg-background text-foreground min-h-screen">
12
- <div className="pointer-events-none absolute inset-0 bg-[radial-gradient(75%_45%_at_50%_0%,rgba(56,189,248,0.15),transparent_70%)]" />
13
-
14
- <main className="relative mx-auto w-full max-w-4xl px-6 py-12 md:py-16">
15
- <header className="border-border mb-10 border-b pb-6">
16
- <p className="text-muted-foreground text-xs tracking-[0.2em] uppercase">Legal</p>
17
- <h1 className="mt-3 text-3xl font-semibold md:text-4xl">{title}</h1>
18
- <p className="text-muted-foreground mt-3 text-sm">Last updated: {lastUpdated}</p>
19
- </header>
20
-
21
- <article
22
- className="prose prose-neutral dark:prose-invert prose-headings:scroll-mt-20 prose-a:text-foreground max-w-none"
23
- dangerouslySetInnerHTML={{ __html: html }}
24
- />
25
- </main>
26
-
27
- <footer className="border-border relative border-t">
28
- <div className="text-muted-foreground mx-auto flex w-full max-w-4xl items-center justify-between px-6 py-4 text-sm">
29
- <span>Legal documents</span>
30
- <nav className="flex items-center gap-4">
31
- <FimoLink to="/privacy" className="hover:text-foreground">
32
- Privacy
33
- </FimoLink>
34
- <FimoLink to="/terms" className="hover:text-foreground">
35
- Terms
36
- </FimoLink>
37
- </nav>
38
- </div>
39
- </footer>
40
- </div>
41
- );
42
- }