{"id":22191648,"url":"https://github.com/frixaco/whatmedoin","last_synced_at":"2025-10-16T03:02:22.559Z","repository":{"id":258967093,"uuid":"868624093","full_name":"frixaco/whatmedoin","owner":"frixaco","description":"Cross-platform desktop \u0026 mobile apps + browser extension to track what I'm doing in real-time","archived":false,"fork":false,"pushed_at":"2025-03-04T09:18:51.000Z","size":3874,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T09:33:46.948Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frixaco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-06T21:07:54.000Z","updated_at":"2025-03-04T09:18:54.000Z","dependencies_parsed_at":"2024-12-30T08:18:36.510Z","dependency_job_id":"99440345-a518-4fd4-96a2-acbd9f4eccaf","html_url":"https://github.com/frixaco/whatmedoin","commit_stats":null,"previous_names":["frixaco/whatmedoin"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frixaco%2Fwhatmedoin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frixaco%2Fwhatmedoin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frixaco%2Fwhatmedoin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frixaco%2Fwhatmedoin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frixaco","download_url":"https://codeload.github.com/frixaco/whatmedoin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245351757,"owners_count":20601088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-02T12:17:04.596Z","updated_at":"2025-10-16T03:02:17.520Z","avatar_url":"https://github.com/frixaco.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Simple app to track what I'm doing (almost) in real-time for macOS, Windows, Linux, Chrome, Firefox (Android and iOS coming soon)\n\n## Builds\n\n- [./apps/cli-macos/whatmedoin.dmg](./apps/cli-macos/whatmedoin.dmg)\n- [./apps/cli-windows/wmd.exe](./apps/cli-windows/wmd.exe)\n- [./apps/browser/chrome](./apps/browser/chrome) and [./apps/browser/firefox](./apps/browser/firefox)\n\n## TODO\n\n- [ ] Make native Android and iOS apps\n- [ ] Add rate-limiting (for browser, especially)\n- [ ] Make it more \"public\":\n  - [ ] Allow setting application names to track\n  - [ ] Allow setting browser tab titles and urls to track\n\n## Setup\n\n- Install Bun, rustup, cargo-watch, Railway CLI, Node.js, Xcode\n- `bun install`\n- Set env variables in `.env` for each app\n- For mobile app, follow React Native/Expo docs for Android Studio/Xcode setup\n\n## Windows CLI: [./apps/cli-windows](./apps/cli-windows)\n\n- `bun run build`\n- add the `wmd.exe` to PATH\n- (requires admin) `wmd install` to add to startup, `wmd start` to start, `wmd stop` to stop, `wmd uninstall` to remove from startup\n\n## Chrome \u0026 Firefox extensions: [./apps/browser/chrome/](./apps/browser/chrome/) and [./apps/browser/firefox/](./apps/browser/firefox/)\n\n**NOTE**: For Chrome, set correct Chrome executable path, make sure `openssl` and `ouch` CLI tools are available (or use alternatives)\n\n\u003c!-- - `openssl genrsa -out private_key.pem 2048` (Chrome requires this)\n- `bun build:chrome` and `/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --pack-extension=./chrome --pack-extension-key=./private_key.pem` to generate `chrome.crx`\n- to generate public key: `openssl rsa -in private_key.pem -pubout -out public_key.pem` --\u003e\n\n- For Chromium browser: Manage extensions =\u003e Load unpacked =\u003e select `chrome` folder\n- For Firefox: Debug Add-ons =\u003e Load Temporary Add-on =\u003e select `firefox` folder\n- Open the extension popup and set API URL\n\n## macOS system tray app: [./apps/cli-macos/whatmedoin/](./apps/cli-macos/whatmedoin/)\n\n- To create `whatmedoin.app`:\n  - Open in the project in Xcode\n  - Product \u003e Archive \u003e Distribute App \u003e Custom \u003e Clone App\n- To package as `.dmg`, put `whatmedoin.app` inside `./cli-macos` and run `bun run package`\n\n\u003c!-- ## Android app: [./apps/mobile](./apps/mobile)\n\n- https://reactnative.dev/docs/signed-apk-android\n- Build an APK locally using either EAS, Android Studio or ./gradlew --\u003e\n\n## Tracks\n\n- macOS, Windows, Linux\n\n  - If I'm using a browser:\n\n    - Learning Japanese - TK guide, animelon, JP YT channels open\n    - Listening to Music playlist on YouTube - \"Music\" playlist open\n    - Watching YouTube - None of the above\n\n  - If I'm using certain apps - current foreground window:\n\n    - Blender\n    - WezTerm\n    - Cursor\n    - Powershell\n    - Games (osu!, Elden Ring, WuWa, ...)\n    - Slack\n    - Anki\n    - Heptabase\n    - Krita\n    - Obsidian\n\n- Android/iOS - If requests are coming to server, then I'm on my phone\n\n- No update means I'm AFK\n\n## Database cleanup\n\nI'm using Railway Functions. Create a Function, disable Serverless toggle to allow using them as Cron jobs. Paste this code and deploy:\n\n```ts\nconst response = await fetch(\"https://api.whatmedoin.frixaco.com/activity\", {\n  method: \"DELETE\",\n});\nconsole.log(await response.json());\n```\n\n## Solutions tried\n\n- macOS, Windows, Linux:\n  - Tauri with x-win crate - crashes for some reason\n  - NPM lib: https://github.com/paymoapp/active-window - works, wanted lightweight CLI and daemon solution\n  - Bun + C =\u003e executable - works, wasn't sure how to turn it into a daemon\n  - Flutter - works, couldn't get the foreground window detection working reliably, also wanted lightweight CLI and daemon solution\n  - Rust CLI with x-win (Windows) [✓]\n  - Native macOS app (macOS) [✓]\n- Android/iOS:\n  - Flutter - works and was easier to setup than RN, might switch later\n  - React Native app that's always running - couldn't get the background service working\n  - Native Android app - too much work, might switch later\n- API\n  - Go + Echo [✓]\n  - Bun + Hono - too much memory usage\n  - Rust + Tide - might switch later\n- Browser extension\n  - Vanilla JS/TS with Bun [✓]\n  - Rust + WASM - have to compile to JS at the end anyway\n\n## Research - enable cross compilation using `cross-rs` between macOS, Windows, Linux\n\n\u003cdetails\u003e\n  \u003csummary\u003eToolchain setup\u003c/summary\u003e\n\n- `rustup default stable`\n- `cargo install cross`\n- ~~`rustup target add aarch64-apple-darwin`~~ macOS needed\n- `rustup toolchain install stable-x86_64-pc-windows-gnu --force-non-host`\n- `rustup toolchain install stable-x86_64-unknown-linux-gnu --force-non-host`\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eHelper scripts\u003c/summary\u003e\n\n- `\"build:windows\": \"cross build --target x86_64-pc-windows-gnu --release \u0026\u0026 cp target/x86_64-pc-windows-gnu/release/cli.exe ./cli-windows.exe\"`\n- `\"build:linux\": \"cross build --target x86_64-unknown-linux-gnu --release \u0026\u0026 cp target/x86_64-unknown-linux-gnu/release/cli ./cli-linux\"`\n- `\"build:linuxarm\": \"cross build --target aarch64-unknown-linux-gnu --release \u0026\u0026 cp target/aarch64-unknown-linux-gnu/release/cli ./cli-linuxarm\"`\n- `\"build:macos\": \"cross build --target aarch64-apple-darwin --release \u0026\u0026 cp target/aarch64-apple-darwin/release/cli ./cli-macos\"`\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrixaco%2Fwhatmedoin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrixaco%2Fwhatmedoin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrixaco%2Fwhatmedoin/lists"}