Skip to content

feat: add stats for using vocamac - #148

Merged
jatinkrmalik merged 3 commits into
VocaHQ:mainfrom
Mr-Sunglasses:feat/stats
Jun 23, 2026
Merged

feat: add stats for using vocamac#148
jatinkrmalik merged 3 commits into
VocaHQ:mainfrom
Mr-Sunglasses:feat/stats

Conversation

@Mr-Sunglasses

Copy link
Copy Markdown
Member

Now users can see the stats of how much words they transcribe using Vocamac, what's the words per minute, speed and what's the streak of them using Vocamac.

Screenshot 2026-06-01 at 3 44 34 PM

AI and LLM's Assistance

I've used Gemini CLI to assist with this issue, but I personally reviewed all the generated changes before submitting the PR. I also added tests to cover the code introduced in this contribution.

Model used: Auto -- Gemini CLI selects the best model for each task automatically, choosing between gemini-3.1-pro and gemini-3-flash.

@github-actions github-actions Bot added the app label Jun 1, 2026

@jatinkrmalik jatinkrmalik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Mr-Sunglasses Thanks for this, the feature is well structured and the DI plumbing through AppState, StatsManaging, and MockStatsManager follows the existing service conventions closely.

I have posted a couple of comments below. Please take a look at them.

Comment thread Sources/VocaMac/Services/StatsManager.swift Outdated
Comment thread Sources/VocaMac/Services/StatsManager.swift
Comment thread Sources/VocaMac/Services/StatsManager.swift Outdated
Comment thread Sources/VocaMac/Models/UserStats.swift
Comment thread Sources/VocaMac/Views/StatsSettingsTab.swift Outdated
Comment thread Sources/VocaMac/Views/StatsSettingsTab.swift
Comment thread Tests/VocaMacTests/StatsManagerTests.swift
Comment thread Tests/VocaMacTests/StatsManagerTests.swift Outdated
Comment thread Tests/VocaMacTests/Mocks/MockServices.swift

@jatinkrmalik jatinkrmalik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the follow-up commits and for iterating on the stats implementation.
Appreciate the contribution, approving this and I will handle the date-boundary fix in a follow-up PR.

@jatinkrmalik
jatinkrmalik merged commit e85eb9c into VocaHQ:main Jun 23, 2026
3 checks passed
jatinkrmalik added a commit that referenced this pull request Jul 1, 2026
…170)

Follow-up to the #148/#168 review. #168 already fixed the timezone and
streak bugs; this covers the remaining findings:

- UserStats: decode leniently via decodeIfPresent so future schema
  additions no longer fail to decode and silently wipe saved stats on
  upgrade (synthesized Codable requires every non-optional key).
- StatsManager: count words with the system tokenizer (.byWords) so
  space-less scripts (Chinese, Japanese, Thai) aren't undercounted as a
  single word; write stats off the main actor on a serial queue so a busy
  disk can't hitch the UI; drop the unused dailyDurationSeconds field; and
  guard the application-support force-unwrap.
- StatsSettingsTab: confirm before the destructive "Reset All Statistics";
  parse date keys with a fixed POSIX locale; relabel WPM as "Speaking
  Speed" to match what it measures (words per minute of audio).
- Tests for lenient decode and space-less word counting.
jatinkrmalik added a commit that referenced this pull request Jul 2, 2026
* docs(web): document v0.7.0 features on the website

Adds website coverage for features shipped since v0.6.2 (audit found 4 of
5 uncovered; Homebrew was already fully covered, left untouched):

- New feature pages: Custom Vocabulary (#169) and Usage Statistics
  (#148/#168/#170), each with a landing-page grid card.
- Landing JSON-LD featureList: add custom vocabulary, local usage stats,
  and selectable audio input device (#156).
- Hotkey presets + custom recording (#139): fix stale "key combination"
  copy in fully-configurable.md, document the Record/custom-key capture
  and add the Right Control preset in push-to-talk.md, and update the FAQ.
- Audio input device (#156): expand fully-configurable.md (System Default,
  non-invasive pinning, auto-fallback on disconnect, Refresh Devices).
- Screenshots gallery: add a Stats tab entry.

Two screenshots still needed from a real capture (marked with SCREENSHOT
PLACEHOLDER comments): settings-stats.png and settings-vocabulary.png.
Verified with `hugo` (build succeeds; new pages render; JSON-LD valid).

* polish(web): refine features grid, fix mobile hero overflow, SEO pass

Features grid:
- Switch from a fixed 4-col grid (which left 2 orphan cards hanging and,
  via grid-auto-rows:1fr, forced every row to the tallest card's height)
  to a centered flex-wrap layout: uniform card heights, the short last
  row centers, and 4/2/1 columns at desktop/tablet/mobile.
- Apple-style polish: icon squircle tiles, tighter 1–2 line copy on every
  card, softer corners, refined heading type, gentler hover.

Mobile hero:
- The 380px mockup forced the hero column wider than small viewports,
  clipping the subtext/pills/buttons. Reset min-width and clip the
  decorative mockup so nothing overflows below ~420px.

SEO:
- og:type now "article" for content pages (was always "website").
- Enriched the home and features-list meta descriptions.
- Verified across all 18 pages: unique titles, one <h1> each, descriptions
  present, all <img> have alt, sitemap includes the new pages.

Screenshots: add settings-stats.png and settings-vocabulary.png (referenced
by the new feature pages) and refresh settings-general.png.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants