Commit Graph

144 Commits

Author SHA1 Message Date
b88ae331d7 fix(portfolio): 모바일에서 편집/PDF 툴바 플로팅 버튼으로 표시
768px 이하에서 display:none이던 toolbar를 우하단 FAB 스타일로 변경.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 15:21:14 +09:00
a56923a6b3 refactor(home): Profile 섹션 portfolio API 연동
- /api/profile/public에서 프로필·기술스택 동적 로드
- 서비스 미가동 시 하드코딩 폴백 유지
- "프로필 수정" → "포트폴리오 보기" Link로 교체
- 타임라인 섹션 제거 (포트폴리오 페이지에서 관리)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 14:38:18 +09:00
a6dd2ef747 feat(portfolio): 포트폴리오 페이지 전체 구현
- 3탭 구조: 프로필&경력, 프로젝트, 자기소개
- 비밀번호 인증 → 편집 모드
- 클립보드 복사, PDF 내보내기 (window.print)
- 사이버펑크 테마 CSS, 모바일 반응형

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 14:37:25 +09:00
bebd55874c fix(todo): 모바일 최적화 — 터치 타겟 44px, 라벨 버튼, 확인 시트, 탭 인디케이터
- 카드 액션 버튼 36px→44px + 아이콘+텍스트 라벨 (모바일)
- 날짜 필터/입력 터치 타겟 36px min-height로 확대
- 빈 상태 메시지 모바일 적절하게 변경 ("드래그하여 이동"→"아직 항목이 없습니다")
- 완료 비우기 MobileSheet 확인 다이얼로그 (모바일)
- 완료 탭 내 "비우기" 버튼 추가
- SwipeableView 활성 탭 하단 인디케이터 + 44px 높이
- 폼 라벨 14px, 입력 16px (iOS 줌 방지)
- 모바일 컬럼/패널 배경·보더 제거로 공간 절약

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:39:09 +09:00
6cbdf95596 fix(agent-office): critical bug fixes from code review — wall pathfinding, drag/click, DPR, culling
- Pathfinder.setBlocked: remove blocked.clear() to preserve wall tiles set by setWalls()
- Pathfinder.findPath: fix dead-code goal exception — remove redundant isBlocked check, keep goal-tile exception in single guard
- OfficeRenderer: track mouseDownPos/_wasDragging; expose wasDragging() method for click-after-drag suppression
- OfficeRenderer._render: track _lastDpr to detect monitor DPR changes; use setTransform instead of scale to avoid accumulation
- TileMap.render: use clientWidth/clientHeight for viewport culling (CSS space, not buffer pixels)
- TaskTab: wrap JSON.parse in try/catch to prevent crash on malformed result_data

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 09:40:08 +09:00
3e4f2e0934 chore(agent-office): remove legacy dashboard components replaced by v2 UI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 08:38:18 +09:00
31fc2dfb0d refactor(agent-office): rewrite CSS for full-screen canvas layout with mobile bottom sheet
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 08:38:15 +09:00
403046c4d0 refactor(agent-office): rewrite AgentOffice with full-screen canvas and side panel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 08:38:11 +09:00
b03f438935 refactor(agent-office): rewrite useOfficeCanvas hook for new renderer API
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 08:38:07 +09:00
22a37cf6d9 refactor(agent-office): extend useAgentManager with lotto agent and refresh triggers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 08:38:04 +09:00
6bd6cbd635 feat(agent-office): add SidePanel container with 4-tab layout 2026-04-27 08:35:00 +09:00
4c930c2cf8 feat(agent-office): add LogTab with auto-scroll and level coloring 2026-04-27 08:34:56 +09:00
efeecadbef feat(agent-office): add TokenTab with usage stats and cache hit rate 2026-04-27 08:34:53 +09:00
a712a2f43b feat(agent-office): add TaskTab component with expandable task history 2026-04-27 08:34:50 +09:00
ce245609f9 feat(agent-office): add CommandTab with quick actions, params, and approval UI 2026-04-27 08:34:48 +09:00
43904d033a feat(agent-office): add TopBar component with theme and zoom controls 2026-04-27 08:34:45 +09:00
379ad41e32 feat(agent-office): add overlay renderer with labels, badges, and speech bubbles 2026-04-27 08:33:36 +09:00
f3de315272 refactor(agent-office): wire real AgentSprite import, remove Phase 1 stub 2026-04-27 08:32:22 +09:00
71fe91cc85 feat(agent-office): add SpriteLoader with procedural fallback for Phase 2 2026-04-27 08:32:19 +09:00
7dd2cc9793 refactor(agent-office): rewrite AgentSprite with BFS movement and idle wandering 2026-04-27 08:32:16 +09:00
f01a432329 feat(agent-office): add 16x32 procedural sprite with 5 states and 4 directions 2026-04-27 08:32:13 +09:00
d4279f2e3b refactor(agent-office): rewrite OfficeRenderer with game loop, zoom/pan, Y-sorting 2026-04-27 08:29:02 +09:00
8207205418 feat(agent-office): add procedural furniture renderer with theme support 2026-04-27 08:28:59 +09:00
95b3f2b37c refactor(agent-office): rewrite TileMap with theme support and viewport culling 2026-04-27 08:28:56 +09:00
eab8ef295b feat(agent-office): add BFS pathfinder for agent movement 2026-04-27 08:28:53 +09:00
f11f9c529e feat(agent-office): expand office map to 32x20 with 5 agents and break room 2026-04-27 08:28:49 +09:00
d24c04f9fa feat(agent-office): add theme data definitions (modern/retro/minimal) 2026-04-27 08:28:46 +09:00
b8eb290e4d feat(travel): 좌표 없는 커스텀 지역에 항상 "위치 지정" 버튼 표시
지역 변경 직후뿐 아니라, 앨범의 지역이 좌표 미지정 커스텀
지역이면 헤더에 핀 버튼을 상시 노출. 기존 좌표가 있으면
RegionPinPicker에 초기값으로 전달.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 07:20:00 +09:00
fba101500e feat(travel): 지도 핀 마커 + 위치 지정 모달 (Phase 2)
MiniMap에 Point geometry 핀 마커 렌더링, 앨범 지역 변경 후
"위치 지정" 버튼으로 RegionPinPicker 모달을 열어 좌표 저장.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 07:12:17 +09:00
9b8daeffa4 feat(travel): 앨범 지역 편집 UI — 텍스트 입력 + 자동완성
- AlbumDetail 헤더의 지역 라벨 클릭 → 인라인 편집 모드
- 기존 지역 목록 자동완성 제안 + 새 지역명 직접 입력 가능
- Enter/클릭으로 저장, Esc/✕로 취소
- PUT /api/travel/albums/{album}/region 호출 → 앨범 목록 갱신

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 12:52:10 +09:00
59bb05ba22 fix(travel): 앨범 커버 지정이 반영되지 않던 문제 수정
- useTravelData: 앨범 목록을 GET /api/travel/albums API로 빌드 (커버 정보 포함)
- 커버 지정 성공 시 refreshAlbums → 앨범 카드 즉시 갱신
- onCoverChange 콜백 체인: Travel → AlbumDetail → HeroLightbox

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 12:32:46 +09:00
093ca6635a feat(travel): 사진 그리드 안정화 + 앨범 커버 지정 버튼 + 동기화 결과 개선
- MasonryGrid: CSS columns → CSS Grid로 전환 (스크롤 시 정렬 위치 변동 방지)
- HeroLightbox: "커버로 지정" 버튼 추가 (PUT /api/travel/albums/{album}/cover 호출)
- Travel: 동기화 토스트에 신규 폴더 발견 수 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 12:13:14 +09:00
047e15cad3 fix(travel): AlbumDetail 스크롤 안 되는 문제 수정 — SwipeableView 높이 체인 + PAGE_SIZE 40
SwipeableView가 fixed overlay 안에서 flex 높이를 채우지 못해 스크롤 불가 + IntersectionObserver 미동작.
scoped CSS로 높이 체인 복원, PAGE_SIZE 20→40으로 증가.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 04:42:59 +09:00
d6ace70bff feat(travel): 사진 동기화 버튼 추가 — POST /api/travel/sync 호출 + 결과 토스트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 01:17:10 +09:00
27dca3df69 refactor(travel): Travel.jsx 리팩토링 — 컴포넌트 분리 + 앨범 카드 기반 UI
모놀리식 Travel.jsx(1024줄)를 정리하여 useTravelData, MiniMap,
AlbumCard, AlbumDetail 등 추출된 컴포넌트를 조합하는 깔끔한
메인 컨테이너로 교체. Travel.css에서 photo-mosaic, photo-card,
lightbox, filmstrip 등 개별 컴포넌트 CSS로 이동된 스타일 제거.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:28:27 +09:00
439844cd14 feat(travel): AlbumDetail 오버레이 — 사진/영상 탭 + 진입/이탈 애니메이션
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:25:30 +09:00
085481e104 feat(travel): HeroLightbox — shared element transition + 스와이프 탐색
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:22:49 +09:00
f9495f0c30 feat(travel): VideoTab 플레이스홀더 — 영상 탭 UI 셸
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:19:45 +09:00
4655e9ab3b feat(travel): MasonryGrid 컴포넌트 — CSS columns Masonry + 무한스크롤
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:19:41 +09:00
5efb9525d5 feat(travel): AlbumCard 컴포넌트 — 대표사진 + 그라디언트 + 메타정보
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:19:37 +09:00
201601dc95 feat(travel): MiniMap 컴포넌트 — 접기/펼치기 + 전체보기
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 01:19:33 +09:00
1072a5eb21 fix(travel): useTravelData AbortController 및 에러 핸들링 보완
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 01:14:54 +09:00
c9df3e0e88 feat(travel): useTravelData 훅 추출 — API/캐싱/페이지네이션 로직 분리
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 01:13:11 +09:00
ca9929faac fix(a11y): 글로벌 prefers-reduced-motion 추가 + Blog 버튼 위치 수정
- App.css: 글로벌 reduced-motion 블록 (모든 animation/transition 비활성화)
- index.css: scroll-behavior: smooth → auto (reduced-motion)
- BlogMarketing.css: 스피너 reduced-motion 처리
- Blog.css: 플로팅 토글 버튼 bottom-nav 위로 재배치

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 15:12:24 +09:00
0198fec43c refactor(responsive): Phase 3 코드 품질 개선
- Blog/BlogMarketing/Subscription/MusicStudio: 미사용 useIsMobile 제거
- Subscription: 미사용 Link import 제거
- Blog.css: 중복 display:block 제거
- BlogMarketing: dead prop onGenerate 제거
- Todo: 카드 버튼 터치 타겟 26→36px 확대

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 15:06:56 +09:00
901cfd7e1b fix(responsive): Phase 3 spec compliance 수정
- Blog: 태그 필터 칩 바 모바일 가로 스크롤 추가
- BlogMarketing: FAB 전 탭에서 표시 + 대시보드 480px 1컬럼
- Subscription: PullToRefresh refreshKey 패턴 적용, FAB→공고 목록 탭 이동
- Todo: FAB 라벨 "할일 추가"로 spec 일치

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 15:02:12 +09:00
c7cad9da61 feat(effect-lab): 모바일 반응형 — SwordStream 터치 대응
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 14:55:50 +09:00
28a80b5bd7 feat(agent-office): 모바일 반응형 — 바텀시트 에이전트 상세
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 14:55:40 +09:00
00f8e00436 feat(todo): 모바일 반응형 — 스와이프 칸반 + FAB + 바텀시트 입력
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 14:55:05 +09:00
326d54c73f feat(music): 모바일 반응형 — FAB + 풀다운 리프레시 + 1컬럼 라이브러리
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 14:54:04 +09:00