2,159 curated startup launch videos from X — every launch film, demo, and walkthrough archived with a stable URL, a poster frame, and a citation link back to the original post. New videos ship daily.
whatships.com · Browse videos · Studios · Tools · Submit a video
![]() Claude |
![]() Railway Sandboxes |
![]() Reception |
![]() Framer Agent |
![]() Gemini 3.8 Live |
![]() Pencil |
A curated, independent archive of how products announce themselves: launch films, first-look demos, and walkthroughs posted on X. Founders, designers, and marketers use it to study launch craft after the timeline has moved on. Nothing is ranked, placement is not sold, every entry is human-reviewed — and every page cites the original X post.
Categories: AI · Developer tools · Design · Motion · Productivity · Consumer · Hardware
Every page is machine-readable without scraping: send Accept: text/markdown to any HTML URL, or use the structured surfaces — /llms.txt, /llms-full.txt, /openapi.json, /search-index.json, /sitemap.xml.
If you find a launch worth remembering, star the repo — the catalog grows daily.
The rest of this README is contributor documentation.
pnpm install
pnpm devOpen http://localhost:4321.
| Command | Description |
|---|---|
pnpm dev |
Start the Astro dev server |
pnpm build |
Production static build |
pnpm deploy |
Build, strip local streams, and deploy to Cloudflare Workers |
pnpm preview |
Preview the production build |
pnpm check |
Astro + TypeScript check |
pnpm test:run |
Unit tests (Vitest) |
pnpm posters:capture |
Download amplify MP4s and extract 1440w + 960w posters (streams are no longer generated) |
pnpm discovery:dry-run |
Scan X watchlist (needs X_BEARER_TOKEN) and print candidates without filing issues |
pnpm discovery:fixture |
Run discovery against the sample fixture (no API key) |
pnpm discovery:seed-inbox |
Seed src/data/inbox.json from the fixture (for /admin demos) |
pnpm discovery -- --publish --email |
Create GitHub issues, update inbox, optional Resend digest |
pnpm inbox:apply |
Merge approved inbox drafts into videos.json |
Every push to main triggers .github/workflows/deploy.yml: build → strip dist/streams → wrangler deploy to Cloudflare Workers static assets, served on whatships.com and www.whatships.com.
In-site playback goes through a self-hosted video proxy (workers/video-proxy) at proxy.whatships.com: X's CDN rejects any non-Twitter Referer, so the Worker relays the original video.twimg.com media Referer-less. Local /streams/{slug}.mp4 files are a dev-only fallback and stay out of git.
Required secrets / env:
| Secret / env | Where | Purpose |
|---|---|---|
CLOUDFLARE_API_TOKEN |
GitHub Actions secret | wrangler deploy |
PUBLIC_VIDEO_PROXY_BASE |
Build env | Playback proxy base URL inlined into the bundle |
Edit src/data/videos.json. Each published entry needs:
- stable
slugandid - product/company metadata
categoryfrom the allowed list insrc/lib/catalog.tstweetUrl/tweetIdfor the original X postvideoUrl(amplify MP4) — used for poster capture and proxied playbackposterpath underpublic/posters/status: "published"(drafts stay offline)
After adding a videoUrl, capture the poster:
pnpm posters:capture -- --slug=your-slug --forceDetail pages play the video in-site through the proxy (click-to-play; no autoplay on load) and always link out to the original X post.
Open /submit/ to propose a launch video, tool, studio, or designer. Choose a type, fill the matching fields, and the form opens a prefilled GitHub issue on dingyi/whatships.com for editorial review. Approved entries are merged into the matching catalog file (videos.json, tools.json, or studios.json).
plv scans a curated X watchlist every week for product-launch / demo videos, then stages matches in src/data/inbox.json for review at local /admin (pnpm dev only — not deployed). Optional: GitHub Issues (label discovery) + Resend email digests. Nothing is published without you.
flowchart LR
W[watchlist.json] --> J[GitHub Action weekly]
J --> X[X API timelines]
X --> F[filter: video + launch signals]
F --> Q[inbox.json]
F --> I[optional Issues]
F --> E[optional email]
Q --> A["local /admin review"]
A --> V[videos.json via inbox:apply]
The review queue is injected only by astro dev. Production builds do not emit /admin or the inbox client bundle.
- Run
pnpm devand open http://localhost:4321/admin/. - Optional: set
ADMIN_PASSWORDin.envto gate the local UI. With no password, dev is open-access. - Edit metadata, Approve or Reject.
- Download inbox.json and replace
src/data/inbox.json(or rely on the weekly Action commit). - Run:
pnpm inbox:apply
pnpm posters:captureLocal decisions are also cached in the browser (localStorage) so you can continue mid-review.
Issues with label discovery still work as a parallel queue if you use --publish without --skip-issues.
Repo → Settings → Secrets and variables → Actions:
| Secret / env | Required | Purpose |
|---|---|---|
X_BEARER_TOKEN |
Yes for live discovery | X API v2 bearer with read access to user lookup + timelines |
RESEND_API_KEY |
For email | Resend API key |
NOTIFY_EMAIL |
For email | Your inbox (comma-separated for multiple) |
DISCOVERY_FROM_EMAIL |
For email | Verified Resend sender, e.g. plv@yourdomain.com |
GITHUB_TOKEN is provided automatically (issues + committing inbox.json).
Note on X API cost: Timeline reads need a paid X API plan (free tiers generally cannot read other users’ posts). Without
X_BEARER_TOKEN, the scheduled workflow fails closed rather than scraping unofficially.
Curate accounts in src/data/watchlist.json:
{
"handle": "cursor_ai",
"company": "Cursor",
"category": "developer-tools",
"tags": ["ide", "agents"]
}# Offline: seed admin inbox from fixture
pnpm discovery:seed-inbox
ADMIN_PASSWORD='your-secret' pnpm dev
# open http://localhost:4321/admin/
# Live dry-run (no issues / no commit)
export X_BEARER_TOKEN=...
pnpm discovery:dry-run
# Publish: inbox + optional issues + email
export GITHUB_TOKEN=...
export GITHUB_REPOSITORY=dingyi/whatships.com
export RESEND_API_KEY=...
export NOTIFY_EMAIL=you@example.com
export DISCOVERY_FROM_EMAIL=plv@yourdomain.com
pnpm discovery -- --publish --email
# After approving in local /admin (and saving inbox.json):
pnpm inbox:apply
pnpm posters:captureThe workflow .github/workflows/weekly-discovery.yml runs Mondays 15:00 UTC, updates src/data/inbox.json, and can open Issues + email. Start it manually from the Actions tab when needed.
If you skip Resend, enable GitHub notification emails and/or review the inbox locally with pnpm dev after each run.
- Astro (static output)
- React 19 islands
- Tailwind CSS 4
- shadcn + Base UI
- Vitest
MIT for original source code and documentation. Product names, trademarks, and third-party video content remain the property of their respective owners.





