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.
Trustpilot and Okendo search - Heights
Translation pending
MarketingHTML · PythonGitHub @FilBellAvailability needs another checkOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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 |