nextworks 0.2.0-alpha.11 → 0.2.0-alpha.13
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/README.md +283 -282
- package/dist/cli_manifests/blocks_manifest.json +198 -175
- package/dist/kits/blocks/.nextworks/docs/BLOCKS_QUICKSTART.md +101 -100
- package/dist/kits/blocks/.nextworks/docs/BLOCKS_README.md +105 -104
- package/dist/kits/blocks/.nextworks/docs/THEME_GUIDE.md +1 -1
- package/dist/kits/blocks/app/templates/aiworkflow/PresetThemeVars.tsx +58 -0
- package/dist/kits/blocks/app/templates/aiworkflow/README.md +46 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/CTA.tsx +44 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Contact.tsx +105 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/FAQ.tsx +63 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Features.tsx +65 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Footer.tsx +109 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Hero.tsx +636 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Navbar.tsx +90 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Pricing.tsx +86 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/ProcessTimeline.tsx +103 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/Testimonials.tsx +56 -0
- package/dist/kits/blocks/app/templates/aiworkflow/components/TrustBadges.tsx +59 -0
- package/dist/kits/blocks/app/templates/aiworkflow/page.tsx +43 -0
- package/dist/kits/blocks/app/templates/digitalagency/PresetThemeVars.tsx +80 -80
- package/dist/kits/blocks/app/templates/digitalagency/README.md +42 -42
- package/dist/kits/blocks/app/templates/digitalagency/components/Pricing.tsx +114 -114
- package/dist/kits/blocks/app/templates/digitalagency/components/Process.tsx +59 -59
- package/dist/kits/blocks/app/templates/digitalagency/components/Services.tsx +55 -55
- package/dist/kits/blocks/app/templates/digitalagency/components/Team.tsx +28 -28
- package/dist/kits/blocks/app/templates/digitalagency/components/Testimonials.tsx +65 -65
- package/dist/kits/blocks/app/templates/digitalagency/page.tsx +38 -38
- package/dist/kits/blocks/app/templates/gallery/PresetThemeVars.tsx +84 -84
- package/dist/kits/blocks/app/templates/productlaunch/PresetThemeVars.tsx +75 -75
- package/dist/kits/blocks/app/templates/productlaunch/README.md +62 -62
- package/dist/kits/blocks/app/templates/productlaunch/components/About.tsx +84 -84
- package/dist/kits/blocks/app/templates/productlaunch/components/CTA.tsx +50 -50
- package/dist/kits/blocks/app/templates/productlaunch/components/Contact.tsx +231 -231
- package/dist/kits/blocks/app/templates/productlaunch/components/FAQ.tsx +86 -86
- package/dist/kits/blocks/app/templates/productlaunch/components/Features.tsx +83 -83
- package/dist/kits/blocks/app/templates/productlaunch/components/Footer.tsx +132 -132
- package/dist/kits/blocks/app/templates/productlaunch/components/Hero.tsx +88 -88
- package/dist/kits/blocks/app/templates/productlaunch/components/Navbar.tsx +116 -116
- package/dist/kits/blocks/app/templates/productlaunch/components/Pricing.tsx +106 -106
- package/dist/kits/blocks/app/templates/productlaunch/components/ProcessTimeline.tsx +110 -110
- package/dist/kits/blocks/app/templates/productlaunch/components/ServicesGrid.tsx +68 -68
- package/dist/kits/blocks/app/templates/productlaunch/components/Team.tsx +104 -104
- package/dist/kits/blocks/app/templates/productlaunch/components/Testimonials.tsx +90 -90
- package/dist/kits/blocks/app/templates/productlaunch/components/TrustBadges.tsx +76 -76
- package/dist/kits/blocks/app/templates/productlaunch/page.tsx +43 -43
- package/dist/kits/blocks/app/templates/saasdashboard/PresetThemeVars.tsx +80 -80
- package/dist/kits/blocks/app/templates/saasdashboard/README.md +44 -44
- package/dist/kits/blocks/app/templates/saasdashboard/components/Contact.tsx +129 -129
- package/dist/kits/blocks/app/templates/saasdashboard/components/Dashboard.tsx +293 -293
- package/dist/kits/blocks/app/templates/saasdashboard/components/FAQ.tsx +55 -55
- package/dist/kits/blocks/app/templates/saasdashboard/components/Features.tsx +90 -90
- package/dist/kits/blocks/app/templates/saasdashboard/components/Footer.tsx +77 -77
- package/dist/kits/blocks/app/templates/saasdashboard/components/Hero.tsx +104 -104
- package/dist/kits/blocks/app/templates/saasdashboard/components/Hero_mask.tsx +126 -126
- package/dist/kits/blocks/app/templates/saasdashboard/components/Navbar.tsx +117 -117
- package/dist/kits/blocks/app/templates/saasdashboard/components/Pricing.tsx +90 -90
- package/dist/kits/blocks/app/templates/saasdashboard/components/SmoothScroll.tsx +96 -96
- package/dist/kits/blocks/app/templates/saasdashboard/components/Testimonials.tsx +72 -72
- package/dist/kits/blocks/app/templates/saasdashboard/components/TrustBadges.tsx +53 -53
- package/dist/kits/blocks/app/templates/saasdashboard/page.tsx +39 -39
- package/dist/kits/blocks/components/enhanced-theme-provider.tsx +195 -195
- package/dist/kits/blocks/components/providers/BlocksAppProviders.tsx +27 -27
- package/dist/kits/blocks/components/sections/About.tsx +291 -291
- package/dist/kits/blocks/components/sections/CTA.tsx +257 -257
- package/dist/kits/blocks/components/sections/Contact.tsx +267 -267
- package/dist/kits/blocks/components/sections/FAQ.tsx +214 -214
- package/dist/kits/blocks/components/sections/Features.tsx +268 -268
- package/dist/kits/blocks/components/sections/Footer.tsx +302 -302
- package/dist/kits/blocks/components/sections/HeroMotion.tsx +308 -308
- package/dist/kits/blocks/components/sections/HeroOverlay.tsx +358 -358
- package/dist/kits/blocks/components/sections/HeroProductDemo.tsx +236 -0
- package/dist/kits/blocks/components/sections/HeroSplit.tsx +352 -352
- package/dist/kits/blocks/components/sections/Navbar.tsx +350 -350
- package/dist/kits/blocks/components/sections/PortfolioSimple.tsx +549 -549
- package/dist/kits/blocks/components/sections/Pricing.tsx +264 -264
- package/dist/kits/blocks/components/sections/ProcessTimeline.tsx +325 -325
- package/dist/kits/blocks/components/sections/ServicesGrid.tsx +210 -210
- package/dist/kits/blocks/components/sections/Team.tsx +309 -309
- package/dist/kits/blocks/components/sections/Testimonials.tsx +158 -158
- package/dist/kits/blocks/components/sections/TrustBadges.tsx +162 -162
- package/dist/kits/blocks/components/sections/product-demo/ApprovalInboxPanel.tsx +125 -0
- package/dist/kits/blocks/components/sections/product-demo/DemoStage.tsx +397 -0
- package/dist/kits/blocks/components/sections/product-demo/DemoWindow.tsx +128 -0
- package/dist/kits/blocks/components/sections/product-demo/KnowledgePanel.tsx +127 -0
- package/dist/kits/blocks/components/sections/product-demo/RunConsolePanel.tsx +150 -0
- package/dist/kits/blocks/components/sections/product-demo/WorkflowStudioPanel.tsx +191 -0
- package/dist/kits/blocks/components/sections/product-demo/types.ts +193 -0
- package/dist/kits/blocks/components/theme-provider.tsx +1 -1
- package/dist/kits/blocks/components/ui/alert-dialog.tsx +134 -134
- package/dist/kits/blocks/components/ui/brand-node.tsx +121 -121
- package/dist/kits/blocks/components/ui/button.tsx +122 -122
- package/dist/kits/blocks/components/ui/card.tsx +95 -95
- package/dist/kits/blocks/components/ui/checkbox.tsx +30 -30
- package/dist/kits/blocks/components/ui/cta-button.tsx +125 -125
- package/dist/kits/blocks/components/ui/dropdown-menu.tsx +201 -201
- package/dist/kits/blocks/components/ui/feature-card.tsx +91 -91
- package/dist/kits/blocks/components/ui/input.tsx +27 -27
- package/dist/kits/blocks/components/ui/label.tsx +29 -29
- package/dist/kits/blocks/components/ui/pricing-card.tsx +120 -120
- package/dist/kits/blocks/components/ui/select.tsx +25 -25
- package/dist/kits/blocks/components/ui/skeleton.tsx +13 -13
- package/dist/kits/blocks/components/ui/table.tsx +98 -98
- package/dist/kits/blocks/components/ui/testimonial-card.tsx +108 -108
- package/dist/kits/blocks/components/ui/textarea.tsx +26 -26
- package/dist/kits/blocks/components/ui/theme-selector.tsx +243 -243
- package/dist/kits/blocks/components/ui/theme-toggle.tsx +74 -74
- package/dist/kits/blocks/components/ui/toaster.tsx +7 -7
- package/dist/kits/blocks/lib/themes.ts +400 -400
- package/dist/kits/blocks/lib/utils.ts +6 -6
- package/dist/kits/blocks/package-deps.json +3 -3
- package/package.json +1 -1
|
@@ -1,104 +1,105 @@
|
|
|
1
|
-
# Blocks kit
|
|
2
|
-
|
|
3
|
-
This folder is the **Blocks kit** installed by the Nextworks CLI. It’s copied into your Next.js project so you can edit everything locally (shadcn-style): components, sections, templates, and theme utilities.
|
|
4
|
-
|
|
5
|
-
If you’re reading this inside your app repo, you’ll also find companion docs at:
|
|
6
|
-
|
|
7
|
-
- `.nextworks/docs/BLOCKS_QUICKSTART.md` (start here)
|
|
8
|
-
- `.nextworks/docs/THEME_GUIDE.md`
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## What this adds to your project
|
|
13
|
-
|
|
14
|
-
Depending on install flags, Blocks adds:
|
|
15
|
-
|
|
16
|
-
- **UI primitives** under `components/ui/**` (Button, Input, Card, Select, Checkbox, Switch, Toaster, etc.)
|
|
17
|
-
- **Reusable marketing sections** under `components/sections/**` (Navbar, Hero variants, Features, Pricing, Testimonials, FAQ, Contact, Footer, …)
|
|
18
|
-
- **Full page templates** under a router-native path (see below)
|
|
19
|
-
- **Theme + provider utilities** under `components/**` and `lib/**`
|
|
20
|
-
- **Global styles**: `app/globals.css` and `app/tw-animate.css`
|
|
21
|
-
- **Placeholder images** under `public/placeholders/**`
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Install commands / options
|
|
26
|
-
|
|
27
|
-
> ```bash
|
|
28
|
-
> npx nextworks@latest add blocks --templates
|
|
29
|
-
> ```
|
|
30
|
-
|
|
31
|
-
Blocks supports these install shapes:
|
|
32
|
-
|
|
33
|
-
- `npx nextworks@latest add blocks --ui-only` → core UI primitives only
|
|
34
|
-
- `npx nextworks@latest add blocks --sections` → core + sections
|
|
35
|
-
- `npx nextworks@latest add blocks --templates` → core + sections + templates (recommended)
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## After install: what to run
|
|
40
|
-
|
|
41
|
-
1. Install merged dependencies:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
npm install
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
2. Start dev:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
npm run dev
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
3. Visit template routes (when templates are installed):
|
|
54
|
-
- `/templates/productlaunch`
|
|
55
|
-
- `/templates/saasdashboard`
|
|
56
|
-
- `/templates/digitalagency`
|
|
57
|
-
- `/templates/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- `app/templates/<template
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
- **
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- `../app/
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
1
|
+
# Blocks kit
|
|
2
|
+
|
|
3
|
+
This folder is the **Blocks kit** installed by the Nextworks CLI. It’s copied into your Next.js project so you can edit everything locally (shadcn-style): components, sections, templates, and theme utilities.
|
|
4
|
+
|
|
5
|
+
If you’re reading this inside your app repo, you’ll also find companion docs at:
|
|
6
|
+
|
|
7
|
+
- `.nextworks/docs/BLOCKS_QUICKSTART.md` (start here)
|
|
8
|
+
- `.nextworks/docs/THEME_GUIDE.md`
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## What this adds to your project
|
|
13
|
+
|
|
14
|
+
Depending on install flags, Blocks adds:
|
|
15
|
+
|
|
16
|
+
- **UI primitives** under `components/ui/**` (Button, Input, Card, Select, Checkbox, Switch, Toaster, etc.)
|
|
17
|
+
- **Reusable marketing sections** under `components/sections/**` (Navbar, Hero variants, Features, Pricing, Testimonials, FAQ, Contact, Footer, …)
|
|
18
|
+
- **Full page templates** under a router-native path (see below)
|
|
19
|
+
- **Theme + provider utilities** under `components/**` and `lib/**`
|
|
20
|
+
- **Global styles**: `app/globals.css` and `app/tw-animate.css`
|
|
21
|
+
- **Placeholder images** under `public/placeholders/**`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Install commands / options
|
|
26
|
+
|
|
27
|
+
> ```bash
|
|
28
|
+
> npx nextworks@latest add blocks --templates
|
|
29
|
+
> ```
|
|
30
|
+
|
|
31
|
+
Blocks supports these install shapes:
|
|
32
|
+
|
|
33
|
+
- `npx nextworks@latest add blocks --ui-only` → core UI primitives only
|
|
34
|
+
- `npx nextworks@latest add blocks --sections` → core + sections
|
|
35
|
+
- `npx nextworks@latest add blocks --templates` → core + sections + templates (recommended)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## After install: what to run
|
|
40
|
+
|
|
41
|
+
1. Install merged dependencies:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm install
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
2. Start dev:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm run dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
3. Visit template routes (when templates are installed):
|
|
54
|
+
- `/templates/productlaunch`
|
|
55
|
+
- `/templates/saasdashboard`
|
|
56
|
+
- `/templates/digitalagency`
|
|
57
|
+
- `/templates/aiworkflow`
|
|
58
|
+
- `/templates/gallery`
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Where templates live (App Router vs Pages Router)
|
|
63
|
+
|
|
64
|
+
Templates are installed in a router-native location:
|
|
65
|
+
|
|
66
|
+
- **App Router:**
|
|
67
|
+
- `app/templates/<template>/page.tsx`
|
|
68
|
+
- `app/templates/<template>/**`
|
|
69
|
+
|
|
70
|
+
- **Pages Router:**
|
|
71
|
+
- route entry file: `pages/templates/<template>/index.tsx`
|
|
72
|
+
- supporting template files: `components/templates/<template>/**` (kept outside `pages/` so helpers are not treated as routable pages)
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Required wiring (providers + CSS)
|
|
77
|
+
|
|
78
|
+
Blocks expects your app to be wrapped in the kit’s local `AppProviders`.
|
|
79
|
+
|
|
80
|
+
- **App Router:** patched in `app/layout.tsx`
|
|
81
|
+
- **Pages Router:** patched in `pages/_app.tsx` (and may create/update `pages/_document.tsx`)
|
|
82
|
+
|
|
83
|
+
The CLI normally patches this automatically.
|
|
84
|
+
|
|
85
|
+
Notes:
|
|
86
|
+
|
|
87
|
+
- Pages Router installs also ensure CSS imports exist in `pages/_app.tsx`:
|
|
88
|
+
- `../app/globals.css`
|
|
89
|
+
- `../app/tw-animate.css`
|
|
90
|
+
- The kit’s `components/app-providers.*` wrappers are **local kit providers** (they wrap the kit-local `BlocksAppProviders`) so providers/hooks resolve to the same React context instance under Turbopack/HMR.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## What to edit first
|
|
95
|
+
|
|
96
|
+
- Want to change the look/branding quickly? Start with:
|
|
97
|
+
- `.nextworks/docs/THEME_GUIDE.md`
|
|
98
|
+
- `lib/themes.ts`
|
|
99
|
+
- each template’s `PresetThemeVars` file
|
|
100
|
+
|
|
101
|
+
- Want to customize a section (Navbar/Hero/etc.)?
|
|
102
|
+
- edit files directly under `components/sections/**`
|
|
103
|
+
|
|
104
|
+
- Want to customize a template page?
|
|
105
|
+
- edit the template route file (see paths above) and its local components.
|
|
@@ -31,7 +31,7 @@ Fonts are instead configured directly in your app’s router entrypoint (the CLI
|
|
|
31
31
|
If you ever see a font-related Turbopack error after upgrades or manual edits, re-run:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
npx nextworks@latest add blocks --
|
|
34
|
+
npx nextworks@latest add blocks --templates
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
to re-apply the router entrypoint patch, and ensure your entrypoint contains a valid
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cn } from "@/lib/utils";
|
|
3
|
+
|
|
4
|
+
type Props = React.PropsWithChildren<{ className?: string }>;
|
|
5
|
+
|
|
6
|
+
export function PresetThemeVars({ className, children }: Props) {
|
|
7
|
+
return (
|
|
8
|
+
<div
|
|
9
|
+
className={cn(
|
|
10
|
+
"[--btn-ring:theme(colors.cyan.500)] dark:[--btn-ring:theme(colors.cyan.400)]",
|
|
11
|
+
|
|
12
|
+
"[--input-bg:theme(colors.white)] dark:[--input-bg:theme(colors.slate.950)]",
|
|
13
|
+
"[--input-fg:theme(colors.slate.900)] dark:[--input-fg:theme(colors.slate.100)]",
|
|
14
|
+
"[--input-placeholder:theme(colors.slate.400)] dark:[--input-placeholder:theme(colors.slate.500)]",
|
|
15
|
+
"[--input-border:theme(colors.cyan.200)] dark:[--input-border:theme(colors.cyan.900)]",
|
|
16
|
+
"[--input-focus-ring:theme(colors.cyan.500)] dark:[--input-focus-ring:theme(colors.cyan.400)]",
|
|
17
|
+
"[--input-ring-offset:theme(colors.white)] dark:[--input-ring-offset:theme(colors.slate.950)]",
|
|
18
|
+
|
|
19
|
+
"[--card-bg:theme(colors.white)] dark:[--card-bg:theme(colors.slate.900)]",
|
|
20
|
+
"[--card-fg:theme(colors.slate.900)] dark:[--card-fg:theme(colors.slate.100)]",
|
|
21
|
+
"[--card-title-fg:theme(colors.slate.950)] dark:[--card-title-fg:theme(colors.white)]",
|
|
22
|
+
"[--card-muted-fg:theme(colors.slate.600)] dark:[--card-muted-fg:theme(colors.slate.300)]",
|
|
23
|
+
"[--card-border:theme(colors.slate.200)] dark:[--card-border:theme(colors.slate.800)]",
|
|
24
|
+
"[--card-shadow:0_10px_30px_rgba(8,15,30,0.08)]",
|
|
25
|
+
|
|
26
|
+
"[--badge-bg:theme(colors.cyan.50)] dark:[--badge-bg:theme(colors.cyan.950)]",
|
|
27
|
+
"[--badge-fg:theme(colors.cyan.700)] dark:[--badge-fg:theme(colors.cyan.200)]",
|
|
28
|
+
"[--badge-border:theme(colors.cyan.200)] dark:[--badge-border:theme(colors.cyan.800)]",
|
|
29
|
+
"[--badge-active-bg:theme(colors.cyan.500)] dark:[--badge-active-bg:theme(colors.cyan.500)]",
|
|
30
|
+
"[--badge-active-fg:theme(colors.slate.950)] dark:[--badge-active-fg:theme(colors.slate.950)]",
|
|
31
|
+
"[--badge-active-border:theme(colors.cyan.600)] dark:[--badge-active-border:theme(colors.cyan.400)]",
|
|
32
|
+
|
|
33
|
+
"[--heading-fg:theme(colors.slate.950)] dark:[--heading-fg:theme(colors.white)]",
|
|
34
|
+
"[--subheading-fg:theme(colors.slate.600)] dark:[--subheading-fg:theme(colors.slate.300)]",
|
|
35
|
+
"[--description-fg:theme(colors.slate.700)] dark:[--description-fg:theme(colors.slate.200)]",
|
|
36
|
+
|
|
37
|
+
"[--footer-bg:transparent] dark:[--footer-bg:transparent]",
|
|
38
|
+
"[--footer-fg:theme(colors.slate.800)] dark:[--footer-fg:theme(colors.slate.100)]",
|
|
39
|
+
"[--footer-heading-fg:theme(colors.slate.950)] dark:[--footer-heading-fg:theme(colors.white)]",
|
|
40
|
+
"[--footer-link-fg:theme(colors.slate.700)] dark:[--footer-link-fg:theme(colors.slate.300)]",
|
|
41
|
+
"[--footer-link-hover-fg:theme(colors.cyan.700)] dark:[--footer-link-hover-fg:theme(colors.cyan.300)]",
|
|
42
|
+
"[--footer-link-hover-bg:theme(colors.cyan.50)] dark:[--footer-link-hover-bg:color-mix(in_oklab,oklch(0.25_0.06_230)_24%,transparent)]",
|
|
43
|
+
"[--footer-muted-fg:theme(colors.slate.500)] dark:[--footer-muted-fg:theme(colors.slate.400)]",
|
|
44
|
+
"[--footer-border:theme(colors.slate.200)] dark:[--footer-border:theme(colors.slate.800)]",
|
|
45
|
+
|
|
46
|
+
"[--table-fg:inherit]",
|
|
47
|
+
"[--table-muted-fg:theme(colors.slate.500)] dark:[--table-muted-fg:theme(colors.slate.400)]",
|
|
48
|
+
"[--table-head-fg:theme(colors.slate.700)] dark:[--table-head-fg:theme(colors.slate.300)]",
|
|
49
|
+
"[--table-border:theme(colors.slate.200)] dark:[--table-border:theme(colors.slate.800)]",
|
|
50
|
+
"[--table-row-hover-bg:theme(colors.slate.50)] dark:[--table-row-hover-bg:theme(colors.slate.900)]",
|
|
51
|
+
|
|
52
|
+
className,
|
|
53
|
+
)}
|
|
54
|
+
>
|
|
55
|
+
{children}
|
|
56
|
+
</div>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# AIWorkflow Template Theming
|
|
2
|
+
|
|
3
|
+
This template is preset-first. It wraps the page with `PresetThemeVars` and composes the route from template-local wrappers around shared Nextworks sections.
|
|
4
|
+
|
|
5
|
+
## Where it’s wired
|
|
6
|
+
|
|
7
|
+
Template paths depend on your router:
|
|
8
|
+
|
|
9
|
+
- App Router:
|
|
10
|
+
- Wrapper: `app/templates/aiworkflow/PresetThemeVars.tsx`
|
|
11
|
+
- Page: `app/templates/aiworkflow/page.tsx`
|
|
12
|
+
- Pages Router:
|
|
13
|
+
- Wrapper: `components/templates/aiworkflow/PresetThemeVars.tsx`
|
|
14
|
+
- Page: `pages/templates/aiworkflow/index.tsx`
|
|
15
|
+
|
|
16
|
+
## Composition pattern
|
|
17
|
+
|
|
18
|
+
The page is composed from local wrappers such as:
|
|
19
|
+
|
|
20
|
+
- `components/Navbar.tsx`
|
|
21
|
+
- `components/Hero.tsx`
|
|
22
|
+
- `components/Features.tsx`
|
|
23
|
+
- `components/ProcessTimeline.tsx`
|
|
24
|
+
- `components/Testimonials.tsx`
|
|
25
|
+
- `components/Pricing.tsx`
|
|
26
|
+
- `components/FAQ.tsx`
|
|
27
|
+
- `components/CTA.tsx`
|
|
28
|
+
- `components/Contact.tsx`
|
|
29
|
+
- `components/Footer.tsx`
|
|
30
|
+
- `components/TrustBadges.tsx`
|
|
31
|
+
|
|
32
|
+
The local `Hero.tsx` wraps the shared `HeroProductDemo` section with AI workflow-specific copy, scenarios, CTAs, and styling.
|
|
33
|
+
|
|
34
|
+
## Core variables
|
|
35
|
+
|
|
36
|
+
- Buttons: `--btn-bg`, `--btn-fg`, `--btn-hover-bg`, `--btn-hover-fg`, `--btn-border`, `--btn-ring`
|
|
37
|
+
- Inputs/Textareas: `--input-bg`, `--input-fg`, `--input-placeholder`, `--input-border`, `--input-focus-ring`, `--input-ring-offset`
|
|
38
|
+
- Cards: `--card-bg`, `--card-fg`, `--card-title-fg`, `--card-muted-fg`, `--card-border`, `--card-shadow`
|
|
39
|
+
- Badges/Chips: `--badge-bg`, `--badge-fg`, `--badge-border`, active: `--badge-active-*`
|
|
40
|
+
- Headings: `--heading-fg`, `--subheading-fg`, `--description-fg`
|
|
41
|
+
- Footer: `--footer-bg`, `--footer-fg`, `--footer-heading-fg`, `--footer-link-fg`, `--footer-link-hover-fg`, `--footer-link-hover-bg`, `--footer-muted-fg`, `--footer-border`
|
|
42
|
+
- Table: `--table-fg`, `--table-muted-fg`, `--table-head-fg`, `--table-border`, `--table-row-hover-bg`
|
|
43
|
+
|
|
44
|
+
## Per-section overrides
|
|
45
|
+
|
|
46
|
+
Prefer the shared preset variables first. Only add local overrides when a section needs a distinct accent or contrast treatment.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { CTA as SharedCTA } from "@/components/sections/CTA";
|
|
4
|
+
|
|
5
|
+
export function CTA() {
|
|
6
|
+
return (
|
|
7
|
+
<SharedCTA
|
|
8
|
+
section={{
|
|
9
|
+
className:
|
|
10
|
+
"bg-[linear-gradient(135deg,theme(colors.slate.950)_0%,theme(colors.cyan.950)_55%,theme(colors.violet.950)_100%)] [--heading-fg:white] [--subheading-fg:rgba(255,255,255,0.82)] [--description-fg:rgba(255,255,255,0.78)]",
|
|
11
|
+
}}
|
|
12
|
+
container={{
|
|
13
|
+
className:
|
|
14
|
+
"flex min-h-[22rem] w-full flex-col items-center justify-center px-6 py-16 text-center",
|
|
15
|
+
}}
|
|
16
|
+
headingText={{
|
|
17
|
+
text: "Automate the work between your tools, teams, and approvals.",
|
|
18
|
+
className:
|
|
19
|
+
"font-outfit text-3xl font-semibold leading-tight text-white md:text-4xl lg:text-5xl",
|
|
20
|
+
}}
|
|
21
|
+
subheadingText={{
|
|
22
|
+
text: "See how an AI workflow automation layer can turn requests into governed execution without losing visibility.",
|
|
23
|
+
className:
|
|
24
|
+
"mx-auto mt-4 max-w-2xl font-inter text-base leading-7 text-white/80 md:text-lg",
|
|
25
|
+
}}
|
|
26
|
+
actionsWrapper={{ className: "mt-8 flex flex-col gap-3 sm:flex-row" }}
|
|
27
|
+
ctaButton={{ label: "Book a workflow demo", href: "#contact" }}
|
|
28
|
+
ctaButtonStyle={{
|
|
29
|
+
variant: "default",
|
|
30
|
+
size: "lg",
|
|
31
|
+
className:
|
|
32
|
+
"font-inter font-semibold [--btn-bg:theme(colors.cyan.400)] [--btn-fg:theme(colors.slate.950)] [--btn-border:transparent] hover:[--btn-hover-bg:theme(colors.cyan.300)] hover:[--btn-hover-fg:theme(colors.slate.950)]",
|
|
33
|
+
}}
|
|
34
|
+
secondaryButton={{ label: "Review pricing", href: "#pricing" }}
|
|
35
|
+
secondaryButtonStyle={{
|
|
36
|
+
variant: "outline",
|
|
37
|
+
size: "lg",
|
|
38
|
+
className:
|
|
39
|
+
"border [--btn-bg:transparent] [--btn-fg:white] [--btn-border:rgba(255,255,255,0.55)] hover:[--btn-hover-bg:rgba(255,255,255,0.08)] hover:[--btn-hover-fg:white]",
|
|
40
|
+
}}
|
|
41
|
+
ariaLabel="AI workflow call to action"
|
|
42
|
+
/>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import {
|
|
5
|
+
Contact as SharedContact,
|
|
6
|
+
ContactField,
|
|
7
|
+
} from "@/components/sections/Contact";
|
|
8
|
+
|
|
9
|
+
const contactFields: ContactField[] = [
|
|
10
|
+
{
|
|
11
|
+
id: "name",
|
|
12
|
+
label: "Full name",
|
|
13
|
+
placeholder: "Jordan Lee",
|
|
14
|
+
required: true,
|
|
15
|
+
type: "text",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "email",
|
|
19
|
+
label: "Work email",
|
|
20
|
+
placeholder: "jordan@company.com",
|
|
21
|
+
required: true,
|
|
22
|
+
type: "email",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "company",
|
|
26
|
+
label: "Company",
|
|
27
|
+
placeholder: "Acme Inc.",
|
|
28
|
+
required: true,
|
|
29
|
+
type: "text",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "workflow",
|
|
33
|
+
label: "Workflow to automate",
|
|
34
|
+
placeholder: "Approvals, onboarding, launches, support escalations…",
|
|
35
|
+
required: true,
|
|
36
|
+
type: "text",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "message",
|
|
40
|
+
label: "What should the workflow coordinate?",
|
|
41
|
+
placeholder:
|
|
42
|
+
"Tell us which systems, approvals, or handoffs are slowing the team down.",
|
|
43
|
+
required: true,
|
|
44
|
+
type: "textarea",
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
export function Contact() {
|
|
49
|
+
const handleFormSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
const data = Object.fromEntries(new FormData(e.currentTarget).entries());
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<SharedContact
|
|
56
|
+
id="contact"
|
|
57
|
+
ariaLabel="AI workflow contact section"
|
|
58
|
+
fields={contactFields}
|
|
59
|
+
contactHeaderText="Bring your messiest workflow."
|
|
60
|
+
contactSubHeaderText="We’ll map the approvals, systems, and execution steps that AI can automate first."
|
|
61
|
+
className="w-full"
|
|
62
|
+
section={{
|
|
63
|
+
className:
|
|
64
|
+
"bg-[linear-gradient(180deg,rgba(241,245,249,1)_0%,rgba(224,242,254,0.55)_100%)] px-6 py-16 dark:bg-[linear-gradient(180deg,rgba(2,6,23,1)_0%,rgba(8,47,73,0.45)_100%)]",
|
|
65
|
+
}}
|
|
66
|
+
container={{ className: "mx-auto max-w-4xl" }}
|
|
67
|
+
headerWrapper={{ className: "mb-8 text-center" }}
|
|
68
|
+
headerText={{
|
|
69
|
+
className:
|
|
70
|
+
"font-outfit text-3xl font-semibold text-[var(--heading-fg)] md:text-4xl",
|
|
71
|
+
}}
|
|
72
|
+
subheaderText={{
|
|
73
|
+
className:
|
|
74
|
+
"mx-auto mt-3 max-w-2xl font-inter text-base leading-7 text-[var(--subheading-fg)]",
|
|
75
|
+
}}
|
|
76
|
+
form={{
|
|
77
|
+
className:
|
|
78
|
+
"rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] p-6 shadow-[var(--card-shadow)] md:p-8",
|
|
79
|
+
}}
|
|
80
|
+
fieldsWrapper={{ className: "space-y-5" }}
|
|
81
|
+
field={{ className: "space-y-2" }}
|
|
82
|
+
label={{
|
|
83
|
+
className:
|
|
84
|
+
"block font-inter text-sm font-medium text-[var(--card-title-fg)]",
|
|
85
|
+
}}
|
|
86
|
+
input={{
|
|
87
|
+
className:
|
|
88
|
+
"w-full rounded-md border-[var(--input-border)] bg-[var(--input-bg)] p-3 font-inter text-[var(--input-fg)] placeholder:text-[var(--input-placeholder)] focus-visible:ring-2 focus-visible:ring-[var(--input-focus-ring)] focus-visible:ring-offset-[var(--input-ring-offset)]",
|
|
89
|
+
}}
|
|
90
|
+
textarea={{
|
|
91
|
+
className:
|
|
92
|
+
"min-h-[130px] w-full resize-vertical rounded-md border-[var(--input-border)] bg-[var(--input-bg)] p-3 font-inter text-[var(--input-fg)] placeholder:text-[var(--input-placeholder)] focus-visible:ring-2 focus-visible:ring-[var(--input-focus-ring)] focus-visible:ring-offset-[var(--input-ring-offset)]",
|
|
93
|
+
}}
|
|
94
|
+
submitButtonWrapper={{ className: "pt-2" }}
|
|
95
|
+
submitButtonStyle={{
|
|
96
|
+
variant: "default",
|
|
97
|
+
size: "lg",
|
|
98
|
+
className:
|
|
99
|
+
"w-full font-inter font-semibold [--btn-bg:theme(colors.cyan.500)] [--btn-fg:theme(colors.slate.950)] [--btn-border:transparent] hover:[--btn-hover-bg:theme(colors.cyan.400)] hover:[--btn-hover-fg:theme(colors.slate.950)]",
|
|
100
|
+
}}
|
|
101
|
+
submitButtonText="Request a demo"
|
|
102
|
+
onSubmit={handleFormSubmit}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { FAQ as SharedFAQ } from "@/components/sections/FAQ";
|
|
4
|
+
|
|
5
|
+
export function FAQ() {
|
|
6
|
+
return (
|
|
7
|
+
<SharedFAQ
|
|
8
|
+
faqSectionHeaderText="Frequently asked questions"
|
|
9
|
+
faqData={[
|
|
10
|
+
{
|
|
11
|
+
question: "What kinds of workflows can I automate?",
|
|
12
|
+
answer:
|
|
13
|
+
"Teams use FlowPilot AI for intake routing, approvals, CRM and ticket updates, launch coordination, support escalations, and other repeatable cross-tool processes.",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: "How do approvals work?",
|
|
17
|
+
answer:
|
|
18
|
+
"You define thresholds and policy rules once. The workflow requests human approval only when conditions match, while lower-risk steps continue automatically.",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
question: "Can AI use our internal documentation and policies?",
|
|
22
|
+
answer:
|
|
23
|
+
"Yes. The knowledge layer can reference playbooks, policies, runbooks, and other connected sources so actions stay grounded in current context.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
question: "Will we be able to audit every action?",
|
|
27
|
+
answer:
|
|
28
|
+
"Yes. Each workflow run records decisions, approvals, tool updates, and execution logs so teams can trace what happened and why.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: "Do we need engineering support to start?",
|
|
32
|
+
answer:
|
|
33
|
+
"Most teams start with business-owned workflows using existing integrations and preset patterns. Engineering can extend the system later when needed.",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
question: "Which tools can it connect to?",
|
|
37
|
+
answer:
|
|
38
|
+
"The template story assumes common systems such as Slack, CRM platforms, ticketing tools, docs, and project trackers, with more connectors added as needed.",
|
|
39
|
+
},
|
|
40
|
+
]}
|
|
41
|
+
section={{ className: "bg-background px-5 py-16" }}
|
|
42
|
+
container={{ className: "max-w-6xl mx-auto" }}
|
|
43
|
+
heading={{
|
|
44
|
+
className:
|
|
45
|
+
"mb-8 text-center font-outfit text-3xl font-semibold text-[var(--heading-fg)] md:text-4xl",
|
|
46
|
+
}}
|
|
47
|
+
grid={{ className: "grid grid-cols-1 gap-5 lg:grid-cols-2" }}
|
|
48
|
+
item={{ className: "mb-0 w-full" }}
|
|
49
|
+
questionButton={{
|
|
50
|
+
className:
|
|
51
|
+
"flex cursor-pointer items-center justify-between rounded-xl border border-slate-200 bg-white p-5 font-inter font-semibold text-slate-900 shadow-sm transition-all duration-200 hover:-translate-y-0.5 hover:border-cyan-300 hover:bg-cyan-50 dark:border-slate-800 dark:bg-slate-900 dark:text-white dark:hover:border-cyan-700 dark:hover:bg-cyan-950/40",
|
|
52
|
+
}}
|
|
53
|
+
answer={{
|
|
54
|
+
className:
|
|
55
|
+
"overflow-hidden rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] text-[var(--card-fg)] shadow-sm",
|
|
56
|
+
}}
|
|
57
|
+
answerText={{
|
|
58
|
+
className: "font-inter text-sm leading-7 text-[var(--card-fg)]",
|
|
59
|
+
}}
|
|
60
|
+
ariaLabel="AI workflow frequently asked questions"
|
|
61
|
+
/>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Features as SharedFeatures } from "@/components/sections/Features";
|
|
4
|
+
|
|
5
|
+
const featuresData = [
|
|
6
|
+
{
|
|
7
|
+
imageSrc: "/placeholders/saas_dashboard/projectBoard.png",
|
|
8
|
+
imageAlt: "Workflow builder and orchestration canvas",
|
|
9
|
+
headingText: "Design workflows from plain-language requests",
|
|
10
|
+
subheadingText:
|
|
11
|
+
"AI turns a request into a structured workflow with triggers, conditions, tool actions, and approval checkpoints.",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
imageSrc: "/placeholders/saas_dashboard/analytics.png",
|
|
15
|
+
imageAlt: "Live execution feed and analytics dashboard",
|
|
16
|
+
headingText: "See every step as it runs",
|
|
17
|
+
subheadingText:
|
|
18
|
+
"Track execution state, latency, retries, and downstream updates in a live run feed your team can actually follow.",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
imageSrc: "/placeholders/saas_dashboard/chat.png",
|
|
22
|
+
imageAlt: "Approval inbox and team collaboration interface",
|
|
23
|
+
headingText: "Route approvals only where they matter",
|
|
24
|
+
subheadingText:
|
|
25
|
+
"Let policy decide when humans need to review while routine decisions stay automated and fully auditable.",
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
export function Features() {
|
|
30
|
+
return (
|
|
31
|
+
<SharedFeatures
|
|
32
|
+
sectionHeading="One system for requests, approvals, execution, and visibility"
|
|
33
|
+
sectionSubheading="Compose AI-assisted workflows that pull in context, coordinate teams, and keep every system in sync."
|
|
34
|
+
featuresData={featuresData}
|
|
35
|
+
section={{ className: "bg-background py-18 md:py-22 lg:py-24" }}
|
|
36
|
+
container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-10" }}
|
|
37
|
+
header={{ className: "mb-12 text-center md:mb-14" }}
|
|
38
|
+
heading={{
|
|
39
|
+
className:
|
|
40
|
+
"font-outfit text-3xl font-semibold text-[var(--heading-fg)] md:text-4xl lg:text-5xl",
|
|
41
|
+
}}
|
|
42
|
+
subheading={{
|
|
43
|
+
className:
|
|
44
|
+
"mx-auto max-w-3xl font-inter text-base leading-7 text-[var(--subheading-fg)] md:text-lg",
|
|
45
|
+
}}
|
|
46
|
+
grid={{
|
|
47
|
+
className: "grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3",
|
|
48
|
+
}}
|
|
49
|
+
card={{
|
|
50
|
+
className:
|
|
51
|
+
"h-full rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] text-[var(--card-fg)] shadow-[var(--card-shadow)] transition-all duration-300 hover:-translate-y-1 hover:shadow-xl",
|
|
52
|
+
}}
|
|
53
|
+
image={{ className: "h-52 w-full object-cover" }}
|
|
54
|
+
cardHeading={{
|
|
55
|
+
className:
|
|
56
|
+
"font-inter text-xl font-semibold leading-tight text-[var(--card-title-fg)]",
|
|
57
|
+
}}
|
|
58
|
+
cardSubheading={{
|
|
59
|
+
className:
|
|
60
|
+
"font-inter text-sm leading-6 text-[var(--card-muted-fg)] md:text-base",
|
|
61
|
+
}}
|
|
62
|
+
ariaLabel="AI workflow features"
|
|
63
|
+
/>
|
|
64
|
+
);
|
|
65
|
+
}
|