diff --git a/components/diagrams.tsx b/components/diagrams.tsx
new file mode 100644
index 0000000..538c18b
--- /dev/null
+++ b/components/diagrams.tsx
@@ -0,0 +1,204 @@
+import {
+ Clock3,
+ FileText,
+ FolderClosed,
+ MessageSquareText,
+ Users,
+} from 'lucide-react';
+
+function Layer({
+ label,
+ detail,
+ icon: Icon,
+ emphasis = false,
+}: {
+ label: string;
+ detail: string;
+ icon: typeof FolderClosed;
+ emphasis?: boolean;
+}) {
+ return (
+
+
+
+ {label}
+
+
+ {detail}
+
+
+ );
+}
+
+function ProjectMemory({ name }: { name: string }) {
+ return (
+
+
+
+ {name}
+
+ private scope
+
+
+
+
+
+
+
+ );
+}
+
+export function MemoryScopeDiagram() {
+ return (
+
+
+
+
+
+
+
+ Global preferences apply everywhere. Project context and working memory
+ stay inside their project.
+
+
+ );
+}
+
+const graphNodes = [
+ { label: 'People', x: 104, y: 86, icon: Users },
+ { label: 'Meetings', x: 318, y: 62, icon: MessageSquareText },
+ { label: 'Decisions', x: 532, y: 130, icon: FileText },
+ { label: 'Files', x: 340, y: 230, icon: FileText },
+ { label: 'Projects', x: 118, y: 226, icon: FolderClosed },
+] as const;
+
+const graphEdges = [
+ [0, 1],
+ [0, 4],
+ [1, 2],
+ [1, 3],
+ [1, 4],
+ [2, 3],
+ [3, 4],
+] as const;
+
+export function KnowledgeGraphDiagram() {
+ return (
+
+
+
+
+ Fluso connects people, meetings, decisions, files, and projects as it
+ works with them.
+
+
+ );
+}
diff --git a/components/mdx.tsx b/components/mdx.tsx
index d60dc60..1ffa1c2 100644
--- a/components/mdx.tsx
+++ b/components/mdx.tsx
@@ -1,10 +1,12 @@
import defaultMdxComponents from 'fumadocs-ui/mdx';
import type { MDXComponents } from 'mdx/types';
+import * as diagrams from '@/components/diagrams';
import * as mintlify from '@/components/mintlify';
export function getMDXComponents(components?: MDXComponents) {
return {
...defaultMdxComponents,
+ ...diagrams,
...mintlify,
...components,
} satisfies MDXComponents;
diff --git a/components/mintlify.tsx b/components/mintlify.tsx
index 03172de..6b872a7 100644
--- a/components/mintlify.tsx
+++ b/components/mintlify.tsx
@@ -15,6 +15,19 @@ import { cn } from '@/lib/cn';
*/
function LucideIcon({ name, className }: { name: string; className?: string }) {
+ if (name === 'github') {
+ return (
+
+ );
+ }
+
const pascal = name
.split('-')
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
diff --git a/components/provider.tsx b/components/provider.tsx
index 522282b..9ef7f36 100644
--- a/components/provider.tsx
+++ b/components/provider.tsx
@@ -4,5 +4,12 @@ import { RootProvider } from 'fumadocs-ui/provider/next';
import { type ReactNode } from 'react';
export function Provider({ children }: { children: ReactNode }) {
- return {children};
+ return (
+
+ {children}
+
+ );
}
diff --git a/content/docs/features/memory.mdx b/content/docs/features/memory.mdx
index aacf5f9..a3d5c20 100644
--- a/content/docs/features/memory.mdx
+++ b/content/docs/features/memory.mdx
@@ -10,9 +10,7 @@ Durable memory follows a stricter rule than you might expect: it saves stable th
## Three layers
-
- **Diagram —** Three layers shown with their scope: **Global preferences** (widest reach), **Project context** (durable, scoped to one project), and **Project working memory** (recent activity, also project-scoped). Visual should make clear that project material does not leak into other projects.
-
+
**Global preferences.** User-level things that should apply everywhere. Your timezone, the response style you have asked for, workflow choices, standing instructions like *"always show me drafts in plain text"*. These live in `preferences.md` in your workspace, where you can read them.
diff --git a/content/docs/going-deeper.mdx b/content/docs/going-deeper.mdx
index 1044f0e..5b50ffb 100644
--- a/content/docs/going-deeper.mdx
+++ b/content/docs/going-deeper.mdx
@@ -73,6 +73,8 @@ The full mechanics are in [Skills](/features/skills). The bar for building one i
Memory builds itself in the background. You do not have to maintain it. A few habits keep it useful and on-scope. The mechanics are in [Memory](/features/memory) — this is what to do with them.
+
+
**Be explicit when something is durable.** *"Remember that I prefer drafts in plain text"*, *"add to project context: the Q3 launch ships on August 14"*. Background learning is conservative on purpose; explicit asks are the fast path.
**Tell Fluso to forget when you need to.** *"Forget my old timezone"*, *"don't track anything about this vendor"*. The same explicit channel works in reverse.
diff --git a/content/docs/release-notes.mdx b/content/docs/release-notes.mdx
index 6a13364..db6ebae 100644
--- a/content/docs/release-notes.mdx
+++ b/content/docs/release-notes.mdx
@@ -1,5 +1,6 @@
---
title: "Release notes"
+icon: sparkles
description: "What's new in Fluso - product updates, improvements, and fixes."
---
diff --git a/lib/layout.shared.tsx b/lib/layout.shared.tsx
index ef5ccf6..0a44f6f 100644
--- a/lib/layout.shared.tsx
+++ b/lib/layout.shared.tsx
@@ -1,6 +1,33 @@
import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';
import Image from 'next/image';
+function GitHubIcon() {
+ return (
+
+ );
+}
+
+function XIcon() {
+ return (
+
+ );
+}
+
+function LinkedInIcon() {
+ return (
+
+ );
+}
+
export function baseOptions(): BaseLayoutProps {
return {
nav: {
@@ -30,6 +57,30 @@ export function baseOptions(): BaseLayoutProps {
text: 'Download',
url: 'https://fluso.ai/',
},
+ {
+ type: 'icon',
+ text: 'X',
+ label: 'Fluso on X',
+ url: 'https://twitter.com/premai_io',
+ icon: ,
+ external: true,
+ },
+ {
+ type: 'icon',
+ text: 'GitHub',
+ label: 'Fluso on GitHub',
+ url: 'https://github.com/premAI-io',
+ icon: ,
+ external: true,
+ },
+ {
+ type: 'icon',
+ text: 'LinkedIn',
+ label: 'Fluso on LinkedIn',
+ url: 'https://linkedin.com/company/premai',
+ icon: ,
+ external: true,
+ },
],
};
}
diff --git a/lib/source.ts b/lib/source.ts
index a516b27..47c33f5 100644
--- a/lib/source.ts
+++ b/lib/source.ts
@@ -2,6 +2,8 @@ import { loader } from 'fumadocs-core/source';
import { docsContentRoute, docsImageRoute, docsRoute } from './shared';
import { defineDocs } from 'fumadocs-mdx/macro';
import { metaSchema, pageSchema } from 'fumadocs-core/source/schema';
+import { icons } from 'lucide-react';
+import { createElement, type ComponentType } from 'react';
const docs = defineDocs({
dir: 'content/docs',
@@ -21,6 +23,17 @@ export const source = loader({
baseUrl: docsRoute,
source: docs.toFumadocsSource(),
plugins: [],
+ icon(icon) {
+ if (!icon) return;
+ const pascal = icon
+ .split('-')
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
+ .join('');
+ const Icon = (icons as Record>)[
+ pascal
+ ];
+ return Icon ? createElement(Icon) : undefined;
+ },
});
export function getPageImageUrl(page: (typeof source)['$inferPage']) {