Skip to content

nocoo/xray

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

483 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

X-Ray Logo

X-Ray

Twitter/X ๅ†…ๅฎน็›‘ๆŽงไธŽๆดžๅฏŸ็ณป็ปŸ
ๅฎžๆ—ถ่ฟฝ่ธช ยท ๆทฑๅบฆๅˆ†ๆž ยท ๆ•ฐๆฎ้ฉฑๅŠจ

vinext TypeScript SQLite License

X-Ray Preview


โœจ ๅŠŸ่ƒฝ็‰น็‚น

  • ๐Ÿ“‹ 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 ่กŒ็บงๅฎ‰ๅ…จ้š”็ฆป

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

1๏ธโƒฃ ๅฎ‰่ฃ…ไพ่ต–

# ้œ€่ฆๅ…ˆๅฎ‰่ฃ… Bun: https://bun.sh
bun install

2๏ธโƒฃ ้…็ฝฎ็Žฏๅขƒๅ˜้‡

# ๅคๅˆถ็คบไพ‹้…็ฝฎๆ–‡ไปถ
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 ไธญ่ฎพ็ฝฎไฝœไธบ้ป˜่ฎคๅ€ผ

3๏ธโƒฃ ๅˆๅง‹ๅŒ–ๆ•ฐๆฎๅบ“

# ๅˆ›ๅปบๆ•ฐๆฎๅบ“ๅนถๅบ”็”จ schema
bun run db:push

4๏ธโƒฃ ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ

bun 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

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

้กน็›ฎๆ”ฏๆŒ Railway ไธ€้”ฎ้ƒจ็ฝฒ๏ผŒไฝฟ็”จ Dockerfile builderใ€‚ๆ•ฐๆฎๅบ“ๆ–‡ไปถๆŒ‚่ฝฝๅˆฐ Volume ไปฅๆŒไน…ๅŒ–๏ผš

  • ่ฎพ็ฝฎ XRAY_DATA_DIR ๆŒ‡ๅ‘ Volume ๆŒ‚่ฝฝ่ทฏๅพ„๏ผˆๅฆ‚ /data๏ผ‰
  • HOSTNAME=0.0.0.0 ๅทฒๅœจ Dockerfile ไธญๅ†…็ฝฎ

๐Ÿ™ ้ธฃ่ฐข

  • TweAPI โ€” ๆœฌ้กน็›ฎ็š„ Twitter/X ๆ•ฐๆฎๅ…จ้ƒจ้€š่ฟ‡ TweAPI ่Žทๅ–ใ€‚ๆฏซ็ง’็บงๅฎžๆ—ถๆŽจๆ–‡ API๏ผŒๆ— ้œ€ Twitter ๅผ€ๅ‘่€…่ฎค่ฏ๏ผŒๆŒ‰้‡ไป˜่ดน๏ผŒๅผ€ๅ‘่€…ๅ‹ๅฅฝใ€‚ๆ„Ÿ่ฐขไฝœ่€… @PennyJoly ๆไพ›ๅฆ‚ๆญคไผ˜็ง€็š„ๆœๅŠกใ€‚

๐Ÿ“„ License

MIT ยฉ 2026

About

๐Ÿฆ‹ Personal Twitter/X analytics dashboard with tweet exploration, user insights, and AI-powered reporting

Resources

Stars

Watchers

Forks

Contributors

Languages