@tangle-network/starter-foundry 0.1.0 → 0.2.0

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.
Files changed (68) hide show
  1. package/dist/lib/compose.js +2 -0
  2. package/dist/lib/compose.js.map +1 -1
  3. package/dist/lib/index.d.ts +3 -1
  4. package/dist/lib/index.js +2 -1
  5. package/dist/lib/index.js.map +1 -1
  6. package/dist/lib/industries.d.ts +33 -0
  7. package/dist/lib/industries.js +52 -0
  8. package/dist/lib/industries.js.map +1 -0
  9. package/dist/lib/keywords.d.ts +6 -0
  10. package/dist/lib/keywords.js +21 -0
  11. package/dist/lib/keywords.js.map +1 -1
  12. package/dist/lib/prompt-planner.js +5 -1
  13. package/dist/lib/prompt-planner.js.map +1 -1
  14. package/dist/lib/telemetry.d.ts +1 -0
  15. package/dist/lib/telemetry.js.map +1 -1
  16. package/package.json +1 -1
  17. package/registry/layers/capability/layout-landing/files/features-section.tsx +54 -77
  18. package/registry/layers/capability/layout-landing/files/hero-section.tsx +18 -23
  19. package/registry/layers/capability/layout-landing/files/landing-page.tsx +25 -63
  20. package/registry/layers/capability/layout-landing/files/personalize.json +146 -0
  21. package/registry/layers/capability/layout-landing/files/pricing-section.tsx +45 -94
  22. package/registry/layers/capability/layout-landing/manifest.json +4 -0
  23. package/registry/layers/capability/layout-landing/variants/dark-product/features-section.tsx +55 -59
  24. package/registry/layers/capability/layout-landing/variants/dark-product/hero-section.tsx +83 -55
  25. package/registry/layers/capability/layout-landing/variants/dark-product/landing-page.tsx +25 -63
  26. package/registry/layers/capability/layout-landing/variants/dark-product/personalize.json +53 -0
  27. package/registry/layers/capability/layout-landing/variants/dark-product/pricing-section.tsx +51 -91
  28. package/registry/layers/capability/layout-landing/variants/default/features-section.tsx +54 -77
  29. package/registry/layers/capability/layout-landing/variants/default/hero-section.tsx +18 -23
  30. package/registry/layers/capability/layout-landing/variants/default/landing-page.tsx +25 -63
  31. package/registry/layers/capability/layout-landing/variants/default/personalize.json +146 -0
  32. package/registry/layers/capability/layout-landing/variants/default/pricing-section.tsx +45 -94
  33. package/registry/layers/capability/layout-landing/variants/gradient-hero/features-section.tsx +53 -57
  34. package/registry/layers/capability/layout-landing/variants/gradient-hero/hero-section.tsx +86 -53
  35. package/registry/layers/capability/layout-landing/variants/gradient-hero/landing-page.tsx +25 -63
  36. package/registry/layers/capability/layout-landing/variants/gradient-hero/personalize.json +53 -0
  37. package/registry/layers/capability/layout-landing/variants/gradient-hero/pricing-section.tsx +49 -88
  38. package/registry/layers/capability/layout-landing/variants/minimal-clean/features-section.tsx +53 -51
  39. package/registry/layers/capability/layout-landing/variants/minimal-clean/hero-section.tsx +88 -47
  40. package/registry/layers/capability/layout-landing/variants/minimal-clean/landing-page.tsx +25 -63
  41. package/registry/layers/capability/layout-landing/variants/minimal-clean/personalize.json +53 -0
  42. package/registry/layers/capability/layout-landing/variants/minimal-clean/pricing-section.tsx +51 -87
  43. package/registry/layers/framework/nextjs-app-router/files/layout.tsx +1 -0
  44. package/registry/layers/framework/nextjs-app-router/files/personalize.css +1 -0
  45. package/registry/layers/framework/nextjs-app-router/manifest.json +4 -0
  46. package/registry/layers/framework/react-vite-ts/files/main.ts +1 -0
  47. package/registry/layers/framework/react-vite-ts/files/personalize.css +1 -0
  48. package/registry/layers/framework/react-vite-ts/manifest.json +4 -0
  49. package/registry/layers/industry/creative/files/personalize.css +11 -0
  50. package/registry/layers/industry/creative/manifest.json +39 -0
  51. package/registry/layers/industry/crypto/files/personalize.css +11 -0
  52. package/registry/layers/industry/crypto/manifest.json +41 -0
  53. package/registry/layers/industry/ecommerce/files/personalize.css +11 -0
  54. package/registry/layers/industry/ecommerce/manifest.json +39 -0
  55. package/registry/layers/industry/education/files/personalize.css +11 -0
  56. package/registry/layers/industry/education/manifest.json +39 -0
  57. package/registry/layers/industry/finance/files/personalize.css +11 -0
  58. package/registry/layers/industry/finance/manifest.json +39 -0
  59. package/registry/layers/industry/fitness/files/personalize.css +11 -0
  60. package/registry/layers/industry/fitness/manifest.json +43 -0
  61. package/registry/layers/industry/gaming/files/personalize.css +11 -0
  62. package/registry/layers/industry/gaming/manifest.json +39 -0
  63. package/registry/layers/industry/health/files/personalize.css +11 -0
  64. package/registry/layers/industry/health/manifest.json +39 -0
  65. package/registry/layers/industry/restaurant/files/personalize.css +11 -0
  66. package/registry/layers/industry/restaurant/manifest.json +41 -0
  67. package/registry/layers/industry/saas/files/personalize.css +11 -0
  68. package/registry/layers/industry/saas/manifest.json +39 -0
@@ -0,0 +1,53 @@
1
+ {
2
+ "_meta": { "variant": "minimal-clean", "doc": "Minimal whitespace variant" },
3
+ "brand": { "name": "Linear", "tagline": "The system for product teams" },
4
+ "hero": {
5
+ "badge": "ESSAYS BY THE TEAM",
6
+ "headline": "Less, but better.",
7
+ "subheadline": "A minimal, opinionated framework that gets out of your way so you can focus on the work.",
8
+ "ctaPrimary": "Get Started",
9
+ "ctaSecondary": "Read the Manifesto"
10
+ },
11
+ "trust": {
12
+ "label": "Used by 10,000+ thoughtful teams",
13
+ "logoNames": ["Ramp", "Vercel", "Linear", "Notion", "Stripe", "Figma"]
14
+ },
15
+ "features": {
16
+ "eyebrow": "Principles",
17
+ "headline": "Built on clear principles",
18
+ "subheadline": "Each decision considered. Every detail intentional.",
19
+ "primary": [
20
+ { "icon": "Minimize", "title": "Restraint", "description": "We say no to features that don't earn their place. Less surface, more depth." },
21
+ { "icon": "Focus", "title": "Focus", "description": "One thing at a time. The interface fades away so the work stays in front." },
22
+ { "icon": "Compass", "title": "Direction", "description": "Strong opinions about what good looks like, so you don't have to decide everything." }
23
+ ],
24
+ "secondary": [
25
+ { "icon": "Type", "title": "Typography", "description": "Set with care, leading and tracking refined for reading." },
26
+ { "icon": "Square", "title": "Geometry", "description": "Spacing follows a strict 4px grid throughout." },
27
+ { "icon": "Eye", "title": "Contrast", "description": "AAA-compliant color pairs across light and dark." }
28
+ ]
29
+ },
30
+ "pricing": {
31
+ "eyebrow": "Pricing",
32
+ "headline": "Honest pricing",
33
+ "subheadline": "No tiers we don't believe in. No tricks.",
34
+ "toggleMonthly": "Monthly",
35
+ "toggleYearly": "Yearly",
36
+ "yearlyDiscount": "Save 20%",
37
+ "tiers": [
38
+ { "name": "Free", "price": "$0", "period": "/mo", "description": "For thinking through ideas", "features": ["Unlimited drafts", "Markdown export", "Local-first"], "cta": "Get started", "highlighted": false, "note": "No account required" },
39
+ { "name": "Pro", "price": "$8", "period": "/mo", "description": "For people who care", "features": ["Sync across devices", "Themes and fonts", "Custom shortcuts", "Vim mode", "Priority support"], "cta": "Try Pro free", "highlighted": true },
40
+ { "name": "Team", "price": "$18", "period": "/seat/mo", "description": "For small teams", "features": ["Everything in Pro", "Shared workspaces", "Role-based access", "Audit log", "SAML SSO"], "cta": "Start team trial", "highlighted": false }
41
+ ]
42
+ },
43
+ "footer": {
44
+ "tagline": "Crafted with care in California.",
45
+ "sections": {
46
+ "Product": [{ "label": "Features", "href": "#features" }, { "label": "Pricing", "href": "#pricing" }, { "label": "Download", "href": "/download" }, { "label": "Changelog", "href": "/changelog" }],
47
+ "Company": [{ "label": "Manifesto", "href": "/manifesto" }, { "label": "Essays", "href": "/essays" }, { "label": "About", "href": "/about" }, { "label": "Contact", "href": "/contact" }],
48
+ "Resources": [{ "label": "Documentation", "href": "/docs" }, { "label": "Shortcuts", "href": "/shortcuts" }, { "label": "Themes", "href": "/themes" }, { "label": "Community", "href": "/community" }],
49
+ "Legal": [{ "label": "Privacy", "href": "/privacy" }, { "label": "Terms", "href": "/terms" }]
50
+ },
51
+ "copyright": "© 2026 Linear."
52
+ }
53
+ }
@@ -4,134 +4,100 @@ import * as React from 'react'
4
4
  import { Button } from '@/components/ui/button'
5
5
  import { Check } from 'lucide-react'
6
6
  import { cn } from '@/lib/utils'
7
-
8
- const tiers = [
9
- {
10
- name: 'Free',
11
- price: { monthly: '$0', yearly: '$0' },
12
- description: 'For side projects and experimentation.',
13
- features: [
14
- 'Up to 3 projects',
15
- '1 GB storage',
16
- 'Community support',
17
- 'Basic analytics',
18
- ],
19
- cta: 'Get Started',
20
- highlighted: false,
21
- },
22
- {
23
- name: 'Pro',
24
- price: { monthly: '$29', yearly: '$24' },
25
- description: 'For growing teams that need more power.',
26
- features: [
27
- 'Unlimited projects',
28
- '100 GB storage',
29
- 'Priority support',
30
- 'Advanced analytics',
31
- 'Custom domains',
32
- 'Team roles',
33
- ],
34
- cta: 'Start Free Trial',
35
- highlighted: true,
36
- },
37
- {
38
- name: 'Enterprise',
39
- price: { monthly: 'Custom', yearly: 'Custom' },
40
- description: 'For organizations with advanced needs.',
41
- features: [
42
- 'Everything in Pro',
43
- 'Unlimited storage',
44
- 'Dedicated support engineer',
45
- 'SSO / SAML',
46
- 'SLA guarantees',
47
- 'Audit logs',
48
- ],
49
- cta: 'Contact Sales',
50
- highlighted: false,
51
- },
52
- ]
7
+ import personalize from '@/personalize.json'
53
8
 
54
9
  export function PricingSection() {
55
10
  const [yearly, setYearly] = React.useState(false)
11
+ const { pricing } = personalize
56
12
 
57
13
  return (
58
- <section className="py-24 sm:py-32">
14
+ <section id="pricing" className="relative bg-background py-24 sm:py-32">
59
15
  <div className="mx-auto max-w-6xl px-6 lg:px-8">
60
16
  <div className="mx-auto max-w-2xl text-center">
61
- <h2 className="text-3xl font-light tracking-tight text-foreground sm:text-4xl">
62
- Simple, transparent pricing
17
+ <p className="text-sm font-semibold uppercase tracking-wider text-primary">
18
+ {pricing.eyebrow}
19
+ </p>
20
+ <h2 className="mt-3 text-4xl font-bold tracking-tight text-foreground sm:text-5xl">
21
+ {pricing.headline}
63
22
  </h2>
64
- <p className="mt-4 text-lg font-light leading-relaxed text-muted-foreground">
65
- Choose your plan. Start free, upgrade when you are ready.
23
+ <p className="mt-6 text-lg leading-relaxed text-muted-foreground">
24
+ {pricing.subheadline}
66
25
  </p>
26
+ </div>
67
27
 
68
- <div className="mt-8 inline-flex items-center gap-3 text-sm">
28
+ <div className="mt-12 flex justify-center">
29
+ <div className="inline-flex items-center rounded-full border border-border/50 bg-muted/50 p-1 shadow-sm">
69
30
  <button
70
31
  type="button"
71
32
  onClick={() => setYearly(false)}
72
33
  className={cn(
73
- 'pb-1 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',
74
- !yearly ? 'border-b-2 border-foreground text-foreground' : 'text-muted-foreground hover:text-foreground'
34
+ 'rounded-full px-5 py-2 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',
35
+ !yearly ? 'bg-primary text-primary-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',
75
36
  )}
76
37
  >
77
- Monthly
38
+ {pricing.toggleMonthly}
78
39
  </button>
79
- <span className="text-muted-foreground/40">/</span>
80
40
  <button
81
41
  type="button"
82
42
  onClick={() => setYearly(true)}
83
43
  className={cn(
84
- 'inline-flex items-center gap-2 pb-1 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',
85
- yearly ? 'border-b-2 border-foreground text-foreground' : 'text-muted-foreground hover:text-foreground'
44
+ 'inline-flex items-center gap-2 rounded-full px-5 py-2 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',
45
+ yearly ? 'bg-primary text-primary-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',
86
46
  )}
87
47
  >
88
- Yearly
89
- {!yearly && <span className="text-xs font-medium text-primary">Save 20%</span>}
48
+ {pricing.toggleYearly}
49
+ {!yearly && (
50
+ <span className="rounded-full bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary">
51
+ {pricing.yearlyDiscount}
52
+ </span>
53
+ )}
90
54
  </button>
91
55
  </div>
92
56
  </div>
93
57
 
94
- <div className="mx-auto mt-16 grid max-w-5xl gap-8 lg:grid-cols-3">
95
- {tiers.map((tier) => (
58
+ <div className="mt-16 grid gap-8 lg:grid-cols-3 lg:gap-6">
59
+ {pricing.tiers.map((tier) => (
96
60
  <div
97
61
  key={tier.name}
98
62
  className={cn(
99
- 'flex flex-col rounded-lg p-8',
63
+ 'relative rounded-2xl bg-card p-8 transition-all',
100
64
  tier.highlighted
101
- ? 'relative bg-muted/40 ring-1 ring-border dark:bg-muted/15'
102
- : 'bg-transparent'
65
+ ? 'border-2 border-primary bg-gradient-to-b from-primary/5 to-transparent shadow-2xl shadow-primary/10 ring-1 ring-primary/20 lg:scale-105'
66
+ : 'border border-border/50 shadow-sm hover:shadow-md',
103
67
  )}
104
68
  >
105
69
  {tier.highlighted && (
106
- <div className="absolute -top-4 left-1/2 -translate-x-1/2 rounded-full bg-foreground px-4 py-1 text-xs font-medium text-background">
107
- Most Popular
70
+ <div className="absolute -top-4 left-1/2 -translate-x-1/2">
71
+ <span className="rounded-full bg-primary px-4 py-1 text-xs font-semibold uppercase tracking-wider text-primary-foreground shadow-md">
72
+ Most Popular
73
+ </span>
108
74
  </div>
109
75
  )}
110
76
 
111
77
  <div className="space-y-8">
112
78
  <div>
113
- <h3 className="text-sm font-medium text-foreground">{tier.name}</h3>
114
- <p className="mt-1 text-sm font-light text-muted-foreground">
115
- {tier.description}
116
- </p>
79
+ <h3 className="text-lg font-semibold text-foreground">{tier.name}</h3>
80
+ <p className="mt-2 text-sm text-muted-foreground">{tier.description}</p>
117
81
  </div>
118
82
 
119
83
  <div className="flex items-baseline gap-1">
120
- <span className="text-4xl font-light tracking-tight text-foreground">
121
- {yearly ? tier.price.yearly : tier.price.monthly}
84
+ <span className="text-5xl font-bold tracking-tight text-foreground">
85
+ {tier.price}
122
86
  </span>
123
- {tier.price.monthly !== 'Custom' && (
124
- <span className="text-sm text-muted-foreground">/mo</span>
87
+ {tier.period && (
88
+ <span className="text-sm font-medium text-muted-foreground">
89
+ {tier.period}
90
+ </span>
125
91
  )}
126
92
  </div>
127
93
 
128
- <div className="border-t border-border/50" />
129
-
130
- <ul className="flex-1 space-y-4">
94
+ <ul className="space-y-4">
131
95
  {tier.features.map((feature) => (
132
- <li key={feature} className="flex items-start gap-2.5 text-sm">
133
- <Check className="mt-0.5 h-4 w-4 shrink-0 text-muted-foreground" />
134
- <span className="font-light text-muted-foreground">{feature}</span>
96
+ <li key={feature} className="flex items-start gap-3">
97
+ <span className="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-primary/10">
98
+ <Check className="h-3 w-3 text-primary" />
99
+ </span>
100
+ <span className="text-sm text-foreground">{feature}</span>
135
101
  </li>
136
102
  ))}
137
103
  </ul>
@@ -140,16 +106,14 @@ export function PricingSection() {
140
106
  <Button
141
107
  variant={tier.highlighted ? 'default' : 'outline'}
142
108
  className={cn(
143
- 'h-12 w-full rounded-lg font-medium transition-all focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',
144
- tier.highlighted && 'shadow-lg shadow-primary/25'
109
+ 'h-12 w-full rounded-lg font-medium transition-transform hover:scale-[1.02] active:scale-[0.98] focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2',
110
+ tier.highlighted ? 'shadow-lg shadow-primary/25' : 'border-2',
145
111
  )}
146
112
  >
147
113
  {tier.cta}
148
114
  </Button>
149
- {tier.name === 'Free' && (
150
- <p className="mt-3 text-center text-xs text-muted-foreground">
151
- No credit card required
152
- </p>
115
+ {tier.note && (
116
+ <p className="mt-3 text-center text-xs text-muted-foreground">{tier.note}</p>
153
117
  )}
154
118
  </div>
155
119
  </div>
@@ -1,4 +1,5 @@
1
1
  import './globals.css'
2
+ import './personalize.css'
2
3
 
3
4
  export const metadata = {
4
5
  title: '{{headline}}',
@@ -0,0 +1 @@
1
+ /* Personalization layer — overridden by industry layer or blueprint-agent */
@@ -31,6 +31,10 @@
31
31
  "source": "files/globals.css",
32
32
  "target": "app/globals.css"
33
33
  },
34
+ {
35
+ "source": "files/personalize.css",
36
+ "target": "app/personalize.css"
37
+ },
34
38
  {
35
39
  "source": "files/preview-index.html",
36
40
  "target": "preview/index.html"
@@ -1,4 +1,5 @@
1
1
  import './styles.css'
2
+ import './personalize.css'
2
3
  import { createElement } from 'react'
3
4
  import { createRoot } from 'react-dom/client'
4
5
  import App from './App'
@@ -0,0 +1 @@
1
+ /* Personalization layer — overridden by industry layer or blueprint-agent */
@@ -15,6 +15,10 @@
15
15
  "source": "files/styles.css",
16
16
  "target": "src/styles.css"
17
17
  },
18
+ {
19
+ "source": "files/personalize.css",
20
+ "target": "src/personalize.css"
21
+ },
18
22
  {
19
23
  "source": "files/preview-client.js",
20
24
  "target": "preview-client.js"
@@ -0,0 +1,11 @@
1
+ /* Industry: creative — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(280 65% 50%);
4
+ --color-accent: hsl(320 75% 55%);
5
+ --color-ring: hsl(280 65% 50%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(280 65% 50%);
9
+ --color-accent: hsl(320 75% 55%);
10
+ --color-ring: hsl(280 65% 50%);
11
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "creative",
3
+ "description": "Photography, design, art, portfolio, creative work",
4
+ "group": "industry",
5
+ "appliesTo": [
6
+ "nextjs-ts",
7
+ "react-vite-ts",
8
+ "fullstack-ts",
9
+ "remix-ts",
10
+ "sveltekit-ts",
11
+ "vue-ts",
12
+ "frontend-static"
13
+ ],
14
+ "keywords": [
15
+ "portfolio",
16
+ "photographer",
17
+ "photography",
18
+ "designer",
19
+ "artist",
20
+ "illustrator",
21
+ "creative",
22
+ "gallery",
23
+ "studio",
24
+ "agency"
25
+ ],
26
+ "files": [
27
+ {
28
+ "source": "files/personalize.css",
29
+ "target": "src/personalize.css"
30
+ },
31
+ {
32
+ "source": "files/personalize.css",
33
+ "target": "app/personalize.css"
34
+ }
35
+ ],
36
+ "defaults": {
37
+ "industryTone": "distinctive, refined, expressive"
38
+ }
39
+ }
@@ -0,0 +1,11 @@
1
+ /* Industry: crypto — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(160 84% 39%);
4
+ --color-accent: hsl(142 76% 36%);
5
+ --color-ring: hsl(160 84% 39%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(160 84% 39%);
9
+ --color-accent: hsl(142 76% 36%);
10
+ --color-ring: hsl(160 84% 39%);
11
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "id": "crypto",
3
+ "description": "Crypto, web3, defi, blockchain, NFT applications",
4
+ "group": "industry",
5
+ "appliesTo": [
6
+ "nextjs-ts",
7
+ "react-vite-ts",
8
+ "fullstack-ts",
9
+ "remix-ts",
10
+ "sveltekit-ts",
11
+ "vue-ts",
12
+ "frontend-static"
13
+ ],
14
+ "keywords": [
15
+ "crypto",
16
+ "web3",
17
+ "defi",
18
+ "blockchain",
19
+ "nft",
20
+ "token",
21
+ "wallet",
22
+ "staking",
23
+ "dao",
24
+ "evm",
25
+ "solana",
26
+ "ethereum"
27
+ ],
28
+ "files": [
29
+ {
30
+ "source": "files/personalize.css",
31
+ "target": "src/personalize.css"
32
+ },
33
+ {
34
+ "source": "files/personalize.css",
35
+ "target": "app/personalize.css"
36
+ }
37
+ ],
38
+ "defaults": {
39
+ "industryTone": "bold, technical, future-forward"
40
+ }
41
+ }
@@ -0,0 +1,11 @@
1
+ /* Industry: ecommerce — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(340 82% 52%);
4
+ --color-accent: hsl(24 95% 53%);
5
+ --color-ring: hsl(340 82% 52%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(340 82% 52%);
9
+ --color-accent: hsl(24 95% 53%);
10
+ --color-ring: hsl(340 82% 52%);
11
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "ecommerce",
3
+ "description": "Online stores, marketplaces, shopping, retail",
4
+ "group": "industry",
5
+ "appliesTo": [
6
+ "nextjs-ts",
7
+ "react-vite-ts",
8
+ "fullstack-ts",
9
+ "remix-ts",
10
+ "sveltekit-ts",
11
+ "vue-ts",
12
+ "frontend-static"
13
+ ],
14
+ "keywords": [
15
+ "ecommerce",
16
+ "shop",
17
+ "store",
18
+ "retail",
19
+ "shopify",
20
+ "woocommerce",
21
+ "product catalog",
22
+ "checkout",
23
+ "cart",
24
+ "inventory"
25
+ ],
26
+ "files": [
27
+ {
28
+ "source": "files/personalize.css",
29
+ "target": "src/personalize.css"
30
+ },
31
+ {
32
+ "source": "files/personalize.css",
33
+ "target": "app/personalize.css"
34
+ }
35
+ ],
36
+ "defaults": {
37
+ "industryTone": "inviting, trustworthy, conversion-focused"
38
+ }
39
+ }
@@ -0,0 +1,11 @@
1
+ /* Industry: education — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(45 93% 47%);
4
+ --color-accent: hsl(220 90% 56%);
5
+ --color-ring: hsl(45 93% 47%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(45 93% 47%);
9
+ --color-accent: hsl(220 90% 56%);
10
+ --color-ring: hsl(45 93% 47%);
11
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "education",
3
+ "description": "Learning, courses, tutoring, educational platforms",
4
+ "group": "industry",
5
+ "appliesTo": [
6
+ "nextjs-ts",
7
+ "react-vite-ts",
8
+ "fullstack-ts",
9
+ "remix-ts",
10
+ "sveltekit-ts",
11
+ "vue-ts",
12
+ "frontend-static"
13
+ ],
14
+ "keywords": [
15
+ "education",
16
+ "learning",
17
+ "course",
18
+ "tutoring",
19
+ "student",
20
+ "teacher",
21
+ "school",
22
+ "university",
23
+ "lesson",
24
+ "curriculum"
25
+ ],
26
+ "files": [
27
+ {
28
+ "source": "files/personalize.css",
29
+ "target": "src/personalize.css"
30
+ },
31
+ {
32
+ "source": "files/personalize.css",
33
+ "target": "app/personalize.css"
34
+ }
35
+ ],
36
+ "defaults": {
37
+ "industryTone": "encouraging, clear, accessible"
38
+ }
39
+ }
@@ -0,0 +1,11 @@
1
+ /* Industry: finance — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(142 71% 45%);
4
+ --color-accent: hsl(220 90% 56%);
5
+ --color-ring: hsl(142 71% 45%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(142 71% 45%);
9
+ --color-accent: hsl(220 90% 56%);
10
+ --color-ring: hsl(142 71% 45%);
11
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "finance",
3
+ "description": "Personal finance, banking, budgeting, investing",
4
+ "group": "industry",
5
+ "appliesTo": [
6
+ "nextjs-ts",
7
+ "react-vite-ts",
8
+ "fullstack-ts",
9
+ "remix-ts",
10
+ "sveltekit-ts",
11
+ "vue-ts",
12
+ "frontend-static"
13
+ ],
14
+ "keywords": [
15
+ "finance",
16
+ "banking",
17
+ "budget",
18
+ "investing",
19
+ "stocks",
20
+ "savings",
21
+ "wealth",
22
+ "fintech",
23
+ "expense",
24
+ "accounting"
25
+ ],
26
+ "files": [
27
+ {
28
+ "source": "files/personalize.css",
29
+ "target": "src/personalize.css"
30
+ },
31
+ {
32
+ "source": "files/personalize.css",
33
+ "target": "app/personalize.css"
34
+ }
35
+ ],
36
+ "defaults": {
37
+ "industryTone": "trustworthy, precise, professional"
38
+ }
39
+ }
@@ -0,0 +1,11 @@
1
+ /* Industry: fitness — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(14 90% 53%);
4
+ --color-accent: hsl(45 96% 56%);
5
+ --color-ring: hsl(14 90% 53%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(14 90% 53%);
9
+ --color-accent: hsl(45 96% 56%);
10
+ --color-ring: hsl(14 90% 53%);
11
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "id": "fitness",
3
+ "description": "Fitness, training, gym, workout, and athletic apps",
4
+ "group": "industry",
5
+ "appliesTo": [
6
+ "nextjs-ts",
7
+ "react-vite-ts",
8
+ "fullstack-ts",
9
+ "remix-ts",
10
+ "sveltekit-ts",
11
+ "vue-ts",
12
+ "frontend-static"
13
+ ],
14
+ "keywords": [
15
+ "fitness",
16
+ "gym",
17
+ "workout",
18
+ "training",
19
+ "exercise",
20
+ "muscle",
21
+ "athletic",
22
+ "running",
23
+ "marathon",
24
+ "crossfit",
25
+ "yoga",
26
+ "pilates",
27
+ "cardio",
28
+ "strength"
29
+ ],
30
+ "files": [
31
+ {
32
+ "source": "files/personalize.css",
33
+ "target": "src/personalize.css"
34
+ },
35
+ {
36
+ "source": "files/personalize.css",
37
+ "target": "app/personalize.css"
38
+ }
39
+ ],
40
+ "defaults": {
41
+ "industryTone": "energetic, direct, motivational"
42
+ }
43
+ }
@@ -0,0 +1,11 @@
1
+ /* Industry: gaming — overrides Tailwind v4 @theme defaults at runtime */
2
+ :root {
3
+ --color-primary: hsl(262 83% 58%);
4
+ --color-accent: hsl(320 75% 55%);
5
+ --color-ring: hsl(262 83% 58%);
6
+ }
7
+ .dark {
8
+ --color-primary: hsl(262 83% 58%);
9
+ --color-accent: hsl(320 75% 55%);
10
+ --color-ring: hsl(262 83% 58%);
11
+ }