base-themes 0.1.2 → 0.1.3
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/CHANGELOG.md +25 -0
- package/CODE_OF_CONDUCT.md +22 -0
- package/CONTRIBUTING.md +98 -0
- package/LICENSE +21 -0
- package/README.md +316 -3
- package/RELEASE.md +80 -0
- package/SECURITY.md +49 -0
- package/bin/base-themes.mjs +143 -0
- package/dist/base-themes.css +1 -1
- package/dist/base-themes.js +857 -302
- package/dist/llms-full.txt +288 -0
- package/dist/llms.txt +79 -0
- package/dist/types/blocks/AuthCard.d.ts +2 -0
- package/dist/types/blocks/CommandPaletteBlock.d.ts +2 -0
- package/dist/types/blocks/DashboardShell.d.ts +2 -0
- package/dist/types/blocks/DataTableBlock.d.ts +2 -0
- package/dist/types/blocks/PricingPanel.d.ts +2 -0
- package/dist/types/blocks/SettingsForm.d.ts +2 -0
- package/dist/types/blocks/TeamActivityFeed.d.ts +2 -0
- package/dist/types/blocks/ThemeShowcaseCard.d.ts +2 -0
- package/dist/types/blocks/index.d.ts +8 -0
- package/dist/types/components/ui/Input.d.ts +3 -0
- package/dist/types/components/ui/index.d.ts +1 -1
- package/dist/types/lib.d.ts +1 -0
- package/docs/adoption-dashboard.md +149 -0
- package/docs/analytics-setup.md +145 -0
- package/docs/community-gallery-proposal.md +64 -0
- package/docs/community-proof-telemetry.md +47 -0
- package/docs/contributor-issue-seeds.md +240 -0
- package/docs/registry-access-telemetry.md +87 -0
- package/docs/release-announcement-kit.md +229 -0
- package/docs/search-console-setup.md +111 -0
- package/docs/theme-token-contract.md +113 -0
- package/examples/dashboard/README.md +24 -0
- package/examples/dashboard/index.html +12 -0
- package/examples/dashboard/package-lock.json +1212 -0
- package/examples/dashboard/package.json +24 -0
- package/examples/dashboard/src/App.tsx +115 -0
- package/examples/dashboard/src/main.tsx +11 -0
- package/examples/dashboard/src/styles.css +129 -0
- package/examples/dashboard/src/vite-env.d.ts +4 -0
- package/examples/dashboard/tsconfig.app.json +23 -0
- package/examples/dashboard/tsconfig.json +7 -0
- package/examples/dashboard/tsconfig.node.json +15 -0
- package/examples/dashboard/vite.config.ts +6 -0
- package/examples/next/README.md +29 -0
- package/examples/next/app/base-themes-demo.tsx +70 -0
- package/examples/next/app/layout.tsx +16 -0
- package/examples/next/app/page.tsx +9 -0
- package/examples/next/app/styles.css +106 -0
- package/examples/next/next-env.d.ts +6 -0
- package/examples/next/next.config.ts +5 -0
- package/examples/next/package-lock.json +1199 -0
- package/examples/next/package.json +27 -0
- package/examples/next/tsconfig.json +36 -0
- package/examples/registry-copy/README.md +73 -0
- package/examples/registry-copy/plan-copy.mjs +130 -0
- package/examples/theme-customization/README.md +26 -0
- package/examples/theme-customization/index.html +12 -0
- package/examples/theme-customization/package-lock.json +1212 -0
- package/examples/theme-customization/package.json +24 -0
- package/examples/theme-customization/src/App.tsx +138 -0
- package/examples/theme-customization/src/main.tsx +11 -0
- package/examples/theme-customization/src/styles.css +138 -0
- package/examples/theme-customization/src/vite-env.d.ts +4 -0
- package/examples/theme-customization/tsconfig.app.json +23 -0
- package/examples/theme-customization/tsconfig.json +7 -0
- package/examples/theme-customization/tsconfig.node.json +15 -0
- package/examples/theme-customization/vite.config.ts +6 -0
- package/examples/vite/README.md +32 -0
- package/examples/vite/index.html +12 -0
- package/examples/vite/package-lock.json +1200 -0
- package/examples/vite/package.json +24 -0
- package/examples/vite/src/App.tsx +101 -0
- package/examples/vite/src/main.tsx +11 -0
- package/examples/vite/src/styles.css +125 -0
- package/examples/vite/src/vite-env.d.ts +4 -0
- package/examples/vite/tsconfig.app.json +23 -0
- package/examples/vite/tsconfig.json +7 -0
- package/examples/vite/tsconfig.node.json +15 -0
- package/examples/vite/vite.config.ts +6 -0
- package/llms-full.txt +288 -0
- package/llms.txt +79 -0
- package/package.json +157 -14
- package/registry/items/accordion.json +101 -0
- package/registry/items/alert-dialog.json +107 -0
- package/registry/items/autocomplete.json +106 -0
- package/registry/items/avatar.json +101 -0
- package/registry/items/block-auth-card.json +105 -0
- package/registry/items/block-command-palette.json +99 -0
- package/registry/items/block-dashboard-shell.json +101 -0
- package/registry/items/block-data-table.json +99 -0
- package/registry/items/block-pricing-panel.json +99 -0
- package/registry/items/block-settings-form.json +107 -0
- package/registry/items/block-team-activity-feed.json +99 -0
- package/registry/items/block-theme-showcase-card.json +99 -0
- package/registry/items/button.json +102 -0
- package/registry/items/checkbox-group.json +106 -0
- package/registry/items/checkbox.json +102 -0
- package/registry/items/collapsible.json +101 -0
- package/registry/items/combobox.json +101 -0
- package/registry/items/context-menu.json +106 -0
- package/registry/items/csp-provider.json +96 -0
- package/registry/items/dialog.json +102 -0
- package/registry/items/direction-provider.json +101 -0
- package/registry/items/drawer.json +101 -0
- package/registry/items/field.json +101 -0
- package/registry/items/fieldset.json +101 -0
- package/registry/items/form.json +101 -0
- package/registry/items/input.json +102 -0
- package/registry/items/menu.json +101 -0
- package/registry/items/menubar.json +106 -0
- package/registry/items/meter.json +101 -0
- package/registry/items/navigation-menu.json +101 -0
- package/registry/items/number-field.json +101 -0
- package/registry/items/otp-field.json +101 -0
- package/registry/items/popover.json +102 -0
- package/registry/items/preview-card.json +101 -0
- package/registry/items/progress.json +101 -0
- package/registry/items/radio-group.json +102 -0
- package/registry/items/radio.json +101 -0
- package/registry/items/scroll-area.json +101 -0
- package/registry/items/select.json +102 -0
- package/registry/items/separator.json +101 -0
- package/registry/items/slider.json +102 -0
- package/registry/items/switch.json +102 -0
- package/registry/items/tabs.json +101 -0
- package/registry/items/theme-bauhaus.json +107 -0
- package/registry/items/theme-bento.json +107 -0
- package/registry/items/theme-calm.json +107 -0
- package/registry/items/theme-cyberpunk.json +108 -0
- package/registry/items/theme-data-dense.json +107 -0
- package/registry/items/theme-editorial.json +107 -0
- package/registry/items/theme-enterprise.json +108 -0
- package/registry/items/theme-fluent.json +107 -0
- package/registry/items/theme-glass.json +107 -0
- package/registry/items/theme-linear.json +107 -0
- package/registry/items/theme-luxury.json +107 -0
- package/registry/items/theme-material.json +107 -0
- package/registry/items/theme-minimal.json +107 -0
- package/registry/items/theme-mono.json +107 -0
- package/registry/items/theme-neo-brutalism.json +107 -0
- package/registry/items/theme-playful.json +107 -0
- package/registry/items/theme-retro.json +107 -0
- package/registry/items/theme-shadcn.json +107 -0
- package/registry/items/theme-soft-ui.json +107 -0
- package/registry/items/theme-terminal.json +107 -0
- package/registry/items/toast.json +106 -0
- package/registry/items/toggle-group.json +101 -0
- package/registry/items/toggle.json +101 -0
- package/registry/items/toolbar.json +101 -0
- package/registry/items/tooltip.json +102 -0
- package/registry/registry.json +564 -49
- package/registry/shadcn-registry.json +415 -0
- package/research/telemetry-fixtures/analytics-events.jsonl +9 -0
- package/research/telemetry-fixtures/bundle-report.json +44 -0
- package/research/telemetry-fixtures/community-proof.csv +5 -0
- package/research/telemetry-fixtures/registry-access.jsonl +10 -0
- package/research/telemetry-fixtures/search-console-export.csv +4 -0
- package/scripts/registry-plan.mjs +434 -0
- package/scripts/render-launch-actions.mjs +405 -0
- package/scripts/render-launch-status.mjs +373 -0
- package/scripts/render-release-announcement.mjs +329 -0
- package/scripts/verify-launch-readiness.mjs +415 -0
- package/scripts/verify-telemetry-fixtures.mjs +85 -0
- package/scripts/verify-telemetry-report.mjs +89 -0
- package/skills/base-themes/SKILL.md +151 -47
- package/src/blocks/AuthCard.tsx +29 -0
- package/src/blocks/Blocks.css +182 -0
- package/src/blocks/CommandPaletteBlock.tsx +32 -0
- package/src/blocks/DashboardShell.tsx +36 -0
- package/src/blocks/DataTableBlock.tsx +44 -0
- package/src/blocks/PricingPanel.tsx +28 -0
- package/src/blocks/SettingsForm.tsx +37 -0
- package/src/blocks/TeamActivityFeed.tsx +38 -0
- package/src/blocks/ThemeShowcaseCard.tsx +32 -0
- package/src/blocks/index.ts +8 -0
- package/src/components/ui/Accordion.css +42 -0
- package/src/components/ui/Accordion.tsx +41 -0
- package/src/components/ui/AlertDialog.css +40 -0
- package/src/components/ui/AlertDialog.tsx +52 -0
- package/src/components/ui/Autocomplete.css +3 -0
- package/src/components/ui/Autocomplete.tsx +50 -0
- package/src/components/ui/Avatar.css +45 -0
- package/src/components/ui/Avatar.tsx +36 -0
- package/src/components/ui/Button.css +79 -0
- package/src/components/ui/Button.tsx +20 -0
- package/src/components/ui/Checkbox.css +37 -0
- package/src/components/ui/Checkbox.tsx +32 -0
- package/src/components/ui/CheckboxGroup.tsx +21 -0
- package/src/components/ui/Collapsible.css +34 -0
- package/src/components/ui/Collapsible.tsx +29 -0
- package/src/components/ui/Combobox.css +75 -0
- package/src/components/ui/Combobox.tsx +53 -0
- package/src/components/ui/ContextMenu.css +9 -0
- package/src/components/ui/ContextMenu.tsx +47 -0
- package/src/components/ui/CspProvider.tsx +10 -0
- package/src/components/ui/Dialog.css +41 -0
- package/src/components/ui/Dialog.tsx +45 -0
- package/src/components/ui/DirectionProvider.tsx +17 -0
- package/src/components/ui/Drawer.css +77 -0
- package/src/components/ui/Drawer.tsx +56 -0
- package/src/components/ui/Field.css +19 -0
- package/src/components/ui/Field.tsx +24 -0
- package/src/components/ui/Fieldset.css +16 -0
- package/src/components/ui/Fieldset.tsx +19 -0
- package/src/components/ui/Form.css +5 -0
- package/src/components/ui/Form.tsx +12 -0
- package/src/components/ui/Input.css +50 -0
- package/src/components/ui/Input.tsx +62 -0
- package/src/components/ui/Menu.css +59 -0
- package/src/components/ui/Menu.tsx +50 -0
- package/src/components/ui/Menubar.css +26 -0
- package/src/components/ui/Menubar.tsx +42 -0
- package/src/components/ui/Meter.css +45 -0
- package/src/components/ui/Meter.tsx +37 -0
- package/src/components/ui/NavigationMenu.css +103 -0
- package/src/components/ui/NavigationMenu.tsx +64 -0
- package/src/components/ui/NumberField.css +38 -0
- package/src/components/ui/NumberField.tsx +28 -0
- package/src/components/ui/OtpField.css +28 -0
- package/src/components/ui/OtpField.tsx +24 -0
- package/src/components/ui/Popover.css +25 -0
- package/src/components/ui/Popover.tsx +37 -0
- package/src/components/ui/PreviewCard.css +33 -0
- package/src/components/ui/PreviewCard.tsx +43 -0
- package/src/components/ui/Progress.css +33 -0
- package/src/components/ui/Progress.tsx +28 -0
- package/src/components/ui/Radio.tsx +22 -0
- package/src/components/ui/RadioGroup.css +42 -0
- package/src/components/ui/RadioGroup.tsx +29 -0
- package/src/components/ui/ScrollArea.css +42 -0
- package/src/components/ui/ScrollArea.tsx +22 -0
- package/src/components/ui/Select.css +86 -0
- package/src/components/ui/Select.tsx +39 -0
- package/src/components/ui/Separator.css +14 -0
- package/src/components/ui/Separator.tsx +12 -0
- package/src/components/ui/Slider.css +39 -0
- package/src/components/ui/Slider.tsx +21 -0
- package/src/components/ui/Switch.css +45 -0
- package/src/components/ui/Switch.tsx +29 -0
- package/src/components/ui/Tabs.css +72 -0
- package/src/components/ui/Tabs.tsx +44 -0
- package/src/components/ui/Toast.css +75 -0
- package/src/components/ui/Toast.tsx +48 -0
- package/src/components/ui/Toggle.tsx +12 -0
- package/src/components/ui/ToggleGroup.css +35 -0
- package/src/components/ui/ToggleGroup.tsx +30 -0
- package/src/components/ui/Toolbar.css +60 -0
- package/src/components/ui/Toolbar.tsx +36 -0
- package/src/components/ui/Tooltip.css +14 -0
- package/src/components/ui/Tooltip.tsx +31 -0
- package/src/components/ui/index.ts +83 -0
- package/src/components/ui/useDirection.ts +1 -0
- package/src/components/ui/useToastManager.ts +11 -0
- package/src/docs/blockMeta.json +66 -0
- package/src/docs/componentMeta.json +322 -0
- package/src/docs/staticPageMeta.json +143 -0
- package/src/docs/themeMeta.json +22 -0
- package/src/styles/tokenContract.json +61 -0
- package/workers/analytics-receiver.mjs +170 -0
- package/wrangler.analytics.jsonc +12 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Adoption Dashboard
|
|
2
|
+
|
|
3
|
+
This dashboard tracks whether Base Themes has enough public evidence that users are willing to use it. It is intentionally separate from release readiness: passing builds, tests, package smoke checks, and SEO checks means the project is ready to ship, not that the market has adopted it.
|
|
4
|
+
|
|
5
|
+
## Current Status
|
|
6
|
+
|
|
7
|
+
Latest saved telemetry, campaign, and external-action evidence reports are generated under `research/` when maintainers run the live commands. Those generated execution records are intentionally not required for CI or release-readiness checks.
|
|
8
|
+
|
|
9
|
+
Current public adoption score: **1/4**
|
|
10
|
+
|
|
11
|
+
| Signal | Current | Status |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| npm weekly downloads `>= 100` | `374` | Pass |
|
|
14
|
+
| GitHub stars `>= 10` | `0` | Not yet |
|
|
15
|
+
| External human issue or PR present | `0` | Not yet |
|
|
16
|
+
| At least one fork | `0` | Not yet |
|
|
17
|
+
|
|
18
|
+
Conclusion: the project has package download activity, but does not yet have enough public GitHub or community signal to claim the strategy has succeeded.
|
|
19
|
+
|
|
20
|
+
`npm run launch:actions` can generate a live promotion wave, channel-specific post copy, share assets, and record fields for external post URLs plus T+1, T+7, and T+30 telemetry evidence when maintainers need an execution pack.
|
|
21
|
+
|
|
22
|
+
## Completion Gate
|
|
23
|
+
|
|
24
|
+
Treat the future-development strategy as externally validated only when at least three of the four public signals pass in a telemetry report:
|
|
25
|
+
|
|
26
|
+
- npm weekly downloads are at least `100` and stable or growing.
|
|
27
|
+
- GitHub stars are at least `10`.
|
|
28
|
+
- At least one non-maintainer, non-bot issue or PR exists.
|
|
29
|
+
- At least one fork exists.
|
|
30
|
+
|
|
31
|
+
Supporting private signals can strengthen confidence but should not replace public evidence:
|
|
32
|
+
|
|
33
|
+
- Cloudflare unique visitors and route views.
|
|
34
|
+
- GitHub traffic views, clones, referrers, and popular paths.
|
|
35
|
+
- Install command copies and GitHub outbound clicks.
|
|
36
|
+
- Theme, block, registry, and CLI page depth.
|
|
37
|
+
- Google Search Console impressions, indexed pages, queries, and CTR.
|
|
38
|
+
- Community gallery submissions with permission to feature.
|
|
39
|
+
- Show and tell Discussions, external repos, public project URLs, and permissioned community proof from [community-proof-telemetry.md](./community-proof-telemetry.md).
|
|
40
|
+
|
|
41
|
+
## Measurement Commands
|
|
42
|
+
|
|
43
|
+
Run public telemetry:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm run telemetry:collect
|
|
47
|
+
npm run telemetry:check
|
|
48
|
+
npm run telemetry:check -- --live
|
|
49
|
+
npm run telemetry:fixtures
|
|
50
|
+
npm run launch:status
|
|
51
|
+
npm run launch:status -- --live
|
|
52
|
+
npm run launch:actions
|
|
53
|
+
npm run launch:actions -- --live
|
|
54
|
+
npm run launch:campaign
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Run with GitHub traffic when a token has repository traffic permission:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
GITHUB_TOKEN=... npm run telemetry:collect
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Run with local website/search exports when provider dashboards have data:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
ANALYTICS_EXPORT=path/to/analytics-events.jsonl SEARCH_CONSOLE_EXPORT=path/to/search-console-export.csv npm run telemetry:collect
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Verify import parsing with bundled sanitized fixtures before relying on provider exports:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm run telemetry:fixtures
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Run with registry/agent access logs when CDN or server logs are available:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
REGISTRY_ACCESS_EXPORT=path/to/registry-access.jsonl npm run telemetry:collect
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Run with manually exported community proof when Discussions, gallery submissions, external repos, or project URLs exist:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
COMMUNITY_PROOF_EXPORT=path/to/community-proof.csv npm run telemetry:collect
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Run with bundle performance budgets after building the docs site:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm run build
|
|
91
|
+
npm run bundle:report -- --json > path/to/bundle-report.json
|
|
92
|
+
BUNDLE_REPORT_EXPORT=path/to/bundle-report.json npm run telemetry:collect
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Check release readiness separately:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npm run registry:check
|
|
99
|
+
npm run lint
|
|
100
|
+
npm run test
|
|
101
|
+
npm run build
|
|
102
|
+
npm run seo:check
|
|
103
|
+
npm run bundle:report
|
|
104
|
+
npm run analytics:check
|
|
105
|
+
npm run community:check
|
|
106
|
+
npm run telemetry:check
|
|
107
|
+
npm run telemetry:check -- --live
|
|
108
|
+
npm run telemetry:fixtures
|
|
109
|
+
npm run launch:check
|
|
110
|
+
npm run launch:status
|
|
111
|
+
npm run launch:status -- --live
|
|
112
|
+
npm run launch:actions
|
|
113
|
+
npm run launch:actions -- --live
|
|
114
|
+
npm run launch:campaign
|
|
115
|
+
npm run package:smoke
|
|
116
|
+
npm pack --dry-run
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Evidence Gaps
|
|
120
|
+
|
|
121
|
+
| Gap | Needed Access | Why It Matters |
|
|
122
|
+
| --- | --- | --- |
|
|
123
|
+
| GitHub traffic | `GITHUB_TOKEN` with repository traffic access | Shows views, clones, referrers, and popular content after launch. |
|
|
124
|
+
| Website analytics | Cloudflare or privacy-friendly analytics endpoint from [analytics-setup.md](./analytics-setup.md), optionally imported with `ANALYTICS_EXPORT` | Shows whether SEO/docs/block routes convert to install or GitHub clicks. |
|
|
125
|
+
| Search analytics | Google Search Console and [search-console-setup.md](./search-console-setup.md) | Shows whether theme, component, and Base UI comparison pages are indexed and queried. |
|
|
126
|
+
| Registry usage | CDN/server logs from [registry-access-telemetry.md](./registry-access-telemetry.md), or issue-based reports | Shows whether registry metadata and agent workflows are actually consumed. |
|
|
127
|
+
| Community proof | GitHub gallery issues, Show and tell Discussions, external repos, or [community-proof-telemetry.md](./community-proof-telemetry.md) exports | Shows real usage outside maintainer demos. |
|
|
128
|
+
|
|
129
|
+
## Operating Loop
|
|
130
|
+
|
|
131
|
+
1. Ship only after release-readiness checks pass.
|
|
132
|
+
2. Use [release-announcement-kit.md](./release-announcement-kit.md) to share the release and ask for one concrete action.
|
|
133
|
+
3. Use [search-console-setup.md](./search-console-setup.md) to submit the sitemap, inspect high-intent routes, and monitor search queries after deploy.
|
|
134
|
+
4. Use [registry-access-telemetry.md](./registry-access-telemetry.md) to import registry, `llms.txt`, `llms-full.txt`, CLI, and agent-route access logs when available.
|
|
135
|
+
5. Use [community-proof-telemetry.md](./community-proof-telemetry.md) to import accepted Discussions, gallery submissions, external repos, and public project URLs when available.
|
|
136
|
+
6. Run telemetry at T+0, T+1 day, T+7 days, and T+30 days.
|
|
137
|
+
7. Run `npm run launch:status` after each telemetry pass to summarize the current public score, previous-report signal trend, missing signals, recommended good-first issue URLs, telemetry collection errors, and next action without manually diffing JSON; use `npm run launch:status -- --live` before an external announcement when you want current GitHub/npm data without writing a new report.
|
|
138
|
+
8. Run `npm run launch:actions` while the gate is unmet to get a focused action list, previous-report signal trend, and share assets for the missing star, fork, external issue/PR, or download signals; use `npm run launch:actions -- --live` before promotion to derive that list from current public data, or `npm run launch:campaign` to write the live campaign JSON and Markdown pack to `research/`.
|
|
139
|
+
9. Compare slope instead of only one snapshot.
|
|
140
|
+
10. Prioritize the next product iteration from observed blockers:
|
|
141
|
+
- Low installs: improve README, npm metadata, examples, and install snippets.
|
|
142
|
+
- Low stars/forks: improve positioning, screenshots, and shareable routes.
|
|
143
|
+
- Low issues/PRs: add contribution prompts, good-first issues, and clearer component/theme request templates.
|
|
144
|
+
- Low docs conversion: improve route CTAs, package examples, and CLI doctor guidance.
|
|
145
|
+
- Repeated integration failures: fix package exports, CSS import docs, peer dependencies, or framework examples.
|
|
146
|
+
|
|
147
|
+
## Decision Rule
|
|
148
|
+
|
|
149
|
+
Do not mark the strategy complete while the adoption score is below `3/4`. Continue local adoption-funnel work until all realistic in-repo improvements are exhausted, then publish, promote, measure, and iterate from real user behavior.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Analytics Setup
|
|
2
|
+
|
|
3
|
+
Base Themes uses optional, privacy-light product-funnel events to understand whether the docs site turns visitors into package installs, GitHub visits, theme exploration, block sharing, and registry usage.
|
|
4
|
+
|
|
5
|
+
No analytics request is sent unless `VITE_ANALYTICS_ENDPOINT` is configured at docs build time.
|
|
6
|
+
|
|
7
|
+
## Event Contract
|
|
8
|
+
|
|
9
|
+
The frontend sends this JSON shape:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"name": "install_command_copy",
|
|
14
|
+
"path": "/docs/installation",
|
|
15
|
+
"timestamp": "2026-05-29T00:00:00.000Z",
|
|
16
|
+
"properties": {
|
|
17
|
+
"source": "landing"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Allowed event names:
|
|
23
|
+
|
|
24
|
+
- `route_view`
|
|
25
|
+
- `internal_navigation`
|
|
26
|
+
- `install_command_copy`
|
|
27
|
+
- `github_outbound_click`
|
|
28
|
+
- `theme_style_cycle`
|
|
29
|
+
- `theme_style_select`
|
|
30
|
+
- `theme_snippet_copy`
|
|
31
|
+
- `color_theme_toggle`
|
|
32
|
+
- `block_share_copy`
|
|
33
|
+
|
|
34
|
+
Allowed properties:
|
|
35
|
+
|
|
36
|
+
- `block`
|
|
37
|
+
- `campaign`
|
|
38
|
+
- `component`
|
|
39
|
+
- `content`
|
|
40
|
+
- `detail`
|
|
41
|
+
- `from`
|
|
42
|
+
- `label`
|
|
43
|
+
- `medium`
|
|
44
|
+
- `path`
|
|
45
|
+
- `source`
|
|
46
|
+
- `target`
|
|
47
|
+
- `themeStyle`
|
|
48
|
+
- `to`
|
|
49
|
+
|
|
50
|
+
Do not add personal identifiers, user IDs, emails, IP-derived identifiers, full user agents, or free-form text fields to analytics payloads.
|
|
51
|
+
|
|
52
|
+
## Receiver
|
|
53
|
+
|
|
54
|
+
The optional receiver lives at [workers/analytics-receiver.mjs](../workers/analytics-receiver.mjs). It:
|
|
55
|
+
|
|
56
|
+
- accepts only `POST` JSON requests and CORS preflight `OPTIONS` requests;
|
|
57
|
+
- accepts only configured origins through `ALLOWED_ORIGINS`;
|
|
58
|
+
- rejects unknown event names;
|
|
59
|
+
- keeps only whitelisted primitive properties;
|
|
60
|
+
- logs one sanitized JSON event per accepted request;
|
|
61
|
+
- optionally writes to a Cloudflare Queue binding named `ANALYTICS_QUEUE`;
|
|
62
|
+
- optionally writes a basic Cloudflare Analytics Engine data point through `BASE_THEMES_ANALYTICS`.
|
|
63
|
+
|
|
64
|
+
Validate the receiver locally:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm run analytics:check
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Cloudflare Deployment Model
|
|
71
|
+
|
|
72
|
+
The receiver can be deployed as a separate Worker from the docs site. Keeping it separate avoids changing the static assets deployment path and lets analytics be disabled without affecting docs availability.
|
|
73
|
+
|
|
74
|
+
Worker config lives at [wrangler.analytics.jsonc](../wrangler.analytics.jsonc):
|
|
75
|
+
|
|
76
|
+
```jsonc
|
|
77
|
+
{
|
|
78
|
+
"$schema": "node_modules/wrangler/config-schema.json",
|
|
79
|
+
"name": "base-themes-analytics",
|
|
80
|
+
"main": "workers/analytics-receiver.mjs",
|
|
81
|
+
"compatibility_date": "2026-05-29",
|
|
82
|
+
"observability": {
|
|
83
|
+
"enabled": true
|
|
84
|
+
},
|
|
85
|
+
"vars": {
|
|
86
|
+
"ALLOWED_ORIGINS": "https://base-themes.bangwu.me,http://localhost:5175,http://localhost:5176"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Update `ALLOWED_ORIGINS` before deploying preview environments or a custom docs domain. Use a comma-separated list of exact origins.
|
|
92
|
+
|
|
93
|
+
Deploy the receiver:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npx wrangler deploy --config wrangler.analytics.jsonc
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Build the docs site with the endpoint:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
VITE_ANALYTICS_ENDPOINT=https://base-themes-analytics.<account>.workers.dev npm run build:docs
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Then deploy the docs site normally:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npm run deploy
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Launch Metrics
|
|
112
|
+
|
|
113
|
+
After a release announcement, compare these event counts with public telemetry:
|
|
114
|
+
|
|
115
|
+
| Event | Funnel Question |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
| `route_view` | Which docs, theme, block, and CLI routes did visitors actually open? |
|
|
118
|
+
| `install_command_copy` | Did visitors reach install intent? |
|
|
119
|
+
| `github_outbound_click` | Did visitors move from docs to GitHub stars, forks, Show and tell Discussions, feature issues, bug reports, or gallery submissions? Check `source` and `target` values such as `repo-star`, `repo-fork`, `show-and-tell`, `feature-request`, and `gallery-submission`. |
|
|
120
|
+
| `theme_style_select` | Which visual systems attracted exploration? |
|
|
121
|
+
| `theme_snippet_copy` | Which theme package or CSS snippets were useful enough to copy? Check `detail`, `label`, and `themeStyle` when present. |
|
|
122
|
+
| `block_share_copy` | Which blocks were compelling enough to share? |
|
|
123
|
+
| `internal_navigation` | Did visitors move from landing pages into docs, themes, blocks, or registry pages? |
|
|
124
|
+
|
|
125
|
+
Use these results alongside `npm run telemetry:collect`. Website events are supporting evidence; public adoption still requires npm/GitHub/community signals.
|
|
126
|
+
|
|
127
|
+
To include exported Worker logs or sanitized event rows in the telemetry report, write one JSON event per line or export a CSV/JSON file with `name`, `path`, `timestamp`, and optional `properties`, then run:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
ANALYTICS_EXPORT=path/to/analytics-events.jsonl npm run telemetry:collect
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The bundled fixture at `research/telemetry-fixtures/analytics-events.jsonl` is checked by:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm run telemetry:fixtures
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The telemetry importer summarizes total events, route views, install command copies, GitHub outbound clicks, block shares, theme snippet copies, theme selections, top routes, top GitHub click targets, and top launch attribution values. Keep exports sanitized: do not include IP addresses, user agents, cookies, emails, request headers, or free-form user text.
|
|
140
|
+
|
|
141
|
+
Launch attribution uses the standard `utm_campaign`, `utm_source`, `utm_medium`, and `utm_content` query parameters. The docs app attaches those values to every funnel event as `campaign`, `source`, `medium`, and `content`; `npm run telemetry:collect` summarizes top campaigns, sources, mediums, GitHub-click sources, install-copy sources, and campaign/source conversion funnels when `ANALYTICS_EXPORT` is provided.
|
|
142
|
+
|
|
143
|
+
## Privacy Notes
|
|
144
|
+
|
|
145
|
+
The receiver intentionally does not set cookies, does not assign visitor IDs, and does not store request headers. Cloudflare platform logs may still include operational metadata depending on account settings, so keep published privacy language conservative and accurate.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Community Gallery Proposal
|
|
2
|
+
|
|
3
|
+
Base Themes should treat a community gallery as a discovery and trust surface, not as a paid marketplace until adoption data supports that move.
|
|
4
|
+
|
|
5
|
+
## Goals
|
|
6
|
+
|
|
7
|
+
- Show real applications, copied blocks, and theme customizations built with `base-themes`.
|
|
8
|
+
- Give contributors a lightweight path to share themes, block variants, and integration examples.
|
|
9
|
+
- Create public evidence that the package is useful outside the maintainer's own docs site.
|
|
10
|
+
|
|
11
|
+
## Initial Submission Model
|
|
12
|
+
|
|
13
|
+
Start with GitHub issues instead of a custom backend. Add a `gallery-submission` label and ask contributors for:
|
|
14
|
+
|
|
15
|
+
- Project or screenshot title.
|
|
16
|
+
- Public URL or repository link.
|
|
17
|
+
- Base Themes version.
|
|
18
|
+
- Theme style and custom CSS variables used.
|
|
19
|
+
- Components or blocks used.
|
|
20
|
+
- One 1280x720 screenshot.
|
|
21
|
+
- Permission to feature the submission in the docs site and README.
|
|
22
|
+
|
|
23
|
+
Use GitHub Discussions for lighter-weight show-and-tell before a submission is ready for gallery consideration. The versioned template at [.github/DISCUSSION_TEMPLATE/show-and-tell.yml](../.github/DISCUSSION_TEMPLATE/show-and-tell.yml) asks for the project name, URL or repository, selected theme style, components or blocks used, what worked, and what was missing. A discussion can become a gallery issue only when the user explicitly grants permission through the gallery submission template.
|
|
24
|
+
|
|
25
|
+
## Acceptance Criteria
|
|
26
|
+
|
|
27
|
+
- The screenshot must show an actual UI built with Base Themes components, blocks, or theme tokens.
|
|
28
|
+
- The submission must include enough implementation detail for another user to reproduce the setup.
|
|
29
|
+
- The UI must not imply official endorsement of a third-party product.
|
|
30
|
+
- The project must be suitable for an open-source documentation site.
|
|
31
|
+
|
|
32
|
+
## Gallery Data Shape
|
|
33
|
+
|
|
34
|
+
When there are at least five accepted submissions, move accepted entries into `src/docs/communityGallery.json`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
[
|
|
38
|
+
{
|
|
39
|
+
"title": "Ops Dashboard Theme",
|
|
40
|
+
"url": "https://example.com",
|
|
41
|
+
"repo": "https://github.com/example/base-themes-dashboard",
|
|
42
|
+
"screenshot": "/community/ops-dashboard.png",
|
|
43
|
+
"style": "enterprise",
|
|
44
|
+
"components": ["button", "select", "tabs"],
|
|
45
|
+
"blocks": ["dashboard-shell", "data-table"]
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Rollout
|
|
51
|
+
|
|
52
|
+
1. Add the `type: gallery` and `community` labels from [.github/labels.json](../.github/labels.json), then link this proposal from README contribution notes.
|
|
53
|
+
2. Enable GitHub Discussions with a `Show and tell` category, then use the discussion template for early feedback and screenshots that are not yet permissioned gallery entries.
|
|
54
|
+
3. Collect submissions manually through issues until there is enough volume to justify a docs route.
|
|
55
|
+
4. Add `/community` only after accepted entries exist, so the page launches with real proof instead of placeholders.
|
|
56
|
+
5. Track outbound project clicks, discussion clicks, and gallery submission clicks through the existing optional analytics hook.
|
|
57
|
+
|
|
58
|
+
Run `npm run community:check` after editing the gallery issue template, show-and-tell discussion template, label manifest, or this proposal. The check verifies that gallery labels exist, that the submission template keeps explicit permission-to-feature language, and that the discussion template asks for adoption feedback instead of generic promotion.
|
|
59
|
+
|
|
60
|
+
## Success Signals
|
|
61
|
+
|
|
62
|
+
- At least five valid external submissions.
|
|
63
|
+
- Gallery entries drive docs sessions to install, registry, or GitHub outbound clicks.
|
|
64
|
+
- Submissions reveal repeated requests for a block, theme style, or integration guide.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Community Proof Telemetry
|
|
2
|
+
|
|
3
|
+
Community proof is supporting evidence for adoption. It does not replace the public completion gate in [adoption-dashboard.md](./adoption-dashboard.md), but it helps explain whether users are moving from docs into Show and tell Discussions, gallery submissions, forks, issues, PRs, and real project usage.
|
|
4
|
+
|
|
5
|
+
## Export Format
|
|
6
|
+
|
|
7
|
+
Create a CSV, JSON array, or JSONL file with one row per accepted signal. Supported fields:
|
|
8
|
+
|
|
9
|
+
| Field | Description |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `type` | `discussion`, `gallery`, `repo`, `url`, `issue`, or `pr`. Aliases such as `show-and-tell`, `gallery-submission`, `repository`, and `pull-request` are normalized. |
|
|
12
|
+
| `title` | Project, discussion, issue, PR, or submission title. |
|
|
13
|
+
| `url` | Public GitHub Discussion, issue, PR, repository, project, or screenshot URL. |
|
|
14
|
+
| `author` | GitHub login or public author name when available. |
|
|
15
|
+
| `style` | Base Themes `data-style`, such as `enterprise`, `bento`, or `terminal`. |
|
|
16
|
+
| `permissionToFeature` | `true` / `false`; only permissioned submissions should become README or docs gallery entries. |
|
|
17
|
+
| `timestamp` | Optional ISO date or export date. |
|
|
18
|
+
|
|
19
|
+
Example CSV:
|
|
20
|
+
|
|
21
|
+
```csv
|
|
22
|
+
type,title,url,author,style,permissionToFeature,timestamp
|
|
23
|
+
discussion,Enterprise dashboard feedback,https://github.com/markbang/base-themes/discussions/12,octo-user,enterprise,false,2026-06-01
|
|
24
|
+
gallery,Internal tools screenshot,https://github.com/markbang/base-themes/issues/18,acme-dev,data-dense,true,2026-06-02
|
|
25
|
+
repo,Base Themes starter,https://github.com/example/base-themes-starter,example,bento,false,2026-06-03
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Run:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
COMMUNITY_PROOF_EXPORT=path/to/community-proof.csv npm run telemetry:collect
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Validate the importer with the bundled sanitized fixture:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run telemetry:fixtures
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The checked fixture lives at `research/telemetry-fixtures/community-proof.csv` and covers a Discussion, gallery submission, external repo, and external project URL.
|
|
41
|
+
|
|
42
|
+
## Interpretation
|
|
43
|
+
|
|
44
|
+
- Discussions are early qualitative feedback; use them to prioritize docs, missing components, and source-copy friction.
|
|
45
|
+
- Permissioned gallery submissions are stronger proof than generic screenshots because they can become public README/docs evidence.
|
|
46
|
+
- External repos and project URLs help identify real integration patterns even when users do not open issues.
|
|
47
|
+
- Community proof can support confidence, but the strategy is externally validated only when the public gate reaches at least `3/4`.
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Contributor Issue Seeds
|
|
2
|
+
|
|
3
|
+
Use these issue seeds to create a small public backlog for first-time contributors. They are intentionally scoped to adoption-funnel work: each issue should help a new user install, understand, customize, verify, or share Base Themes.
|
|
4
|
+
|
|
5
|
+
Apply labels from the project vocabulary where possible:
|
|
6
|
+
|
|
7
|
+
- `type: docs`, `type: feature`, `type: component`, `type: theme`, `type: block`, `type: registry`, `type: accessibility`
|
|
8
|
+
- `area: docs`, `area: website`, `area: components`, `area: tokens`, `area: examples`, `area: ci`
|
|
9
|
+
- `type: good first issue`, `type: help wanted`
|
|
10
|
+
- `priority: low`, `priority: medium`
|
|
11
|
+
|
|
12
|
+
The label vocabulary is versioned in [.github/labels.json](../.github/labels.json). Run `npm run community:check` after changing this file, issue templates, or the label manifest so seed issues stay publishable without label drift.
|
|
13
|
+
|
|
14
|
+
Render prefilled issue URLs before a release announcement:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm run community:issues
|
|
18
|
+
npm run community:issues -- --json
|
|
19
|
+
npm run community:issues -- --gh
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`community:issues` does not publish anything by itself. It turns the seed issues below into prefilled GitHub URLs, JSON for release tooling, or `gh issue create` commands for maintainers with GitHub CLI access.
|
|
23
|
+
|
|
24
|
+
## Seed 1: Add a Focused Button Accessibility Example
|
|
25
|
+
|
|
26
|
+
Title:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
[Docs]: Add a Button accessibility example for loading and disabled states
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Labels:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
type: docs, type: accessibility, area: components, type: good first issue
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Body:
|
|
39
|
+
|
|
40
|
+
```md
|
|
41
|
+
## Problem
|
|
42
|
+
|
|
43
|
+
New users can render `Button`, but the docs should show how to handle common accessible states such as `disabled`, pending actions, and icon-only labels.
|
|
44
|
+
|
|
45
|
+
## Scope
|
|
46
|
+
|
|
47
|
+
- Add one concise Button example to the component docs.
|
|
48
|
+
- Include disabled and loading/pending usage.
|
|
49
|
+
- Include an icon-only button with an accessible label if the existing Button API supports it.
|
|
50
|
+
- Keep the example copy-pasteable.
|
|
51
|
+
|
|
52
|
+
## Acceptance Criteria
|
|
53
|
+
|
|
54
|
+
- The docs route still builds.
|
|
55
|
+
- The example uses public `base-themes` exports only.
|
|
56
|
+
- `npm run lint` and `npm run build` pass.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Seed 2: Add a Theme Token Customization Recipe
|
|
60
|
+
|
|
61
|
+
Title:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
[Docs]: Add a copy-paste theme token customization recipe
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Labels:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
type: docs, type: theme, area: tokens, type: good first issue
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Body:
|
|
74
|
+
|
|
75
|
+
```md
|
|
76
|
+
## Problem
|
|
77
|
+
|
|
78
|
+
Users can switch `data-style`, but they need a short recipe for overriding a few CSS variables without forking the whole theme.
|
|
79
|
+
|
|
80
|
+
## Scope
|
|
81
|
+
|
|
82
|
+
- Add a docs example that customizes primary color, radius, and surface tokens.
|
|
83
|
+
- Explain where the CSS should live in a Vite or Next app.
|
|
84
|
+
- Link the recipe from the theming or theme customization docs route.
|
|
85
|
+
|
|
86
|
+
## Acceptance Criteria
|
|
87
|
+
|
|
88
|
+
- The recipe is copy-pasteable.
|
|
89
|
+
- It preserves the `data-style` / `data-theme` contract.
|
|
90
|
+
- `npm run lint`, `npm run build`, and `npm run seo:check` pass.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Seed 3: Add a Vite Install Troubleshooting Note
|
|
94
|
+
|
|
95
|
+
Title:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
[Docs]: Add Vite troubleshooting for CSS imports and peer dependencies
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Labels:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
type: docs, area: examples, type: good first issue
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Body:
|
|
108
|
+
|
|
109
|
+
```md
|
|
110
|
+
## Problem
|
|
111
|
+
|
|
112
|
+
Fresh Vite users may miss the required `base-themes/styles.css` side-effect import or install mismatched React/Base UI peer dependencies.
|
|
113
|
+
|
|
114
|
+
## Scope
|
|
115
|
+
|
|
116
|
+
- Add a short troubleshooting section to the Vite example README or installation docs.
|
|
117
|
+
- Cover missing styles, TypeScript CSS module declarations, and peer dependency versions.
|
|
118
|
+
- Keep commands current with the package README.
|
|
119
|
+
|
|
120
|
+
## Acceptance Criteria
|
|
121
|
+
|
|
122
|
+
- `examples/vite` still builds.
|
|
123
|
+
- The docs do not duplicate large README sections.
|
|
124
|
+
- `npm run example:vite:build` passes.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Seed 4: Add a Registry Plan Example for a Real Screen
|
|
128
|
+
|
|
129
|
+
Title:
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
[Registry]: Document a source-copy plan for a dashboard screen
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Labels:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
type: registry, area: docs, type: good first issue
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Body:
|
|
142
|
+
|
|
143
|
+
```md
|
|
144
|
+
## Problem
|
|
145
|
+
|
|
146
|
+
The CLI can generate a registry plan, but users need a concrete example that maps a product screen to components, blocks, files, and dependencies.
|
|
147
|
+
|
|
148
|
+
## Scope
|
|
149
|
+
|
|
150
|
+
- Add one docs snippet that runs `npx base-themes plan button select tabs block:dashboard-shell theme:enterprise --json`.
|
|
151
|
+
- Explain what the plan output means for copy-based workflows.
|
|
152
|
+
- Link to the dashboard block route and CLI docs.
|
|
153
|
+
|
|
154
|
+
## Acceptance Criteria
|
|
155
|
+
|
|
156
|
+
- The command works against the current registry.
|
|
157
|
+
- `npm run example:registry-copy -- plan button select tabs block:dashboard-shell theme:enterprise --json` passes.
|
|
158
|
+
- `npm run registry:check` passes.
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Seed 5: Add a Small Block Variant
|
|
162
|
+
|
|
163
|
+
Title:
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
[Block]: Add a compact metrics strip block
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Labels:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
type: block, area: components, type: help wanted, priority: medium
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Body:
|
|
176
|
+
|
|
177
|
+
```md
|
|
178
|
+
## Problem
|
|
179
|
+
|
|
180
|
+
Dashboards often need a compact metrics strip. A small block variant gives users another realistic starting point without adding a full template.
|
|
181
|
+
|
|
182
|
+
## Scope
|
|
183
|
+
|
|
184
|
+
- Build a responsive metrics strip from existing Base Themes components and CSS tokens.
|
|
185
|
+
- Add the block source under `src/blocks`.
|
|
186
|
+
- Add a registry entry with files and dependencies.
|
|
187
|
+
- Add a docs preview or include it in the blocks route.
|
|
188
|
+
|
|
189
|
+
## Acceptance Criteria
|
|
190
|
+
|
|
191
|
+
- The block works in light and dark mode.
|
|
192
|
+
- The block is keyboard-safe and does not depend on private docs-only APIs.
|
|
193
|
+
- `npm run registry:check`, `npm run lint`, and `npm run build` pass.
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Seed 6: Improve Community Gallery Submission Guidance
|
|
197
|
+
|
|
198
|
+
Title:
|
|
199
|
+
|
|
200
|
+
```text
|
|
201
|
+
[Docs]: Add a minimal community gallery submission example
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Labels:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
type: docs, area: website, type: good first issue
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Body:
|
|
211
|
+
|
|
212
|
+
```md
|
|
213
|
+
## Problem
|
|
214
|
+
|
|
215
|
+
The gallery issue template exists, but users may not know what a useful submission looks like.
|
|
216
|
+
|
|
217
|
+
## Scope
|
|
218
|
+
|
|
219
|
+
- Add one example submission to `docs/community-gallery-proposal.md`.
|
|
220
|
+
- Show title, screenshot expectations, version, `data-style`, components, blocks, and permission language.
|
|
221
|
+
- Keep it generic and do not invent a real user/project.
|
|
222
|
+
|
|
223
|
+
## Acceptance Criteria
|
|
224
|
+
|
|
225
|
+
- The example helps users submit real projects without adding fake gallery entries.
|
|
226
|
+
- The docs continue to state that the gallery should launch only after enough external usage exists.
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Publishing Notes
|
|
230
|
+
|
|
231
|
+
Create two or three of these issues before a release announcement. Do not flood the tracker. The goal is to give interested users a clear next action after they star, fork, or try the package.
|
|
232
|
+
|
|
233
|
+
After publishing seed issues, link the best ones from announcement replies, GitHub Discussions, or the release notes when someone asks how to help.
|
|
234
|
+
|
|
235
|
+
Suggested release sequence:
|
|
236
|
+
|
|
237
|
+
1. Run `npm run community:issues` and open two or three prefilled URLs.
|
|
238
|
+
2. Add `type: good first issue` or `type: help wanted` labels exactly as rendered.
|
|
239
|
+
3. Link the published issues from the GitHub release and launch posts.
|
|
240
|
+
4. Keep the remaining seeds unpublished until there is real contributor interest or repeated user feedback.
|