docs: add VitePress documentation site

- 22 content pages across Guide, Concepts, and Reference sections
- Custom indigo/cyan theme with Lucide icons and Mermaid diagrams
- GitHub Actions workflow for GitHub Pages deployment
- Live preview: https://mempalace-docs.netlify.app/
This commit is contained in:
Igor Lins e Silva
2026-04-09 19:11:23 -03:00
parent 2981433535
commit dfb22f5345
37 changed files with 3673 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
import { defineConfig } from 'vitepress'
import { withMermaid } from 'vitepress-plugin-mermaid'
const docsBase = process.env.DOCS_BASE || '/mempalace/'
export default withMermaid(
defineConfig({
title: 'MemPalace',
description: 'Give your AI a memory. Local-first storage and retrieval for AI workflows, with benchmark results and MCP tooling.',
base: docsBase,
head: [
['link', { rel: 'icon', href: `${docsBase}mempalace_logo.png` }],
['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }],
['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }],
['link', { href: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap', rel: 'stylesheet' }],
['meta', { property: 'og:title', content: 'MemPalace — AI Memory System' }],
['meta', { property: 'og:description', content: '96.6% LongMemEval recall. Zero API calls. Local, free, open source.' }],
['meta', { property: 'og:image', content: `${docsBase}mempalace_logo.png` }],
],
themeConfig: {
logo: '/mempalace_logo.png',
siteTitle: 'MemPalace',
nav: [
{ text: 'Guide', link: '/guide/getting-started' },
{ text: 'Concepts', link: '/concepts/the-palace' },
{ text: 'Reference', link: '/reference/cli' },
],
sidebar: {
'/guide/': [
{
text: 'Guide',
items: [
{ text: 'Getting Started', link: '/guide/getting-started' },
{ text: 'Mining Your Data', link: '/guide/mining' },
{ text: 'Searching Memories', link: '/guide/searching' },
{ text: 'MCP Integration', link: '/guide/mcp-integration' },
{ text: 'Claude Code Plugin', link: '/guide/claude-code' },
{ text: 'Gemini CLI', link: '/guide/gemini-cli' },
{ text: 'Local Models', link: '/guide/local-models' },
{ text: 'Auto-Save Hooks', link: '/guide/hooks' },
{ text: 'Configuration', link: '/guide/configuration' },
],
},
],
'/concepts/': [
{
text: 'Concepts',
items: [
{ text: 'The Palace', link: '/concepts/the-palace' },
{ text: 'Memory Stack', link: '/concepts/memory-stack' },
{ text: 'AAAK Dialect', link: '/concepts/aaak-dialect' },
{ text: 'Knowledge Graph', link: '/concepts/knowledge-graph' },
{ text: 'Specialist Agents', link: '/concepts/agents' },
{ text: 'Contradiction Detection', link: '/concepts/contradiction-detection' },
],
},
],
'/reference/': [
{
text: 'Reference',
items: [
{ text: 'CLI Commands', link: '/reference/cli' },
{ text: 'MCP Tools', link: '/reference/mcp-tools' },
{ text: 'Python API', link: '/reference/python-api' },
{ text: 'API Reference', link: '/reference/api-reference' },
{ text: 'Module Map', link: '/reference/modules' },
{ text: 'Benchmarks', link: '/reference/benchmarks' },
{ text: 'Contributing', link: '/reference/contributing' },
],
},
],
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/milla-jovovich/mempalace' },
{ icon: 'discord', link: 'https://discord.com/invite/ycTQQCu6kn' },
],
search: {
provider: 'local',
},
footer: {
message: 'Released under the MIT License.',
copyright: 'Copyright © 2026 MemPalace contributors',
},
editLink: {
pattern: 'https://github.com/milla-jovovich/mempalace/edit/main/website/:path',
text: 'Edit this page on GitHub',
},
},
mermaid: {
theme: 'dark',
},
})
)
+6
View File
@@ -0,0 +1,6 @@
import DefaultTheme from 'vitepress/theme'
import './style.css'
export default {
extends: DefaultTheme,
}
+215
View File
@@ -0,0 +1,215 @@
/* ── MemPalace Custom Theme ──────────────────────────────────────────── */
/* Deep indigo / cyan palette — evoking architectural grandeur */
:root {
/* Brand palette */
--mp-indigo: #4f46e5;
--mp-indigo-light: #6366f1;
--mp-indigo-dark: #3730a3;
--mp-cyan: #06b6d4;
--mp-cyan-light: #22d3ee;
--mp-purple: #8b5cf6;
--mp-purple-light: #a78bfa;
--mp-emerald: #10b981;
--mp-amber: #f59e0b;
/* VitePress overrides */
--vp-c-brand-1: var(--mp-indigo);
--vp-c-brand-2: var(--mp-indigo-light);
--vp-c-brand-3: var(--mp-purple);
--vp-c-brand-soft: rgba(79, 70, 229, 0.14);
--vp-font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--vp-font-family-mono: 'JetBrains Mono', 'Fira Code', monospace;
/* Home hero gradient */
--vp-home-hero-name-color: transparent;
--vp-home-hero-name-background: linear-gradient(135deg, var(--mp-indigo) 0%, var(--mp-cyan) 50%, var(--mp-purple) 100%);
--vp-home-hero-image-background-image: linear-gradient(135deg, rgba(79, 70, 229, 0.25) 0%, rgba(6, 182, 212, 0.25) 50%, rgba(139, 92, 246, 0.15) 100%);
--vp-home-hero-image-filter: blur(56px);
/* Button colors */
--vp-button-brand-border: transparent;
--vp-button-brand-text: #ffffff;
--vp-button-brand-bg: var(--mp-indigo);
--vp-button-brand-hover-border: transparent;
--vp-button-brand-hover-text: #ffffff;
--vp-button-brand-hover-bg: var(--mp-indigo-light);
--vp-button-alt-border: rgba(79, 70, 229, 0.25);
--vp-button-alt-text: var(--mp-indigo);
--vp-button-alt-bg: rgba(79, 70, 229, 0.08);
--vp-button-alt-hover-border: rgba(79, 70, 229, 0.4);
--vp-button-alt-hover-text: var(--mp-indigo-dark);
--vp-button-alt-hover-bg: rgba(79, 70, 229, 0.14);
}
/* Dark mode overrides */
.dark {
--vp-c-brand-1: var(--mp-cyan-light);
--vp-c-brand-2: var(--mp-cyan);
--vp-c-brand-3: var(--mp-purple-light);
--vp-c-brand-soft: rgba(6, 182, 212, 0.14);
--vp-button-brand-bg: var(--mp-indigo-light);
--vp-button-brand-hover-bg: var(--mp-indigo);
--vp-button-alt-border: rgba(34, 211, 238, 0.25);
--vp-button-alt-text: var(--mp-cyan-light);
--vp-button-alt-bg: rgba(34, 211, 238, 0.08);
--vp-button-alt-hover-border: rgba(34, 211, 238, 0.4);
--vp-button-alt-hover-text: var(--mp-cyan);
--vp-button-alt-hover-bg: rgba(34, 211, 238, 0.14);
--vp-home-hero-image-background-image: linear-gradient(135deg, rgba(99, 102, 241, 0.3) 0%, rgba(6, 182, 212, 0.3) 50%, rgba(139, 92, 246, 0.2) 100%);
}
/* ── Hero section ───────────────────────────────────────────────────── */
.VPHero .VPImage {
max-width: 180px;
border-radius: 20px;
}
.VPHero .name {
font-weight: 700 !important;
}
.VPHero .text {
font-weight: 500;
background: linear-gradient(135deg, var(--vp-c-text-1) 0%, var(--mp-indigo-light) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.dark .VPHero .text {
background: linear-gradient(135deg, var(--vp-c-text-1) 0%, var(--mp-cyan-light) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* ── Feature cards ──────────────────────────────────────────────────── */
.VPFeature {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 1px solid var(--vp-c-divider);
}
.VPFeature:hover {
transform: translateY(-4px);
border-color: var(--mp-indigo);
box-shadow: 0 12px 40px rgba(79, 70, 229, 0.12);
}
.dark .VPFeature:hover {
border-color: var(--mp-cyan);
box-shadow: 0 12px 40px rgba(6, 182, 212, 0.12);
}
.VPFeature .title {
font-weight: 600;
}
/* ── Sidebar ────────────────────────────────────────────────────────── */
.VPSidebar .VPSidebarItem .text {
transition: color 0.2s ease;
}
.VPSidebar .VPSidebarItem.is-active .text {
color: var(--mp-indigo) !important;
font-weight: 600;
}
.dark .VPSidebar .VPSidebarItem.is-active .text {
color: var(--mp-cyan-light) !important;
}
/* ── Code blocks ────────────────────────────────────────────────────── */
.vp-doc div[class*='language-'] {
border: 1px solid var(--vp-c-divider);
border-radius: 8px;
}
.dark .vp-doc div[class*='language-'] {
border-color: rgba(6, 182, 212, 0.15);
}
/* ── Custom containers ──────────────────────────────────────────────── */
.vp-doc .custom-block.tip {
border-color: var(--mp-cyan);
}
.vp-doc .custom-block.warning {
border-color: var(--mp-amber);
}
.vp-doc .custom-block.info {
border-color: var(--mp-indigo);
}
/* ── Tables ─────────────────────────────────────────────────────────── */
.vp-doc table {
border-radius: 8px;
overflow: hidden;
}
.vp-doc th {
background: rgba(79, 70, 229, 0.06);
font-weight: 600;
}
.dark .vp-doc th {
background: rgba(6, 182, 212, 0.08);
}
/* ── Nav ────────────────────────────────────────────────────────────── */
.VPNavBar .VPNavBarTitle .title {
font-weight: 700;
letter-spacing: -0.01em;
}
/* ── Footer ─────────────────────────────────────────────────────────── */
.VPFooter {
border-top: 1px solid var(--vp-c-divider);
}
/* ── Scrollbar ──────────────────────────────────────────────────────── */
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-thumb {
background: var(--vp-c-divider);
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--mp-indigo);
}
.dark ::-webkit-scrollbar-thumb:hover {
background: var(--mp-cyan);
}
/* ── Smooth transitions ─────────────────────────────────────────────── */
a, .VPLink {
transition: color 0.2s ease;
}
.VPButton {
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}
.VPButton:hover {
transform: translateY(-1px);
}