create-agntcms-app 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/index.mjs +297 -0
- package/dist/template/.claude/settings.json +6 -0
- package/dist/template/.claude/skills/.gitkeep +0 -0
- package/dist/template/.claude-plugin/channel/server.mjs +254 -0
- package/dist/template/.claude-plugin/channel/server.ts +369 -0
- package/dist/template/.claude-plugin/plugin.json +17 -0
- package/dist/template/.mcp.json +8 -0
- package/dist/template/BRAND.md +49 -0
- package/dist/template/CLAUDE.md +157 -0
- package/dist/template/agntcms/config.ts +49 -0
- package/dist/template/agntcms/sections/ArticleBody/component.tsx +32 -0
- package/dist/template/agntcms/sections/ArticleBody/index.ts +10 -0
- package/dist/template/agntcms/sections/ArticleBody/schema.ts +5 -0
- package/dist/template/agntcms/sections/ArticleHero/component.tsx +87 -0
- package/dist/template/agntcms/sections/ArticleHero/index.ts +10 -0
- package/dist/template/agntcms/sections/ArticleHero/schema.ts +12 -0
- package/dist/template/agntcms/sections/Banner/component.tsx +83 -0
- package/dist/template/agntcms/sections/Banner/index.ts +10 -0
- package/dist/template/agntcms/sections/Banner/schema.ts +9 -0
- package/dist/template/agntcms/sections/BlogIndex/component.tsx +173 -0
- package/dist/template/agntcms/sections/BlogIndex/index.ts +10 -0
- package/dist/template/agntcms/sections/BlogIndex/schema.ts +33 -0
- package/dist/template/agntcms/sections/BlogIndexHeader/component.tsx +44 -0
- package/dist/template/agntcms/sections/BlogIndexHeader/index.ts +10 -0
- package/dist/template/agntcms/sections/BlogIndexHeader/schema.ts +8 -0
- package/dist/template/agntcms/sections/BlogPostBody/component.tsx +50 -0
- package/dist/template/agntcms/sections/BlogPostBody/index.ts +10 -0
- package/dist/template/agntcms/sections/BlogPostBody/schema.ts +10 -0
- package/dist/template/agntcms/sections/BlogPostHero/component.tsx +88 -0
- package/dist/template/agntcms/sections/BlogPostHero/index.ts +10 -0
- package/dist/template/agntcms/sections/BlogPostHero/schema.ts +35 -0
- package/dist/template/agntcms/sections/CaseStudies/component.tsx +92 -0
- package/dist/template/agntcms/sections/CaseStudies/index.ts +10 -0
- package/dist/template/agntcms/sections/CaseStudies/schema.ts +17 -0
- package/dist/template/agntcms/sections/ContactForm/component.tsx +119 -0
- package/dist/template/agntcms/sections/ContactForm/index.ts +10 -0
- package/dist/template/agntcms/sections/ContactForm/schema.ts +15 -0
- package/dist/template/agntcms/sections/DocsArticle/component.tsx +266 -0
- package/dist/template/agntcms/sections/DocsArticle/index.ts +10 -0
- package/dist/template/agntcms/sections/DocsArticle/schema.ts +33 -0
- package/dist/template/agntcms/sections/FAQ/component.tsx +57 -0
- package/dist/template/agntcms/sections/FAQ/index.ts +10 -0
- package/dist/template/agntcms/sections/FAQ/schema.ts +11 -0
- package/dist/template/agntcms/sections/FeatureGrid/component.tsx +117 -0
- package/dist/template/agntcms/sections/FeatureGrid/index.ts +10 -0
- package/dist/template/agntcms/sections/FeatureGrid/schema.ts +21 -0
- package/dist/template/agntcms/sections/FeaturedArticles/component.tsx +99 -0
- package/dist/template/agntcms/sections/FeaturedArticles/index.ts +10 -0
- package/dist/template/agntcms/sections/FeaturedArticles/schema.ts +17 -0
- package/dist/template/agntcms/sections/GettingStarted/component.tsx +116 -0
- package/dist/template/agntcms/sections/GettingStarted/index.ts +10 -0
- package/dist/template/agntcms/sections/GettingStarted/schema.ts +11 -0
- package/dist/template/agntcms/sections/Hero/component.tsx +148 -0
- package/dist/template/agntcms/sections/Hero/index.ts +10 -0
- package/dist/template/agntcms/sections/Hero/schema.ts +16 -0
- package/dist/template/agntcms/sections/HowItWorks/component.tsx +57 -0
- package/dist/template/agntcms/sections/HowItWorks/index.ts +10 -0
- package/dist/template/agntcms/sections/HowItWorks/schema.ts +11 -0
- package/dist/template/agntcms/sections/ImageText/component.tsx +110 -0
- package/dist/template/agntcms/sections/ImageText/index.ts +10 -0
- package/dist/template/agntcms/sections/ImageText/schema.ts +14 -0
- package/dist/template/agntcms/sections/LogoStrip/component.tsx +37 -0
- package/dist/template/agntcms/sections/LogoStrip/index.ts +10 -0
- package/dist/template/agntcms/sections/LogoStrip/schema.ts +6 -0
- package/dist/template/agntcms/sections/Newsletter/component.tsx +48 -0
- package/dist/template/agntcms/sections/Newsletter/index.ts +10 -0
- package/dist/template/agntcms/sections/Newsletter/schema.ts +8 -0
- package/dist/template/agntcms/sections/OpenSource/component.tsx +99 -0
- package/dist/template/agntcms/sections/OpenSource/index.ts +10 -0
- package/dist/template/agntcms/sections/OpenSource/schema.ts +13 -0
- package/dist/template/agntcms/sections/PainAnswer/component.tsx +81 -0
- package/dist/template/agntcms/sections/PainAnswer/index.ts +10 -0
- package/dist/template/agntcms/sections/PainAnswer/schema.ts +15 -0
- package/dist/template/agntcms/sections/PricingPlans/component.tsx +100 -0
- package/dist/template/agntcms/sections/PricingPlans/index.ts +10 -0
- package/dist/template/agntcms/sections/PricingPlans/schema.ts +13 -0
- package/dist/template/agntcms/sections/Problem/component.tsx +49 -0
- package/dist/template/agntcms/sections/Problem/index.ts +10 -0
- package/dist/template/agntcms/sections/Problem/schema.ts +12 -0
- package/dist/template/agntcms/sections/SiteFooter/component.tsx +88 -0
- package/dist/template/agntcms/sections/SiteFooter/index.ts +10 -0
- package/dist/template/agntcms/sections/SiteFooter/schema.ts +13 -0
- package/dist/template/agntcms/sections/SiteHeader/component.tsx +99 -0
- package/dist/template/agntcms/sections/SiteHeader/index.ts +10 -0
- package/dist/template/agntcms/sections/SiteHeader/schema.ts +14 -0
- package/dist/template/agntcms/sections/SiteMeta/component.tsx +26 -0
- package/dist/template/agntcms/sections/SiteMeta/index.ts +13 -0
- package/dist/template/agntcms/sections/SiteMeta/schema.ts +18 -0
- package/dist/template/agntcms/sections/TabbedFeatures/component.tsx +120 -0
- package/dist/template/agntcms/sections/TabbedFeatures/index.ts +10 -0
- package/dist/template/agntcms/sections/TabbedFeatures/schema.ts +13 -0
- package/dist/template/agntcms/sections/TeamGrid/component.tsx +77 -0
- package/dist/template/agntcms/sections/TeamGrid/index.ts +10 -0
- package/dist/template/agntcms/sections/TeamGrid/schema.ts +14 -0
- package/dist/template/agntcms/sections/Testimonials/component.tsx +76 -0
- package/dist/template/agntcms/sections/Testimonials/index.ts +10 -0
- package/dist/template/agntcms/sections/Testimonials/schema.ts +12 -0
- package/dist/template/agntcms/sections/WhatIsBuilt/component.tsx +86 -0
- package/dist/template/agntcms/sections/WhatIsBuilt/index.ts +10 -0
- package/dist/template/agntcms/sections/WhatIsBuilt/schema.ts +20 -0
- package/dist/template/agntcms/site-meta.ts +81 -0
- package/dist/template/app/[[...slug]]/page.tsx +123 -0
- package/dist/template/app/admin/AdminPageClient.tsx +77 -0
- package/dist/template/app/admin/AdminPageDynamic.tsx +24 -0
- package/dist/template/app/admin/page.tsx +14 -0
- package/dist/template/app/api/agntcms/_shared.ts +80 -0
- package/dist/template/app/api/agntcms/assets/route.ts +11 -0
- package/dist/template/app/api/agntcms/assets/upload/route.ts +11 -0
- package/dist/template/app/api/agntcms/draft/discard/route.ts +12 -0
- package/dist/template/app/api/agntcms/draft/list/route.ts +11 -0
- package/dist/template/app/api/agntcms/draft/publish/route.ts +11 -0
- package/dist/template/app/api/agntcms/draft/reorder/route.ts +10 -0
- package/dist/template/app/api/agntcms/draft/save/route.ts +11 -0
- package/dist/template/app/api/agntcms/events/route.ts +12 -0
- package/dist/template/app/api/agntcms/forms/delete/route.ts +17 -0
- package/dist/template/app/api/agntcms/forms/list/route.ts +24 -0
- package/dist/template/app/api/agntcms/forms/read/route.ts +23 -0
- package/dist/template/app/api/agntcms/forms/submit/route.ts +17 -0
- package/dist/template/app/api/agntcms/global/delete/route.ts +13 -0
- package/dist/template/app/api/agntcms/global/history/route.ts +10 -0
- package/dist/template/app/api/agntcms/global/list/route.ts +14 -0
- package/dist/template/app/api/agntcms/global/read/route.ts +11 -0
- package/dist/template/app/api/agntcms/global/rollback/route.ts +10 -0
- package/dist/template/app/api/agntcms/global/save/route.ts +14 -0
- package/dist/template/app/api/agntcms/mcp/route.ts +12 -0
- package/dist/template/app/api/agntcms/page/delete/route.ts +10 -0
- package/dist/template/app/api/agntcms/page/duplicate/route.ts +11 -0
- package/dist/template/app/api/agntcms/page/history/route.ts +10 -0
- package/dist/template/app/api/agntcms/page/list/route.ts +10 -0
- package/dist/template/app/api/agntcms/page/read/route.ts +11 -0
- package/dist/template/app/api/agntcms/page/rename/route.ts +10 -0
- package/dist/template/app/api/agntcms/page/rollback/route.ts +10 -0
- package/dist/template/app/api/agntcms/page/unpublish/route.ts +11 -0
- package/dist/template/app/api/agntcms/preview/enter/route.ts +13 -0
- package/dist/template/app/api/agntcms/preview/exit/route.ts +10 -0
- package/dist/template/app/api/agntcms/preview/issue/route.ts +12 -0
- package/dist/template/app/api/agntcms/template/list/route.ts +15 -0
- package/dist/template/app/apple-icon.svg +9 -0
- package/dist/template/app/icon.svg +9 -0
- package/dist/template/app/layout.tsx +107 -0
- package/dist/template/app/not-found.tsx +75 -0
- package/dist/template/app/robots.ts +33 -0
- package/dist/template/app/sitemap.ts +49 -0
- package/dist/template/content/globals/site-footer.json +53 -0
- package/dist/template/content/globals/site-header.json +18 -0
- package/dist/template/content/globals/site-meta.json +13 -0
- package/dist/template/content/pages/404.json +34 -0
- package/dist/template/content/pages/about.json +307 -0
- package/dist/template/content/pages/article-editor.json +61 -0
- package/dist/template/content/pages/article-schemas.json +61 -0
- package/dist/template/content/pages/blog.json +162 -0
- package/dist/template/content/pages/contact.json +29 -0
- package/dist/template/content/pages/home.json +243 -0
- package/dist/template/content/pages/pricing.json +219 -0
- package/dist/template/content/pages/services.json +177 -0
- package/dist/template/fonts/Satoshi-Medium.woff2 +0 -0
- package/dist/template/fonts/Satoshi-Regular.woff2 +0 -0
- package/dist/template/next.config.ts +6 -0
- package/dist/template/package.json +36 -0
- package/dist/template/postcss.config.mjs +5 -0
- package/dist/template/public/assets/.gitkeep +0 -0
- package/dist/template/public/assets/0418d7ed21f57e7b9e0546725c92b8419daeaa355675d9070fab0c2013cf1524.jpg +0 -0
- package/dist/template/public/assets/0d0475f21aa96435a8ed3cdb2fddcc6278492e76ae842f569432454f4d33631a.jpg +0 -0
- package/dist/template/public/assets/27457a1adee2372030d9876b0d52c44d46be98843999935eaef2526b9b961f12.jpg +0 -0
- package/dist/template/public/assets/3855d91192f0c6120b01427b78ef84e52baa9f4b5a17d4271e41c1bfd95a5b0c.jpg +0 -0
- package/dist/template/public/assets/3b3b90c5084635b746be673ede92a328f002f5621a42c9a5cb89c5e2435652cb.jpg +0 -0
- package/dist/template/public/assets/3e76165a78fd3e7b8ed1e93dee50803ae11110c756c8c1c89229a2dec2bc0abf.jpg +0 -0
- package/dist/template/public/assets/4a3e28f85dc850c347ea0fd931696aa936a6bd45f193e7f1c9328b5896fb272c.jpg +0 -0
- package/dist/template/public/assets/579f67d5fd4c9106c6cdf2ef29f50df934ad0fc2b7849bac1e1cfb1e3f92303b.jpg +0 -0
- package/dist/template/public/assets/5b95209269661bb60fb250f1da682e05b9efa64dd42f350608b299e6bf1f2f35.jpg +0 -0
- package/dist/template/public/assets/5e04b46f8317ef95a7ddf85aedfe5c098a755f05056325d0251eccf95ce51172.jpg +0 -0
- package/dist/template/public/assets/6167a9164be2cf1183bdfdd4946bf9b908570e79e92a2380c25f0bb702422bbd.jpg +0 -0
- package/dist/template/public/assets/75e723ec316de28247924e5dfb73a4b266e10de605e749f150883d280ed8ed16.jpg +0 -0
- package/dist/template/public/assets/816a11e6a7245feaf51bbebf09d1bda3f125b334bc24fc3b8f47b5380a7b4294.jpg +0 -0
- package/dist/template/public/assets/81eba6f5654b8746a9b0cba1a9521a67f2b4afaaefc7c88d66dfab1461270d8f.jpg +0 -0
- package/dist/template/public/assets/82a2ce9e49361098f77a28755779dc5a7c026831cbd135175749c1304e21dacc.jpg +0 -0
- package/dist/template/public/assets/8d7b02ba277ba56bdafdbd47b01f7df6d993c714b4dc2305eb65a1307c09647d.jpg +0 -0
- package/dist/template/public/assets/b303185b471678e4d62f678a1549ee26022f4745407d08cae44ecb1c25352293.jpg +0 -0
- package/dist/template/public/assets/b69b49169c11546100d6dd5280073bc0d84cbbcc6d33fa01ecf6a5866fa42237.jpg +0 -0
- package/dist/template/public/assets/c4d2f0d1a310e457ac722a399693652e3c86c55b294243d5ffc679394e12f9d1.jpg +0 -0
- package/dist/template/public/assets/cae09f4729f8a348b67267c2f2a550be0f3bfa420689afe1a5cf8b7e2b146238.png +0 -0
- package/dist/template/public/assets/cb3acf58b57417a4b26474ba04c096af7103c4320ed2f4f3683f79d7670a055c.jpg +0 -0
- package/dist/template/public/assets/d5a0701b2d156284e0ce851cd2534ec632db34f91fbcbee3b8a7784d45ce78d2.jpg +0 -0
- package/dist/template/public/assets/d6ef1c3f48b0e488521794fb60701da1fd2c3a1621d6ac5f17ccfd4909d3be60.jpg +0 -0
- package/dist/template/public/assets/de249ff9be2539cf0d1ce092de3c57001839b6c3e14fcee3fc31a7b7673ae007.jpg +0 -0
- package/dist/template/public/assets/eac45438956be187b010e24b3289757aa00f227c190d49ee99fea510552dd2ba.jpg +0 -0
- package/dist/template/public/assets/f8b9200065b5436c6a88361839edc2b89be88d3037c84a80d3ee95c32891510b.jpg +0 -0
- package/dist/template/public/assets/placeholder.png +0 -0
- package/dist/template/public/brand/mark.svg +6 -0
- package/dist/template/public/brand/wordmark-light.svg +6 -0
- package/dist/template/public/brand/wordmark.svg +6 -0
- package/dist/template/styles/globals.css +69 -0
- package/dist/template/styles/theme.css +492 -0
- package/dist/template/styles/typography.css +469 -0
- package/dist/template/tsconfig.json +30 -0
- package/package.json +30 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "home",
|
|
3
|
+
"seo": {
|
|
4
|
+
"title": "Servicely™ — we sell anything (demo site)",
|
|
5
|
+
"description": "Demo template for the fictional Servicely™ platform — a service that sells any service. This site is not a real company; it's the demo content shipped with the agntcms template."
|
|
6
|
+
},
|
|
7
|
+
"sections": [
|
|
8
|
+
{
|
|
9
|
+
"id": "hero-1",
|
|
10
|
+
"type": "Hero",
|
|
11
|
+
"data": {
|
|
12
|
+
"eyebrow": "Demo template · Servicely™ · v0.0.1-demo",
|
|
13
|
+
"headline": "# We sell anything. *Including your service.*",
|
|
14
|
+
"lead": "A platform for people who sell services — from dog-walking to AGI rollouts. We don't ask questions. You have a service, we have an intake form. Done. (Heads up: Servicely™ isn't a real company — this is a demo site.)",
|
|
15
|
+
"primaryCta": {
|
|
16
|
+
"type": "internal",
|
|
17
|
+
"slug": "/",
|
|
18
|
+
"label": "Try it (free forever)"
|
|
19
|
+
},
|
|
20
|
+
"secondaryCta": {
|
|
21
|
+
"type": "internal",
|
|
22
|
+
"slug": "/",
|
|
23
|
+
"label": "Watch the 90-second tour"
|
|
24
|
+
},
|
|
25
|
+
"layout": "split",
|
|
26
|
+
"background": "paper",
|
|
27
|
+
"image": {
|
|
28
|
+
"filename": "b69b49169c11546100d6dd5280073bc0d84cbbcc6d33fa01ecf6a5866fa42237.jpg",
|
|
29
|
+
"alt": "Laptop on a warm wooden desk under daylight"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "tabs-1",
|
|
35
|
+
"type": "TabbedFeatures",
|
|
36
|
+
"data": {
|
|
37
|
+
"eyebrow": "Why Servicely",
|
|
38
|
+
"headline": "## Three reasons to *stop worrying.*",
|
|
39
|
+
"lead": "If your competitor is already on Servicely — well, we did warn you. If they aren't yet, congratulations: about a quarter and a half of runway.",
|
|
40
|
+
"entries": [
|
|
41
|
+
{
|
|
42
|
+
"_id": "tab-1",
|
|
43
|
+
"headline": "Any service, one platform",
|
|
44
|
+
"description": "Dog grooming, tax advice, courses on how to sell courses about selling courses. We don't ask what you sell — we hand you an intake form, a price list, and a checkout button. The rest is on you.",
|
|
45
|
+
"cta": {
|
|
46
|
+
"type": "internal",
|
|
47
|
+
"slug": "/",
|
|
48
|
+
"label": "See categories"
|
|
49
|
+
},
|
|
50
|
+
"image": {
|
|
51
|
+
"filename": "d5a0701b2d156284e0ce851cd2534ec632db34f91fbcbee3b8a7784d45ce78d2.jpg",
|
|
52
|
+
"alt": "Hands typing on a keyboard in warm light"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"_id": "tab-2",
|
|
57
|
+
"headline": "Bookings come to you",
|
|
58
|
+
"description": "Customer hits a button. You get a Telegram ping. No CRM with forty-seven fields, no pipeline where leads drown at the 'qualification' stage. The lead is just a real message from a real human.",
|
|
59
|
+
"cta": {
|
|
60
|
+
"type": "internal",
|
|
61
|
+
"slug": "/",
|
|
62
|
+
"label": "How bookings work"
|
|
63
|
+
},
|
|
64
|
+
"image": {
|
|
65
|
+
"filename": "d6ef1c3f48b0e488521794fb60701da1fd2c3a1621d6ac5f17ccfd4909d3be60.jpg",
|
|
66
|
+
"alt": "Sunlit studio with notebook and laptop"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"_id": "tab-3",
|
|
71
|
+
"headline": "AI is somewhere inside",
|
|
72
|
+
"description": "There's AI in here. We're not entirely sure where, but it's definitely in there — otherwise how would we close the next round? It answers easy customer questions while you sleep.",
|
|
73
|
+
"cta": {
|
|
74
|
+
"type": "internal",
|
|
75
|
+
"slug": "/",
|
|
76
|
+
"label": "Try the AI assistant"
|
|
77
|
+
},
|
|
78
|
+
"image": {
|
|
79
|
+
"filename": "3855d91192f0c6120b01427b78ef84e52baa9f4b5a17d4271e41c1bfd95a5b0c.jpg",
|
|
80
|
+
"alt": "Two people pair-working at a warm desk"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "features-1",
|
|
88
|
+
"type": "FeatureGrid",
|
|
89
|
+
"data": {
|
|
90
|
+
"eyebrow": "What's inside",
|
|
91
|
+
"headline": "## Everything you need. *Nothing you don't.*",
|
|
92
|
+
"lead": "",
|
|
93
|
+
"columns": "3",
|
|
94
|
+
"variant": "icon",
|
|
95
|
+
"cards": [
|
|
96
|
+
{
|
|
97
|
+
"_id": "card-1",
|
|
98
|
+
"iconSvg": "<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M9 21V9\"/></svg>",
|
|
99
|
+
"stat": "",
|
|
100
|
+
"label": "Dashboard",
|
|
101
|
+
"body": "Login, password, dark mode. Like a normal app. No 'ask your account manager to send you an invite link.'"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"_id": "card-2",
|
|
105
|
+
"iconSvg": "<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M8 6l-6 6 6 6M16 6l6 6-6 6\"/></svg>",
|
|
106
|
+
"stat": "",
|
|
107
|
+
"label": "Price list",
|
|
108
|
+
"body": "From zero to infinity. Decimal point works. You can say 'starting at' or 'on request' — we'll cope."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"_id": "card-3",
|
|
112
|
+
"iconSvg": "<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18M12 3a14 14 0 010 18M12 3a14 14 0 000 18\"/></svg>",
|
|
113
|
+
"stat": "",
|
|
114
|
+
"label": "Analytics",
|
|
115
|
+
"body": "The graph goes up. If it doesn't, we'll ask design to flip the axis. (Joke. Mostly.)"
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"footerCta": {
|
|
119
|
+
"type": "internal",
|
|
120
|
+
"slug": "/",
|
|
121
|
+
"label": "See all features"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "imagetext-1",
|
|
127
|
+
"type": "ImageText",
|
|
128
|
+
"data": {
|
|
129
|
+
"eyebrow": "Real workflow",
|
|
130
|
+
"headline": "## Launch in a day, *not a quarter.*",
|
|
131
|
+
"body": "Sign-up is thirty seconds. Profile setup is ten minutes. First booking lands somewhere between 'today' and 'when the algorithm decides.'\n\nNo Salesforce integration. No 'let's pick this up next sprint.' No 'an account executive will reach out within three business days.' Use the time you saved on the four-day week that's allegedly coming any year now.",
|
|
132
|
+
"imagePosition": "left",
|
|
133
|
+
"background": "paper",
|
|
134
|
+
"primaryCta": {
|
|
135
|
+
"type": "internal",
|
|
136
|
+
"slug": "/",
|
|
137
|
+
"label": "Read a customer story"
|
|
138
|
+
},
|
|
139
|
+
"secondaryCta": {
|
|
140
|
+
"type": "external",
|
|
141
|
+
"url": "",
|
|
142
|
+
"label": ""
|
|
143
|
+
},
|
|
144
|
+
"image": {
|
|
145
|
+
"filename": "0d0475f21aa96435a8ed3cdb2fddcc6278492e76ae842f569432454f4d33631a.jpg",
|
|
146
|
+
"alt": "Coffee cup beside a workbook on a warm desk"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "newsletter-1",
|
|
152
|
+
"type": "Newsletter",
|
|
153
|
+
"data": {
|
|
154
|
+
"headline": "## One email a month. *No filler.*",
|
|
155
|
+
"emailPlaceholder": "you@company.com",
|
|
156
|
+
"buttonLabel": "Subscribe",
|
|
157
|
+
"helperText": "one email a month · unsubscribe in one click"
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "articles-1",
|
|
162
|
+
"type": "FeaturedArticles",
|
|
163
|
+
"data": {
|
|
164
|
+
"eyebrow": "From the blog",
|
|
165
|
+
"headline": "## Notes from the *operations room.*",
|
|
166
|
+
"lead": "Honest writing about tools, AI, layoffs disguised as 'efficiency reviews,' and why the four-day week is still mostly marketing.",
|
|
167
|
+
"columns": "3",
|
|
168
|
+
"articles": [
|
|
169
|
+
{
|
|
170
|
+
"_id": "art-1",
|
|
171
|
+
"category": "Engineering",
|
|
172
|
+
"title": "Why we moved schemas next to components",
|
|
173
|
+
"excerpt": "A short essay on how the JSON-sidecar pattern fell apart in three real codebases.",
|
|
174
|
+
"meta": "8 min · Tom L.",
|
|
175
|
+
"link": {
|
|
176
|
+
"type": "internal",
|
|
177
|
+
"slug": "article-schemas",
|
|
178
|
+
"label": "Read article"
|
|
179
|
+
},
|
|
180
|
+
"image": {
|
|
181
|
+
"filename": "cae09f4729f8a348b67267c2f2a550be0f3bfa420689afe1a5cf8b7e2b146238.png",
|
|
182
|
+
"alt": "Warm photograph evoking shipping"
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"_id": "art-2",
|
|
187
|
+
"category": "Editor",
|
|
188
|
+
"title": "The twelve booking forms we refused to ship",
|
|
189
|
+
"excerpt": "Sticky toolbars, modal overlays, and the publish button that pretends it's a save button.",
|
|
190
|
+
"meta": "6 min · Mira S.",
|
|
191
|
+
"link": {
|
|
192
|
+
"type": "internal",
|
|
193
|
+
"slug": "article-editor",
|
|
194
|
+
"label": "Read article"
|
|
195
|
+
},
|
|
196
|
+
"image": {
|
|
197
|
+
"filename": "de249ff9be2539cf0d1ce092de3c57001839b6c3e14fcee3fc31a7b7673ae007.jpg",
|
|
198
|
+
"alt": "Open notebook in warm light"
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"_id": "art-3",
|
|
203
|
+
"category": "AI",
|
|
204
|
+
"title": "Our AI replied to the customer — the customer didn't notice yet",
|
|
205
|
+
"excerpt": "When the AI has the schema and a copy of the price list, it stops asking permission. Here's how that works.",
|
|
206
|
+
"meta": "11 min · Tom L.",
|
|
207
|
+
"link": {
|
|
208
|
+
"type": "internal",
|
|
209
|
+
"slug": "/",
|
|
210
|
+
"label": "Read article"
|
|
211
|
+
},
|
|
212
|
+
"image": {
|
|
213
|
+
"filename": "b303185b471678e4d62f678a1549ee26022f4745407d08cae44ecb1c25352293.jpg",
|
|
214
|
+
"alt": "Person editing on a laptop in warm light"
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "banner-1",
|
|
222
|
+
"type": "Banner",
|
|
223
|
+
"data": {
|
|
224
|
+
"headline": "## Stop deliberating. *Start selling.*",
|
|
225
|
+
"lead": "Two minutes to a working profile. No discovery calls. No 'let's loop in the whole growth team.'",
|
|
226
|
+
"primaryCta": {
|
|
227
|
+
"type": "internal",
|
|
228
|
+
"slug": "/",
|
|
229
|
+
"label": "Start free"
|
|
230
|
+
},
|
|
231
|
+
"secondaryCta": {
|
|
232
|
+
"type": "internal",
|
|
233
|
+
"slug": "/",
|
|
234
|
+
"label": "Book a walkthrough"
|
|
235
|
+
},
|
|
236
|
+
"image": {
|
|
237
|
+
"filename": "d6ef1c3f48b0e488521794fb60701da1fd2c3a1621d6ac5f17ccfd4909d3be60.jpg",
|
|
238
|
+
"alt": "Sunlit studio with workspace"
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
]
|
|
243
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "pricing",
|
|
3
|
+
"seo": {
|
|
4
|
+
"title": "Pricing · Servicely™ (demo)",
|
|
5
|
+
"description": "Demo pricing page. The prices are fictional, just like the company. This is a template — handy for showing a SaaS plan layout."
|
|
6
|
+
},
|
|
7
|
+
"sections": [
|
|
8
|
+
{
|
|
9
|
+
"id": "hero-1",
|
|
10
|
+
"type": "Hero",
|
|
11
|
+
"data": {
|
|
12
|
+
"eyebrow": "Pricing",
|
|
13
|
+
"headline": "# Pricing made *simple.*",
|
|
14
|
+
"lead": "One number per plan. No quotes, no add-ons, no enterprise tier hidden behind a contact form. (The numbers below are made up too — this is a demo.)",
|
|
15
|
+
"primaryCta": {
|
|
16
|
+
"type": "external",
|
|
17
|
+
"url": "",
|
|
18
|
+
"label": ""
|
|
19
|
+
},
|
|
20
|
+
"secondaryCta": {
|
|
21
|
+
"type": "external",
|
|
22
|
+
"url": "",
|
|
23
|
+
"label": ""
|
|
24
|
+
},
|
|
25
|
+
"layout": "stacked-center",
|
|
26
|
+
"background": "paper-2",
|
|
27
|
+
"image": {
|
|
28
|
+
"filename": "",
|
|
29
|
+
"alt": ""
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "plans-1",
|
|
35
|
+
"type": "PricingPlans",
|
|
36
|
+
"data": {
|
|
37
|
+
"plans": [
|
|
38
|
+
{
|
|
39
|
+
"_id": "plan-solo",
|
|
40
|
+
"name": "Solo",
|
|
41
|
+
"price": "$0",
|
|
42
|
+
"priceSub": "/ month",
|
|
43
|
+
"featured": false,
|
|
44
|
+
"pitch": "For one person on one project. Free forever — or until investors change their minds.",
|
|
45
|
+
"features": [
|
|
46
|
+
{
|
|
47
|
+
"_id": "f-1",
|
|
48
|
+
"item": "1 project"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"_id": "f-2",
|
|
52
|
+
"item": "1 editor seat"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"_id": "f-3",
|
|
56
|
+
"item": "10k bookings / month"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"_id": "f-4",
|
|
60
|
+
"item": "Community support"
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"cta": {
|
|
64
|
+
"type": "internal",
|
|
65
|
+
"slug": "/",
|
|
66
|
+
"label": "Start free"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"_id": "plan-team",
|
|
71
|
+
"name": "Team",
|
|
72
|
+
"price": "$49",
|
|
73
|
+
"priceSub": "/ editor / month",
|
|
74
|
+
"featured": true,
|
|
75
|
+
"pitch": "For teams that ship every day. Branch previews, role-based access, an AI agent.",
|
|
76
|
+
"features": [
|
|
77
|
+
{
|
|
78
|
+
"_id": "f-1",
|
|
79
|
+
"item": "Unlimited projects"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"_id": "f-2",
|
|
83
|
+
"item": "Unlimited editor seats"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"_id": "f-3",
|
|
87
|
+
"item": "500k bookings / month"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"_id": "f-4",
|
|
91
|
+
"item": "Branch previews & PR flow"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"_id": "f-5",
|
|
95
|
+
"item": "AI agent SDK"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"_id": "f-6",
|
|
99
|
+
"item": "Email support, 24h SLA"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"cta": {
|
|
103
|
+
"type": "internal",
|
|
104
|
+
"slug": "/",
|
|
105
|
+
"label": "Start 14-day trial"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"_id": "plan-studio",
|
|
110
|
+
"name": "Studio",
|
|
111
|
+
"price": "$199",
|
|
112
|
+
"priceSub": "/ editor / month",
|
|
113
|
+
"featured": false,
|
|
114
|
+
"pitch": "For agencies and platform teams running many client sites at once.",
|
|
115
|
+
"features": [
|
|
116
|
+
{
|
|
117
|
+
"_id": "f-1",
|
|
118
|
+
"item": "Everything in Team"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"_id": "f-2",
|
|
122
|
+
"item": "White-label editor"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"_id": "f-3",
|
|
126
|
+
"item": "Custom roles & SSO"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"_id": "f-4",
|
|
130
|
+
"item": "Multi-tenant billing"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"_id": "f-5",
|
|
134
|
+
"item": "Priority support, 4h SLA"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"_id": "f-6",
|
|
138
|
+
"item": "Quarterly roadmap call"
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"cta": {
|
|
142
|
+
"type": "internal",
|
|
143
|
+
"slug": "/contact",
|
|
144
|
+
"label": "Talk to us"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "faq-1",
|
|
152
|
+
"type": "FAQ",
|
|
153
|
+
"data": {
|
|
154
|
+
"eyebrow": "FAQ",
|
|
155
|
+
"headline": "## Questions, asked *honestly.*",
|
|
156
|
+
"lead": "",
|
|
157
|
+
"entries": [
|
|
158
|
+
{
|
|
159
|
+
"_id": "q-1",
|
|
160
|
+
"question": "What counts as an editor seat?",
|
|
161
|
+
"answer": "Anyone who logs into the editor and works with bookings. Developers reading via the API don't count. AI agents don't count (yet)."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"_id": "q-2",
|
|
165
|
+
"question": "Is there a free trial of Team?",
|
|
166
|
+
"answer": "Yes — 14 days, no card required. You can keep using Solo indefinitely if Team isn't the right fit."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"_id": "q-3",
|
|
170
|
+
"question": "Can I self-host?",
|
|
171
|
+
"answer": "The runtime, yes — MIT-licensed. The visual editor is a hosted service for now. Self-host for Studio is on the roadmap, and this time we'll actually ship it."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"_id": "q-4",
|
|
175
|
+
"question": "How does AI billing work?",
|
|
176
|
+
"answer": "You bring your own API key (Anthropic, OpenAI, in-house). Servicely doesn't mark up tokens or charge per generation. You pay exactly what your provider charges."
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"_id": "q-5",
|
|
180
|
+
"question": "Do you do annual discounts?",
|
|
181
|
+
"answer": "Yes — pay annually, get two months free. No haggling, same number for everyone. (We don't have a sales team to haggle with anyway.)"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"_id": "q-6",
|
|
185
|
+
"question": "What if I outgrow 500k bookings?",
|
|
186
|
+
"answer": "You stay on Team and pay $0.20 per additional 1k bookings. We email you the day you cross — no 'surprise' invoice at month-end."
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"_id": "q-7",
|
|
190
|
+
"question": "Can I cancel anytime?",
|
|
191
|
+
"answer": "Yes. No multi-year contracts, no clawback clauses. Your data exports cleanly to JSON in one click."
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "banner-1",
|
|
198
|
+
"type": "Banner",
|
|
199
|
+
"data": {
|
|
200
|
+
"headline": "## Still unsure? *Talk to a human.*",
|
|
201
|
+
"lead": "No SDR queue. You'll get a founder on the call. With a bit of luck, the founder's dog.",
|
|
202
|
+
"primaryCta": {
|
|
203
|
+
"type": "internal",
|
|
204
|
+
"slug": "/contact",
|
|
205
|
+
"label": "Book a 15-min call"
|
|
206
|
+
},
|
|
207
|
+
"secondaryCta": {
|
|
208
|
+
"type": "internal",
|
|
209
|
+
"slug": "/",
|
|
210
|
+
"label": "Or start free"
|
|
211
|
+
},
|
|
212
|
+
"image": {
|
|
213
|
+
"filename": "",
|
|
214
|
+
"alt": ""
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "services",
|
|
3
|
+
"seo": {
|
|
4
|
+
"title": "Services · Servicely™ (demo)",
|
|
5
|
+
"description": "Demo services page for the fictional Servicely™ platform. Setup, migration, AI wiring — all fixed-fee, no 'let's loop in procurement.'"
|
|
6
|
+
},
|
|
7
|
+
"sections": [
|
|
8
|
+
{
|
|
9
|
+
"id": "hero-1",
|
|
10
|
+
"type": "Hero",
|
|
11
|
+
"data": {
|
|
12
|
+
"eyebrow": "Services",
|
|
13
|
+
"headline": "# Everything you need to *launch.*",
|
|
14
|
+
"lead": "From schema design to deploy: a clear menu, fixed scopes, no procurement song-and-dance. This is a demo — the prices below aren't real, we're just rendering the template.",
|
|
15
|
+
"primaryCta": {
|
|
16
|
+
"type": "internal",
|
|
17
|
+
"slug": "/contact",
|
|
18
|
+
"label": "Talk to us"
|
|
19
|
+
},
|
|
20
|
+
"secondaryCta": {
|
|
21
|
+
"type": "internal",
|
|
22
|
+
"slug": "/pricing",
|
|
23
|
+
"label": "See pricing"
|
|
24
|
+
},
|
|
25
|
+
"layout": "stacked-center",
|
|
26
|
+
"background": "paper-2",
|
|
27
|
+
"image": {
|
|
28
|
+
"filename": "5e04b46f8317ef95a7ddf85aedfe5c098a755f05056325d0251eccf95ce51172.jpg",
|
|
29
|
+
"alt": "Laptop on a warm wooden desk in daylight"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "imagetext-1",
|
|
35
|
+
"type": "ImageText",
|
|
36
|
+
"data": {
|
|
37
|
+
"eyebrow": "01 · Setup",
|
|
38
|
+
"headline": "## From signup to *live profile* in five days.",
|
|
39
|
+
"body": "We mount Servicely™ onto your existing stack — whether that's HubSpot, Airtable, or the Google Sheet your whole team has been living in since 2018.\n\nIncluded: price-list setup, customer import, a preview environment, and a one-hour handover for the team. After the handover we say 'ping us if anything,' and we mean it.",
|
|
40
|
+
"imagePosition": "left",
|
|
41
|
+
"background": "paper",
|
|
42
|
+
"primaryCta": {
|
|
43
|
+
"type": "internal",
|
|
44
|
+
"slug": "/",
|
|
45
|
+
"label": "See the setup checklist"
|
|
46
|
+
},
|
|
47
|
+
"secondaryCta": {
|
|
48
|
+
"type": "external",
|
|
49
|
+
"url": "",
|
|
50
|
+
"label": ""
|
|
51
|
+
},
|
|
52
|
+
"image": {
|
|
53
|
+
"filename": "eac45438956be187b010e24b3289757aa00f227c190d49ee99fea510552dd2ba.jpg",
|
|
54
|
+
"alt": "Warm process photo"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "imagetext-2",
|
|
60
|
+
"type": "ImageText",
|
|
61
|
+
"data": {
|
|
62
|
+
"eyebrow": "02 · Migration",
|
|
63
|
+
"headline": "## Move off your *old CRM,* cleanly.",
|
|
64
|
+
"body": "Most migrations stall on three things: duplicate customers, the 'misc' field, and tags created by someone who left two years ago. We've done it eleven times.\n\nFixed-fee migration: we move the data, dedupe, and leave you with a green CI on day one. No 'oh, we have another old database we forgot about.'",
|
|
65
|
+
"imagePosition": "right",
|
|
66
|
+
"background": "paper",
|
|
67
|
+
"primaryCta": {
|
|
68
|
+
"type": "internal",
|
|
69
|
+
"slug": "/",
|
|
70
|
+
"label": "See migration playbook"
|
|
71
|
+
},
|
|
72
|
+
"secondaryCta": {
|
|
73
|
+
"type": "external",
|
|
74
|
+
"url": "",
|
|
75
|
+
"label": ""
|
|
76
|
+
},
|
|
77
|
+
"image": {
|
|
78
|
+
"filename": "8d7b02ba277ba56bdafdbd47b01f7df6d993c714b4dc2305eb65a1307c09647d.jpg",
|
|
79
|
+
"alt": "Warm migration / hands-on workshop photo"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "imagetext-3",
|
|
85
|
+
"type": "ImageText",
|
|
86
|
+
"data": {
|
|
87
|
+
"eyebrow": "03 · AI workflows",
|
|
88
|
+
"headline": "## Wire your *AI agent* into the editor.",
|
|
89
|
+
"body": "Whatever AI assistant your team uses — Claude, ChatGPT, in-house — we wire it to Servicely via API. With a proper action history and a log of who the agent accidentally laid off.\n\nOutput: a working AI that handles bookings, plus the eval harness to keep it from promising a customer a 70% discount.",
|
|
90
|
+
"imagePosition": "left",
|
|
91
|
+
"background": "paper",
|
|
92
|
+
"primaryCta": {
|
|
93
|
+
"type": "internal",
|
|
94
|
+
"slug": "/contact",
|
|
95
|
+
"label": "Talk to us"
|
|
96
|
+
},
|
|
97
|
+
"secondaryCta": {
|
|
98
|
+
"type": "external",
|
|
99
|
+
"url": "",
|
|
100
|
+
"label": ""
|
|
101
|
+
},
|
|
102
|
+
"image": {
|
|
103
|
+
"filename": "5b95209269661bb60fb250f1da682e05b9efa64dd42f350608b299e6bf1f2f35.jpg",
|
|
104
|
+
"alt": "Warm focused work session"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "features-1",
|
|
110
|
+
"type": "FeatureGrid",
|
|
111
|
+
"data": {
|
|
112
|
+
"eyebrow": "How we work",
|
|
113
|
+
"headline": "## A four-step *engagement.*",
|
|
114
|
+
"lead": "No discovery deck. No two-week onboarding. Pick a service, we ship.",
|
|
115
|
+
"columns": "4",
|
|
116
|
+
"variant": "step",
|
|
117
|
+
"cards": [
|
|
118
|
+
{
|
|
119
|
+
"_id": "s-1",
|
|
120
|
+
"iconSvg": "",
|
|
121
|
+
"stat": "01",
|
|
122
|
+
"label": "Scoping call",
|
|
123
|
+
"body": "Forty-five minutes. We confirm fit and the fixed price. No pre-sales theatre."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"_id": "s-2",
|
|
127
|
+
"iconSvg": "",
|
|
128
|
+
"stat": "02",
|
|
129
|
+
"label": "Repo access",
|
|
130
|
+
"body": "You add us to one repo. We work in branches, like adults."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"_id": "s-3",
|
|
134
|
+
"iconSvg": "",
|
|
135
|
+
"stat": "03",
|
|
136
|
+
"label": "Build sprint",
|
|
137
|
+
"body": "5–10 working days. Daily Loom updates, not a 9am standup."
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"_id": "s-4",
|
|
141
|
+
"iconSvg": "",
|
|
142
|
+
"stat": "04",
|
|
143
|
+
"label": "Handover",
|
|
144
|
+
"body": "One-hour walkthrough. Recorded. Done."
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"footerCta": {
|
|
148
|
+
"type": "external",
|
|
149
|
+
"url": "",
|
|
150
|
+
"label": ""
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "banner-1",
|
|
156
|
+
"type": "Banner",
|
|
157
|
+
"data": {
|
|
158
|
+
"headline": "## Stop scoping. *Start shipping.*",
|
|
159
|
+
"lead": "",
|
|
160
|
+
"primaryCta": {
|
|
161
|
+
"type": "internal",
|
|
162
|
+
"slug": "/contact",
|
|
163
|
+
"label": "Book a 15-min call"
|
|
164
|
+
},
|
|
165
|
+
"secondaryCta": {
|
|
166
|
+
"type": "external",
|
|
167
|
+
"url": "mailto:founders@servicely.demo",
|
|
168
|
+
"label": "Email founders@servicely.demo"
|
|
169
|
+
},
|
|
170
|
+
"image": {
|
|
171
|
+
"filename": "",
|
|
172
|
+
"alt": ""
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
Binary file
|
|
Binary file
|