Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .github/workflows/star-history.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: refresh star history

# Regenerates docs/star-history.svg from the GitHub API and commits it when it
# has actually changed.
#
# We self-host this chart rather than embedding star-history.com or
# starchart.cc: the former refuses these repos outright ("GitHub restricted
# starred-data access for openstrap/edge") and the latter rate-limits anonymous
# callers, so both render as broken images some of the time. Self-hosting also
# means the landing page makes no third-party request, which matters for a
# project whose pitch is that your data stays on your device.

on:
schedule:
- cron: '17 4 * * 1' # Mondays, 04:17 UTC — off the hour to dodge the rush
workflow_dispatch:

# Unlike the test workflow, this one has to write: it commits the regenerated
# SVG. Nothing else in it needs elevated access.
permissions:
contents: write

concurrency:
group: star-history
cancel-in-progress: false

jobs:
refresh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Regenerate the chart
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: python3 tool/gen_star_history.py

- name: Commit if it changed
run: |
set -euo pipefail
if git diff --quiet -- docs/star-history.svg; then
echo "No change in star history — nothing to commit."
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add docs/star-history.svg
git commit -m "chore: refresh star history chart"
git push
65 changes: 61 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ An app that makes a WHOOP 4.0 useful without a WHOOP subscription. Connects to t
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![TestFlight](https://img.shields.io/badge/iOS-TestFlight-0D96F6?logo=apple&logoColor=white)](https://testflight.apple.com/join/2BVSwq65)
[![APK](https://img.shields.io/github/v/release/OpenStrap/edge?label=Android%20APK&logo=android&logoColor=white)](https://github.com/OpenStrap/edge/releases/latest)
[![downloads](https://img.shields.io/github/downloads/OpenStrap/edge/total?label=downloads&color=6aa9e0)](https://github.com/OpenStrap/edge/releases)
[![stars](https://img.shields.io/github/stars/OpenStrap/edge?style=flat&color=e2825f)](https://github.com/OpenStrap/edge/stargazers)
[![Donate](https://img.shields.io/badge/donate-BTC%20%2F%20ETH-f7931a)](DONATE.md)

> Not affiliated with WHOOP. Not a clone of their app or their scores — see below.

Expand All @@ -24,6 +27,33 @@ band at a time.
Prefer to sideload the unsigned IPA instead of using TestFlight? That still
works — see [`guides/IOS_SIDELOAD.md`](guides/IOS_SIDELOAD.md).

---

<div align="center">

### ☕ Like it? Help keep it going.

**No subscription, no paywall, no company behind this.**<br>
If OpenStrap gave your band a second life, a small tip genuinely helps.

**Bitcoin**

`bc1qvtcch38dcwp967ar764uu6eetw7tf907844wfq`

**EVM** — Ethereum · Base · Arbitrum · Optimism · Polygon

`0x8310C89393366b7eBCD47ABa82e1dfB5ECeFFbD9`

[**What donations actually pay for →**](DONATE.md)

*Nothing is gated behind paying, and nothing ever will be.<br>
Bug reports from real bands are worth more than money — there's only one
person's physiology in the test data otherwise.*

</div>

---

## What made me build this app

My subscription lapsed and a perfectly good sensor turned into a bracelet. The hardware
Expand Down Expand Up @@ -197,9 +227,36 @@ implementing.
Security problems shouldn't go in a public issue — see [SECURITY.md](SECURITY.md) for
private reporting.

## Contributors

Every one of these people made the app better — mostly by using it on a real
wrist and reporting what came out wrong.

<a href="https://github.com/OpenStrap/edge/graphs/contributors">
<img src="https://contrib.rocks/image?repo=OpenStrap/edge" alt="Contributors to OpenStrap/edge" />
</a>

The most useful contribution isn't necessarily code. There's one person's
physiology in the test data, so a bug report from a different body on a
different band is worth a great deal — see
[`CONTRIBUTING.md`](CONTRIBUTING.md).

## Star history

<img src="docs/star-history.svg" alt="Star history for edge, protocol and analytics" width="760">

That cliff in mid-July is [Hackaday](https://hackaday.com/2026/07/15/making-a-locked-down-wearable-work-without-a-subscription/)
and [Adafruit](https://blog.adafruit.com/2026/07/15/openstrap-edge-makes-a-whoop-4-0-band-useful-without-a-subscription)
covering it on the same day.

<sub>Generated from the GitHub API and refreshed weekly
([workflow](.github/workflows/star-history.yml)) rather than embedded from
star-history.com or starchart.cc — the first refuses these repos outright, the
second rate-limits, and neither should be making a request from a page about
keeping your data to yourself.</sub>

## Support the work

Free, MIT, no company behind it. If it gave your band a second life:
[**DONATE.md**](DONATE.md) has BTC and EVM addresses. Bug reports from real bands are
worth more than money, though — there's only one person's physiology in the test data
otherwise.
Free, MIT, no company behind it. If it gave your band a second life,
[**DONATE.md**](DONATE.md) has the BTC and EVM addresses and explains what they
actually pay for. Bug reports from real bands are worth more than money, though.
52 changes: 39 additions & 13 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
<a class="brand" href="index.html">Edge</a>
<nav class="pages">
<a href="https://github.com/OpenStrap/edge">GitHub</a>
<a href="#support">Donate</a>
<a href="legal.html">Legal</a>
</nav>
</header>
Expand Down Expand Up @@ -147,22 +148,47 @@ <h2>How it&rsquo;s put together</h2>
</div>
</section>

<section class="support">
<h2>Support the work</h2>
<p>
Free, MIT licensed, no company behind it. Bug reports from real bands are worth
more than money &mdash; but if you&rsquo;d like to chip in:
</p>
<dl class="addr">
<dt>BTC</dt>
<dd><code>bc1qvtcch38dcwp967ar764uu6eetw7tf907844wfq</code></dd>
<dt>EVM</dt>
<dd><code>0x8310C89393366b7eBCD47ABa82e1dfB5ECeFFbD9</code></dd>
</dl>
<section class="growth">
<h2>Where it&rsquo;s got to</h2>
<img src="star-history.svg" alt="Star history for edge, protocol and analytics"
width="760" loading="lazy">
<p class="fineprint">
Nothing is gated behind paying, and nothing ever will be.
The cliff in mid-July is Hackaday and Adafruit covering it on the same day.
Chart generated from the GitHub API and served from this site, rather than
embedded from star-history.com or starchart.cc &mdash; there is no analytics or
third-party service on this page. (The screenshots above load from GitHub, which
also hosts it.)
</p>
</section>

<section class="support" id="support">
<div class="donate">
<h2>☕ Like it? Help keep it going.</h2>
<p class="donate-lede">
No subscription, no paywall, no company behind this. If OpenStrap gave your
band a second life, a small tip genuinely helps.
</p>

<dl class="addr">
<dt>Bitcoin</dt>
<dd><code>bc1qvtcch38dcwp967ar764uu6eetw7tf907844wfq</code></dd>
<dt>EVM &mdash; Ethereum &middot; Base &middot; Arbitrum &middot; Optimism &middot; Polygon</dt>
<dd><code>0x8310C89393366b7eBCD47ABa82e1dfB5ECeFFbD9</code></dd>
</dl>

<p class="fineprint">
Tap an address to select it. What this actually pays for: the Apple Developer
membership that keeps the TestFlight build alive, a second band to get
WHOOP&nbsp;5 support tested, and coffee.
<a href="https://github.com/OpenStrap/edge/blob/main/DONATE.md">More &rarr;</a>
</p>
<p class="fineprint">
<strong>Nothing is gated behind paying, and nothing ever will be.</strong>
Bug reports from real bands are worth more than money &mdash; there&rsquo;s only
one person&rsquo;s physiology in the test data otherwise.
</p>
</div>
</section>
</main>

<footer class="site">
Expand Down
28 changes: 28 additions & 0 deletions docs/star-history.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
54 changes: 54 additions & 0 deletions docs/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -405,3 +405,57 @@ strong {
padding-top: 10px;
border-top: 1px solid var(--border);
}

/* ── Star-history + donation block (landing page) ─────────────────────────── */

.growth {
margin-top: 48px;
}

.growth img {
width: 100%;
height: auto;
display: block;
border: 1px solid var(--border);
border-radius: 12px;
margin-bottom: 10px;
}

/* The donation block is deliberately the loudest thing on the page after the
install buttons — the addresses used to sit as plain text at the bottom and
nobody noticed them. */
.donate {
margin-top: 48px;
padding: 26px 24px;
border: 1px solid var(--accent);
border-radius: 14px;
background: var(--surface);
}

.donate h2 {
margin: 0 0 8px;
font-size: 19px;
}

.donate-lede {
color: var(--fg-muted);
margin-bottom: 20px;
}

.donate .addr dt:first-of-type {
margin-top: 0;
}

.donate .fineprint {
margin-bottom: 0;
}

.donate .fineprint + .fineprint {
margin-top: 10px;
}

/* Long hex/bech32 strings must never widen the page on a phone. */
.addr code {
word-break: break-all;
white-space: normal;
}
Loading
Loading