Skip to content

Latest commit

Β 

History

History
1205 lines (1020 loc) Β· 52.5 KB

File metadata and controls

1205 lines (1020 loc) Β· 52.5 KB

Build a full-featured, production-ready web application called "RepoGraph" β€” a Code Dependency Visualizer & Repository Explorer. NO login, NO real database. 100% browser-based. Quality bar: Figma + Linear + Vercel + GitHub combined.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 1 β€” INPUT MODES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

MODE A β€” GITHUB URL

  • Paste any public GitHub repo URL
  • Auto-extract: owner, repo, branch, subfolder
  • Supported formats: βœ… https://github.com/owner/repo βœ… https://github.com/owner/repo/tree/branch βœ… https://github.com/owner/repo/tree/branch/subfolder
  • If branch missing β†’ try "main" then "master" then ask user
  • Fetch file tree: GET /repos/{owner}/{repo}/git/trees/{branch}?recursive=1
  • Fetch file content lazily (only when opened in code view)
  • Fetch repo metadata: GET /repos/{owner}/{repo}
  • After URL pasted β†’ repo link + owner appear in HEADER immediately
  • BRANCH SELECTOR dropdown in header: switch branches without re-entering URL. List branches from GET /repos/{owner}/{repo}/branches
  • TAG / RELEASE selector: view repo at a specific tag/release from GET /repos/{owner}/{repo}/tags
  • MONOREPO DETECTION: if package.json has "workspaces" field or repo has multiple package.json files β†’ detect sub-packages and show them as grouped cluster nodes in graph
  • SUBMODULE SUPPORT: detect .gitmodules, show submodules as special external cluster nodes with link to their repo

MODE B β€” LOCAL FOLDER UPLOAD (100% offline)

  • Drag & drop OR browse folder
  • + FileReader API
  • Zero server, zero internet needed
  • Real-time progress: "Reading file 47 of 312..."
  • Auto-skip binary files in parsing but still list in sidebar
  • Large folder warning (500+ files) with progress bar
  • FILE SYSTEM ACCESS API (if browser supports it): watch for file changes β†’ auto-refresh graph when file saved Show "πŸ”„ File changed: Button.tsx β€” click to refresh" toast
  • Multi-select files/folders to load only part of project

MODE C β€” PASTE CODE SNIPPET (bonus)

  • Small code editor input where user can paste a snippet
  • Parse imports from just that snippet
  • Show a mini-graph of what it would connect to
  • Good for quick one-off checks

RECENTLY LOADED (localStorage, no DB):

  • Last 10 repos/folders shown on landing page
  • Click to re-load instantly
  • Each entry shows: owner/repo, language badges, file count, last loaded date, [Remove] button
  • "Clear history" option

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 2 β€” URL VALIDATION & ERROR HANDLING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Validate instantly on paste (before fetch): ❌ Not GitHub URL β†’ "Please paste a GitHub repository URL" ❌ Single file URL β†’ "That's a file link. Use repo root URL." ❌ Gist β†’ "Gists not supported. Use a repository URL." ❌ PR/Issue URL β†’ "That's a PR/issue link, not a repo."

After fetch errors: ❌ 403 Private repo β†’ ⚠️ LARGE AMBER WARNING CARD: "This repository is private. RepoGraph only supports public repositories. β€’ Make repo public on GitHub Settings, then retry β€’ Upload your project folder directly (offline) β€’ Use a different public repo URL" [Try Folder Upload β†’] quick action button inside card

❌ 404 Not found β†’ "Repository not found. Check the URL." ❌ Rate limit (60 req/hr unauthenticated) β†’ "GitHub rate limit reached. Resets in: [MM:SS live countdown timer] Or use folder upload β€” no limit." ❌ Empty repo β†’ "No files found. Check branch name." ❌ Network offline β†’ "No internet. Folder upload works fully offline ↓" ❌ File > 1MB β†’ "File too large to preview (X MB)" ❌ Binary file β†’ "Binary file β€” no preview available" Show: name, size, type, path as info card instead ❌ Gitignore collision β†’ Warning badge on import line: "Target is in .gitignore" ❌ Circular dependency β†’ Red edge highlight + sidebar warning ❌ Submodule file β†’ "File lives in a Git submodule" with link

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 3 β€” DEPENDENCY PARSING ENGINE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Run ALL parsing in a Web Worker. UI never freezes.

Languages & patterns:

JavaScript / TypeScript / React / Vue / Svelte: import X from './file' import { X, Y } from '../utils' import type { T } from './types' require('./something') import('./lazy') export { X } from './re-export'

HTML:

<script src="app.js">

CSS / SCSS / LESS / Sass: @import './variables' @use './mixins' @forward './helpers'

Python: from utils import helper (local only, skip stdlib) import localmodule

PHP: require_once './file.php' include './template.php'

Go: import "./localpackage"

Rust: mod localmodule; use crate::module;

For every dependency record:

  • Source file + line number
  • Target file (resolved relative path)
  • Import type: named | default | namespace | side-effect | dynamic
  • Exactly what is imported: e.g. { useState, useEffect }
  • Where it's used: which lines in source file use the import
  • Resolved? (target exists) | External? | Unresolved?

SPECIAL FILE PARSING (beyond imports): package.json β†’ Read name, version, description, scripts, dependencies, devDependencies, peerDependencies requirements.txt β†’ list all Python packages .env / .env.example β†’ List all environment variable keys (NOT values β€” privacy) Show in sidebar: "ENV Variables: X declared" tsconfig.json β†’ Read path aliases (@/ β†’ src/) and apply to import resolution so aliased imports resolve correctly in graph README.md β†’ Render as formatted markdown in a dedicated panel Dockerfile β†’ parse FROM, COPY, ADD, EXPOSE .github/workflows/*.yml β†’ detect CI/CD pipelines, list them

SPECIAL DETECTIONS: πŸ”΄ Circular dependency: A β†’ B β†’ C β†’ A Detect with DFS, highlight entire cycle in red ⚫ Orphan/Dead files: files with 0 imports AND 0 used-by (not entry points) β€” shown grayed out with "⚫ Orphan" badge ⚠️ Duplicate detection: files with identical content (compare hash) β†’ badge "⚠️ Duplicate of X" πŸ“ TODO/FIXME extraction: scan all files for TODO, FIXME, HACK, NOTE, XXX comments β†’ list in sidebar "Code Notes" section πŸ§ͺ Test file detection: files matching .test., .spec., tests/** β†’ marked with πŸ§ͺ badge, separate group in sidebar βš™οΈ Config file detection: webpack.config, vite.config, tailwind.config, etc. β†’ marked with βš™οΈ badge πŸ“ Complexity scoring: count branches (if/else/switch/ternary/loop) per file β†’ assign complexity score Low/Medium/High/Critical Color node border by complexity: Low=green, Medium=yellow, High=orange, Critical=red

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 4 β€” HEADER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Height: ~52px, sticky, always visible.

LEFT: [RepoGraph logo + wordmark]

CENTER (when repo loaded): [owner-avatar 24px] [owner / repo-name] [β†— GitHub link] Badges: ⭐ 1.2k 🍴 234 πŸ‘οΈ 89 πŸ› 12 issues [branch-selector dropdown] [tag-selector dropdown] Pasted URL shown as subtle chip: "github.com/owner/repo"

RIGHT: [πŸ” Search] [⬇ Download] [πŸ“€ Export] [πŸ–₯️ Present] [πŸŒ™/β˜€οΈ theme] [⌨️ shortcuts]

If local folder: [πŸ“ folder-name] [branch/tag selectors hidden]

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 5 β€” LEFT SIDEBAR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Resizable width (drag divider). Collapsible. Scrollable. Has multiple collapsible sections with headers.

────────────────────────────── 5A. REPO SUMMARY CARD ────────────────────────────── Owner avatar (large) + username (clickable) Repo full name (bold, large) Description text Homepage URL (if set) Topics as colored badge pills [⭐ Star on GitHub] button (opens github.com) Stats row: Stars | Forks | Watchers | Issues | Size License | Created date | Last updated [View on GitHub β†—] [Open Repo Info Page] (GitHub mode only)

────────────────────────────── 5B. PROJECT STATISTICS ────────────────────────────── Total files: X Total folders: X Total lines of code: X Total dependencies: X Entry points: X (click to list them) Unresolved imports: X (red if > 0) Circular dependencies: X (red if > 0) External packages used: X Orphan/dead files: X (amber if > 0) Test files: X Config files: X TODO comments: X FIXME: X

────────────────────────────── 5C. LANGUAGE BREAKDOWN ────────────────────────────── Horizontal stacked color bar Table: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Language β”‚ Files β”‚ Linesβ”‚ % β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 🟑 JS β”‚ 12 β”‚ 840 β”‚ 40.0% β”‚ β”‚ πŸ”΅ TS β”‚ 8 β”‚ 620 β”‚ 26.7% β”‚ β”‚ 🟠 HTML β”‚ 5 β”‚ 310 β”‚ 16.7% β”‚ β”‚ πŸ”΅ CSS β”‚ 5 β”‚ 240 β”‚ 16.7% β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

────────────────────────────── 5D. FILE TYPE BREAKDOWN ────────────────────────────── β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Ext. β”‚ Count β”‚ Total KB β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ .tsx β”‚ 10 β”‚ 48 KB β”‚ β”‚ .ts β”‚ 8 β”‚ 32 KB β”‚ β”‚ .css β”‚ 5 β”‚ 12 KB β”‚ β”‚ .json β”‚ 2 β”‚ 4 KB β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

────────────────────────────── 5E. FOLDER STRUCTURE TREE ────────────────────────────── Full VS Code-style collapsible tree: πŸ“ src/ (14 files) πŸ“ components/ (6 files) πŸ“„ #3 Button.tsx 2.1 KB πŸ“„ #4 Modal.tsx 3.4 KB πŸ“ utils/ (3 files) πŸ“„ #5 helpers.ts 1.2 KB πŸ“„ #1 main.tsx 0.8 KB ⚑ πŸ“„ #2 App.tsx 4.2 KB πŸ“ public/ (2 files) πŸ“„ index.html 1.1 KB ⚑ πŸ“„ package.json 0.6 KB βš™οΈ πŸ“„ .gitignore 0.2 KB πŸ“„ README.md 3.1 KB

  • Each file has: icon | #number | name | size | badges
  • Badges: ⚑ entry | πŸ§ͺ test | βš™οΈ config | ⚫ orphan ⚠️ circular | πŸ“ has TODOs | ⚠️ duplicate
  • Click file β†’ open in code view
  • Click folder β†’ collapse/expand
  • Right-click file β†’ context menu: Open in Code View Locate in Graph (pan to node) Copy Path Copy Full URL Download as ZIP Show all that import this Show all this imports
  • Folder shows badge count of files inside
  • Sort options: Name A-Z | Name Z-A | Size ↑↓ | Most imports | Most used | Alphabetical

────────────────────────────── 5F. GITIGNORE VIEWER ────────────────────────────── Title: "πŸ“„ .gitignore β€” X patterns" β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Pattern β”‚ What it ignores β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ node_modules/ β”‚ npm dependency folder β”‚ β”‚ .env β”‚ Environment secrets β”‚ β”‚ dist/ β”‚ Production build output β”‚ β”‚ .DS_Store β”‚ macOS system metadata file β”‚ β”‚ *.log β”‚ All log files (any name) β”‚ β”‚ coverage/ β”‚ Test coverage reports β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Total count: "X files/patterns ignored" Note shown: "These exist locally but are not in the repo" Warning if any import in code points to gitignored path

────────────────────────────── 5G. ENTRY POINTS ────────────────────────────── ⚑ index.html (HTML root) ⚑ src/main.tsx (React root) Click any β†’ pan graph to node + open code view

────────────────────────────── 5H. EXTERNAL PACKAGES ────────────────────────────── Tabs: [dependencies] [devDependencies] [peerDependencies] β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Package β”‚ Version β”‚ Used in β”‚ Category β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ react β”‚ ^18.2.0 β”‚ 8 files β”‚ UI β”‚ β”‚ react-flow β”‚ ^11.0.0 β”‚ 2 files β”‚ Graph β”‚ β”‚ zustand β”‚ ^4.0.0 β”‚ 3 files β”‚ State β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Click package name β†’ open npmjs.com in new tab

────────────────────────────── 5I. PACKAGE.JSON SCRIPTS ────────────────────────────── If package.json found, list all scripts: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Script β”‚ Command β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ dev β”‚ vite β”‚ β”‚ build β”‚ tsc && vite build β”‚ β”‚ preview β”‚ vite preview β”‚ β”‚ test β”‚ vitest β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

────────────────────────────── 5J. ENV VARIABLES ────────────────────────────── If .env or .env.example found: List variable names ONLY (never values β€” privacy): ● VITE_API_URL ● VITE_SUPABASE_KEY ● DATABASE_URL Note: "Values hidden for security"

────────────────────────────── 5K. TODO / FIXME NOTES ────────────────────────────── All TODO/FIXME/HACK/NOTE comments across all files: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ πŸ“ TODO utils/helpers.ts:14 "Refactor this" β”‚ β”‚ πŸ”΄ FIXME App.tsx:89 "Memory leak here" β”‚ β”‚ ⚠️ HACK api/client.ts:33 "Temp workaround" β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Click any β†’ open that file in code view at that line

────────────────────────────── 5L. COMPLEXITY REPORT ────────────────────────────── Files ranked by complexity score: πŸ”΄ Critical src/api/client.ts score: 94 🟠 High src/utils/parser.ts score: 71 🟑 Medium src/App.tsx score: 45 🟒 Low src/Button.tsx score: 12 Click any β†’ open code view + highlight complex lines

────────────────────────────── 5M. README VIEWER ────────────────────────────── If README.md found: render it as formatted markdown (headers, bold, code blocks, lists, links) Inline in sidebar or opens as full panel [View Full README] button β†’ full-page markdown viewer

────────────────────────────── 5N. CI/CD PIPELINES ────────────────────────────── If .github/workflows/ found: List workflow files with names and trigger events: βš™οΈ ci.yml β€” triggers: push, pull_request βš™οΈ deploy.yml β€” triggers: push to main Click any β†’ open file in code view

────────────────────────────── 5O. CIRCULAR DEPENDENCIES ────────────────────────────── ⚠️ 2 circular dependencies found: πŸ”΄ App.tsx β†’ utils.ts β†’ App.tsx πŸ”΄ hooks/useData.ts β†’ api.ts β†’ hooks/useData.ts Click any β†’ graph highlights the cycle in red, pans to show it centered

────────────────────────────── 5P. ORPHAN / DEAD FILES ────────────────────────────── ⚫ 3 files have no connections: ⚫ src/oldComponent.tsx (never imported, imports nothing) ⚫ utils/deprecated.ts Click any β†’ pan to node in graph + open code view

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 6 β€” MAIN GRAPH VIEW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Engine: React Flow (reactflow.dev) Custom node components. Custom edge components.

FILE NODES show:

  • File type icon (colored inline SVG per extension): .html/.htm β†’ 🟠 orange globe .css β†’ πŸ”΅ blue paint bucket .scss/.sass β†’ 🩷 pink Sass diamond .less β†’ πŸ”΅ dark blue Less icon .js β†’ 🟑 yellow "JS" badge .mjs/.cjs β†’ 🟑 yellow JS (module variant) .ts β†’ πŸ”΅ blue "TS" badge .jsx β†’ 🩡 cyan βš› React .tsx β†’ 🩡 cyan βš› + "TSX" .vue β†’ 🟒 green Vue β–² .svelte β†’ 🟠 orange Svelte .py β†’ 🟒 green snake 🐍 .php β†’ 🟣 indigo "PHP" .go β†’ 🩡 cyan gopher .rs β†’ 🟠 orange βš™οΈ Rust .json β†’ βšͺ gray { } .yaml/.yml β†’ βšͺ gray YAML .toml β†’ βšͺ gray TOML .md β†’ βšͺ white document πŸ“„ .env β†’ 🟑 yellow πŸ”‘ key .png/.jpg β†’ 🟣 purple πŸ–ΌοΈ .svg β†’ 🟣 purple vector icon .mp4/.webm β†’ πŸ”΅ blue 🎬 .lock β†’ πŸ”’ gray lock (no parse) .sh/.bash β†’ 🟒 green terminal $ .dockerfile β†’ πŸ”΅ blue 🐳 Docker whale .gitignore β†’ βšͺ gray git icon package.json β†’ 🟒 green πŸ“¦ npm

  • File name (bold)

  • Folder path (small, dimmed): src/components/

  • #3 chain number badge (order from root)

  • File size badge

  • ⚑ entry badge | πŸ§ͺ test | βš™οΈ config | ⚫ orphan

  • ↓2 imports badge (how many this imports)

  • ↑1 used-by badge (how many import this)

  • Complexity border color: 🟒 Low | 🟑 Medium | 🟠 High | πŸ”΄ Critical

    NODE HOVER (tooltip popup on hover): First 5 lines of code as preview (syntax highlighted) File size | Line count | Last modified (if available) ↓ imports X files: [list filenames] ↑ used by X files: [list filenames] [Double-click to open]

EDGE TYPES (colored by relationship): import/require β†’ purple html link/script β†’ orange css @import β†’ blue dynamic import β†’ purple dashed re-export β†’ purple dotted unknown β†’ gray

GRAPH INTERACTIONS: Drag node β†’ connections never break Scroll β†’ zoom Click canvas + drag β†’ pan Single click node β†’ select, highlight connections, dim unrelated to 30% Double-click node β†’ open CODE VIEW Right-click node β†’ context menu: Open in Code View Locate in File Tree (sidebar highlights) Focus: show only this node's chain Highlight Dependencies Highlight Dependents Show full chain from root (#1 β†’ ... β†’ this) Pin/Unpin node (pinned nodes don't move on auto-layout) Copy Path | Copy Full URL Download this file as ZIP Collapse to folder group

Mini-map: bottom-right, clickable to pan graph Fit to screen button Auto-layout button (re-arrange) Ctrl+Z / Ctrl+Y: undo/redo node movements

COLOR BY MODE (dropdown in toolbar): 🎨 Color by: File Type (default) 🎨 Color by: Folder (all files in same folder = same hue) 🎨 Color by: Dependency Depth (deeper = darker) 🎨 Color by: Connection Count (more connections = brighter) 🎨 Color by: Complexity Score (green β†’ red) 🎨 Color by: File Size (small=light, large=bright)

FILTER BAR (above graph): Filter nodes by: [All] [JS/TS] [CSS] [HTML] [Config] [Tests] [Orphans] [Has TODOs] [Circular] [Entry Points] [External] Unselected file types get dimmed but not removed

DEPTH FILTER slider: "Show dependencies up to N levels deep from entry point" Slider: 1 β†’ 2 β†’ 3 β†’ All Nodes beyond selected depth fade out

FOLDER GROUPING MODE (toggle): Group files by folder as collapsible cluster nodes πŸ“ components/ (6 files) [expand] When collapsed: one big node representing the folder When expanded: individual file nodes inside a rounded border Edges between folders shown as thick grouped edges

NODE SEARCH (Ctrl+F): Floating search bar over graph Type β†’ matching nodes pulse + highlight in yellow If multiple matches: [← 1/3 β†’] cycle through them Camera smoothly pans to each match

BOOKMARKS: Right-click node β†’ "Bookmark this file" Bookmarked nodes get a ⭐ icon Bookmarks panel in sidebar shows all bookmarked files Persisted in localStorage

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 7 β€” GRAPH LAYOUT ALGORITHMS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

STANDARD LAYOUTS: Force-directed (default) β€” organic spread, physics simulation Hierarchical top-down β€” entry at top, deps cascade down as tree Hierarchical left-right β€” entry at left, cascade rightward Circular β€” all nodes on circle, entry at top Grid β€” uniform rows/columns, alphabetical Radial β€” entry at center, rings expand outward by depth

PRESET SHAPE LAYOUTS: (arrange all nodes into recognizable visual silhouette) (connections always maintained, edges follow nodes) (animated transition when switching β€” nodes glide smoothly) (user can still drag nodes after; "Reset Shape" button snaps back)

🧍 Human Figure Nodes form stick-figure / human silhouette Entry point = head (top center) Main imports = torso/body Sub-imports = arms (left/right branches) Leaf nodes = hands and feet Calculate using parametric human body outline curves distributed evenly by connection count

✈️ Fighter Jet / Plane Nodes form top-down aircraft silhouette Entry = nose (front tip) Core deps = fuselage (long center body) Side branches = swept-back wings Deepest deps = tail fins Sub-deps = engine nacelles under wings

🐱 Cat Face / Animal Nodes form cat face + body from above Entry = nose/center face Main deps = cheeks (wide nodes) Leaf nodes = whisker tips (radiating outward) Two top clusters = ears (triangle shapes) Small circular ring = collar

🌳 Tree with Leaves Nodes form natural organic tree silhouette Root file = trunk base (bottom center, large node) Main modules = thick primary branches (forking upward) Sub-modules = secondary branches Leaf files (no further imports) = rendered as small rounded leaf shapes at branch tips Animation: leaves gently sway when hovering Crown of tree fills based on number of files

πŸ’Ž Diamond / Crystal Lattice Nodes in diamond/gem shape arrangement Multiple facet rows, entry at top point

πŸŒ€ Golden Spiral Nodes arranged in Archimedean/Fibonacci spiral Entry at center, wrapping outward

πŸ”· Hexagonal Grid Nodes in honeycomb hex-grid pattern Connected nodes placed in adjacent hexes

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 8 β€” CODE VIEW PANEL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Monaco Editor (@monaco-editor/react) Slides in from right. Resizable. Fullscreen toggle.

SPLIT VIEW MODE: Button to split panel into two side-by-side code editors Navigate different files in each pane independently Useful to compare two related files simultaneously

PANEL HEADER: [←] [β†’] history nav | breadcrumb trail (clickable) [Split View] [Fullscreen] [Close βœ•] [Download ↓] [Copy path]

FILE INFO BAR: #3 | Button.tsx | TypeScript React | 2.4 KB | 47 lines πŸ“ src/components/ | Complexity: 🟒 Low (score: 12)

CHAIN POSITION BAR: "Chain: main.tsx #1 β†’ App.tsx #2 β†’ Button.tsx #3" Each file in chain is clickable β†’ navigate to it Visual chain: [#1]──[#2]──[#3β—‰] (current highlighted)

IMPORT DETAILS TABLE (collapsible): "↓ 2 Imports β€” what this file brings in:" β”Œβ”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ # β”‚ Imported From β”‚ What is Imported β”‚ Used on Lines / Purpose β”‚ β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 1 β”‚ ./styles.css β”‚ (side-effect only) β”‚ Applies component styles β”‚ β”‚ 2 β”‚ ../utils/helpers β”‚ { formatDate, β”‚ Line 12: format display date β”‚ β”‚ β”‚ β”‚ truncate } β”‚ Line 18: truncate long strings β”‚ β”‚ β”‚ β”‚ β”‚ Line 24: format again β”‚ β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Click filename β†’ navigate to that file

"↑ Used by 1 file β€” who imports this file:" β”Œβ”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ # β”‚ File That Imports This β”‚ What They Import β”‚ Where (line) β”‚ β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 1 β”‚ src/App.tsx β”‚ default as Button β”‚ Line 5 β”‚ β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Click β†’ navigate to App.tsx, scroll to line 5, highlight import line

LINE-LEVEL DEPENDENCY TRACKING (Monaco decorations): Every import line:

  • Colored left-gutter dot (color = edge type color)

  • Hover β†’ rich inline tooltip: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ πŸ”— β†’ ../utils/helpers.ts β”‚ β”‚ Imports: { formatDate, truncate } β”‚ β”‚ Used on lines: 12, 18, 24 β”‚ β”‚ [Follow Location β†’] [View in Graph βŠ™] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  • Click [Follow Location β†’]: Open target file Scroll to relevant line Pulse highlight animation Toast: "πŸ“ Button.tsx β†’ helpers.ts" Push to nav history

  • Click [View in Graph βŠ™]: Code panel shrinks / graph pans to edge between the two nodes and highlights it

    Unresolved imports tooltip: "⚠️ Not found in repo β€” external package or gitignored"

NAVIGATION HISTORY: Max 30 items. Back ← Forward β†’ buttons. Full breadcrumb: fileA.js β†’ fileB.ts β†’ utils.js Clicking any item jumps directly to it

CODE ACTIONS (top-right of code panel): [πŸ“‹ Copy code] [πŸ“‹ Copy path] [⬇ Download file] [πŸ” Find in code] (Ctrl+F within Monaco) [πŸ“Š Show in Graph] (pan graph to this node)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 9 β€” REPO INFO PAGE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Dedicated page/route. Link from header or sidebar.

HERO: Owner avatar (large) + username (clickable β†’ github.com/owner) Repo full name (large, bold) Description Homepage URL Topics as colored badge pills [⭐ Star on GitHub β†—] button

STATS GRID (card layout): ⭐ Stars 🍴 Forks πŸ‘οΈ Watchers πŸ› Open Issues πŸ“¦ Size πŸ“… Created πŸ”„ Updated 🌿 Branch πŸ“œ License πŸ”€ Fork? (if yes β†’ link to parent repo)

LANGUAGE BREAKDOWN: Stacked horizontal bar (fetched from /languages API) Table: Language | Color | Files | Lines | %

DOWNLOAD SECTION: [⬇ Download Full Repo as ZIP] button Shows: "~4.2 MB" estimated size Clicking β†’ navigates to internal /download page

CONTRIBUTOR INFO (if accessible via API): Top contributors list with avatars + commit counts

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 10 β€” UI CUSTOMIZATION PANEL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

TAB 1 β€” CONNECTIONS (Edge Styles): Visual style previews (mini animated preview per option):

Bezier Curve β€” smooth S-curve [default] Straight Line β€” direct path Elbow/Step β€” right-angle bends

⛓️ Chain Links β€” actual interlocking chain link SVG drawn along path. Each link is a rounded rectangle with two semicircle ends. Links connect to each other. Slowly animate (gentle shimmer/movement). Color of chain = selected edge color.

Animated Dots β€” small circles flow along path (like data packets traveling between nodes)

Electric / Lightning β€” jagged animated line with glow/bloom color effect at kinks

Dashed Marching Ants β€” classic dashed line with animated dash-offset (ants marching)

Fiber Optic β€” glowing thin line with bright moving light pulse along it

Color settings: Per-type color pickers: import/require edge color HTML link/script edge color CSS @import edge color dynamic import color unknown edge color Rainbow mode toggle (each edge unique hue) Gradient edge toggle (source β†’ target blend) Edge opacity slider: 20%–100% Edge thickness slider: 1px–8px Arrow head: Arrow | Dot | Diamond | None Edge label: show/hide import type label on edges

TAB 2 β€” NODES: Shape: Card | Pill | Hexagon | Circle | Minimal Size slider: XSmall β†’ Small β†’ Medium β†’ Large β†’ XLarge Show/hide toggles: File size | Folder path | Chain # badge Import count ↓ | Used-by count ↑ Complexity border color | Badge icons Shadow: None | Soft | Strong | Neon glow | Drop Border: None | Subtle | Bold | Glow | Gradient Corner radius slider Icon size slider

TAB 3 β€” THEME: ⚠️ IMPORTANT FOR AI: There are TWO SEPARATE theme controls. Do NOT confuse them. They are completely independent:

CONTROL A β€” App UI Theme (sidebar, header, panels, text): πŸŒ™ Dark UI (default) β˜€οΈ Light UI

CONTROL B β€” Graph Canvas Theme (ONLY affects the graph canvas area β€” nodes, edges, background) (Does NOT affect sidebar/header/panels)

πŸŒ‘ Dark Canvas β€” dark bg, colored nodes, purple edges
β˜€οΈ Light Canvas β€” white bg, light nodes, clean minimal
⚑ Neon Canvas β€” pitch black, neon glowing edges, dark nodes
πŸ“ Blueprint Canvas β€” dark navy bg, white/cyan lines,
   engineering drawing look, grid overlay
🌸 Pastel Canvas β€” soft cream bg, muted colors, gentle style
πŸ”₯ Heatmap Canvas β€” edges glow intensity by connection count

Both controls are visible simultaneously. Example: Dark UI + Neon Canvas = dark sidebar, neon graph βœ… Light UI + Blueprint Canvas = light sidebar, blueprint graph βœ…

TAB 4 β€” BACKGROUND (Graph Canvas only): Dot grid (default) | Line grid | Solid | Subtle noise texture | Blueprint paper | Hexagon grid | Circuit board pattern | Starfield (dark themes) | Graph paper

TAB 5 β€” ANIMATION: Edge animation speed: Off | Slow | Medium | Fast | Turbo Node hover effect: Glow | Lift | Scale | Shake | None Layout transition: Instant | Smooth | Bouncy | Elastic Reduce motion toggle (for accessibility)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 11 β€” GUIDE / LEGEND PANEL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Toggled by "?" button. Styled as interactive in-app manual.

PART A β€” SYMBOLS: ⚑ Entry Point β€” root/main file #1 #2 #3 β€” chain order from entry point β†’ Edge β€” file A imports file B ⛓️ Chain edge β€” dependency chain visual style β—‰ Selected β€” currently focused node β—Œ Dimmed β€” not related to selection πŸ”΄ Gutter dot β€” this code line links to another file [Follow β†’] β€” jump to connected file + line πŸ“¦ External β€” third-party package ⚠️ Unresolved β€” imported file not found πŸ”’ Gitignored β€” excluded from repository ⚫ Orphan β€” file with no connections πŸ§ͺ Test file β€” test/spec file βš™οΈ Config β€” configuration file ↓2 β€” this file imports 2 files ↑3 β€” this file is imported by 3 files πŸ”΄ Circular β€” part of circular dependency ⚠️ Duplicate β€” same content as another file

PART B β€” FILE ICONS: Full grid: every icon + extension + color + what it is Beginners can identify any file type at a glance

PART C β€” HOW CHAIN NUMBERS WORK: Clear visual explanation with mini example: "#1 is your entry point (where your app starts). Every file it directly imports becomes #2, #3... Files those import become #4, #5... Higher number = further from app start. This shows the ORDER your project loads." Mini inline diagram showing #1β†’#2β†’#3 chain

PART D β€” KEYBOARD SHORTCUTS TABLE: Ctrl+F β€” search/find file in graph Ctrl+Shift+F β€” fit all nodes to screen Ctrl+E β€” open export modal Ctrl+Z / Ctrl+Y β€” undo/redo node moves Ctrl+B β€” toggle sidebar Escape β€” deselect / close panels ← β†’ β€” navigate code history (in code panel) G β€” open guide/legend P β€” presentation mode Space β€” pan mode (hold)

  • / - β€” zoom in / zoom out

PART E β€” HOW IMPORTS WORK (for beginners): Plain English explanation with examples: "When a file says import X from './other', it means 'I need something from that other file to work.' RepoGraph draws a line between them to show this." Show examples for JS, CSS, HTML visually.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 12 β€” SPECIAL GRAPH MODES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

NODE FOCUS MODE: Right-click β†’ "Focus on this file" Shows ONLY: selected node + direct imports + direct dependents Everything else hidden with smooth fade [Exit Focus Mode] button top-center restores full graph

CHAIN TRACE MODE: Right-click β†’ "Trace full chain from root to here" Highlights ONLY the path from #1 entry to this node All other nodes and edges dim to 15% Shows: #1 β†’ #2 β†’ #4 β†’ #7 (current) in glowing chain

DEPENDENCY DEPTH MODE: Slider: show only N levels deep from selected node N=1: show only direct connections N=2: show connections of connections etc.

PRESENTATION MODE (P key or header button): Full-screen graph, no UI chrome (no sidebar, no panels) Graph fills entire viewport Subtle watermark: "RepoGraph" bottom-right ESC to exit Perfect for screen sharing / walkthroughs

STATS OVERLAY MODE: Toggle button: show stats badges floating on graph Each node shows its complexity score as floating badge Each edge shows import count floating label Overall: "Most connected: App.tsx (12 connections)"

DEPENDENCY MATRIX VIEW: Alternative to graph β€” show dependencies as a grid: Rows = source files | Columns = target files Cell = colored dot if dependency exists Hover cell = show exact import details Good for seeing all dependencies at a glance

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 13 β€” DOWNLOAD SYSTEM ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Use JSZip library for creating ZIPs in browser.

ACCESS POINTS: Header [⬇ Download] button β†’ full repo Sidebar file right-click β†’ single file ZIP Code panel [⬇] button β†’ current file ZIP Repo Info page β†’ full download section Multi-select files in sidebar β†’ batch ZIP

/download PAGE (internal route): β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ [RepoGraph logo] β”‚ β”‚ β”‚ β”‚ Downloading from: β”‚ β”‚ [owner-avatar] owner / repo-name β”‚ β”‚ β”‚ β”‚ πŸ“¦ repo-name-main.zip β”‚ β”‚ Estimated size: ~4.2 MB β”‚ β”‚ β”‚ β”‚ [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘] Preparing... β”‚ β”‚ β”‚ β”‚ Download will start automatically. β”‚ β”‚ If not: [Click here to download manually] β”‚ β”‚ β”‚ β”‚ Also available: β”‚ β”‚ [Download as ZIP] β”‚ β”‚ [Download specific files β†’] β”‚ β”‚ β”‚ β”‚ [← Return to Graph] [Load another repo] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

For full repo (GitHub mode): β†’ Redirect to: github.com/{owner}/{repo}/archive/{branch}.zip β†’ Show size from repo metadata

For single/specific files (any mode): β†’ Build ZIP in browser using JSZip β†’ Show exact file size before download β†’ Filename: filename.ext.zip or batch-files.zip

For local folder mode: β†’ Re-zip selected files from memory using JSZip β†’ Multi-select files in sidebar tree for batch download

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 14 β€” EXPORT OPTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Modal opened by Ctrl+E or toolbar button.

  1. PNG Image Current view OR fit-all modes Resolution: 1x | 2x | 3x With/without background Library: html-to-image

  2. PDF Page 1: Graph visualization Page 2: File list + dependency table Page 3: Language stats + sidebar summary Library: jsPDF

  3. SVG Vector format, infinitely scalable Embeddable in docs and presentations

  4. JSON (Graph Data) Full nodes + edges + metadata + positions Re-importable to restore session

  5. Markdown Report Auto-generated structured analysis:

    Overview: X files, Y dependencies

    File Tree

    Language Breakdown

    Dependency Map (text-based)

    Entry Points

    External Packages

    TODO List

    Complexity Report

  6. CSV (Dependency Table) Rows: source_file, target_file, line_number, import_type, what_imported For import into Excel / Google Sheets

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 15 β€” LANDING SCREEN ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Shown when no repo is loaded. Beautiful, welcoming.

Hero: Large heading + short tagline "RepoGraph β€” See your codebase, not just your code."

Two input cards side by side: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ πŸ”— GitHub URL β”‚ β”‚ πŸ“ Local Folder β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ [paste URL here ] β”‚ β”‚ [drag & drop or β”‚ β”‚ [Load Repo β†’] β”‚ β”‚ click to browse] β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ Works with public β”‚ β”‚ 100% offline. β”‚ β”‚ GitHub repos β”‚ β”‚ No internet needed. β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

[✨ Try Demo] button β†’ loads hardcoded sample React project (~10 files, showcasing ALL features)

Recently Loaded section: Last 10 repos as clickable cards Each shows: avatar, owner/repo, language badges, file count, date loaded, [Remove βœ•]

3-step visual explainer: 1️⃣ Paste a GitHub URL or upload your folder 2️⃣ RepoGraph maps every file and connection 3️⃣ Explore, navigate, understand, export

Feature highlights row (icons + short descriptions): βš› Any language | πŸ” Follow imports | ⛓️ Visual chains πŸ“Š Sidebar stats | 🌳 Shape layouts | πŸ“€ Export all

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 16 β€” ONBOARDING TOUR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

First time a user loads a repo β†’ show optional guided tour. Spotlight overlay highlighting each UI area in sequence:

Step 1: "This is your graph. Each box = one file." Step 2: "Lines show which files import each other." Step 3: "Click a node to highlight its connections." Step 4: "Double-click to read the file's code." Step 5: "This sidebar shows all project details." Step 6: "Customize the look with the 🎨 panel." Step 7: "Export your graph anytime with πŸ“€."

Skip/dismiss option. Don't show again checkbox. "Restart Tour" option in help/guide panel.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 17 β€” PERFORMANCE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Web Worker for ALL file parsing (zero UI freeze) Lazy file content loading (fetch/read only on open) 200+ files: LOD (level-of-detail) rendering

  • Far/small nodes: simplified colored dot
  • Full detail only when zoomed in Debounce layout recalculation (300ms) Virtual scroll in sidebar for huge repos (1000+ files) Cancel in-flight GitHub requests on URL change requestAnimationFrame for all graph animations IndexedDB for caching parsed results of recently visited repos (avoid re-parsing same repo twice)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 18 β€” TOAST NOTIFICATIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Top-right. Auto-dismiss 4s. Stackable. Swipe to dismiss.

Types and examples: βœ… Success (green): "Loaded 47 files, 123 dependencies found" πŸ“ Navigate (blue): "Following: Button.tsx β†’ helpers.ts (line 14)" ⚠️ Warning (amber): "3 unresolved imports found β€” see sidebar" πŸ”΄ Error (red): "Private repo β€” access denied" ⏱️ Info (gray): "Rate limit resets in 4:32" πŸ”„ Update (blue): "File changed: Button.tsx β€” click to refresh" πŸ“¦ Download (purple): "Download starting: repo.zip (~4.2 MB)" ⚠️ Circular (red): "Circular dependency: App.tsx ↔ utils.ts" ⚫ Orphan (gray): "3 orphan files found β€” see sidebar"

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 19 β€” ACCESSIBILITY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Full keyboard navigation (Tab through all elements) Proper aria-labels on every button/input/region Focus rings visible at all times Skip-to-main-content link (screen readers) Color blind safe: use shape + label not color alone Respects prefers-reduced-motion (disable all animations) Respects prefers-color-scheme (auto dark/light) Minimum text contrast ratio: 4.5:1 (WCAG AA) All icons have descriptive aria-label Graph nodes keyboard navigable with arrow keys

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 20 β€” MOBILE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Banner: "RepoGraph works best on desktop (1024px+)" Show: sidebar + file tree fully functional Code viewer works fine (Monaco responsive) Graph: simplified static layout (no drag, no pan) Download and export work fine on mobile Touch-friendly buttons (min 44px tap targets)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 21 β€” TECH STACK ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Frontend: React 18 + TypeScript + Vite Styling: Tailwind CSS + CSS custom properties JetBrains Mono (code) + Syne (UI headings) Graph: React Flow (reactflow.dev) Custom node + edge components per type Custom chain link SVG edge component Code View: Monaco Editor (@monaco-editor/react) Programmatic gutter decorations Custom hover providers Inline diff (for future compare mode) Icons: Inline SVG icon map (no external library) Export: html-to-image (PNG/SVG) + jsPDF (PDF) ZIP: JSZip (client-side ZIP creation) State: Zustand (global, no boilerplate) Routing: React Router v6 (/download + /repo-info routes) Parsing: Custom regex engine in Web Worker (worker.ts) Path alias resolution (tsconfig paths) Caching: IndexedDB (cache parsed repo data) Storage: localStorage (recent repos, bookmarks, customization preferences, tour dismissed) GitHub API: Native fetch() only, no SDK Markdown: react-markdown (README rendering)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 22 β€” FUTURE ARCHITECTURE (Do NOT build now β€” keep code extensible for these) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Supabase auth + user accounts Private GitHub repo via OAuth token Save and share graph via unique URL Annotate/comment nodes (team notes) Repo version diff (compare two branches/commits) AI explanation of each file's role Team collaboration with live cursors on graph Git commit history per file (blame view) VS Code extension version of RepoGraph NPM package: repograph-cli for terminal analysis

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 23 β€” QUALITY & DESIGN STANDARDS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

VISUAL QUALITY: Figma + Linear + Vercel + GitHub combined quality Premium dev-tool aesthetic throughout Every pixel intentional. No default browser styles. Micro-animations on every interaction Skeleton loading screens (not spinners alone) Empty states for every panel (never blank) Loading states everywhere

BEGINNER FRIENDLINESS: Any non-developer should understand the graph within 60 seconds of loading a repo Plain English explanations everywhere in Guide Tooltips on every icon and technical term Onboarding tour for first-time users Demo mode shows a pre-loaded example instantly

DEVELOPER EXPERIENCE: Every button works β€” zero placeholder/dummy UI No console errors in production build All async operations cancellable Graceful degradation for all edge cases Every error has a friendly message + next action

CODE ARCHITECTURE: Clean component separation for future features All parsing logic isolated in worker.ts All GitHub API calls isolated in github.ts Theme system via CSS custom properties only Zustand stores clearly separated by domain: repoStore, graphStore, uiStore, codeStore