d3ro-voice/scripts/ci
Yun Chan a0abda7a5c
Some checks failed
ci / 정본·보안·린트·타입·테스트 (push) Successful in 53s
ci / 모바일 린트·타입·Jest (push) Successful in 45s
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 21s
ci / .NET API 서버 테스트 (push) Successful in 13s
deploy-site / deploy (push) Failing after 27s
ci / 워크스페이스 빌드 검증 (push) Successful in 36s
feat(site): prerender every locale and publish structured data, llms.txt and sitemaps
Crawlers received an empty client-rendered shell (107 characters of text);
most AI crawlers do not run JavaScript, so the product was invisible to them.

- Build renders each locale to static HTML (/ for Korean, /en/ … /vi/) with
  src/entry-server.tsx + scripts/prerender.mjs; the browser hydrates the same
  locale. The language menu links to those pages instead of switching in place.
- Per-locale head: title, description, canonical, hreflang (+ x-default /en/),
  Open Graph and X cards with a per-locale 1200x630 image.
- JSON-LD graph: Organization, WebSite, WebPage, SoftwareApplication (KRW
  offers, version, release date, download URL from the canonical sources),
  HowTo and FAQPage. No invented ratings.
- robots.txt (search, ai-input and ai-train allowed; /app, /api, invites
  excluded), sitemap.xml with language alternates, llms.txt and llms-full.txt
  generated from the same translations and canonical values.
- IndexNow key and a post-deploy ping (Bing, Naver, Yandex).
- A factual "at a glance" section and two FAQ answers (recognised languages,
  where data is stored) in all 10 languages.
- Icons, apple-touch-icon and web manifest; asset base is now absolute so
  sub-path pages load the same bundle.

Verified: 3.6k-7.7k characters of text per page, no hydration warnings,
no overflow at 320/1440 in six locales, axe 0, Lighthouse mobile SEO,
accessibility and best practices 100.
2026-09-27 10:45:05 +09:00
..
audit-nas-stt-config.ps1 feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
bootstrap-linux-toolchain.sh ci(forgejo): install the .nvmrc Node before npm on the Linux runner 2026-09-26 21:05:34 +09:00
build-all.mjs feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment 2026-08-20 11:12:05 +09:00
build-mobile-local-e2e.ps1 feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
build-portable.mjs fix(release): keep the updater configuration in the installer 2026-09-18 16:35:03 +09:00
check-design-tokens.mjs feat(release): publish desktop updates from a tag through one feed 2026-09-16 23:23:00 +09:00
check-no-hardcoded-secrets.mjs feat(release): publish desktop updates from a tag through one feed 2026-09-16 23:23:00 +09:00
create-desktop-license-keypair.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
create-mobile-release-evidence.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
create-release-evidence-key.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
create-release-tag.mjs feat(release): publish desktop updates from a tag through one feed 2026-09-16 23:23:00 +09:00
extract-release-notes.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
fix-native-abi.mjs fix(release): stop shipping native modules built for the wrong runtime 2026-09-18 15:45:03 +09:00
generate-checksums.mjs feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment 2026-08-20 11:12:05 +09:00
mobile-release-evidence-lib.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
ping-indexnow.mjs feat(site): prerender every locale and publish structured data, llms.txt and sitemaps 2026-09-27 10:45:05 +09:00
prepare-mobile-release-publication.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
prepare-whisper-model.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
publish-forgejo-release.mjs fix(release): refuse to re-publish a version that already shipped 2026-09-16 23:49:37 +09:00
publish-gitlab-release.mjs feat(release): publish desktop updates from a tag through one feed 2026-09-16 23:23:00 +09:00
publish-portable-release.mjs fix(release): stop portable aliases from mixing old and new bytes 2026-09-23 16:39:38 +09:00
publish-updater-release.mjs fix(release): keep the updater configuration in the installer 2026-09-18 16:35:03 +09:00
push-to-chanpaca-git.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
run-mobile-csprng-instrumentation.sh feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
run-mobile-emulator-gate.sh feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
run-mobile-incoming-share-local-e2e.ps1 feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
set-forgejo-secrets.mjs docs(release): record why tagged releases publish nothing 2026-09-18 04:37:05 +09:00
sync-core-contract.mjs refactor(billing): remove Stripe; payments are Payple (web) and Google Play (mobile) 2026-09-26 20:56:18 +09:00
sync-version.mjs chore: remove duplicate copies of the site, download center and installers (WS-C) 2026-09-26 15:48:52 +09:00
verify-android-app-links.mjs chore: remove duplicate copies of the site, download center and installers (WS-C) 2026-09-26 15:48:52 +09:00
verify-android-artifact.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
verify-desktop-renderer-bundles.mjs fix(desktop): render popup overlays in packaged builds 2026-09-19 08:24:03 +09:00
verify-mobile-build-config.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
verify-mobile-release-boundary.mjs ci: run CI only on Forgejo and delete the never-run GitHub workflows (WS-D) 2026-09-26 15:49:00 +09:00
verify-mobile-release-config.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
verify-native-abi.mjs fix(release): stop shipping native modules built for the wrong runtime 2026-09-18 15:45:03 +09:00
verify-play-store-assets.mjs feat(play): finalize store graphics and copy 2026-08-29 20:11:54 +09:00
verify-release-evidence-key-pair.mjs feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
verify-release-metadata.mjs ci: run CI only on Forgejo and delete the never-run GitHub workflows (WS-D) 2026-09-26 15:49:00 +09:00
verify-sidecar-bundle.mjs feat(desktop): make local speech transcription work end to end 2026-09-18 00:48:47 +09:00
verify-windows-android-upload-key.ps1 feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
verify-windows-release-artifact.ps1 ci(release): require trusted Windows signing 2026-08-29 18:49:08 +09:00
write-app-update-yml.mjs fix(release): keep the updater configuration in the installer 2026-09-18 16:35:03 +09:00