Twitter/X ๅ
ๅฎน็ๆงไธๆดๅฏ็ณป็ป
ๅฎๆถ่ฟฝ่ธช ยท ๆทฑๅบฆๅๆ ยท ๆฐๆฎ้ฉฑๅจ
- ๐ Watchlist ่งๅฏๅๅ โ ๅๅปบๅคไธช่งๅฏๅๅ๏ผ่ชๅจๆๅๆๅๆจๆ๏ผSSE ๅฎๆถๆจ้่ฟๅบฆ๏ผๆฏๆ่ชๅจ็ฟป่ฏไธ AI ๆดๅฏ
- ๐ฅ Groups ๅ็ป็ฎก็ โ ่ชๅฎไนๅ็ปใๆน้ๅฏผๅ
ฅ๏ผ
following.js/followers.js๏ผใๆน้็ผ่พไธๅ ้คใๆดป่ทๅบฆ่ฏไผฐ - ๐ก ๆจๆๆข็ดข โ ๅ จ็ฝๆจๆๆ็ดข๏ผ่ฏฆๆ ไธๅๅค้พ๏ผ็ปไธๆไฝๆ ๏ผๆๅผ / ็ฟป่ฏ / ไฟๅญๅฐ zhe.to๏ผ
- ๐ค ็จๆทๅๆ โ ็จๆท็ปๅใๆถ้ด็บฟใ้ซๅ ๆจๆใๅ ณๆณจๅ ณ็ณป๏ผFollowers / Following / Affiliates๏ผ
- ๐ ไธชไบบๆฐๆฎ โ ่ดฆๅทๆๆ ใ่ถๅฟๅพ่กจใไนฆ็ญพไธ็น่ต๏ผMasonry ็ๅธๆตๅธๅฑ๏ผ
- ๐ฌ ็งไฟกๆฅ็ โ ๆถไปถ็ฎฑๆต่งไธๅฏน่ฏ็บฟ็จ
- ๐ Lists ๅ่กจ โ ๆต่ง Twitter Lists
- ๐ค AI ็ฟป่ฏ โ ไฟก่พพ้ ้ฃๆ ผไธญๆ็ฟป่ฏ + ้่ฏ๏ผๆฏๆๅๆก็ฟป่ฏไธๆน้่ชๅจ็ฟป่ฏ
- โ๏ธ AI ่ฎพ็ฝฎ โ ๅค AI ๆไพๅ้ ็ฝฎ๏ผOpenAI / Anthropic / Google / GLM / DeepSeek / Grok / Ollama๏ผ
- ๐ zhe.to ้ๆ โ ไธ้ฎไฟๅญๆจๆๅฐ zhe.to ไนฆ็ญพๆๅก
- ๐ Webhooks โ ็ๆ Webhook Key๏ผๆฏๆๅค้จ็ณป็ป้่ฟ API ่ฎฟ้ฎ Twitter ๆฐๆฎ
- ๐ Usage ็จ้็ป่ฎก โ API ่ฐ็จ้่ฟฝ่ธชไธ็ป่ฎก้ขๆฟ
- ๐ ้็งไผๅ โ ๆฐๆฎๅฎๅ จๅญๅจๅจๆฌๅฐ SQLite๏ผGoogle OAuth ่ฎค่ฏ๏ผScopedDB ่ก็บงๅฎๅ จ้็ฆป
# ้่ฆๅ
ๅฎ่ฃ
Bun: https://bun.sh
bun install# ๅคๅถ็คบไพ้
็ฝฎๆไปถ
cp .env.example .env็ผ่พ .env ๆไปถ๏ผ้
็ฝฎไปฅไธๅ
ๅฎน๏ผ
# TweAPI API Key (Twitter ๆฐๆฎๆบ, ไป https://tweapi.io ่ทๅ)
TWEAPI_API_KEY=your-tweapi-key
# Google OAuth ้
็ฝฎ (ไป Google Cloud Console ่ทๅ)
# https://console.cloud.google.com/apis/credentials
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-your-client-secret
# NextAuth ๅฏ้ฅ (็ๆๅฝไปค: openssl rand -base64 32)
NEXTAUTH_SECRET=your-generated-secret-here
# ๅ
่ฎธ็ปๅฝ็้ฎ็ฎฑๅ่กจ (้ๅทๅ้)
ALLOWED_EMAILS=your-email@gmail.com๐ก ๆ็คบ: Google OAuth ๅ่ฐๅฐๅ่ฎพ็ฝฎไธบ
http://localhost:7027/api/auth/callback/google๐ก ๆ็คบ:
TWEAPI_API_KEYไนๅฏไปฅๅจ็ปๅฝๅ้่ฟ Settings ้กต้ข้ ็ฝฎ๏ผไฝๆจ่ๅจ.envไธญ่ฎพ็ฝฎไฝไธบ้ป่ฎคๅผ
# ๅๅปบๆฐๆฎๅบๅนถๅบ็จ schema
bun run db:pushbun devๆๅผๆต่งๅจ่ฎฟ้ฎ ๐ http://localhost:7027
x-ray/
โโโ ๐ src/
โ โโโ auth.ts # NextAuth ้
็ฝฎ (Google OAuth + JWT)
โ โโโ proxy.ts # ไธญ้ดไปถ (่ฎค่ฏ + ไปฃ็)
โ โโโ ๐ app/
โ โ โโโ ๐ api/ # API ่ทฏ็ฑ (session auth + webhook auth)
โ โ โ โโโ ๐ watchlists/ # ่งๅฏๅๅ CRUD + SSE ๆๅ
โ โ โ โโโ ๐ groups/ # ๅ็ป็ฎก็
โ โ โ โโโ ๐ twitter/ # Twitter ๆฐๆฎไปฃ็ (webhook auth)
โ โ โ โโโ ๐ explore/ # ๆจๆๆ็ดข (session auth)
โ โ โ โโโ ๐ translate/ # AI ็ฟป่ฏ
โ โ โ โโโ ๐ profiles/ # Twitter ่ตๆ็ผๅญ
โ โ โ โโโ ๐ tags/ # ๆ ็ญพ็ฎก็
โ โ โ โโโ ๐ integrations/ # zhe.to ้ๆ
โ โ โ โโโ ... # credentials, credits, media, settings, usage, webhooks
โ โ โโโ ๐ (dashboard)/ # ่ฎค่ฏ้กต้ข (ๅ
ฑไบซ AppShell ๅธๅฑ)
โ โ โ โโโ page.tsx # Dashboard ้ฆ้กต
โ โ โ โโโ ๐ watchlist/ # ่งๅฏๅๅ (ๅ่กจ/่ฏฆๆ
/ๆฅๅฟ)
โ โ โ โโโ ๐ groups/ # ๅ็ป็ฎก็
โ โ โ โโโ ๐ tweets/ # ๆจๆๆข็ดข
โ โ โ โโโ ๐ users/ # ็จๆทๅๆ
โ โ โ โโโ ๐ bookmarks/ # ไนฆ็ญพ (Masonry ๅธๅฑ)
โ โ โ โโโ ๐ likes/ # ็น่ต (Masonry ๅธๅฑ)
โ โ โ โโโ ๐ lists/ # Twitter Lists
โ โ โ โโโ ๐ messages/ # ็งไฟก
โ โ โ โโโ ๐ analytics/ # ไธชไบบๅๆ
โ โ โ โโโ ๐ usage/ # API ็จ้็ป่ฎก
โ โ โ โโโ ๐ webhooks/ # Webhook ็ฎก็
โ โ โ โโโ ๐ settings/ # ่ฎพ็ฝฎ
โ โ โ โโโ ๐ ai-settings/ # AI ๆไพๅ้
็ฝฎ
โ โ โ โโโ ๐ integrations/ # ็ฌฌไธๆน้ๆ (zhe.to)
โ โ โ โโโ layout.tsx # ๅ
ฑไบซๅธๅฑ + useBreadcrumbs
โ โ โโโ ๐ login/ # ็ปๅฝ้กต
โ โโโ ๐ components/
โ โ โโโ ๐ layout/ # ๅธๅฑ็ปไปถ (AppShell, Sidebar, Breadcrumbs)
โ โ โโโ ๐ twitter/ # Twitter ไธๅก็ปไปถ (TweetCard, UserCard)
โ โ โโโ ๐ ui/ # shadcn/ui + MasonryGrid
โ โโโ ๐ hooks/ # useFetch, useSearch, useMutation, useColumns, useMobile
โ โโโ ๐ services/ # AI ็ฟป่ฏๆๅก
โ โโโ ๐ db/
โ โ โโโ schema.ts # Drizzle ORM schema (16 tables)
โ โ โโโ scoped.ts # ScopedDB โ ๆ็จๆท้็ฆป็ CRUD (่ก็บงๅฎๅ
จ)
โ โ โโโ index.ts # ่ฟๆฅ็ฎก็ (Bun/Node ๅ้ฉฑๅจ)
โ โโโ ๐ lib/
โ โ โโโ auth-adapter.ts # NextAuth ่ชๅฎไน SQLite adapter
โ โ โโโ crypto.ts # ๅ ๅฏๅทฅๅ
ท (Webhook Key)
โ โ โโโ ๐ twitter/ # TweAPI Provider ๅฑ (ITwitterProvider ๆฅๅฃ)
โ โ โโโ ... # api-helpers, utils, palette, tag-color, version
โ โโโ ๐ __tests__/ # ๅๅ
ๆต่ฏ + API E2E ๆต่ฏ
โโโ ๐ agent/ # AI Agent ๅทฅๅ
ท (ๅๆ/ๆๅ/็ ็ฉถ/ๅทฅไฝๆต)
โโโ ๐ e2e/ # Playwright ๆต่งๅจ E2E ๆต่ฏ
โโโ ๐ tests/ # Agent/่ๆฌ้ๆๆต่ฏ
โโโ ๐ scripts/ # CLI ๅทฅๅ
ท่ๆฌ
โโโ ๐ shared/ # ่ทจๅฑๅ
ฑไบซ็ฑปๅๅฎไน
โโโ ๐ docs/ # ่ฏฆ็ปๆๆกฃ (ๆถๆ/ๆต่ฏ/้จ็ฝฒ/API)
โโโ ๐ database/ # SQLite ๆฐๆฎๅบๆไปถ (gitignored)
โโโ ๐ drizzle/ # Drizzle ๆฐๆฎๅบ่ฟ็งปๆไปถ
โโโ .env.example # ็ฏๅขๅ้็คบไพ
โโโ Dockerfile # Docker ๅฎนๅจๅ (ๅค้ถๆฎตๆๅปบ)
โโโ package.json # ็ๆฌ & ไพ่ต (ๅฏไธ็ๆฌๆบ)
| ็ปไปถ | ้ๅ |
|---|---|
| โก Runtime | Bun |
| ๐ฅ๏ธ Framework | vinext (Vite + Next.js RSC) |
| ๐ Language | TypeScript (strict mode) |
| ๐๏ธ Database | SQLite + Drizzle ORM |
| ๐ Auth | NextAuth.js (Google OAuth + custom SQLite adapter) |
| ๐จ UI | Tailwind CSS + shadcn/ui |
| ๐ API | Next.js API Routes (session auth + webhook key auth) |
| ๐ Charts | Recharts |
| ๅฝไปค | ่ฏดๆ |
|---|---|
bun dev |
ๅฏๅจๅผๅๆๅกๅจ (็ซฏๅฃ 7027) |
bun run build |
็ไบงๆๅปบ |
bun start |
ๅฏๅจ็ไบงๆๅกๅจ |
bun test |
่ฟ่กๅๅ ๆต่ฏ |
bun run test:coverage |
่ฟ่กๆต่ฏๅนถ็ๆ่ฆ็็ๆฅๅ |
bun run test:e2e:browser |
่ฟ่ก Playwright ๆต่งๅจ E2E ๆต่ฏ |
bun run lint |
ESLint ๆฃๆฅ |
bun run db:push |
ๆจ้ schema ๅฐๆฐๆฎๅบ |
bun run db:studio |
ๆๅผ Drizzle Studio |
bun run db:generate |
็ๆๆฐๆฎๅบ่ฟ็งปๆไปถ |
bun run db:migrate |
ๆง่กๆฐๆฎๅบ่ฟ็งป |
๐ ่ฏฆ็ปๆๆกฃ: ๆดๅคๅ ณไบๆถๆใๆต่ฏใ้จ็ฝฒๅ API ็ๆๆกฃ่ฏทๅ้
docs/็ฎๅฝ
docker build -t xray .
docker run -p 7027:7027 \
-e TWEAPI_API_KEY=your-key \
-e GOOGLE_CLIENT_ID=your-id \
-e GOOGLE_CLIENT_SECRET=your-secret \
-e NEXTAUTH_SECRET=your-secret \
-e ALLOWED_EMAILS=you@example.com \
-e XRAY_DATA_DIR=/data \
-v xray-data:/data \
xray้กน็ฎๆฏๆ Railway ไธ้ฎ้จ็ฝฒ๏ผไฝฟ็จ Dockerfile builderใๆฐๆฎๅบๆไปถๆ่ฝฝๅฐ Volume ไปฅๆไน ๅ๏ผ
- ่ฎพ็ฝฎ
XRAY_DATA_DIRๆๅ Volume ๆ่ฝฝ่ทฏๅพ๏ผๅฆ/data๏ผ HOSTNAME=0.0.0.0ๅทฒๅจ Dockerfile ไธญๅ ็ฝฎ
- TweAPI โ ๆฌ้กน็ฎ็ Twitter/X ๆฐๆฎๅ จ้จ้่ฟ TweAPI ่ทๅใๆฏซ็ง็บงๅฎๆถๆจๆ API๏ผๆ ้ Twitter ๅผๅ่ ่ฎค่ฏ๏ผๆ้ไป่ดน๏ผๅผๅ่ ๅๅฅฝใๆ่ฐขไฝ่ @PennyJoly ๆไพๅฆๆญคไผ็ง็ๆๅกใ
MIT ยฉ 2026

