Skip to content

ajainvivek/hackerlogs

Repository files navigation

// hackerlogs

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.

Discord


Why

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.


Features

  • 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 navigationj/k move, o open, n new 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

CLI

Install the CLI to browse hackerlogs, post logs, and vote without leaving the terminal.

npm install -g hackerlogs-cli

Run with no arguments to enter the full-screen TUI (think lazygit for your build feed):

hackerlogs

Or 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

TUI key bindings

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

All sub-commands

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)

RSS Feeds

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

Stack

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

Database Schema

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.

Project Structure

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

Contributing

See CONTRIBUTING.md for local setup, CLI usage, and the pull request workflow.

License

MIT

About

build. ship. log. a community for builders

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors