Skip to content

nocoo/ellie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2,322 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Ellie

Ellie

็ŽฐไปฃๅŒ–่ฎบๅ›็ณป็ปŸ๏ผŒไปŽ็ปๅ…ธ Discuz ๆ•ฐๆฎ่ฟ็งป่€Œๆฅ
Server Components ยท Edge Computing ยท ๅ…จๆ ˆ TypeScript ยท Rust TUI

Next.js Cloudflare Workers Rust Tests License


่ฟ™ๆ˜ฏไป€ไนˆ

Ellie ๆ˜ฏไธ€ไธชไปŽ Discuz ่ฎบๅ›ๅนณๆป‘่ฟ็งปๅˆฐ็ŽฐไปฃๆŠ€ๆœฏๆ ˆ็š„ๅ…จๅŠŸ่ƒฝ็คพๅŒบ็ณป็ปŸใ€‚ๅ‰็ซฏๅŸบไบŽ Next.js App Router (React Server Components)๏ผŒๅŽ็ซฏ่ฟ่กŒๅœจ Cloudflare Workers ่พน็ผ˜็ฝ‘็ปœ๏ผŒๆ•ฐๆฎๅญ˜ๅ‚จไบŽ D1 (SQLite)ใ€‚ๅŒๆ—ถๆไพ› Rust ็ผ–ๅ†™็š„็ปˆ็ซฏ TUI ๅฎขๆˆท็ซฏใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Browser                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚           Next.js (Server Components)               โ”‚
โ”‚   apps/web (forum)  โ”‚  apps/admin (admin console)   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚ forumApi / adminApi
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            Cloudflare Worker (Edge)                  โ”‚
โ”‚         apps/worker โ€” REST API + Cron               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚              โ”‚               โ”‚
   โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
   โ”‚  D1   โ”‚    โ”‚   KV    โ”‚    โ”‚    R2     โ”‚
   โ”‚(SQLite)โ”‚    โ”‚ (Cache) โ”‚    โ”‚ (Assets)  โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅŠŸ่ƒฝ

่ฎบๅ›ๆ ธๅฟƒ

  • ็‰ˆๅ—ไธŽไธป้ข˜ โ€” ๆ ‘ๅฝข็‰ˆๅ—็ป“ๆž„ใ€ไธป้ข˜ๅˆ†็ฑปใ€็ฝฎ้กถ/ๅŠ ็ฒพ/้ซ˜ไบฎ
  • ๅธ–ๅญไธŽๅ›žๅค โ€” ๅฏŒๆ–‡ๆœฌ็ผ–่พ‘ใ€ๆฅผไธญๆฅผ็‚น่ฏ„ใ€้™„ไปถไธŠไผ ใ€@ๆๅŠ
  • ็”จๆˆท็ณป็ปŸ โ€” ๆณจๅ†Œ/็™ปๅฝ•ใ€็”จๆˆท็ป„ใ€็งฏๅˆ†/ๅŒ้’ฑใ€ไธชไบบ่ต„ๆ–™
  • ็ซ™ๅ†…ไฟก โ€” Discuz ้ฃŽๆ ผ็งไฟกๆ”ถๅ‘
  • ๆœ็ดข โ€” ๅ…จๆ–‡ๆœ็ดขไธป้ข˜
  • ็ฒพๅŽๅธ– โ€” ๅคš็บง็ฒพๅŽใ€ๆŒ‰ๅนดไปฝ/็‰ˆๅ—็ญ›้€‰

็คพๅŒบไบ’ๅŠจ

  • ๆฏๆ—ฅ็ญพๅˆฐ โ€” ่ฟž็ปญ็ญพๅˆฐๅฅ–ๅŠฑใ€็ญ‰็บงไฝ“็ณป
  • ไธป้ข˜ๅˆ†็ฑป โ€” ็‰ˆๅ—่‡ชๅฎšไน‰ๅˆ†็ฑปๆ ‡็ญพ๏ผˆๅฏ้€‰ๅ‰็ผ€ๆ˜พ็คบ๏ผ‰
  • ็‰ˆๅ—ๅ…ฌๅ‘Š โ€” ็ฎก็†ๅ‘˜ๅฏ้…็ฝฎ็‰ˆๅ—็บงๅ…ฌๅ‘Š

็ฎก็†ๅŽๅฐ

  • ๅ†…ๅฎนๅฎกๆ ธ โ€” ไธพๆŠฅๅค„็†ใ€ๆ•ๆ„Ÿ่ฏ่ฟ‡ๆปคใ€้™„ไปถ็ฎก็†
  • ็”จๆˆท็ฎก็† โ€” ็ฆ่จ€/ๅฐ็ฆ/IP ๅฐ็ฆใ€ๆ“ไฝœๆ—ฅๅฟ—
  • ็ปŸ่ฎกๅˆ†ๆž โ€” ่ฎฟ้—ฎ้‡่ถ‹ๅŠฟใ€็™ปๅฝ•ๅฎก่ฎกใ€KPI ็œ‹ๆฟ
  • ็ซ™็‚น้…็ฝฎ โ€” ๅ“็‰Œๅฎšๅˆถใ€ๅŠŸ่ƒฝๅผ€ๅ…ณใ€ๅˆ†้กต่ฎพ็ฝฎใ€ๅฏผ่ˆช้“พๆŽฅ

็ปˆ็ซฏๅฎขๆˆท็ซฏ

  • Rust TUI โ€” ratatui ๆž„ๅปบ็š„็ปˆ็ซฏ็•Œ้ข๏ผŒๆ”ฏๆŒๆต่งˆ/ๅ‘ๅธ–/ๅ›žๅค

้กน็›ฎ็ป“ๆž„

ellie/
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ web/              # Next.js ่ฎบๅ›ๅ‰็ซฏ
โ”‚   โ”œโ”€โ”€ admin/            # Next.js ็ฎก็†ๅŽๅฐ
โ”‚   โ””โ”€โ”€ worker/           # Cloudflare Worker API
โ”œโ”€โ”€ packages/
โ”‚   โ”œโ”€โ”€ types/            # ๅ…ฑไบซ TypeScript ็ฑปๅž‹
โ”‚   โ”œโ”€โ”€ cli-rs/           # Rust TUI ๅฎขๆˆท็ซฏ
โ”‚   โ”‚   โ”œโ”€โ”€ ellie-core/   #   API ๅฎขๆˆท็ซฏๅบ“
โ”‚   โ”‚   โ””โ”€โ”€ ellie-tui/    #   ็ปˆ็ซฏ็•Œ้ข
โ”‚   โ”œโ”€โ”€ db/               # D1 Schema & Migrations
โ”‚   โ”œโ”€โ”€ repositories/     # ๆ•ฐๆฎ่ฎฟ้—ฎๅฑ‚
โ”‚   โ”œโ”€โ”€ shared/           # ๅ…ฑไบซๅทฅๅ…ทๅ‡ฝๆ•ฐ
โ”‚   โ””โ”€โ”€ ui/               # ๅ…ฑไบซ UI ็ป„ไปถ
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ integration/      # L2 ้›†ๆˆๆต‹่ฏ•
โ”‚   โ””โ”€โ”€ e2e/              # L3 ็ซฏๅˆฐ็ซฏๆต‹่ฏ•
โ”œโ”€โ”€ docs/                 # ่ฎพ่ฎกๆ–‡ๆกฃ (40็ฏ‡)
โ””โ”€โ”€ scripts/              # ๅทฅๅ…ท่„šๆœฌ

ๆŠ€ๆœฏๆ ˆ

ๅฑ‚ ๆŠ€ๆœฏ
ๅ‰็ซฏ Next.js 16 (App Router, RSC, Turbopack)
UI Tailwind CSS 4 + shadcn/ui
ๅŽ็ซฏ Cloudflare Workers (TypeScript)
ๆ•ฐๆฎๅบ“ D1 (SQLite at Edge)
็ผ“ๅญ˜ KV (่พน็ผ˜้”ฎๅ€ผๅญ˜ๅ‚จ)
ๅญ˜ๅ‚จ R2 (ๅฏน่ฑกๅญ˜ๅ‚จ)
่ฎค่ฏ NextAuth.js + JWT
TUI Rust + ratatui
ๆต‹่ฏ• Vitest + Playwright
Lint Biome
ๅŒ…็ฎก็† Bun

ๅผ€ๅ‘

็Žฏๅขƒ่ฆๆฑ‚

  • Bun >= 1.3
  • Node.js >= 22
  • Rust >= 1.80 (ไป… TUI)
  • Cloudflare ่ดฆๆˆท (Worker/D1/KV/R2)

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

# ๅฎ‰่ฃ…ไพ่ต–
bun install

# ้…็ฝฎ Worker
cp apps/worker/wrangler.toml.example apps/worker/wrangler.toml
# ็ผ–่พ‘ wrangler.toml ๅกซๅ…ฅไฝ ็š„่ต„ๆบ ID

# ้…็ฝฎ็Žฏๅขƒๅ˜้‡
cp .dev.vars.example .dev.vars
# ็ผ–่พ‘ .dev.vars ๅกซๅ…ฅ API_KEY ๅ’Œ JWT_SECRET

# ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
bun run dev          # Next.js (port 7031)
bun run worker:dev   # Worker (local)

ๅธธ็”จๅ‘ฝไปค

ๅ‘ฝไปค ่ฏดๆ˜Ž
bun run dev ๅฏๅŠจ Next.js ๅผ€ๅ‘ๆœๅŠกๅ™จ
bun run worker:dev ๅฏๅŠจ Worker ๆœฌๅœฐๅผ€ๅ‘
bun run build ๆž„ๅปบ็”Ÿไบง็‰ˆๆœฌ
bun run typecheck TypeScript ็ฑปๅž‹ๆฃ€ๆŸฅ
bun run lint Biome ไปฃ็ ๆฃ€ๆŸฅ
bun run lint:fix ่‡ชๅŠจไฟฎๅค lint ้—ฎ้ข˜
bun run worker:deploy ้ƒจ็ฝฒ Worker (่‡ชๅŠจ migrate)
bun run release ็‰ˆๆœฌๅ‘ๅธƒ (patch)
bun run release -- minor Minor ็‰ˆๆœฌๅ‘ๅธƒ

ๆต‹่ฏ•

ๅฑ‚ ๅ†…ๅฎน ่งฆๅ‘ๆ—ถๆœบ ๅ‘ฝไปค
L1 Unit ViewModelใ€ๅทฅๅ…ทๅ‡ฝๆ•ฐใ€Handler pre-commit bun run test
L2 Integration ็œŸๅฎž Worker API ่ฐƒ็”จ pre-push bun run test:integration
L3 E2E Playwright ๆต่งˆๅ™จๆต‹่ฏ• CI bun run test:e2e
G1 Static TypeScript strict + Biome pre-commit bun run typecheck && bun run lint
G2 Security osv-scanner + gitleaks pre-push ่‡ชๅŠจ
# ่ฟ่กŒๅ…จ้ƒจ L1 ๆต‹่ฏ•
bun run test

# ๅธฆ่ฆ†็›–็އ
bun run test:coverage

# Rust ๆต‹่ฏ•
cd packages/cli-rs && cargo test --workspace

้ƒจ็ฝฒ

# Worker ้ƒจ็ฝฒ (่‡ชๅŠจๅ…ˆ apply migrations)
bun run worker:deploy

# Docker ้•œๅƒๆž„ๅปบ
docker build -f apps/web/Dockerfile -t ellie-web .
docker build -f apps/admin/Dockerfile -t ellie-admin .

่ฏฆ่ง docs/docker-deployment.mdใ€‚

ๆ–‡ๆกฃ

ๆ–‡ๆกฃ ่ฏดๆ˜Ž
ๆžถๆž„่ฎพ่ฎก ็ณป็ปŸๆ•ดไฝ“ๆžถๆž„
ๆ•ฐๆฎๅบ“ Schema D1 ่กจ็ป“ๆž„
ๆ•ฐๆฎ่ฟ็งป Discuz โ†’ Ellie ่ฟ็งปๆ–นๆกˆ
ๅ‰็ซฏๆžถๆž„ MVVM + RSC ๆจกๅผ
Worker API API ็ซฏ็‚นๅ‚่€ƒ
API ๅ‚่€ƒ ๅฎŒๆ•ด API ๆ–‡ๆกฃ
้€š็”จ่ฎพ็ฝฎ KV Settings ไฝ“็ณป

License

MIT ยฉ 2026 Zheng Li

About

๐Ÿ˜ Modern forum platform on Next.js + Cloudflare Workers + D1, with a Rust TUI client

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages