From 6f924d24601478ab3df26f0f718dc84ae96f8cf3 Mon Sep 17 00:00:00 2001 From: charitra-prem Date: Thu, 27 Aug 2026 00:26:12 +0530 Subject: [PATCH] Restore diagrams and migration parity --- components/diagrams.tsx | 204 +++++++++++++++++++++++++++++++ components/mdx.tsx | 2 + components/mintlify.tsx | 13 ++ components/provider.tsx | 9 +- content/docs/features/memory.mdx | 4 +- content/docs/going-deeper.mdx | 2 + content/docs/release-notes.mdx | 1 + lib/layout.shared.tsx | 51 ++++++++ lib/source.ts | 13 ++ 9 files changed, 295 insertions(+), 4 deletions(-) create mode 100644 components/diagrams.tsx 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 ( +
+
+
+

+ {detail} +

+
+ ); +} + +function ProjectMemory({ name }: { name: string }) { + return ( +
+
+
+
+ + +
+
+ ); +} + +export function MemoryScopeDiagram() { + return ( +
+ + +
+ ); +} + +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 ( +
+ + How the knowledge graph grows + + People, meetings, decisions, files, and projects form connected nodes. + The connections accumulate over time. + + + + {graphEdges.map(([from, to]) => ( + + ))} + + + {graphNodes.map(({ label, x, y, icon: Icon }) => ( + + + + + {label} + + + ))} + + + + + + First conversations + + + More connected context + + + + +
+ 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 ( + + GitHub + + + ); +} + +function XIcon() { + return ( + + X + + + ); +} + +function LinkedInIcon() { + return ( + + LinkedIn + + + ); +} + 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']) {