Add ETFCollector (KRX master data) and ETFPriceCollector (pykrx OHLCV)
with corresponding admin API endpoints and frontend collection UI buttons.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Hash passwords with SHA-256 on frontend before transmission to prevent
raw password exposure in network traffic and server logs
- Switch login endpoint from OAuth2 form-data to JSON body
- Auto-create admin user on startup from ADMIN_USERNAME/ADMIN_PASSWORD
env vars, solving login failure after registration was disabled
- Update auth tests to match new SHA-256 + JSON login flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Alpine's wget resolves localhost to IPv6 [::1] first, but Next.js
standalone listens on 0.0.0.0 (IPv4 only), causing connection refused.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove nginx from docker-compose.prod.yml (NPM handles reverse proxy)
- Add Next.js rewrites to proxy /api/* to backend (backend fully hidden)
- Bind frontend to 127.0.0.1:3000 only (NPM proxies externally)
- Replace hardcoded localhost:8000 in history page with api client
- Make CORS origins configurable via environment variable
- Restrict CORS methods to GET/POST/PUT/DELETE
- Add Gitea Actions deploy workflow with secrets-based env management
- Add security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
- Add BACKEND_URL build arg to frontend Dockerfile for standalone builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Toast notifications with sonner
- Loading skeleton components
- Improved loading states
- 404 page
- Cleanup old components
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add StrategyCard component with icon, CAGR range, risk badge, and stock count
- Update strategy list page with improved cards and descriptions
- Redesign backtest page with split layout (form left, results right)
- Add summary cards for CAGR, MDD, Sharpe ratio, and total return
- Integrate charts for equity curve, drawdown, and yearly returns
- Add badge, select, and skeleton UI components
- Toggle between new backtest form and history view
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- TradingView chart component with lightweight-charts v5 API
- PortfolioCard component with mini pie chart and return display
- Updated portfolio list with cards and empty state
- Portfolio detail with charts, tabs (holdings/transactions/analysis)
- Improved holdings table with progress bars for weight
- Added tabs component from shadcn
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Sparkline for summary cards
- AreaChart for asset trends
- DonutChart for sector allocation
- BarChart for portfolio comparison
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Portfolio pages updated with DashboardLayout and shadcn/ui Card components
- Strategy pages updated (multi-factor, quality, value-momentum)
- Backtest pages updated with consistent styling
- Admin data management page updated
- Login page improved with shadcn/ui Card, Input, Button, Label
- All pages now support dark mode via CSS variables
- Removed old Sidebar/Header imports, using unified DashboardLayout
- Added shadcn/ui input and label components
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Collapsible Sidebar with navigation
- Header with page titles and logout
- DashboardLayout with responsive design
- Updated dashboard page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create ThemeProvider component
- Apply ThemeProvider to root layout
- Enable system theme detection
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add tailwind.config.ts with shadcn/ui theme colors
- Update globals.css with CSS variables for dark/light mode
- Add utils.ts with cn() helper function
- Add components.json for shadcn/ui CLI
- Update postcss.config.mjs with autoprefixer
- Exclude playwright config from tsconfig to fix build
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove unused login helper in portfolio.spec.ts
- Add eslint-disable for useEffect in history page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- APScheduler for daily snapshots (18:30 weekdays)
- ReturnsCalculator with CAGR, TWR, MDD, volatility
- Portfolio history page with snapshots and returns tabs
- FastAPI lifespan integration for scheduler
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Backtest list/create page with strategy-specific params
- Backtest result page with metrics, holdings, transactions
- Polling for async backtest status
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add user-facing error state with red alert box for failed operations
- Improve error handling in fetchJobs and runCollector functions
- Add aria-labels to collector buttons for better accessibility
- Add scope="col" to table headers for proper semantic HTML
- Add refresh loading state with disabled button styling
- Create handleRefresh function for proper state management during refresh
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add frontend page for admin data collection management at /admin/data.
The page displays available collectors (stocks, sectors, prices, valuations)
with buttons to trigger collection jobs, and shows recent job history
with status, timing, record counts, and error information.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add API client utility (frontend/src/lib/api.ts) with JWT authentication
- Add Sidebar component with navigation menu (Korean labels)
- Add Header component with logout functionality
- Update globals.css with Tailwind CSS configuration
- Update layout.tsx with Inter font and Korean language
- Update page.tsx with dashboard layout and auth check
- Add login page with form validation and error handling
- Fix .gitignore to not exclude frontend/src/lib/
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>