📄 POC_PLAN.md

GitBrowser POC Plan

POC Scope

Iteration 1: Basic Repository File View (Current)

Goal: Display root directory file listing at /repo path

Features:

  • Single route: /repo
  • Display repository file tree at root level (HEAD commit)
  • Show file/folder list similar to GitHub's repository homepage
  • Display basic file metadata:
    • Name
    • Type (file/directory)
    • Last commit message
    • Last commit date
  • Navigate into subdirectories
  • NO README viewing (next iteration)
  • NO file content viewing (next iteration)

Technical Approach:

  • Use LibGit2Sharp for all git operations directly in Razor pages
  • LibGit2Sharp types serve directly as models (thin UI layer)
  • Read-only operations only
  • Repository path configured in appsettings.json
  • NO service abstractions - inject IConfiguration and use LibGit2Sharp directly
  • Keep it SIMPLE

Out of Scope:

  • File viewing
  • README rendering
  • Multiple repositories
  • Branch switching
  • Search
  • Diffs
  • Commit history

Future Iterations

Iteration 2: File Viewing

  • Click on file to view contents
  • Default to showing README.md of current directory
  • Syntax highlighting for code files

Iteration 3: Multiple Repositories

  • Change route from /repo to /<repo-name>
  • Support multiple configured repositories
  • Repository selection/listing page

Iteration 4+: Enhanced Features

  • Commit history view
  • Diff viewer
  • Branch switching
  • Search functionality

Technical Stack

  • Git Integration: LibGit2Sharp
  • UI Framework: Blazor (Server-side rendering)
  • Styling: Custom modern CSS (no frameworks, GitHub-inspired)
  • Operations: Read-only git operations

Configuration

Repository path will be stored in appsettings.json:

{
  "GitBrowser": {
    "RepositoryPath": "D:\\path\\to\\repo"
  }
}

Architecture Notes

  • Keep it simple: LibGit2Sharp types are the models
  • NO service abstractions or interfaces
  • Blazor pages use LibGit2Sharp directly
  • Inject IConfiguration, use Repository directly in page
  • No complex abstractions or mapping layers - KISS principle