gitpeek turns a public GitHub repository into an image gallery. Paste a repo URL and the app scans the repository tree, extracts image files, and renders them in a filterable gallery with a lightbox.
Run the app locally:
pnpm devQuality checks:
pnpm lint
pnpm typecheck
pnpm check
pnpm buildOpen http://localhost:3000 after starting the dev server.
- Next.js App Router
- React 19
- TanStack Query
- TanStack Virtual
- Radix/shadcn UI primitives
- Tailwind CSS 4
app/App Router pages and layout shell.features/home/Home-page input flow.features/gallery/Gallery UI, hooks, types, and gallery-specific helpers.features/github/GitHub-specific parsing, types, and API access logic.components/ui/Shared shadcn-style UI primitives.components/layouts/App shell pieces like the header and footer.providers/Cross-cutting client providers for query state, React Query, and theme.
- GitHub URL parsing lives in
features/github/lib/parse-repo-url.ts. - GitHub API tree loading lives in
features/github/lib/fetch-repo-tree.ts. useRepoTreeis intentionally thin and maps fetched tree data into gallery images.- Gallery filtering is fully client-side once the repo tree has loaded.
- Feature-specific types and helpers are colocated with the feature that owns them.
If you are new to the codebase, read files in this order:
app/page.tsxHome route and entry into the URL form.features/home/url-input.tsxValidates input and decides which gallery URL to push.features/github/lib/parse-repo-url.tsDefines which GitHub URL shapes the app accepts.app/gallery/[owner]/[repo]/page.tsxRoute wrapper that passes route params into the gallery feature.features/gallery/components/gallery.tsxMain orchestration layer for fetching, filtering, error handling, and rendering.features/gallery/hooks/use-repo-tree.tsMaps the GitHub tree response intoRepoImage[].features/github/lib/fetch-repo-tree.tsTalks to the GitHub API.
Once you understand those files, the rest of features/gallery/components/ is mostly presentational UI.
- Only public GitHub repositories are supported.
- Branch URLs using
/tree/<branch>are supported. - Token-based auth and rate-limit bypass are intentionally out of scope right now.