How abduznik/portfolio-dumper works
Purpose and Entry Point
Portfolio Dumper is a browser-only static application that turns GitHub profile or repository inputs into LLM-friendly Markdown. The complete UI and client-side ingestion logic are hosted from index.html; there is no application backend or persistent datastore.
Paths: index.html, assets/demo.png
Client Application Shell
index.html is the architectural center: it contains the user interface, Tailwind CDN styling integration, and vanilla JavaScript behavior. Users supply a GitHub username, profile URL, or repository URL, select an ingestion mode, optionally provide a PAT, and trigger ingestion.
Path: index.html
Input Interpretation and Mode Routing
The client parses raw usernames and GitHub URLs, distinguishing profile-level ingestion from a targeted repository request. The selected mode controls whether the pipeline retrieves profile README content, original repositories, or both; a direct repository link routes to repository metadata/README retrieval.
Path: index.html
GitHub API Boundary
Browser-side JavaScript calls GitHub REST API v3 directly. Requests fetch profile README data, repository lists, and repository metadata/readmes. An optional GitHub Personal Access Token is attached client-side to raise rate limits and enable accessible private resources; it is not sent through an application server.
Path: index.html
Markdown Assembly and Statistics
Fetched GitHub responses are transformed in the browser into exportable Markdown. The same processing derives summary statistics including repository totals, stars, forks, and language diversity. API failures and GitHub rate-limit constraints are therefore user-browser concerns rather than server-side jobs.
Path: index.html
Export Boundary
Generated Markdown remains local to the browser and is exposed through copy-to-clipboard and file-download actions. This keeps GitHub data and optional tokens outside any project-managed backend or storage layer.
Path: index.html
Deployment and Delivery
The application can be served by any static HTTP server. Container deployment is defined by Dockerfile and docker-compose.yml, typically exposing the static site on port 80 internally. GitHub Actions publishes the container image to GHCR.
Paths: Dockerfile, docker-compose.yml, .github/workflows/docker-publish.yml
Components 13
Browser application
- User
- Static UI shell · Hosts UI, Tailwind integration, and all client behavior.
index.html - Input parser & mode router · Classifies profiles, repository URLs, and selected ingestion modes.
index.html - Markdown assembler · Transforms fetched responses into LLM-friendly Markdown.
index.html - Summary statistics · Derives repository, stars, forks, and language totals.
index.html - Local export · Keeps generated Markdown in the user's browser.
index.html
Delivery
- Static HTTP server · Serves the site on port 80 internally.
Dockerfile - Compose deployment
docker-compose.yml - GHCR image registry
- Image publish workflow · Builds and publishes the container image.
.github/workflows/docker-publish.yml
Other components
- GitHub REST API v3 · Receives direct browser requests, optionally authenticated with a PAT.
- Profile README
- Repository data · Repository lists, metadata, and README content.
Connections 13
- User → Static UI shell: uses
- Static UI shell → Input parser & mode router: submits input
- Input parser & mode router → GitHub REST API v3: routes API requests
- GitHub REST API v3 → Profile README: fetches
- GitHub REST API v3 → Repository data: fetches
- Profile README → Markdown assembler: README content
- Repository data → Markdown assembler: metadata and READMEs
- Repository data → Summary statistics: repository metrics
- Markdown assembler → Local export: generated Markdown
- Summary statistics → Static UI shell: renders totals
- Compose deployment → Static HTTP server: runs
- Static HTTP server → Static UI shell: serves
- Image publish workflow → GHCR image registry: publishes image