From f8cc25511ce95bbae052dfec3c521fb096221b9f Mon Sep 17 00:00:00 2001 From: Steven Coaila Date: Sun, 20 Sep 2026 22:55:01 -0500 Subject: [PATCH] docs(readme): feature annual view with all Claude quotas --- README.md | 2 +- .../ReadmeScreenshotTests.swift | 71 ++++++++++++++++++ docs/images/readme-year.png | Bin 0 -> 162762 bytes 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 Tests/TokenGaugeAppTests/ReadmeScreenshotTests.swift create mode 100644 docs/images/readme-year.png diff --git a/README.md b/README.md index 7028bc0..64587b1 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ TokenGauge lives in your Mac’s menu bar and shows how much Claude Code or Codex quota you have left. Check reset times, browse weekly and yearly activity, and keep a private local history without opening a terminal.

- Unified ring view with Codex weekly quota, Claude session and model weekly quota + Annual activity calendar with weekly reset forecasts, Codex quota, and all three Claude quota rings

App views rendered with synthetic demonstration data.

diff --git a/Tests/TokenGaugeAppTests/ReadmeScreenshotTests.swift b/Tests/TokenGaugeAppTests/ReadmeScreenshotTests.swift new file mode 100644 index 0000000..995fc76 --- /dev/null +++ b/Tests/TokenGaugeAppTests/ReadmeScreenshotTests.swift @@ -0,0 +1,71 @@ +import AppKit +import SwiftUI +import TokenGaugeCore +import XCTest + +@testable import TokenGaugeApp + +@MainActor +final class ReadmeScreenshotTests: XCTestCase { + func testExportAnnualHero() throws { + guard let directory = ProcessInfo.processInfo.environment["TOKENGAUGE_SCREENSHOT_DIR"] else { + throw XCTSkip("Set TOKENGAUGE_SCREENSHOT_DIR to export the README hero") + } + let output = URL(fileURLWithPath: directory) + try FileManager.default.createDirectory(at: output, withIntermediateDirectories: true) + let language = LocalizationManager.shared.language + let previousIcon = NSApplication.shared.applicationIconImage + let suite = "TokenGauge.readme.\(UUID().uuidString)" + let defaults = try XCTUnwrap(UserDefaults(suiteName: suite)) + defer { + defaults.removePersistentDomain(forName: suite) + LocalizationManager.shared.language = language + NSApplication.shared.applicationIconImage = previousIcon + } + LocalizationManager.shared.language = .english + let root = URL(fileURLWithPath: #filePath).deletingLastPathComponent() + .deletingLastPathComponent().deletingLastPathComponent() + NSApplication.shared.applicationIconImage = NSImage( + contentsOf: root.appendingPathComponent("Resources/AppIcon.icns")) + let now = Date() + let calendar = Calendar.current + let today = calendar.startOfDay(for: now) + let codexReset = calendar.date(byAdding: .day, value: 5, to: today)!.addingTimeInterval(18 * 3600) + let claudeReset = calendar.date(byAdding: .day, value: 2, to: today)!.addingTimeInterval(10 * 3600) + let snapshots = UsageProvider.allCases.map { provider in + let activity = (0..<154).map { index in + let date = calendar.date(byAdding: .day, value: index - 153, to: today)! + let base = ((index * 17 + 11) % 43 + 5) * 1_000_000 + let share = (index / 11) % 3 == 0 ? 1 : 2 + let amount = provider == .codex ? base * share : ((index * 29 + 7) % 37 + 4) * 1_000_000 + let tokens = index < 126 && index % 45 == 35 ? 0 : amount + return DailyTokenUsage(day: HistoryDashboardModel.dayKey(date), tokens: tokens) + } + let windows: [QuotaWindow] = + provider == .codex + ? [Fixture.window(id: "codex.weekly", usedPercentage: 28, resetsAt: codexReset, durationMinutes: 10080)] + : [ + Fixture.window( + id: "five_hour", usedPercentage: 16, resetsAt: now.addingTimeInterval(3 * 3600), + durationMinutes: 300), + Fixture.window(id: "seven_day", usedPercentage: 39, resetsAt: claudeReset, durationMinutes: 10080), + Fixture.window( + id: "seven_day_fable", usedPercentage: 54, resetsAt: claudeReset, durationMinutes: 10080, + displayName: "Fable"), + ] + return Fixture.snapshot(provider, windows: windows, dailyUsage: activity, capturedAt: now) + } + let store = Fixture.store(defaults: defaults, snapshots: snapshots) + store.displayMode = .unified + store.panelStyle = .rings + store.historyMode = .calendar + store.showLunaReserve = false + for kind in ClaudeWindowKind.allCases { store.setClaudeWindow(kind, visible: true) } + store.showHourlyPace = false + store.animateChanges = false + let history = HistoryDashboardModel(previewSnapshots: snapshots, mode: .calendar, now: now) + try render( + PopoverView(store: store, showSettings: {}, showAbout: {}, history: history), + to: output.appendingPathComponent("readme-year.png")) + } +} diff --git a/docs/images/readme-year.png b/docs/images/readme-year.png new file mode 100644 index 0000000000000000000000000000000000000000..4db85e921186fdbab8c5636b8fe399e8e11dd1f5 GIT binary patch literal 162762 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