TweetDeck-style GitHub explorer — browse repos and releases in columns
GitDeck is a client-side Svelte 5 SPA that displays GitHub repositories in a horizontal column layout inspired by TweetDeck. No backend required — everything runs in the browser with fetch() calls to the public GitHub REST API.
fetch() calls to the GitHub REST API (unauthenticated, rate-limited)docker compose up --build
Open http://localhost:8088.
GHCR_OWNER=macedot IMAGE_TAG=latest docker compose up
| Variable | Default | Description |
|---|---|---|
GHCR_OWNER |
macedot |
GHCR image namespace |
IMAGE_TAG |
latest |
Image tag (e.g. 0.1.0, latest) |
+ button on the right when columns exist)torvalds) or a user/repo (e.g. torvalds/linux)npm install
npm run dev
# → http://localhost:5173
npm run build # production build → dist/
npm run preview # preview production build locally
┌──────────────────────────────────────────────────────────┐
│ Container (gitdeck) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ nginx:alpine :8080 │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Svelte 5 SPA (static files) │ │ │
│ │ │ GitHub REST API → fetch() │ │ │
│ │ │ Column state → localStorage │ │ │
│ │ │ Auto-refresh → 60s │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
How it works:
src/lib/github.js) — Fetches repos (/users/{user}/repos), single repo (/repos/{owner}/{repo}), latest release (/repos/{owner}/{repo}/releases/latest), and README (/repos/{owner}/{repo}/readme) from the public GitHub REST API. Rate limit tracking via response headers.$state runes manage columns, editing, and data. $effect runes handle localStorage persistence and auto-refresh intervals.marked library renders README markdown to HTML. Repo cards show language, stars, forks, and relative dates.node:22-alpine builds the SPA with Vite, nginx:alpine serves static files with gzip compression and SPA routing.The project ships as a single Docker container with the Svelte SPA served by nginx:
| Service | Base Image | Notes |
|---|---|---|
gitdeck |
nginx:alpine |
Runs as non-root (nginx user) on port 8080. Published to ghcr.io/macedot/gitdeck |
GitHub Actions builds and pushes Docker images to GHCR on every published release (prereleases excluded). Images are tagged with both the release version and latest.
This project is licensed under the GNU Affero General Public License v3.0.