Add toki extension
Description
Toki is a simple, local-first time tracker for freelancers or anyone who needs to track hours. I recently contributed to the Tyme extension but over time realised I never actually opened the Tyme app and noticed how the AppleScript API slowed things down (a lot).
The extension also comes with a menubar extension that shows the currently tracking task:
Screencast
https://github.com/user-attachments/assets/c3631e25-8dfe-4218-a01a-886872d6caee
Checklist
- [x] I read the extension guidelines
- [x] I read the documentation about publishing
- [x] I ran
npm run buildand tested this distribution build in Raycast - [x] I checked that files in the
assetsfolder are used by the extension itself - [x] I checked that assets used by the
READMEare placed outside of themetadatafolder
Congratulations on your new Raycast extension! :rocket:
Due to our current reduced availability, the initial review may take up to 10-15 business days.
Once the PR is approved and merged, the extension will be available on our Store.
Greptile Summary
New time tracking extension for local-first time management with projects and tasks. Includes main view, menu bar status, and AI tools. Well-structured with proper configuration, but has a critical type issue with manually-defined Preferences interface that violates Raycast conventions.
Issues Found:
- Manual
Preferencesinterface definition indb.tsviolates custom rules and creates type mismatches with auto-generatedraycast-env.d.ts -
getPreferenceValues<Preferences>()call uses incorrect type parameter - Both issues must be fixed before merge to ensure runtime stability
Confidence Score: 2/5
- This PR has critical type errors in the database layer that will cause runtime failures and must be fixed before merge.
- Score is critically low due to a manual Preferences interface definition that violates custom rules and creates type mismatches with Raycast's auto-generated types. The getPreferenceValues() call uses an incorrect type parameter, which will fail at runtime when preferences are loaded. The extension logic itself is well-designed with proper UX patterns, good tool implementations, and correct configuration files, but the type issue is a blocker. Once the Preferences interface is removed and getPreferenceValues() is called without the type parameter, this should be safe to merge.
- extensions/toki/src/db.ts - Remove manual Preferences interface and fix getPreferenceValues() call
Important Files Changed
| Filename | Overview |
|---|---|
| extensions/toki/src/db.ts | Database layer with local JSON file storage. Contains manual Preferences interface definition that violates custom rules and will cause runtime type mismatches. |
| extensions/toki/package.json | Well-configured with proper Prettier settings (printWidth: 120, singleQuote: false), three commands, and comprehensive AI tools with evals. |
| extensions/toki/src/toki.tsx | Main view component properly manages groups, filtering, and sorting with good UX patterns and action ordering. |
| extensions/toki/src/menu-bar.tsx | Menu bar extension cleanly displays tracking status and daily time summary with proper refresh logic. |
| extensions/toki/CHANGELOG.md | Properly uses {PR_MERGE_DATE} placeholder and maintains correct version ordering as required by custom rules. |
| extensions/toki/.prettierrc | Correctly configured with standard Raycast Prettier settings (printWidth: 120, singleQuote: false). |
Hi 👋
It feels a bit related to Raycast Store: Time Tracking by @EinLinuus - did you consider enhancing that one?
Thanks, @pernielsentikaer. I did indeed not see the existing local time tracking extension. I don't think the concepts are compatible so I'll just keep the extension to myself :)