TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Laterlist sorts your whole YouTube Watch Later backlog onto five shelves in seconds, so you can finally clear it.
ProductivityJavaScript · CSSGitHub @Hypic01OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Sort your YouTube Watch Later graveyard. AI files every saved video into five honest rows. Freemium beta.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
The multi-user, freemium version of watch-later-librarian:
connect your own YouTube Watch Later → AI sorts your backlog into five rows →
you clean it up. First 100 videos free; Pro subscription sorts up to 10,000.
The original localhost app stays untouched as Joon's personal daily driver.
This repo is the public product. Design spec: docs/superpowers/specs/.
npm install
DEV_FAKE_AUTH=1 FAKE_LLM=1 npm start # http://localhost:4400Read the full README ↗Joon's private, single-user tool: connect his YouTube Watch Later, let AI sort the backlog into five rows, then clean it up.
The original localhost app stays untouched as Joon's personal daily driver.
Design spec: docs/superpowers/specs/.
npm install
DEV_FAKE_AUTH=1 FAKE_LLM=1 npm start # http://localhost:4400
Dev mode uses an embedded PGlite database (./dev-pgdata), fake sign-in
(any email), and a deterministic fake classifier. The whole product flow works
end to end without Supabase or Anthropic credentials.
npm test # vitest — DB tests run on PGlite (real Postgres in WASM)
server/ — Express API + in-process classification worker.
index.js is the composition root; everything is factory-injected.
db.js over pg.Pool (Supabase) or PGlite (tests/dev) via one query() interfaceauth.js verifies Supabase JWTs (JWKS or legacy HS256), JIT-provisions usersjev.js — default sorting engine: Jev (TypeSafe) via OpenRouter's decisions
API, one metadata-only request per video in a parallel pool, no batching neededclassify.js + anthropic.js — the shared sorting rules, plus the Haiku
fallback (CLASSIFIER=haiku): structured outputs, Batches API over 500 videosworker.js — claims jobs (FOR UPDATE SKIP LOCKED), chunked processing,
crash re-adoption, budget kill switchbackground.js — on Vercel, sorting runs after the response (waitUntil)
and hands off to a fresh invocation via /api/cron/advance, so a sort keeps
going with the tab closed. Needs CRON_SECRET and APP_URL (the production
domain) set; polls only restart a job whose run diedcollector/ — the browser-side Watch Later collector (scroll + Polymer .data
harvest + DOM pruning; validated on a real 2,796-video playlist at 100% of
available items). Served fresh at GET /collector.js for the console snippet;
bundled into the future MV3 extension (Chrome forbids remote code).web/ — Vite multi-page: sign-in landing at /, React app at /app.Live at https://watch-later-web.vercel.app (Vercel project watch-later-web,
Supabase project fjykuzbwhrpzpiqxzjeh, schema applied). The private deployment
requires owner access and the existing service credentials:
Database password (unblocks the whole API): Supabase dashboard →
project watch-later-web → Settings → Database → Reset database password. Then:
printf 'postgresql://postgres.fjykuzbwhrpzpiqxzjeh:<PASSWORD>@aws-0-us-west-1.pooler.supabase.com:6543/postgres' \
| vercel env add DATABASE_URL production
vercel deploy --prod --yes
Google sign-in: Google Cloud Console → APIs & Services → Credentials →
Create OAuth client ID (Web application) with redirect URI
https://fjykuzbwhrpzpiqxzjeh.supabase.co/auth/v1/callback. Paste the client
ID + secret into Supabase → Authentication → Providers → Google. In Supabase →
Authentication → URL Configuration set Site URL https://watch-later-web.vercel.app
and add https://watch-later-web.vercel.app/app as a redirect URL.
Sorting engine: create a key at openrouter.ai (add credits), then:
printf 'sk-or-v1-...' | vercel env add OPENROUTER_API_KEY production
vercel deploy --prod --yes
ANTHROPIC_API_KEY stays for summaries, and sorting falls back to Haiku
if the OpenRouter key is missing. CLASSIFIER=haiku forces the fallback.
Set OWNER_EMAILS to Joon's sign-in email (comma-separated if needed). It falls
back to ADMIN_EMAILS when unset. If both are empty in production, every sign-in
is refused. LIBRARY_CAP is the safety limit for stored videos, default 25,000.
https://<project>.supabase.co/auth/v1/callback).
Grab the URL, anon key, and the pooled DATABASE_URL..env.example (including VITE_SUPABASE_URL + VITE_SUPABASE_ANON_KEY,
which bake into the frontend at build time). railway.json handles
build/migrate/start.Jev, metadata-only, one request per video: ≈ $0.04 per 1,000 videos (measured
2026-09-30). (Haiku fallback: ≈ $0.40–0.77 per 1,000, half that via Batches.) BUDGET_USD
kill switch caps total spend; admins get /api/admin/stats.