Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

99 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

BLACK MAGIC

Y2K ํ•˜์ดํ‹ด ๋ณ€์‹  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์›น ๊ฒŒ์ž„
๋„ˆ๋“œ โ†’ ํ€ธ์นด โ†’ ์นœ๊ตฌ๋ฅผ ๋•๋Š” ์กด์žฌ๋กœ. ์„ ํƒ์ด 5์ถ• ์„ฑํ–ฅ ์ ์ˆ˜๋กœ ์Œ“์—ฌ 5์ข… ๋ฉ€ํ‹ฐ ์—”๋”ฉ์œผ๋กœ ์ด์–ด์ง„๋‹ค.

Live Demo

Vite React TypeScript Zustand GSAP Tailwind


โœจ ์†Œ๊ฐœ

๋ฏธ๊ตญ ํ•˜์ดํ‹ด ์˜ํ™” ๋ฌด๋“œ์˜ ํ•™๊ต๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ, 4๋ช…์˜ ๋„ˆ๋“œ ์บ๋ฆญํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ ๋งˆ๋ฒ•์œผ๋กœ ์ž์‹ ์„ ๋ณ€ํ™”์‹œํ‚ค๊ณ (Stage 1) ๊ทธ ํž˜์œผ๋กœ ์นœ๊ตฌ๋ฅผ ๋•๋Š”(Stage 2) ์—ฌ์ •์„ ๋”ฐ๋ผ๊ฐ„๋‹ค. ํƒ์ƒ‰ยท์ˆ˜์ง‘ยท์กฐํ•ฉยท๋ณ€์‹ ยท์„ ํƒ์ด ๋ชจ๋‘ 5๊ฐœ ์„ฑํ–ฅ ์ถ•์— ๋ˆ„์ ๋˜์–ด, ๋งˆ์ง€๋ง‰์—” ํ”Œ๋ ˆ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ข…ํ•ฉํ•œ ์„ฑํ–ฅ ์ง„๋‹จ ์นด๋“œ๋กœ ๋งˆ๋ฌด๋ฆฌ๋œ๋‹ค.

์ƒ์„ธ ์ŠคํŽ™์€ docs/PRD.md๋ฅผ ๋‹จ์ผ ์ง„์‹ค ์†Œ์Šค(SSOT) ๋กœ ์ฐธ์กฐํ•œ๋‹ค.

๐ŸŽฎ ํ”Œ๋ ˆ์ด ํ๋ฆ„

์‹œ์ž‘ ๊ฒŒ์ดํŠธ(ํƒญํ•˜์—ฌ ์‹œ์ž‘) โ†’ ์ธํŠธ๋กœ โ†’ ๋ฉ”์ธ ๋ฉ”๋‰ด โ†’ ์บ๋ฆญํ„ฐ ์„ ํƒ
   โ†’ Stage 1 (4์žฅ์†Œ ์žฌ๋ฃŒ ์ˆ˜์ง‘ โ†’ ๋ฌผ์•ฝ ์ œ์ž‘ โ†’ ๋ณ€์‹ )
   โ†’ Stage 2 (๋ณต๋„์—์„œ ์นœ๊ตฌ ํƒ1 โ†’ ๊ณ ๋ฏผ ํ•ด๊ฒฐ โ†’ ์„ ํƒ)
   โ†’ ์—”๋”ฉ ์ง‘๊ณ„(5์ถ•) โ†’ ๊ฒฐ๊ณผ ์นด๋“œ โ†’ ๊ณต์œ  / ๋‹ค์‹œํ•˜๊ธฐ

๐Ÿซ ๋ฌด๋Œ€ โ€” Stage 1: Become The Queen

Library
๐Ÿ“š Library ยท ๋ธ”๋ž™ ๋งค์ง ๋ถ
Gym
๐Ÿคธ Gym ยท ๋ฆฌ๋ณธ
Garden
๐ŸŒธ Garden ยท ๊ฝƒ
Auditorium
๐ŸŽค Auditorium ยท ๋ฐ˜์ง์ด

๐Ÿ‘‘ ์บ๋ฆญํ„ฐ

๋ฃจ๋‚˜
๋ฃจ๋‚˜
๊ณต๋ถ€๋ฒŒ๋ ˆ
๋ฏธ์˜ค
๋ฏธ์˜ค
์˜ˆ์ˆ ๊ฐ€
์ œ๋กœ
์ œ๋กœ
๊ฒŒ์ž„ ๋•ํ›„
์‚์‚
์‚์‚
์†Œ์‹ฌ ํŒจ์…”๋‹ˆ์Šคํƒ€

๐Ÿงฉ ํ•ต์‹ฌ ์‹œ์Šคํ…œ

  • Phase ์ƒํƒœ๋จธ์‹  โ€” ๋ชจ๋“  ํ™”๋ฉด ์ „ํ™˜์€ appStore์˜ phase ์ „์ด๋กœ๋งŒ(์ง์ ‘ ๋ผ์šฐํŒ… ์—†์Œ).
  • ์ฝ˜ํ…์ธ  ์™ธ๋ถ€ํ™” โ€” ๋Œ€์‚ฌยท์„ ํƒ์ง€ยท์ ์ˆ˜ ๊ฐ€์ค‘์น˜๋ฅผ src/data/*.json์œผ๋กœ ๋ถ„๋ฆฌ(๊ธฐํš์ž๊ฐ€ ์ฝ”๋“œ ์—†์ด ์ˆ˜์ •).
  • 5์ถ• ์ ์ˆ˜ ์—”๋”ฉ โ€” LEADERSHIP / TREND / CREATE / DREAM / SUPPORT ๋ˆ„์  โ†’ lib/scoring.ts ์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ 5์ข… ์—”๋”ฉ ์‚ฐ์ถœ(๋™์  ์šฐ์„ ์ˆœ์œ„ ๋ฃฐ ํฌํ•จ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ณด์œ ).
  • ์„ธ์ด๋ธŒ / ์ด์–ดํ•˜๊ธฐ โ€” ์ง„ํ–‰๋งˆ๋‹ค localStorage ์ž๋™ ์ €์žฅ, schemaVersion ๊ฒ€์ฆ, ์žฌ๋ฐฉ๋ฌธ ์‹œ ์ „ ์Šฌ๋ผ์ด์Šค ๋ณต์›.
  • ์—ฐ์ถœ(GSAP) โ€” Split Open ยท ์•„์ดํ…œ ์ˆ˜์ง‘ fly ยท ๋ณ€์‹  ํŒŒํ‹ฐํด ยท ๋ฌผ์•ฝ ๋ณด๊ธ€๊ฑฐ๋ฆผ ยท 5์ถ• ๊ฒŒ์ด์ง€ ยท ์—”๋”ฉ ์นด๋“œ. prefers-reduced-motion ํด๋ฐฑ.
  • ์˜ค๋””์˜ค โ€” Howler.js BGM, ์‹œ์ž‘ ๊ฒŒ์ดํŠธ ํƒญ์—์„œ ์ž๋™์žฌ์ƒ ์ฐจ๋‹จ ์—†์ด ์Œ์•…ยท์ธํŠธ๋กœ ์‹ฑํฌ.

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

์˜์—ญ ์„ ํƒ
ํ”„๋ ˆ์ž„์›Œํฌ Vite + React 19 + TypeScript (strict)
์ƒํƒœ๊ด€๋ฆฌ Zustand (์Šฌ๋ผ์ด์Šค ๋ถ„๋ฆฌ)
์Šคํƒ€์ผ Tailwind CSS v4 (+ ๋””์ž์ธ ํ† ํฐ @theme)
์—ฐ์ถœ GSAP (ํƒ€์ž„๋ผ์ธ / ํŒŒํ‹ฐํด / motion)
์‚ฌ์šด๋“œ Howler.js (๋กœ์—ดํ‹ฐํ”„๋ฆฌ SFXยทBGM)
์ €์žฅ localStorage (+ schemaVersion)
๋ฐฐํฌ Vercel

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

์š”๊ตฌ์‚ฌํ•ญ: Node 20+ / npm

npm install
npm run dev      # ๊ฐœ๋ฐœ ์„œ๋ฒ„ (http://localhost:5173)
npm run build    # ํƒ€์ž…์ฒดํฌ(tsc) + ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run preview  # ๋นŒ๋“œ ๊ฒฐ๊ณผ ๋กœ์ปฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm test         # ๋‹จ์œ„ ํ…Œ์ŠคํŠธ (scoring / save)

๐Ÿ“ฆ ๋ฐฐํฌ (Vercel)

์ •์  SPA๋ผ Vercel์ด Vite๋ฅผ ์ž๋™ ๊ฐ์ง€ํ•œ๋‹ค(๋ณ„๋„ ์„ค์ • ๋ถˆํ•„์š”).

  1. GitHub ์ €์žฅ์†Œ๋ฅผ Vercel์— import
  2. Framework Preset: Vite (์ž๋™), Build: npm run build, Output: dist
  3. Deploy โ†’ main ๋ธŒ๋žœ์น˜ push๋งˆ๋‹ค ์ž๋™ ๋ฐฐํฌ

๋ฐฐํฌ ํ›„ index.html์˜ og:image๋ฅผ ์‹ค์ œ ๋„๋ฉ”์ธ ์ ˆ๋Œ€ URL๋กœ ๋ฐ”๊พธ๋ฉด ๊ณต์œ  ์นด๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์•ˆ์ •์ ์ด๋‹ค(docs/KNOWN_ISSUES.md ์ฐธ์กฐ).

๐Ÿ—‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/
  state/        # Zustand ์Šฌ๋ผ์ด์Šค (app/game/quest/inventory/score/ending)
  data/         # ์ฝ˜ํ…์ธ  JSON + ํƒ€์ž…๋“œ ๋กœ๋” โ€” ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌ
  types/        # TS ์ธํ„ฐํŽ˜์ด์Šค (PRD 10์žฅ)
  scenes/       # phase๋ณ„ ํ™”๋ฉด + PhaseRouter
  components/
    ui/         # ๊ณต์šฉ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ (Button/Modal/GameIcon โ€ฆ)
    shell/      # 4๋ถ„ํ•  ์…ธ (Header/CharacterPanel/Inventory)
  lib/          # scoring ยท save ยท audio ยท fx(์—ฐ์ถœ) ยท ํ›…
  styles/       # ๋””์ž์ธ ํ† ํฐ(@theme) + ๊ธ€๋กœ๋ฒŒ/์”ฌ CSS
public/asset/   # ์บ๋ฆญํ„ฐยท์”ฌยท์•„์ด์ฝ˜ยท๋กœ๊ณ  ๋“ฑ ์‹ค์ œ ์—์…‹
docs/PRD.md             # ์ œํ’ˆ ์š”๊ตฌ์‚ฌํ•ญ (SSOT)
docs/KNOWN_ISSUES.md    # ์ ๊ฒ€ ๊ฒฐ๊ณผ / ๋‚จ์€ ์ด์Šˆ / ์ถœ์‹œ ์ „ QA ์ฒดํฌ๋ฆฌ์ŠคํŠธ
CLAUDE.md               # ์ž‘์—… ๊ทœ์น™

๐Ÿ“ ์•„ํ‚คํ…์ฒ˜ ์›์น™

  • ํ™”๋ฉด ์ „ํ™˜์€ Phase ์ƒํƒœ๋จธ์‹ ์œผ๋กœ๋งŒ. ์ง์ ‘ ๋ผ์šฐํŒ… ๊ธˆ์ง€.
  • ๋ชจ๋“  ์ฝ˜ํ…์ธ ๋Š” src/data/*.json์œผ๋กœ ์™ธ๋ถ€ํ™”.
  • ๋””์ž์ธ์€ ํ† ํฐ์„ ํ†ตํ•ด์„œ๋งŒ(์ปฌ๋Ÿฌ/ํฐํŠธ ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€).
  • ์—”๋”ฉ ์‚ฐ์ถœ์€ lib/scoring.ts ์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ(ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ).

๐Ÿงช ๊ฐœ๋ฐœ ๋„๊ตฌ (DEV ์ „์šฉ)

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฉฐ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค(import.meta.env.DEV ๊ฒŒ์ดํŠธ).

  • ํ™”๋ฉด ํ•˜๋‹จ Phase ์ ํ”„ ๋ฐ”๋กœ phase ์ฆ‰์‹œ ์ „ํ™˜.
  • ์ฝ˜์†”: __BM__.setPhase('STAGE1') ยท __BM__.seedDemo() ยท __BM__.resetGame() ยท __BM__.getState()

๐Ÿ“„ ๋ฌธ์„œ

  • docs/PRD.md โ€” ์ œํ’ˆ ์š”๊ตฌ์‚ฌํ•ญ (SSOT)
  • docs/KNOWN_ISSUES.md โ€” ์ ๊ฒ€ ๊ฒฐ๊ณผ ยท ๋‚จ์€ ์ด์Šˆ ยท ์ถœ์‹œ ์ „ QA
  • CLAUDE.md โ€” ์ž‘์—… ๊ทœ์น™

โš ๏ธ ์ €์ž‘๊ถŒ

๋ณธ ๊ฒŒ์ž„์€ Little Mix "Black Magic"์˜ ๋ฌด๋“œ๋ฅผ ์žฌํ•ด์„ํ•œ ์˜ค๋ฆฌ์ง€๋„ 2์ฐจ ์ฐฝ์ž‘์ด๋‹ค. ๊ฐ€์‚ฌ ์›๋ฌธยท์Œ์›ยทMV ์˜์ƒยท์‹ค์ œ ์ธ๋ฌผ ์™ธํ˜•์€ ์ฝ”๋“œ/์—์…‹์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“  ์บ๋ฆญํ„ฐยท๋ฐฐ๊ฒฝ์€ ์˜ค๋ฆฌ์ง€๋„ ๋””์ž์ธ์ด๋ฉฐ, ํŠน์ • ์•„ํ‹ฐ์ŠคํŠธยท๋ ˆ์ด๋ธ”ยท๊ณก๊ณผ ๋ฌด๊ด€ํ•˜๋‹ค.

About

๐Ÿช„ Y2K ํ•˜์ดํ‹ด ๋ณ€์‹  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์›น ๊ฒŒ์ž„ โ€” ๋„ˆ๋“œ์—์„œ ํ€ธ์นด๋กœ, 5์ถ• ์„ฑํ–ฅ ์ ์ˆ˜๋กœ ๊ฐˆ๋ฆฌ๋Š” ๋ฉ€ํ‹ฐ ์—”๋”ฉ ยท ViteยทReactยทTSยทZustandยทGSAP

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages