Commit graph

295 commits

Author SHA1 Message Date
Mat
eb3fa24315
feat: make regular api tokens revocable (#1027)
* 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>
2026-04-01 19:37:34 +01:00
Mahad Kalam
8ce245d8c4
make leaderboards go vrooom (#1120)
* make leaderboards go vrooom

* goog
2026-03-30 13:58:18 +01:00
Mahad Kalam
95580df3ba
Bye raw_heartbeat_uploads! (#1098)
* Drop raw_heartbeat_uploads

* oops

* Make it friendly

* finalizad

* goog

* bundlarr

* remove the newlines
2026-03-22 18:16:19 +00:00
Mahad Kalam
b915f6d4d9
Revert "Fix grouped duration_seconds overcounting by using global LAG instead…" (#1077)
This reverts commit 972d6d2e33.
2026-03-15 21:51:17 +00:00
Mahad Kalam
972d6d2e33
Fix grouped duration_seconds overcounting by using global LAG instead of partitioned LAG (#1075) 2026-03-15 20:22:01 +00:00
Mahad Kalam
8d00418059
Spring cleaning (#1074)
* 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
2026-03-15 15:26:32 +00:00
Mahad Kalam
28fa174861
Add Sentry monitoring for previously unreported errors (#1066)
* Add Sentry monitoring for previously unreported errors

* Fix

* Fixes

* whoops!
2026-03-13 11:06:12 +00:00
Mahad Kalam
607480ff8d
Imports v2.5 (#1065)
* Imports are back!!

* Settings UI v3

* Use Inertia forms for heartbeat imports

* Update app/javascript/pages/Users/Settings/Data.svelte

* Update Bundle

* Fix broken Form/Button markup in Data.svelte settings page

* Update JS deps

* Greptile fixes

* Remove dead code

* Fixy wixy

* woohoo

* fixes

* Fix

* Fixes

* Fix TC

* Fix TC

* welp

* test

* Even more Greptile fixes
2026-03-13 09:34:40 +00:00
Mahad Kalam
667d3a7c93
WakaTime/Hackatime v1 imports + Settings v2 (#1062)
* Imports are back!!

* Settings UI v3

* Use Inertia forms for heartbeat imports

* Update app/javascript/pages/Users/Settings/Data.svelte

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update Bundle

* Fix broken Form/Button markup in Data.svelte settings page

* Update JS deps

* Greptile fixes

* Remove dead code

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-12 21:27:10 +00:00
Mahad Kalam
1f695850e5
Bring back Mailkick (#1021)
* 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
2026-03-01 14:26:54 +00:00
Mahad Kalam
c846217ce6
Revert all commits after d5d987a8f4 (#1020)
Reverts the following commits:
- 2e3cfd60 Revert Mailkick
- de320443 Merge branch 'main'
- efd189a8 Add safety-hatch for summary emails
- d5c62922 Remove exploding queries (#1018)
- 2b37201d Bump actions/upload-artifact from 6 to 7 (#1007)
- a4c10b47 Expand scopes to all time for summaries/goals (#1017)
- 4dec2f44 Unsubscribe links + slow job monitoring (#1016)
2026-03-01 13:09:10 +00:00
Mahad Kalam
0c7fb13c82
Revert Mailkick (#1019) 2026-03-01 12:56:23 +00:00
Mahad Kalam
efd189a8c4 Add safety-hatch for summary emails 2026-03-01 12:43:41 +00:00
Mahad Kalam
4dec2f44a4
Unsubscribe links + slow job monitoring (#1016)
* Notable + unsubscribe links

* Add the migrations/initializers!

* oops

* Fix a bug

* Address Copilot warn

* Fixes

* stop swallowing errors!!!!

* Flipper flag WeeklySummaryEmailJob

* Split WeeklySummaryEmailJob into new email
2026-03-01 12:11:38 +00:00
Mahad Kalam
2816314df9
Weekly summary emails + move off Loops (#998)
* Weekly summary emails + move off Loops

* Remove unused asset
2026-02-23 22:15:02 +00:00
Mahad Kalam
5bd4b7b0c7 Fix mirror auth 2026-02-23 20:46:28 +00:00
Mahad Kalam
8c0227cb57
Bye, warehouse! (#994) 2026-02-23 20:16:03 +00:00
Mahad Kalam
7317cc45e7
Imports + mirrors :DD (#993)
* Imports + mirrors :DD

* Stuff and things

* Fixes

* Fixes x2

* Tests!

* Hmm
2026-02-23 15:00:43 +00:00
Mahad Kalam
d3af585822
Several tests and fixes. (#987)
* Several tests and fixes.

* Harden safe_return_url to reject URLs containing colons

Adds an extra guard in safe_return_url to reject paths containing ':'
characters, preventing edge-case scheme-like redirects (e.g.
/javascript:...). Addresses CodeQL URL redirection warning.

* Oops!
2026-02-20 15:30:48 +00:00
Mahad Kalam
e3456be187
goaaaal! (#985)
* Add goals

* Fix up some migrations

* Formatting

* Simplify migration

* Update test/controllers/settings_goals_controller_test.rb

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update test/controllers/settings_goals_controller_test.rb

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Fix svelte-check issues, make CI less janky on dev

* svelte-check/fix tests

* Fix N+1s

* Formatting!

* More tests, fix anonymization and N+1

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-02-19 18:47:01 +00:00
Mahad Kalam
79c6bb80b2
Allow disabling Hackatime v1 import via Flipper flag (#975)
* Allow disabling Hackatime v1 import via Flipper flag

* Handle Greptile suggestion
2026-02-18 00:46:33 +00:00
Mahad Kalam
ef94a9da9d
OAuth2 apps inertia'd! (#966)
* OAuth2 apps Inertia'd!

* Rose Pine/Rose Pine Dawn themes!

* Run formatting pass

* add some tests?
2026-02-17 13:45:44 +00:00
Mahad Kalam
d395617a3e
Revert "Fast leaderboards (#954)" (#955)
This reverts commit ac32690ee9.
2026-02-16 00:48:36 +00:00
Mahad Kalam
ac32690ee9
Fast leaderboards (#954)
* Fast leaderboards

* oop

* CUT index

* Update leaderboard_update_job.rb

* Update db/migrate/20260215223000_add_leaderboard_heartbeat_index.rb

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update app/models/concerns/heartbeatable.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>
2026-02-16 00:05:14 +00:00
Mahad Kalam
dd978bbeb9
Themes! (#952)
* Themes pt1

* Themes pt2

* Standard -> Classic, new default is Gruvbox Dark

* Make settings shell fatter
2026-02-15 22:14:46 +00:00
Mahad Kalam
f16c991808
Remove unused public_activity + downsize activity graph Inertia payload (#946)
* Remove public_activity

* Continue removal

* Uh-oh, re-add pganalyze

* Fix Vite HMR not working
2026-02-15 09:54:29 +00:00
Mahad Kalam
ad95cf6c4f
Add PostHog (#906)
* Add PostHog

* Queue Posthog *after* adding to DB

* Update app/services/posthog_service.rb

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Add /api/v1/banned_users/counts

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-15 08:44:39 +00:00
Mahad Kalam
e1de26193a woosh 2026-02-10 01:26:14 +00:00
Mahad Kalam
30ec28cbb4 bin/rubocop -A 2026-02-10 00:32:17 +00:00
Mahad Kalam
c96da270d3 arr! 2026-02-10 00:29:59 +00:00
Mahad Kalam
26f3d4e814 Mahad's perf experiment 2026-02-09 23:50:01 +00:00
Mahad Kalam
0f42cd4b90 Optimizations and code cleanup 2026-02-09 21:05:50 +00:00
Mahad Kalam
ef3f36c829
Inertia migration/UI3 (#911)
* Inertia p1?

* Inertia'fied signed out homepage?

* Split up signed in page

* WIP signed in v2?

* Better signed in?

* Clean up extensions page!

* Fix currently hacking

* Better docs page?

* Docs update 2

* Clean up "What is Hackatime?" + get rid of that godawful green dev mode

* Better nav?

* Cleaner settings?

* Fix commit times

* Fix flashes + OS improv

* Setup v2

* Readd some of the syncers?

* Remove stray emdash

* Clean up Step 3

* Oops, remove .vite

* bye bye, /inertia-example

* bin/rubocop -A

* Fix docs vuln
2026-02-09 11:26:30 +00:00
Mahad Kalam
166d9d30a0
ahoy is walking the plank (#903)
* Remove Ahoy

* Simplify migration

* sync migrations

* Update db/migrate/20260204113033_drop_ahoy_tables.rb

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-04 13:13:48 +00:00
Echo
041f8ee3bb
feat: derive dummy users for testing (#880)
* install faker

* carry username over to display

* feat: derive dummies from you
2026-02-02 00:13:33 -05:00
Echo
ae6c6c089e
feat: tombstone data deletion (#815) 2026-02-01 14:23:48 -05:00
Echo
50d4e15a1c
Fix deletion failures in Heartbeat model (#877)
* fix deletion failures

* update gems
2026-01-30 20:11:02 -05:00
Echo
73f383843d
fix bad substring sanitization (#829) 2026-01-25 12:36:57 -05:00
Echo
e592f1db39
profile speedups and cache (#811) 2026-01-19 23:23:24 -05:00
Echo
55c8f5b926
Oauth apps for all! (#810)
* linting

* migrations

* user modelassss

* controllers

* views and shii

* fix bad input on seeds

* fix intenting

* DRY!!!
2026-01-19 22:24:21 -05:00
Echo
742420caff
attempt 2 at fixing slack signing (#809) 2026-01-19 12:49:47 -05:00
Echo
ceb7a690d0
demote old slack email when signing in (#802)
* demote old slack email when signing in

* linting
2026-01-19 02:04:58 -05:00
Echo
affe028b60
sort when slack data is updated (#794) 2026-01-17 15:31:56 -05:00
Echo
063403e4a0
admin api rework (#777)
Co-authored-by: TheUnknownHacker <128781393+The-UnknownHacker@users.noreply.github.com>
2026-01-08 12:28:21 -05:00
Echo
8400178291
make archive and unarchive bypass validations (#773) 2026-01-06 11:19:44 -05:00
Echo
6a6854f2db
allow repo mapping on projects without a repo url (#771) 2026-01-06 09:45:27 -05:00
Echo
7ebb1b2085
archive projects (#770) 2026-01-06 09:28:39 -05:00
Echo
c62cb0f7da
remove mailing system (#763) 2026-01-03 09:25:47 -05:00
Echo
5f45d9f7af
scramble key names once revoked (#762) 2026-01-03 09:12:04 -05:00
Max Wofford
e6ed172d85
Remove old neighborhood logic (#753)
Co-authored-by: Echo <github@3kh0.net>
2025-12-30 21:31:57 +01:00