build. ship. log.
A community feed for builders everywhere — not backed by any fund, not biased toward any ecosystem. Share what you're building, vote on what matters, and follow the work of independent developers, open source contributors, and makers across the globe. Terminal-inspired UI, threaded notes, tag-filtered feeds.
Hacker News has drifted. The front page is increasingly dominated by YC-backed startups, VC announcements, and content that benefits the people who run it. A solo dev shipping something real — a CLI tool, an open source library, a weekend project — rarely gets the same surface area as a Series A launch.
hackerlogs is built on a different premise: the work is what matters, not who funded it. Every builder gets the same feed. No algorithmic boosts, no paid placement, no accelerator thumb on the scale. Just logs from people building things, ranked by the community.
- Logs — post a URL or text, tagged by language / OSS project / domain / type
- Notes — threaded comments with collapsible tree and inline reply
- Voting —
++upvote on logs and notes with optimistic updates - Tag taxonomy — 93 pre-seeded tags across 4 categories (language, opensource, domain, type)
- Keyboard navigation —
j/kmove,oopen,nnew log (Vim-style) - Leaders — daily / weekly / monthly top logs and top builders with 🥇🥈🥉 ranking
- RSS feeds — 6 live endpoints powered by Cloudflare Pages Functions
- Auth — email/password via Supabase Auth, profile at
/~username - Tokyo Night theme — dark, monospace, minimal chrome
- CLI / TUI — full terminal interface, install once and never leave your editor
Install the CLI to browse hackerlogs, post logs, and vote without leaving the terminal.
npm install -g hackerlogs-cliRun with no arguments to enter the full-screen TUI (think lazygit for your build feed):
hackerlogsOr use individual sub-commands:
hackerlogs setup # configure Supabase URL + anon key
hackerlogs login # sign in
hackerlogs feed # browse top feed
hackerlogs post # submit a new log interactively| Key | Action |
|---|---|
j / ↓ |
move down |
k / ↑ |
move up |
o / Enter |
open log detail |
Esc |
close detail / back |
Tab |
cycle tabs (feed → ask → show → leaders) |
s |
toggle sort top ↔ new |
r |
refresh |
[ / ] |
previous / next page |
n |
new log (inline form) |
L |
login (inline form) |
p |
cycle leaders period (day → week → month) |
: |
command mode — type :feed, :ask, :leaders, :post, :q … |
? |
toggle help |
q / Ctrl+C |
quit |
| Command | Description |
|---|---|
hackerlogs setup |
Configure Supabase URL + anon key |
hackerlogs feed |
Browse the feed (--sort top|new, --page <n>) |
hackerlogs ask |
Ask hackerlogs posts |
hackerlogs show |
Show hackerlogs posts |
hackerlogs log <id> |
View a log + threaded notes |
hackerlogs tags |
List all tags by category |
hackerlogs profile <user> |
View a user profile + recent logs |
hackerlogs login |
Log in (email + password) |
hackerlogs logout |
Log out |
hackerlogs post |
Submit a new log interactively (auth required) |
hackerlogs vote <id> |
Toggle ++ upvote (auth required) |
Subscribe to any feed in your reader:
| Feed | URL |
|---|---|
| Top logs | https://hackerlogs.com/rss.xml |
| New logs | https://hackerlogs.com/rss/new.xml |
| Ask | https://hackerlogs.com/rss/ask.xml |
| Show | https://hackerlogs.com/rss/show.xml |
| By tag | https://hackerlogs.com/rss/tag/rust.xml · https://hackerlogs.com/rss/tag/neovim.xml · ... |
| By user | https://hackerlogs.com/~username/rss.xml |
| Layer | Tech |
|---|---|
| Frontend | React 18 + Vite + TypeScript |
| Styles | Tailwind CSS v4 (Tokyo Night) |
| Router | React Router v6 |
| Server state | TanStack Query |
| Auth state | Zustand |
| Database | Supabase (PostgreSQL + RLS) |
| Auth | Supabase Auth |
| RSS | Cloudflare Pages Functions |
| Deploy | Cloudflare Pages |
| CLI / TUI | Node.js + Ink (React for terminals) + Commander.js |
profiles — id, username, xp, bio, created_at
logs — id, title, url, body, user_id, score, note_count, created_at
log_tags — log_id, tag_id
tags — id, name, slug, category, color
notes — id, log_id, parent_id, user_id, body, score, created_at
votes — id, user_id, target_id, target_type, value
Migrations live in supabase/migrations/. Row Level Security is enabled on all tables.
hackerlogs/
├── src/
│ ├── components/
│ │ ├── layout/ # Layout, TopBar, StatusBar, CommandLine
│ │ ├── logs/ # LogList, LogItem
│ │ ├── notes/ # NoteTree, NoteItem
│ │ ├── tags/ # Tag chip ([lang:rust], [oss:neovim])
│ │ └── ui/ # Button, Input, Textarea
│ ├── pages/ # Feed, LogPage, NewLog, Ask, Show, Leaders, Profile, Login, Register
│ ├── hooks/ # useLogs, useNotes, useVote, useTags, useLeaders
│ ├── stores/ # authStore (Zustand)
│ ├── lib/ # supabase.ts, utils.ts
│ └── types/ # Log, Note, Tag, Profile
├── cli/
│ └── src/
│ ├── commands/ # feed, ask, show, log, post, login, logout, profile, vote, tags
│ ├── tui/ # Ink components — TopBar, FeedPane, DetailPane, StatusBar,
│ │ # LeadersPane, LoginForm, NewLogForm, HelpOverlay, CommandLine
│ ├── app.tsx # Root Ink component (TUI entry point)
│ ├── api.ts # Direct Supabase REST + RPC HTTP calls
│ ├── config.ts # ~/.hackerlogs/config.json read/write
│ └── index.ts # CLI entry — TUI if no args, Commander subcommands otherwise
├── functions/ # Cloudflare Pages Functions (RSS feeds)
├── supabase/
│ └── migrations/ # SQL schema + tag seeds
├── public/
└── wrangler.toml
See CONTRIBUTING.md for local setup, CLI usage, and the pull request workflow.
MIT