mulmocast-vision 0.0.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 +661 -0
- package/README.md +102 -0
- package/assets/html/agendaPage.html +13 -0
- package/assets/html/balanceSheetPage.html +29 -0
- package/assets/html/balancedScorecardPage.html +15 -0
- package/assets/html/bcgMatrixPage.html +37 -0
- package/assets/html/beforeAfterPage.html +21 -0
- package/assets/html/benchmarkingTablePage.html +23 -0
- package/assets/html/bubbleChartPlaceholderPage.html +9 -0
- package/assets/html/businessModelCanvasPage.html +14 -0
- package/assets/html/capabilityMaturityPage.html +8 -0
- package/assets/html/cashFlowPage.html +21 -0
- package/assets/html/changeCurvePage.html +11 -0
- package/assets/html/circularEconomyMapPage.html +8 -0
- package/assets/html/communicationPlanPage.html +22 -0
- package/assets/html/complianceHeatmapPage.html +19 -0
- package/assets/html/costStructurePage.html +20 -0
- package/assets/html/csrInitiativesPage.html +8 -0
- package/assets/html/cultureValuesPage.html +21 -0
- package/assets/html/customerJourneyPage.html +21 -0
- package/assets/html/customerSuccessJourneyPage.html +15 -0
- package/assets/html/digitalMaturityPage.html +14 -0
- package/assets/html/driverTreePage.html +20 -0
- package/assets/html/ecosystemMapPage.html +11 -0
- package/assets/html/esgFrameworkPage.html +28 -0
- package/assets/html/executiveSummaryPage.html +15 -0
- package/assets/html/fourPPage.html +36 -0
- package/assets/html/funnelPage.html +8 -0
- package/assets/html/ganttSimplePage.html +21 -0
- package/assets/html/geMcKinseyMatrixPage.html +13 -0
- package/assets/html/heatmapPlaceholderPage.html +24 -0
- package/assets/html/hypothesisPage.html +22 -0
- package/assets/html/innovationFunnelPage.html +13 -0
- package/assets/html/integrationPlanPage.html +21 -0
- package/assets/html/issueTreePage.html +23 -0
- package/assets/html/keyMessageWithSupportsPage.html +13 -0
- package/assets/html/kpiHighlightPage.html +14 -0
- package/assets/html/launchPlanPage.html +29 -0
- package/assets/html/mAPipelinePage.html +16 -0
- package/assets/html/marimekkoPlaceholderPage.html +9 -0
- package/assets/html/marketDriversPage.html +8 -0
- package/assets/html/marketingMixPage.html +11 -0
- package/assets/html/meceListPage.html +15 -0
- package/assets/html/milestoneTimelinePage.html +14 -0
- package/assets/html/npvSummaryPage.html +12 -0
- package/assets/html/okrKpiDashboardPage.html +16 -0
- package/assets/html/optionEvaluationPage.html +23 -0
- package/assets/html/orgChartPage.html +8 -0
- package/assets/html/pLBreakdownPage.html +19 -0
- package/assets/html/partnershipMapPage.html +11 -0
- package/assets/html/personasPage.html +19 -0
- package/assets/html/pipelineFunnelPage.html +8 -0
- package/assets/html/porterFiveForcesPage.html +44 -0
- package/assets/html/positioningMapPage.html +11 -0
- package/assets/html/pricingWaterfallPage.html +8 -0
- package/assets/html/productRoadmapPage.html +15 -0
- package/assets/html/pyramidPrinciplePage.html +27 -0
- package/assets/html/quarterlyRoadmapPage.html +15 -0
- package/assets/html/raciPage.html +23 -0
- package/assets/html/revenueModelPage.html +17 -0
- package/assets/html/riskMitigationPage.html +17 -0
- package/assets/html/salesDashboardPage.html +11 -0
- package/assets/html/scenarioPlanningPage.html +13 -0
- package/assets/html/scqaPage.html +27 -0
- package/assets/html/sectionDividerPage.html +7 -0
- package/assets/html/segmentationPage.html +15 -0
- package/assets/html/sensitivityAnalysisPage.html +22 -0
- package/assets/html/sevenSPage.html +11 -0
- package/assets/html/shareholderValueTreePage.html +8 -0
- package/assets/html/stakeholderMapPage.html +14 -0
- package/assets/html/supportOrgModelPage.html +21 -0
- package/assets/html/surveyResultsPage.html +11 -0
- package/assets/html/sustainabilityRoadmapPage.html +15 -0
- package/assets/html/swotPage.html +36 -0
- package/assets/html/synergyCapturePage.html +8 -0
- package/assets/html/tamSamSomPage.html +11 -0
- package/assets/html/techRoadmapPage.html +15 -0
- package/assets/html/thankYouContactPage.html +24 -0
- package/assets/html/threeCPage.html +28 -0
- package/assets/html/twoByTwoMatrixPage.html +17 -0
- package/assets/html/valueChainPage.html +18 -0
- package/assets/html/waterfallPage.html +8 -0
- package/assets/html2/agendaPage.html +26 -0
- package/assets/html2/balanceSheetPage.html +87 -0
- package/assets/html2/balancedScorecardPage.html +29 -0
- package/assets/html2/bcgMatrixPage.html +165 -0
- package/assets/html2/beforeAfterPage.html +78 -0
- package/assets/html2/benchmarkingTablePage.html +70 -0
- package/assets/html2/bubbleChartPlaceholderPage.html +107 -0
- package/assets/html2/businessModelCanvasPage.html +43 -0
- package/assets/html2/capabilityMaturityPage.html +38 -0
- package/assets/html2/cashFlowPage.html +68 -0
- package/assets/html2/changeCurvePage.html +53 -0
- package/assets/html2/circularEconomyMapPage.html +35 -0
- package/assets/html2/communicationPlanPage.html +82 -0
- package/assets/html2/complianceHeatmapPage.html +42 -0
- package/assets/html2/costStructurePage.html +60 -0
- package/assets/html2/csrInitiativesPage.html +26 -0
- package/assets/html2/cultureValuesPage.html +44 -0
- package/assets/html2/customerJourneyPage.html +68 -0
- package/assets/html2/customerSuccessJourneyPage.html +54 -0
- package/assets/html2/digitalMaturityPage.html +51 -0
- package/assets/html2/driverTreePage.html +92 -0
- package/assets/html2/ecosystemMapPage.html +30 -0
- package/assets/html2/esgFrameworkPage.html +66 -0
- package/assets/html2/executiveSummaryPage.html +27 -0
- package/assets/html2/fourPPage.html +85 -0
- package/assets/html2/funnelPage.html +53 -0
- package/assets/html2/ganttSimplePage.html +56 -0
- package/assets/html2/geMcKinseyMatrixPage.html +43 -0
- package/assets/html2/heatmapPlaceholderPage.html +131 -0
- package/assets/html2/hypothesisPage.html +100 -0
- package/assets/html2/innovationFunnelPage.html +61 -0
- package/assets/html2/integrationPlanPage.html +61 -0
- package/assets/html2/issueTreePage.html +97 -0
- package/assets/html2/keyMessageWithSupportsPage.html +47 -0
- package/assets/html2/kpiHighlightPage.html +54 -0
- package/assets/html2/launchPlanPage.html +86 -0
- package/assets/html2/mAPipelinePage.html +79 -0
- package/assets/html2/marimekkoPlaceholderPage.html +120 -0
- package/assets/html2/marketDriversPage.html +32 -0
- package/assets/html2/marketingMixPage.html +50 -0
- package/assets/html2/meceListPage.html +32 -0
- package/assets/html2/milestoneTimelinePage.html +59 -0
- package/assets/html2/npvSummaryPage.html +54 -0
- package/assets/html2/okrKpiDashboardPage.html +85 -0
- package/assets/html2/optionEvaluationPage.html +128 -0
- package/assets/html2/orgChartPage.html +30 -0
- package/assets/html2/pLBreakdownPage.html +73 -0
- package/assets/html2/partnershipMapPage.html +26 -0
- package/assets/html2/personasPage.html +39 -0
- package/assets/html2/pipelineFunnelPage.html +77 -0
- package/assets/html2/porterFiveForcesPage.html +140 -0
- package/assets/html2/positioningMapPage.html +40 -0
- package/assets/html2/pricingWaterfallPage.html +33 -0
- package/assets/html2/productRoadmapPage.html +47 -0
- package/assets/html2/pyramidPrinciplePage.html +47 -0
- package/assets/html2/quarterlyRoadmapPage.html +54 -0
- package/assets/html2/raciPage.html +49 -0
- package/assets/html2/revenueModelPage.html +54 -0
- package/assets/html2/riskMitigationPage.html +36 -0
- package/assets/html2/salesDashboardPage.html +58 -0
- package/assets/html2/scenarioPlanningPage.html +63 -0
- package/assets/html2/scqaPage.html +74 -0
- package/assets/html2/sectionDividerPage.html +25 -0
- package/assets/html2/segmentationPage.html +36 -0
- package/assets/html2/sensitivityAnalysisPage.html +82 -0
- package/assets/html2/sevenSPage.html +31 -0
- package/assets/html2/shareholderValueTreePage.html +32 -0
- package/assets/html2/stakeholderMapPage.html +36 -0
- package/assets/html2/supportOrgModelPage.html +57 -0
- package/assets/html2/surveyResultsPage.html +32 -0
- package/assets/html2/sustainabilityRoadmapPage.html +54 -0
- package/assets/html2/swotPage.html +97 -0
- package/assets/html2/synergyCapturePage.html +39 -0
- package/assets/html2/tamSamSomPage.html +62 -0
- package/assets/html2/techRoadmapPage.html +54 -0
- package/assets/html2/thankYouContactPage.html +78 -0
- package/assets/html2/threeCPage.html +66 -0
- package/assets/html2/twoByTwoMatrixPage.html +72 -0
- package/assets/html2/valueChainPage.html +56 -0
- package/assets/html2/waterfallPage.html +47 -0
- package/assets/templates/tailwind-sea.html +34 -0
- package/assets/templates/tailwind.html +14 -0
- package/lib/browser.d.ts +1 -0
- package/lib/browser.js +17 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +18 -0
- package/lib/mcp/server.d.ts +2 -0
- package/lib/mcp/server.js +77 -0
- package/lib/mcp/test.d.ts +1 -0
- package/lib/mcp/test.js +56 -0
- package/lib/presentation.d.ts +1 -0
- package/lib/presentation.js +67 -0
- package/lib/presentationHandlers/html.d.ts +322 -0
- package/lib/presentationHandlers/html.js +348 -0
- package/lib/presentationHandlers/html_class.d.ts +98 -0
- package/lib/presentationHandlers/html_class.js +266 -0
- package/lib/runner.d.ts +1 -0
- package/lib/runner.js +31 -0
- package/lib/server.d.ts +2 -0
- package/lib/server.js +76 -0
- package/lib/tools.d.ts +1 -0
- package/lib/tools.js +1604 -0
- package/lib/utils.d.ts +13 -0
- package/lib/utils.js +80 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# 📖 mulmo vision とは?
|
|
2
|
+
|
|
3
|
+
mulmo vision は LLM(大規模言語モデル) を使って、プレゼンテーション資料を自動で作成するツールです。
|
|
4
|
+
|
|
5
|
+
プログラミングやデザインの専門知識がなくても、
|
|
6
|
+
「伝えたい情報」を入力すれば、スライドの文章とデザインが自動生成されます。
|
|
7
|
+
|
|
8
|
+
# ⚙️ 仕組み
|
|
9
|
+
|
|
10
|
+
- 情報整理
|
|
11
|
+
ユーザーが資料に入れたい情報をまとめます。
|
|
12
|
+
|
|
13
|
+
- スライド設計(LLM)
|
|
14
|
+
LLM が情報を読み取り、必要なスライド構成と文言を決定します。
|
|
15
|
+
|
|
16
|
+
- HTML テンプレート生成
|
|
17
|
+
Node.js 関数が呼ばれ、スライド用の HTML テンプレートに文言が埋め込まれます。
|
|
18
|
+
|
|
19
|
+
- 画像生成
|
|
20
|
+
HTML をレンダリングし、最終的なスライド画像を作成します。
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
```mermaid
|
|
24
|
+
flowchart TD
|
|
25
|
+
|
|
26
|
+
A[📝 ユーザーが情報を入力] --> B[🤖 LLM: スライド設計 & 文言作成]
|
|
27
|
+
B --> C[⚙️ Node 関数: HTML テンプレートに適用]
|
|
28
|
+
C --> D[🖼 HTML レンダリング: スライド画像生成]
|
|
29
|
+
D --> E[📑 完成したプレゼン資料]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# 技術的な流れ
|
|
34
|
+
- LLMがtoolsを使ってスライドの内容を決める
|
|
35
|
+
- [slideを作成するtoolsの関数定義](./src/tools.ts)
|
|
36
|
+
- [runner](./src/runner.ts)でtoolsの結果から関数を呼び出す
|
|
37
|
+
- [呼び出される関数](./src/presentationHandlers/html_class.ts)
|
|
38
|
+
- [html + tailwindを使ったベースhtml](./assets/templates/tailwind.html) + [スライドごとの個別のhtml](./assets/html/) でhtmlページをつくる
|
|
39
|
+
- outdirに画像として保存する
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### sample: 80このサンプルデータを使ってhtml -> imageを生成する
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
yarn run generate_all_images
|
|
46
|
+
```
|
|
47
|
+
- [その関数で生成される80種類のサンプルのデータ](./tests/ai_referencing_80_tool_calls.ts)
|
|
48
|
+
|
|
49
|
+
outdir/{timeStamp}/{index}.png に画像生成
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
### openaiのエージェントでprompt -> tools -> html作成
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
yarn run ai
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
プロンプトはソースに直接書いている `src/presentation.ts`
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### プラグイン+デザインテンプレート
|
|
62
|
+
|
|
63
|
+
デザインは
|
|
64
|
+
- toolsから呼ばれる関数群を変更する(html以外でも書き出せる)
|
|
65
|
+
- htmlのベースファイルに変更、もしくはstyleの追加
|
|
66
|
+
- assets/templates以下のファイルを書き換える
|
|
67
|
+
- templateファイルの指定
|
|
68
|
+
- `const handler = new htmlPlugin({ outputDir, rootDir, templateOptions: {htmlTemplateFile: "tailwind-sea"}});`
|
|
69
|
+
- templateのheaderへstyleを注入
|
|
70
|
+
- `const handler = new htmlPlugin({ outputDir, rootDir, templateOptions: {headerStyle: darkStyle}});`
|
|
71
|
+
- 各スライド用の個別のhtmlファイルの変更
|
|
72
|
+
- `assets/html/` 以下のファイルを編集
|
|
73
|
+
- 各スライド用のフォルダーを変更する
|
|
74
|
+
`const templateFileName = path.resolve(this.rootDir, "./assets/html/", `${fileName}.html`);`
|
|
75
|
+
|
|
76
|
+
することでカスタマイズできます。
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
### mcp
|
|
80
|
+
|
|
81
|
+
buildする
|
|
82
|
+
```
|
|
83
|
+
yarn run build
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
mcp設定
|
|
87
|
+
```
|
|
88
|
+
"mulmocast-vision": {
|
|
89
|
+
"command": "env",
|
|
90
|
+
"args": [
|
|
91
|
+
"node",
|
|
92
|
+
"/path/to/mulmocast-vision/lib/mcp/server.js"
|
|
93
|
+
],
|
|
94
|
+
"transport": {
|
|
95
|
+
"stdio": true
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
mulmocast-vision/output以下に画像が出力される。
|
|
101
|
+
セッションごとにfolderができるので注意
|
|
102
|
+
(連続すると画像が上書きされるかも)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 flex flex-col px-20 py-20">
|
|
2
|
+
<header class="mb-10">
|
|
3
|
+
<h1 class="text-5xl font-bold tracking-tight">{{title}}</h1>
|
|
4
|
+
</header>
|
|
5
|
+
|
|
6
|
+
<main class="flex-1">
|
|
7
|
+
<ol class="list-decimal ml-6 space-y-6 text-3xl leading-relaxed text-gray-800 break-words whitespace-normal">
|
|
8
|
+
{% for item in items %}
|
|
9
|
+
<li>{{ items }}</li>
|
|
10
|
+
{% endfor %}
|
|
11
|
+
</ol>
|
|
12
|
+
</main>
|
|
13
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Balance Sheet</h1>
|
|
3
|
+
<div class="grid grid-cols-3 gap-6">
|
|
4
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
5
|
+
<h2 class="text-xl font-semibold mb-3">Assets</h2>
|
|
6
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
7
|
+
{% for a in assets %}
|
|
8
|
+
<li>{{a}}</li>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</ul>
|
|
11
|
+
</section>
|
|
12
|
+
<section class="rounded-xl border p-6 bg-white">
|
|
13
|
+
<h2 class="text-xl font-semibold mb-3">Liabilities</h2>
|
|
14
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
15
|
+
{% for l in liabilities %}
|
|
16
|
+
<li>{{l}}</li>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</ul>
|
|
19
|
+
</section>
|
|
20
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
21
|
+
<h2 class="text-xl font-semibold mb-3">Equity</h2>
|
|
22
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
23
|
+
{% for e in equity %}
|
|
24
|
+
<li>{{e}}</li>
|
|
25
|
+
{% endfor %}
|
|
26
|
+
</ul>
|
|
27
|
+
</section>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Balanced Scorecard</h1>
|
|
3
|
+
<div class="grid grid-cols-2 gap-6">
|
|
4
|
+
{% for p in perspectives %}
|
|
5
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
6
|
+
<h2 class="text-xl font-semibold text-gray-700 mb-3">{{p.name}}</h2>
|
|
7
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
8
|
+
{% for it in p.items %}
|
|
9
|
+
<li>{{it}}</li>
|
|
10
|
+
{% endfor %}
|
|
11
|
+
</ul>
|
|
12
|
+
</section>
|
|
13
|
+
{% endfor %}
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">BCG Matrix</h1>
|
|
3
|
+
<div class="grid grid-cols-2 gap-6">
|
|
4
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
5
|
+
<h2 class="text-xl font-semibold mb-3">Stars</h2>
|
|
6
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
7
|
+
{% for it in stars %}
|
|
8
|
+
<li>{{it}}</li>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</ul>
|
|
11
|
+
</section>
|
|
12
|
+
<section class="rounded-xl border p-6 bg-white">
|
|
13
|
+
<h2 class="text-xl font-semibold mb-3">Cash Cows</h2>
|
|
14
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
15
|
+
{% for it in cashCows %}
|
|
16
|
+
<li>{{it}}</li>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</ul>
|
|
19
|
+
</section>
|
|
20
|
+
<section class="rounded-xl border p-6 bg-white">
|
|
21
|
+
<h2 class="text-xl font-semibold mb-3">Question Marks</h2>
|
|
22
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
23
|
+
{% for it in questionMarks %}
|
|
24
|
+
<li>{{it}}</li>
|
|
25
|
+
{% endfor %}
|
|
26
|
+
</ul>
|
|
27
|
+
</section>
|
|
28
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
29
|
+
<h2 class="text-xl font-semibold mb-3">Dogs</h2>
|
|
30
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
31
|
+
{% for it in dogs %}
|
|
32
|
+
<li>{{it}}</li>
|
|
33
|
+
{% endfor %}
|
|
34
|
+
</ul>
|
|
35
|
+
</section>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">{{title}}</h1>
|
|
3
|
+
<div class="grid grid-cols-2 gap-6">
|
|
4
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
5
|
+
<h2 class="text-xl font-semibold mb-3">Before</h2>
|
|
6
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
7
|
+
{% for x in before %}
|
|
8
|
+
<li>{{x}}</li>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</ul>
|
|
11
|
+
</section>
|
|
12
|
+
<section class="rounded-xl border p-6 bg-white">
|
|
13
|
+
<h2 class="text-xl font-semibold mb-3">After</h2>
|
|
14
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
15
|
+
{% for x in after %}
|
|
16
|
+
<li>{{x}}</li>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</ul>
|
|
19
|
+
</section>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Benchmarking</h1>
|
|
3
|
+
<table class="w-full border-collapse">
|
|
4
|
+
<thead>
|
|
5
|
+
<tr>
|
|
6
|
+
<th class="border p-3 text-left">Metric \ Competitor</th>
|
|
7
|
+
{% for c in competitors %}
|
|
8
|
+
<th class="border p-3">{{c}}</th>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</tr>
|
|
11
|
+
</thead>
|
|
12
|
+
<tbody>
|
|
13
|
+
{% for m in metrics %}
|
|
14
|
+
<tr>
|
|
15
|
+
<td class="border p-3">{{m}}</td>
|
|
16
|
+
{% for c in competitors %}
|
|
17
|
+
<td class="border p-3"></td>
|
|
18
|
+
{% endfor %}
|
|
19
|
+
</tr>
|
|
20
|
+
{% endfor %}
|
|
21
|
+
</tbody>
|
|
22
|
+
</table>
|
|
23
|
+
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">{{title}}</h1>
|
|
3
|
+
<p class="text-gray-600 mb-4">Bubble chart placeholder. Replace with visualization.</p>
|
|
4
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
5
|
+
{% for p in points %}
|
|
6
|
+
<li>{{p.label}} — x:{{p.x}}, y:{{p.y}}, r:{{p.r}}</li>
|
|
7
|
+
{% endfor %}
|
|
8
|
+
</ul>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<div class="grid grid-cols-3 gap-4">
|
|
3
|
+
{% for key, arr in blocks %}
|
|
4
|
+
<section class="rounded-xl border p-4 bg-gray-50">
|
|
5
|
+
<h2 class="text-lg font-semibold text-gray-700 mb-2">{{key}}</h2>
|
|
6
|
+
<ul class="list-disc ml-5 space-y-1 text-xl">
|
|
7
|
+
{% for v in arr %}
|
|
8
|
+
<li>{{v}}</li>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</ul>
|
|
11
|
+
</section>
|
|
12
|
+
{% endfor %}
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Cash Flow</h1>
|
|
3
|
+
<div class="grid grid-cols-2 gap-6">
|
|
4
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
5
|
+
<h2 class="text-xl font-semibold mb-3">Inflows</h2>
|
|
6
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
7
|
+
{% for i in inflows %}
|
|
8
|
+
<li>{{i}}</li>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</ul>
|
|
11
|
+
</section>
|
|
12
|
+
<section class="rounded-xl border p-6 bg-white">
|
|
13
|
+
<h2 class="text-xl font-semibold mb-3">Outflows</h2>
|
|
14
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
15
|
+
{% for o in outflows %}
|
|
16
|
+
<li>{{o}}</li>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</ul>
|
|
19
|
+
</section>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Change Curve</h1>
|
|
3
|
+
<ol class="list-decimal ml-6 space-y-3 text-2xl">
|
|
4
|
+
{% for s in stages %}
|
|
5
|
+
<li>{{s}}</li>
|
|
6
|
+
{% endfor %}
|
|
7
|
+
</ol>
|
|
8
|
+
{% if notes %}
|
|
9
|
+
<p class="mt-6 text-gray-600">{{notes}}</p>
|
|
10
|
+
{% endif %}
|
|
11
|
+
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Communication Plan</h1>
|
|
3
|
+
<section class="mb-6">
|
|
4
|
+
<h2 class="text-xl font-semibold mb-2">Audiences</h2>
|
|
5
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
6
|
+
{% for a in audiences %}
|
|
7
|
+
<li>{{a}}</li>
|
|
8
|
+
{% endfor %}
|
|
9
|
+
</ul>
|
|
10
|
+
</section>
|
|
11
|
+
<section class="mb-6">
|
|
12
|
+
<h2 class="text-xl font-semibold mb-2">Channels</h2>
|
|
13
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
14
|
+
{% for c in channels %}
|
|
15
|
+
<li>{{c}}</li>
|
|
16
|
+
{% endfor %}
|
|
17
|
+
</ul>
|
|
18
|
+
</section>
|
|
19
|
+
{% if cadence %}
|
|
20
|
+
<p class="text-xl text-gray-700">Cadence: {{cadence}}</p>
|
|
21
|
+
{% endif %}
|
|
22
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-6">Compliance Heatmap</h1>
|
|
3
|
+
<table class="border-collapse">
|
|
4
|
+
<thead>
|
|
5
|
+
<tr>
|
|
6
|
+
<th class="border p-2">Area</th>
|
|
7
|
+
<th class="border p-2">Level</th>
|
|
8
|
+
</tr>
|
|
9
|
+
</thead>
|
|
10
|
+
<tbody>
|
|
11
|
+
{% for a in areas %}
|
|
12
|
+
<tr>
|
|
13
|
+
<td class="border p-2">{{a}}</td>
|
|
14
|
+
<td class="border p-2">{{levels[loop.index0]}}</td>
|
|
15
|
+
</tr>
|
|
16
|
+
{% endfor %}
|
|
17
|
+
</tbody>
|
|
18
|
+
</table>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Cost Structure</h1>
|
|
3
|
+
<section class="mb-6">
|
|
4
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
5
|
+
{% for b in buckets %}
|
|
6
|
+
<li>{{b}}</li>
|
|
7
|
+
{% endfor %}
|
|
8
|
+
</ul>
|
|
9
|
+
</section>
|
|
10
|
+
{% if fixedVsVariable %}
|
|
11
|
+
<section>
|
|
12
|
+
<h2 class="text-xl font-semibold mb-2">Fixed vs Variable</h2>
|
|
13
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
14
|
+
{% for x in fixedVsVariable %}
|
|
15
|
+
<li>{{x}}</li>
|
|
16
|
+
{% endfor %}
|
|
17
|
+
</ul>
|
|
18
|
+
</section>
|
|
19
|
+
{% endif %}
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-6">Culture & Values</h1>
|
|
3
|
+
<section class="mb-6">
|
|
4
|
+
<h2 class="text-xl font-semibold mb-2">Values</h2>
|
|
5
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
6
|
+
{% for v in values %}
|
|
7
|
+
<li>{{v}}</li>
|
|
8
|
+
{% endfor %}
|
|
9
|
+
</ul>
|
|
10
|
+
</section>
|
|
11
|
+
{% if behaviors %}
|
|
12
|
+
<section>
|
|
13
|
+
<h2 class="text-xl font-semibold mb-2">Behaviors</h2>
|
|
14
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
15
|
+
{% for b in behaviors %}
|
|
16
|
+
<li>{{b}}</li>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</ul>
|
|
19
|
+
</section>
|
|
20
|
+
{% endif %}
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16 space-y-8">
|
|
2
|
+
<section>
|
|
3
|
+
<h2 class="text-5xl font-bold mb-6">Customer Journey</h2>
|
|
4
|
+
<div class="flex flex-wrap gap-3">
|
|
5
|
+
{% for s in stages %}
|
|
6
|
+
<div class="rounded-full border px-4 py-2 bg-gray-50 text-2xl">{{s}}</div>
|
|
7
|
+
{% endfor %}
|
|
8
|
+
</div>
|
|
9
|
+
</section>
|
|
10
|
+
<section class="grid grid-cols-1 md:grid-cols-{{stages|length}} gap-6">
|
|
11
|
+
{% for tp in touchpoints %}
|
|
12
|
+
<div class="rounded-xl border p-4 bg-white">
|
|
13
|
+
<ul class="list-disc ml-5 space-y-2 text-xl">
|
|
14
|
+
{% for t in tp %}
|
|
15
|
+
<li>{{t}}</li>
|
|
16
|
+
{% endfor %}
|
|
17
|
+
</ul>
|
|
18
|
+
</div>
|
|
19
|
+
{% endfor %}
|
|
20
|
+
</section>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-6">Customer Success Journey</h1>
|
|
3
|
+
<div class="flex flex-wrap gap-3 mb-6">
|
|
4
|
+
{% for s in stages %}
|
|
5
|
+
<div class="rounded-full border px-4 py-2 bg-gray-50 text-2xl">{{s}}</div>
|
|
6
|
+
{% endfor %}
|
|
7
|
+
</div>
|
|
8
|
+
{% if metrics %}
|
|
9
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
10
|
+
{% for m in metrics %}
|
|
11
|
+
<li>{{m}}</li>
|
|
12
|
+
{% endfor %}
|
|
13
|
+
</ul>
|
|
14
|
+
{% endif %}
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-6">Digital Maturity</h1>
|
|
3
|
+
<div class="grid grid-cols-2 gap-6">
|
|
4
|
+
{% for i in range(0, dimensions|length) %}
|
|
5
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
6
|
+
<h2 class="text-xl font-semibold mb-2">{{dimensions[i]}}</h2>
|
|
7
|
+
<p class="text-xl">Level: {{levels[i]}}</p>
|
|
8
|
+
</section>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</div>
|
|
11
|
+
{% if notes %}
|
|
12
|
+
<p class="mt-6 text-gray-600">{{notes}}</p>
|
|
13
|
+
{% endif %}
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<div class="flex flex-col items-center mb-10">
|
|
3
|
+
<div class="inline-flex items-center gap-3 rounded-full border border-gray-300 bg-gray-50 px-6 py-3">
|
|
4
|
+
<span class="text-sm uppercase tracking-wide text-gray-600">Metric</span>
|
|
5
|
+
<span class="text-2xl font-semibold text-gray-900">{{metric}}</span>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
9
|
+
{% for branch in drivers %}
|
|
10
|
+
<section class="rounded-2xl border border-gray-200 p-6 bg-white">
|
|
11
|
+
<h3 class="text-lg font-semibold text-gray-700 mb-3">Driver group {{loop.index}}</h3>
|
|
12
|
+
<ul class="list-disc ml-5 space-y-2 text-xl leading-relaxed">
|
|
13
|
+
{% for item in branch %}
|
|
14
|
+
<li>{{item}}</li>
|
|
15
|
+
{% endfor %}
|
|
16
|
+
</ul>
|
|
17
|
+
</section>
|
|
18
|
+
{% endfor %}
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Ecosystem Map</h1>
|
|
3
|
+
<div class="grid grid-cols-2 gap-6">
|
|
4
|
+
{% for e in entities %}
|
|
5
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
6
|
+
<h2 class="text-xl font-semibold mb-2">{{e.category}}</h2>
|
|
7
|
+
<p class="text-2xl">{{e.name}}</p>
|
|
8
|
+
</section>
|
|
9
|
+
{% endfor %}
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<div class="grid grid-cols-3 gap-6">
|
|
3
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
4
|
+
<h2 class="text-xl font-semibold mb-3">Environmental</h2>
|
|
5
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
6
|
+
{% for e in environmental %}
|
|
7
|
+
<li>{{e}}</li>
|
|
8
|
+
{% endfor %}
|
|
9
|
+
</ul>
|
|
10
|
+
</section>
|
|
11
|
+
<section class="rounded-xl border p-6 bg-white">
|
|
12
|
+
<h2 class="text-xl font-semibold mb-3">Social</h2>
|
|
13
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
14
|
+
{% for s in social %}
|
|
15
|
+
<li>{{s}}</li>
|
|
16
|
+
{% endfor %}
|
|
17
|
+
</ul>
|
|
18
|
+
</section>
|
|
19
|
+
<section class="rounded-xl border p-6 bg-gray-50">
|
|
20
|
+
<h2 class="text-xl font-semibold mb-3">Governance</h2>
|
|
21
|
+
<ul class="list-disc ml-5 text-2xl">
|
|
22
|
+
{% for g in governance %}
|
|
23
|
+
<li>{{g}}</li>
|
|
24
|
+
{% endfor %}
|
|
25
|
+
</ul>
|
|
26
|
+
</section>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 overflow-hidden flex flex-col">
|
|
2
|
+
<!-- Title -->
|
|
3
|
+
<header class="px-20 pt-20">
|
|
4
|
+
<h1 class="text-6xl font-bold tracking-tight mb-12">{{title}}</h1>
|
|
5
|
+
</header>
|
|
6
|
+
|
|
7
|
+
<!-- Executive summary bullets -->
|
|
8
|
+
<main class="flex-1 px-32 pb-20">
|
|
9
|
+
<ol class="list-decimal ml-6 space-y-8 text-3xl leading-relaxed text-gray-800 break-words whitespace-normal">
|
|
10
|
+
{% for bullet in bullets %}
|
|
11
|
+
<li>{{ bullets }}</li>
|
|
12
|
+
{% endfor %}
|
|
13
|
+
</ol>
|
|
14
|
+
</main>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-20 py-20">
|
|
2
|
+
<div class="grid grid-cols-2 gap-6">
|
|
3
|
+
<section class="rounded-2xl border p-6 bg-gray-50">
|
|
4
|
+
<h2 class="text-xl font-semibold text-gray-700 mb-3">Product</h2>
|
|
5
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
6
|
+
{% for x in product %}
|
|
7
|
+
<li>{{x}}</li>
|
|
8
|
+
{% endfor %}
|
|
9
|
+
</ul>
|
|
10
|
+
</section>
|
|
11
|
+
<section class="rounded-2xl border p-6 bg-white">
|
|
12
|
+
<h2 class="text-xl font-semibold text-gray-700 mb-3">Price</h2>
|
|
13
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
14
|
+
{% for x in price %}
|
|
15
|
+
<li>{{x}}</li>
|
|
16
|
+
{% endfor %}
|
|
17
|
+
</ul>
|
|
18
|
+
</section>
|
|
19
|
+
<section class="rounded-2xl border p-6 bg-white">
|
|
20
|
+
<h2 class="text-xl font-semibold text-gray-700 mb-3">Place</h2>
|
|
21
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
22
|
+
{% for x in place %}
|
|
23
|
+
<li>{{x}}</li>
|
|
24
|
+
{% endfor %}
|
|
25
|
+
</ul>
|
|
26
|
+
</section>
|
|
27
|
+
<section class="rounded-2xl border p-6 bg-gray-50">
|
|
28
|
+
<h2 class="text-xl font-semibold text-gray-700 mb-3">Promotion</h2>
|
|
29
|
+
<ul class="list-disc ml-5 space-y-2 text-2xl">
|
|
30
|
+
{% for x in promotion %}
|
|
31
|
+
<li>{{x}}</li>
|
|
32
|
+
{% endfor %}
|
|
33
|
+
</ul>
|
|
34
|
+
</section>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">Gantt (Simple)</h1>
|
|
3
|
+
<table class="w-full border-collapse">
|
|
4
|
+
<thead>
|
|
5
|
+
<tr>
|
|
6
|
+
<th class="border p-3 text-left">Task</th>
|
|
7
|
+
<th class="border p-3">Start</th>
|
|
8
|
+
<th class="border p-3">End</th>
|
|
9
|
+
</tr>
|
|
10
|
+
</thead>
|
|
11
|
+
<tbody>
|
|
12
|
+
{% for t in tasks %}
|
|
13
|
+
<tr>
|
|
14
|
+
<td class="border p-3">{{t.name}}</td>
|
|
15
|
+
<td class="border p-3">{{t.start}}</td>
|
|
16
|
+
<td class="border p-3">{{t.end}}</td>
|
|
17
|
+
</tr>
|
|
18
|
+
{% endfor %}
|
|
19
|
+
</tbody>
|
|
20
|
+
</table>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div class="bg-white text-gray-900 px-16 py-16">
|
|
2
|
+
<h1 class="text-5xl font-bold mb-8">GE–McKinsey 3x3</h1>
|
|
3
|
+
<div class="grid grid-cols-3 gap-4">
|
|
4
|
+
{% for i in [0,1,2] %}
|
|
5
|
+
<div class="rounded-xl border p-6 bg-gray-50 min-h-[120px]">Row {{i+1}}</div>
|
|
6
|
+
{% endfor %}
|
|
7
|
+
</div>
|
|
8
|
+
<ul class="mt-8 list-disc ml-5 text-xl">
|
|
9
|
+
{% for p in placements %}
|
|
10
|
+
<li>{{p.name}} (r{{p.row+1}}, c{{p.col+1}})</li>
|
|
11
|
+
{% endfor %}
|
|
12
|
+
</ul>
|
|
13
|
+
</div>
|