ไธไธชๅบไบ Next.js 16 ๆๅปบ็ๅ จๆ Twitter ๅ ้้กน็ฎ,ๅฎ็ฐไบ็คพไบคๅชไฝ็ๆ ธๅฟๅ่ฝใ
- Next.js 16 - React ๅ จๆ ๆกๆถ
- TypeScript - ็ฑปๅๅฎๅ จ
- React 18 - UI ๅบ
- Prisma - ORM ๆฐๆฎๅบๅทฅๅ ท
- NextAuth.js - ่บซไปฝ่ฎค่ฏ
- MongoDB / PostgreSQL - ๆฐๆฎๅบ
- Tailwind CSS - ๆ ทๅผๆกๆถ
- Radix UI - ๆ ๅคด็ปไปถๅบ
- React Icons - ๅพๆ ๅบ
- Sonner - Toast ้็ฅ
- React Dropzone - ๆไปถไธไผ
- SWR - React Hooks ๆฐๆฎ่ทๅๅบ
- Axios - HTTP ๅฎขๆท็ซฏ
- โ ็จๆทๆณจๅ/็ปๅฝ/็ปๅบ
- โ ไธชไบบ่ตๆ็ผ่พ (ๅคดๅใๅฐ้ขใไธชไบบ็ฎไป)
- โ ็จๆทๅ ณๆณจ/ๅๆถๅ ณๆณจ
- โ ็จๆทไธป้กตๅฑ็คบ
- โ ๅๅธๆจๆ(ๆฏๆๅพ็ไธไผ )
- โ ็น่ต/ๅๆถ็น่ตๆจๆ
- โ ่ฏ่ฎบๆจๆ
- โ ๆจๆ่ฏฆๆ ้กต
- โ ๆจๆๆถ้ด็บฟๅฑ็คบ
- โ ๅ ณๆณจ้็ฅ
- โ ็น่ต้็ฅ
- โ ่ฏ่ฎบ้็ฅ
- โ ้็ฅๆช่ฏปๆ ่ฎฐ
- โ ๅๅบๅผ่ฎพ่ฎก
- โ ๆจกๆๆกไบคไบ
- โ Toast ๆ็คบ
- โ ๅ ่ฝฝ็ถๆ
- โ ้่ฏฏๅค็
twitter-clone/
โโโ ๐ฑ app/ # Next.js App Router
โ โโโ api/ # API ่ทฏ็ฑ
โ โ โโโ auth/[...nextauth]/ # NextAuth ่ฎค่ฏ็ซฏ็น
โ โ โ โโโ route.ts # ๐ ่ฎค่ฏ้
็ฝฎ (CredentialsProvider)
โ โ โโโ comments/ # ๐ฌ ่ฏ่ฎบ API
โ โ โ โโโ route.ts # ๅๅปบ่ฏ่ฎบ,่งฆๅ้็ฅ
โ โ โโโ current/ # ๐ค ่ทๅๅฝๅ็จๆท
โ โ โ โโโ route.ts # ่ฟๅไผ่ฏ็จๆทไฟกๆฏ
โ โ โโโ edit/ # โ๏ธ ็ผ่พ็จๆท่ตๆ
โ โ โ โโโ route.ts # ๆดๆฐ็จๆทๅ/็ฎไป/ๅคดๅ/ๅฐ้ข
โ โ โโโ follow/ # ๐ค ๅ
ณๆณจ/ๅๆถๅ
ณๆณจ
โ โ โ โโโ route.ts # ๅค็ๅ
ณๆณจ้ป่พ,ๅๅปบ้็ฅ
โ โ โโโ like/ # โค๏ธ ็น่ต/ๅๆถ็น่ต
โ โ โ โโโ route.ts # ๅค็็น่ต้ป่พ,ๅๅปบ้็ฅ
โ โ โโโ notifications/ # ๐ ้็ฅ API
โ โ โ โโโ [userId]/
โ โ โ โโโ route.ts # ่ทๅ็จๆท้็ฅๅ่กจ
โ โ โโโ posts/ # ๐ ๆจๆ API
โ โ โ โโโ route.ts # ๅๅปบๆจๆ,่ทๅๆจๆๅ่กจ
โ โ โ โโโ [postId]/
โ โ โ โโโ route.ts # ่ทๅๅๆกๆจๆ่ฏฆๆ
โ โ โโโ register/ # ๐ ็จๆทๆณจๅ
โ โ โ โโโ route.ts # ๅๅปบๆฐ็จๆท (bcrypt ๅ ๅฏ)
โ โ โโโ users/ # ๐ฅ ็จๆทไฟกๆฏ
โ โ โโโ route.ts # ่ทๅ็จๆทๅ่กจ
โ โ โโโ [userId]/
โ โ โโโ route.ts # ่ทๅๆๅฎ็จๆทไฟกๆฏ
โ โโโ notifications/ # ๐ ้็ฅ้กต้ข
โ โ โโโ page.tsx # ๆพ็คบ้็ฅๅ่กจ
โ โโโ posts/[postId]/ # ๐ ๆจๆ่ฏฆๆ
้กต
โ โ โโโ page.tsx # ๆจๆ่ฏฆๆ
+ ่ฏ่ฎบ
โ โโโ users/[userid]/ # ๐ค ็จๆทไธป้กต
โ โ โโโ page.tsx # ็จๆท่ตๆ + ๆจๆๅ่กจ
โ โโโ layout.tsx # ๐๏ธ ๆ นๅธๅฑ (ไพง่พนๆ +ๅ
ๅฎน+ๅ
ณๆณจๆ )
โ โโโ page.tsx # ๐ ้ฆ้กต (ๆจๆๆต)
โ โโโ globals.css # ๐จ ๅ
จๅฑๆ ทๅผ
โ
โโโ ๐จ components/ # React ็ปไปถ
โ โโโ layout/ # ๅธๅฑ็ปไปถ
โ โ โโโ Sidebar.tsx # ๐ ไพง่พนๆ ๅฏผ่ช (้ฆ้กต/้็ฅ/ไธชไบบ)
โ โ โโโ SidebarItem.tsx # ๐ ไพง่พนๆ ๅ้กน (้ซไบฎ/่ทฏ็ฑ)
โ โ โโโ SidebarLogo.tsx # ๐ฆ Twitter Logo
โ โ โโโ SidebarTwitterButton.tsx # โ๏ธ ๅๆจๆ้ฎ (ๆๅผ็ปๅฝ)
โ โ โโโ FollowBar.tsx # ๐ฅ ๆจ่ๅ
ณๆณจๆ (็จๆทๅ่กจ)
โ โโโ modals/ # ๅผน็ช็ปไปถ
โ โ โโโ LoginModal.tsx # ๐ ็ปๅฝๅผน็ช (้ฎ็ฎฑ/ๅฏ็ )
โ โ โโโ RegisterModal.tsx # ๐ ๆณจๅๅผน็ช (้ฎ็ฎฑ/ๅฏ็ /็จๆทๅ)
โ โ โโโ EditModal.tsx # โ๏ธ ็ผ่พ่ตๆๅผน็ช (ไธไผ ๅพ็)
โ โโโ posts/ # ๆจๆ็ธๅ
ณ็ปไปถ
โ โ โโโ PostFeed.tsx # ๐ฐ ๆจๆๆต (ๆ ้ๅ ่ฝฝ)
โ โ โโโ PostItem.tsx # ๐ ๅๆกๆจๆๅก็ (็น่ต/่ฏ่ฎบ)
โ โ โโโ CommentFeed.tsx # ๐ฌ ่ฏ่ฎบๆต
โ โ โโโ CommendItem.tsx # ๐ฌ ๅๆก่ฏ่ฎบ
โ โโโ users/ # ็จๆท็ธๅ
ณ็ปไปถ
โ โ โโโ UserBio.tsx # ๐ ็จๆท็ฎไป (ๅ
ณๆณจๆ้ฎ/็ป่ฎก)
โ โ โโโ UserHero.tsx # ๐ผ๏ธ ็จๆทๅฐ้ข (็ผ่พๆ้ฎ)
โ โโโ Avatar.tsx # ๐ค ๅคดๅ็ปไปถ (็นๅป่ทณ่ฝฌ)
โ โโโ Button.tsx # ๐ ๆ้ฎ็ปไปถ (ๅค็งๆ ทๅผ)
โ โโโ Form.tsx # โ๏ธ ๅๆจ่กจๅ (ๆๆฌ+ๅพ็)
โ โโโ Header.tsx # ๐ ้กต้ขๅคด้จ (่ฟๅๆ้ฎ+ๆ ้ข)
โ โโโ ImageUpload.tsx # ๐ธ ๅพ็ไธไผ (Cloudinary)
โ โโโ Input.tsx # ๐ ่พๅ
ฅๆก็ปไปถ
โ โโโ Modal.tsx # ๐ช ๆจกๆๆกๅบ็ก็ปไปถ
โ โโโ NotificationsFeed.tsx # ๐ ้็ฅๆต
โ
โโโ ๐ช hooks/ # ่ชๅฎไน Hooks
โ โโโ useCurrentUser.ts # ๐ค ่ทๅๅฝๅ็จๆท (SWR)
โ โโโ useUser.ts # ๐ค ่ทๅๆๅฎ็จๆท (SWR)
โ โโโ useUsers.ts # ๐ฅ ่ทๅ็จๆทๅ่กจ (SWR)
โ โโโ usePost.ts # ๐ ่ทๅๅๆกๆจๆ (SWR)
โ โโโ usePosts.ts # ๐ฐ ่ทๅๆจๆๅ่กจ (SWR)
โ โโโ useLike.ts # โค๏ธ ็น่ต้ป่พ (ไน่งๆดๆฐ)
โ โโโ useFollow.ts # ๐ค ๅ
ณๆณจ้ป่พ (ไน่งๆดๆฐ)
โ โโโ useNotifications.ts # ๐ ้็ฅ้ป่พ (SWR)
โ โโโ useLoginModal.ts # ๐ ็ปๅฝๅผน็ช็ถๆ (Zustand)
โ โโโ useRegisterModal.ts # ๐ ๆณจๅๅผน็ช็ถๆ (Zustand)
โ โโโ useEditModal.ts # โ๏ธ ็ผ่พๅผน็ช็ถๆ (Zustand)
โ
โโโ ๐ง lib/ # ๅทฅๅ
ทๅบ
โ โโโ prismadb.ts # ๐พ Prisma ๅฎขๆท็ซฏๅไพ
โ โโโ serverAuth.ts # ๐ ๆๅก็ซฏ่ฎค่ฏๅทฅๅ
ท
โ โโโ fetcher.ts # ๐ SWR fetcher (Axios)
โ โโโ utils.ts # ๐ ๏ธ ๅทฅๅ
ทๅฝๆฐ (cn, clsx)
โ
โโโ ๐๏ธ prisma/ # Prisma ้
็ฝฎ
โ โโโ schema.prisma # ๐ ๆฐๆฎๅบๆจกๅๅฎไน
โ # - User (็จๆท)
โ # - Post (ๆจๆ)
โ # - Comment (่ฏ่ฎบ)
โ # - Notification (้็ฅ)
โ
โโโ ๐ ้
็ฝฎๆไปถ
โ โโโ .env # ๐ ็ฏๅขๅ้
โ โโโ next.config.ts # โ๏ธ Next.js ้
็ฝฎ
โ โโโ tailwind.config.ts # ๐จ Tailwind ้
็ฝฎ
โ โโโ tsconfig.json # ๐ TypeScript ้
็ฝฎ
โ โโโ prisma.config.ts # ๐พ Prisma ้
็ฝฎ
โ โโโ components.json # ๐จ Shadcn UI ้
็ฝฎ
โ โโโ package.json # ๐ฆ ไพ่ต็ฎก็
โ
โโโ ๐ผ๏ธ public/ # ้ๆ่ตๆบ
โโโ images/
โโโ placeholder.png # ๅ ไฝๅพ
git clone <repository-url>
cd twitter-clonenpm installๅๅปบ .env ๆไปถๅนถ้
็ฝฎไปฅไธๅ้:
# ๆฐๆฎๅบ
DATABASE_URL="your_database_url"
# NextAuth
NEXTAUTH_SECRET="your_nextauth_secret"
NEXTAUTH_URL="http://localhost:3000"# ็ๆ Prisma Client
npx prisma generate
# ๅๆญฅๆฐๆฎๅบ็ปๆ
npx prisma db push
# (ๅฏ้) ๆๅผ Prisma Studio ๆฅ็ๆฐๆฎ
npx prisma studionpm run devๆๅผ http://localhost:3000 ๆฅ็ๅบ็จใ
| ๅ้ๅ | ่ฏดๆ | ๅฟ ้ | ็คบไพ |
|---|---|---|---|
DATABASE_URL |
ๆฐๆฎๅบ่ฟๆฅ URL | โ | mongodb+srv://... ๆ postgresql://... |
NEXTAUTH_SECRET |
NextAuth ๅฏ้ฅ | โ | ไฝฟ็จ openssl rand -base64 32 ็ๆ |
NEXTAUTH_URL |
ๅบ็จ URL | โ | http://localhost:3000 |
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME |
Cloudinary ไบๅ็งฐ | โ | ็จไบๅพ็ไธไผ |
- ๆจ้ไปฃ็ ๅฐ GitHub
- ๅจ Vercel ๅฏผๅ ฅ้กน็ฎ
- ้ ็ฝฎ็ฏๅขๅ้
- ้จ็ฝฒ ๐
-
app/api/auth/[...nextauth]/route.ts- NextAuth ้ ็ฝฎ
- CredentialsProvider ้ฎ็ฎฑๅฏ็ ็ปๅฝ
- bcrypt ๅฏ็ ้ช่ฏ
-
lib/serverAuth.ts- ๆๅก็ซฏ่ฎค่ฏๅทฅๅ ท
- ้ช่ฏ็จๆทไผ่ฏ
- ่ฟๅๅฝๅ็จๆท
-
hooks/useCurrentUser.ts- ๅฎขๆท็ซฏ่ทๅๅฝๅ็จๆท
- ไฝฟ็จ SWR ็ผๅญ
-
prisma/schema.prisma- ๆฐๆฎๅบๆจกๅๅฎไน
- User: ็จๆทไฟกๆฏใๅ ณๆณจๅ ณ็ณปใ็น่ตๅ่กจ
- Post: ๆจๆๅ ๅฎนใไฝ่ ใ็น่ตๆฐใ่ฏ่ฎบ
- Comment: ่ฏ่ฎบๅ ๅฎนใไฝ่ ใๆๅฑๆจๆ
- Notification: ้็ฅ็ฑปๅใๆฅๆถ่ ใๅ้่
-
lib/prismadb.ts- Prisma ๅฎขๆท็ซฏๅไพ
- ้ฒๆญขๅผๅ็ฏๅข้ๅคๅฎไพๅ
-
hooks/useLike.tsโญ- ็น่ตๅ่ฝๆ ธๅฟ้ป่พ
- ไฝฟ็จ SWR ไน่งๆดๆฐ
- ๅ็ซฏ่ฟๅๆๆฐๆฐๆฎ่ฆ็็ผๅญ
- ๆช็ปๅฝๆถๆๅผ็ปๅฝๅผน็ช
-
hooks/useFollow.ts- ๅ ณๆณจๅ่ฝ้ป่พ
- ไน่งๆดๆฐๅ ณๆณจ็ถๆ
- ่งฆๅ้็ฅๅๅปบ
-
hooks/usePost.ts&hooks/usePosts.ts- ๆจๆๆฐๆฎ่ทๅ
- SWR ่ชๅจ็ผๅญๅ้ๆฐ้ช่ฏ
- ๆฏๆๆ็จๆท ID ็ญ้
-
components/Form.tsx- ๅๆจ่กจๅ
- ๆฏๆๆๆฌๅๅพ็
- ๅญ็ฌฆ่ฎกๆฐ
-
components/posts/PostItem.tsx- ๆจๆๅก็
- ๆพ็คบไฝ่ ใๅ ๅฎนใๆถ้ด
- ็น่ตใ่ฏ่ฎบไบคไบ
-
components/layout/Sidebar.tsx- ไพง่พนๆ ๅฏผ่ช
- ๅๅบๅผ่ฎพ่ฎก
- ้ซไบฎๅฝๅ้กต้ข
-
app/api/like/route.ts- POST: ็น่ตๆจๆ
- DELETE: ๅๆถ็น่ต
- ๅๅปบ็น่ต้็ฅ
-
app/api/follow/route.ts- POST: ๅ ณๆณจ็จๆท
- DELETE: ๅๆถๅ ณๆณจ
- ๅๅปบๅ ณๆณจ้็ฅ
-
app/api/posts/route.ts- GET: ่ทๅๆจๆๅ่กจ (ๆฏๆ userId ๅๆฐ)
- POST: ๅๅปบๆฐๆจๆ
- Fork ๆฌไปๅบ
- ๅๅปบ็นๆงๅๆฏ (
git checkout -b feature/AmazingFeature) - ๆไบคๆดๆน (
git commit -m 'Add some AmazingFeature') - ๆจ้ๅฐๅๆฏ (
git push origin feature/AmazingFeature) - ๅผๅฏ Pull Request
Made with โค๏ธ using Next.js