UGC Reactions from Real Creators
Real creator library videos at $11 and images at $8. Custom production from $25/video with a $250 minimum. Commercial licensing included.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Internal tool for searching Heights' Trustpilot and Okendo customer reviews.
pip install -r requirements-dev.txt # local dev (adds Flask + gunicorn)
cp .env.example .env # then fill in the tokens
python3 server.py
Production (Vercel) only installs
requirements.txt— a minimal set coveringbuild.pyand theapi/serverless functions. Flask is only needed for the local dev server, so it lives inrequirements-dev.txt.
Then open http://localhost:3000.
| Variable | Required | Notes |
|---|---|---|
OKENDO_API_KEY | yes | Okendo store key (pre-set for Heights in .env.example). |
SLACK_TOKEN | yes (for Trustpilot reviews) | Slack bot token with channels:history for #trustpilot_reviews. |
ANTHROPIC_API_KEY | yes (for Campaign Match) | See below. |
CACHE_TTL_MINUTES | no | Default 60. |
PORT | no | Default 3000. |
ANTHROPIC_API_KEY — Campaign MatchThe "Campaign Match" panel on the main page calls the Anthropic Messages API to
score reviews against a campaign brief. The feature is disabled (returns a
graceful error) if ANTHROPIC_API_KEY is not set.
.env file.Get a key at https://console.anthropic.com/settings/keys.
| Built by | Fil Bell, March–May 2026 |
| Current owner | Fil Bell |
| Backup owner | unassigned — needs filling in |
| Escalate to | to be set |
| Who consumes the output | Customer care and marketing, searching reviews ad hoc |
Why it is public: the site is served by GitHub Pages, and Pages from a private repo requires GitHub Team or above. On a free personal account, public was the only way to make it work. It was a structural constraint, not an oversight.
What that means in practice:
https://filbell.github.io/heights-review-tool/ is live
and world-readable (~5.7 MB), rebuilt hourly by build.yml.build.py embeds the whole review corpus into dist/index.html as inline JSON
(window.__HEIGHTS_REVIEWS__), including reviewer display names.OKENDO_API_KEY was committed in .env.example in this public
repo. It has been replaced with a placeholder, but it remains in git
history, so the only real fix is to rotate that key. heights-voc uses
the same credential and its Actions secret must be updated at the same time.Two ways out:
| Option | Cost | Notes |
|---|---|---|
| Upgrade the org to GitHub Team | $4/user/month | Pages from a private repo; keeps everything as-is otherwise |
Move hosting to Vercel behind Google @heights.com auth | £0 | The pattern already used by benchmarking-insights and growth-partnership-dashboard. Make the repo private, turn Pages off. |
The second is cheaper and gives real access control, which the current setup has
no way to express. vercel.json already exists in this repo.
| Trigger | GitHub Actions cron 0 * * * * — hourly, plus on push to main |
| Entry point | build.py → dist/, deployed to GitHub Pages |
| Local dev server | server.py (Flask) — not used in production |
| Typical duration | ~1m20s |
| Billable cost | £0 today — Actions is free for public repos. Making this repo private without moving off Pages would add ~1,440 billable minutes/month, more than the entire free allowance. |
| Direction | System | Notes |
|---|---|---|
| Reads | Okendo API | all Heights reviews |
| Reads | Slack #trustpilot_reviews | Trustpilot reviews, via channels:history |
| Writes | GitHub Pages | the public static site |
| Writes | This repo | dist/index.html is committed |
| Secret | Stored as | Notes |
|---|---|---|
OKENDO_API_KEY | Actions secret | rotate — was committed publicly |
SLACK_TOKEN | Actions secret | named SLACK_BOT_TOKEN in six other repos; standardise on handover |
ANTHROPIC_API_KEY | Vercel / local only | Campaign Match; feature degrades gracefully without it |
How you find out
build.yml has no failure alert. Add the standard one from
heights-standards/failure-alert.yml.dist/ stays deployed, a failed build leaves a working
but increasingly stale site. There is no visible symptom.What breaks downstream, and how urgent
How to diagnose
not_in_channel → bot removed from #trustpilot_reviews.github-pages environment.Is a re-run safe?
dist/ from scratch and
redeploys. No external writes, no state to corrupt.How to recover
If nobody can fix it
| Date | Change | By |
|---|---|---|
| 2026-09-07 | Brought to the Heights README standard; real Okendo key replaced with a placeholder in .env.example; public-repo/Pages constraint documented | Fil |