From 03fc2863c7cb33e05789d5d18f9d31b1a41fea79 Mon Sep 17 00:00:00 2001 From: Grey Newell Date: Sat, 14 Feb 2026 17:40:30 -0500 Subject: [PATCH 1/4] Migrate to pssg static site generator Replace custom go generate script with pssg v0.3.0. Adds proper templates, taxonomy system, SEO meta tags, JSON-LD, and sitemap. Supermodel repos now display before community repos on homepage. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/build-index.yml | 14 +- data/RxJava.md | 11 ++ data/anthropic-sdk-python.md | 11 ++ data/astro.md | 11 ++ data/dead-code-hunter.md | 10 ++ data/drizzle-orm.md | 11 ++ data/express.md | 11 ++ data/fastapi.md | 11 ++ data/fastify.md | 11 ++ data/fiber.md | 11 ++ data/flask.md | 11 ++ data/gin.md | 11 ++ data/graph2md.md | 10 ++ data/langchain.md | 11 ++ data/mcp.md | 10 ++ data/mcpbr.md | 10 ++ data/netty.md | 11 ++ data/okhttp.md | 11 ++ data/openapi-spec.md | 10 ++ data/react.md | 11 ++ data/requests.md | 11 ++ data/retrofit.md | 11 ++ data/scikit-learn.md | 11 ++ data/software-agent-sdk.md | 10 ++ data/supermodel-api-docs.md | 10 ++ data/svelte.md | 11 ++ data/tailwindcss.md | 11 ++ data/terraform.md | 11 ++ data/tokio.md | 11 ++ data/trpc.md | 11 ++ data/typescript-sdk.md | 10 ++ data/ui.md | 11 ++ data/vite.md | 11 ++ data/vue.md | 11 ++ data/zod.md | 11 ++ pssg.yaml | 105 ++++++++++++ static/google3f45b72e3ef79ea3.html | 1 + templates/_styles.css | 266 +++++++++++++++++++++++++++++ templates/entity.html | 81 +++++++++ templates/hub.html | 83 +++++++++ templates/index.html | 150 ++++++++++++++++ templates/taxonomy_index.html | 76 +++++++++ 42 files changed, 1139 insertions(+), 3 deletions(-) create mode 100644 data/RxJava.md create mode 100644 data/anthropic-sdk-python.md create mode 100644 data/astro.md create mode 100644 data/dead-code-hunter.md create mode 100644 data/drizzle-orm.md create mode 100644 data/express.md create mode 100644 data/fastapi.md create mode 100644 data/fastify.md create mode 100644 data/fiber.md create mode 100644 data/flask.md create mode 100644 data/gin.md create mode 100644 data/graph2md.md create mode 100644 data/langchain.md create mode 100644 data/mcp.md create mode 100644 data/mcpbr.md create mode 100644 data/netty.md create mode 100644 data/okhttp.md create mode 100644 data/openapi-spec.md create mode 100644 data/react.md create mode 100644 data/requests.md create mode 100644 data/retrofit.md create mode 100644 data/scikit-learn.md create mode 100644 data/software-agent-sdk.md create mode 100644 data/supermodel-api-docs.md create mode 100644 data/svelte.md create mode 100644 data/tailwindcss.md create mode 100644 data/terraform.md create mode 100644 data/tokio.md create mode 100644 data/trpc.md create mode 100644 data/typescript-sdk.md create mode 100644 data/ui.md create mode 100644 data/vite.md create mode 100644 data/vue.md create mode 100644 data/zod.md create mode 100644 pssg.yaml create mode 100644 static/google3f45b72e3ef79ea3.html create mode 100644 templates/_styles.css create mode 100644 templates/entity.html create mode 100644 templates/hub.html create mode 100644 templates/index.html create mode 100644 templates/taxonomy_index.html diff --git a/.github/workflows/build-index.yml b/.github/workflows/build-index.yml index a89d959..17465af 100644 --- a/.github/workflows/build-index.yml +++ b/.github/workflows/build-index.yml @@ -2,7 +2,12 @@ name: Build Index on: push: - paths: [repos.yaml, generate-index.go, go.mod, go.sum, .github/workflows/build-index.yml] + paths: + - 'data/**' + - 'templates/**' + - 'pssg.yaml' + - 'static/**' + - '.github/workflows/build-index.yml' workflow_dispatch: permissions: @@ -27,8 +32,11 @@ jobs: with: go-version: '1.24' - - name: Generate site - run: go run generate-index.go + - name: Install pssg + run: go install github.com/greynewell/pssg/cmd/pssg@v0.3.0 + + - name: Build site + run: pssg build -config pssg.yaml - uses: actions/upload-pages-artifact@v3 with: diff --git a/data/RxJava.md b/data/RxJava.md new file mode 100644 index 0000000..1461eeb --- /dev/null +++ b/data/RxJava.md @@ -0,0 +1,11 @@ +--- +title: "RxJava" +description: "Reactive extensions for the JVM — composable asynchronous programming" +category: "Community" +pill: "Java" +pill_class: "pill-orange" +upstream: "ReactiveX/RxJava" +docs_url: "/RxJava/" +--- + +Reactive extensions for the JVM — composable asynchronous programming diff --git a/data/anthropic-sdk-python.md b/data/anthropic-sdk-python.md new file mode 100644 index 0000000..cea114a --- /dev/null +++ b/data/anthropic-sdk-python.md @@ -0,0 +1,11 @@ +--- +title: "anthropic-sdk-python" +description: "The official Python library for the Anthropic API" +category: "Community" +pill: "AI/ML" +pill_class: "pill-orange" +upstream: "anthropics/anthropic-sdk-python" +docs_url: "/anthropic-sdk-python/" +--- + +The official Python library for the Anthropic API diff --git a/data/astro.md b/data/astro.md new file mode 100644 index 0000000..f0fce2c --- /dev/null +++ b/data/astro.md @@ -0,0 +1,11 @@ +--- +title: "astro" +description: "The web framework for content-driven websites" +category: "Community" +pill: "Meta-framework" +pill_class: "pill-accent" +upstream: "withastro/astro" +docs_url: "/astro/" +--- + +The web framework for content-driven websites diff --git a/data/dead-code-hunter.md b/data/dead-code-hunter.md new file mode 100644 index 0000000..7d45fc7 --- /dev/null +++ b/data/dead-code-hunter.md @@ -0,0 +1,10 @@ +--- +title: "dead-code-hunter" +description: "GitHub Action to find unreachable functions using Supermodel call graphs." +category: "Supermodel Open Source" +pill: "GitHub Action" +pill_class: "pill-blue" +docs_url: "/dead-code-hunter/" +--- + +GitHub Action to find unreachable functions using Supermodel call graphs. diff --git a/data/drizzle-orm.md b/data/drizzle-orm.md new file mode 100644 index 0000000..e3ef72b --- /dev/null +++ b/data/drizzle-orm.md @@ -0,0 +1,11 @@ +--- +title: "drizzle-orm" +description: "TypeScript ORM that lets you think in SQL" +category: "Community" +pill: "Database" +pill_class: "pill-green" +upstream: "drizzle-team/drizzle-orm" +docs_url: "/drizzle-orm/" +--- + +TypeScript ORM that lets you think in SQL diff --git a/data/express.md b/data/express.md new file mode 100644 index 0000000..6752a5b --- /dev/null +++ b/data/express.md @@ -0,0 +1,11 @@ +--- +title: "express" +description: "Fast, unopinionated, minimalist web framework for Node.js" +category: "Community" +pill: "Backend" +pill_class: "pill-green" +upstream: "expressjs/express" +docs_url: "/express/" +--- + +Fast, unopinionated, minimalist web framework for Node.js diff --git a/data/fastapi.md b/data/fastapi.md new file mode 100644 index 0000000..d2c8651 --- /dev/null +++ b/data/fastapi.md @@ -0,0 +1,11 @@ +--- +title: "fastapi" +description: "Modern, fast web framework for building APIs with Python based on type hints" +category: "Community" +pill: "Python" +pill_class: "pill-green" +upstream: "tiangolo/fastapi" +docs_url: "/fastapi/" +--- + +Modern, fast web framework for building APIs with Python based on type hints diff --git a/data/fastify.md b/data/fastify.md new file mode 100644 index 0000000..67248b4 --- /dev/null +++ b/data/fastify.md @@ -0,0 +1,11 @@ +--- +title: "fastify" +description: "Fast and low overhead web framework for Node.js" +category: "Community" +pill: "Backend" +pill_class: "pill-green" +upstream: "fastify/fastify" +docs_url: "/fastify/" +--- + +Fast and low overhead web framework for Node.js diff --git a/data/fiber.md b/data/fiber.md new file mode 100644 index 0000000..3fca746 --- /dev/null +++ b/data/fiber.md @@ -0,0 +1,11 @@ +--- +title: "fiber" +description: "Express-inspired web framework written in Go" +category: "Community" +pill: "Go" +pill_class: "pill-accent" +upstream: "gofiber/fiber" +docs_url: "/fiber/" +--- + +Express-inspired web framework written in Go diff --git a/data/flask.md b/data/flask.md new file mode 100644 index 0000000..67bb223 --- /dev/null +++ b/data/flask.md @@ -0,0 +1,11 @@ +--- +title: "flask" +description: "The Python micro framework for building web applications" +category: "Community" +pill: "Backend" +pill_class: "pill-green" +upstream: "pallets/flask" +docs_url: "/flask/" +--- + +The Python micro framework for building web applications diff --git a/data/gin.md b/data/gin.md new file mode 100644 index 0000000..1337c96 --- /dev/null +++ b/data/gin.md @@ -0,0 +1,11 @@ +--- +title: "gin" +description: "The fastest full-featured HTTP web framework for Go" +category: "Community" +pill: "Go" +pill_class: "pill-accent" +upstream: "gin-gonic/gin" +docs_url: "/gin/" +--- + +The fastest full-featured HTTP web framework for Go diff --git a/data/graph2md.md b/data/graph2md.md new file mode 100644 index 0000000..2115b77 --- /dev/null +++ b/data/graph2md.md @@ -0,0 +1,10 @@ +--- +title: "graph2md" +description: "Convert Supermodel graph JSON to markdown entity files for static site generation." +category: "Supermodel Open Source" +pill: "CLI Tool" +pill_class: "pill-green" +docs_url: "/graph2md/" +--- + +Convert Supermodel graph JSON to markdown entity files for static site generation. diff --git a/data/langchain.md b/data/langchain.md new file mode 100644 index 0000000..14eb014 --- /dev/null +++ b/data/langchain.md @@ -0,0 +1,11 @@ +--- +title: "langchain" +description: "Build context-aware reasoning applications" +category: "Community" +pill: "AI/ML" +pill_class: "pill-orange" +upstream: "langchain-ai/langchain" +docs_url: "/langchain/" +--- + +Build context-aware reasoning applications diff --git a/data/mcp.md b/data/mcp.md new file mode 100644 index 0000000..7a968d0 --- /dev/null +++ b/data/mcp.md @@ -0,0 +1,10 @@ +--- +title: "mcp" +description: "Supermodel Model Context Protocol server. Generate code graphs in Cursor, Codex or Claude Code!" +category: "Supermodel Open Source" +pill: "MCP Server" +pill_class: "pill-accent" +docs_url: "/mcp/" +--- + +Supermodel Model Context Protocol server. Generate code graphs in Cursor, Codex or Claude Code! diff --git a/data/mcpbr.md b/data/mcpbr.md new file mode 100644 index 0000000..29a1f5d --- /dev/null +++ b/data/mcpbr.md @@ -0,0 +1,10 @@ +--- +title: "mcpbr" +description: "Evaluate your MCP server with Model Context Protocol Benchmark Runner." +category: "Supermodel Open Source" +pill: "CLI Tool" +pill_class: "pill-green" +docs_url: "/mcpbr/" +--- + +Evaluate your MCP server with Model Context Protocol Benchmark Runner. diff --git a/data/netty.md b/data/netty.md new file mode 100644 index 0000000..e8c9415 --- /dev/null +++ b/data/netty.md @@ -0,0 +1,11 @@ +--- +title: "netty" +description: "Asynchronous event-driven network application framework for Java" +category: "Community" +pill: "Java" +pill_class: "pill-orange" +upstream: "netty/netty" +docs_url: "/netty/" +--- + +Asynchronous event-driven network application framework for Java diff --git a/data/okhttp.md b/data/okhttp.md new file mode 100644 index 0000000..6134d18 --- /dev/null +++ b/data/okhttp.md @@ -0,0 +1,11 @@ +--- +title: "okhttp" +description: "An efficient HTTP & HTTP/2 client for Android and Java" +category: "Community" +pill: "Java" +pill_class: "pill-orange" +upstream: "square/okhttp" +docs_url: "/okhttp/" +--- + +An efficient HTTP & HTTP/2 client for Android and Java diff --git a/data/openapi-spec.md b/data/openapi-spec.md new file mode 100644 index 0000000..8448264 --- /dev/null +++ b/data/openapi-spec.md @@ -0,0 +1,10 @@ +--- +title: "openapi-spec" +description: "Spec for Supermodel public API in OpenAPI YAML. Use as a reference or generate your own clients." +category: "Supermodel Open Source" +pill: "Specification" +pill_class: "" +docs_url: "/openapi-spec/" +--- + +Spec for Supermodel public API in OpenAPI YAML. Use as a reference or generate your own clients. diff --git a/data/react.md b/data/react.md new file mode 100644 index 0000000..d7fe140 --- /dev/null +++ b/data/react.md @@ -0,0 +1,11 @@ +--- +title: "react" +description: "A JavaScript library for building user interfaces" +category: "Community" +pill: "Frontend" +pill_class: "pill-blue" +upstream: "facebook/react" +docs_url: "/react/" +--- + +A JavaScript library for building user interfaces diff --git a/data/requests.md b/data/requests.md new file mode 100644 index 0000000..b6c4b72 --- /dev/null +++ b/data/requests.md @@ -0,0 +1,11 @@ +--- +title: "requests" +description: "A simple, yet elegant, HTTP library for Python" +category: "Community" +pill: "Python" +pill_class: "pill-green" +upstream: "psf/requests" +docs_url: "/requests/" +--- + +A simple, yet elegant, HTTP library for Python diff --git a/data/retrofit.md b/data/retrofit.md new file mode 100644 index 0000000..ab851b2 --- /dev/null +++ b/data/retrofit.md @@ -0,0 +1,11 @@ +--- +title: "retrofit" +description: "A type-safe HTTP client for Android and Java" +category: "Community" +pill: "Java" +pill_class: "pill-orange" +upstream: "square/retrofit" +docs_url: "/retrofit/" +--- + +A type-safe HTTP client for Android and Java diff --git a/data/scikit-learn.md b/data/scikit-learn.md new file mode 100644 index 0000000..7eff5d5 --- /dev/null +++ b/data/scikit-learn.md @@ -0,0 +1,11 @@ +--- +title: "scikit-learn" +description: "Machine learning in Python — simple and efficient tools for data analysis" +category: "Community" +pill: "AI/ML" +pill_class: "pill-orange" +upstream: "scikit-learn/scikit-learn" +docs_url: "/scikit-learn/" +--- + +Machine learning in Python — simple and efficient tools for data analysis diff --git a/data/software-agent-sdk.md b/data/software-agent-sdk.md new file mode 100644 index 0000000..32506c0 --- /dev/null +++ b/data/software-agent-sdk.md @@ -0,0 +1,10 @@ +--- +title: "software-agent-sdk" +description: "A clean, modular SDK for building AI agents with OpenHands V1." +category: "Supermodel Open Source" +pill: "SDK" +pill_class: "pill-accent" +docs_url: "/software-agent-sdk/" +--- + +A clean, modular SDK for building AI agents with OpenHands V1. diff --git a/data/supermodel-api-docs.md b/data/supermodel-api-docs.md new file mode 100644 index 0000000..800dd4a --- /dev/null +++ b/data/supermodel-api-docs.md @@ -0,0 +1,10 @@ +--- +title: "supermodel-api-docs" +description: "Official documentation for the Supermodel Code Graph API." +category: "Supermodel Open Source" +pill: "Documentation" +pill_class: "" +docs_url: "/supermodel-api-docs/" +--- + +Official documentation for the Supermodel Code Graph API. diff --git a/data/svelte.md b/data/svelte.md new file mode 100644 index 0000000..6e1e19e --- /dev/null +++ b/data/svelte.md @@ -0,0 +1,11 @@ +--- +title: "svelte" +description: "Cybernetically enhanced web apps" +category: "Community" +pill: "Frontend" +pill_class: "pill-blue" +upstream: "sveltejs/svelte" +docs_url: "/svelte/" +--- + +Cybernetically enhanced web apps diff --git a/data/tailwindcss.md b/data/tailwindcss.md new file mode 100644 index 0000000..c710572 --- /dev/null +++ b/data/tailwindcss.md @@ -0,0 +1,11 @@ +--- +title: "tailwindcss" +description: "A utility-first CSS framework for rapid UI development" +category: "Community" +pill: "CSS" +pill_class: "pill-blue" +upstream: "tailwindlabs/tailwindcss" +docs_url: "/tailwindcss/" +--- + +A utility-first CSS framework for rapid UI development diff --git a/data/terraform.md b/data/terraform.md new file mode 100644 index 0000000..927f384 --- /dev/null +++ b/data/terraform.md @@ -0,0 +1,11 @@ +--- +title: "terraform" +description: "Infrastructure as code — safely and predictably provision infrastructure" +category: "Community" +pill: "DevOps" +pill_class: "pill-green" +upstream: "hashicorp/terraform" +docs_url: "/terraform/" +--- + +Infrastructure as code — safely and predictably provision infrastructure diff --git a/data/tokio.md b/data/tokio.md new file mode 100644 index 0000000..f560607 --- /dev/null +++ b/data/tokio.md @@ -0,0 +1,11 @@ +--- +title: "tokio" +description: "A runtime for writing reliable asynchronous applications with Rust" +category: "Community" +pill: "Rust" +pill_class: "pill-accent" +upstream: "tokio-rs/tokio" +docs_url: "/tokio/" +--- + +A runtime for writing reliable asynchronous applications with Rust diff --git a/data/trpc.md b/data/trpc.md new file mode 100644 index 0000000..9da8ebf --- /dev/null +++ b/data/trpc.md @@ -0,0 +1,11 @@ +--- +title: "trpc" +description: "End-to-end typesafe APIs made easy" +category: "Community" +pill: "TypeScript" +pill_class: "pill-blue" +upstream: "trpc/trpc" +docs_url: "/trpc/" +--- + +End-to-end typesafe APIs made easy diff --git a/data/typescript-sdk.md b/data/typescript-sdk.md new file mode 100644 index 0000000..26431dc --- /dev/null +++ b/data/typescript-sdk.md @@ -0,0 +1,10 @@ +--- +title: "typescript-sdk" +description: "Generate useful graphs of your codebase with our TypeScript SDK!" +category: "Supermodel Open Source" +pill: "SDK" +pill_class: "pill-accent" +docs_url: "/typescript-sdk/" +--- + +Generate useful graphs of your codebase with our TypeScript SDK! diff --git a/data/ui.md b/data/ui.md new file mode 100644 index 0000000..69f9bd7 --- /dev/null +++ b/data/ui.md @@ -0,0 +1,11 @@ +--- +title: "ui" +description: "Beautifully designed components built with Radix UI and Tailwind CSS" +category: "Community" +pill: "UI" +pill_class: "pill-blue" +upstream: "shadcn-ui/ui" +docs_url: "/ui/" +--- + +Beautifully designed components built with Radix UI and Tailwind CSS diff --git a/data/vite.md b/data/vite.md new file mode 100644 index 0000000..3e0860a --- /dev/null +++ b/data/vite.md @@ -0,0 +1,11 @@ +--- +title: "vite" +description: "Next generation frontend tooling — fast, lean, and flexible" +category: "Community" +pill: "Build Tool" +pill_class: "pill-blue" +upstream: "vitejs/vite" +docs_url: "/vite/" +--- + +Next generation frontend tooling — fast, lean, and flexible diff --git a/data/vue.md b/data/vue.md new file mode 100644 index 0000000..7e29ace --- /dev/null +++ b/data/vue.md @@ -0,0 +1,11 @@ +--- +title: "vue" +description: "A progressive JavaScript framework for building UI on the web" +category: "Community" +pill: "Frontend" +pill_class: "pill-blue" +upstream: "vuejs/vue" +docs_url: "/vue/" +--- + +A progressive JavaScript framework for building UI on the web diff --git a/data/zod.md b/data/zod.md new file mode 100644 index 0000000..5317b88 --- /dev/null +++ b/data/zod.md @@ -0,0 +1,11 @@ +--- +title: "zod" +description: "TypeScript-first schema validation with static type inference" +category: "Community" +pill: "TypeScript" +pill_class: "pill-blue" +upstream: "colinhacks/zod" +docs_url: "/zod/" +--- + +TypeScript-first schema validation with static type inference diff --git a/pssg.yaml b/pssg.yaml new file mode 100644 index 0000000..1965404 --- /dev/null +++ b/pssg.yaml @@ -0,0 +1,105 @@ +site: + name: "Supermodel Tools" + base_url: "https://repos.supermodeltools.com" + description: "Architecture documentation for popular open source repositories. Browse code graphs, dependency diagrams, and codebase structure." + language: "en" + version: "0.3.0" + author: "Supermodel Tools" + author_url: "https://supermodeltools.com" + license: "MIT" + cname: "repos.supermodeltools.com" + repo_url: "https://github.com/supermodeltools" + +paths: + data: "./data" + templates: "./templates" + output: "./site" + cache: ".cache" + static: "./static" + +data: + format: "markdown" + entity_type: "repository" + entity_slug: + source: "filename" + +taxonomies: + - name: "category" + label: "Categories" + label_singular: "Category" + field: "category" + multi_value: false + min_entities: 1 + hub_title: "{{.Name}} Repositories" + hub_meta_description: "Architecture documentation for {{.Name}} repositories. Browse code graphs, dependency diagrams, and codebase structure." + hub_subheading: "{{.Count}} repositories with architecture documentation" + + - name: "pill" + label: "Types" + label_singular: "Type" + field: "pill" + multi_value: false + min_entities: 1 + hub_title: "{{.Name}} Repositories" + hub_meta_description: "Browse {{.Name}} repositories with architecture documentation." + +pagination: + entities_per_page: 100 + +structured_data: + entity_type: "SoftwareSourceCode" + field_mappings: + name: "title" + description: "description" + extra_keywords: + - "architecture documentation" + - "code graph" + - "dependency diagram" + - "codebase structure" + date_published: "2025-01-01" + homepage_schemas: + - "WebSite" + - "ItemList" + entity_schemas: + - "SoftwareSourceCode" + - "BreadcrumbList" + hub_schemas: + - "CollectionPage" + - "BreadcrumbList" + index_schemas: + - "CollectionPage" + +sitemap: + max_urls_per_file: 50000 + priorities: + homepage: 1.0 + entity: 0.7 + taxonomy_index: 0.8 + hub_page_1: 0.6 + hub_page_n: 0.5 + letter_page: 0.4 + change_freqs: + homepage: "weekly" + entity: "monthly" + taxonomy_index: "weekly" + hub_page_1: "weekly" + hub_page_n: "monthly" + letter_page: "monthly" + +robots: + allow_all: true + extra_bots: + - "GPTBot" + - "ClaudeBot" + - "PerplexityBot" + - "GoogleOther" + +templates: + entity: "entity.html" + homepage: "index.html" + hub: "hub.html" + taxonomy_index: "taxonomy_index.html" + +output: + clean_build: false + extract_css: "styles.css" diff --git a/static/google3f45b72e3ef79ea3.html b/static/google3f45b72e3ef79ea3.html new file mode 100644 index 0000000..39ed4b2 --- /dev/null +++ b/static/google3f45b72e3ef79ea3.html @@ -0,0 +1 @@ +google-site-verification: google3f45b72e3ef79ea3.html \ No newline at end of file diff --git a/templates/_styles.css b/templates/_styles.css new file mode 100644 index 0000000..aae689f --- /dev/null +++ b/templates/_styles.css @@ -0,0 +1,266 @@ +:root { + --bg: #0f1117; + --bg-card: #1a1d27; + --bg-hover: #22263a; + --border: #2a2e3e; + --text: #e4e4e7; + --text-muted: #9ca3af; + --accent: #6366f1; + --accent-light: #818cf8; + --green: #22c55e; + --orange: #f59e0b; + --red: #ef4444; + --blue: #3b82f6; + --font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; + --mono: 'JetBrains Mono', 'Fira Code', monospace; + --max-w: 1200px; + --radius: 8px; +} +* { margin: 0; padding: 0; box-sizing: border-box; } +html { overflow-x: hidden; } +body { + font-family: var(--font); + background: var(--bg); + color: var(--text); + line-height: 1.6; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; +} +a { color: var(--accent-light); text-decoration: none; } +a:hover { text-decoration: underline; } +a:focus-visible { outline: 2px solid var(--accent-light); outline-offset: 2px; border-radius: 2px; } +.container { max-width: var(--max-w); margin: 0 auto; padding: 0 24px; } +.site-header { + border-bottom: 1px solid var(--border); + padding: 16px 0; + position: sticky; + top: 0; + background: var(--bg); + z-index: 100; +} +.site-header .container { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; +} +.site-brand { + font-size: 18px; + font-weight: 700; + color: var(--text); + display: flex; + align-items: center; + gap: 8px; + white-space: nowrap; + flex-shrink: 0; +} +.site-brand:hover { text-decoration: none; color: var(--accent-light); } +.site-brand svg { width: 24px; height: 24px; } +.site-nav { display: flex; gap: 16px; align-items: center; } +.site-nav a { color: var(--text-muted); font-size: 14px; font-weight: 500; white-space: nowrap; } +.site-nav a:hover { color: var(--text); text-decoration: none; } +.hero { + padding: 64px 0 48px; + text-align: center; +} +.hero h1 { + font-size: 36px; + font-weight: 700; + margin-bottom: 12px; +} +.hero p { + color: var(--text-muted); + font-size: 18px; + max-width: 600px; + margin: 0 auto; +} +.hero-stats { + display: flex; + justify-content: center; + gap: 32px; + margin-top: 32px; +} +.hero-stat { text-align: center; } +.hero-stat .num { + font-size: 28px; + font-weight: 700; + color: var(--accent-light); +} +.hero-stat .label { + font-size: 13px; + color: var(--text-muted); +} +.search-box { + max-width: 480px; + margin: 24px auto 0; + position: relative; +} +.search-input { + width: 100%; + padding: 10px 16px 10px 40px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + color: var(--text); + font-size: 14px; + font-family: inherit; + outline: none; + transition: border-color 0.2s; +} +.search-input:focus { border-color: var(--accent); } +.search-input::placeholder { color: var(--text-muted); } +.search-icon { + position: absolute; + left: 12px; + top: 50%; + transform: translateY(-50%); + width: 18px; + height: 18px; + color: var(--text-muted); + pointer-events: none; +} +.section-title { + font-size: 22px; + font-weight: 700; + margin-bottom: 16px; +} +.section { margin-bottom: 48px; } +.card-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); + gap: 16px; +} +.card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 24px; + transition: border-color 0.2s; + display: flex; + flex-direction: column; +} +.card:hover { + border-color: var(--accent); + text-decoration: none; +} +.card.hidden { display: none; } +.card-title { + font-size: 16px; + font-weight: 600; + color: var(--text); + margin-bottom: 8px; + display: flex; + align-items: center; + gap: 8px; +} +.card-title svg { width: 18px; height: 18px; flex-shrink: 0; color: var(--accent-light); } +.card-desc { + font-size: 14px; + color: var(--text-muted); + flex: 1; + margin-bottom: 12px; +} +.card-meta { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: center; +} +.pill { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 4px 10px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 20px; + font-size: 12px; + color: var(--text-muted); + font-weight: 500; +} +.pill-accent { border-color: var(--accent); color: var(--accent-light); } +.pill-green { border-color: var(--green); color: var(--green); } +.pill-blue { border-color: var(--blue); color: var(--blue); } +.pill-orange { border-color: var(--orange); color: var(--orange); } +.star-badge { height: 20px; vertical-align: middle; } +.site-footer { + border-top: 1px solid var(--border); + padding: 32px 0; + margin-top: 64px; + color: var(--text-muted); + font-size: 13px; + text-align: center; +} +.site-footer a { color: var(--text-muted); } +.site-footer a:hover { color: var(--accent-light); } +.no-results { + text-align: center; + color: var(--text-muted); + padding: 48px 0; + font-size: 15px; + display: none; +} +.breadcrumb { + padding: 12px 0; + font-size: 13px; + color: var(--text-muted); +} +.breadcrumb a { color: var(--text-muted); } +.breadcrumb a:hover { color: var(--accent-light); } +.breadcrumb span { margin: 0 6px; } +.entity-header { + padding: 48px 0 32px; +} +.entity-header h1 { + font-size: 32px; + font-weight: 700; + margin-bottom: 8px; + font-family: var(--mono); +} +.entity-header p { + color: var(--text-muted); + font-size: 16px; + max-width: 600px; +} +.entity-actions { + display: flex; + gap: 12px; + margin-top: 24px; + flex-wrap: wrap; +} +.btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 20px; + border-radius: var(--radius); + font-size: 14px; + font-weight: 600; + font-family: inherit; + cursor: pointer; + border: none; + transition: opacity 0.2s; +} +.btn:hover { opacity: 0.9; text-decoration: none; } +.btn-primary { + background: var(--accent); + color: white; +} +.btn-secondary { + background: var(--bg-card); + color: var(--text); + border: 1px solid var(--border); +} +@media (max-width: 768px) { + .container { padding: 0 16px; } + .hero { padding: 40px 0 32px; } + .hero h1 { font-size: 24px; } + .hero p { font-size: 15px; } + .hero-stats { flex-wrap: wrap; gap: 12px; } + .card-grid { grid-template-columns: 1fr; } + .card { padding: 18px; } + .section-title { font-size: 18px; } + .site-footer { margin-top: 40px; padding: 24px 0; } + .entity-header { padding: 32px 0 24px; } + .entity-header h1 { font-size: 24px; } +} diff --git a/templates/entity.html b/templates/entity.html new file mode 100644 index 0000000..3303488 --- /dev/null +++ b/templates/entity.html @@ -0,0 +1,81 @@ + + + + + + {{field .Entity "title"}} — {{.Site.Name}} + + + + + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{.JsonLD}} + + + + +
+
+ {{if .Breadcrumbs}} + + {{end}} + +
+

{{field .Entity "title"}}

+

{{field .Entity "description"}}

+
+ {{field .Entity "pill"}} + {{if hasField .Entity "upstream"}}GitHub Stars{{end}} +
+
+ + + View Architecture Docs + + {{if hasField .Entity "upstream"}} + + + View on GitHub + + {{end}} +
+
+
+
+ + + + diff --git a/templates/hub.html b/templates/hub.html new file mode 100644 index 0000000..9f33d4c --- /dev/null +++ b/templates/hub.html @@ -0,0 +1,83 @@ + + + + + + {{.Entry.Name}} — {{.Site.Name}} + + + + + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{.JsonLD}} + + + + +
+
+ {{if .Breadcrumbs}} + + {{end}} + +
+

{{.Entry.Name}}

+

{{len .Entities}} repositories with architecture documentation

+
+ + +
+
+ + + + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..4844989 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,150 @@ + + + + + + {{.Site.Name}} — Architecture Docs + + + + + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{if .OG.ImageURL}}{{end}} + + + + + + {{.JsonLD}} + + + + +
+
+
+

Architecture Docs

+

Browse architecture documentation, dependency graphs, and code structure for popular open source repositories.

+
+
+
{{.EntityCount}}
+
Repositories
+
+ {{range .Taxonomies}}{{if eq .Name "category"}}{{range .Entries}} +
+
{{len .Entities}}
+
{{.Name}}
+
+ {{end}}{{end}}{{end}} +
+ +
+ +
No repositories match your search.
+ + {{range .Taxonomies}}{{if eq .Name "category"}} + {{range .Entries}}{{if eq .Slug "supermodel-open-source"}} + + {{end}}{{end}} + {{range .Entries}}{{if ne .Slug "supermodel-open-source"}} + + {{end}}{{end}} + {{end}}{{end}} +
+
+ + + + + + diff --git a/templates/taxonomy_index.html b/templates/taxonomy_index.html new file mode 100644 index 0000000..c056458 --- /dev/null +++ b/templates/taxonomy_index.html @@ -0,0 +1,76 @@ + + + + + + {{.Taxonomy.Label}} — {{.Site.Name}} + + + + + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{if .OG.ImageURL}}{{end}} + + + + + {{.JsonLD}} + + + + +
+
+ {{if .Breadcrumbs}} + + {{end}} + +
+

{{.Taxonomy.Label}}

+

Browse repositories by {{lower .Taxonomy.LabelSingular}}

+
+ +
+
+ {{range .Entries}} + +
{{.Name}}
+
{{len .Entities}} repositories
+
+ {{end}} +
+
+
+
+ + + + From 336aa646855b4290702765916405a8606de24881 Mon Sep 17 00:00:00 2001 From: Grey Newell Date: Sat, 14 Feb 2026 17:43:50 -0500 Subject: [PATCH 2/4] Update templates with Supermodel brand logomark Sync SVG icon across all templates to match the brand logomark from main (#1), replacing the generic layers icon. Co-Authored-By: Claude Opus 4.6 --- templates/entity.html | 6 +++--- templates/hub.html | 6 +++--- templates/index.html | 8 ++++---- templates/taxonomy_index.html | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/templates/entity.html b/templates/entity.html index 3303488..0eeca2c 100644 --- a/templates/entity.html +++ b/templates/entity.html @@ -28,8 +28,8 @@