···2233Updates your Bluesky avatar based on your WHOOP strain score. Higher strain means more distortion.
4455+> [!NOTE]
66+> This project has been _entirely written by Claude Opus 4.6_ under my supervision.
77+>
88+> It's a toy project (noticed the lack of tests?), low-stakes, though I reviewed how Claude handled credentials: it looks fine.
99+>
1010+> The code is okay, not something I would've written myself at times, but
1111+> for this specific project I'm more interested in seeing the result:
1212+> a distorted, swirling frog.
1313+514## How it works
615716strainvatar 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.
···1827You must register your own application on the [WHOOP Developer Portal](https://developer.whoop.com). Set the redirect URI to `http://localhost/`.
19282029On 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.
3030+3131+I suggest you run strainvatar locally first, then copy `~/.strainvatar_token.json` on your deployment machine, for ease of use.
21322233## Bluesky credentials
2334···5667### Daemon mode
57685869```sh
5959-DAEMONIZE=1 UPDATE_INTERVAL=30m go run . --image avatar.jpg
7070+export API_KEY="your-whoop-client-id"
7171+export API_SECRET="your-whoop-client-secret"
7272+export BSKY_USER="you.bsky.social"
7373+export BSKY_PASSWORD="xxxx-xxxx-xxxx-xxxx"
7474+export DAEMONIZE=1
7575+export UPDATE_INTERVAL=30m
7676+7777+go run . --image avatar.jpg
6078```
61796280### Docker
···83101## Notes from the LLM that wrote most of this
8410285103> I asked Claude to give me its take on this project.
104104+>
86105> It's fun!
8710688107I 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.