Platform breakdown on Pulse, cost display on sessions

This commit is contained in:
Hermes
2026-04-09 21:23:03 -05:00
parent 03d3b72f9b
commit 4ab41d0e38
3 changed files with 55 additions and 1 deletions
+46
View File
@@ -0,0 +1,46 @@
"use client";
import { useSessions } from "@/lib/hooks";
import { platformBadgeClass } from "@/lib/utils";
export function PlatformBreakdown() {
const { data } = useSessions(50);
const items = data?.items || [];
if (items.length === 0) return null;
const counts: Record<string, number> = {};
for (const s of items) {
counts[s.source] = (counts[s.source] || 0) + 1;
}
const sorted = Object.entries(counts).sort((a, b) => b[1] - a[1]);
const total = items.length;
return (
<div className="card p-4">
<div className="section-label mb-3">Platforms</div>
<div className="space-y-2">
{sorted.map(([platform, count]) => {
const pct = Math.round((count / total) * 100);
return (
<div key={platform} className="flex items-center gap-3">
<span className={`badge ${platformBadgeClass(platform)} w-16 text-center`}>
{platform}
</span>
<div className="flex-1 h-1.5 rounded-full" style={{ background: "var(--border)" }}>
<div
className="h-full rounded-full transition-all"
style={{ width: pct + "%", background: "var(--accent)" }}
/>
</div>
<span className="text-[11px] font-mono w-8 text-right" style={{ color: "var(--text-3)" }}>
{count}
</span>
</div>
);
})}
</div>
</div>
);
}
+7 -1
View File
@@ -8,13 +8,14 @@ import type { Session } from "@/lib/types";
export function SessionCard({ session }: { session: Session }) {
const tokens = session.input_tokens + session.output_tokens;
const title = session.title || "Untitled session";
const cost = session.estimated_cost_usd;
return (
<Link href={`/history/${session.id}`}>
<div className="flex items-center gap-3 py-3 px-1 border-b border-white/[0.04] active:bg-white/[0.02] transition-colors">
<div className="flex-1 min-w-0">
<div className="text-[14px] text-[var(--text-1)] truncate">{title}</div>
<div className="flex items-center gap-2 mt-0.5">
<div className="flex items-center gap-2 mt-0.5 flex-wrap">
<span className={`badge ${platformBadgeClass(session.source)}`}>
{session.source}
</span>
@@ -26,6 +27,11 @@ export function SessionCard({ session }: { session: Session }) {
{formatTokens(tokens)}
</span>
)}
{cost != null && cost > 0 && (
<span className="text-[11px]" style={{ color: "var(--text-3)" }}>
${cost.toFixed(2)}
</span>
)}
<span className="text-[11px] ml-auto" style={{ color: "var(--text-3)" }}>
{timeAgo(session.started_at)}
</span>