5 Commits

Author SHA1 Message Date
9024f80a70 chore: split Coolify compose configuration 2026-06-08 13:30:18 +08:00
2e3dca87c7 fix: let Coolify provide runtime env 2026-06-08 11:19:50 +08:00
20a3d399d9 fix: resolve all eslint errors (set-state-in-effect, nested components, no-explicit-any)
- Wrap synchronous setState calls in useEffect with startTransition to avoid cascading renders
- Convert nested SortIcon components to renderSortIcon helper functions
- Replace all `any` types with proper interfaces (OverviewData, TrendPoint, RankItem)
- Remove unused formatTokens import in logs page
- Add no-any rule to CLAUDE.md
2026-04-07 15:19:10 +08:00
8b91aa3e97 feat: add output/input ratio column to aggregation page
Add a sortable "Out/In Ratio" (completion_tokens / prompt_tokens)
column with a portal-based tooltip explaining the metric. Fix
hydration mismatch by switching to useSyncExternalStore for
localStorage reads in TimeRangeProvider. Update CLAUDE.md with
project documentation.
2026-04-07 15:09:23 +08:00
cc66034e59 feat: sync embedded analytics theme with parent app 2026-04-02 20:11:33 +08:00