Turn a GitHub repository into a polished, shareable PNG card.
The image above is the project’s generated social/card preview; the live editor can produce customized PNG cards from any public repository.
RepoShot is a focused web app for creating presentation-ready visuals from public GitHub repositories.
Paste a repository URL, let RepoShot fetch its public metadata, customize the card, and export a PNG. No GitHub login is required.
It is useful for README showcases, portfolios, project announcements, documentation, presentations, and giving a repository a visual identity.
The hosted version is the easiest way to try the app. A local development setup is also available below.
- Public GitHub repository URL validation
- Repository name, owner, avatar, description, language, stars, forks, and open issues
- Repository topics with compact overflow handling
- Graceful handling of missing optional metadata
- Clear errors for invalid or nonexistent repositories
- Helpful messaging for GitHub API rate limits
- Multiple visual themes, layouts, and reusable templates
- Metadata visibility controls
- Custom subtitle and footer text
- Accent color customization
- Shareable preset URLs that restore the selected configuration
- PNG export
- Deterministic image dimensions and filenames
- Download success and error feedback
- Responsive preview workflow
- Reduced-motion support
- Next.js App Router
- TypeScript
- Tailwind CSS
- GitHub REST API
- 60-second repository caching
- In-flight request deduplication
- Automated lint, typecheck, test, and production-build checks
GitHub repository URL
↓
Validate URL
↓
Fetch public GitHub metadata
↓
Choose theme, layout, template & metadata
↓
Preview RepoShot
↓
Download PNG or share the preset URL
RepoShot currently targets public GitHub repositories.
Accepted repository URLs use this form:
https://github.com/<owner>/<repository>
Examples:
https://github.com/Ava-91/reposhot
https://github.com/facebook/react
https://github.com/microsoft/TypeScript
The URL parser intentionally rejects HTTP GitHub URLs, other hosts, repository subpages, embedded credentials, and incomplete repository URLs.
Private repositories and authenticated GitHub accounts are outside the current scope.
For API details and rate-limit behavior, see docs/GITHUB_API.md.
- Node.js 24 or a compatible current Node.js release
- npm
- Git
- a modern browser
git clone https://github.com/Ava-91/reposhot.git
cd reposhot
npm install
npm run devThen open http://localhost:3000.
npm run lint
npm run typecheck
npm test
npm run build
npm auditThe same core checks run in GitHub Actions CI. See docs/DEVELOPMENT.md for the full development and troubleshooting guide.
RepoShot has automated coverage for deterministic behavior, including URL parsing, unusual repository names, long metadata, missing optional metadata, large counters, malformed topics, deterministic PNG options, nonexistent repositories, rate limits, and generic GitHub API failures.
The manual release matrix covers browser PNG export, narrow/mobile layouts, and runtime remote-avatar failures.
See docs/TEST_MATRIX.md.
reposhot/
├── app/ # Next.js pages, metadata, and global styles
├── components/ # Interactive UI and editor components
├── docs/ # Development, API, export, testing, and release docs
├── lib/ # GitHub, presets, themes, layouts, templates, and export logic
├── public/ # Static assets
├── tests/ # Core automated tests
├── .github/ # CI and repository automation
├── CHANGELOG.md
├── CONTRIBUTING.md
├── package.json
└── README.md
| Technology | Role |
|---|---|
| Next.js | React framework and application runtime |
| React | UI and interactive client components |
| TypeScript | Type-safe application code |
| Tailwind CSS | UI styling and responsive design |
| GitHub REST API | Public repository metadata |
| html-to-image | Client-side PNG generation |
| Node.js test runner | Core automated tests |
| GitHub Actions | Continuous integration |
RepoShot only needs public repository metadata for its current workflow. It does not ask for a GitHub password or personal access token.
Repository requests are cached for 60 seconds, and simultaneous requests for the same repository are deduplicated. If GitHub returns a rate-limit response, RepoShot surfaces a specific retry-oriented message and uses Retry-After information when GitHub provides it.
See docs/GITHUB_API.md for implementation details.
The generated image is a PNG using the selected layout dimensions. Filenames are deterministic and based on the repository owner and name.
Example:
reposhot-Ava-91-reposhot.png
See docs/PNG_EXPORT.md.
The current project version is 0.1.0, with the core public-repository-to-PNG workflow, customization, preset sharing, API caching, and automated quality checks in place.
RepoShot is an actively maintained early release rather than a finished, feature-complete product. Future improvements and known follow-up work are tracked in the GitHub Issues. The release checklist and required CI checks are documented in docs/RELEASE.md.
Issues, bug reports, and focused improvements are welcome.
Please read CONTRIBUTING.md before opening a pull request. It covers the development workflow, branch and PR conventions, commit messages, quality checks, issue reports, and the pre-PR checklist.
docs/DEVELOPMENT.md— setup, scripts, architecture, troubleshooting, and development workflowCONTRIBUTING.md— contribution and pull-request guidelinesdocs/GITHUB_API.md— API requests, caching, and rate limitsdocs/PNG_EXPORT.md— PNG generation behaviordocs/TEST_MATRIX.md— automated and manual edge-case coveragedocs/RELEASE.md— release checklist and supported inputCHANGELOG.md— release history
RepoShot is released under the MIT License. See LICENSE for the full license text.
Built by Ava-91.
If RepoShot is useful to you, consider giving the repository a ⭐.
Paste a repository. Make it look good. Share it.
Try RepoShot →