๐ŸŽฏ Danci โ€”โ€” ็”จ AI ้ฉฑๅŠจๅผ€ๅ‘ไธ€ไธชๅ…จๆ ˆ่‹ฑ่ฏญๅ•่ฏๅญฆไน ๅนณๅฐ

0 ้˜…่ฏป6ๅˆ†้’Ÿ

ไปŽ้›ถๅˆฐไธ€๏ผŒๅ€ŸๅŠฉ Claude Code ็ญ‰ AI ็ผ–็จ‹ๅทฅๅ…ท๏ผŒๅฟซ้€Ÿๆž„ๅปบไธ€ไธชๅŒ…ๅซๅŽๅฐ็ฎก็†็ณป็ปŸ + H5 ็งปๅŠจ็ซฏๅบ”็”จ็š„่‹ฑ่ฏญๅ•่ฏๅญฆไน ๅนณๅฐใ€‚


๐Ÿ“Œ ้กน็›ฎๆฆ‚่งˆ

Danci๏ผˆๅ•่ฏ๏ผ‰ๆ˜ฏไธ€ไธชๅ…จๆ ˆ่‹ฑ่ฏญๅ•่ฏๅญฆไน ๅนณๅฐ๏ผŒๅŒ…ๅซไธคไธชๅญ้กน็›ฎ๏ผš

ๅญ้กน็›ฎๅฎšไฝๆŠ€ๆœฏๆ ˆ
danci-admin๐Ÿ–ฅ๏ธ ๅŽๅฐ็ฎก็†็ณป็ปŸNext.js 16 + React 19 + shadcn/ui
nextjs-typescript-starter๐Ÿ“ฑ H5 ็งปๅŠจ็ซฏๅบ”็”จNext.js 14 + NextAuth + Drizzle ORM

ไธคไธช้กน็›ฎๅ…ฑไบซๅŒไธ€ไธช Supabase ไบ‘็ซฏ PostgreSQL ๆ•ฐๆฎๅบ“๏ผŒ้€š่ฟ‡ ORM ๅฎž็Žฐๆ•ฐๆฎๅฑ‚็š„็ปŸไธ€็ฎก็†ใ€‚


๐Ÿ—๏ธ ๆŠ€ๆœฏๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        ็”จๆˆทๅฑ‚                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  danci-admin     โ”‚    โ”‚  H5 ็งปๅŠจ็ซฏๅบ”็”จ             โ”‚   โ”‚
โ”‚  โ”‚  ๅŽๅฐ็ฎก็†็ณป็ปŸ      โ”‚    โ”‚  (nextjs-typescript-     โ”‚   โ”‚
โ”‚  โ”‚  (Next.js 16)    โ”‚    โ”‚   starter)               โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚           โ”‚                           โ”‚                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              API Routes / Server Actions           โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                           โ”‚                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              Drizzle ORM (ๅฏน่ฑกๅ…ณ็ณปๆ˜ ๅฐ„)              โ”‚   โ”‚
โ”‚  โ”‚         Schema โ†’ SQL ๆ˜ ๅฐ„๏ผŒๅ‘Šๅˆซๆ‰‹ๅ†™ SQL              โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                           โ”‚                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚         Supabase (ไบ‘็ซฏ PostgreSQL ๆ•ฐๆฎๅบ“)           โ”‚   โ”‚
โ”‚  โ”‚            BaaS โ€” Backend as a Service             โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”‘ ๆ ธๅฟƒๆŠ€ๆœฏ้€‰ๅž‹

  • โšก Next.js โ€” React ๅ…จๆ ˆๆก†ๆžถ๏ผŒๆ”ฏๆŒ SSR/SSG๏ผŒSEO ๅ‹ๅฅฝ
  • ๐ŸŽจ shadcn/ui โ€” ้ซ˜ๅบฆๅฏๅฎšๅˆถ็š„ UI ็ป„ไปถๅบ“๏ผŒๆญ้… Tailwind CSS
  • ๐Ÿ” NextAuth.js โ€” ่บซไปฝ่ฎค่ฏ่งฃๅ†ณๆ–นๆกˆ๏ผŒๆ”ฏๆŒ้‚ฎ็ฎฑๅฏ†็ ็™ปๅฝ•
  • ๐Ÿ—„๏ธ Drizzle ORM โ€” ็ฑปๅž‹ๅฎ‰ๅ…จ็š„ ORM๏ผŒSchema ๅณ่กจ็ป“ๆž„
  • โ˜๏ธ Supabase โ€” ไบ‘็ซฏ BaaS ๅนณๅฐ๏ผŒ้›ถ่ฟ็ปดๆˆๆœฌ

๐Ÿ“Š ๆ•ฐๆฎๅบ“่ฎพ่ฎก

้กน็›ฎ้‡‡็”จ ๅ…ณ็ณปๅž‹ๆ•ฐๆฎๅบ“๏ผˆPostgreSQL๏ผ‰๏ผŒ้€š่ฟ‡ Drizzle ORM ็ฎก็†่กจ็ป“ๆž„ใ€‚

ๆ ธๅฟƒๆ•ฐๆฎ่กจ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    users     โ”‚     โ”‚    books     โ”‚     โ”‚     words        โ”‚
โ”‚  ็”จๆˆท่กจ       โ”‚     โ”‚  ๅ•่ฏไนฆ่กจ     โ”‚     โ”‚   ๅ•่ฏ่กจ          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค     โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค     โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ id (PK)      โ”‚     โ”‚ id (PK)      โ”‚     โ”‚ id (PK)          โ”‚
โ”‚ email        โ”‚     โ”‚ book_id      โ”‚     โ”‚ wordRank         โ”‚
โ”‚ password_hashโ”‚     โ”‚ title        โ”‚     โ”‚ headWord         โ”‚
โ”‚ created_at   โ”‚     โ”‚ word_count   โ”‚     โ”‚ content (JSON)   โ”‚
โ”‚ updated_at   โ”‚     โ”‚ cover_url    โ”‚     โ”‚ bookId           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚ tags         โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚                    โ”‚
       โ”‚    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ””โ”€โ”€โ”€โ”€โ–บ     user_progress              โ”‚
            โ”‚     ๅญฆไน ่ฟ›ๅบฆ่กจ                   โ”‚
            โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
            โ”‚ id (PK)                         โ”‚
            โ”‚ user_id (FK โ†’ users)            โ”‚
            โ”‚ book_id (FK โ†’ books)            โ”‚
            โ”‚ last_word_rank  (ไธŠๆฌกๅญฆๅˆฐ็ฌฌๅ‡ ไธช)   โ”‚
            โ”‚ learned_words   (ๅทฒๅญฆๅ•่ฏๆ•ฐ)      โ”‚
            โ”‚ total_words     (ๆ€ปๅ•่ฏๆ•ฐ)        โ”‚
            โ”‚ is_active       (ๆ˜ฏๅฆๅฝ“ๅ‰ๅญฆไน ไธญ)   โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ’ก ่ฎพ่ฎกไบฎ็‚น

  • ๅค–้”ฎ็บง่”ๅˆ ้™ค๏ผˆCASCADE๏ผ‰๏ผšๅˆ ้™ค็”จๆˆทๆ—ถ๏ผŒ่‡ชๅŠจๆธ…็†ๅ…ถๅญฆไน ่ฟ›ๅบฆ๏ผŒ้ฟๅ…ๆ•ฐๆฎๆฎ‹็•™
  • ๅ”ฏไธ€็บฆๆŸ๏ผšๆฏไธช็”จๆˆทๆฏๆœฌไนฆๅชๆœ‰ไธ€ๆก่ฟ›ๅบฆ่ฎฐๅฝ•๏ผŒ้€š่ฟ‡ upsert ๅฎž็Žฐๆ›ดๆ–ฐๆˆ–ๆ’ๅ…ฅ
  • ๆดป่ทƒๆ ‡่ฎฐ๏ผšis_active ๅญ—ๆฎตๆ ‡่ฎฐๅฝ“ๅ‰ๆญฃๅœจๅญฆไน ็š„ๅ•่ฏไนฆ๏ผŒ้ฆ–้กต"ๆœ€่ฟ‘ๅญฆไน "ๅŠŸ่ƒฝ็š„ๆ ธๅฟƒ

๐Ÿ–ฅ๏ธ ๅŽๅฐ็ฎก็†็ณป็ปŸ๏ผˆdanci-admin๏ผ‰

ๅŽๅฐ็ฎก็†็ณป็ปŸ้ขๅ‘่ฟ่ฅ็ฎก็†ๅ‘˜๏ผŒ่ดŸ่ดฃๅ•่ฏไนฆๅ’Œ็ฎก็†ๅ‘˜็š„็ปดๆŠคใ€‚

ๅŠŸ่ƒฝๆจกๅ—

๐Ÿ“ danci-admin/app/
โ”œโ”€โ”€ (dashboard)/
โ”‚   โ”œโ”€โ”€ books/page.tsx          ๐Ÿ“š ๅ•่ฏไนฆ็ฎก็†๏ผˆCRUD๏ผ‰
โ”‚   โ””โ”€โ”€ admin-users/page.tsx    ๐Ÿ‘ฅ ็ฎก็†ๅ‘˜็ฎก็†
โ”œโ”€โ”€ api/
โ”‚   โ”œโ”€โ”€ auth/                   ๐Ÿ” ่ฎค่ฏๆŽฅๅฃ
โ”‚   โ”‚   โ”œโ”€โ”€ signin/route.ts     โžœ ็™ปๅฝ•
โ”‚   โ”‚   โ”œโ”€โ”€ signup/route.ts     โžœ ๆณจๅ†Œ
โ”‚   โ”‚   โ””โ”€โ”€ signout/route.ts    โžœ ็™ปๅ‡บ
โ”‚   โ”œโ”€โ”€ books/route.ts          ๐Ÿ“š ๅ•่ฏไนฆ API
โ”‚   โ””โ”€โ”€ admin-users/route.ts    ๐Ÿ‘ฅ ็ฎก็†ๅ‘˜ API
โ”œโ”€โ”€ signin/page.tsx             ๐Ÿ”‘ ็™ปๅฝ•้กต
โ””โ”€โ”€ signup/page.tsx             ๐Ÿ“ ๆณจๅ†Œ้กต

๐ŸŽจ UI ็ป„ไปถๅบ“้€‰ๅž‹

้€‰็”จ shadcn/ui ไฝœไธบ็ป„ไปถๅบ“๏ผŒๅŽŸๅ› ๅฆ‚ไธ‹๏ผš

ๅฏนๆฏ”็ปดๅบฆElement UI / Ant Designshadcn/ui โœ…
ๅฎšๅˆถๆ€ง่พƒไฝŽ๏ผŒ่ฆ†็›–ๆ ทๅผๅคๆ‚ๆž้ซ˜๏ผŒๆบ็ ็บงๅฎšๅˆถ
ๆ ทๅผๆ–นๆกˆCSS-in-JS / LessTailwind CSS
AI ๅ‹ๅฅฝไธ€่ˆฌโœ… ่ฏญไน‰ๅŒ–๏ผŒAI ๆ˜“็†่งฃ
ๆŒ‰้œ€ๅŠ ่ฝฝ้œ€้…็ฝฎโœ… ๅคฉ็„ถๆ”ฏๆŒ
ไฝ“็งฏ่พƒๅคงๆžๅฐ

๐Ÿ“ฑ H5 ็งปๅŠจ็ซฏๅบ”็”จ

H5 ๅบ”็”จ้ขๅ‘็ปˆ็ซฏ็”จๆˆท๏ผŒๆไพ›ๆฒ‰ๆตธๅผ็š„ๅ•่ฏๅญฆไน ไฝ“้ชŒใ€‚

้กต้ข็ป“ๆž„

๐Ÿ“ nextjs-typescript-starter/app/
โ”œโ”€โ”€ page.tsx                    ๐Ÿ  ้ฆ–้กต๏ผˆๅ•่ฏไนฆๅˆ—่กจ + ๆœ€่ฟ‘ๅญฆไน ๏ผ‰
โ”œโ”€โ”€ learn/[bookId]/page.tsx     ๐Ÿ“– ๅญฆไน ้กต้ข๏ผˆๅ•่ฏๅก็‰‡๏ผ‰
โ”œโ”€โ”€ word/[bookId]/[wordId]/
โ”‚   โ”œโ”€โ”€ page.tsx                ๐Ÿ“ ๅ•่ฏ่ฏฆๆƒ…้กต
โ”‚   โ””โ”€โ”€ pronunciation.tsx       ๐Ÿ”Š ๅ‘้Ÿณ็ป„ไปถ
โ”œโ”€โ”€ mine/page.tsx               ๐Ÿ‘ค ๆˆ‘็š„้กต้ข๏ผˆๅญฆไน ่ฟ›ๅบฆ๏ผ‰
โ”œโ”€โ”€ login/page.tsx              ๐Ÿ”‘ ็™ปๅฝ•้กต
โ””โ”€โ”€ register/page.tsx           ๐Ÿ“ ๆณจๅ†Œ้กต

๐Ÿ”„ ๆ ธๅฟƒๅญฆไน ๆต็จ‹

็”จๆˆทๆ‰“ๅผ€้ฆ–้กต
    โ”‚
    โ”œโ”€โ”€ ๆœช็™ปๅฝ• โ†’ ็‚นๅ‡ปๅ•่ฏไนฆ โ†’ ๅผนๅ‡บ็™ปๅฝ•ๅผน็ช—
    โ”‚
    โ””โ”€โ”€ ๅทฒ็™ปๅฝ• โ†’ ็‚นๅ‡ปๅ•่ฏไนฆ โ†’ ่ฟ›ๅ…ฅๅญฆไน ้กต้ข
                                โ”‚
                                โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ่Žทๅ–ๅญฆไน ่ฟ›ๅบฆ         โ”‚
                    โ”‚   (user_progress ่กจ)  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                               โ”‚
                               โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ๅฎšไฝๅˆฐไธŠๆฌกๅญฆๅˆฐ็š„ๅ•่ฏ  โ”‚
                    โ”‚   last_word_rank + 1  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                               โ”‚
                               โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ๅฑ•็คบๅ•่ฏๅก็‰‡         โ”‚
                    โ”‚   ยท ๅ•่ฏๅŽŸๆ–‡           โ”‚
                    โ”‚   ยท ้Ÿณๆ ‡๏ผˆ่‹ฑ/็พŽ๏ผ‰       โ”‚
                    โ”‚   ยท ้‡Šไน‰               โ”‚
                    โ”‚   ยท ไพ‹ๅฅ               โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                               โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ็”จๆˆทๆ“ไฝœ             โ”‚
                    โ”‚   ยท ไธŠไธ€ไธช / ไธ‹ไธ€ไธช    โ”‚
                    โ”‚   ยท ็‚นๅ‡ปๆŸฅ็œ‹่ฏฆๆƒ…       โ”‚
                    โ”‚   ยท ็‚นๅ‡ป๐Ÿ”Šๆ’ญๆ”พๅ‘้Ÿณ     โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                               โ”‚
                               โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ๆ›ดๆ–ฐๅญฆไน ่ฟ›ๅบฆ         โ”‚
                    โ”‚   POST /api/progress  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”Š ๅ•่ฏๅ‘้ŸณๅŠŸ่ƒฝ

้›†ๆˆๆœ‰้“่‹ฑ่ฏญๅ‘้ŸณๆŽฅๅฃ๏ผŒๆ”ฏๆŒ่‹ฑๅผๅ’Œ็พŽๅผๅ‘้Ÿณๅˆ‡ๆข๏ผš

https://dict.youdao.com/dictvoice?audio={word}&type={1|2}

type=1 โ†’ ่‹ฑๅผๅ‘้Ÿณ ๐Ÿ‡ฌ๐Ÿ‡ง
type=2 โ†’ ็พŽๅผๅ‘้Ÿณ ๐Ÿ‡บ๐Ÿ‡ธ

๐Ÿงน ๆ•ฐๆฎๆธ…ๆด—ๅฎžๆˆ˜

้กน็›ฎไธญไธ€ไธชๅ…ณ้”ฎ็Žฏ่Š‚ๆ˜ฏๅฐ† GitHub ไธŠ็š„ๅผ€ๆบๅ•่ฏๆ•ฐๆฎๅฏผๅ…ฅๆ•ฐๆฎๅบ“ใ€‚

ๆ•ฐๆฎๆธ…ๆด—ๆต็จ‹

GitHub ไธ‹่ฝฝ ZIP
      โ”‚
      โ–ผ
  ่งฃๅŽ‹ๅพ—ๅˆฐ JSON ๆ–‡ไปถ๏ผˆ178KB๏ผ‰
      โ”‚
      โ”œโ”€โ”€ โŒ ็›ดๆŽฅ่ฎฉ AI ๅค„็† 178KB JSON๏ผŸ
      โ”‚      ไธŠไธ‹ๆ–‡็ช—ๅฃ้™ๅˆถ๏ผŒToken ๅผ€้”€ๅทจๅคง
      โ”‚
      โ””โ”€โ”€ โœ… ่ฎฉ AI ็”Ÿๆˆๆธ…ๆด—่„šๆœฌ๏ผŒๆœฌๅœฐ่ฟ่กŒ
             โ”‚
             โ–ผ
      scripts/json2csv.mjs
      (ไป…ๆถˆ่€— ~1000 Token)
             โ”‚
             โ–ผ
      CSV / SQL ๆ ผๅผ โ†’ ๅฏผๅ…ฅ Supabase

๐Ÿ’ก AI ็ผ–็จ‹ๆœ€ไฝณๅฎž่ทต

ไธ่ฆๆŠŠๅคงๆฎตๆ•ฐๆฎไธข็ป™ AI ๅค„็†๏ผŒ่€Œๆ˜ฏ่ฎฉ AI ็”Ÿๆˆๅค„็†ๆ•ฐๆฎ็š„่„šๆœฌใ€‚

่ฟ™ๆ˜ฏๆœฌ้กน็›ฎ็š„้‡่ฆ็ป้ชŒ๏ผš

  1. ไธŠไธ‹ๆ–‡็ฎก็†๏ผšAI ็š„ไธŠไธ‹ๆ–‡็ช—ๅฃๆœ‰้™๏ผŒๅคงๆ–‡ไปถไผšๆ’‘็ˆ† Token
  2. ่„šๆœฌๅŒ–ๆ€็ปด๏ผš่ฎฉ AI ๅ†™่„šๆœฌ๏ผŒ่„šๆœฌๅœจๆœฌๅœฐ่ฟ่กŒ๏ผŒๆ•ˆ็އๆ›ด้ซ˜
  3. ๅฏๅค็”จๆ€ง๏ผš่„šๆœฌๅฏไปฅๅๅคๆ‰ง่กŒ๏ผŒไธไพ่ต– AI ไผš่ฏ

๐Ÿค– AI ่พ…ๅŠฉๅผ€ๅ‘ๅฎž่ทต

ๆœฌ้กน็›ฎๅ…จ็จ‹ไฝฟ็”จ Claude Code ่ฟ›่กŒ AI ่พ…ๅŠฉๅผ€ๅ‘๏ผŒไปฅไธ‹ๆ˜ฏๆ€ป็ป“็š„ๆœ€ไฝณๅฎž่ทตใ€‚

๐Ÿ“‹ Prompt ๅทฅ็จ‹่ฆ็‚น

โœ… ๅฅฝ็š„ Prompt ไน ๆƒฏ๏ผš
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 1. ไธŠไธ‹ๆ–‡ๅ‡†็กฎไธ”ๆธ…ๆ™ฐ                               โ”‚
โ”‚    โ†’ ๆŠŠๆ•ฐๆฎ่กจ็ป“ๆž„ใ€ๆŠ€ๆœฏๆžถๆž„ๅ†™ๅ…ฅ AGENTS.md           โ”‚
โ”‚                                                   โ”‚
โ”‚ 2. ่ง„ๅˆ™ๅ’Œ่ง„่Œƒๆ˜Ž็กฎ                                  โ”‚
โ”‚    โ†’ ่กจๅ•ๅญ—ๆฎตใ€ไธšๅŠกๅœบๆ™ฏใ€ๅŠŸ่ƒฝๆ่ฟฐ่ฆ่ฏฆ็ป†              โ”‚
โ”‚    โ†’ ไธ่ƒฝ่ฎฉ LLM ๅŽป"็Œœ"                            โ”‚
โ”‚                                                   โ”‚
โ”‚ 3. ้ข—็ฒ’ๅบฆ้€‚ไธญ                                     โ”‚
โ”‚    โ†’ ๅคงไปปๅŠกๆ‹†ๅˆ†ไธบๅฐๆญฅ้ชค                            โ”‚
โ”‚    โ†’ ๆฏๆฌกๅชๅšไธ€ไปถไบ‹๏ผŒ้ชŒ่ฏ้€š่ฟ‡ๅ†็ปง็ปญ                  โ”‚
โ”‚                                                   โ”‚
โ”‚ 4. ่ฎฉ AI ๅšๆ“…้•ฟ็š„ไบ‹                                โ”‚
โ”‚    โ†’ ็”Ÿๆˆไปฃ็ ใ€ๅ†™่„šๆœฌ โ†’ AI ๅš                      โ”‚
โ”‚    โ†’ ่ฟ่กŒ่„šๆœฌใ€้ชŒ่ฏ็ป“ๆžœ โ†’ ไบบๅทฅ็กฎ่ฎค                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”„ Git ๆไบค่ง„่Œƒ

้กน็›ฎ้‡‡็”จ Conventional Commits๏ผˆ็บฆๅฎšๅผๆไบค๏ผ‰ ่ง„่Œƒ๏ผš

ๅ‰็ผ€็”จ้€”็คบไพ‹
featๆ–ฐๅขžๅŠŸ่ƒฝfeat: ๅฎŒๆˆๅ•่ฏๅ‘้ŸณๅŠŸ่ƒฝ
fixไฟฎๅค Bugfix: ไฟฎๅค็™ปๅฝ•่กจๅ• UI ๅ‰ฒ่ฃ‚
docsๆ–‡ๆกฃๅ˜ๆ›ดdocs: ๆ›ดๆ–ฐ README
refactorไปฃ็ ้‡ๆž„refactor: ้‡ๆž„ๅญฆไน ่ฟ›ๅบฆ้€ป่พ‘
styleๆ ทๅผๅ˜ๆ›ดstyle: ่ฐƒๆ•ดๅก็‰‡้—ด่ท
choreๆž„ๅปบ/ๅทฅๅ…ทchore: ๆ›ดๆ–ฐ pnpm lock ๆ–‡ไปถ

๐Ÿ“ ้กน็›ฎ็›ฎๅฝ•็ป“ๆž„ๆ€ป่งˆ

danci/
โ”œโ”€โ”€ ๐Ÿ“„ README.md                    # ้กน็›ฎ่ฏดๆ˜Žๆ–‡ๆกฃ
โ”œโ”€โ”€ ๐Ÿ“„ LICENSE                      # ๅผ€ๆบ่ฎธๅฏ่ฏ
โ”œโ”€โ”€ ๐Ÿ“„ .gitignore                   # Git ๅฟฝ็•ฅ้…็ฝฎ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ danci-admin/                 # ๐Ÿ–ฅ๏ธ ๅŽๅฐ็ฎก็†็ณป็ปŸ
โ”‚   โ”œโ”€โ”€ app/                        #    Next.js App Router
โ”‚   โ”œโ”€โ”€ db/                         #    ๆ•ฐๆฎๅบ“ Schema (Drizzle)
โ”‚   โ”œโ”€โ”€ scripts/                    #    ๆ•ฐๆฎๅบ“่„šๆœฌ
โ”‚   โ”œโ”€โ”€ components/                 #    UI ็ป„ไปถ (shadcn/ui)
โ”‚   โ””โ”€โ”€ .env                        #    ็Žฏๅขƒๅ˜้‡
โ”‚
โ””โ”€โ”€ ๐Ÿ“ nextjs-typescript-starter/   # ๐Ÿ“ฑ H5 ็งปๅŠจ็ซฏๅบ”็”จ
    โ”œโ”€โ”€ app/                        #    Next.js App Router
    โ”‚   โ”œโ”€โ”€ api/                    #    API ่ทฏ็”ฑ
    โ”‚   โ”œโ”€โ”€ learn/                  #    ๅญฆไน ้กต้ข
    โ”‚   โ”œโ”€โ”€ word/                   #    ๅ•่ฏ่ฏฆๆƒ…
    โ”‚   โ””โ”€โ”€ mine/                   #    ไธชไบบไธญๅฟƒ
    โ”œโ”€โ”€ db/                         #    ๆ•ฐๆฎๅบ“ Schema (Drizzle)
    โ”œโ”€โ”€ docs/                       #    ๆŠ€ๆœฏ่ฎพ่ฎกๆ–‡ๆกฃ
    โ””โ”€โ”€ .env                        #    ็Žฏๅขƒๅ˜้‡

๐Ÿš€ ๅฟซ้€ŸๅฏๅŠจ

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

  • Node.js >= 18
  • pnpm (ๆŽจ่) ๆˆ– npm
  • Supabase ่ดฆๅท

ๅฏๅŠจๆญฅ้ชค

# 1. ๅ…‹้š†้กน็›ฎ
git clone <repo-url>
cd danci

# 2. ๅฏๅŠจๅŽๅฐ็ฎก็†็ณป็ปŸ
cd danci-admin
cp .env.example .env          # ้…็ฝฎ็Žฏๅขƒๅ˜้‡
pnpm install
pnpm dev                      # ่ฎฟ้—ฎ http://localhost:3000

# 3. ๅฏๅŠจ H5 ๅบ”็”จ
cd ../nextjs-typescript-starter
cp .env.example .env          # ้…็ฝฎ็Žฏๅขƒๅ˜้‡
pnpm install
pnpm dev                      # ่ฎฟ้—ฎ http://localhost:3001

็Žฏๅขƒๅ˜้‡้…็ฝฎ

# Supabase ๆ•ฐๆฎๅบ“่ฟžๆŽฅ
DATABASE_URL=postgresql://...

# NextAuth ่ฎค่ฏ
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-secret-key

๐ŸŽฏ ๆ€ป็ป“ไธŽๅฑ•ๆœ›

โœ… ๅทฒๅฎŒๆˆๅŠŸ่ƒฝ

  • ๐Ÿ–ฅ๏ธ ๅŽๅฐ็ฎก็†็ณป็ปŸ โ€” ๅ•่ฏไนฆ็ฎก็†ใ€็ฎก็†ๅ‘˜็ฎก็†
  • ๐Ÿ” ็”จๆˆท่ฎค่ฏ โ€” ๆณจๅ†Œใ€็™ปๅฝ•ใ€ไผš่ฏ็ฎก็†
  • ๐Ÿ“š ๅ•่ฏไนฆๆต่งˆ โ€” ้ฆ–้กตๅˆ—่กจๅฑ•็คบ
  • ๐Ÿ“– ๅ•่ฏๅญฆไน  โ€” ๅก็‰‡ๅผๅญฆไน ๏ผŒๆ”ฏๆŒ็ฟป้กต
  • ๐Ÿ“Š ๅญฆไน ่ฟ›ๅบฆ โ€” ่‡ชๅŠจไฟๅญ˜๏ผŒๆ–ญ็‚น็ปญๅญฆ
  • ๐Ÿ”Š ๅ•่ฏๅ‘้Ÿณ โ€” ่‹ฑๅผ/็พŽๅผๅ‘้Ÿณๅˆ‡ๆข
  • ๐Ÿ“ฑ ็งปๅŠจ็ซฏ้€‚้… โ€” H5 ๅ“ๅบ”ๅผๅธƒๅฑ€

๐Ÿ”ฎ ๆœชๆฅ่ง„ๅˆ’

  • ๐Ÿง  ่‰พๅฎพๆตฉๆ–ฏ้—ๅฟ˜ๆ›ฒ็บฟ โ€” ๆ™บ่ƒฝๅคไน ๆ้†’
  • ๐Ÿ“ˆ ๅญฆไน ็ปŸ่ฎก โ€” ๆฏๆ—ฅๅญฆไน ๆ•ฐๆฎๅฏ่ง†ๅŒ–
  • ๐Ÿ† ๅญฆไน ๆ‰“ๅก โ€” ่ฟž็ปญๅญฆไน ๆฟ€ๅŠฑๆœบๅˆถ
  • ๐Ÿ“ฑ ๅคš็ซฏๆ‰ฉๅฑ• โ€” React Native / Flutter ๅฎขๆˆท็ซฏ
  • ๐Ÿค– AI ๆ™บ่ƒฝๆŽจ่ โ€” ๅŸบไบŽๅญฆไน ๆ•ฐๆฎ็š„ไธชๆ€งๅŒ–ๆŽจ่

๐Ÿ’ก ๆœฌ้กน็›ฎ็š„ๆ ธๅฟƒ็†ๅฟต๏ผšๅ–„็”จ AI ็ผ–็จ‹ๅทฅๅ…ท๏ผŒๅฐ†็ฒพๅŠ›้›†ไธญๅœจไธšๅŠก้€ป่พ‘ๅ’Œไบงๅ“่ฎพ่ฎกไธŠ๏ผŒ่€Œ้ž้‡ๅคๆ€ง็š„ไปฃ็ ็ผ–ๅ†™ใ€‚AI ไธๆ˜ฏๆ›ฟไปฃๅผ€ๅ‘่€…๏ผŒ่€Œๆ˜ฏ่ฎฉๅผ€ๅ‘่€…ๆ›ด้ซ˜ๆ•ˆใ€‚