4 Commits

Author SHA1 Message Date
DIYgod cc03df9f24 fix(store-assets): match existing creative asset placements by image
The placements list only carries the image relationship when the image is
included, so `app-store-creative.ts assign` saw every placement as pointing
elsewhere and would have replaced all of them on each run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 11:39:28 +08:00
DIYgod 0dca01f3f0 feat(store-assets): add App Store creative assets and custom product pages
Creative assets: a `creative` layout renders the universal 16:9 image (5244 x
2950) that iOS and iPadOS 27 show as the product page header and in search
results, one per App Store locale, with the hero copy and the Mac and iPhone
kept inside the area both crops show. `scripts/app-store-creative.ts upload`
puts them into the Asset Library and `assign` places the approved ones on
every localization of the live iOS version.

Custom product pages: `src/custom-pages.ts` defines three pages (AI reading,
podcasts and video, RSS and RSSHub) by screenshot order, and each locale's
app-store.json gains their promotional text and the keywords they take over
from the iOS keyword field. check-listing.ts checks the limits and that every
keyword comes from that field and leads to one page.
`scripts/app-store-custom-pages.ts sync | submit` creates the pages, their
localizations, keywords and screenshots, and sends them to App Review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 14:04:55 +08:00
DIYgod cdd3942d3d feat(store-assets): render release promo videos from a spec
Turn the one-off script behind the desktop 1.15.0 / mobile 0.5.11
announcement video into store-assets/scripts/release-video.ts, driven by
a JSON spec; promo/example.json reproduces that video and uses every
layout. Stills mode writes one frame per scene plus a contact sheet,
both modes print each shot's capture time and report copy that wraps or
leaves its area, and headlines shrink to fit the copy column.

Stacked Mac shots now get an opaque fill: the captures leave the
vibrancy sidebar transparent, so a crossfade showed the sidebars of the
shots below through it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:35:45 +08:00
DIYgod 2131cec389 chore(store-assets): add the store screenshot and listing pipeline
Store copy for 12 listing locales, plus the tooling that captures the apps
with a demo account and renders the App Store, Google Play and Microsoft
Store screenshots and the README banner. Raw captures and rendered images
stay out of the repository (store-assets/.gitignore).

store-assets is a private workspace package, so playwright, sharp, pathe and
the other script dependencies are declared instead of resolved through
hoisting, and turbo typechecks it. The lockfile only gains its importer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 14:34:42 +08:00