{{field .Entity "title"}}
+{{field .Entity "description"}}
+ +diff --git a/.github/workflows/build-index.yml b/.github/workflows/build-index.yml index a89d959..f2608e3 100644 --- a/.github/workflows/build-index.yml +++ b/.github/workflows/build-index.yml @@ -1,8 +1,14 @@ -name: Build Index +name: Build & Deploy on: push: - paths: [repos.yaml, generate-index.go, go.mod, go.sum, .github/workflows/build-index.yml] + branches: [main] + paths: + - 'data/**' + - 'templates/**' + - 'pssg.yaml' + - 'static/**' + - '.github/workflows/build-index.yml' workflow_dispatch: permissions: @@ -25,10 +31,16 @@ jobs: - uses: actions/setup-go@v5 with: - go-version: '1.24' + go-version: '1.25' - - name: Generate site - run: go run generate-index.go + - name: Install pssg + run: go install github.com/greynewell/pssg/cmd/pssg@latest + + - name: Add Go bin to PATH + run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + + - name: Build site + run: pssg build -config pssg.yaml - uses: actions/upload-pages-artifact@v3 with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..67f9fac --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +name: CI + +on: + pull_request: + paths: + - 'data/**' + - 'templates/**' + - 'pssg.yaml' + - 'static/**' + - '.github/workflows/ci.yml' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version: '1.25' + + - name: Install pssg + run: go install github.com/greynewell/pssg/cmd/pssg@latest + + - name: Add Go bin to PATH + run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + + - name: Build site + run: pssg build -config pssg.yaml 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..3a45c60 --- /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..563c07e --- /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: "pill-blue" +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..dfe564b --- /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..d7c4eb8 --- /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: true + 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..f077eb0 --- /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..0eeca2c --- /dev/null +++ b/templates/entity.html @@ -0,0 +1,81 @@ + + +
+ + +{{field .Entity "description"}}
+ +{{len .Entities}} repositories with architecture documentation
+Browse architecture documentation, dependency graphs, and code structure for popular open source repositories.
+Browse repositories by {{lower .Taxonomy.LabelSingular}}
+