[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80453":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":8,"language":10,"languages":8,"totalLinesOfCode":8,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":8,"rankLanguage":8,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":8,"pushedAt":8,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":15,"starSnapshotCount":15,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},80453,"opentrends","nexmoe\u002Fopentrends","nexmoe",null,"https:\u002F\u002Fopentrends.io","TypeScript",58,8,53,1,0,3,5,41.86,"MIT License",false,"main",true,[],"2026-06-12 04:01:28","# OpenTrends\n\nOpenTrends is an open-source AI trend-reading app for following first-party\ninformation across technology, AI, product, finance, crypto, Chinese web\nplatforms, and developer communities.\n\nIt is designed to track hundreds of primary sources, translate them into the\nreader's native language, and quickly summarize what changed so you can read\nglobal first-hand information without switching context across sites and\nlanguages.\n\n## Features\n\n- Curated topic pages designed for hundreds of first-party and official sources\n- RSS, RSSHub, Hacker News, GitHub Trending, Reddit, Product Hunt, Zhihu, Juejin,\n  NewsNow, Kickstarter, Crowd Supply, and Qwen Research adapters\n- AI translation for reading source material in your native language\n- Fast AI summaries that condense noisy source updates into a readable brief\n- Cross-language topic pages for following global information flows without\n  losing the original source context\n- Source status endpoints and per-source refresh behavior\n- Hot trend page caching through the runtime cache\u002FKV layer plus in-memory\n  request caching\n- Docker Compose deployment for Postgres, RSSHub, API, migration, and web\n- Void and Cloudflare\u002FAlchemy deployment configs\n\n## Repository Layout\n\n```text\nopentrends\u002F\n├── apps\u002F\n│   ├── server\u002F      # Hono API, trend adapters, source refresh, summaries\n│   ├── web\u002F         # TanStack Start frontend\n│   └── fumadocs\u002F    # Documentation app experiments\n├── packages\u002F\n│   ├── api\u002F         # oRPC router layer\n│   ├── auth\u002F        # Better Auth config\n│   ├── config\u002F      # Shared TypeScript config\n│   ├── db\u002F          # Drizzle schema, migrations, dev DB helpers\n│   ├── env\u002F         # Shared env validation\n│   ├── infra\u002F       # Cloudflare\u002FAlchemy deployment entrypoint\n│   └── ui\u002F          # Shared shadcn\u002Fui components and styles\n└── docs\u002F            # Design and implementation notes\n```\n\n## Requirements\n\n- Bun 1.3.x\n- Docker, for the local Postgres\u002FRSSHub stack\n- PostgreSQL, if you do not use Docker Compose\n\n## Local Development\n\nInstall dependencies:\n\n```bash\nbun install\n```\n\nCreate local env files from the examples:\n\n```bash\ncp apps\u002Fserver\u002F.env.example apps\u002Fserver\u002F.env\ncp apps\u002Fweb\u002F.env.example apps\u002Fweb\u002F.env\n```\n\nStart Postgres and run the app:\n\n```bash\nbun run db:start\nbun run dev\n```\n\nThe API runs on `http:\u002F\u002Flocalhost:3000`.\nThe web app runs on `http:\u002F\u002Flocalhost:3001`.\n\n## Environment\n\nServer env is validated in `apps\u002Fserver\u002Fenv.ts` and `packages\u002Fenv\u002Fsrc\u002Fserver.ts`.\nAt minimum, configure:\n\n- `DATABASE_URL`\n- `BETTER_AUTH_SECRET`\n- `BETTER_AUTH_URL`\n- `CORS_ORIGIN`\n\nOptional trend and summary settings include:\n\n- `RSSHUB_BASE_URLS`\n- `LLM_BASE_URL`\n- `LLM_API_KEY`\n- `LLM_MODEL`\n- `TRENDS_REFRESH_SCHEDULER`\n\nWeb env is validated in `apps\u002Fweb\u002Fenv.ts`. Configure:\n\n- `VITE_SERVER_URL`\n- `VITE_SITE_URL`\n\n## Caching\n\nTrend pages use a short in-memory cache and the shared hot cache\u002FKV abstraction\nin `apps\u002Fserver\u002Fsrc\u002Ftrends\u002Fcache\u002Fhot-cache.ts`. Source snapshots are stored\nthrough the source cache layer.\n\nThere is no checked-in bootstrap data cache. Runtime data should be generated\nby refresh jobs or requests and stored through the configured cache\u002Fstorage\nbackend.\n\n## Useful Commands\n\n```bash\nbun run dev            # Start DB and all apps\nbun run dev:web        # Start only the web app\nbun run dev:server     # Start only the API\nbun run db:start       # Start local database services\nbun run db:migrate     # Apply Drizzle migrations\nbun run db:generate    # Generate a Drizzle migration\nbun run check-types    # Typecheck workspaces\nbun test               # Run tests\nbun run check          # Run Ultracite\u002FBiome checks\nbun run build          # Build workspaces\n```\n\n## Docker Compose\n\nCopy the example Docker environment file and fill in `BETTER_AUTH_SECRET`:\n\n```bash\ncp .env.docker.example .env\nperl -0pi -e \"s|BETTER_AUTH_SECRET=|BETTER_AUTH_SECRET=$(openssl rand -base64 32)|\" .env\n```\n\nFor a public deployment, also replace the localhost values for\n`BETTER_AUTH_URL`, `CORS_ORIGIN`, `VITE_SERVER_URL`, and `VITE_SITE_URL`.\n\nStart the full stack:\n\n```bash\ndocker compose up -d --build\n```\n\nThis starts Postgres, RSSHub, a migration job, the API server, and the web app.\n\n## GitHub Container Registry Images\n\nThe repository includes a GitHub Actions workflow that builds both Docker images\nand publishes them to GitHub Container Registry:\n\n- `ghcr.io\u002Fnexmoe\u002Fopentrends-server`\n- `ghcr.io\u002Fnexmoe\u002Fopentrends-web`\n\nThe workflow runs on pull requests, pushes to `main`, version tags such as\n`v1.0.0`, and manual dispatch. Pull requests build the images without pushing.\nPushes to `main` publish `main`, `latest`, and `sha-\u003Ccommit>` tags. Version tags\npublish the matching tag.\n\nThe published web image is built with these defaults:\n\n- `VITE_SERVER_URL=http:\u002F\u002Flocalhost:3000`\n- `VITE_SITE_URL=http:\u002F\u002Flocalhost:3001`\n\nSet repository variables named `VITE_SERVER_URL` and `VITE_SITE_URL` before\nrunning the workflow if the image should be built for a public deployment URL.\n\nPull the published images:\n\n```bash\ndocker pull ghcr.io\u002Fnexmoe\u002Fopentrends-server:latest\ndocker pull ghcr.io\u002Fnexmoe\u002Fopentrends-web:latest\n```\n\nTo use the published images with Compose, override the `server`, `migrate`, and\n`web` image names in a separate file:\n\n```yaml\n# docker-compose.ghcr.yml\nservices:\n  migrate:\n    image: ghcr.io\u002Fnexmoe\u002Fopentrends-server:latest\n    build: !reset null\n\n  server:\n    image: ghcr.io\u002Fnexmoe\u002Fopentrends-server:latest\n    build: !reset null\n\n  web:\n    image: ghcr.io\u002Fnexmoe\u002Fopentrends-web:latest\n    build: !reset null\n```\n\nThen start the stack with the existing Compose file plus the override:\n\n```bash\ndocker compose -f docker-compose.yml -f docker-compose.ghcr.yml up -d\n```\n\nThis keeps the checked-in Postgres, RSSHub, migration, API, and web service\nconfiguration while replacing the locally built app images with GHCR images. Set\nthe same environment variables documented in `.env.docker.example`.\n\n## Deployment\n\nVoid deployment configs live in `apps\u002Fserver\u002Fvoid.json` and `apps\u002Fweb\u002Fvoid.json`.\nDeploy the API first, then deploy the web app with `VITE_SERVER_URL` pointing at\nthe API origin.\n\nCloudflare\u002FAlchemy deployment lives in `packages\u002Finfra\u002Falchemy.run.ts` and uses\nsecrets from the local environment or Alchemy secret env.\n\n## License\n\nMIT\n","OpenTrends 是一个开源的AI趋势阅读应用，旨在帮助用户跟踪来自技术、人工智能、产品、金融、加密货币、中文网络平台以及开发者社区的第一手信息。其核心功能包括从数百个官方和第一方来源精选主题页面、支持多种数据源适配器（如RSS、Hacker News、GitHub Trending等）、提供AI翻译与快速摘要生成服务，让用户能够无障碍地获取全球资讯。该项目使用TypeScript开发，并采用Docker Compose简化部署流程，适合需要跨语言、跨平台关注最新动态的研究人员和技术爱好者使用。",2,"2026-06-11 04:00:50","CREATED_QUERY"]