Skip to content

aka-kika/UND-RDR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

151 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UND-RDR

UND-RDR CI Live site Dataset

UND-RDR social card

Find the GitHub repos people will be talking about next.

UND-RDR is a live discovery index for underrated open-source projects: 700 active repos under 1,000 stars, ranked for momentum, usefulness, and that "wait, why is nobody talking about this?" feeling.

Open the live site · Browse the data · Submit a repo

Why It Exists

GitHub is enormous. The best small projects usually do not look famous yet: they have a sharp README, a weirdly useful idea, a burst of stars, a maintainer shipping fast, or a niche that suddenly starts mattering.

UND-RDR watches for those signals and turns them into a fast, editorial browsing surface.

What Makes It Interesting

  • Spotlight first: the default feed prioritizes momentum-heavy, near-1K, recently active, high-signal repos.
  • Actually under the radar: the active shelf stays under 1,000 stars, with graduates preserved separately.
  • Fast discovery loops: open a repo, inspect signal, jump to related projects, save it, keep going.
  • Useful categories, not taxonomy cosplay: AI Agents, MCP, Memory / RAG, Local Models, macOS, Browser Automation, Dev Tools, Security, Data / Docs, and Voice / Media.
  • Private collecting: save repos to a local Watchlist and named Collections in this browser (remote GitHub sync paused until sign-in is re-enabled).
  • Reviewed data flow: public submissions create review issues; automation opens PRs instead of quietly mutating production data.

Product Tour

Surface What it is for
Discover Header tier views (Discover, Latest, Hidden, Rising, Near 1K), sticky Categories sidebar on desktop, horizontal category rail on phones, and a slim owner-avatar feed
Detail drawer Owner avatar header, tier bar, icon-only stats, README preview, View on GitHub / Save, spaced Next discovery rows, topic chips, and ←/→ keyboard browsing
Watchlist / Collections Local saving in this browser (footer links); Profile returns when remote sign-in is re-enabled
About Mission, how we do it, dataset metrics, and source file links (replaces the old Data page)
Graduated / Recycled Archive shelves linked from the footer; repo names open the source GitHub repo in a new tab
Submit Protected intake for repos that should be reviewed

Current Snapshot

active repos: 700
active under 1K: 700
archive repos: 493
risen repos: 32
duplicate ids: 0

Quick Start

npm install
npm run dev

Useful checks:

npm run build
npm run lint
npm run validate:data

Discovery Statuses

Status Meaning
Underrated Still under 1,000 stars
Rising Growing quickly or showing strong momentum
Near 1K Close to crossing the 1,000-star threshold
Crossed 1K Graduated from underrated
Archived/Inactive Unavailable, archived, disabled, or stale

Data Protection

The active dataset lives at:

public/data/all_repos.json

Archive shelves live at:

public/data/archive_repos.json
public/data/risen_repos.json

The app protects this file as the source of truth:

  • raw repo data is not rewritten by the public UI,
  • submissions do not directly mutate the dataset,
  • accepted submissions go through a reviewer command,
  • daily GitHub refreshes open PRs for review,
  • validation checks repo count, required fields, and duplicate ids.

Accounts and Collections

UND-RDR saving is in local-only mode by default. Watchlist and Collections persist in browser storage so you can star repos and build sets while curating the index. GitHub sign-in through Supabase remains in the codebase but is disabled until VITE_ACCOUNTS_MODE=remote is set on the deployment.

The public dataset is still static and protected. Account actions never mutate public/data/all_repos.json.

# local (default) — browser storage only
VITE_ACCOUNTS_MODE=local

# remote — GitHub OAuth through Supabase when keys are configured
VITE_ACCOUNTS_MODE=remote
VITE_SUPABASE_URL=...
VITE_SUPABASE_ANON_KEY=...

Implementation notes:

src/lib/accountStorage.ts
docs/supabase-auth-collections.md

Submission Workflow

Public submissions go through the live endpoint:

/api/submit-repo

The endpoint:

  • accepts full GitHub repo URLs,
  • blocks invalid URLs,
  • blocks repos already in the dataset,
  • blocks repos already waiting in an open review issue,
  • creates a GitHub issue labeled undrdr-submission and needs-review,
  • never changes the live dataset directly.

Public contact is submit@undrdr.com. DNS and mailbox readiness are tracked in:

docs/email-intake.md

Reviewer guide:

SUBMISSIONS.md

Preview an accepted issue:

npm run submissions:add -- --issue 12 --dry-run

Apply an accepted issue:

npm run submissions:add -- --issue 12

The script fetches GitHub metadata, refuses duplicates, writes a backup, appends one normalized repo record, validates data, comments on the issue, labels it accepted plus added-to-index, and closes the issue.

Mark a submission that needs more information:

npm run submissions:review -- --issue 12 --outcome needs-data --comment "Need more signal before accepting."

Close a duplicate or rejected submission:

npm run submissions:review -- --issue 12 --outcome duplicate --comment "Already tracked or already pending."
npm run submissions:review -- --issue 12 --outcome rejected --comment "Not a fit for UND-RDR right now."

Curator Candidate Workflow

For owner-curated additions, paste GitHub links into:

data/repo-candidates.txt

Preview candidates:

npm run candidates:check

Add valid new candidates:

npm run candidates:add

The candidate workflow fetches live GitHub metadata, skips duplicates, writes a backup, appends only new repos, and runs validation. Details are in:

docs/repo-candidates.md

Recent curated batches:

data/under-the-radar-github-repos-100-20260524.txt
data/next-100-ai-tooling-candidates-20260521.txt

The May 24 CSV batch was parsed from /Users/kika_hub/Downloads/under_the_radar_github_repos_100.csv. The importer checked 100 repos, added 91 new candidates, skipped 9 already tracked repos, and later shelf rotation restored the active public dataset before the current 700-repo editorial trim.

The May 21 batch added 100 under-the-radar AI tooling repos, moving the protected dataset from 913 to 1,013 repos.

The private browser Curator page at /#/curator is protected by the production CURATOR_ACCESS_TOKEN environment variable. It is for owner batch intake only and still creates review issues instead of editing the live dataset directly.

Maintainer Outreach

When a repo is added, Rising, Near 1K, or Graduated, use the maintainer outreach playbook to notify the project owner in a useful, low-pressure way. The workflow includes batch rules, message templates, follow-up limits, success metrics, and a reusable share card template.

docs/outreach-playbook.md
public/assets/undrdr-maker-share-template.svg

Daily Automation

The GitHub Actions workflow at:

.github/workflows/github-repo-check.yml

runs daily and can also be triggered manually. It checks all repos, updates stars/status signals, validates the dataset, and opens an update PR from:

automation/github-repo-snapshot

It does not push dataset changes directly to main.

Each update PR includes a review summary with new 1K graduates, near-1K repos, fastest risers, and unavailable or failed GitHub checks. Pre-update backups are uploaded as short-lived workflow artifacts, while only the dataset and public report are committed.

Local Development

Install dependencies:

npm install

Run the app:

npm run dev

Build:

npm run build

Validate the dataset:

npm run validate:data

Run a sample GitHub metadata check:

npm run check:github:sample

Run the full GitHub metadata check locally as a dry run:

npm run check:github

Apply a full local GitHub metadata refresh:

npm run check:github:apply

Project Structure

Path Purpose
src/App.tsx Main discovery UI and client-side interactions
src/App.css Visual system, responsive layout, sidebar/feed discovery UI, detail drawer, and mobile polish
src/lib/accountStorage.ts Optional Supabase-backed account storage with local fallback
api/submit-repo.ts Protected repo submission intake
public/data/all_repos.json Protected source dataset
public/data/update-report.json Latest GitHub check report
public/llms.txt AI-answer summary for GEO crawlers
public/ai-summary.json Machine-readable site and dataset summary
scripts/check-github-repos.mjs Daily metadata refresh logic
scripts/add-submission-to-dataset.mjs Accepted submission workflow
scripts/import-repo-candidates.mjs Private curator batch-add workflow
scripts/audit-prune-candidates.mjs Read-only prune review audit
scripts/validate-data.mjs Dataset validation
docs/data-schema.md Recommended data schema
docs/domain-readiness.md Domain migration notes
docs/launch-checklist.md Launch and move checklist
docs/seo-geo.md SEO/GEO metadata and AI crawler notes
docs/supabase-auth-collections.md Account, Watchlist, and Collections backend notes

Domain

UND-RDR is live at:

https://undrdr.com

The project previously lived under akaKika.com/undrdr. Keep legacy redirects alive while search, social previews, and external links settle.

SEO and GEO

UND-RDR exposes human and AI-readable discovery surfaces:

  • index.html includes canonical metadata, Open Graph/Twitter cards, WebSite/WebApplication/Dataset/FAQ JSON-LD, and links to AI summary files.
  • public/llms.txt gives answer engines a direct summary, dataset snapshot, categories, FAQ, and citation wording.
  • public/ai-summary.json provides a structured machine-readable summary of the entity, dataset, categories, features, and trust signals.
  • public/sitemap.xml points to the site, AI summary files, and public data endpoints.
  • src/main.tsx loads Google Analytics only when VITE_GA_MEASUREMENT_ID is configured.

Tech Stack

  • React
  • TypeScript
  • Vite
  • Pixi.js
  • Vercel
  • Supabase Auth and Postgres
  • GitHub Actions

Product Direction

UND-RDR should feel like a curated discovery system: clean, fast, editorial, data-first, and useful. It should help people move from one interesting GitHub project to the next without overwhelming them.