An elegant reader application built with Astro + React + Tailwind CSS 4 + Convex.
- Astro 5.0 - Modern web framework with SSR/SSG support
- React 19 - Latest UI library
- TypeScript 5.7 - Type-safe development
- Tailwind CSS 4.0 - Utility-first CSS framework
- Convex - Real-time database and backend services
- Bun - Fast JavaScript runtime
- Playfair Display & Inter - Elegant typography fonts
- π Home - Welcome page displaying reading progress
- π‘ Subscriptions - Manage content sources (GitHub repos, more coming soon)
- π° Feed - View collected articles from your subscriptions
- π Bookmarks - Save and manage favorite articles
- GitHub Integration - Subscribe to repositories to track releases and issues
- Automatic Collection - Hourly cron jobs collect new content
- Feed View - Real-time updates from all subscriptions
- Organization - Categorize and filter collected articles
- π± Mobile-First - Fully responsive design with touch-friendly interface
- π¨ Elegant Typography - Italic serif headings with clean sans-serif body text
- π Monochromatic - Single-tone color scheme for focused reading
- β‘ Performance - Fast loading with Astro SSR and optimized rendering
- Node.js 18+ or Bun
- A Convex account (free tier works)
# Install dependencies
bun install
# Start Convex dev server (in a separate terminal)
bun dev:convex
# Start web application
bun devVisit http://localhost:4321 to view the application.
Create .env.local:
# Deployment used by `npx convex dev`
CONVEX_DEPLOYMENT=anonymous:anonymous-web
CONVEX_URL=http://127.0.0.1:3210
PUBLIC_CONVEX_URL=http://127.0.0.1:3210
CONVEX_SITE_URL=http://127.0.0.1:3211bun buildbun previewreader/
βββ src/
β βββ components/
β β βββ reader/ # Core reader components
β β β βββ Header.tsx # Desktop top navigation
β β β βββ MobileBottomNav.tsx # Mobile bottom navigation
β β β βββ HomePage.tsx # Home page
β β β βββ SubscriptionsPage.tsx # Subscription management
β β β βββ FeedPage.tsx # Article feed
β β β βββ BookmarksPage.tsx # Bookmarks management
β β β βββ ArticleDetailPage.tsx # Article reading
β β β βββ AddSubscriptionModal.tsx # Add subscription modal
β β βββ ui/ # UI base components
β β β βββ button.tsx # Button component
β β β βββ badge.tsx # Badge component
β β βββ ReaderApp.tsx # Main app with routing
β βββ layouts/
β β βββ Layout.astro # Page layout
β βββ lib/
β β βββ convex.tsx # Convex client setup
β βββ pages/
β β βββ index.astro # App entry
β βββ styles/
β βββ global.css # Global styles
βββ convex/ # Backend (Convex)
β βββ schema.ts # Database schema
β βββ subscriptions/
β β βββ queries.ts # Subscription queries
β β βββ mutations.ts # Subscription mutations
β βββ articles/
β β βββ queries.ts # Article queries
β β βββ mutations.ts # Article mutations
β βββ collections/
β β βββ github.ts # GitHub collector
β βββ crons.ts # Cron job logic
β βββ crons.ts # Cron configuration
βββ public/ # Static assets
βββ astro.config.mjs # Astro configuration
βββ tailwind.config.mjs # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
βββ package.json # Project dependencies
- Primary: Black (#000000)
- Grays: #CCCCCC, #888888, #666666, #E0E0E0
- Border: Subtle gray for separation
- Headings: Playfair Display (italic)
- Body: Inter (clean and readable)
- Mobile: Default (< 768px)
- Desktop:
md:breakpoint (β₯ 768px)
bun dev # Start all services (web + convex)
bun dev:web # Start web server only
bun dev:convex # Start Convex dev server only
bun build # Build for production
bun preview # Preview production buildastro check # Astro type check
tsc --noEmit # TypeScript type checkThe app uses state-based routing (not URL-based) managed by ReaderApp.tsx:
Tab: 'home' | 'subscriptions' | 'feed' | 'bookmarks'View: Tab | 'article-detail'
Database Tables:
subscriptions- Content source subscriptionsarticles- Collected articles from sourcescollectionJobs- Collection job history
API Structure: Functions follow filesystem paths
api.subscriptions.queries.listAllapi.subscriptions.mutations.createapi.articles.queries.listRecent
- GitHub subscription support
- Basic feed view
- Automatic content collection
- Bookmark management
- HackerNews integration
- Product Hunt integration
- WeChat article collection
- Advanced filtering
- Natural language subscription management
- Chat interface for content control
- AI-powered content summarization
- Daily/weekly curated digests
- AI-generated summaries
- Personalized recommendations
See CLAUDE.md for detailed development documentation.
MIT