3 Commits
Author SHA1 Message Date
valknarandClaude Sonnet 5 5a6da7e507 Bump to 0.9.5
CI / Build and push image (push) Successful in 1m9s
CI / Static checks (push) Successful in 1m41s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BuWtppPBizG2NQRa31FCRa
2026-09-05 11:30:31 +02:00
valknarandClaude Sonnet 5 b58640beb2 Unify card title size to text-sm
Several CardTitle usages were text-base while others were already
text-sm, giving section headers inconsistent sizes across pages.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BuWtppPBizG2NQRa31FCRa
2026-09-05 11:29:41 +02:00
valknarandClaude Sonnet 5 140ba10df6 Bump to 0.9.4
CI / Static checks (push) Successful in 1m40s
CI / Build and push image (push) Successful in 1m7s
- SessionTimelineChart: adds explicit gap between the tooltip's device
  label and its value via a custom formatter, instead of relying on
  justify-between's leftover-space spacing, which collapsed to zero in
  the narrow single-item tooltip

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BuWtppPBizG2NQRa31FCRa
2026-09-04 23:46:45 +02:00
7 changed files with 31 additions and 9 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ export default async function DevicesPage({
</div> </div>
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">Known devices</CardTitle> <CardTitle className="text-sm">Known devices</CardTitle>
</CardHeader> </CardHeader>
<CardContent className="flex flex-col gap-3"> <CardContent className="flex flex-col gap-3">
<DevicesTable devices={devices} /> <DevicesTable devices={devices} />
+1 -1
View File
@@ -56,7 +56,7 @@ export default async function DashboardPage() {
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">Recent sessions</CardTitle> <CardTitle className="text-sm">Recent sessions</CardTitle>
</CardHeader> </CardHeader>
<CardContent className="flex flex-col gap-3"> <CardContent className="flex flex-col gap-3">
<SessionsTable sessions={recentSessions} /> <SessionsTable sessions={recentSessions} />
+2 -2
View File
@@ -72,7 +72,7 @@ export default async function SessionDetailPage({ params }: { params: Promise<{
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">Intensity timeline</CardTitle> <CardTitle className="text-sm">Intensity timeline</CardTitle>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<SessionTimelineChart timeline={timeline} /> <SessionTimelineChart timeline={timeline} />
@@ -81,7 +81,7 @@ export default async function SessionDetailPage({ params }: { params: Promise<{
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">Devices</CardTitle> <CardTitle className="text-sm">Devices</CardTitle>
</CardHeader> </CardHeader>
<CardContent className="flex flex-col gap-1"> <CardContent className="flex flex-col gap-1">
{detail.devices.map((d) => ( {detail.devices.map((d) => (
+1 -1
View File
@@ -24,7 +24,7 @@ export default async function SessionsPage({
</div> </div>
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">History</CardTitle> <CardTitle className="text-sm">History</CardTitle>
</CardHeader> </CardHeader>
<CardContent className="flex flex-col gap-3"> <CardContent className="flex flex-col gap-3">
<SessionsTable sessions={sessions} /> <SessionsTable sessions={sessions} />
+23 -1
View File
@@ -64,7 +64,29 @@ export function SessionTimelineChart({ timeline }: { timeline: TimelineRow[] })
className="bp-readout text-xs" className="bp-readout text-xs"
/> />
<YAxis domain={[0, 100]} tickLine={false} axisLine={false} width={32} className="bp-readout text-xs" /> <YAxis domain={[0, 100]} tickLine={false} axisLine={false} width={32} className="bp-readout text-xs" />
<ChartTooltip content={<ChartTooltipContent />} /> <ChartTooltip
content={
<ChartTooltipContent
formatter={(value, name) => {
const itemConfig = config[name as string];
return (
<>
<div
className="h-2.5 w-2.5 shrink-0 rounded-[2px]"
style={{ backgroundColor: itemConfig?.color }}
/>
<div className="flex flex-1 items-center justify-between gap-4 leading-none">
<span className="text-muted-foreground">{itemConfig?.label ?? name}</span>
<span className="bp-readout font-medium text-foreground">
{typeof value === "number" ? value.toLocaleString() : String(value)}
</span>
</div>
</>
);
}}
/>
}
/>
{series.map(([sessionDeviceId]) => ( {series.map(([sessionDeviceId]) => (
<Area <Area
key={sessionDeviceId} key={sessionDeviceId}
+2 -2
View File
@@ -16,7 +16,7 @@ export function DeviceUsageTable({ devices }: { devices: DeviceUsageRow[] }) {
return ( return (
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">Device usage</CardTitle> <CardTitle className="text-sm">Device usage</CardTitle>
</CardHeader> </CardHeader>
<CardContent className="text-sm text-muted-foreground">No device activity yet.</CardContent> <CardContent className="text-sm text-muted-foreground">No device activity yet.</CardContent>
</Card> </Card>
@@ -26,7 +26,7 @@ export function DeviceUsageTable({ devices }: { devices: DeviceUsageRow[] }) {
return ( return (
<Card className="bp-glass"> <Card className="bp-glass">
<CardHeader> <CardHeader>
<CardTitle className="text-base">Device usage</CardTitle> <CardTitle className="text-sm">Device usage</CardTitle>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<Table> <Table>
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "sexy", "name": "sexy",
"version": "0.9.3", "version": "0.9.5",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",