Add /v1/activity/daily endpoint returning per-day event counts via generate_series + LEFT JOIN. Frontend renders an SVG contribution graph with circles colored by quantile-based thresholds. Clicking a day navigates to /activity/YYYY-MM-DD showing that day's events. New /activity/:timespan route parses single dates (YYYY-MM-DD) and ranges (YYYY-MM-DD..YYYY-MM-DD) from the URL to initialize the activity timeline filter. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
28 lines
933 B
TypeScript
28 lines
933 B
TypeScript
import { Routes, Route } from 'react-router-dom';
|
|
|
|
import 'bootstrap/dist/css/bootstrap.min.css';
|
|
import 'rc-slider/assets/index.css';
|
|
import 'react-vertical-timeline-component/style.min.css';
|
|
import './App.css';
|
|
|
|
import { Layout } from './components/Layout';
|
|
import { DashPage } from './pages/DashPage';
|
|
import { TimelineHome } from './pages/TimelineHome';
|
|
import { ProjectPage } from './pages/ProjectPage';
|
|
import { CvPage } from './pages/CvPage';
|
|
|
|
export default function App() {
|
|
return (
|
|
<Routes>
|
|
<Route element={<Layout />}>
|
|
<Route index element={<DashPage />} />
|
|
<Route path="/dash" element={<DashPage />} />
|
|
<Route path="/activity" element={<TimelineHome />} />
|
|
<Route path="/activity/:timespan" element={<TimelineHome />} />
|
|
<Route path="/project/:source/*" element={<ProjectPage />} />
|
|
<Route path="/cv" element={<CvPage />} />
|
|
</Route>
|
|
</Routes>
|
|
);
|
|
}
|