* add new icon from bounty
* feat: add hackatime normal token revocation
* chore: make linter not hate me (its always whitespace) <3
* fix: combine both revocation apis into one (as requested by mahad)
* chore: add HKA_REVOCATION_KEY to .env.example
* feat: add hackatime normal token revocation
* chore: make linter not hate me (its always whitespace) <3
* fix: combine both revocation apis into one (as requested by mahad)
* chore: add HKA_REVOCATION_KEY to .env.example
* feat: add hackatime normal token revocation
* chore: make linter not hate me (its always whitespace) <3
* fix: combine both revocation apis into one (as requested by mahad)
* chore: add HKA_REVOCATION_KEY to .env.example
* feat: add hackatime normal token revocation
* chore: make linter not hate me (its always whitespace) <3
* fix: combine both revocation apis into one (as requested by mahad)
* fix: stuff greptile suggested
* style: add final newline
* docs: apply .env.example suggestion from @skyfallwastaken
Co-authored-by: Mahad Kalam <55807755+skyfallwastaken@users.noreply.github.com>
* refactor: move apikey rotation to user model
* style: remove unnecessary comment
* fix: tests passing and inappropriate response codes
* refactor: fix response codes
* refactor: move key info request back into separate function
* fix: broken ci because of merge mistake :/
* refactor: remove unnecessary test line and switch to report_error
* fix: returned name for admin & regular keys
---------
Co-authored-by: Mahad Kalam <55807755+skyfallwastaken@users.noreply.github.com>
* Fix leaderboard mobile layout and tab selector bug
- Replace preserveState with preserveScroll on tab Links to fix
scope resetting to global when switching period tabs
- Show globe/flag icons only (no text) on mobile for scope selector
- Shorten period labels to "24h"/"7d" on mobile
- Move active project to its own line below username for cleaner layout
- Add Twemoji component and refactor CountryFlag to use it
- Add proper truncation and min-w-0 to prevent text overflow on mobile
* Formatting
* Fix deletion requests
* Twemoji
* goog
* Progress bar should be primary colour
* Projects page shouldn't refresh on archive
* Fix GitHub syncing
* Add HCA lookup
* Fix .ad and .mdx
* Misc.
* Badges can use owner/repo
* Format + make Zeitwerk happy
Project names with newlines (e.g. from misbehaving editor plugins) caused
ActionController::UrlGenerationError when loading /my/projects because Rails
route constraints reject newlines in URL parameters.
- Strip control characters from project names at heartbeat ingestion time
- Detect newlines in broken_project_name? to mark such projects as broken
- Skip URL generation for broken project names to prevent the crash
https://claude.ai/code/session_016CtSDw18BePckUBQ2teeuQ
Co-authored-by: Claude <noreply@anthropic.com>
* fix: use owner/repo format for project badges
Updates badge URLs to use GitHub-style owner/repo format (e.g., "hackclub/hackatime")
instead of project names. This ensures compatibility with external badge services that
expect repository paths.
Changes:
- Add Repository#full_path method to get owner/repo format
- Update settings controller to pass both display names and repo paths
- Update Badges component to display project names but use repo paths in URLs
* fix: improve user lookup in API v1 stats endpoint
Use the robust lookup_user method for username parameter in the /api/v1/stats endpoint
to ensure consistent user lookup across all API endpoints. This properly handles Slack
UIDs (HCA IDs), numeric user IDs, and usernames in the correct priority order.
* fix: reduce clutter on new user homepage
Simplify the new user experience by:
- Removing redundant "Hello friend" text from setup notice (header already provides context)
- Hiding GitHub link banner when setup notice is shown to focus user on primary action
This reduces visual clutter and helps new users focus on completing setup first.
* fix: enable full app layout for new OAuth application page
Remove layout=false directive that was preventing the app header and navigation
from appearing on the new OAuth application creation page.
* fix: add antigravity editor to docs
Add documentation for Antigravity, a VSCode fork from Google with built-in AI
features. Includes setup instructions for tracking time with Hackatime using the
WakaTime extension.
* fix: improve stat card subtitle positioning
Remove absolute positioning from subtitle text to allow it to flow naturally after
the main value. This prevents the subtitle from being pushed to the bottom when
other cards have longer content.
* fix: align settings action buttons to card end on larger screens
Remove width constraint from footer to allow action buttons to align to the right
edge of the full card width instead of being constrained to a narrower container.
* fix: improve heartbeat importer visibility on light themes
Update import provider cards and radio buttons to have better contrast on light themes:
- Use bg-surface-100 instead of bg-darker for better card visibility
- Increase radio button border thickness and use darker border color
- Add hover and focus states for better interactivity
* Split up settings controller + perf + goal display
* Make stat card subtitles larger
* Fix AG + VS Code
* Remove Shiba refs
* Bundle update
* Add HackaStreak extension to the list
* Update app/javascript/pages/Extensions/Index.svelte
* Fix description casing for HackaStreak extension
* Add button label for extension installation
* Apply suggestion from @skyfallwastaken
Co-authored-by: Mahad Kalam <55807755+skyfallwastaken@users.noreply.github.com>
* Fix description formatting for HackaStreak
I think this is right, I'm not 100% sure?
---------
Co-authored-by: Mahad Kalam <55807755+skyfallwastaken@users.noreply.github.com>
* Update Integrations.svelte
Change Reconnect GitHub button from white text to black text
* Changed it from text-black to text-on-primary
* Update Integrations.svelte
* Sources say Charlie Kick is stable. Please god
* Some tests + guards + unsub URL fix
* Fix lockfile!
* bin/rubocop -A
* if this does not work I am going to kms
* phew
* Better emails!
* Fix tests?
* bit o' cleanup
* add rant
* pt2
* pt3
* Update tests
* oop
* man what on earth
* ffs!!!!!
* Revert "ffs!!!!!"
This reverts commit b58bfed0f4c6288e95d0a111aeb3d7d7900ac9e7.
* Revert "man what on earth"
This reverts commit 8752cc2200eb3b852ea545d10ccbd555ab09d2b4.
* Revert "Fix tests?"
This reverts commit 810ebde73376ff7da0595e6b927f1b464d62b4a4.
* Ignore external Google Fonts link in premailer
* Add OS switcher tabs to WakatimeSetup page
- Add segmented control with macOS/Linux/Codespaces, Windows, and Advanced tabs
- Default tab is auto-detected from user agent (server-side)
- Show WSL option in mac/linux tab label only when user is on Windows
- Use modal-matching cubic-bezier easing for tab transitions
* Add system test for WakatimeSetup OS switcher tabs
* Extract repeated tab classes into tabClass helper
* Remove Xcode reference from setup subtitle
* Show Xcode in subtitle only on macOS/Linux tab
* pf
* Update test/system/wakatime_setup_test.rb
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
- Add segmented control with macOS/Linux/Codespaces, Windows, and Advanced tabs
- Default tab is auto-detected from user agent (server-side)
- Show WSL option in mac/linux tab label only when user is on Windows
- Use modal-matching cubic-bezier easing for tab transitions