Open-source alternative to YC-controller HN, featuring curated tech news, discussions, and community-driven content.
Refetch was born from a simple yet powerful idea: create a modern, open-source alternative to Hacker News that combines the best of community-driven curation with intelligent AI-powered content discovery. Free from YC-control, open and transparent, doesn't favor anyone.
Auto-updated with the highest-scoring community content
π₯ Unraveling the Mystery of 'Leopard Spots' on Mars: A New Hint of Life? π Votes: 0 | β° 7 minutes ago | π Original
π₯ Condor Technology's 'Cuzco' RISC-V CPU to Revolutionize Datacenters π Votes: 0 | β° 14 hours ago | π Original
π₯ AOMedia's Next-Gen Video Codec AV2 Set for Year-End Launch π Votes: 0 | β° 13 hours ago | π Original
β Active NPM Supply Chain Attack: Tinycolor and 40 Packages Compromised π Votes: 0 | β° 7 hours ago | π Original
β In-Depth Review: macOS 26 Tahoe π Votes: 0 | β° 14 hours ago | π Original
Last updated: 2025-09-16T08:00:21.416Z
- π€ AI-Powered Discovery: Our intelligent scout functions automatically discover high-quality tech content from leading sources so you can be lazy and enjoy
- π― Quality Curation: Advanced algorithms analyze and rank content based on relevance, quality, and community value
- π Global Reach: Multilingual support with AI-powered translations in 12+ languages
- π Privacy-First: Built on Appwrite's secure, self-hostable backend infrastructure
- π± Modern UX: Modern, responsive interface built with Next.js 15 and Tailwind CSS, the opposite of HN
- π Open Source: 100% open source, community-driven
While Hacker News has been the go-to platform for tech discussions for years, we believe there's room for innovation. Refetch brings:
- Better Content Discovery: AI algorithms that surface the most relevant tech news
- Enhanced User Experience: Modern, mobile-first design that works everywhere
- Community Empowerment: Open source codebase that anyone can contribute to
- Transparent Algorithms: Clear, documented ranking systems you can understand and improve
Refetch is built with a modern, scalable architecture that prioritizes performance, maintainability, and developer experience.
- Next.js 15: React framework with App Router, Server Components, and streaming
- TypeScript: Full type safety across the entire codebase
- Tailwind CSS: Utility-first CSS framework with custom design system
- Appwrite: Complete backend-as-a-service platform
- Databases: Collections for posts, comments, users, and votes
- Authentication: User management with JWT tokens
- Functions: Serverless functions for content processing
- Sites: Next.js hosting with built-in CDN and DDoS protection
- Content Scout: Automatically discovers tech articles from 20+ sources
- Content Enhancement: AI analysis for quality scoring, categorization, and optimization
- Smart Ranking: Multi-factor algorithm considering time, quality, and community engagement
- Multilingual Support: AI-powered translations and language detection
refetch/
βββ app/ # Next.js App Router pages
β βββ (main)/ # Main application routes
β βββ api/ # API endpoints
β βββ auth/ # Authentication flows
β βββ globals.css # Global styles
βββ components/ # Reusable React components
β βββ ui/ # Base UI components (Radix + Tailwind)
β βββ [feature]/ # Feature-specific components
βββ contexts/ # React contexts (auth, theme)
βββ functions/ # Appwrite serverless functions
β βββ scout/ # Content discovery automation
β βββ enhancement/ # AI content analysis
β βββ algorithm/ # Ranking algorithm
β βββ topic-stats/ # Topic ranking (scheduled)
β βββ readme/ # Syncs top posts into GitHub README
βββ hooks/ # Custom React hooks
βββ lib/ # Utility libraries and configurations
βββ extensions/ # Browser extensions
βββ styles/ # Additional styling
app/: Next.js 15 App Router with server and client componentscomponents/ui/: Reusable UI components built on Radix UI primitivesfunctions/: Appwrite serverless functions for backend processinglib/: Core utilities, Appwrite client, and type definitionsextensions/: Chrome extension for seamless Refetch integration
- Node.js 18+
- pnpm (recommended) or npm
- Appwrite instance (self-hosted or cloud)
-
Clone the repository
git clone https://github.com/refetch-io/refetch.git cd refetch -
Install dependencies
pnpm install
-
Set up environment variables
cp env.example .env.local
Edit
.env.localusing Environment variables as a checklist. A starter template also lives inenv.example. -
Run the development server
pnpm dev
-
Open your browser Navigate to http://localhost:3000
Where to set them
- Next.js (local / hosting):
.env.localor.env. OnlyNEXT_PUBLIC_*values are exposed to the browser; keep secrets without that prefix. - Appwrite Functions: set variables in the Console (this repoβs
appwrite:setupcreates functions but does not push env). Define shared keys once as global (project) variables so every function inherits them; use per-function variables only to override or add keys. - Mirror the same values for web vs functions where two names exist (
APPWRITE_ENDPOINTandNEXT_PUBLIC_APPWRITE_ENDPOINT, same for project ID) so nothing drifts.
Table IDs use the legacy name *_COLLECTION_ID but refer to Appwrite Tables table IDs.
Use the same endpoint and project everywhere; some paths read APPWRITE_*, others NEXT_PUBLIC_APPWRITE_*.
| Variable | Description |
|---|---|
APPWRITE_ENDPOINT |
REST API base (e.g. https://cloud.appwrite.io/v1). Used by Functions and the Readme function. |
NEXT_PUBLIC_APPWRITE_ENDPOINT |
Same URL; required for the Next app and several functions. |
APPWRITE_PROJECT_ID |
Project ID (Functions / Readme). |
NEXT_PUBLIC_APPWRITE_PROJECT_ID |
Same ID; required for the Next app and several functions. |
APPWRITE_API_KEY |
Server API key (never NEXT_PUBLIC_*). Needs table access for the site and appropriate scopes per function. |
| Variable | Description |
|---|---|
APPWRITE_DATABASE_ID |
Tables DB database ID. |
APPWRITE_POSTS_COLLECTION_ID |
posts table. |
APPWRITE_COMMENTS_COLLECTION_ID |
comments table. |
APPWRITE_VOTES_COLLECTION_ID |
votes table. |
APPWRITE_DAILY_TOPICS_COLLECTION_ID |
daily_topics table (topic stats). |
APPWRITE_TOPICS_COLLECTION_ID |
topics table (topic stats). |
| Variable | Description |
|---|---|
OPENAI_API_KEY |
Scout and Enhancement. |
OPENAI_MODEL |
OpenAI chat model for Enhancement; set as a global project variable (optional; default gpt-4o-mini). |
Set at project level if you only run Scout, or override on the Scout function.
Actor identity, LLM batching, scraping delays, and per-run limits are constants in functions/scout/index.js (not environment variables).
| Variable | Description |
|---|---|
SCOUT_TARGET_WEBSITES |
Comma-separated site roots to crawl (can be very long). |
Safe to set globally if unused elsewhere.
| Variable | Description |
|---|---|
README_ORIGIN |
Public origin for links in generated README.md (default https://refetch.io). |
README_GITHUB_TOKEN |
PAT with contents: write (or equivalent) to update README.md. |
README_GITHUB_OWNER |
Owner (user or org). |
README_GITHUB_REPO |
Repository name. |
README_GITHUB_BRANCH |
Branch to commit on (default main). |
Bootstrap (scripts/appwrite-setup.mjs): npm run build runs this first (package.json); it uses the same Appwrite connection and data IDs as Β§1β2 to create or update the database, tables, indexes, and function shells (not deployments or function env).
| Function | Groups |
|---|---|
| Scout | 1, 2, 3, 4 |
| Enhancement | 1, 2, 3 (OPENAI_MODEL optional; set globally) |
| Algorithm | 1, 2 (posts only) |
| Topic stats | 1, 2 (incl. daily_topics + topics) |
| Readme | 1, 2 (posts only), 5 |
Next.js app + app/api |
1 (NEXT_PUBLIC_* + APPWRITE_API_KEY), 2 |
Refetch was initially 100% vibe-coded, but we're excited to welcome contributions from humans too!
We believe in the power of community-driven development and welcome all types of contributions:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Test thoroughly
- Submit a pull request
Refetch uses several Appwrite serverless functions for automated content processing:
Automatically discovers high-quality tech content from 20+ sources including TechCrunch, The Verge, Ars Technica, and more.
AI-powered content analysis that generates metadata, quality scores, and multilingual translations.
Sophisticated ranking algorithm that considers time decay, quality metrics, and community engagement.
Scheduled job that aggregates post data into daily_topics and topics tables (see Environment variables).
Commits an auto-generated βtop postsβ section into this repositoryβs README.md using the GitHub API.
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ for the Refetch community