mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:21:09 +02:00
|
|
||
|---|---|---|
| .. | ||
| apps | ||
| docker | ||
| packages/browser-extension | ||
| .env.example | ||
| .gitignore | ||
| MigrationPlan-Unified-App.md | ||
| README.md | ||
News Hub
A unified news reading platform combining AI-curated news with personal article saving capabilities.
Architecture
news/
├── apps/
│ ├── mobile/ # React Native/Expo App
│ └── api/ # NestJS Backend
├── packages/
│ ├── database/ # Drizzle ORM Schema
│ ├── shared/ # Shared utilities
│ └── browser-extension/ # Chrome Extension
└── docker/ # PostgreSQL Docker setup
Tech Stack
| Component | Technology |
|---|---|
| Database | PostgreSQL 16 (Docker) |
| ORM | Drizzle |
| Backend | NestJS + Fastify |
| Auth | Custom JWT Auth |
| Mobile | React Native / Expo |
| State | Zustand |
| Styling | NativeWind (Tailwind) |
| Monorepo | pnpm workspaces + Turborepo |
Getting Started
Prerequisites
- Node.js 20+
- pnpm 9+
- Docker Desktop
Setup
# 1. Install dependencies
pnpm install
# 2. Start PostgreSQL
pnpm docker:up
# 3. Push database schema
pnpm db:push
# 4. Start API server
pnpm dev:api
# 5. Start mobile app (in another terminal)
pnpm dev:mobile
Available Scripts
# Development
pnpm dev # Start all services
pnpm dev:api # Start API only
pnpm dev:mobile # Start mobile app only
# Database
pnpm db:push # Push schema to database
pnpm db:generate # Generate migrations
pnpm db:migrate # Run migrations
pnpm db:studio # Open Drizzle Studio
# Docker
pnpm docker:up # Start PostgreSQL
pnpm docker:down # Stop PostgreSQL
pnpm docker:logs # View logs
# Build
pnpm build # Build all packages
Environment Variables
Create a .env file in the root directory:
# Database
DATABASE_URL=postgresql://news:news_dev_password@localhost:5432/news_hub
# API
API_PORT=3000
API_URL=http://localhost:3000
# Better Auth Secret
BETTER_AUTH_SECRET=your-secret-key
# Mobile App
EXPO_PUBLIC_API_URL=http://localhost:3000
Features
News Feed (AI-Generated)
- Feed: Quick news updates with infinite scroll
- Summaries: 4 daily summaries (morning, noon, evening, night)
- In-Depth: Detailed analysis articles
Personal Library (Read Later)
- Save articles from any URL
- Browser extension for one-click saving
- Content extraction with Readability
- Archive and organize articles
API Endpoints
Auth
POST /auth/signup- Create accountPOST /auth/signin- Sign inPOST /auth/signout- Sign outGET /auth/session- Get current session
Articles
GET /articles- Get AI articles (public)GET /articles/:id- Get single articleGET /articles/saved/list- Get saved articles (auth required)POST /articles/:id/archive- Archive articleDELETE /articles/:id- Delete article
Content Extraction
POST /extract/save- Save article from URL (auth required)POST /extract/preview- Preview URL extraction (public)
Categories
GET /categories- Get all categories
Users
GET /users/me- Get current userPATCH /users/me- Update profilePATCH /users/me/onboarding- Complete onboarding
Browser Extension
The browser extension is located in packages/browser-extension/.
Installation (Development)
- Go to
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
packages/browser-extensionfolder
Database Schema
Tables
users- User accounts and preferencesarticles- All articles (AI-generated and user-saved)categories- Article categoriesuser_article_interactions- Reading progress, ratings, bookmarkssessions- Auth sessionsaccounts- Auth providersverifications- Email verification tokens
Development
Adding a new API endpoint
- Create service in
apps/api/src/{module}/{module}.service.ts - Create controller in
apps/api/src/{module}/{module}.controller.ts - Add module to
app.module.ts
Adding a new database table
- Create schema in
packages/database/src/schema/{table}.ts - Export from
packages/database/src/schema/index.ts - Run
pnpm db:pushto update database
License
Private