Customer Engagement Platform for Email, Push Notifications, & SMS
The world's leader for mobile push notifications, web push, SMS, email and in-app messaging. Trusted by 2 million+ businesses to send 12 billion+ messages per…
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证release.show: every release deserves a premiere. The landing site.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
The marketing site for release.show, which turns GitHub releases, merged
pull requests and website changes into 30 to 90 second videos, plus the blog
post, release widget, social posts and email digest that go with them. One
page, one stylesheet and one script, served by Cloudflare as static assets. No framework,
no bundler, no build step and no runtime dependency.查看完整 README ↗The marketing site for release.show, which turns GitHub releases, merged pull requests and website changes into 30 to 90 second videos, plus the blog post, release widget, social posts and email digest that go with them. One page, one stylesheet and one script, served by Cloudflare as static assets. No framework, no bundler, no build step and no runtime dependency.
It was designed in Claude Design (release.show Landing v2 White.dc.html) and
ported from its React template to static HTML: every reel, the scroll-driven
scenes, the player and the pricing tickets are in the HTML, and the script only
animates them. The photographic stills are generated with
Higgsfield (see The stills).
release.show is in early access. So:
llms.txt and
the JSON-LD say the same (availability: PreOrder).illustration chip. Keep them.Claims are tracked in COPY.md.
| Anchor | Reel | Job |
|---|---|---|
#top | 01 · Opening titles | The claim, the five extra outputs, two calls to action |
#premiere | 02 · The premiere | A 20-second illustrative episode in a player: four scenes, captions, chapters, play/pause, 16:9 / 1:1 / 9:16. It grows to full bleed as you scroll |
| 03 · The problem | "Release notes nobody reads" turns into "A video people watch" | |
#acts | 04 · How it works | Connect, ship as usual, premiere, scrubbed by scroll |
#features | 05 · Features | Seven frames on a film strip that scrolls sideways |
#outputs | 06 · Every format | Avatar presenter, blog post, release widget, social posts, email digest |
#programme | 07 · The channel | release.show/acme, an episode list with a hover title card |
| 08 · Credits | The integrations | |
#admission | 09 · Pricing | Four tickets, monthly / annual, add-ons |
#finale | 10 · Finale | A 3-2-1 film leader, then the early-access form |
Plus 404.html, llms.txt, sitemap.xml, robots.txt, site.webmanifest,
.well-known/security.txt and an Open Graph card.
assets/releaseshow.js sets three custom properties on scroll, once per frame:
--p on each [data-scene]: progress through its sticky run, 0 to 1.--v on each [data-win="a,b,fade"] inside a scene: 1 while --p is
between a and b, ramping over fade.--e on each [data-reveal]: 0 to 1 as it enters the viewport.The CSS does all the moving with those, and every one has a default. With the
script blocked (<html class="no-js">) or with prefers-reduced-motion, the
page switches to static mode: the tall scenes collapse to their content, every
window shows at once, the film strip wraps, and the form falls back to a
mailto:.
.
├── index.html the page
├── 404.html
├── assets/
│ ├── releaseshow.css the whole design system, tokens at the top
│ ├── releaseshow.js scroll scenes, the player, hover card, billing toggle, sign-up
│ ├── favicon.svg the mark
│ ├── img/*.webp Higgsfield stills (tools/generate-images.sh)
│ ├── logos/*.svg integration marks, from Simple Icons (CC0)
│ ├── og.png Open Graph card
│ ├── apple-touch-icon.png icon-512.png
│ ├── org-avatar.png GitHub organization avatar, uploaded by hand
│ └── readme-banner.png the banner above
├── tools/
│ ├── generate-images.sh the Higgsfield prompts, and the script that renders them
│ ├── build-dist.sh assembles dist/ from an allowlist, stamps cache hashes
│ ├── deploy.sh deploys origin/main, and nothing else
│ ├── og-render.html source for og.png
│ ├── banner-render.html source for the README banner
│ ├── avatar-render.html source for the org avatar
│ └── render-og.sh renders all of the above with headless Chrome
├── llms.txt robots.txt sitemap.xml site.webmanifest _headers _redirects
└── COPY.md every factual claim, with its source
No build step, but the page uses root-relative paths, so serve it rather than
opening it as file://:
python3 -m http.server 8080
# then http://localhost:8080/
The sign-up form will not reach the waitlist from localhost, and says so with the contact address.
Four photographic stills sit behind the hero, the presenter cards, the blog
post's hero frame and the finale. They are generated with Higgsfield's GPT
Image 2, and the prompts in tools/generate-images.sh are their source:
higgsfield auth login # once
tools/generate-images.sh # every still that is missing
tools/generate-images.sh finale # redo one
tools/render-og.sh # then refresh og.png and the banner, which use them
About 6.5 credits a still. build-dist.sh refuses to build while a still the
stylesheet points at is missing, so a deploy can never ship a background that
404s. Every still is generic on purpose: no real person, product UI, logo or
on-image text.
./tools/render-og.sh
The GitHub organization avatar is written to assets/org-avatar.png. GitHub has
no API for organization avatars, so upload it by hand at
github.com/organizations/Release-Show/settings/profile.
A Cloudflare Worker with static assets, releaseshow-website (wrangler.toml), on the Factory0 account. It has no script: Cloudflare serves dist/ and applies _headers and _redirects. release.show and www.release.show are its custom domains, attached by the deploy itself. Merge to main, then:
tools/deploy.sh # deploy origin/main
tools/deploy.sh --dry-run # build it and say what would ship
The script deploys origin/main and nothing else. It fetches, checks main
out into a throwaway worktree, builds there, deploys that, and removes it; the
deployment records the commit. It never reads your working copy or its dist/.
More than one agent session can work in one checkout at once, and deploying
from a working copy can publish another session's uncommitted edits or roll
back work merged minutes earlier. Do not run wrangler deploy by
hand.
Edit in a worktree of your own, not in the shared checkout:
git worktree add ../releaseshow-website-worktrees/<name> -b <branch> origin/main
Use an API token for the Cloudflare account that owns release.show. The
default wrangler login may be a different account, and the deploy then fails
with Authentication error [code: 10000].
The form posts { email, product: "release.show", answers: { repo }, captchaToken }
to https://api.release.show/v1/waitlist: a Cloudflare Worker
(Release-Show/waitlist-backend) running Cratefield's
harness waitlist module with its own D1 database. On any failure the form
says so and offers [email protected] instead of pretending the address
was saved.
The human check. captchaToken comes from a Cloudflare Turnstile widget
(Managed mode, site key 0x4AAAAAAFM4K5IcBaDXU6Qx, hostnames release.show
and www.release.show), rendered explicitly by assets/releaseshow.js with
the action waitlist. The Worker verifies the token with siteverify, bound to
the hostname release.show and that action, and answers 400
.../problems/captcha-failed when it is missing or rejected. Tokens are
single-use, so the script resets the widget after every attempt. If the
widget cannot load (blocked, or no turnstile after 10 s), the form says so
and does not send. On localhost the widget shows a domain error: the site key
only works on the two hostnames above, so test a real join on the live site,
by hand.
The Worker's CORS allows https://release.show only, and it binds Turnstile
to that one hostname, so the form works on the apex, not on
www.release.show. www should redirect to the apex (a Cloudflare Redirect
Rule).
The Worker mails a double opt-in link, so a join ends on a "Check your inbox"
panel: it names the address, points at Spam/Promotions, tells people who
confirmed before that they are already in (the API answers the same 202
whatever the address's state, by design), and offers "Use a different email".
The panel takes focus and is announced; while sending, the button is disabled
with aria-busy and a spinner.
Content-Security-Policy. _headers sends a strict policy with no
'unsafe-inline': default-src 'self', frame-ancestors 'none',
object-src 'none', base-uri 'self', and every other directive limited to
what the pages actually load (see the comments in _headers). Turnstile is the
only third party in script-src and frame-src, and connect-src is the
waitlist Worker alone. Two things keep it that way, and
tools/build-dist.sh refuses to build when either drifts:
<script> is allowed only by its sha256 in _headers; andstyle="" attribute. Write the style, then run
python3 tools/csp-inline-styles.py: it moves every attribute into
assets/releaseshow-inline.css as a class. Each rule weighs as much as the inline
style did, so the look does not change.illustration chips.