From 8a566edda63ceb8f89abe3667e9a0f1a721a049a Mon Sep 17 00:00:00 2001 From: zTgx <747674262@qq.com> Date: Tue, 14 Apr 2026 13:27:20 +0800 Subject: [PATCH 1/4] feat(docs): enhance homepage with comprehensive redesign - Add new homepage layout with hero section, feature grid, and step-by-step workflow - Implement responsive design with mobile-first approach - Add interactive code preview showing Python SDK usage - Include feature cards highlighting key benefits of Vectorless - Add call-to-action sections with primary and secondary buttons - Update site description to reflect reasoning-native approach refactor(docs): restructure footer navigation links - Rename 'Docs' to 'Product' and add Documentation and Blog links - Change 'Packages' to 'Integrations' with Python SDK and Rust Crate entries - Rename 'More' to 'Community' and add Report a Bug and License links - Reorganize navigation structure for better user experience chore(authors): add profile image for zTgx author - Add image_url field pointing to beautifularea.png for zTgx author profile --- docs/blog/authors.yml | 1 + docs/docusaurus.config.ts | 36 ++- docs/src/pages/index.module.css | 398 ++++++++++++++++++++++++++++++-- docs/src/pages/index.tsx | 187 ++++++++++++++- 4 files changed, 587 insertions(+), 35 deletions(-) diff --git a/docs/blog/authors.yml b/docs/blog/authors.yml index 66b7387e..8103ac2a 100644 --- a/docs/blog/authors.yml +++ b/docs/blog/authors.yml @@ -3,6 +3,7 @@ zTgx: title: Rust Developer url: https://beautifularea.com page: true + image_url: https://www.beautifularea.com/images/design-mode/beautifularea.png socials: x: pendingcode github: zTgx diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index d599c706..6b329f6e 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -82,38 +82,54 @@ const config: Config = { style: 'light', links: [ { - title: 'Docs', + title: 'Product', items: [ { label: 'Getting Started', to: '/docs/intro', }, + { + label: 'Documentation', + to: '/docs/intro', + }, + { + label: 'Blog', + to: '/blog', + }, ], }, { - title: 'Packages', + title: 'Integrations', items: [ { - label: 'Rust (crates.io)', + label: 'Python SDK', + href: 'https://pypi.org/project/vectorless/', + }, + { + label: 'Rust Crate', href: 'https://crates.io/crates/vectorless', }, { - label: 'Python (PyPI)', - href: 'https://pypi.org/project/vectorless/', + label: 'API Reference', + href: 'https://docs.rs/vectorless', }, ], }, { - title: 'More', + title: 'Community', items: [ - { - label: 'Blog', - to: '/blog', - }, { label: 'GitHub', href: 'https://github.com/vectorlessflow/vectorless', }, + { + label: 'Report a Bug', + href: 'https://github.com/vectorlessflow/vectorless/issues', + }, + { + label: 'Apache 2.0 License', + href: 'https://github.com/vectorlessflow/vectorless/blob/main/LICENSE', + }, ], }, ], diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css index 19c2cf23..40983d29 100644 --- a/docs/src/pages/index.module.css +++ b/docs/src/pages/index.module.css @@ -1,42 +1,402 @@ /** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. + * Homepage styles for Vectorless. + * Color tokens come from src/css/custom.css (--primary, --text, etc.) + * + * NOTE: Do NOT use bare class ".container" — it collides with Docusaurus' + * built-in container. Use scoped names like .heroInner / .sectionInner instead. */ +/* ===== Hero ===== */ .heroBanner { - padding: 4rem 0; - text-align: center; + padding: 5rem 1.5rem 4rem; position: relative; overflow: hidden; background: linear-gradient(180deg, var(--bg-secondary) 0%, var(--bg) 100%); } -.heroBanner h1 { - font-size: 52px; - font-weight: 700; - line-height: 1.15; - background: linear-gradient(135deg, var(--text) 0%, var(--primary) 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; +.heroInner { + max-width: 1200px; + margin: 0 auto; + display: flex; + align-items: center; + gap: 3rem; +} + +/* -- Left column -- */ +.heroContent { + flex: 1; + min-width: 0; } -.heroBanner p { +.heroLogo { + display: block; + max-width: 320px; + width: 100%; + height: auto; + margin-bottom: 1.5rem; +} + +.heroTagline { color: var(--text-light); - font-size: 20px; + font-size: 1.15rem; line-height: 1.7; + margin: 0 0 1.75rem; +} + +.heroActions { + display: flex; + gap: 0.75rem; + flex-wrap: wrap; +} + +/* -- Right column: code preview -- */ +.codePreview { + flex: 0 0 440px; + max-width: 440px; + border-radius: 12px; + overflow: hidden; + border: 1px solid var(--border); + background: #1e1e2e; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12); +} + +.codeHeader { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.55rem 1rem; + background: #181825; +} + +.codeDots { + display: flex; + gap: 6px; +} + +.codeDots span { + width: 10px; + height: 10px; + border-radius: 50%; +} + +.codeDots span:nth-child(1) { background: #f38ba8; } +.codeDots span:nth-child(2) { background: #f9e2af; } +.codeDots span:nth-child(3) { background: #a6e3a1; } + +.codeLang { + font-size: 0.7rem; + color: #6c7086; + font-weight: 500; +} + +.codeBlock { + margin: 0; + padding: 1rem 1.25rem; + font-size: 0.78rem; + line-height: 1.7; + color: #cdd6f4; + overflow-x: auto; + background: transparent; +} + +.codeBlock code { + font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', monospace; + font-size: 0.76rem; +} + +/* ===== Buttons ===== */ +.buttonPrimary { + display: inline-flex; + align-items: center; + padding: 0.65rem 1.6rem; + font-size: 0.92rem; + font-weight: 600; + border-radius: 8px; + background-color: var(--primary); + color: #fff; + text-decoration: none; + transition: background-color 0.2s, transform 0.1s; +} + +.buttonPrimary:hover { + background-color: var(--primary-dark); + color: #fff; + text-decoration: none; + transform: translateY(-1px); +} + +.buttonSecondary { + display: inline-flex; + align-items: center; + padding: 0.65rem 1.6rem; + font-size: 0.92rem; + font-weight: 600; + border-radius: 8px; + background-color: transparent; + color: var(--text); + border: 1.5px solid var(--border); + text-decoration: none; + transition: border-color 0.2s, transform 0.1s; +} + +.buttonSecondary:hover { + border-color: var(--primary); + color: var(--primary); + text-decoration: none; + transform: translateY(-1px); +} + +/* ===== Sections ===== */ +.section { + padding: 5rem 1.5rem; +} + +.sectionAlt { + background-color: var(--bg-secondary); +} + +.sectionInner { + max-width: 1200px; + margin: 0 auto; +} + +.sectionTitle { + font-size: 2rem; + font-weight: 700; + text-align: center; + margin: 0 0 0.5rem; + color: var(--text); +} + +.sectionSubtitle { + text-align: center; + font-size: 1.1rem; + color: var(--text-light); + margin: 0 0 3rem; +} + +/* ===== Feature Grid ===== */ +.grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; +} + +.card { + padding: 1.75rem; + border-radius: 12px; + border: 1px solid var(--border); + background: var(--bg); + transition: border-color 0.2s, box-shadow 0.2s; +} + +.card:hover { + border-color: var(--primary-light); + box-shadow: 0 4px 20px rgba(175, 120, 139, 0.08); +} + +.cardIcon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 44px; + height: 44px; + font-size: 1.35rem; + border-radius: 10px; + background: var(--bg-secondary); + margin-bottom: 1rem; +} + +.cardTitle { + font-size: 1.05rem; + font-weight: 600; + margin: 0 0 0.5rem; + color: var(--text); +} + +.cardDesc { + font-size: 0.88rem; + line-height: 1.65; + color: var(--text-light); + margin: 0; +} + +/* ===== How It Works ===== */ +.steps { + display: flex; + gap: 2rem; + max-width: 960px; + margin: 0 auto; } +.step { + flex: 1; + text-align: center; +} + +.stepNum { + display: inline-flex; + align-items: center; + justify-content: center; + width: 48px; + height: 48px; + border-radius: 50%; + background: var(--primary); + color: #fff; + font-size: 1rem; + font-weight: 700; + margin-bottom: 1.25rem; +} + +.stepTitle { + font-size: 1.1rem; + font-weight: 600; + margin: 0 0 0.5rem; + color: var(--text); +} + +.stepDesc { + font-size: 0.88rem; + line-height: 1.65; + color: var(--text-light); + margin: 0; +} + +/* ===== CTA ===== */ +.ctaBox { + text-align: center; + padding: 4rem 2rem; + border-radius: 16px; + background: var(--bg-secondary); + border: 1px solid var(--border); +} + +.ctaTitle { + font-size: 2rem; + font-weight: 700; + margin: 0 0 0.75rem; + color: var(--text); +} + +.ctaDesc { + font-size: 1.1rem; + color: var(--text-light); + margin: 0 0 2rem; +} + +.ctaDesc code { + padding: 0.2em 0.5em; + border-radius: 4px; + background: var(--bg); + border: 1px solid var(--border); + font-size: 0.95rem; + color: var(--primary-dark); +} + +.ctaActions { + display: flex; + gap: 0.75rem; + justify-content: center; + flex-wrap: wrap; +} + +/* ===== Dark theme overrides ===== */ +[data-theme='dark'] .codePreview { + border-color: #313244; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); +} + +[data-theme='dark'] .card { + background: #181825; + border-color: #313244; +} + +[data-theme='dark'] .card:hover { + border-color: var(--primary); +} + +[data-theme='dark'] .cardIcon { + background: #1e1e2e; +} + +[data-theme='dark'] .ctaBox { + background: #181825; + border-color: #313244; +} + +[data-theme='dark'] .ctaDesc code { + background: #1e1e2e; + border-color: #313244; +} + +/* ===== Responsive ===== */ @media screen and (max-width: 996px) { .heroBanner { - padding: 2rem; + padding: 3rem 1.5rem 2.5rem; + } + + .heroInner { + flex-direction: column; + gap: 2.5rem; + } + + .heroLogo { + max-width: 240px; + } + + .heroTagline { + font-size: 1rem; + } + + .codePreview { + flex: none; + max-width: 100%; + width: 100%; + } + + .grid { + grid-template-columns: repeat(2, 1fr); + } + + .steps { + flex-direction: column; + gap: 2.5rem; + } + + .section { + padding: 3.5rem 1.5rem; + } +} + +@media screen and (max-width: 600px) { + .heroBanner { + padding: 2rem 1rem 1.5rem; + } + + .heroLogo { + max-width: 200px; + } + + .heroActions { + flex-direction: column; + } + + .buttonPrimary, + .buttonSecondary { + width: 100%; + justify-content: center; + } + + .grid { + grid-template-columns: 1fr; } - .heroBanner h1 { - font-size: 34px; + .ctaActions { + flex-direction: column; + align-items: center; } - .heroBanner p { - font-size: 16px; + .sectionTitle { + font-size: 1.5rem; } } diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx index 84b83a05..84a852a0 100644 --- a/docs/src/pages/index.tsx +++ b/docs/src/pages/index.tsx @@ -2,6 +2,8 @@ import type {ReactNode} from 'react'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import Heading from '@theme/Heading'; +import Link from '@docusaurus/Link'; +import useBaseUrl from '@docusaurus/useBaseUrl'; import styles from './index.module.css'; @@ -9,23 +11,196 @@ function HomepageHeader() { const {siteConfig} = useDocusaurusContext(); return (
-
- - {siteConfig.title} - -

{siteConfig.tagline}

+
+
+ {siteConfig.title} +

+ No vector database. No embeddings. No similarity search.
+ Retrieve by reasoning, not by math. +

+
+ + Get Started + + + GitHub + +
+
+ +
+
+ + + + Python +
+
+            {`import asyncio
+from vectorless import Engine, IndexContext
+
+async def main():
+    engine = Engine(
+        workspace="./data",
+        api_key="sk-...",
+        model="gpt-4o",
+    )
+
+    # Index a document
+    result = await engine.index(
+        IndexContext.from_file("./report.pdf")
+    )
+    doc_id = result.doc_id
+
+    # Query — LLM navigates the tree
+    result = await engine.query(
+        doc_id, "What is the total revenue?"
+    )
+    print(result.single().content)
+
+asyncio.run(main())`}
+          
+
); } +function SectionWhy() { + const items = [ + { + icon: '\u{1F9E0}', + title: 'Reasoning-Native', + desc: 'LLMs navigate hierarchical document trees with semantic understanding \u2014 not vector proximity.', + }, + { + icon: '\u{1F5C2}\u{FE0F}', + title: 'No Vector Database', + desc: 'Eliminate embedding pipelines, vector stores, and similarity search entirely. Trees are the index.', + }, + { + icon: '\u26A1', + title: 'Rust-Powered', + desc: 'Core engine in Rust with Python bindings. Arena-based trees, async I/O, and zero-copy traversal.', + }, + { + icon: '\u{1F50D}', + title: 'Multi-Algorithm Search', + desc: 'Beam search, MCTS, and greedy algorithms with LLM-guided Pilot at key decision points.', + }, + { + icon: '\u{1F4CA}', + title: 'Explainable Results', + desc: 'Full reasoning chain traces every navigation decision. Audit how and why content was retrieved.', + }, + { + icon: '\u{1F4C4}', + title: 'PDF & Markdown', + desc: 'Index PDFs and Markdown out of the box. Hierarchical structure extracted automatically.', + }, + ]; + + return ( +
+
+ + Why Vectorless? + +

+ RAG without the baggage. +

+
+ {items.map((item, i) => ( +
+ {item.icon} + {item.title} +

{item.desc}

+
+ ))} +
+
+
+ ); +} + +function SectionHowItWorks() { + const steps = [ + { num: '01', title: 'Index', desc: 'Parse documents into hierarchical semantic trees with LLM-generated summaries.' }, + { num: '02', title: 'Navigate', desc: 'Pilot uses LLM to navigate the tree at key forks \u2014 beam search explores multiple paths in parallel.' }, + { num: '03', title: 'Retrieve', desc: 'Evaluate sufficiency and backtrack if needed. Aggregate only the most relevant content within budget.' }, + ]; + + return ( +
+
+ + How It Works + +
+ {steps.map((step, i) => ( +
+
{step.num}
+
+ {step.title} +

{step.desc}

+
+
+ ))} +
+
+
+ ); +} + +function SectionCTA() { + return ( +
+
+
+ + Start building in minutes + +

+ pip install vectorless +

+
+ + Read the Docs + + + View on GitHub + +
+
+
+
+ ); +} + export default function Home(): ReactNode { const {siteConfig} = useDocusaurusContext(); return ( + description="Reasoning-native document intelligence engine. No vector database, no embeddings. Retrieve by reasoning."> +
+ + + +
); } From d2aaa26884e54c61454b34cd42d0fc6ba24fbd8c Mon Sep 17 00:00:00 2001 From: zTgx <747674262@qq.com> Date: Tue, 14 Apr 2026 13:33:44 +0800 Subject: [PATCH 2/4] docs: update dependencies and enhance code block rendering - Remove unused tokio dependency from docs example - Add CSS styles to hide external link icons in footer and style copyright - Adjust code preview dimensions for better layout - Replace static code blocks with Highlight component for syntax highlighting - Implement proper code tokenization and line rendering --- docs/docs/intro.mdx | 1 - docs/src/css/custom.css | 16 ++++++++++++++++ docs/src/pages/index.module.css | 4 ++-- docs/src/pages/index.tsx | 21 +++++++++++++++++---- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/docs/docs/intro.mdx b/docs/docs/intro.mdx index e6ff8ac8..b82d43a2 100644 --- a/docs/docs/intro.mdx +++ b/docs/docs/intro.mdx @@ -47,7 +47,6 @@ asyncio.run(main()) ```toml [dependencies] vectorless = "0.1" -tokio = { version = "1", features = ["full"] } ``` ```rust diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 5dd9666c..8a59925b 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -51,3 +51,19 @@ .footer { background-color: transparent !important; } + +/* Hide external-link icons in footer */ +.footer__link-item svg { + display: none; +} + +/* Copyright styling */ +.footer__copyright { + text-align: center; + font-size: 0.82rem; + color: var(--text-light); + letter-spacing: 0.03em; + margin-top: 1rem; + padding-top: 1.5rem; + border-top: 1px solid var(--border); +} diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css index 40983d29..37cf66aa 100644 --- a/docs/src/pages/index.module.css +++ b/docs/src/pages/index.module.css @@ -51,8 +51,8 @@ /* -- Right column: code preview -- */ .codePreview { - flex: 0 0 440px; - max-width: 440px; + flex: 1 1 520px; + max-width: 560px; border-radius: 12px; overflow: hidden; border: 1px solid var(--border); diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx index 84a852a0..932e1f0f 100644 --- a/docs/src/pages/index.tsx +++ b/docs/src/pages/index.tsx @@ -4,6 +4,7 @@ import Layout from '@theme/Layout'; import Heading from '@theme/Heading'; import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import {Highlight, themes} from 'prism-react-renderer'; import styles from './index.module.css'; @@ -43,8 +44,7 @@ function HomepageHeader() { Python -
-            {`import asyncio
+          
-          
+asyncio.run(main())`} language="python"> + {({tokens, getLineProps, getTokenProps}) => ( +
+                
+                  {tokens.map((line, i) => (
+                    
+ {line.map((token, key) => ( + + ))} +
+ ))} +
+
+ )} + From ca899be676943e3e406eabb519ed66872bcef596 Mon Sep 17 00:00:00 2001 From: zTgx <747674262@qq.com> Date: Tue, 14 Apr 2026 13:35:38 +0800 Subject: [PATCH 3/4] style(footer): enhance footer styling and improve visual hierarchy - Add padding to footer container for better spacing - Style column titles with uppercase text and smaller font size - Update link items with improved typography and hover effects - Adjust copyright section with consistent font size and increased margin - Maintain existing external link icon hiding functionality --- docs/src/css/custom.css | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 8a59925b..8bbdf711 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -47,23 +47,46 @@ background-color: var(--ifm-background-color) !important; } -/* Footer: transparent */ +/* ===== Footer ===== */ .footer { background-color: transparent !important; + padding: 3rem 1.5rem 2rem; } -/* Hide external-link icons in footer */ +/* Column titles */ +.footer__title { + font-size: 0.8rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--text); + margin-bottom: 0.75rem; +} + +/* Link items */ +.footer__link-item { + font-size: 0.88rem; + color: var(--text-light); + line-height: 1.8; + transition: color 0.15s; +} + +.footer__link-item:hover { + color: var(--primary); +} + +/* Hide external-link icons */ .footer__link-item svg { display: none; } -/* Copyright styling */ +/* Copyright */ .footer__copyright { text-align: center; - font-size: 0.82rem; + font-size: 0.8rem; color: var(--text-light); letter-spacing: 0.03em; - margin-top: 1rem; + margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--border); } From b5e212026ba27602418fbc7dc0737e5af4dd47a0 Mon Sep 17 00:00:00 2001 From: zTgx <747674262@qq.com> Date: Tue, 14 Apr 2026 13:39:11 +0800 Subject: [PATCH 4/4] fix(rust/examples): correct workspace path typo in flow example The workspace path was incorrectly spelled as "worksspace_flow_example" instead of "workspace_flow_example". This fixes the typo to ensure the example runs correctly. --- rust/examples/flow.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/examples/flow.rs b/rust/examples/flow.rs index 36712dd3..758ddbe3 100644 --- a/rust/examples/flow.rs +++ b/rust/examples/flow.rs @@ -69,7 +69,7 @@ async fn main() -> vectorless::Result<()> { println!("Step 1: Creating Vectorless client..."); let engine = EngineBuilder::new() - .with_workspace("./worksspace_flow_example") + .with_workspace("./workspace_flow_example") .with_key(&api_key) .with_model(&model) .with_endpoint(&endpoint)