Commit Graph

36 Commits

Author SHA1 Message Date
2b752e9e1f feat: add idle yawn animation when user is inactive (F-4)
After 30s without user input on Elements tab, producer sprites cycle a
subtle yawn (translateY + scale) every 8s. Resets immediately on any
pointer/touch/key/scroll event. Implemented via wrapper div so
CharacterSprite internals are untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 03:53:20 +09:00
c638679502 feat: tint app background by time of day (F-5)
Adds dawn/day/dusk/night palette derived from device-local hour. Root
background fades over 1.5s on transitions; recalculated every 5 minutes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 03:46:23 +09:00
b1f7dbf216 docs: add micro fun patch plan (A-5, F-4, F-5)
3-item ~3h plan covering codex slot hints with recipe ingredients (A-5),
idle-mood character yawn animation after 30s of inactivity (F-4), and
device-time-of-day root background palette (F-5). Wrapper-based approach
keeps CharacterSprite untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 03:44:58 +09:00
91393daeec docs: mark Phase 0 plan as superseded after actual implementation
Phase 0의 8개 항목 모두 다른 패턴/위치로 이미 구현되어 commits 90ba98f
및 3676d8b에 반영됨. plan은 스펙 추적을 위해 보존하되, 실제 코드와의
차이를 명시.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 07:35:47 +09:00
3676d8b12c feat: integrate Phase 0 fun systems across screens and game store
Wires the new scaffolding (intro, discovery, ad slot, sfx/haptic, sprite art)
into existing systems and adds combo + lucky proc to the fusion loop.

- useGameStore: add combo meter (8s window, x1.5/x2/x3 caps), lucky proc
  (1% tier-up + gold bonus), sfx/haptic enabled toggles, welcome-gift
  selection, screen polish state for new visual systems.
- App.tsx: mount IntroSplash + AdBanner; listen for legendaryImpact event
  and apply 0.42s screen-shake keyframes.
- FusionScreen: render combo bar + lucky badge + DiscoveryHero overlay;
  trigger SFX, haptic, legendary impact event on fuse results.
- SettingsScreen: add SFX and haptic toggles wired to store flags.
- TutorialOverlay: integrate welcome-gift step at tutorial completion.
- CharacterSprite, ElementsScreen, EvolutionScreen, ShopScreen,
  OfflineRewardModal: adopt new sprite art and apply visual polish to
  match the discovery / scene aesthetic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 07:34:10 +09:00
90ba98fbf7 feat: add Phase 0 fun-pack scaffolding (intro, discovery, ad slot, sfx/haptic, sprite art)
- src/lib/sfx.ts: Web Audio rarity SFX synthesis + navigator.vibrate wrapper
- src/components/IntroSplash.tsx: 1.5s "당신이 세상의 첫 불꽃입니다" cold open
- src/components/DiscoveryHero.tsx: full-screen new-element reveal card
- src/components/AdBanner.tsx: rewarded-ad slot placeholder above tab bar
- src/platform/ads.ts: rewarded ad adapter (stub for Phase 1 SDK swap)
- src/assets/elements/: 4 base-element sprites + 8-frame animations + manifest

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 07:33:56 +09:00
ca6d6f15f8 docs: add fun & engagement overhaul spec and Phase 0 implementation plan
Six-category brainstorm (first-5min hook, mid-game stagnation, long-term
meta, social loops, ad-friendly monetization, polish/SFX) consolidated into
a master spec; Phase 0 hotfix decomposed into 8 implementer-ready tasks
(haptic, SFX, legendary shake, lucky fusion, combo meter, discovery hero,
welcome gift, ad slot).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 07:33:42 +09:00
be7c653490 chore: typecheck passes after Vite migration 2026-04-27 08:41:15 +09:00
67d02b4d33 fix: remove unused imports and dead code surfaced by stricter tsconfig 2026-04-27 08:41:07 +09:00
ca553aface feat: add Vite entry point and root App component 2026-04-27 08:36:18 +09:00
3e998b3232 fix: update consumer import paths after analytics module move 2026-04-27 08:34:24 +09:00
3079498e16 refactor: introduce analytics adapter behind src/platform/ 2026-04-27 08:29:14 +09:00
eeb070a188 feat: add domain-independent env config entry point 2026-04-27 08:27:50 +09:00
8b37a91210 refactor: route adaptive colors through local shim 2026-04-27 08:27:16 +09:00
4baa0f8fd6 feat: add local adaptive color shim to replace @toss/tds-colors 2026-04-27 08:26:08 +09:00
33d9c3a180 feat: add Vite index.html entry point 2026-04-27 08:25:01 +09:00
7e9bc4bfdd feat: add Vite config and TypeScript settings for web build 2026-04-27 08:24:55 +09:00
57d4a9bf17 chore: ignore Vite build outputs and IDE caches 2026-04-27 08:23:20 +09:00
78ab5bf1a9 chore: remove Granite/Toss config and entry files 2026-04-27 08:23:10 +09:00
fe96091989 chore: swap deps to Vite + React 18, remove Granite/Toss/RN 2026-04-27 08:22:59 +09:00
664fe881dd docs: Plan 1 (Week 1 엔진 마이그레이션) 구현 계획 작성 (JSA-2)
Granite + Apps-in-Toss + TDS 종속성을 제거하고 Vite + 순수 React로
전환하는 16개 task 구현 계획. 각 task는 2~5분 단위 step으로 분해되어
TDD 회귀 테스트, git 커밋 리듬, 명시적 코드 블록을 모두 포함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 08:18:34 +09:00
0106f9c597 docs: web 엔진 전환 + 광고 수익화 PWA 1차 출시 디자인 (JSA-2)
토스 인앱 타겟에서 웹 PWA 단독 배포로 방향 전환. 4주 영업일 기준
1차 출시 스코프, 광고 어댑터 인터페이스, PWA + 푸시 전략, 분석·
배포 계획을 단일 디자인 문서로 정리.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 08:08:03 +09:00
1430b64842 fix: npm run dev TypeScript 'as' 문법 변환 오류 수정 (JSA-60)
react-native 0.84.1의 index.js가 TypeScript 'as' 구문을 사용하지만
metro-react-native-babel-preset이 .js 파일에는 TypeScript transform을
적용하지 않아 dev 서버 실행 시 SyntaxError가 발생하던 문제 수정.

babel.config.js를 추가하여 react-native 패키지의 .js 파일에도
@babel/plugin-transform-typescript가 적용되도록 구성.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-03 07:41:42 +09:00
197bcc796a fix: 빌드 오류 수정 및 TypeScript 환경 설정 (JSA-56)
- build 스크립트를 ait build에서 직접 granite CLI 호출로 변경
  (ait build가 --no-cache 옵션을 granite에 전달하나 미지원 버그)
- typescript, @types/react, @types/react-dom, @types/webpack-env 설치
- @toss/tds-react-native 누락 peer dependency 설치
- tsconfig.json: ignoreDeprecations 및 webpack-env 타입 설정 추가
- require.context.ts: webpack/granite-js RequireContext 타입 호환 수정
- global.d.ts: 전역 타입 선언 파일 추가

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-02 04:19:30 +09:00
9800d067b9 feat: 프레스티지/업적 UI 컴포넌트 추가 및 게임 상태 업데이트 (JSA-55)
- AchievementToast, PrestigeModal, AchievementsScreen 컴포넌트 추가
- BottomTabBar에 업적 탭 연결
- useGameStore 프레스티지/업적 상태 로직 수정
- pages/index.tsx 라우팅 업데이트

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-02 04:19:19 +09:00
3178d880f2 feat: 튜토리얼 data-tutorial 마커 및 TutorialOverlay 앱 통합 (JSA-47)
- ElementsScreen: 첫 번째 obtained 원소 카드에 data-tutorial 스포트라이트 마커
- FusionScreen: 합성 슬롯1, 합성 결과 배너에 data-tutorial 마커
- EvolutionScreen: 첫 번째 강화 버튼에 data-tutorial 마커
- _app.tsx: AppContainer에 <TutorialOverlay /> 전역 마운트

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:44:17 +09:00
ff0ed541cd feat: 프레스티지 시스템 및 업적(Achievement) 상태 관리 구현 (JSA-47)
- PrestigeResult, AchievementStats 타입 추가
- performPrestige(): 프레스티지 시 골드/원소 초기화, 배율·타이틀 업데이트
- achieveUnlock(): 업적 조건 충족 여부 실시간 체크 및 보상 지급
- 업적 통계 (fuseCount, enhanceCount, tiersUnlocked, prestigeCount 등) 상태 추적

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:44:09 +09:00
466994da23 feat: 튜토리얼 오버레이 컴포넌트 추가 (TutorialOverlay, ProgressBar, Tooltip, WelcomeCard) (JSA-47)
- TutorialWelcomeCard: 첫 실행 시 게임 소개 카드
- TutorialProgressBar: 스텝 진행 상태 표시
- TutorialTooltip: 대상 요소 위/아래 스포트라이트 설명 툴팁
- TutorialOverlay: 전체 튜토리얼 흐름 조율 (4단계: 원소→합성슬롯→합성결과→강화)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:44:02 +09:00
6e323680d5 feat: CharacterSprite SVG 컴포넌트, FloatingOverlay, useFloatingItems 훅 추가 (JSA-47)
- CharacterSprite: 원소별 카와이 치비 스타일 SVG 캐릭터 (Tier/파티클 대응)
- FloatingOverlay: 골드/아이템 획득 시 플로팅 텍스트 애니메이션
- useFloatingItems: 플로팅 아이템 상태 관리 훅

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:43:55 +09:00
eacc91b7da feat: 프레스티지/업적 데이터, 캐릭터 비주얼, 게임 색상 시스템 추가 (JSA-47)
- src/data/achievements.json: 30개+ 업적 조건/보상 데이터
- src/data/prestige.json: 프레스티지 레벨별 배율 및 타이틀 테이블
- src/data/characterVisual.ts: 원소별 캐릭터 SVG 비주얼 파라미터
- src/styles/gameColors.ts: 게임 전용 색상 토큰 및 유틸 함수

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:43:48 +09:00
24c67f0c4c docs: 캐릭터 디자인 가이드, 색상 시스템, UI 에셋 가이드 및 스크립트 추가
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:43:39 +09:00
b817885445 chore: 앱 아이콘 및 게임 에셋 추가
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:43:34 +09:00
e4c0e69e7a chore: 프로젝트 설정 파일 추가 (.gitignore, tsconfig, granite.config 등)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 22:43:30 +09:00
c9ab987e02 feat: 설정 화면 구현 (JSA-37)
- SettingsScreen 컴포넌트 추가 (언어선택, BGM 토글, 앱 버전, 게임 초기화)
- 게임 데이터 초기화: 2단계 확인 다이얼로그 (localStorage 전체 삭제 후 리로드)
- 언어 설정: 한국어/English 세그먼트 버튼 (language 상태 persist)
- BGM 토글 스위치 (bgmEnabled 상태 persist)
- 마지막 저장 시각 및 오프라인 보상 최대 24시간 안내 텍스트
- BottomTabBar에 ⚙️ 설정 탭 추가
- useGameStore에 TabName 'settings', Language 타입 및 관련 액션 추가

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 00:41:36 +09:00
e1cc6b2ea8 perf: localStorage 저장 스로틀링 및 렌더링 최적화 (JSA-36)
- useGameStore: localStorage 저장을 최대 10초 간격으로 스로틀링
  (매 tick마다 저장하던 것을 개선)
- useGameStore: flushGameState() 내보내기 — beforeunload에서 즉시 저장
- useIdleTick: beforeunload 이벤트에 flushGameState 연결
- ElementsScreen: useGameStore 전체 구독 → 필요한 slice만 selector로 구독
- ElementsScreen: 원소 카드를 memo(ElementCard)로 추출
  (count/level 불변 시 리렌더 방지)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 00:36:40 +09:00
56bc71a71a feat: @apps-in-toss/analytics 이벤트 트래킹 구현 (JSA-32)
- src/analytics.ts: initAnalytics / trackGameEvent 유틸 추가
- _app.tsx: 앱 시작 시 Analytics.init 호출
- pages/index.tsx: app_open 이벤트 (플랫폼 시간, 보유 원소 수, 골드, 강화 레벨 합계)
- FusionScreen: fusion_completed (결과 tier/name, 골드 획득, 재료 ID)
- EvolutionScreen: enhancement_completed + level_up (원소 ID/이름, 새 레벨, 비용)
- ShopScreen: item_purchased (아이템 ID/이름, 가격, 희귀도)
- OfflineRewardModal: offline_reward_claimed (오프라인 시간, 골드, 원소 종류 수)
- package.json: @apps-in-toss/analytics ^2.3.0 명시적 추가

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-01 00:29:14 +09:00