Repository navigation
Conversation
A stdlib-only Go generator, go run ./apps/site -out apps/site/dist, renders kando.yldm.ai from html/template templates and one content file per language: a page for each language that has a content file, with canonical, hreflang alternates, Open Graph and Twitter tags and a language switcher, plus 404.html, robots.txt, sitemap.xml and CNAME. It copies the README screenshots of each language and the featured sites' logos from the app's catalog, and makes the favicons and the touch icon from the app icon. The English content is the source; notes.json holds a translator's note for each key. The root page sends a first-time reader whose browser prefers Chinese, Japanese or Korean to that page, unless they picked a language before or the address pins one with ?lang=.
The tests render the site once and check each page's lang, canonical, alternates, social tags and switcher, that every local link resolves inside dist, that nothing points outside the repository, EveryAPI and the site itself, and that every content file and notes.json has exactly en.json's keys. make test runs them.
On a push to main that changes the site, the screenshots, the site catalog, the app icon or the workflow, and by hand: build and test apps/site on a GitHub-hosted runner, then deploy apps/site/dist with the Pages actions, pinned to commit SHAs.
Commands in Get started wrap instead of scrolling under the copy button, which now sits in the corner of the block; a hidden scrollbar on macOS and iOS made a cut-off line look like the whole command. The hero's build link is underlined, kept on one line and spaced in CSS, without the extra space after a Chinese or Japanese full stop. The line through the how-it-works numbers ends at the fifth circle. Step numbers use the darker gradient and the initials' plates are darkened, so white text reaches 4.5:1. Elements with a lang of their own get their own CJK font stack, Simplified Chinese gets an SC-first one, and Japanese text breaks by phrase with strict line breaking, so no line starts with ー. 404.html marks no language as the current page, and Build from source is no longer numbered as a third step.
The logo strip took the catalog's Simplified Chinese names on every page. content/sites.zh-TW.json gives the Traditional forms by domain, and a name in Chinese characters on a page in another language is marked lang="zh-Hans", so screen readers read it as Chinese. sites.json stays the app's catalog as it is.
With storage blocked, choosing English in the switcher could not be remembered, and the root page sent the reader straight back to their browser language; the 404 page's home link did the same even with storage. The root page now redirects only a reader who did not come from another page of the site.
Download names macOS and Linux and sends Windows readers to build from source, since the release publishes no Windows build. Upload says that signing in needs your own KANDO_GOOGLE_CLIENT_ID and uploading your storage's keys. The player card says the side panel makes 4 to 12 equal clips, and the player line says the translation sits on top by default, as the screenshot shows. Get started says the tools must be on PATH, that Kando offers to update an outdated yt-dlp, and, in a new line, how to get a whisper model and set up translation. Build from source is the alternative to downloading, and its note gives the command for a Windows without make. A dropped file is not downloaded, the settings heading no longer promises minutes, and the meta descriptions fit in a search result. In the translations: zh-CN and zh-TW name Kando in the logo's accessible name, sizes keep their units on one line, ja's alt text uses the app's 表示言語, ko uses 표지 and a natural sentence for the translate step, zh-TW's presets belong to Settings › AI Service, and zh-CN's unsigned and player sentences read as Chinese.
The release publishes only macOS and Linux packages, and Update and Retry updates an outdated yt-dlp. The Japanese Settings › General picture names the row 表示言語, as the app does.
The Site workflow runs only on main, so a pull request that renamed a screenshot, changed sites.json or a logo, or left a content key behind passed CI and then broke the deploy. apps/site joins the packages CI builds, vets and tests, and the go mod tidy and govulncheck loops.
The library is the first picture of the READMEs and the landing page and the one link previews show, and its three red download-failed cards read as a broken app. TestScreenshotsReadme now renders it without the failed jobs, and docs/assets/<lang>/library.png is rendered again in all five languages; the other three pictures come out byte for byte the same.
The extra right padding kept for the wider Japanese copied label split yt-dlp and the clone URL at 360 px for good; the label shows for 1.6 seconds after a click, so the commands get the full width instead.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Kando's landing page, to be served from GitHub Pages at https://kando.yldm.ai, in the five interface languages:
/(English),/zh-CN/,/zh-TW/,/ja/,/ko/.apps/siteis a stdlib-only Go module (added togo.work) that renderstemplates/withcontent/<lang>.jsoninto static HTML:go run ./apps/site -out apps/site/dist. No Node, no npm, no third-party modules, and the pages load nothing from other hosts (no web fonts, scripts, analytics or CDNs).<html lang>, canonical, reciprocalhreflangalternates plusx-default, Open Graph/Twitter tags, its own screenshots fromdocs/assets/<lang>/, and a switcher naming each language in itself. On a first visit,/sends a reader whose browser prefers Chinese, Japanese or Korean to that page; a choice made in the switcher is remembered and never overridden. Also404.html,robots.txt,sitemap.xml,CNAME, favicons drawn from the app icon..srt); features, including a works-with strip of the featured site logos from the app's catalog and its 929-site count; player and settings screenshots; get started (download, the three programs with the Homebrew command, model and AI service setup, building from source).release.ymlsays), so Windows readers are pointed to building from source; sound plays on macOS only; upload needs your own Google OAuth client id and storage keys..github/workflows/site.yml, modeled on ai-logo's: GitHub-hosted runner, least-privilege permissions, every action pinned to a commit SHA, builds and tests on pushes tomainthat touch the site, its pictures, the site catalog or the icon, then deploys withactions/deploy-pages.ci.ymlnow also tests./apps/site/...on every pull request.Also in this PR:
TestScreenshotsReadmeshoots the README library picture without the failed demo jobs, so the first product picture (and every link preview'sog:image) no longer shows three red "Download failed" cards.How it was built
A workflow of 25 agents: one built the generator and the English page, four wrote the zh-CN, zh-TW, ja and ko copy as native copywriters using the app's own UI wording from its catalogs, nine reviewed it (visual QA at four widths in light and dark, claim accuracy against the code, accessibility and SEO, deployment and privacy, and one native reviewer per language), a skeptical verifier checked every finding, and 43 of the 44 confirmed findings were fixed (the last one went away with another fix).
Screenshots
The page in English and Simplified Chinese at 1440 px, and in Japanese (dark) and Korean at 390 px:
The README library picture, before and after:
Before it goes live
kando.yldm.aiis a proxied CNAME toyldm-tech.github.ioin Cloudflare, set up the same way asailogo.yldm.ai.CNAMEfile.Test plan
gofmt -l apps/site,go vet ./apps/site/...,go test -count=1 ./apps/site/...(pages render for all five languages; every content file has en.json's keys and placeholders; every page has lang, canonical, all alternates, og:image and switcher links; every local href/src resolves; no external hosts beyond the allowed links; images have width, height and alt; no inline script or style; 404 marks no current page)CGO_ENABLED=0 go test ./apps/kando/... ./packages/core/... ./packages/media/...?lang=en