Skip to content

yunsuper/whos-next

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

18 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฐ WHO'S NEXT? | ๋Ÿญํ‚ค ์ œ๋น„๋ฝ‘๊ธฐ ๋จธ์‹ 

Next.js TypeScript Matter.js License

"ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ์šด๋ช…!" ์„ธ๋ จ๋œ ๋ฌผ๋ฆฌ ์—”์ง„ ๊ธฐ๋ฐ˜์˜ ์ œ๋น„๋ฝ‘๊ธฐ ์ถ”์ฒจ๊ธฐ์ž…๋‹ˆ๋‹ค. ํŒ€ ๋‚˜๋ˆ„๊ธฐ, ์ˆ ๋ž˜ ์ •๊ธฐ, ๋ฉ”๋‰ด ๊ฒฐ์ • ๋“ฑ ๊ณต์ •ํ•œ ์„ ํƒ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์ˆœ๊ฐ„์— ์‚ฌ์šฉํ•˜์„ธ์š”.

๐Ÿš€ ์„œ๋น„์Šค ๋ฐ”๋กœ๊ฐ€๊ธฐ


๐Ÿ“ธ Screenshots

๋ฉ”์ธ ์ถ”์ฒจ ํ™”๋ฉด ๋‹น์ฒจ์ž ๋ฐœํ‘œ ๋ชจ๋‹ฌ

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ฌผ๋ฆฌ ์—”์ง„ ๊ธฐ๋ฐ˜ ์ถ”์ฒจ: Matter.js๋ฅผ ์ด์šฉํ•œ ์‹ค์ œ ๋กœ๋˜ ๋จธ์‹  ๊ฐ™์€ ์—ญ๋™์ ์ธ ๊ณต์˜ ์›€์ง์ž„.
  • ๋ชฐ์ž…๊ฐ ๋„˜์น˜๋Š” ์‚ฌ์šด๋“œ: Web Audio API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ณต์ด ๋ถ€๋”ชํžˆ๊ณ  ์„ž์ด๋Š” ์†Œ๋ฆฌ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ตฌํ˜„.
  • ๋‹น์ฒจ ์ถ•ํ•˜ ์‹œ๊ฐ ํšจ๊ณผ: Canvas Confetti๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹น์ฒจ์ž ๋ฐœํ‘œ ์ˆœ๊ฐ„์˜ ํ™”๋ คํ•œ ์—ฐ์ถœ.
  • ์‹ค์‹œ๊ฐ„ ์ฐธ๊ฐ€์ž ๊ด€๋ฆฌ: ์ฐธ๊ฐ€์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ์ฆ‰์‹œ ์ถ”์ฒจ ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜์˜.
  • ๋‹น์ฒจ ๋‚ด์—ญ ์ €์žฅ (History): ๋ธŒ๋ผ์šฐ์ € ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กœ๊ณ ์นจ ํ›„์—๋„ ๊ธฐ๋ก ์œ ์ง€. (๊ฐœ๋ณ„ ์‚ญ์ œ ๋ถˆ๊ฐ€๋กœ ๊ณต์ •์„ฑ ํ™•๋ณด)
  • ๊ณ ํ•ด์ƒ๋„ ํŒŒ๋น„์ฝ˜ & SEO: Next.js App Router์˜ ๋™์  ์•„์ด์ฝ˜ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ตœ์ ํ™”.
  • ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” & ํ™ˆ ํ™”๋ฉด ์•„์ด์ฝ˜: ๋ฐ˜์‘ํ˜• ๋””์ž์ธ๊ณผ ์Šค๋งˆํŠธํฐ ์ „์šฉ ์•„์ด์ฝ˜(apple-icon) ์ง€์›.
  • ๊ฐœ๋ฐœ์ž ์‘์› (Support): ์นด์นด์˜คํŽ˜์ด QR ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ๋”ฐ๋œปํ•œ ์ปคํ”ผ ํ•œ ์ž”์˜ ํ›„์› ๊ธฐ๋Šฅ.

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

  • Framework: Next.js 15 (App Router)
  • Language: TypeScript
  • State Management: Zustand
  • Physics Engine: Matter.js
  • Animation: Framer Motion & Canvas Confetti
  • Audio Logic: Web Audio API
  • Styling: Tailwind CSS

๐Ÿ› ๏ธ Troubleshooting

1. Canvas ๋ฆฌ์‚ฌ์ด์ง• ์‹œ ๋ฌผ๋ฆฌ ์—”์ง„ ์ขŒํ‘œ ๋ถˆ์ผ์น˜

  • ๋ฌธ์ œ: ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋Š” ์กฐ์ ˆ๋˜์ง€๋งŒ, ๋‚ด๋ถ€ ๋ฌผ๋ฆฌ ์—”์ง„(Matter.World)์˜ ๊ฒฝ๊ณ„(Boundary) ์ขŒํ‘œ๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š์•„ ๊ณต์ด ํ™”๋ฉด ๋ฐ–์œผ๋กœ ํƒˆ์ถœํ•˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: useEffect ๋‚ด์—์„œ ๋ฆฌ์‚ฌ์ด์ฆˆ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , Matter.Body.setPosition์„ ํ†ตํ•ด ๋ฐ”๋‹ฅ๊ณผ ๋ฒฝ๋ฉด ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ๋™์ ์œผ๋กœ ์žฌ๊ณ„์‚ฐํ•˜๋„๋ก ๋กœ์ง ์ˆ˜์ •.

2. Client-Side Hydration Error (Local Storage)

  • ๋ฌธ์ œ: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ UI๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„ Hydration failed ์—๋Ÿฌ ๋ฐœ์ƒ.
  • ์›์ธ: Next.js๋Š” ์„œ๋ฒ„์—์„œ ๋จผ์ € HTML์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋•Œ ์„œ๋ฒ„๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ localStorage์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ๋ Œ๋”๋งํ•จ. ๋ฐ˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋ ค ํ•˜๋ฉด์„œ ์ถฉ๋Œ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ:
    1. useState์™€ useEffect๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋งˆ์šดํŠธ ์ดํ›„์—๋งŒ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•˜๋„๋ก ์ œ์–ด.
    2. Zustand์˜ persist ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ skipHydration: true ์˜ต์…˜์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜, hasHydrated ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์™„๋ฃŒ ์ „๊นŒ์ง€ ๋ Œ๋”๋ง์„ ์œ ์˜ˆ(Suppress)ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ.

๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Copyright (c) 2026 yunsuper

About

๐ŸŽฐ ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ์šด๋ช…! ๋ฌผ๋ฆฌ ์—”์ง„ ๊ธฐ๋ฐ˜์˜ ์„ธ๋ จ๋œ ์ œ๋น„๋ฝ‘๊ธฐ ์ถ”์ฒจ๊ธฐ (Next.js 15, Matter.js)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors