mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
* feat(landing-page): localize plugins library across 18 locales PR #2926 shipped the new `/plugins/` library hub + four kind sub-routes + detail pages, but the chrome was English-only — visitors landing on `/zh/plugins/` saw the old marketplace registry placeholder rendered by the catch-all instead, and detail pages rendered identical English copy regardless of locale prefix. This PR brings the plugin surface to feature parity with `/zh/skills/`, `/zh/templates/`, `/zh/systems/`, `/zh/craft/`. ## What changes - New `app/_lib/plugins-i18n.ts` — single source for all plugin chrome copy (hub, list pages, chip rails, share dialog, detail-page meta labels). English baseline + 17 locale overrides keyed on `LandingLocaleCode` (the same short-code shape `localeFromPath()` returns). Missing keys per locale fall back to English so a partially-translated locale still renders sensibly. Translations cover hub copy, four tile titles + blurbs, seven artifact-kind labels + descriptions, 23 scene-subcategory labels, 18 detail-page chrome strings, and a six-key share-dialog table with a per-locale `shareTemplate({title, url})` function (translated for every locale where `_lib/i18n.ts` already had one — same voice). - `app/pages/plugins/{,templates/,templates/[kind]/,skills/,systems/, craft/,[slug]/}/index.astro` — every hardcoded English string now reads `getPluginsCopy(locale)` keys. Page logic and routing unchanged. - New short-code wrappers under `app/pages/[locale]/plugins/` — six files (hub + three sub-routes + `[kind]/` and `[slug]/`) following the same pattern `[locale]/skills/index.astro` already uses: each re-exports the canonical page component and adds a per-locale `getStaticPaths()` so the build emits 17 locale prefixes per plugin route. Total plugin-route prerender count goes from ~390 to ~7 000, matching the existing skill/template scaling. - Catch-all (`[locale]/[...path].astro`) — old `getPublicPlugins` / `getRegistryCounts` registry rendering removed (placeholder UI that was never wired to a real marketplace data source). Plugin routes now live exclusively under `[locale]/plugins/...` short-code wrappers, so the catch-all stops claiming `'plugins'` as a route root. The dead-code path also drops a `pluginCounts.all` reference the title row was reading. - `.plugins-tile-grid` styles promoted from a scoped `<style>` in the default-locale hub to global `app/sub-pages.css` so the short-code wrapper renders the same hub markup without re-mounting per-page CSS — `display: contents`-style scoping pitfalls in Astro's per-component CSS scoping made this the cleanest fix. ## Surface area - [ ] **UI** — new page / dialog / panel / menu item / setting / empty state in `apps/web` or `apps/desktop` - [ ] **Keyboard shortcut** — new or changed - [ ] **CLI / env var** — new `od` subcommand or flag, new `tools-dev` flag, or new `OD_*` env var - [ ] **API / contract** — new `/api/*` endpoint, new SSE event, or changed shape in `packages/contracts` - [ ] **Extension point** — new entry under `skills/`, `design-systems/`, `design-templates/`, or `craft/`, or change to the skills protocol - [ ] **i18n keys** — new translation keys (full plugin chrome added across all 18 locales) - [ ] **New top-level dependency** — adding any new entry to the **root** `package.json` - [ ] **Default behavior change** — changes what existing users experience without opting in - [x] **None** — landing-page-only restoration of i18n parity for the plugin surface ## Validation - `pnpm --filter @open-design/landing-page typecheck` → 0 errors - `pnpm --filter @open-design/landing-page build:static` → 16 127 pages built (+6 584 over current main: ~388 plugin detail pages × 17 locale prefixes plus the hub + four sub-routes × 17 locales). - `copy-example-html.ts` reports `266 entry files + 65 referenced files`, identical to before — no regression in the asset-mirroring pipeline. - Local Playwright smoke (`/zh/plugins/...`): - `/zh/plugins/` renders `<title>插件库 · Open Design</title>`, label `插件库`, h1 `407 个可组合的构件。`, four tiles labelled `模板 / 技能 / 设计系统 / 工艺`. - `/zh/plugins/templates/video/` renders h1 `48 视频`, scene chips `全部 / 动效 / 短视频 / 营销 / 产品 / 数据讲解`. - `/zh/plugins/example-article-magazine/` share dialog renders `复制下面的文案、然后跳到你想分享的平台粘贴即可` etc., share template auto-interpolates plugin title + URL into Chinese voice. - All 18 locale prefixes (`/zh`, `/zh-tw`, `/ja`, `/ko`, `/de`, `/fr`, `/ru`, `/es`, `/pt-br`, `/it`, `/vi`, `/pl`, `/id`, `/nl`, `/ar`, `/tr`, `/uk`) → 200 across hub + four sub-routes + sample detail page. - English `/plugins/` unchanged (default-locale path bypasses the `[locale]/...` wrapper). * feat(landing-page): finish plugins i18n chrome across 18 locales The first localization pass shipped a partial fix: hub headings, lead copy, two-level page chrome, detail-page metadata labels, the share dialog, and the chip rail were still falling back to English on every non-English locale because plugins-i18n.ts only filled a chrome slice for `zh` and the file header even claimed "7 artifact-kind labels and 25 scene-subcategory labels are translated" for every locale that did not yet have those blocks. Three changes close the visible gap: 1. plugins-i18n.ts: fills the 27 still-missing chrome fields per locale for zh-tw / ja / ko / de / fr / ru / es / pt-br / it / vi / pl / id / nl / ar / tr / uk. Includes the 7-key category map, the 23-key subcategory map, hubHeading / hubLead, the 4 *Label / *Heading / *Lead triples for the templates / skills / systems / craft hub pages, the 4 tile blurbs, the 4 browse buttons, sceneLabel, allChip, the 12 detail-page metadata labels (mode / scenario / platform / surface / author / manifest id / tags / preview caption / find on GitHub / homepage / open in new tab) and bucket label map, the detail share dialog (title / copy link / jump-to), and the header-side nav.plugins entry. zh receives the same 11 detail-page and share-dialog labels it was also missing. 2. header.tsx + site-footer.astro: routes the hardcoded "Plugins / Templates / Skills / Systems / Craft" labels through `nav.*` from HeaderCopy, so every locale gets its own dropdown trigger and footer column. Adds `nav.plugins` to HeaderCopy and fills it in 18 locales with the local form ("插件" / "プラグイン" / "Plugins" / "Plug-ins" / "Plaginy" / "الإضافات" / etc). 3. plugin-row.astro + content-i18n.ts: chip rail. The bundled-plugin branch now runs raw `mode` / `scenario` slugs through the shared localizeTaxonomyValue, and that helper now also consults the plugins-i18n subcategory map before giving up. localizeTaxonomyValue now returns undefined on a true miss instead of the unknownTag placeholder, so chips drop quietly instead of showing "Category" / "分類" / "Categoría" for taxonomy slugs we have not localized yet. Callers that genuinely want the placeholder (`localizeContentTag`, blog `category`, system noun) still keep the explicit fallback. Out of scope and tracked separately: per-plugin title and description in plugins/_official/* (author-supplied English metadata, ~401 plugins without an i18n schema in the manifest yet — needs RFC + tooling before the manifests can be expanded), and adding the long tail of mode / scenario / category slugs (`code-migration`, `plugin-sharing`, `tune-collab`, `live-artifacts`, `engineering`, ...) to TAXONOMY_TERMS so chips render localized labels for every taxonomy value rather than dropping silently. * feat(landing-page): cover plugins chip rail long-tail taxonomy slugs PR #3010's first round localized the high-frequency mode/scenario chips (prototype, video, image, marketing, design, ...) but left the ~37 mode/scenario and 14 category slugs that show up in real `od.*` metadata — code-migration, plugin-sharing, design-system, planning, scenario, refine, discovery, handoff, token-map, tune-collab, orbit, live-artifacts, engineering, healthcare, hr, sales, support, default-router, downstream-export, figma-migration, media-generation, plugin-authoring, validation, 3d-shaders, animation-motion, audio-music, creative-direction, design-systems, diagrams, documents, image-generation, marketing-creative, screenshots, slides, video-generation, web-artifacts, ... — falling through to undefined and dropping their chip silently on every non-English locale. The data layer is the source of truth here, so this expansion lands in `content-i18n.ts:TAXONOMY_TERMS` / `CATEGORY_LABELS` rather than the plugins-i18n catalog: a single dictionary entry per slug fans out to every chip-rail consumer (catalog rows, detail metadata, the templates/[kind] facets) without each consumer touching its own copy. Translations cover all 17 non-`en` locales. Brand and product nouns (Figma, Open Design, BYOK, plugin) stay literal; technical taxonomy slugs get short equivalents that read as chips rather than full prose. The result on `/ja/plugins/skills/` matches `/plugins/skills/` chip-for-chip (30 chips both sides) instead of dropping 27 of them the way the previous iteration did. * feat(landing-page): read manifest title_i18n / description_i18n on bundled plugins PR #3010's prior rounds localized chrome and chip rails but the catalog's most prominent text — each row's plugin name and blurb — stayed English on every non-English locale. The plugin manifest schema (`packages/contracts/src/plugins/manifest.ts`) has supported `title_i18n` and `description_i18n` (Record<locale, string>) on every manifest from spec v1; ~24 of the 401 first-party manifests already carry one for `zh-CN`. The reader was just never wired to use them. This change does the reader half: bundled-plugins.ts captures the two i18n maps off each `open-design.json`, plugin-row.astro and the detail page resolve them at render time via two new helpers (`resolveBundledTitle`, `resolveBundledDescription`) that mirror the short→long fallback chain documented in the manifest spec (`htmlLang` like `zh-CN` → short `LandingLocaleCode` like `zh` → primary tag → `en` → English baseline). The static-paths pass still runs once for all locales — it has to, since each manifest produces one URL — but the title/description shown on the rendered page now reads the locale off `Astro.url.pathname` and picks the right entry out of the maps. Verified locally: `/zh/plugins/example-card-twitter/` now reads "Twitter 分享卡 / 推特金句 / 数据卡, 适合配推文" from the manifest's existing `zh-CN` block instead of the English baseline. Plugin-data half follows in a separate commit. The 17 non-English locales × 401 manifests need backfilling so the reader has something to resolve to; that's data, not schema, and lands as a sequence of manifest patches rather than tangled with this code change. * feat(plugins): translate scenarios bucket title/description across 17 locales Closes the first chunk of #3028. Eleven scenarios plugins (the default-scenario bundle for each taskKind: code-migration, figma-migration, media-generation, new-generation, tune-collab, plugin-authoring; the default design router; the React / Vue / Next.js downstream-export starters; and the Refine baseline) get title_i18n + description_i18n filled for all 17 non-English locales the landing page serves (zh-CN, zh-TW, ja, ko, de, fr, ru, es, pt-BR, it, vi, pl, id, nl, ar, tr, uk). The reader landed in 7ddfe36; this commit is data-only. taskKind slugs that other docs reference by name (`code-migration`, `figma-migration`, `tune-collab`, etc.) stay literal in the descriptions so cross-references still resolve. Brand nouns — Open Design, Next.js, React, Vue, Figma — also stay literal. `/ja/plugins/od-code-migration/` now reads "コードマイグレーション(デフォルトシナリオ)" instead of the English baseline; `/zh/plugins/skills/` shows "代码迁移(默认场景)" in the catalog row. Remaining buckets (image-templates 45, video-templates 50, examples 140, design-systems 142 = 377 plugins) follow in subsequent commits in this PR. * fix(landing-page): drop CJK template wrap when source name is still English The Chinese / Japanese / Korean fallback templates for craft, skill, template, system, plugin, and blog text splice the source `name` / `title` into a CJK sentence frame: ``${name}工艺规则``, ``Open Design 指南:${topic}``, ``${name} は…のスキルです``. When the underlying SKILL.md / craft markdown / blog frontmatter still ships an English name (true for ~95% of the catalog today), that produces mid-sentence script straddling on `/zh/...`, `/zh-tw/...`, `/ja/...`, `/ko/...` like: H1 : "Editorial typography hierarchy工艺规则" Lead : "这条 Open Design 工艺规则定义 Editorial typography hierarchy 的执行标准…" Plug : "video 插件 · 3D Animated Boy Building Lego" That reads worse than the all-English fallback, because the visitor parses the page in two scripts at once. Adds a `nameNeedsEnglishFallback` guard that fires for the four CJK locales whenever the spliced-in name has no CJK characters of its own, and threads it through every `localizeXxxText` helper: craft, template, system, plugin, skill, blog. When it fires the helper returns the raw English content untouched, so the section renders end-to-end in one language. Chrome (header, footer, breadcrumb, buttons, share dialog) keeps its CJK rendering — only the title-and-lead block falls back. Side benefit: the same guard kicks in on the long tail of plugin manifests still pending `title_i18n` / `description_i18n` backfill (tracked in #3028), so `/zh/plugins/<bundled>/` no longer pairs a "video 插件 · 3D Animated Boy Building Lego" title with a Chinese breadcrumb. The page reads "3D Animated Boy Building Lego" + the English manifest description, while header / footer / breadcrumbs stay localized. Once a manifest ships its i18n maps, the chrome and body re-converge automatically. Non-CJK non-Latin scripts (ar, vi, ...) keep the previous behavior — their templates already read tolerably with English names. If that turns out to be wrong on a real audit, the same guard generalizes by adding the matching Unicode range and locale set. * feat(plugins): translate image-templates bucket title/description across 17 locales 44 of 45 image-templates plugins get title_i18n + description_i18n filled for all 17 non-English locales (zh-CN, zh-TW, ja, ko, de, fr, ru, es, pt-BR, it, vi, pl, id, nl, ar, tr, uk). Generated via Claude Sonnet 4.5 over the OpenRouter gateway, ~$1.38 in API spend, 156s wall-clock. Brand and cultural references stay literal (Open Design, Lego, Hanfu, Showa, Pokémon, Black Myth: Wukong). Long AI generation prompts collapse to a 1-2 sentence summary capturing what the plugin does — the description doubles as catalog blurb on the landing site, not as the actual generation prompt (which lives in example.html / the manifest's preview entry). Skipped: `profile-avatar-realistically-imperfect-ai-selfie` returned malformed JSON on three retries; will rerun with a tighter prompt in a follow-up commit. Catalog rows for that plugin keep falling back to the raw English fields per #3010's reader change, so nothing breaks. Tracking: closes the image-templates row in #3028. * feat(plugins): translate video-templates bucket title/description across 17 locales 49 of 50 video-templates plugins get title_i18n + description_i18n filled for the 17 non-English landing locales. Generated via Claude Sonnet 4.5 over OpenRouter, ~$1.47 in API spend, 177s wall-clock. HyperFrames templates, the Three Kingdoms cinematic series, the Seedance/short-film prompts, and the K-pop / wuxia / anime variants all get a 1-2 sentence catalog blurb in each locale; brand and cultural tokens (Black Myth: Wukong, Hanfu, Showa, Pokémon, Three Kingdoms / 三国志, Lego, Disney, K-pop, HyperFrames) stay literal. Skipped: `live-action-anime-adaptation-water-vs-thunder-breathing-duel` returned malformed JSON on three retries; will rerun in followup. Falls back to the raw English fields per the reader landed in7ddfe36. Tracking: closes the video-templates row in #3028. * feat(plugins): translate examples bucket (117/140) title/description across 17 locales 117 of 140 examples plugins get title_i18n + description_i18n filled for the 17 non-English landing locales. Generated via Claude Sonnet 4.5 over OpenRouter, $3.94 in API spend, ~13 min wall-clock at 8-way concurrency. Existing zh-CN translations on 24 manifests are preserved (the merge keeps author-supplied entries and only adds missing locales). 23 of 140 returned malformed JSON on three retries — the output likely hit the 4000 max_tokens ceiling on plugins whose description balloons across 17 locales. Those manifests fall back to English on non-`en` rendering per the reader landed in7ddfe36, and will rerun in a follow-up commit with a larger token budget and a stricter output schema. Tracking: closes 117/140 of the examples row in #3028; the remaining 23 stay open in that issue's failure list. * feat(plugins): translate design-systems bucket (141/142) title/description across 17 locales 141 of 142 design-systems plugins get title_i18n + description_i18n filled for the 17 non-English landing locales. Generated via Claude Sonnet 4.5 over OpenRouter, $2.55 in API spend, 301s wall-clock at 8-way concurrency. Translator script gained two improvements between examples and this bucket: - max_tokens bumped from 4000 to 8000 so 17-locale outputs stop truncating on the long-tail manifests with verbose descriptions - a balanced-brace JSON extractor that pulls the outermost `{ ... }` from the response, tolerating trailing prose Claude occasionally appends after the JSON object. Result: only 1 manifest (`totality-festival`) failed parse this batch, down from ~16% on the examples bucket. The next commit re-runs the prior buckets' failures with the improved script. Tracking: closes 141/142 of the design-systems row in #3028. * fix(plugins): backfill 4 plugins that retried green after JSON extractor improvement dcf-valuation, social-media-dashboard, wireframe-sketch (examples bucket) and live-action-anime-adaptation-water-vs-thunder-breathing-duel (video-templates bucket) parse cleanly under the balanced-brace extractor introduced for the design-systems batch. The remaining 22 failures from the prior runs hit a different parse mode (Claude emitting unescaped double quotes inside string values when the source description contains its own English quotes like 'make it professional'); those will need a tighter prompt and rerun. * fix(plugins): translate the last 22 plugins with quote-handling prompt fix The 22 stuck plugins all carried English / Chinese double-quoted phrases inside their description (\"make it professional\", \"What's inside\", \"电子杂志 × 电子墨水\") that Claude was emitting back inside JSON string values without escaping, breaking the parse. Added one rule to the translator prompt — never use a straight double quote inside a translated string, prefer single quotes / curly quotes / CJK 『 』 / 《 》 — and the previously stuck batch sailed through clean: 22/22 ok, 0 retries, $0.85. This closes the long tail of #3028: - scenarios 11/11 ✓ - image-templates 45/45 ✓ - video-templates 50/50 ✓ - examples 140/140 ✓ - design-systems 142/142 ✓ - atoms N/A (filtered from public catalog) All 388 catalog-visible plugins now ship title_i18n + description_i18n for all 17 non-English locales the landing page serves. * fix(plugins): clean up four review-flagged i18n data issues - apps/landing-page/app/_lib/plugins-i18n.ts:759 — Polish bucket label `examples: 'Przyklad'` was missing the diacritic; every other Polish string in the same block uses proper diacritics. Restore to 'Przykład'. (Reviewer: looper #4364985878.) - video-templates/cinematic-route-navigation-guide — German title_i18n.de was a byte-for-byte copy of en ("Cinematic Route Navigation Guide") while the German description was already translated. Replace with "Cinematischer Routen-Navigationsleitfaden" to match the German voice the description sets. - video-templates/hollywood-haute-couture-fantasy-video-prompt — Dutch title_i18n.nl was identical to en for the same reason. Translate the trailing noun phrase: "Hollywood Haute Couture Fantasy Videoprompt" (mirrors the Dutch description's compound word style). - video-templates/video-seedance-three-kingdoms-guanyu-slaying-yanliang — Korean Hangul `돌진` had leaked into the Turkish description (a translation-pipeline artifact where the model copied the verb from the Korean output without translating it). Replace "saflarına돌진 eder" with the idiomatic Turkish "saflarına dalar". All four are data-only fixes against existing manifests; no schema changes, no reader changes. typecheck stays at 0 errors. * fix(landing-page): localize aria-labels, alt text and BreadcrumbList JSON-LD on plugin detail page The PR's prior rounds left six accessibility / structured-data surfaces on `/{locale}/plugins/<slug>/` either entirely English or mixing English chrome with the localized plugin title. Reviewer flagged each one across multiple loops; this commit clears them all: 1. `aria-label` on the open-in-new-tab popout no longer reuses the visible label `pcopy.detailOpenInNewTab` (which carries the decorative `↗`). Added `detailOpenInNewTabAria` — same wording, no glyph — and the `<a aria-label>` consumes that key. The visible link text still ends in `↗`. 2. `<nav class="breadcrumb" aria-label="Breadcrumb">` now reads `aria-label={pcopy.breadcrumbLabel}`. Eighteen locales filled ("面包屑导航", "パンくずリスト", "Brotkrumen-Navigation", "Fil d'Ariane", "مسار التنقل", "İçerik haritası", ...). 3. Share-dialog `<button aria-label="Close">` now reads `aria-label={pcopy.shareDialogClose}`. Eighteen locales filled ("关闭", "閉じる", "Cerrar", "Закрыть", "إغلاق", ...). 4. Three template-literal a11y strings (`${pluginTitle} preview`, `Open interactive preview for ${pluginTitle}`, `${pluginTitle} interactive preview`) become function calls (`pcopy.previewImageAlt(t)`, `previewSummaryAria(t)`, `previewIframeTitle(t)`) so the sentence frame around the plugin title rotates with the page locale. Two `<img alt>` call sites (the static preview at line 210 and the click-to-expand thumbnail at line 179) both consume `previewImageAlt`. 5. `BreadcrumbList` JSON-LD position-2 now reads `name: pcopy.hubLabel` instead of hardcoded English `"Plugins"`. The visible breadcrumb at line 105 already renders `pcopy.hubLabel`; this aligns the structured data with the rendered chrome on every locale. The new function-typed keys deliberately interpolate `pluginTitle` (which is itself locale-resolved via `resolveBundledTitle`) so the mixed-language guard from commit002d457is preserved: a manifest without a per-locale title still flows through to a coherent single-language a11y string because `pluginTitle` falls back to English along with the rest of the section. apps/landing-page typecheck stays at 0 errors. Closes reviewer threads: - #pullrequestreview-4364985878 (Open in new tab aria) - #pullrequestreview-4368926224 (Polish typo + plus mixed-language alt/aria) - #4373... (BreadcrumbList JSON-LD) - #4374... (aria-label="Close" + aria-label="Breadcrumb") * fix(landing-page): redirect legacy fa/hu/th /plugins/ paths to canonical When the new `/{locale}/plugins/...` short-code wrappers landed, the legacy catch-all `pages/[locale]/[...path].astro` dropped `'plugins'` from its `paths` list. That intentionally avoids serving stale marketplace-registry placeholder routes for the modern landing locales — but it also takes `/fa/plugins/`, `/hu/plugins/`, and `/th/plugins/` from 200 to 404, because those three legacy locales live only in the old `_lib/i18n.ts:LOCALES` set and are not part of `LANDING_LOCALES` (the modern 18-locale list the new wrappers serve). Three `301`s in `_redirects` send those legacy URLs to the canonical English `/plugins/...` so SEO and inbound links keep working until the legacy locale set is retired entirely. Reviewer thread (#pullrequestreview-4364052045) flagged this as a non-blocking regression across multiple loops; this commit closes it. * ci(landing-page): add merge_group trigger so the queue can clear PRs `landing-page-ci.yml` only fired on `pull_request` and `push:main`, which meant the required `Validate landing page` and `Strict PR visual tests` checks never dispatched against the `merge_group` ref the merge queue creates. The queue then sat at "awaiting checks" until it timed out and ejected the PR (the deadlock observed during the 5/26 release window). Adding a `merge_group: { types: [checks_requested] }` trigger to the same workflow lets the queued ref reuse the existing job graph, matching the pattern in `ci.yml` which already wires `merge_group`. Also drops `plugins/**` into the same paths filter as `pull_request` since the new bundled-plugins reader (commit7ddfe364) consumes those manifests' `title_i18n` / `description_i18n` maps and the landing-page CI must rerun when manifest data changes. --------- Co-authored-by: Joey-nexu <joeylee12629@gmail.com>
122 lines
11 KiB
JSON
122 lines
11 KiB
JSON
{
|
||
"$schema": "https://open-design.ai/schemas/plugin.v1.json",
|
||
"specVersion": "1.0.0",
|
||
"name": "example-html-ppt-knowledge-arch-blueprint",
|
||
"title": "Html Ppt Knowledge Arch Blueprint",
|
||
"title_i18n": {
|
||
"zh-CN": "Html Ppt 知识架构蓝图",
|
||
"zh-TW": "Html Ppt 知識架構藍圖",
|
||
"ja": "Html Ppt ナレッジアーキテクチャ設計図",
|
||
"ko": "Html Ppt 지식 아키텍처 청사진",
|
||
"de": "Html Ppt Wissensarchitektur-Blaupause",
|
||
"fr": "Plan d'architecture de connaissances Html Ppt",
|
||
"ru": "Чертёж архитектуры знаний Html Ppt",
|
||
"es": "Plano de arquitectura de conocimiento Html Ppt",
|
||
"pt-BR": "Planta de arquitetura de conhecimento Html Ppt",
|
||
"it": "Blueprint di architettura della conoscenza Html Ppt",
|
||
"vi": "Sơ đồ kiến trúc tri thức Html Ppt",
|
||
"pl": "Plan architektury wiedzy Html Ppt",
|
||
"id": "Cetak Biru Arsitektur Pengetahuan Html Ppt",
|
||
"nl": "Html Ppt kennisarchitectuur blauwdruk",
|
||
"ar": "مخطط معماري للمعرفة Html Ppt",
|
||
"tr": "Html Ppt bilgi mimarisi planı",
|
||
"uk": "Креслення архітектури знань Html Ppt",
|
||
"en": "Html Ppt Knowledge Arch Blueprint"
|
||
},
|
||
"version": "0.1.0",
|
||
"description": "奶油蓝图架构 deck — 奶油纸 #F0EAE0 底色 + 单一锈红 #B5392A 高亮、48px 蓝图网格 mask、2px 黑边硬卡片、pipeline 步骤盒(其中一个抬高)、右侧锈红 insight callout、Playfair 衬线大字、SVG 虚线反馈环。零渐变零软阴影,认真且印刷友好。",
|
||
"description_i18n": {
|
||
"zh-CN": "奶油蓝图架构 deck — 奶油纸 #F0EAE0 底色 + 单一锈红 #B5392A 高亮、48px 蓝图网格 mask、2px 黑边硬卡片、pipeline 步骤盒(其中一个抬高)、右侧锈红 insight callout、Playfair 衬线大字、SVG 虚线反馈环。零渐变零软阴影,认真且印刷友好。",
|
||
"zh-TW": "奶油藍圖架構 deck — 奶油紙 #F0EAE0 底色 + 單一鏽紅 #B5392A 高亮、48px 藍圖網格 mask、2px 黑邊硬卡片、pipeline 步驟盒(其中一個抬高)、右側鏽紅 insight callout、Playfair 襯線大字、SVG 虛線回饋環。零漸層零軟陰影,認真且印刷友好。",
|
||
"ja": "クリーム色の設計図アーキテクチャデッキ — クリーム紙 #F0EAE0 ベース + 単一の錆赤 #B5392A ハイライト、48px 設計図グリッドマスク、2px 黒枠ハードカード、パイプラインステップボックス(1つを浮き上がらせる)、右側の錆赤インサイトコールアウト、Playfair セリフ大文字、SVG 破線フィードバックループ。グラデーションなし、ソフトシャドウなし、シリアスで印刷に最適。",
|
||
"ko": "크림 청사진 아키텍처 덱 — 크림 페이퍼 #F0EAE0 배경 + 단일 녹청색 #B5392A 하이라이트, 48px 청사진 그리드 마스크, 2px 검은 테두리 하드 카드, 파이프라인 단계 박스(하나 상승), 오른쪽 녹청색 인사이트 콜아웃, Playfair 세리프 대형 글자, SVG 점선 피드백 루프. 그라데이션 없음, 소프트 섀도우 없음, 진지하고 인쇄 친화적.",
|
||
"de": "Cremefarbenes Blaupausen-Architektur-Deck — Cremepapierbasis #F0EAE0 + einzelne rostrot #B5392A Hervorhebung, 48px Blaupausengitter-Maske, 2px schwarze harte Karten, Pipeline-Schrittboxen (eine erhöht), rechts rostrot Insight-Callout, Playfair-Serifenschrift groß, SVG gestrichelter Feedback-Loop. Keine Verläufe, keine weichen Schatten, ernst und druckfreundlich.",
|
||
"fr": "Deck d'architecture blueprint crème — base papier crème #F0EAE0 + surbrillance rouille unique #B5392A, masque de grille blueprint 48px, cartes dures bordure noire 2px, boîtes d'étapes pipeline (une élevée), callout insight rouille à droite, grande police à empattement Playfair, boucle de feedback SVG en pointillés. Zéro dégradé, zéro ombre douce, sérieux et adapté à l'impression.",
|
||
"ru": "Кремовая архитектурная колода-чертёж — кремовая бумажная основа #F0EAE0 + единичная ржаво-красная #B5392A подсветка, маска сетки чертежа 48px, жёсткие карточки с чёрной обводкой 2px, блоки шагов конвейера (один приподнят), ржаво-красный инсайт-врезка справа, крупный шрифт с засечками Playfair, пунктирная петля обратной связи SVG. Без градиентов, без мягких теней, серьёзно и дружелюбно к печати.",
|
||
"es": "Deck de arquitectura de planos crema — base de papel crema #F0EAE0 + resaltado rojo óxido único #B5392A, máscara de cuadrícula de planos 48px, tarjetas duras con borde negro 2px, cajas de pasos de pipeline (una elevada), llamada de insight rojo óxido a la derecha, fuente serif grande Playfair, bucle de retroalimentación SVG punteado. Sin degradados, sin sombras suaves, serio y apto para impresión.",
|
||
"pt-BR": "Deck de arquitetura blueprint creme — base papel creme #F0EAE0 + destaque vermelho ferrugem único #B5392A, máscara de grade blueprint 48px, cartões duros com borda preta 2px, caixas de etapas de pipeline (uma elevada), callout de insight vermelho ferrugem à direita, fonte serifada grande Playfair, loop de feedback SVG tracejado. Sem gradientes, sem sombras suaves, sério e amigável para impressão.",
|
||
"it": "Deck di architettura blueprint crema — base carta crema #F0EAE0 + evidenziazione rosso ruggine singola #B5392A, maschera griglia blueprint 48px, carte rigide con bordo nero 2px, box passaggi pipeline (uno sollevato), callout insight rosso ruggine a destra, carattere serif grande Playfair, loop di feedback SVG tratteggiato. Nessun gradiente, nessuna ombra morbida, serio e adatto alla stampa.",
|
||
"vi": "Bộ kiến trúc bản thiết kế kem — nền giấy kem #F0EAE0 + điểm nhấn đỏ gỉ duy nhất #B5392A, mặt nạ lưới bản thiết kế 48px, thẻ cứng viền đen 2px, hộp bước pipeline (một cái nâng cao), khung insight đỏ gỉ bên phải, chữ serif lớn Playfair, vòng phản hồi SVG nét đứt. Không gradient, không bóng mềm, nghiêm túc và thân thiện in ấn.",
|
||
"pl": "Kremowy zestaw architektury blueprintu — kremowa baza papieru #F0EAE0 + pojedyncze podświetlenie rdzawo-czerwone #B5392A, maska siatki blueprintu 48px, twarde karty z czarną obwódką 2px, pudełka kroków pipeline (jedno podniesione), rdza-czerwone wywołanie insight po prawej, duża czcionka szeryfowa Playfair, przerywana pętla feedbacku SVG. Zero gradientów, zero miękkich cieni, poważne i przyjazne drukowi.",
|
||
"id": "Deck arsitektur cetak biru krem — basis kertas krem #F0EAE0 + sorotan merah karat tunggal #B5392A, masker grid cetak biru 48px, kartu keras tepi hitam 2px, kotak langkah pipeline (satu terangkat), callout insight merah karat di kanan, font serif besar Playfair, loop umpan balik SVG putus-putus. Tanpa gradien, tanpa bayangan lembut, serius dan ramah cetak.",
|
||
"nl": "Crème blauwdruk architectuurdeck — crème papierbasis #F0EAE0 + enkele roestroze #B5392A markering, 48px blauwdrukrastermasker, 2px zwarte rand harde kaarten, pipeline stappenboxen (een verhoogd), rechts roestroze insight-callout, Playfair schreefloos groot lettertype, SVG gestippelde feedbackloop. Geen verlopen, geen zachte schaduwen, serieus en printvriendelijk.",
|
||
"ar": "مجموعة معمارية بمخطط كريمي — قاعدة ورق كريمي #F0EAE0 + تظليل صدئ أحمر واحد #B5392A، قناع شبكة مخطط 48px، بطاقات صلبة بحدود سوداء 2px، صناديق خطوات خط الأنابيب (واحد مرفوع)، إطار رؤية صدئ أحمر على اليمين، خط Playfair serif كبير، حلقة ملاحظات SVG منقطة. بدون تدرجات، بدون ظلال ناعمة، جدي وصديق للطباعة.",
|
||
"tr": "Krem plan mimarisi destesi — krem kağıt tabanlı #F0EAE0 + tek pas kırmızı #B5392A vurgu, 48px plan ızgara maskesi, 2px siyah kenarlı sert kartlar, pipeline adım kutuları (biri yükseltilmiş), sağda pas kırmızı içgörü çağrısı, Playfair serif büyük yazı tipi, SVG kesikli geri bildirim döngüsü. Gradyan yok, yumuşak gölge yok, ciddi ve baskı dostu.",
|
||
"uk": "Кремова архітектурна колода-креслення — кремова паперова основа #F0EAE0 + єдине іржаво-червоне #B5392A підсвічування, маска сітки креслення 48px, жорсткі картки з чорною обводкою 2px, блоки кроків конвеєра (один піднесений), іржаво-червона врізка інсайту праворуч, великий шрифт із засічками Playfair, пунктирна петля зворотного зв'язку SVG. Без градієнтів, без м'яких тіней, серйозно і дружньо до друку.",
|
||
"en": "奶油蓝图架构 deck — 奶油纸 #F0EAE0 底色 + 单一锈红 #B5392A 高亮、48px 蓝图网格 mask、2px 黑边硬卡片、pipeline 步骤盒(其中一个抬高)、右侧锈红 insight callout、Playfair 衬线大字、SVG 虚线反馈环。零渐变零软阴影,认真且印刷友好。"
|
||
},
|
||
"license": "MIT",
|
||
"author": {
|
||
"name": "Open Design",
|
||
"url": "https://github.com/nexu-io"
|
||
},
|
||
"homepage": "https://github.com/nexu-io/open-design/tree/main/plugins/_official/examples/html-ppt-knowledge-arch-blueprint",
|
||
"tags": [
|
||
"example",
|
||
"first-party",
|
||
"deck",
|
||
"engineering",
|
||
"web",
|
||
"architecture",
|
||
"blueprint",
|
||
"system-design",
|
||
"untitled",
|
||
"data-flow",
|
||
"engineering-whitepaper"
|
||
],
|
||
"compat": {
|
||
"agentSkills": [
|
||
{
|
||
"path": "./SKILL.md"
|
||
}
|
||
]
|
||
},
|
||
"od": {
|
||
"kind": "scenario",
|
||
"taskKind": "new-generation",
|
||
"mode": "deck",
|
||
"scenario": "engineering",
|
||
"surface": "web",
|
||
"preview": {
|
||
"type": "html",
|
||
"entry": "./example.html"
|
||
},
|
||
"useCase": {
|
||
"query": {
|
||
"en": "Use the html-ppt-knowledge-arch-blueprint template to create a system architecture introduction deck. Use a cream paper base, rust-red highlights, blueprint grid, raised pipeline blocks, and serif display type. First ask me for the system name, 5-7 core modules, and data-flow direction, then write 8-10 slides.",
|
||
"zh-CN": "用 html-ppt-knowledge-arch-blueprint 模板做一份系统架构介绍 PPT。奶油纸底 + 锈红高亮 + 蓝图网格 + pipeline 抬高一格 + 衬线大字。先告诉我系统名 + 5-7 个核心模块 + 数据流方向,再写 8-10 页。"
|
||
},
|
||
"exampleOutputs": [
|
||
{
|
||
"path": "./example.html",
|
||
"title": "Html Ppt Knowledge Arch Blueprint"
|
||
}
|
||
]
|
||
},
|
||
"context": {
|
||
"skills": [
|
||
{
|
||
"path": "./SKILL.md"
|
||
}
|
||
],
|
||
"assets": [
|
||
"./example.html"
|
||
]
|
||
},
|
||
"pipeline": {
|
||
"stages": [
|
||
{
|
||
"id": "generate",
|
||
"atoms": [
|
||
"file-write",
|
||
"live-artifact"
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"capabilities": [
|
||
"prompt:inject",
|
||
"fs:write"
|
||
]
|
||
}
|
||
}
|