A news and trend aggregator designed to help you stay informed without the endless scrolling. Subscribe to topics you care about and get a curated feed of recent content from across the web.
- Topic-based subscriptions - Choose what matters to you
- Aggregated feed - Content from multiple sources in one place
- Type-safe API - Full TypeScript type safety between frontend and backend
- Modular ingestion - Easily add new content sources
- Automatic updates - Hourly cron job keeps your feed fresh
- Clean, minimal design - Focus on content, not distractions
- Frontend: React, Vite, TailwindCSS, React Query
- Backend: Node.js, Express, Prisma, PostgreSQL
- Shared: ts-rest for type-safe API contracts
- Ingestion: Modular fetcher system (Reddit, more coming soon)
- Node.js 18+
- PostgreSQL database
- npm or pnpm
- Install dependencies
# Root packages
npm install
# Shared package
cd shared && npm install && npm run build
# Backend
cd ../backend && npm install
# Frontend
cd ../frontend && npm install- Configure environment
Create .env in backend/:
DATABASE_URL="postgresql://user:password@localhost:5432/pulse"
PORT=4000
NODE_ENV=development- Database setup
cd backend
npx prisma migrate dev
npx prisma db seed- Run the app
# Backend (from backend/)
npm run dev
# Frontend (from frontend/)
npm run dev
# Cron job (optional, from backend/)
npm run cronVisit http://localhost:5173 for the frontend and http://localhost:4000 for the API.
pulse/
├── frontend/ # React application
├── backend/ # Express API server
├── shared/ # Shared TypeScript types and API contracts
└── README.md
See individual README files in each directory for more details.
- Backend runs on
http://localhost:4000 - Frontend runs on
http://localhost:5173 - Hot reload enabled for both
MIT