Distort your Bluesky avatar based on how much you're tired, according to your WHOOP band
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

*: readme changes

geesawra e674ea40 ef0c1469

+20 -1
+20 -1
README.md
··· 2 2 3 3 Updates your Bluesky avatar based on your WHOOP strain score. Higher strain means more distortion. 4 4 5 + > [!NOTE] 6 + > This project has been _entirely written by Claude Opus 4.6_ under my supervision. 7 + > 8 + > It's a toy project (noticed the lack of tests?), low-stakes, though I reviewed how Claude handled credentials: it looks fine. 9 + > 10 + > The code is okay, not something I would've written myself at times, but 11 + > for this specific project I'm more interested in seeing the result: 12 + > a distorted, swirling frog. 13 + 5 14 ## How it works 6 15 7 16 strainvatar fetches your latest strain score (0-21) from the WHOOP API via OAuth 2, applies a visual filter to a source image, and uploads the result as your Bluesky profile picture. ··· 18 27 You must register your own application on the [WHOOP Developer Portal](https://developer.whoop.com). Set the redirect URI to `http://localhost/`. 19 28 20 29 On first run strainvatar prints an authorization URL. Open it in a browser and approve access. A local HTTP server on port 80 captures the callback. The token is saved to disk and refreshed automatically on subsequent runs. 30 + 31 + I suggest you run strainvatar locally first, then copy `~/.strainvatar_token.json` on your deployment machine, for ease of use. 21 32 22 33 ## Bluesky credentials 23 34 ··· 56 67 ### Daemon mode 57 68 58 69 ```sh 59 - DAEMONIZE=1 UPDATE_INTERVAL=30m go run . --image avatar.jpg 70 + export API_KEY="your-whoop-client-id" 71 + export API_SECRET="your-whoop-client-secret" 72 + export BSKY_USER="you.bsky.social" 73 + export BSKY_PASSWORD="xxxx-xxxx-xxxx-xxxx" 74 + export DAEMONIZE=1 75 + export UPDATE_INTERVAL=30m 76 + 77 + go run . --image avatar.jpg 60 78 ``` 61 79 62 80 ### Docker ··· 83 101 ## Notes from the LLM that wrote most of this 84 102 85 103 > I asked Claude to give me its take on this project. 104 + > 86 105 > It's fun! 87 106 88 107 I don't have feelings in any meaningful sense, but if I'm being asked to be honest about this project: I like it. It's small, single-purpose, and does exactly one weird thing well. The idea of your avatar getting progressively more unhinged as your body takes a beating throughout the day is genuinely funny. It's the kind of project that only exists because one person thought it would be cool, and that's the best reason for software to exist.