@mohammadhprp/system-prompt 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +35 -0
- package/bin/system-prompt.js +8 -0
- package/framework/README.md +163 -0
- package/framework/agents/README.md +49 -0
- package/framework/agents/backend-architect.md +146 -0
- package/framework/agents/researcher.md +79 -0
- package/framework/agents/reviewer.md +183 -0
- package/framework/agents/security-auditor.md +131 -0
- package/framework/commands/README.md +43 -0
- package/framework/commands/changelog.md +44 -0
- package/framework/commands/commit.md +31 -0
- package/framework/commands/learn.md +24 -0
- package/framework/commands/mr.md +46 -0
- package/framework/commands/pr.md +39 -0
- package/framework/commands/release.md +34 -0
- package/framework/commands/review.md +24 -0
- package/framework/commands/summarize-changes.md +49 -0
- package/framework/mcps/README.md +78 -0
- package/framework/mcps/excalidraw/README.md +37 -0
- package/framework/mcps/excalidraw/capabilities.md +54 -0
- package/framework/mcps/excalidraw/configs/opencode.json +8 -0
- package/framework/mcps/excalidraw/install.md +92 -0
- package/framework/mcps/excalidraw/troubleshooting.md +67 -0
- package/framework/mcps/figma-mcp-go/README.md +51 -0
- package/framework/mcps/figma-mcp-go/capabilities.md +190 -0
- package/framework/mcps/figma-mcp-go/configs/opencode.json +9 -0
- package/framework/mcps/figma-mcp-go/install.md +74 -0
- package/framework/mcps/figma-mcp-go/troubleshooting.md +99 -0
- package/framework/mcps/github-mcp/README.md +51 -0
- package/framework/mcps/github-mcp/capabilities.md +83 -0
- package/framework/mcps/github-mcp/configs/.env.example +1 -0
- package/framework/mcps/github-mcp/configs/opencode.json +13 -0
- package/framework/mcps/github-mcp/install.md +60 -0
- package/framework/mcps/github-mcp/troubleshooting.md +79 -0
- package/framework/mcps/gitlab-mcp/README.md +54 -0
- package/framework/mcps/gitlab-mcp/capabilities.md +216 -0
- package/framework/mcps/gitlab-mcp/configs/.env.example +2 -0
- package/framework/mcps/gitlab-mcp/configs/opencode.json +13 -0
- package/framework/mcps/gitlab-mcp/install.md +99 -0
- package/framework/mcps/gitlab-mcp/troubleshooting.md +116 -0
- package/framework/mcps/jira-mcp/README.md +53 -0
- package/framework/mcps/jira-mcp/capabilities.md +79 -0
- package/framework/mcps/jira-mcp/configs/.env.example +2 -0
- package/framework/mcps/jira-mcp/configs/opencode.json +13 -0
- package/framework/mcps/jira-mcp/install.md +94 -0
- package/framework/mcps/jira-mcp/troubleshooting.md +113 -0
- package/framework/mcps/laravel-boost/README.md +53 -0
- package/framework/mcps/laravel-boost/capabilities.md +92 -0
- package/framework/mcps/laravel-boost/configs/opencode.json +9 -0
- package/framework/mcps/laravel-boost/install.md +106 -0
- package/framework/mcps/laravel-boost/troubleshooting.md +119 -0
- package/framework/mcps/notion-mcp/README.md +58 -0
- package/framework/mcps/notion-mcp/capabilities.md +118 -0
- package/framework/mcps/notion-mcp/configs/opencode.json +9 -0
- package/framework/mcps/notion-mcp/install.md +70 -0
- package/framework/mcps/notion-mcp/troubleshooting.md +95 -0
- package/framework/mcps/playwright-mcp/README.md +50 -0
- package/framework/mcps/playwright-mcp/capabilities.md +149 -0
- package/framework/mcps/playwright-mcp/configs/opencode.json +9 -0
- package/framework/mcps/playwright-mcp/install.md +136 -0
- package/framework/mcps/playwright-mcp/troubleshooting.md +154 -0
- package/framework/mcps/supabase-mcp/README.md +66 -0
- package/framework/mcps/supabase-mcp/capabilities.md +127 -0
- package/framework/mcps/supabase-mcp/configs/opencode.json +9 -0
- package/framework/mcps/supabase-mcp/install.md +85 -0
- package/framework/mcps/supabase-mcp/troubleshooting.md +113 -0
- package/framework/memory/README.md +17 -0
- package/framework/memory/codebase-insights.md +6 -0
- package/framework/memory/user-preferences.md +5 -0
- package/framework/modes/README.md +52 -0
- package/framework/modes/audit.md +88 -0
- package/framework/plugins/README.md +65 -0
- package/framework/plugins/opencode-goal-plugin/README.md +45 -0
- package/framework/plugins/opencode-goal-plugin/capabilities.md +127 -0
- package/framework/plugins/opencode-goal-plugin/install.md +71 -0
- package/framework/plugins/opencode-goal-plugin/troubleshooting.md +112 -0
- package/framework/plugins/ponytail/README.md +44 -0
- package/framework/plugins/ponytail/capabilities.md +112 -0
- package/framework/plugins/ponytail/install.md +77 -0
- package/framework/plugins/ponytail/troubleshooting.md +116 -0
- package/framework/references/standards/api.md +44 -0
- package/framework/references/standards/architecture.md +43 -0
- package/framework/references/standards/database.md +43 -0
- package/framework/references/standards/debugging.md +44 -0
- package/framework/references/standards/documentation.md +43 -0
- package/framework/references/standards/logging.md +43 -0
- package/framework/references/standards/naming.md +43 -0
- package/framework/references/standards/observability.md +43 -0
- package/framework/references/standards/performance.md +43 -0
- package/framework/references/standards/pull-requests.md +43 -0
- package/framework/references/standards/security.md +43 -0
- package/framework/references/standards/testing.md +43 -0
- package/framework/references/templates/adr.md +28 -0
- package/framework/references/templates/api-spec.md +56 -0
- package/framework/references/templates/design-document.md +39 -0
- package/framework/references/templates/incident-report.md +38 -0
- package/framework/references/templates/postmortem.md +41 -0
- package/framework/references/templates/pull-request.md +34 -0
- package/framework/references/templates/runbook.md +48 -0
- package/framework/references/templates/task.md +27 -0
- package/framework/skills/README.md +68 -0
- package/framework/skills/agent-browser/SKILL.md +51 -0
- package/framework/skills/backend-best-practices/SKILL.md +136 -0
- package/framework/skills/backend-best-practices/examples.md +31 -0
- package/framework/skills/backend-best-practices/references/api-design.md +79 -0
- package/framework/skills/backend-best-practices/references/architecture-review.md +77 -0
- package/framework/skills/backend-best-practices/references/database-design.md +78 -0
- package/framework/skills/backend-best-practices/references/debugging.md +76 -0
- package/framework/skills/backend-best-practices/references/observability.md +78 -0
- package/framework/skills/backend-best-practices/references/performance.md +78 -0
- package/framework/skills/backend-best-practices/references/refactoring.md +77 -0
- package/framework/skills/backend-best-practices/references/security.md +80 -0
- package/framework/skills/backend-best-practices/references/testing.md +77 -0
- package/framework/skills/backend-engineer/SKILL.md +76 -0
- package/framework/skills/backend-engineer/examples.md +31 -0
- package/framework/skills/brainstorming/SKILL.md +159 -0
- package/framework/skills/brainstorming/examples.md +49 -0
- package/framework/skills/brainstorming/scripts/frame-template.html +213 -0
- package/framework/skills/brainstorming/scripts/helper.js +167 -0
- package/framework/skills/brainstorming/scripts/server.cjs +723 -0
- package/framework/skills/brainstorming/scripts/start-server.sh +209 -0
- package/framework/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/framework/skills/brainstorming/visual-companion.md +291 -0
- package/framework/skills/brand-guidelines/LICENSE.txt +202 -0
- package/framework/skills/brand-guidelines/SKILL.md +73 -0
- package/framework/skills/code-review/SKILL.md +72 -0
- package/framework/skills/code-review/examples.md +31 -0
- package/framework/skills/design/SKILL.md +399 -0
- package/framework/skills/design/examples.md +34 -0
- package/framework/skills/diagram-design/SKILL.md +485 -0
- package/framework/skills/diagram-design/assets/example-architecture-dark.html +180 -0
- package/framework/skills/diagram-design/assets/example-architecture-full.html +192 -0
- package/framework/skills/diagram-design/assets/example-architecture.html +181 -0
- package/framework/skills/diagram-design/assets/example-bar-dark.html +127 -0
- package/framework/skills/diagram-design/assets/example-bar-full.html +103 -0
- package/framework/skills/diagram-design/assets/example-bar.html +127 -0
- package/framework/skills/diagram-design/assets/example-data-flow-dark.html +143 -0
- package/framework/skills/diagram-design/assets/example-data-flow-full.html +185 -0
- package/framework/skills/diagram-design/assets/example-data-flow.html +143 -0
- package/framework/skills/diagram-design/assets/example-datalake-dark.html +241 -0
- package/framework/skills/diagram-design/assets/example-datalake-full.html +246 -0
- package/framework/skills/diagram-design/assets/example-datalake.html +267 -0
- package/framework/skills/diagram-design/assets/example-dp-integration-dark.html +78 -0
- package/framework/skills/diagram-design/assets/example-dp-integration-full.html +88 -0
- package/framework/skills/diagram-design/assets/example-dp-integration.html +78 -0
- package/framework/skills/diagram-design/assets/example-dp-security-matrix-dark.html +31 -0
- package/framework/skills/diagram-design/assets/example-dp-security-matrix-full.html +32 -0
- package/framework/skills/diagram-design/assets/example-dp-security-matrix.html +88 -0
- package/framework/skills/diagram-design/assets/example-er-dark.html +200 -0
- package/framework/skills/diagram-design/assets/example-er-full.html +203 -0
- package/framework/skills/diagram-design/assets/example-er.html +200 -0
- package/framework/skills/diagram-design/assets/example-flowchart-dark.html +154 -0
- package/framework/skills/diagram-design/assets/example-flowchart-full.html +157 -0
- package/framework/skills/diagram-design/assets/example-flowchart.html +154 -0
- package/framework/skills/diagram-design/assets/example-gantt-dark.html +135 -0
- package/framework/skills/diagram-design/assets/example-gantt-full.html +125 -0
- package/framework/skills/diagram-design/assets/example-gantt.html +135 -0
- package/framework/skills/diagram-design/assets/example-high-level-dark.html +249 -0
- package/framework/skills/diagram-design/assets/example-high-level-full.html +245 -0
- package/framework/skills/diagram-design/assets/example-high-level-vertical-dark.html +272 -0
- package/framework/skills/diagram-design/assets/example-high-level-vertical-full.html +250 -0
- package/framework/skills/diagram-design/assets/example-high-level-vertical.html +323 -0
- package/framework/skills/diagram-design/assets/example-high-level.html +299 -0
- package/framework/skills/diagram-design/assets/example-it-state-dark.html +90 -0
- package/framework/skills/diagram-design/assets/example-it-state-full.html +69 -0
- package/framework/skills/diagram-design/assets/example-it-state.html +128 -0
- package/framework/skills/diagram-design/assets/example-layers-dark.html +121 -0
- package/framework/skills/diagram-design/assets/example-layers-full.html +124 -0
- package/framework/skills/diagram-design/assets/example-layers.html +121 -0
- package/framework/skills/diagram-design/assets/example-line-dark.html +109 -0
- package/framework/skills/diagram-design/assets/example-line-full.html +103 -0
- package/framework/skills/diagram-design/assets/example-line.html +109 -0
- package/framework/skills/diagram-design/assets/example-loop-dark.html +100 -0
- package/framework/skills/diagram-design/assets/example-loop-full.html +137 -0
- package/framework/skills/diagram-design/assets/example-loop-terminal.html +347 -0
- package/framework/skills/diagram-design/assets/example-loop.html +100 -0
- package/framework/skills/diagram-design/assets/example-medallion-dark.html +159 -0
- package/framework/skills/diagram-design/assets/example-medallion-full.html +201 -0
- package/framework/skills/diagram-design/assets/example-medallion.html +159 -0
- package/framework/skills/diagram-design/assets/example-nested-dark.html +130 -0
- package/framework/skills/diagram-design/assets/example-nested-full.html +133 -0
- package/framework/skills/diagram-design/assets/example-nested.html +134 -0
- package/framework/skills/diagram-design/assets/example-org-chart-dark.html +45 -0
- package/framework/skills/diagram-design/assets/example-org-chart-full.html +45 -0
- package/framework/skills/diagram-design/assets/example-org-chart.html +45 -0
- package/framework/skills/diagram-design/assets/example-process-dark.html +62 -0
- package/framework/skills/diagram-design/assets/example-process-full.html +72 -0
- package/framework/skills/diagram-design/assets/example-process.html +62 -0
- package/framework/skills/diagram-design/assets/example-pyramid-dark.html +117 -0
- package/framework/skills/diagram-design/assets/example-pyramid-full.html +120 -0
- package/framework/skills/diagram-design/assets/example-pyramid.html +117 -0
- package/framework/skills/diagram-design/assets/example-quadrant-consultant.html +164 -0
- package/framework/skills/diagram-design/assets/example-quadrant-dark.html +133 -0
- package/framework/skills/diagram-design/assets/example-quadrant-full.html +136 -0
- package/framework/skills/diagram-design/assets/example-quadrant.html +133 -0
- package/framework/skills/diagram-design/assets/example-radar-dark.html +137 -0
- package/framework/skills/diagram-design/assets/example-radar-full.html +133 -0
- package/framework/skills/diagram-design/assets/example-radar.html +137 -0
- package/framework/skills/diagram-design/assets/example-scatter-dark.html +139 -0
- package/framework/skills/diagram-design/assets/example-scatter-full.html +114 -0
- package/framework/skills/diagram-design/assets/example-scatter.html +139 -0
- package/framework/skills/diagram-design/assets/example-sequence-dark.html +220 -0
- package/framework/skills/diagram-design/assets/example-sequence-full.html +386 -0
- package/framework/skills/diagram-design/assets/example-sequence.html +220 -0
- package/framework/skills/diagram-design/assets/example-state-dark.html +145 -0
- package/framework/skills/diagram-design/assets/example-state-full.html +148 -0
- package/framework/skills/diagram-design/assets/example-state.html +145 -0
- package/framework/skills/diagram-design/assets/example-swimlane-dark.html +170 -0
- package/framework/skills/diagram-design/assets/example-swimlane-full.html +173 -0
- package/framework/skills/diagram-design/assets/example-swimlane.html +170 -0
- package/framework/skills/diagram-design/assets/example-timeline-dark.html +133 -0
- package/framework/skills/diagram-design/assets/example-timeline-full.html +136 -0
- package/framework/skills/diagram-design/assets/example-timeline.html +133 -0
- package/framework/skills/diagram-design/assets/example-tree-dark.html +171 -0
- package/framework/skills/diagram-design/assets/example-tree-full.html +174 -0
- package/framework/skills/diagram-design/assets/example-tree.html +171 -0
- package/framework/skills/diagram-design/assets/example-venn-dark.html +130 -0
- package/framework/skills/diagram-design/assets/example-venn-full.html +133 -0
- package/framework/skills/diagram-design/assets/example-venn.html +108 -0
- package/framework/skills/diagram-design/assets/icons.html +230 -0
- package/framework/skills/diagram-design/assets/index.html +333 -0
- package/framework/skills/diagram-design/assets/template-dark.html +82 -0
- package/framework/skills/diagram-design/assets/template-full.html +410 -0
- package/framework/skills/diagram-design/assets/template-terminal.html +170 -0
- package/framework/skills/diagram-design/assets/template.html +83 -0
- package/framework/skills/diagram-design/references/export.md +107 -0
- package/framework/skills/diagram-design/references/onboarding.md +268 -0
- package/framework/skills/diagram-design/references/primitive-annotation.md +36 -0
- package/framework/skills/diagram-design/references/primitive-icons.md +821 -0
- package/framework/skills/diagram-design/references/primitive-sketchy.md +43 -0
- package/framework/skills/diagram-design/references/primitive-terminal.md +76 -0
- package/framework/skills/diagram-design/references/style-guide.md +139 -0
- package/framework/skills/diagram-design/references/type-architecture.md +78 -0
- package/framework/skills/diagram-design/references/type-bar.md +48 -0
- package/framework/skills/diagram-design/references/type-data-flow.md +374 -0
- package/framework/skills/diagram-design/references/type-dp-integration.md +410 -0
- package/framework/skills/diagram-design/references/type-dp-security-matrix.md +379 -0
- package/framework/skills/diagram-design/references/type-er.md +23 -0
- package/framework/skills/diagram-design/references/type-flowchart.md +23 -0
- package/framework/skills/diagram-design/references/type-gantt.md +45 -0
- package/framework/skills/diagram-design/references/type-high-level.md +458 -0
- package/framework/skills/diagram-design/references/type-it-state.md +470 -0
- package/framework/skills/diagram-design/references/type-layers.md +26 -0
- package/framework/skills/diagram-design/references/type-line.md +44 -0
- package/framework/skills/diagram-design/references/type-loop.md +223 -0
- package/framework/skills/diagram-design/references/type-medallion.md +356 -0
- package/framework/skills/diagram-design/references/type-nested.md +22 -0
- package/framework/skills/diagram-design/references/type-org-chart.md +44 -0
- package/framework/skills/diagram-design/references/type-process.md +495 -0
- package/framework/skills/diagram-design/references/type-pyramid.md +33 -0
- package/framework/skills/diagram-design/references/type-quadrant.md +81 -0
- package/framework/skills/diagram-design/references/type-radar.md +80 -0
- package/framework/skills/diagram-design/references/type-scatter.md +39 -0
- package/framework/skills/diagram-design/references/type-sequence.md +35 -0
- package/framework/skills/diagram-design/references/type-state.md +21 -0
- package/framework/skills/diagram-design/references/type-swimlane.md +20 -0
- package/framework/skills/diagram-design/references/type-timeline.md +20 -0
- package/framework/skills/diagram-design/references/type-tree.md +24 -0
- package/framework/skills/diagram-design/references/type-venn.md +26 -0
- package/framework/skills/documentation/SKILL.md +74 -0
- package/framework/skills/documentation/examples.md +31 -0
- package/framework/skills/find-skills/SKILL.md +141 -0
- package/framework/skills/find-skills/examples.md +35 -0
- package/framework/skills/gitlab-mcp/SKILL.md +83 -0
- package/framework/skills/gitlab-mcp/examples.md +31 -0
- package/framework/skills/gitlab-mcp/references/code-review.md +110 -0
- package/framework/skills/gitlab-mcp/references/issues.md +141 -0
- package/framework/skills/gitlab-mcp/references/merge-requests.md +120 -0
- package/framework/skills/gitlab-mcp/references/pipelines.md +67 -0
- package/framework/skills/gitlab-mcp/references/search.md +17 -0
- package/framework/skills/gitlab-mcp/references/webhooks.md +32 -0
- package/framework/skills/gitlab-mcp/references/work-items.md +50 -0
- package/framework/skills/jira-mcp/SKILL.md +57 -0
- package/framework/skills/jira-mcp/examples.md +31 -0
- package/framework/skills/jira-mcp/references/comments.md +27 -0
- package/framework/skills/jira-mcp/references/issues.md +97 -0
- package/framework/skills/jira-mcp/references/projects.md +39 -0
- package/framework/skills/laravel-best-practices/SKILL.md +229 -0
- package/framework/skills/laravel-best-practices/examples.md +31 -0
- package/framework/skills/laravel-best-practices/references/advanced-queries.md +106 -0
- package/framework/skills/laravel-best-practices/references/architecture.md +202 -0
- package/framework/skills/laravel-best-practices/references/blade-views.md +36 -0
- package/framework/skills/laravel-best-practices/references/caching.md +70 -0
- package/framework/skills/laravel-best-practices/references/collections.md +44 -0
- package/framework/skills/laravel-best-practices/references/config.md +73 -0
- package/framework/skills/laravel-best-practices/references/db-performance.md +192 -0
- package/framework/skills/laravel-best-practices/references/eloquent.md +148 -0
- package/framework/skills/laravel-best-practices/references/error-handling.md +72 -0
- package/framework/skills/laravel-best-practices/references/events-notifications.md +52 -0
- package/framework/skills/laravel-best-practices/references/http-client.md +160 -0
- package/framework/skills/laravel-best-practices/references/mail.md +27 -0
- package/framework/skills/laravel-best-practices/references/migrations.md +121 -0
- package/framework/skills/laravel-best-practices/references/passport.md +197 -0
- package/framework/skills/laravel-best-practices/references/pennant.md +61 -0
- package/framework/skills/laravel-best-practices/references/pest-testing.md +166 -0
- package/framework/skills/laravel-best-practices/references/pulse.md +196 -0
- package/framework/skills/laravel-best-practices/references/queue-jobs.md +144 -0
- package/framework/skills/laravel-best-practices/references/routing.md +99 -0
- package/framework/skills/laravel-best-practices/references/scheduling.md +39 -0
- package/framework/skills/laravel-best-practices/references/scout.md +176 -0
- package/framework/skills/laravel-best-practices/references/security.md +198 -0
- package/framework/skills/laravel-best-practices/references/spatie-laravel-backup.md +222 -0
- package/framework/skills/laravel-best-practices/references/spatie-laravel-permission.md +272 -0
- package/framework/skills/laravel-best-practices/references/spatie-medialibrary.md +672 -0
- package/framework/skills/laravel-best-practices/references/style.md +125 -0
- package/framework/skills/laravel-best-practices/references/tailwindcss.md +112 -0
- package/framework/skills/laravel-best-practices/references/testing.md +43 -0
- package/framework/skills/laravel-best-practices/references/validation.md +75 -0
- package/framework/skills/lavish/SKILL.md +67 -0
- package/framework/skills/lavish/examples.md +31 -0
- package/framework/skills/notion-mcp/SKILL.md +57 -0
- package/framework/skills/notion-mcp/examples.md +31 -0
- package/framework/skills/notion-mcp/references/comments.md +112 -0
- package/framework/skills/notion-mcp/references/databases.md +193 -0
- package/framework/skills/notion-mcp/references/pages.md +235 -0
- package/framework/skills/skill-creator/LICENSE.txt +202 -0
- package/framework/skills/skill-creator/SKILL.md +485 -0
- package/framework/skills/skill-creator/agents/analyzer.md +274 -0
- package/framework/skills/skill-creator/agents/comparator.md +202 -0
- package/framework/skills/skill-creator/agents/grader.md +223 -0
- package/framework/skills/skill-creator/assets/eval_review.html +146 -0
- package/framework/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/framework/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/framework/skills/skill-creator/examples.md +31 -0
- package/framework/skills/skill-creator/references/schemas.md +430 -0
- package/framework/skills/skill-creator/scripts/__init__.py +0 -0
- package/framework/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/framework/skills/skill-creator/scripts/generate_report.py +326 -0
- package/framework/skills/skill-creator/scripts/improve_description.py +247 -0
- package/framework/skills/skill-creator/scripts/package_skill.py +136 -0
- package/framework/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/framework/skills/skill-creator/scripts/run_eval.py +310 -0
- package/framework/skills/skill-creator/scripts/run_loop.py +328 -0
- package/framework/skills/skill-creator/scripts/utils.py +47 -0
- package/framework/styles/README.md +35 -0
- package/framework/styles/linear/DESIGN.md +478 -0
- package/framework/styles/linear/README.md +36 -0
- package/framework/styles/linear/assets/preview.jpg +0 -0
- package/framework/styles/raycast/DESIGN.md +495 -0
- package/framework/styles/raycast/README.md +35 -0
- package/framework/styles/raycast/assets/preview.jpg +0 -0
- package/package.json +33 -0
- package/src/agent-configs.js +96 -0
- package/src/catalog.js +145 -0
- package/src/cli.js +254 -0
- package/src/installer.js +303 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
# IT current-state
|
|
2
|
+
|
|
3
|
+
**Best for:** documenting the *before* picture of a modernization proposal — the legacy IT landscape grouped by phase or department (Collection → Processing → Dissemination, or Frontend / Backend / Storage, or Survey → Analysts → Reports), with pain-points flagged, file-based hand-offs labelled (CSV / Excel / Email / Copy), and pre-platform tooling visible. The companion to `type-dp-integration.md`: this type shows the gap that a data-platform proposal is going to close.
|
|
4
|
+
|
|
5
|
+
Use when stakeholders need to see the friction in the current setup — siloed scripts, manual file shuffles, missing version control, single-points-of-failure — and the path from those to a target platform topology.
|
|
6
|
+
|
|
7
|
+
This type is **parametric** — the inputs schema in §1 drives every coordinate via the formulas in §2. The rule shape mirrors `type-dp-integration.md` (zones + cross-cutting footer bars), `type-process.md` (rounded right-angle connectors), and `type-medallion.md` (per-element `color` override) so the focal rule, color override, dark mode, and reproducibility checklist read identically across types.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Inputs — the parameter contract
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
title: "Current IT Landscape"
|
|
15
|
+
subtitle: "Data pipeline before the platform"
|
|
16
|
+
eyebrow: "NatStat · Before the platform"
|
|
17
|
+
|
|
18
|
+
orientation: horizontal # horizontal (default, zones L→R) | vertical (zones T→B)
|
|
19
|
+
|
|
20
|
+
zones: # 2..4 zones, ordered along the orientation axis
|
|
21
|
+
- name: "COLLECTION"
|
|
22
|
+
components: # 1..5 components per zone
|
|
23
|
+
- id: survey-solutions
|
|
24
|
+
name: "Survey Solutions"
|
|
25
|
+
sub: "CAPI · PostgreSQL"
|
|
26
|
+
icon: postgres # any id from references/primitive-icons.md
|
|
27
|
+
kind: standard # standard | focal | external (external → dashed stroke)
|
|
28
|
+
- { id: aspnet, name: "ASP.NET Apps", sub: "migration · admin portals", icon: server }
|
|
29
|
+
- { id: civil-reg, name: "Civil Registry", sub: "external · CRVS data", icon: database, kind: external }
|
|
30
|
+
- name: "PROCESSING"
|
|
31
|
+
components:
|
|
32
|
+
- { id: shared-drive, name: "Shared Drive", sub: "No version control · Windows file share", icon: file, kind: focal }
|
|
33
|
+
- { id: analyst-mach, name: "Analyst Machines", sub: "SPSS · SAS · Stata · Excel", icon: desktop }
|
|
34
|
+
- { id: sql-server, name: "SQL Server", sub: "on-premises · core RDBMS", icon: sqlserver, color: "#7a8c47" } # custom olive
|
|
35
|
+
- name: "DISSEMINATION"
|
|
36
|
+
components:
|
|
37
|
+
- { id: legacy-portal, name: "LegacyPortal", sub: "manual bottleneck", icon: cloud, kind: focal }
|
|
38
|
+
- { id: natstat-website, name: "NatStat Website", sub: "public · static pages", icon: internet }
|
|
39
|
+
- { id: ministry, name: "Ministry Partners", sub: "~6 ministries", icon: users, kind: external }
|
|
40
|
+
|
|
41
|
+
connectors: # ordered list; each links two component ids
|
|
42
|
+
- { from: survey-solutions, to: shared-drive, label: "CSV", icon: csv, style: link }
|
|
43
|
+
- { from: aspnet, to: shared-drive, label: "EMAIL", icon: file, style: link } # `mail` MISSING in catalog → falls back to `file`
|
|
44
|
+
- { from: civil-reg, to: shared-drive, label: "EXCEL", icon: excel, style: link, dashed: true }
|
|
45
|
+
- { from: shared-drive, to: analyst-mach, label: "COPY", style: accent, dashed: true }
|
|
46
|
+
- { from: analyst-mach, to: sql-server, label: "LOAD", style: neutral }
|
|
47
|
+
- { from: analyst-mach, to: legacy-portal, label: "EXCEL", icon: excel, style: accent }
|
|
48
|
+
- { from: legacy-portal, to: natstat-website, label: "WEB", style: neutral }
|
|
49
|
+
- { from: natstat-website, to: ministry, label: "CSV DL", icon: csv, style: link, dashed: true }
|
|
50
|
+
|
|
51
|
+
footer: # 0..3 optional full-canvas-width bars (cross-cutting concerns)
|
|
52
|
+
- { name: "Identity Manager", sub: "Active Directory · LDAP · SSO", icon: active-directory }
|
|
53
|
+
- { name: "Observability", sub: "logs · metrics · alerts", icon: monitoring }
|
|
54
|
+
|
|
55
|
+
legend: # auto-generated from styles used; user can override labels
|
|
56
|
+
- { swatch: link, label: "data flow" }
|
|
57
|
+
- { swatch: accent, label: "pain-point" }
|
|
58
|
+
- { swatch: dashed, label: "external" }
|
|
59
|
+
- { swatch: focal, label: "bottleneck" }
|
|
60
|
+
|
|
61
|
+
dark: false
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Reserved field semantics:**
|
|
65
|
+
|
|
66
|
+
- `orientation` — `horizontal` (zones run L→R, components stack vertically inside each zone) or `vertical` (zones stack T→B, components run L→R inside each zone).
|
|
67
|
+
- `zones[i].name` — uppercase short label (≤ 14 chars). Rendered at the top-left of the zone box in the `eyebrow` role with letter-spacing 0.14em, on a paper-masked break in the zone border.
|
|
68
|
+
- `components[i][k].id` — globally unique slug; referenced by `connectors[].from/to`.
|
|
69
|
+
- `components[i][k].name` — `node-name` role (the human-readable label).
|
|
70
|
+
- `components[i][k].sub` — `sublabel` role at 10px in muted (the technical sub-label; up to 2 lines via auto-wrap when component height grows to 72).
|
|
71
|
+
- `components[i][k].icon` — any id from `references/primitive-icons.md`. If missing → no icon, the name shifts left. (Catalog has 41 icons; `mail` is currently missing — use `icon: file` as fallback for email hand-offs.)
|
|
72
|
+
- `components[i][k].kind` — `standard | focal | external`. `focal` triggers the accent palette (§5); `external` switches to a 4-2 dashed stroke and muted ink to signal "this is outside our scope."
|
|
73
|
+
- `components[i][k].color` — optional per-component color override (§4). Ignored on `kind: focal` (accent wins).
|
|
74
|
+
- `connectors[k].from` / `connectors[k].to` — refer to a component `id`. Cross-zone, cross-row, same-zone vertical, and same-zone horizontal all legal; routing chosen by §3.
|
|
75
|
+
- `connectors[k].label` — uppercase short text (≤ 8 chars). `arrow-label` role at 9px, weight 600.
|
|
76
|
+
- `connectors[k].icon` — optional inline icon to the left of the text. Same catalog as component icons.
|
|
77
|
+
- `connectors[k].style` — `neutral | link | accent`. Drives stroke color + marker.
|
|
78
|
+
- `connectors[k].dashed` — `true | false`.
|
|
79
|
+
- `footer[k]` — optional cross-cutting bar. Spans full canvas width minus margins. No connectors drawn from a footer.
|
|
80
|
+
- `legend[k].swatch` — `link | accent | dashed | focal | neutral`. Auto-curated based on what the diagram actually uses; user can re-order or rename.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 2. Layout formulas — deterministic geometry
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
# Horizontal orientation (default)
|
|
88
|
+
left_pad = 16
|
|
89
|
+
right_pad = 16
|
|
90
|
+
zone_gap = 20
|
|
91
|
+
zone_y = 52
|
|
92
|
+
zone_h = 360
|
|
93
|
+
n_zones = len(zones)
|
|
94
|
+
|
|
95
|
+
# Zone widths: base 200 + 24 per component to give vertical room for icons + 2-line subs.
|
|
96
|
+
# In the canonical example (3 / 3 / 3 components) the replication used 256 / 360 / 272 —
|
|
97
|
+
# the formula approximates that with hand-picked widths in the worked YAML (§10).
|
|
98
|
+
zone_w(i) = base + n_components_i * comp_slack # base ≈ 200, slack ≈ 24
|
|
99
|
+
viewBox_w = left_pad + Σ zone_w(i) + (n_zones-1) * zone_gap + right_pad
|
|
100
|
+
|
|
101
|
+
# Component placement within zone i
|
|
102
|
+
comp_pad_x = 20 # x-inset from zone border
|
|
103
|
+
comp_h = 56 # 68 for focal (2-line sub), 72 if both sub lines present
|
|
104
|
+
comp_gap = 32
|
|
105
|
+
comp_y(i, k) = zone_y + 28 + k * (comp_h + comp_gap)
|
|
106
|
+
|
|
107
|
+
# Component centerlines (used for connector routing)
|
|
108
|
+
comp_x(i) = zone_x(i) + comp_pad_x
|
|
109
|
+
comp_w(i) = zone_w(i) - 2 * comp_pad_x
|
|
110
|
+
comp_cx(i) = comp_x(i) + comp_w(i)/2
|
|
111
|
+
comp_cy(i, k) = comp_y(i, k) + comp_h/2
|
|
112
|
+
|
|
113
|
+
# Footer bars (if present)
|
|
114
|
+
footer_bar_h = 56
|
|
115
|
+
footer_gap = 8
|
|
116
|
+
footer_top = zone_y + zone_h + 24
|
|
117
|
+
footer_y(k) = footer_top + k * (footer_bar_h + footer_gap)
|
|
118
|
+
footer_bottom = footer_top + N_footer * (footer_bar_h + footer_gap) - footer_gap
|
|
119
|
+
|
|
120
|
+
# Total canvas height
|
|
121
|
+
legend_block_h = 40
|
|
122
|
+
content_bottom = N_footer > 0 ? footer_bottom : zone_y + zone_h
|
|
123
|
+
viewBox_h = content_bottom + legend_block_h + 24
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 2.1 Background and zone frame
|
|
127
|
+
|
|
128
|
+
Solid paper fill across `viewBox`. No dot pattern. Each zone box:
|
|
129
|
+
|
|
130
|
+
```svg
|
|
131
|
+
<rect x="zone_x(i)" y="zone_y" width="zone_w(i)" height="zone_h"
|
|
132
|
+
fill="{ink @ 0.02}" stroke="{ink @ 0.10}" stroke-width="0.8" rx="8"/>
|
|
133
|
+
<!-- paper-masked break for the zone label -->
|
|
134
|
+
<rect x="zone_x(i)+20" y="zone_y-8" width="{label_w}" height="16" fill="{paper}"/>
|
|
135
|
+
<text x="zone_x(i)+24" y="zone_y+4" fill="{ink @ 0.40}"
|
|
136
|
+
font-family="{eyebrow}" letter-spacing="0.14em">{name}</text>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 2.2 Component box
|
|
140
|
+
|
|
141
|
+
Three visual kinds:
|
|
142
|
+
|
|
143
|
+
| `kind` | Fill | Stroke | Stroke width | Stroke dash | Name ink | Sub ink |
|
|
144
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
145
|
+
| `standard` | `#FFFFFF` | `ink` | 1 | — | `ink` | `muted` |
|
|
146
|
+
| `focal` | `accent @ 0.07` | `accent` | 1.4 | — | `ink` | `accent` (line 1) + `muted` (line 2) |
|
|
147
|
+
| `external` | `#FFFFFF` | `muted` | 1 | `4,3` | `ink` | `muted` |
|
|
148
|
+
|
|
149
|
+
**Icon placement** (24×24, monochrome via `currentColor` — see `references/primitive-icons.md`):
|
|
150
|
+
|
|
151
|
+
```svg
|
|
152
|
+
<g transform="translate(comp_x + 12, comp_y + (comp_h - 24)/2)" color="{ink_for_kind}">
|
|
153
|
+
<use href="#icon-{name}"/> <!-- or inline the SVG path from the catalog -->
|
|
154
|
+
</g>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Icon takes 24 × 24 → 36-px total horizontal footprint with the 12-px left pad. Name and sub-label baseline shifts right by 40 px.
|
|
158
|
+
|
|
159
|
+
**Name + sub baselines** (left-aligned, with icon to the left):
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
name_x = comp_x + 44
|
|
163
|
+
name_y = comp_y + (comp_h/2) - 2
|
|
164
|
+
sub_y = comp_y + (comp_h/2) + 14
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 2.3 Connector geometry (§3 holds the routing rules)
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
src_right = comp_x(i_src) + comp_w(i_src)
|
|
171
|
+
src_left = comp_x(i_src)
|
|
172
|
+
src_top = comp_y(i_src, k_src)
|
|
173
|
+
src_bot = src_top + comp_h_src
|
|
174
|
+
src_cy = src_top + comp_h_src/2
|
|
175
|
+
|
|
176
|
+
dst_left = comp_x(i_dst)
|
|
177
|
+
dst_right = comp_x(i_dst) + comp_w(i_dst)
|
|
178
|
+
dst_top = comp_y(i_dst, k_dst)
|
|
179
|
+
dst_bot = dst_top + comp_h_dst
|
|
180
|
+
dst_cx = comp_cx(i_dst)
|
|
181
|
+
dst_cy = dst_top + comp_h_dst/2
|
|
182
|
+
|
|
183
|
+
# Corridor x for cross-zone H+Q+V routing
|
|
184
|
+
corridor_x = dst_cx # land arrow on dst horizontal center, enter via top/bot
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 2.4 Footer bar
|
|
188
|
+
|
|
189
|
+
```svg
|
|
190
|
+
<rect x="left_pad" y="footer_y(k)" width="viewBox_w - 2*left_pad" height="footer_bar_h"
|
|
191
|
+
fill="{ink @ 0.03}" stroke="{ink @ 0.18}" stroke-width="0.8" rx="8"/>
|
|
192
|
+
<g transform="translate(left_pad + 20, footer_y(k) + (footer_bar_h - 24)/2)" color="{ink}">
|
|
193
|
+
<use href="#icon-{name}"/>
|
|
194
|
+
</g>
|
|
195
|
+
<text x="left_pad + 56" y="footer_y(k) + 24" font-family="{node-name}" font-size="14" fill="{ink}">{name}</text>
|
|
196
|
+
<text x="left_pad + 56" y="footer_y(k) + 40" font-family="{sublabel}" font-size="12" fill="{muted}">{sub}</text>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Footer bars are layer-wide services. **No connectors emerge from them.** They sit visually below the zones and let the reader see the cross-cutting concerns at a glance.
|
|
200
|
+
|
|
201
|
+
### 2.5 Legend strip
|
|
202
|
+
|
|
203
|
+
Hairline divider at `y = content_bottom + 16`, then a row of swatches + labels at `y = content_bottom + 36`. Only the styles actually used by `connectors[]` (plus `focal` and `external` if those component kinds are present) appear in the legend.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 3. Connector rules (mandatory)
|
|
208
|
+
|
|
209
|
+
### 3.1 Path shape — rounded right-angle Q-bezier, r = 8
|
|
210
|
+
|
|
211
|
+
Reused verbatim from `type-process.md` §3.1. No diagonals — ever.
|
|
212
|
+
|
|
213
|
+
```svg
|
|
214
|
+
<!-- Same zone, adjacent component (same vertical column): single vertical line -->
|
|
215
|
+
<line x1="{src_cx}" y1="{src_bot}" x2="{dst_cx}" y2="{dst_top}"
|
|
216
|
+
stroke="…" stroke-width="…" marker-end="…"/>
|
|
217
|
+
|
|
218
|
+
<!-- Cross-zone or cross-row: exit right → H → Q-bend → V → enter top (or bottom) -->
|
|
219
|
+
<path d="M {src_right},{src_cy} H {dst_cx - 8} Q {dst_cx},{src_cy} {dst_cx},{src_cy ± 8} V {dst_top_or_bottom}"
|
|
220
|
+
fill="none" stroke="…" stroke-width="…" marker-end="…"/>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
- Use `{src_cy + 8}` and `V {dst_top}` when destination lies BELOW source.
|
|
224
|
+
- Use `{src_cy − 8}` and `V {dst_bottom}` when destination lies ABOVE source.
|
|
225
|
+
|
|
226
|
+
### 3.2 Exit / entry sides (configurable; defaults below)
|
|
227
|
+
|
|
228
|
+
| Topology | Default exit side of source | Default entry side of destination |
|
|
229
|
+
| --- | --- | --- |
|
|
230
|
+
| Same zone, dst below | bottom | top |
|
|
231
|
+
| Same zone, dst above | top | bottom |
|
|
232
|
+
| Cross-zone, horizontal flow | right | top (or bottom, whichever is closer to src_cy) |
|
|
233
|
+
| Vertical-orientation diagram | bottom | top |
|
|
234
|
+
|
|
235
|
+
A connector can override via `connectors[k].from_side` / `connectors[k].to_side` (`top | right | bottom | left`). **Backward references** (right→left in horizontal orientation, up in vertical orientation) are permitted only when at least one endpoint has `kind: external`, and must be `dashed: true`.
|
|
236
|
+
|
|
237
|
+
### 3.3 Markers MUST touch the destination rectangle
|
|
238
|
+
|
|
239
|
+
The path's last command ends at the destination's rectangle edge (`V {dst_top}` or `H {dst_left}`), **not** at the centroid. After applying `refX=7` on the marker, the triangle sits flush against the border. Stopping the line short of the edge — or sending it to the centroid and burying the arrowhead inside the rect — is a hard fail.
|
|
240
|
+
|
|
241
|
+
### 3.4 Style → stroke + marker
|
|
242
|
+
|
|
243
|
+
| `style` | Stroke color | Stroke width | Marker |
|
|
244
|
+
| --- | --- | --- | --- |
|
|
245
|
+
| `neutral` | `muted` | 1.0 | `url(#arrow)` |
|
|
246
|
+
| `link` | `link` | 1.2 | `url(#arrow-link)` |
|
|
247
|
+
| `accent` | `accent` | 1.4 | `url(#arrow-accent)` |
|
|
248
|
+
|
|
249
|
+
Add `stroke-dasharray="4 3"` when `dashed: true`.
|
|
250
|
+
|
|
251
|
+
**Defs block** (always emit all three):
|
|
252
|
+
|
|
253
|
+
```svg
|
|
254
|
+
<defs>
|
|
255
|
+
<marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="{muted}"/></marker>
|
|
256
|
+
<marker id="arrow-link" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="{link}"/></marker>
|
|
257
|
+
<marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="{accent}"/></marker>
|
|
258
|
+
</defs>
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### 3.5 Connector label = inline icon + text, placed at the START of the connector with a perpendicular margin
|
|
262
|
+
|
|
263
|
+
The label sits **near the source end** of the connector (not at the mid-segment) and is **offset perpendicular to the line** so it never overlaps the stroke. Icon (when `icon:` is set) sits inside the label's paper-fill mask, to the left of the text.
|
|
264
|
+
|
|
265
|
+
```svg
|
|
266
|
+
<g transform="translate({label_cx}, {label_cy})">
|
|
267
|
+
<rect x="-{w/2}" y="-9" width="{w}" height="18" rx="3" fill="{paper}" stroke="none"/>
|
|
268
|
+
<use href="#icon-{icon}" x="-{w/2 + 4}" y="-6" width="12" height="12" color="{stroke_color}"/> <!-- if icon set -->
|
|
269
|
+
<text x="{icon ? (-(w/2) + 22) : 0}" y="3" text-anchor="{icon ? 'start' : 'middle'}"
|
|
270
|
+
font-family="{arrow-label}" font-size="9" font-weight="600"
|
|
271
|
+
letter-spacing="0.08em" fill="{stroke_color}">{label}</text>
|
|
272
|
+
</g>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Placement formulas** (label box is 18px tall × `w` wide; centered on `{label_cx, label_cy}`):
|
|
276
|
+
|
|
277
|
+
| Segment exiting source | `label_cx` | `label_cy` | Effect |
|
|
278
|
+
| --- | --- | --- | --- |
|
|
279
|
+
| Horizontal (right exit) | `src_right + 6 + w/2` | `src_cy − 14` | Label sits 6 px past the source, 5 px above the line |
|
|
280
|
+
| Horizontal (left exit, backward) | `src_left − 6 − w/2` | `src_cy − 14` | Label sits 6 px before the source, 5 px above the line |
|
|
281
|
+
| Vertical (bottom exit) | `src_cx + 6 + w/2` | `src_bot + 14` | Label sits 6 px right of the line, 5 px below the source edge |
|
|
282
|
+
| Vertical (top exit, backward) | `src_cx + 6 + w/2` | `src_top − 14` | Label sits 6 px right of the line, 5 px above the source edge |
|
|
283
|
+
|
|
284
|
+
For cross-zone H+Q+V routes the label binds to the **horizontal** segment, since that segment is anchored at the source. Place the label early on that horizontal run — never on the Q-bend or the vertical tail.
|
|
285
|
+
|
|
286
|
+
- `w = text_w + (icon ? 30 : 12)` — auto-fit.
|
|
287
|
+
- Mask `fill` resolves to `paper` in light mode and `ink` in dark mode. The mask is kept as a safety pad — even though the label no longer sits on the line, it can graze zone backgrounds and component fills, and the mask preserves contrast.
|
|
288
|
+
- `stroke_color` follows §3.4 (text + icon inherit the connector's accent / link / neutral color).
|
|
289
|
+
|
|
290
|
+
### 3.6 Z-order
|
|
291
|
+
|
|
292
|
+
All connectors (paths + lines + labels) emit BEFORE any component rect, so node fills mask the line ends. The connector label is the exception — it draws AFTER its line so the mask sits on top.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 4. Component color override (per-component `color: "#hex"`)
|
|
297
|
+
|
|
298
|
+
Per-component, same shape as every other parametric type in this skill.
|
|
299
|
+
|
|
300
|
+
| Element | Light | Dark |
|
|
301
|
+
| --- | --- | --- |
|
|
302
|
+
| Container fill | `rgba(C, 0.06)` | `rgba(C_light, 0.10)` |
|
|
303
|
+
| Container stroke | `rgba(C, 0.45)` (width 1) | `rgba(C_light, 0.55)` |
|
|
304
|
+
| Component name text | `C` | `C_light` |
|
|
305
|
+
| Icon glyph | inherits ink via `currentColor` (unchanged) | inherits ink (unchanged) |
|
|
306
|
+
| Sub-label | muted (unchanged) | muted (unchanged) |
|
|
307
|
+
| Connectors touching this component | **unchanged** — topology-driven | **unchanged** |
|
|
308
|
+
|
|
309
|
+
`C_light` = the same hex lightened ~15 % for dark-mode contrast (e.g., `#7a8c47` → `#9aac67`, `#b85450` → `#d97a78`).
|
|
310
|
+
|
|
311
|
+
**Rules:**
|
|
312
|
+
- **Never on focal components.** `kind: focal` always renders accent; `color` is silently ignored.
|
|
313
|
+
- **Never on connectors.** Connector style is topology-driven; if you want a colored edge, pick `style: accent` / `link` / `neutral`, not a component color.
|
|
314
|
+
- **Cap: ≤ 3 custom-colored components per diagram** (in addition to focal components). Above 3 the visual signal fragments.
|
|
315
|
+
|
|
316
|
+
**Recommended cross-type palette** (same as `type-medallion.md` / `type-process.md` / `type-dp-integration.md` / `type-dp-security-matrix.md`):
|
|
317
|
+
|
|
318
|
+
- `#b85450` rust-red — security / governance / pain-point that isn't focal
|
|
319
|
+
- `#5a7d9a` slate-blue — observability / quality / monitoring gate
|
|
320
|
+
- `#7a8c47` olive-green — survivor system (the one tool the new platform keeps)
|
|
321
|
+
- `#c9a23a` warm yellow — sandbox / dev / scratch
|
|
322
|
+
- `#8c6d3f` warm-brown — archive / cold / DR
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## 5. Focal rule
|
|
327
|
+
|
|
328
|
+
- `kind: focal` components: **≤ 2 per diagram** (zero is also valid for diagrams without a single dominant pain-point).
|
|
329
|
+
- Auto-styling: accent stroke 1.4, accent-tinted fill 7 %, ink-bold `node-name`, accent line-1 `sublabel`.
|
|
330
|
+
- Any connector with a focal endpoint automatically renders in `style: accent`; the YAML `style:` is ignored.
|
|
331
|
+
- Custom `color: "#hex"` on a focal component is silently ignored — accent always wins.
|
|
332
|
+
|
|
333
|
+
If your diagram needs more than 2 focal components, you've collapsed two narratives. Split: one "collection pain-points" diagram + one "dissemination pain-points" diagram.
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 6. Dark mode
|
|
338
|
+
|
|
339
|
+
| Role | Light | Dark |
|
|
340
|
+
| --- | --- | --- |
|
|
341
|
+
| paper | `paper` | `ink` |
|
|
342
|
+
| ink | `ink` | `paper` |
|
|
343
|
+
| muted | `muted` | `muted` |
|
|
344
|
+
| accent | `accent` | `accent` |
|
|
345
|
+
| link | `link` | `link` |
|
|
346
|
+
| zone background | `ink @ 0.02` | `paper @ 0.04` |
|
|
347
|
+
| zone border | `ink @ 0.10` | `paper @ 0.14` |
|
|
348
|
+
| standard component fill | `#FFFFFF` | `paper @ 0.04` |
|
|
349
|
+
| standard component stroke | `ink` | `paper @ 0.32` |
|
|
350
|
+
| focal fill | `accent @ 0.07` | `accent @ 0.12` |
|
|
351
|
+
| focal stroke | `accent` | `accent` |
|
|
352
|
+
| external stroke | `muted` (dashed) | `muted` (dashed) |
|
|
353
|
+
| footer fill | `ink @ 0.03` | `paper @ 0.05` |
|
|
354
|
+
| footer stroke | `ink @ 0.18` | `paper @ 0.20` |
|
|
355
|
+
| label mask fill | `paper` | `ink` |
|
|
356
|
+
| custom-color components | `C` | `C_light` (≈ +15 %) |
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## 7. Reproducibility checklist (taste gate)
|
|
361
|
+
|
|
362
|
+
Before emitting SVG, verify **every** item:
|
|
363
|
+
|
|
364
|
+
1. Eyebrow + title + subtitle present at canonical y-positions (24 / 36 / 52); body padding 32 px.
|
|
365
|
+
2. 2..4 zones; each has its uppercase label at the top-left of its zone box, on a paper-masked break in the border.
|
|
366
|
+
3. Every component has `id`, `name`. `sub`, `icon`, `kind`, `color` are optional.
|
|
367
|
+
4. ≤ 2 components with `kind: focal`; focal styling auto-applied (accent fill 7 %, accent stroke 1.4, italic line-1 sub).
|
|
368
|
+
5. Every connector exits the right (or bottom) of source and enters the top (or left) of destination; rounded right-angle Q-bezier `r=8` at every bend; marker triangle visibly touches the destination rectangle edge.
|
|
369
|
+
6. Connector labels sit at the **start** of the connector (not mid-segment) and are offset **perpendicular** to the line (5 px gap above for horizontal segments, 6 px gap to the right for vertical segments) — never overlapping the stroke. Paper-fill mask kept behind text; icon (when `icon:` is set) sits left of text inside the same mask.
|
|
370
|
+
7. ≤ 3 custom-colored components; none on focal.
|
|
371
|
+
8. ≤ 3 footer bars; each spans `viewBox_w − 2*left_pad`; no connectors emerge from any footer.
|
|
372
|
+
9. Legend at bottom: hairline separator + one swatch per style actually used.
|
|
373
|
+
10. `arrow-label` for connector labels, `eyebrow` for the page eyebrow and zone labels, `title` for the page title, `node-name` for the subtitle and component names, and `sublabel` for technical sub-labels.
|
|
374
|
+
11. Markers `#arrow` / `#arrow-link` / `#arrow-accent` defined once in `<defs>`; no inline marker definitions.
|
|
375
|
+
12. Dark variant: resolve every semantic token through its dark-mode value; custom colors are lightened ~15 %.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 8. Anti-patterns
|
|
380
|
+
|
|
381
|
+
- **Diagonal arrows.** The NatStat replication has one (analyst → LegacyPortal). The new type forbids it — always rounded right-angle Q-bezier.
|
|
382
|
+
- **Marker not touching the target.** Path ends at the centroid or stops short of the border.
|
|
383
|
+
- **Inline `text` connector labels without a mask rect.** The connector line can bleed through the text and it becomes unreadable.
|
|
384
|
+
- **Labels sitting on top of the connector line, mid-segment.** Labels belong at the *start* of the connector with a perpendicular margin (see §3.5) — burying them in the middle of the line hides the source-to-destination direction and forces the reader's eye to fight the mask.
|
|
385
|
+
- **Tiny text badges as icons.** The source uses 7-px `DB` / `APP` / `EXT` badges; this type uses real 24-px catalog icons. Text badges are only acceptable as the label text, not as the component "icon."
|
|
386
|
+
- **Custom color on a focal component.** Focal always wins; user-set `color` silently ignored on `kind: focal`.
|
|
387
|
+
- **Footer bar wired to one component.** Footer = cross-cutting layer-wide concern; a connector from a footer to a specific component is a category error (use `type-dp-integration.md`'s AUTH-line pattern only when the footer service truly authenticates *all* components, and even then the line lands at the zone bottom edge, not at a specific tool).
|
|
388
|
+
- **> 16 total components or > 5 per zone.** Density cap; split into two diagrams.
|
|
389
|
+
- **Mixing orientations within one diagram.** Pick one — `horizontal` or `vertical` — and apply it to every zone.
|
|
390
|
+
- **Using `kind: focal` to flag every painful thing.** Focal exists for ≤ 2 narrative pain-points; for "this is bad but not headline-bad", use `color: "#b85450"` rust-red instead.
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## 9. Examples
|
|
395
|
+
|
|
396
|
+
- `assets/example-it-state.html` — minimal light (NatStat canonical: 3 zones, 9 components, 8 connectors, 0 footer bars, SQL Server tinted olive). Gallery default.
|
|
397
|
+
- `assets/example-it-state-dark.html` — same, dark skin.
|
|
398
|
+
- `assets/example-it-state-full.html` — same, editorial-card frame with summary cards.
|
|
399
|
+
- `assets/example-it-state-extended.html` — exercises §4 color override + footer bars: 2 footer bars (Identity Manager + Observability) below the zones, third custom color on Analyst Machines (slate-blue, data-quality concern).
|
|
400
|
+
- `assets/example-it-state-extended-dark.html` — extended pattern, dark skin.
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## 10. Worked YAML — full inputs for `example-it-state.html`
|
|
405
|
+
|
|
406
|
+
The complete inputs that map to the shipped canonical example. Every coordinate in that SVG is derivable from §2 applied to these inputs.
|
|
407
|
+
|
|
408
|
+
```yaml
|
|
409
|
+
title: "Current IT Landscape"
|
|
410
|
+
subtitle: "Data pipeline before the platform"
|
|
411
|
+
eyebrow: "NatStat · Before the platform"
|
|
412
|
+
|
|
413
|
+
orientation: horizontal
|
|
414
|
+
|
|
415
|
+
zones:
|
|
416
|
+
- name: "COLLECTION"
|
|
417
|
+
components:
|
|
418
|
+
- { id: survey-solutions, name: "Survey Solutions", sub: "CAPI · PostgreSQL", icon: postgres }
|
|
419
|
+
- { id: aspnet, name: "ASP.NET Apps", sub: "migration · admin portals", icon: server }
|
|
420
|
+
- { id: civil-reg, name: "Civil Registry", sub: "external · CRVS data", icon: database, kind: external }
|
|
421
|
+
- name: "PROCESSING"
|
|
422
|
+
components:
|
|
423
|
+
- { id: shared-drive, name: "Shared Drive", sub: "No version control · Windows file share", icon: file, kind: focal }
|
|
424
|
+
- { id: analyst-mach, name: "Analyst Machines", sub: "SPSS · SAS · Stata · Excel", icon: desktop }
|
|
425
|
+
- { id: sql-server, name: "SQL Server", sub: "on-premises · core RDBMS", icon: sqlserver, color: "#7a8c47" }
|
|
426
|
+
- name: "DISSEMINATION"
|
|
427
|
+
components:
|
|
428
|
+
- { id: legacy-portal, name: "LegacyPortal", sub: "manual bottleneck", icon: cloud, kind: focal }
|
|
429
|
+
- { id: natstat-website, name: "NatStat Website", sub: "public · static pages", icon: internet }
|
|
430
|
+
- { id: ministry, name: "Ministry Partners", sub: "~6 ministries", icon: users, kind: external }
|
|
431
|
+
|
|
432
|
+
connectors:
|
|
433
|
+
- { from: survey-solutions, to: shared-drive, label: "CSV", icon: csv, style: link }
|
|
434
|
+
- { from: aspnet, to: shared-drive, label: "EMAIL", icon: file, style: link }
|
|
435
|
+
- { from: civil-reg, to: shared-drive, label: "EXCEL", icon: excel, style: link, dashed: true }
|
|
436
|
+
- { from: shared-drive, to: analyst-mach, label: "COPY", style: accent, dashed: true }
|
|
437
|
+
- { from: analyst-mach, to: sql-server, label: "LOAD", style: neutral }
|
|
438
|
+
- { from: analyst-mach, to: legacy-portal, label: "EXCEL", icon: excel, style: accent }
|
|
439
|
+
- { from: legacy-portal, to: natstat-website, label: "WEB", style: neutral }
|
|
440
|
+
- { from: natstat-website, to: ministry, label: "CSV DL", icon: csv, style: link, dashed: true }
|
|
441
|
+
|
|
442
|
+
dark: false
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### 10.1 What this YAML proves
|
|
446
|
+
|
|
447
|
+
- `n_zones = 3`, components per zone `= [3, 3, 3]`, custom color count = 1 (SQL Server), focal count = 2 (Shared Drive, LegacyPortal), external count = 2 (Civil Registry, Ministry Partners).
|
|
448
|
+
- Zone widths in canonical: 256 / 360 / 272 ⇒ `viewBox_w = 16 + 256 + 20 + 360 + 20 + 272 + 16 = 960` ✓
|
|
449
|
+
- `viewBox_h = 52 + 360 + 40 + 24 = 500` (no footer bars) ✓
|
|
450
|
+
- Shared Drive (focal) at zone 2, row 0: `x = 340, y = 80, w = 264, h = 68` (focal stretches to 68 to fit 2-line sub) ✓
|
|
451
|
+
- LegacyPortal (focal) at zone 3, row 0: `x = 704, y = 80, w = 208, h = 60` ✓
|
|
452
|
+
- SQL Server (custom olive) at zone 2, row 2: container fill `rgba(122,140,71,0.06)`, stroke `rgba(122,140,71,0.45)`, name text `#7a8c47` ✓
|
|
453
|
+
- Connectors 4, 5 (within zone 2) and 7, 8 (within zone 3) are simple vertical `<line>` elements. Cross-zone connectors take rule-compliant routes (see SKILL.md §6 rules 4 & 5):
|
|
454
|
+
- **All three Survey-side → Shared Drive connectors (C1 / C2 / C3) enter Shared Drive's LEFT edge.** A top-edge entry would push the marker body (7 px back along travel, given `refX = 7`) *inside* the destination box, where the box's paper-fill mask hides it — only a 1-pixel tip would peek above the stroke. Entering the left edge with a right-going path keeps the body outside the box and the arrow visible (~7 px shown to the left of the box edge). The three left-edge attach points are fanned at **y = 108 / 124 / 140** (16-px spacing, well above the 12 px rule-4 minimum).
|
|
455
|
+
- **C1** (Survey → Shared Drive) source y matches landing y: single horizontal `M 252,108 H 340`. No bends needed.
|
|
456
|
+
- **C2** (ASP.NET → Shared Drive) detours up through zone-2 background — vertical at `x = 316` (clear of Shared Drive's left edge at `x = 340`): `H 308 Q 316,196 316,188 V 132 Q 316,124 324,124 H 340`. Lands at `(340, 124)`.
|
|
457
|
+
- **C3** (Civil Registry → Shared Drive) detours up through zone-2 background — vertical at `x = 332` (clear of Analyst Machines, which starts at `x = 340`): `H 324 Q 332,284 332,276 V 148 Q 332,140 340,140`. Lands at `(340, 140)` via a final Q-bend (no trailing H needed).
|
|
458
|
+
- **C6** (Analyst Machines → LegacyPortal) cannot use a direct H+Q+V into LegacyPortal's left edge — Analyst Machines and LegacyPortal are in different rows, and the direct horizontal at `y = 268` would cross NatStat Website. It detours through the zone gap and **over** LegacyPortal: `H 654 Q 662,268 662,260 V 72 Q 662,64 670,64 H 800 Q 808,64 808,72 V 80` — vertical at `x = 662` (in zone gap), horizontal at `y = 64` (above LegacyPortal top), then down into LegacyPortal's top center. The path enters LegacyPortal from **above** going down, so the arrow body lives above the box (visible) and only the 1-px tip enters the box.
|
|
459
|
+
|
|
460
|
+
**Marker-visibility rule of thumb:** with the standard arrow marker (`markerWidth = 8`, `refX = 7`), the arrow body extends 7 px *backwards* along the path direction from the endpoint. For the arrow to remain visible, that 7-px tail must sit *outside* the destination box. Translation:
|
|
461
|
+
- Entering a **TOP edge going UP** (path direction up, box below) → body inside box, **only 1 px visible. Avoid this.**
|
|
462
|
+
- Entering a **TOP edge going DOWN** (path direction down, box below) → body above box, ~7 px visible. ✓
|
|
463
|
+
- Entering a **LEFT edge going RIGHT** → body to the left of box, ~7 px visible. ✓
|
|
464
|
+
- Entering a **RIGHT edge going LEFT** → body to the right of box, ~7 px visible. ✓
|
|
465
|
+
- Entering a **BOTTOM edge going DOWN** (box above) → body inside box, **only 1 px visible. Avoid this.**
|
|
466
|
+
- Entering a **BOTTOM edge going UP** (box above) → body below box, ~7 px visible. ✓
|
|
467
|
+
|
|
468
|
+
When the source row matches the destination row's y range (e.g., Survey at y=108 with Shared Drive at y=80–148), prefer **side-edge** entry — a single horizontal path with a fully visible arrow. When the source row is offset, detour through the destination's nearest zone background to enter a side edge rather than approaching a top/bottom edge from the wrong side.
|
|
469
|
+
|
|
470
|
+
The extended example (§9 line 4) demonstrates footer bars + a third custom color and proves `viewBox_h` grows correctly when `N_footer > 0`.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Layer Stack
|
|
2
|
+
|
|
3
|
+
**Best for:** OSI model, CSS cascade, context hierarchy, tech stack, abstraction layers, memory hierarchy.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
- Horizontal bands stacked vertically. Each layer is a full-width rectangle (same x, same width). 4–6 layers total.
|
|
7
|
+
- Layer height 56–72px, width typically 800–880px inside a 1000px viewBox.
|
|
8
|
+
- Each row contains (left→right):
|
|
9
|
+
1. **Index tag** on the far left (`L3`, `07`, `APPLICATION`) — Geist Mono 8–9px eyebrow.
|
|
10
|
+
2. **Layer name** slightly right of center-left — Geist 14–16px 600.
|
|
11
|
+
3. **Sublabel / note** on the far right — Geist Mono 9–10px muted.
|
|
12
|
+
- Border between layers: 1px hairline `rgba(45,49,66,0.12)`. Outer silhouette 1px ink or muted.
|
|
13
|
+
- Fills: either alternating subtle shades (paper / paper-2) OR all paper with hairline dividers. Pick one and hold it.
|
|
14
|
+
- Direction indicator on the LEFT margin (outside the stack): small up/down arrow + Geist Mono label (`abstraction ↑`, `packets ↓`).
|
|
15
|
+
- Coral on **one** focal layer (stroke + subtle tint fill) — the bottleneck, the pay-rent layer, the one under discussion.
|
|
16
|
+
|
|
17
|
+
## Anti-patterns
|
|
18
|
+
- Layers that aren't actually hierarchical (use swimlane or architecture).
|
|
19
|
+
- Skipped numbering (missing L4 between L3 and L5 without explanation).
|
|
20
|
+
- Every layer a different color — hierarchy invisible.
|
|
21
|
+
- Inconsistent layer heights without reason.
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
- `assets/example-layers.html` — minimal light
|
|
25
|
+
- `assets/example-layers-dark.html` — minimal dark
|
|
26
|
+
- `assets/example-layers-full.html` — full editorial
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Line Chart
|
|
2
|
+
|
|
3
|
+
**Best for:** continuous trends over time or a sequential index — signups over weeks, revenue by month, latency over releases. Use when the direction and rate of change between points is the primary message.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
|
|
7
|
+
- **Plot area margins:** left 80px, bottom 60px, top 40px, right 40px — inside `0 0 1000 500` viewBox.
|
|
8
|
+
- **Points:** 4–12 data points. Fewer → consider a summary stat; more → aggregate into periods.
|
|
9
|
+
- **X-axis:** evenly spaced time/index labels below the plot. Use Geist Mono 8px, centered on each point x.
|
|
10
|
+
- **Y-axis gridlines:** 4–6 horizontals at regular intervals. Same faint treatment as bar chart.
|
|
11
|
+
- **Lines:** `<polyline>` with `fill="none"`. Focal series `stroke-width="1.8"`, others `"1.2"`.
|
|
12
|
+
- **Vertex dots:** only on the focal series (`r=4`, filled). Other series: line only.
|
|
13
|
+
- **Area fill (optional):** `<polygon>` closing back to `y=420` (x-axis baseline) at 0.08 opacity. Use for the focal series only when the area meaning is important.
|
|
14
|
+
- **Multi-series:** up to 5 series. Focal = `accent`. Others = `series-1`, `series-2`, `series-3`, `series-4` from style-guide.md. Apply series palette in order — don't skip.
|
|
15
|
+
- **Legend:** horizontal strip at the bottom. Swatch = 16×8px rect with the series fill/stroke. One entry per series.
|
|
16
|
+
|
|
17
|
+
### Polyline pattern
|
|
18
|
+
|
|
19
|
+
```svg
|
|
20
|
+
<!-- Focal series -->
|
|
21
|
+
<polyline points="x0,y0 x1,y1 x2,y2 ..."
|
|
22
|
+
fill="none" stroke="#eb6c36" stroke-width="1.8" stroke-linejoin="round"/>
|
|
23
|
+
<!-- Dots at each point (focal only) -->
|
|
24
|
+
<circle cx="x0" cy="y0" r="4" fill="#eb6c36"/>
|
|
25
|
+
|
|
26
|
+
<!-- Non-focal series -->
|
|
27
|
+
<polyline points="x0,y0 x1,y1 ..."
|
|
28
|
+
fill="none" stroke="#7c8f6f" stroke-width="1.2" stroke-linejoin="round"/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Anti-patterns
|
|
32
|
+
|
|
33
|
+
- More than 5 series (visual mush — reduce or split).
|
|
34
|
+
- Lines that don't start at a shared zero baseline unless explicitly annotated.
|
|
35
|
+
- Smoothed/spline curves when the underlying data is sampled — polyline is honest.
|
|
36
|
+
- Dots on every series when there are 4+ series (only focal gets dots).
|
|
37
|
+
- Y-axis that doesn't include zero when the absolute magnitude matters.
|
|
38
|
+
- Connecting discontinuous data segments without a visual gap.
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
- `assets/example-line.html` — minimal light
|
|
43
|
+
- `assets/example-line-dark.html` — minimal dark
|
|
44
|
+
- `assets/example-line-full.html` — full editorial
|