A full-stack web application for discovering and browsing GitHub trending and starred repositories. Supports dual deployment modes: a traditional API+SQLite backend, or a static GitHub Pages site with pre-exported JSON data.
- GitHub Trending — Browse daily, weekly, and monthly trending repositories with snapshot history.
- GitHub Starred — View your starred repositories with
starred_attimestamps and incremental sync. - Filtering & Search — Filter by language, topics, date snapshot, stars range; search by name/description; sort by stars, updated, created, or starred date.
- Dual Mode — Run as a full-stack app (Hono API + SQLite) or deploy as a static site (GitHub Pages) with incremental JSON data chunks.
- Multi-theme — Default, Notion, and Linear theme support.
- Filter Persistence — Filter state is saved to localStorage and restored on page reload.
- Bun or Node.js 18+
- GitHub CLI (
gh) installed and authenticated (gh auth login) - Firecrawl API key (optional, falls back to
ghCLI)
git clone <repo-url>
cd innate-feeds
bun install
bun run install:allbun run devThis starts:
- Backend API at
http://localhost:4000 - Frontend dev server at
http://localhost:3000(proxies/apito backend)
cd backend
# Sync trending repos (all periods: daily, weekly, monthly)
bun run sync:trending
# Sync your starred repos (full)
bun run sync:starred
# Sync only recently starred (last 24h, incremental)
bun run sync:starred:recent
# View stats
bun run statsAPI mode:
cd frontend && bun run build
# Serve frontend/dist/ and run backend with: cd backend && bun run startStatic mode (GitHub Pages):
# Export data + build frontend in static mode
bun run build:static
# For project pages with a sub-path
VITE_BASE_PATH=/your-repo bun run build:pagesinnate-feeds/
├── backend/
│ └── src/
│ ├── app/ # server.ts (Hono API), cli.ts (CLI)
│ ├── collector/ # github.ts, firecrawl.ts, sync.ts
│ ├── data/ # export/import static JSON
│ └── db/ # SQLite schema, queries, path config
├── frontend/
│ └── src/
│ ├── pages/ # TanStack Router routes (trending, starred)
│ ├── components/ # FeedCard, FilterBar, AppSidebar, etc.
│ ├── services/ # feeds.ts (API + static mode client)
│ ├── hooks/ # usePersistedFeedFilters
│ ├── lib/ # utils, theme, filter storage
│ └── types/ # TypeScript domain types
├── git-repo-scanner/ # Standalone Go CLI for scanning local git repos
└── package.json # Root workspace scripts
| Layer | Technology |
|---|---|
| Frontend | React 19, TanStack Router, Vite 6, Tailwind CSS v4 |
| Backend | Hono 4, @hono/node-server |
| Database | SQLite via better-sqlite3 (WAL mode) |
| Data Sources | GitHub CLI (gh), Firecrawl |
| Validation | Zod |
| Runtime | Bun / Node.js 18+ |
| Variable | Default | Description |
|---|---|---|
PORT |
4000 |
Backend API server port |
DB_PATH |
~/.innate/feeds.db |
SQLite database file path |
INNATE_HOME |
~/.innate |
Data directory (DB_PATH overrides) |
VITE_STATIC_MODE |
— | Set to true for static/GitHub Pages mode |
VITE_BASE_PATH |
/ |
Base URL path for GitHub Pages project sites |
GITHUB_TOKEN |
— | Used by git-repo-scanner for higher API rate limits |
Private project.