e04e2b010c
feat(agent-office): AgentGrid renders 9 slots from GRID_SLOTS
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:57:20 +09:00
3fd923400f
feat(agent-office): PlaceholderCard for unstaffed slots
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:56:02 +09:00
6d1f4914ca
test(agent-office): cover pulse class for AgentCard state dot
...
Adds two tests verifying that working state adds the pulse class and
idle state does not. Pulse animation is part of the design spec §5
but was not covered by the original 8 tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:55:24 +09:00
1630109856
feat(agent-office): AgentCard component with state dot + badge
...
- state→color mapping via STATE_COLORS
- notification badge with 9+ overflow
- active prop for selected card border
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:52:34 +09:00
50d427e367
refactor(agent-office): derive ACTIVE_AGENT_IDS from GRID_SLOTS
...
Eliminates dual-write drift risk between ACTIVE_AGENT_IDS list
and GRID_SLOTS slot ordering. Single source of truth is now
GRID_SLOTS; ACTIVE_AGENT_IDS is computed from it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:50:42 +09:00
07f1d34f4c
feat(agent-office): centralize AGENT_META + grid slot layout
...
- 5 active agents (stock/music/insta/realestate/lotto) + 4 placeholders
- AGENT_META, GRID_SLOTS, STATE_COLORS in single constants module
- blog removed (replaced by insta)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:47:47 +09:00
aeeab6704f
fix(insta): SlateDetail JSON 객체 렌더 오류 + 카드 생성 시 자동 스크롤
...
(1) React error #31 fix: cover_copy/cta_copy는 객체({headline,body,accent_color}),
body_copies는 배열 — 직접 {slate.cover_copy}로 렌더하면 에러. 필드별로
분해 렌더하고, 10페이지 전체 카피(커버 1 + 본문 8 + CTA 1)를 detail에
노출하도록 SlateDetail 확장.
(2) UX: handleCreateSlate 시작 시 window.scrollTo(0, 0)로 상단 progress 배너
노출 보장. KeywordsPanel의 🎴 버튼도 부모 handleCreateSlate 위임으로
통합 — Trends/Cards 양쪽 어디서 눌러도 동일 흐름(배너 + 자동 미리보기).
(3) KeywordsPanel의 자체 slatePoll 제거 — 상단 ic-slate-progress 배너로
일원화하여 중복 진행 표시 회피.
2026-05-17 12:51:26 +09:00
6222b56716
feat(insta): trends 카드 생성 시 progress 배너 + 자동 미리보기 전환
...
Trends 탭의 🎴 버튼 클릭이 silent로 끝나 사용자에게 무동작처럼 보이던
이슈 fix. handleCreateSlate를 3초 간격 폴링으로 확장 (최대 8분):
- 시작/진행/성공/실패 상단 배너로 시각화
- 카드 생성 완료 시 자동으로 Cards 탭 전환 + 새 슬레이트 자동 선택
→ SlateDetail이 카피·이미지 미리보기 즉시 표시
- 실패 시 에러 메시지 + 클릭으로 dismiss
- "Claude 카피 추론 + Playwright 카드 10장 생성 중 (3~7분)" 안내 문구
2026-05-17 12:41:04 +09:00
06affd9614
feat(insta): swap google_trends source for youtube_trending (Google Trends API 폐기 대응)
2026-05-17 11:54:10 +09:00
b0eda14982
feat(insta): Trends tab — account focus + external trends + impact preview
...
- api.js: add getInstaTrends, instaCollectTrends, getInstaPreferences, putInstaPreferences helpers
- InstaCards.jsx: add Cards/Trends tab bar with URL sync (?tab=trends); add AccountFocusPanel (category weight sliders + save), ExternalTrendsPanel (Naver+Google trend rows + manual collect), PreferenceImpactPanel (next extract preview); existing 5-panel Cards tab preserved intact
- InstaCards.css: add ic-tabbar, ic-tab, ic-trends-grid, ic-panel base, ic-focus/ic-trend/ic-impact component styles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 18:04:47 +09:00
a8e411ec22
feat(insta): replace Blog Lab page with Insta cards UI
...
/blog-lab → /insta route. New InstaCards page consumes insta-lab API
(news/keywords/slates + 10-page card preview + prompt template editor).
25개 blog-marketing API helper 제거, 13개 insta helper 추가.
2026-05-16 02:47:19 +09:00
ec3ca5fcfa
feat(screener): canvas adds AI news node (12 nodes, 18 edges)
2026-05-13 23:51:09 +09:00
4b64761800
fix(screener): silence ESLint no-empty / no-undef in canvas helpers
...
빈 catch 블록 3곳에 의도 주석 추가, test-setup.js 의 beforeEach
명시적 import. 우리 신규 코드의 lint error 0으로 정리.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-13 21:56:42 +09:00
1449342f96
style(screener): canvas mode styles (toggle, nodes, toolbar, layout)
2026-05-13 21:55:10 +09:00
2effc47593
feat(screener): integrate mode toggle (form|canvas) with lazy canvas
2026-05-13 21:52:31 +09:00
f8574f1b45
feat(screener): CanvasLayout (canvas + result grid)
2026-05-13 21:51:16 +09:00
2da7255c03
feat(screener): ScreenerCanvas root component (react-flow + 11 nodes + 16 edges)
2026-05-13 21:49:19 +09:00
b4ad0b1abf
feat(screener): CanvasToolbar floating panel
2026-05-13 21:47:52 +09:00
4e134eb59a
feat(screener): ScoreNodeCard with weight slider + active toggle + params
2026-05-13 21:46:09 +09:00
b1a1bb22f9
feat(screener): GateNodeCard for hygiene gate
2026-05-13 21:43:39 +09:00
f10fa062e9
feat(screener): FixedNodeCard for data/combine/result nodes
2026-05-13 21:43:25 +09:00
40e3e2cf39
feat(screener): ModeToggle segment control component
2026-05-13 21:42:07 +09:00
1505518ca6
feat(screener): useCanvasLayout hook (node positions + reset)
2026-05-13 21:40:37 +09:00
2fd2ea33c7
feat(screener): useScreenerMode hook (form|canvas + localStorage)
2026-05-13 21:38:31 +09:00
c60c32b7f2
feat(screener): add canvas layout constants (11 nodes, 16 edges)
2026-05-13 21:35:27 +09:00
5f95f55271
chore(screener): add @xyflow/react + vitest test environment
2026-05-13 21:32:05 +09:00
ca248891c2
feat(stock): 스크리너 모바일 카드 레이아웃 + 비교 적용
...
데스크탑은 기존 테이블 유지, <768px에서는 종목별 카드로 전환:
- 카드 헤더: #순위 | 종목명+코드 | 총점
- 비교 모드 ON 시: 순위Δ/점수Δ 두 줄
- 노드 칩 (가로 wrap)
- 진입/손절/익절/위험 2×2 그리드 (라벨 + 원 단위)
- 빠진 종목(OUT)도 카드로 회색 표시
CSS: .screener-mobile-list / .screener-mcard / .screener-result-head /
.screener-warn 추가. useIsMobile 훅으로 분기.
2026-05-13 12:26:16 +09:00
55d2adeaf5
feat(stock): 미리보기 결과 세션 히스토리 + 결과 비교 컬럼
...
- useScreenerRun: 실행 시마다 previewHistory에 누적 (최대 10, 메모리만 —
새로고침 시 사라짐, DB 부하 없음). top_ticker/score 요약 포함.
- RunHistoryList: '이번 세션 미리보기'와 '저장된 실행' 두 섹션으로 분리.
미리보기 항목은 클릭으로 결과 표 로드 + '비교' 버튼으로 비교 대상 지정.
- ResultTable: compareWith prop으로 비교 모드. 순위Δ(▲▼NEW)·점수Δ
컬럼 추가, 이번엔 빠진 종목은 'OUT'으로 별도 섹션에 회색 표시.
- 헤더에 'vs HH:MM:SS (통과 X)' 라벨로 비교 대상 명시.
2026-05-13 08:16:21 +09:00
6fd70dd802
feat(stock): 스크리너 노드/컬럼 hover 설명 추가
...
- ScoreChips: 아이콘 제거, 풀 라벨 표시 (외국인/거래량급증/20일모멘텀/
52주신고가/RS레이팅/이평선정배열/VCP수축). title에 노드 의미 + 70점
강조 안내.
- ResultTable: 각 컬럼 헤더에 ⓘ 마커 + 의미 hover 설명. 진입/손절/익절
컬럼명에 '(원)' 명시. 상단에 hover 가이드 한 줄 추가.
2026-05-13 07:52:14 +09:00
e6659a416a
style(stock): 스크리너 모바일 적층 + 표 가로 스크롤
2026-05-12 14:23:16 +09:00
3abd46c0fd
docs(stock): CLAUDE.md 스크리너 API 표 추가 + Stock 페이지 링크
2026-05-12 14:22:18 +09:00
c42d3fe8d4
feat(stock): ResultTable 본구현 + ScoreChips (노드 칩 + 70점 강조)
2026-05-12 14:21:05 +09:00
1e8542f6c7
feat(stock): GatePanel 자동 폼 + GlobalControls (TopN/ATR/RR + 3버튼)
2026-05-12 14:19:36 +09:00
a11475db57
feat(stock): NodeCard 자동 폼 (param_schema 기반) + NodePanel 통합
2026-05-12 14:18:22 +09:00
bc2c020f71
feat(stock): /stock/screener 페이지 골격 + hooks 4개 + 컴포넌트 stub 6개
2026-05-12 14:15:36 +09:00
cd6072727f
feat(stock): /stock/screener 라우트 + 임시 placeholder
2026-05-12 14:13:26 +09:00
42ebd5a87c
feat(stock): screener API 헬퍼 7개
2026-05-12 14:11:51 +09:00
a20315ce34
feat(stock): 포트폴리오 현재가에 NXT 시간외 거래 뱃지
...
백엔드 응답의 price_session에 따라 NXT 프리마켓/애프터마켓 거래 중인
종목에 작은 'NXT' / 'NXT 프리' 뱃지를 표시. 툴팁에 거래 시각 노출.
정규장 마감 후에도 평가금액이 자연스럽게 이어지는 흐름을 시각적으로 보강.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-11 19:32:26 +09:00
baf34dd7aa
feat(lotto): 구매탭 4주 추세 차트(너 vs 큐레이터 평균 일치)
2026-05-11 09:06:54 +09:00
4ef76f6cce
feat(lotto): 구매탭에 자동 채점 일치수 배지 + 4등↑ 플래그
2026-05-11 09:05:22 +09:00
0bf1233e96
feat(lotto): 분석탭 → 자료실 라벨 + 첫 진입 모든 패널 접힘
2026-05-11 09:03:10 +09:00
ff7ac48c6b
feat(lotto): DecisionCard + BulkPurchaseButton, BriefingTab 단일 화면 재구성
2026-05-11 09:00:59 +09:00
329141c732
feat(lotto): DecisionCard 하위 컴포넌트(Pick/Tier/Toggle/Retro) + 스타일
2026-05-11 08:59:00 +09:00
cd3c538eb7
feat(lotto): useReview 훅 + useBriefing 4계층 정규화
2026-05-11 08:57:14 +09:00
9d2dfad512
feat(api): review + bulkPurchase 헬퍼
2026-05-11 08:56:10 +09:00
95edc9d232
feat(web-ui): 배치 장르 목록 동적 fetch (POOLS 추가 시 자동 반영)
2026-05-10 23:53:49 +09:00
a80b869878
feat(web-ui): Create 탭 배치 생성 섹션 + BatchProgress 폴링
2026-05-10 19:00:42 +09:00
93d5f49cdb
feat(web-ui): PipelineStartModal '원하는 이미지 분위기' 메인 필드로 노출
2026-05-10 16:17:36 +09:00
3f5cd32c77
feat(web-ui): SetupTab visual_defaults 6옵션 확장
2026-05-09 13:36:26 +09:00
120c39a3ef
feat(web-ui): PipelineDetailModal + 카드 mini 미리보기
2026-05-09 13:34:54 +09:00