kofi-stack-template-generator 2.1.45 → 2.1.46
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/.turbo/turbo-build.log +5 -5
- package/dist/index.js +1384 -589
- package/package.json +2 -2
- package/src/templates.generated.ts +21 -21
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/about.ts +22 -22
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/faqs.ts +39 -39
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/automation.ts +35 -35
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/custom-fields.ts +58 -58
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/dashboard.ts +46 -46
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/index.ts +4 -4
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/monetization.ts +64 -64
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/seo.ts +65 -65
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/features/templates.ts +55 -58
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/home.ts +145 -145
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/index.ts +55 -55
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/posts.ts +231 -221
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/pricing.ts +27 -27
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/privacy.ts +3 -3
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/terms.ts +6 -6
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/use-cases/b2b-vendor-hubs.ts +63 -62
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/use-cases/communities.ts +62 -62
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/use-cases/index.ts +4 -4
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/use-cases/local-services.ts +62 -62
- package/templates/marketing/payload/src/endpoints/seed/directoryhub/use-cases/marketplaces.ts +66 -66
package/dist/index.js
CHANGED
|
@@ -3944,7 +3944,7 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
3944
3944
|
format: 0,
|
|
3945
3945
|
mode: "normal",
|
|
3946
3946
|
style: "",
|
|
3947
|
-
text: "We
|
|
3947
|
+
text: "We're building the future of team productivity",
|
|
3948
3948
|
version: 1,
|
|
3949
3949
|
},
|
|
3950
3950
|
],
|
|
@@ -3963,7 +3963,7 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
3963
3963
|
format: 0,
|
|
3964
3964
|
mode: "normal",
|
|
3965
3965
|
style: "",
|
|
3966
|
-
text: "
|
|
3966
|
+
text: "SaaSify makes it easy for teams to collaborate, automate workflows, and scale their operations \u2014 all in one powerful platform.",
|
|
3967
3967
|
version: 1,
|
|
3968
3968
|
},
|
|
3969
3969
|
],
|
|
@@ -3987,9 +3987,9 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
3987
3987
|
blockType: "featureShowcase",
|
|
3988
3988
|
blockName: "Our Mission",
|
|
3989
3989
|
label: "Our Mission",
|
|
3990
|
-
headline: "
|
|
3990
|
+
headline: "Making powerful tools accessible to every team",
|
|
3991
3991
|
description: createParagraph(
|
|
3992
|
-
"
|
|
3992
|
+
"Great software shouldn't require a huge budget or dedicated IT team. We believe every organization deserves access to the tools that help them do their best work. SaaSify brings together the best of project management, collaboration, and automation in one intuitive platform that grows with your team.",
|
|
3993
3993
|
),
|
|
3994
3994
|
link: {
|
|
3995
3995
|
type: "custom",
|
|
@@ -3999,9 +3999,9 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
3999
3999
|
},
|
|
4000
4000
|
imagePosition: "right",
|
|
4001
4001
|
features: [
|
|
4002
|
-
{ text: "No
|
|
4003
|
-
{ text: "
|
|
4004
|
-
{ text: "Enterprise-grade
|
|
4002
|
+
{ text: "No technical skills required" },
|
|
4003
|
+
{ text: "100+ integrations built-in" },
|
|
4004
|
+
{ text: "Enterprise-grade security" },
|
|
4005
4005
|
{ text: "Scale as you grow" },
|
|
4006
4006
|
],
|
|
4007
4007
|
},
|
|
@@ -4010,9 +4010,9 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4010
4010
|
blockType: "proofBanner",
|
|
4011
4011
|
blockName: "Impact Stats",
|
|
4012
4012
|
style: "withBackground",
|
|
4013
|
-
headline: "Trusted by
|
|
4013
|
+
headline: "Trusted by teams worldwide",
|
|
4014
4014
|
subtext:
|
|
4015
|
-
"Join
|
|
4015
|
+
"Join thousands of teams who have transformed how they work with SaaSify",
|
|
4016
4016
|
},
|
|
4017
4017
|
// Values Grid
|
|
4018
4018
|
{
|
|
@@ -4027,7 +4027,7 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4027
4027
|
icon: "zap",
|
|
4028
4028
|
title: "Simplicity First",
|
|
4029
4029
|
description: createParagraph(
|
|
4030
|
-
"We remove complexity so you can focus on
|
|
4030
|
+
"We remove complexity so you can focus on what matters most.",
|
|
4031
4031
|
),
|
|
4032
4032
|
},
|
|
4033
4033
|
{
|
|
@@ -4036,7 +4036,7 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4036
4036
|
icon: "rocket",
|
|
4037
4037
|
title: "Built for Growth",
|
|
4038
4038
|
description: createParagraph(
|
|
4039
|
-
"Every feature is designed to help
|
|
4039
|
+
"Every feature is designed to help your team scale sustainably.",
|
|
4040
4040
|
),
|
|
4041
4041
|
},
|
|
4042
4042
|
{
|
|
@@ -4061,7 +4061,7 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4061
4061
|
icon: "globe",
|
|
4062
4062
|
title: "Quality Matters",
|
|
4063
4063
|
description: createParagraph(
|
|
4064
|
-
"We build tools that
|
|
4064
|
+
"We build tools that are reliable, fast, and delightful to use.",
|
|
4065
4065
|
),
|
|
4066
4066
|
},
|
|
4067
4067
|
{
|
|
@@ -4080,19 +4080,19 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4080
4080
|
blockType: "featureShowcase",
|
|
4081
4081
|
blockName: "Our Story",
|
|
4082
4082
|
label: "Our Story",
|
|
4083
|
-
headline: "
|
|
4083
|
+
headline: "Born from real frustrations",
|
|
4084
4084
|
description: createParagraph(
|
|
4085
|
-
"
|
|
4085
|
+
"SaaSify started when our founders experienced firsthand how fragmented and frustrating work tools had become. Juggling dozens of apps, losing context between tools, and spending more time managing work than doing it. We built the platform we wished we had \u2014 one that brings everything together and just works.",
|
|
4086
4086
|
),
|
|
4087
4087
|
link: {
|
|
4088
4088
|
type: "custom",
|
|
4089
4089
|
url: "/sign-up",
|
|
4090
|
-
label: "Start
|
|
4090
|
+
label: "Start free trial",
|
|
4091
4091
|
appearance: "default",
|
|
4092
4092
|
},
|
|
4093
4093
|
imagePosition: "left",
|
|
4094
4094
|
features: [
|
|
4095
|
-
{ text: "Founded by
|
|
4095
|
+
{ text: "Founded by operators, for operators" },
|
|
4096
4096
|
{ text: "Bootstrapped and profitable" },
|
|
4097
4097
|
{ text: "Customer-funded development" },
|
|
4098
4098
|
{ text: "Global remote team" },
|
|
@@ -4136,7 +4136,7 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4136
4136
|
format: 0,
|
|
4137
4137
|
mode: "normal",
|
|
4138
4138
|
style: "",
|
|
4139
|
-
text: "Have questions about
|
|
4139
|
+
text: "Have questions about SaaSify? We'd love to hear from you. Send us a message and our team will respond within 24 hours.",
|
|
4140
4140
|
version: 1,
|
|
4141
4141
|
},
|
|
4142
4142
|
],
|
|
@@ -4169,14 +4169,14 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4169
4169
|
blockType: "proofBanner",
|
|
4170
4170
|
blockName: "Footer CTA",
|
|
4171
4171
|
style: "centered",
|
|
4172
|
-
headline: "Ready to
|
|
4173
|
-
subtext: "Join
|
|
4172
|
+
headline: "Ready to transform how your team works?",
|
|
4173
|
+
subtext: "Join thousands of teams building their future with SaaSify.",
|
|
4174
4174
|
links: [
|
|
4175
4175
|
{
|
|
4176
4176
|
link: {
|
|
4177
4177
|
type: "custom",
|
|
4178
4178
|
appearance: "default",
|
|
4179
|
-
label: "Start
|
|
4179
|
+
label: "Start free trial",
|
|
4180
4180
|
url: "/sign-up",
|
|
4181
4181
|
},
|
|
4182
4182
|
},
|
|
@@ -4193,8 +4193,8 @@ export const directoryHubAbout = ({ contactForm }: AboutArgs): Partial<Page> =>
|
|
|
4193
4193
|
],
|
|
4194
4194
|
meta: {
|
|
4195
4195
|
description:
|
|
4196
|
-
"Learn about
|
|
4197
|
-
title: "About
|
|
4196
|
+
"Learn about SaaSify \u2014 the platform that makes it easy to collaborate, automate, and scale. Built by operators, for operators.",
|
|
4197
|
+
title: "About SaaSify \u2014 Our Mission & Story",
|
|
4198
4198
|
},
|
|
4199
4199
|
title: "About",
|
|
4200
4200
|
}
|
|
@@ -4206,33 +4206,33 @@ import { createParagraph } from "./richtext-helper"
|
|
|
4206
4206
|
export const faqData: Partial<Faq>[] = [
|
|
4207
4207
|
// Getting Started FAQs
|
|
4208
4208
|
{
|
|
4209
|
-
question: "How quickly can I
|
|
4209
|
+
question: "How quickly can I get my team started?",
|
|
4210
4210
|
answer: createParagraph(
|
|
4211
|
-
"Most
|
|
4211
|
+
"Most teams are up and running within hours. Invite your team members, configure your workspace, and start collaborating immediately. No lengthy setup or technical expertise required.",
|
|
4212
4212
|
),
|
|
4213
4213
|
category: "getting-started",
|
|
4214
4214
|
order: 1,
|
|
4215
4215
|
},
|
|
4216
4216
|
{
|
|
4217
|
-
question: "Do I need technical skills to use
|
|
4217
|
+
question: "Do I need technical skills to use SaaSify?",
|
|
4218
4218
|
answer: createParagraph(
|
|
4219
|
-
"No technical skills required.
|
|
4219
|
+
"No technical skills required. Our intuitive interface lets anyone configure workflows, set up integrations, and manage their workspace without writing any code.",
|
|
4220
4220
|
),
|
|
4221
4221
|
category: "getting-started",
|
|
4222
4222
|
order: 2,
|
|
4223
4223
|
},
|
|
4224
4224
|
{
|
|
4225
|
-
question: "Can I import
|
|
4225
|
+
question: "Can I import data from other tools?",
|
|
4226
4226
|
answer: createParagraph(
|
|
4227
|
-
"Yes!
|
|
4227
|
+
"Yes! Import data via CSV or use our native integrations to sync data from tools like Salesforce, HubSpot, Notion, and more. We also offer migration assistance for larger accounts.",
|
|
4228
4228
|
),
|
|
4229
4229
|
category: "getting-started",
|
|
4230
4230
|
order: 3,
|
|
4231
4231
|
},
|
|
4232
4232
|
{
|
|
4233
|
-
question: "What
|
|
4233
|
+
question: "What teams and use cases is SaaSify best for?",
|
|
4234
4234
|
answer: createParagraph(
|
|
4235
|
-
"
|
|
4235
|
+
"SaaSify works for any team that needs to collaborate and get work done: sales, marketing, product, operations, customer success, and more. Our flexible platform adapts to your workflows.",
|
|
4236
4236
|
),
|
|
4237
4237
|
category: "getting-started",
|
|
4238
4238
|
order: 4,
|
|
@@ -4242,7 +4242,7 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4242
4242
|
{
|
|
4243
4243
|
question: "Is there a free plan?",
|
|
4244
4244
|
answer: createParagraph(
|
|
4245
|
-
"Yes! Start with our Free plan to
|
|
4245
|
+
"Yes! Start with our Free plan for up to 3 users. Explore the platform, set up your workspace, and upgrade anytime to unlock more users and advanced features.",
|
|
4246
4246
|
),
|
|
4247
4247
|
category: "pricing",
|
|
4248
4248
|
order: 1,
|
|
@@ -4250,7 +4250,7 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4250
4250
|
{
|
|
4251
4251
|
question: "What payment methods do you accept?",
|
|
4252
4252
|
answer: createParagraph(
|
|
4253
|
-
"We accept all major credit cards (Visa, Mastercard, American Express)
|
|
4253
|
+
"We accept all major credit cards (Visa, Mastercard, American Express) through Stripe. Annual plans can also be paid via invoice for qualifying accounts.",
|
|
4254
4254
|
),
|
|
4255
4255
|
category: "pricing",
|
|
4256
4256
|
order: 2,
|
|
@@ -4272,9 +4272,9 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4272
4272
|
order: 4,
|
|
4273
4273
|
},
|
|
4274
4274
|
{
|
|
4275
|
-
question: "What happens if
|
|
4275
|
+
question: "What happens if my team grows beyond my plan limits?",
|
|
4276
4276
|
answer: createParagraph(
|
|
4277
|
-
"
|
|
4277
|
+
"We'll notify you when approaching your user limit. You can upgrade your plan to increase limits, or we'll help you optimize your current plan to get the most value.",
|
|
4278
4278
|
),
|
|
4279
4279
|
category: "pricing",
|
|
4280
4280
|
order: 5,
|
|
@@ -4282,7 +4282,7 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4282
4282
|
{
|
|
4283
4283
|
question: "Is there a refund policy?",
|
|
4284
4284
|
answer: createParagraph(
|
|
4285
|
-
"We offer a 14-day money-back guarantee
|
|
4285
|
+
"We offer a 14-day money-back guarantee on all paid plans. If you're not satisfied within the first 14 days, contact support for a full refund, no questions asked.",
|
|
4286
4286
|
),
|
|
4287
4287
|
category: "pricing",
|
|
4288
4288
|
order: 6,
|
|
@@ -4290,49 +4290,49 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4290
4290
|
|
|
4291
4291
|
// Features FAQs
|
|
4292
4292
|
{
|
|
4293
|
-
question: "
|
|
4293
|
+
question: "What integrations does SaaSify support?",
|
|
4294
4294
|
answer: createParagraph(
|
|
4295
|
-
"
|
|
4295
|
+
"We integrate with 100+ tools including Slack, Salesforce, HubSpot, Jira, Notion, Google Workspace, Microsoft 365, and more. New integrations are added regularly based on customer requests.",
|
|
4296
4296
|
),
|
|
4297
4297
|
category: "features",
|
|
4298
4298
|
order: 1,
|
|
4299
4299
|
},
|
|
4300
4300
|
{
|
|
4301
|
-
question: "How does
|
|
4301
|
+
question: "How does reporting and analytics work?",
|
|
4302
4302
|
answer: createParagraph(
|
|
4303
|
-
"
|
|
4303
|
+
"Real-time dashboards show key metrics for your team and projects. Create custom reports, schedule automated delivery to stakeholders, and export data anytime for deeper analysis.",
|
|
4304
4304
|
),
|
|
4305
4305
|
category: "features",
|
|
4306
4306
|
order: 2,
|
|
4307
4307
|
},
|
|
4308
4308
|
{
|
|
4309
|
-
question: "Can
|
|
4309
|
+
question: "Can team members manage their own workspaces?",
|
|
4310
4310
|
answer: createParagraph(
|
|
4311
|
-
"Yes!
|
|
4311
|
+
"Yes! Team members can customize their workspace, set personal preferences, and manage their own workflows within your organization's guidelines. Admins maintain control over permissions.",
|
|
4312
4312
|
),
|
|
4313
4313
|
category: "features",
|
|
4314
4314
|
order: 3,
|
|
4315
4315
|
},
|
|
4316
4316
|
{
|
|
4317
|
-
question: "
|
|
4317
|
+
question: "Is there an API available?",
|
|
4318
4318
|
answer: createParagraph(
|
|
4319
|
-
"Yes!
|
|
4319
|
+
"Yes! Our REST API is available on Pro and Business plans. Use it to build custom integrations, automate workflows programmatically, or connect SaaSify to your internal tools.",
|
|
4320
4320
|
),
|
|
4321
4321
|
category: "features",
|
|
4322
4322
|
order: 4,
|
|
4323
4323
|
},
|
|
4324
4324
|
{
|
|
4325
|
-
question: "Can
|
|
4325
|
+
question: "Can I automate workflows?",
|
|
4326
4326
|
answer: createParagraph(
|
|
4327
|
-
"Absolutely.
|
|
4327
|
+
"Absolutely. Our visual workflow builder lets you automate approvals, notifications, data syncing, and more without writing code. Set triggers, conditions, and actions in minutes.",
|
|
4328
4328
|
),
|
|
4329
4329
|
category: "features",
|
|
4330
4330
|
order: 5,
|
|
4331
4331
|
},
|
|
4332
4332
|
{
|
|
4333
|
-
question: "
|
|
4333
|
+
question: "Do you support custom fields and data types?",
|
|
4334
4334
|
answer: createParagraph(
|
|
4335
|
-
"Yes!
|
|
4335
|
+
"Yes! Create custom fields to capture any data your team needs. We support text, numbers, dates, dropdowns, checkboxes, file attachments, and more.",
|
|
4336
4336
|
),
|
|
4337
4337
|
category: "features",
|
|
4338
4338
|
order: 6,
|
|
@@ -4342,15 +4342,15 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4342
4342
|
{
|
|
4343
4343
|
question: "Where is my data hosted?",
|
|
4344
4344
|
answer: createParagraph(
|
|
4345
|
-
"All data is hosted on secure
|
|
4345
|
+
"All data is hosted on secure AWS infrastructure in US and EU regions. We maintain a 99.9% uptime SLA with automatic failover and regular backups.",
|
|
4346
4346
|
),
|
|
4347
4347
|
category: "technical",
|
|
4348
4348
|
order: 1,
|
|
4349
4349
|
},
|
|
4350
4350
|
{
|
|
4351
|
-
question: "Is
|
|
4351
|
+
question: "Is SaaSify GDPR compliant?",
|
|
4352
4352
|
answer: createParagraph(
|
|
4353
|
-
"Yes. We
|
|
4353
|
+
"Yes. We're fully GDPR and CCPA compliant. We provide data processing agreements, consent management tools, and data export/deletion capabilities to help you meet your obligations.",
|
|
4354
4354
|
),
|
|
4355
4355
|
category: "technical",
|
|
4356
4356
|
order: 2,
|
|
@@ -4358,15 +4358,15 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4358
4358
|
{
|
|
4359
4359
|
question: "Can I export my data?",
|
|
4360
4360
|
answer: createParagraph(
|
|
4361
|
-
"Yes! Export your
|
|
4361
|
+
"Yes! Export all your data anytime via CSV or API. You own your data and can take it with you if you ever decide to leave. No lock-in, no hassle.",
|
|
4362
4362
|
),
|
|
4363
4363
|
category: "technical",
|
|
4364
4364
|
order: 3,
|
|
4365
4365
|
},
|
|
4366
4366
|
{
|
|
4367
|
-
question: "How secure is
|
|
4367
|
+
question: "How secure is SaaSify?",
|
|
4368
4368
|
answer: createParagraph(
|
|
4369
|
-
"
|
|
4369
|
+
"We're SOC 2 Type II certified with end-to-end encryption, SSO/SAML support, and regular third-party security audits. Your data security is our top priority.",
|
|
4370
4370
|
),
|
|
4371
4371
|
category: "technical",
|
|
4372
4372
|
order: 4,
|
|
@@ -4376,7 +4376,7 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4376
4376
|
{
|
|
4377
4377
|
question: "What support options are available?",
|
|
4378
4378
|
answer: createParagraph(
|
|
4379
|
-
"All plans include email support with 24-hour response times.
|
|
4379
|
+
"All plans include email support with 24-hour response times. Pro plans add live chat support. Business plans include a dedicated customer success manager and phone support.",
|
|
4380
4380
|
),
|
|
4381
4381
|
category: "support",
|
|
4382
4382
|
order: 1,
|
|
@@ -4384,7 +4384,7 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4384
4384
|
{
|
|
4385
4385
|
question: "Do you offer onboarding assistance?",
|
|
4386
4386
|
answer: createParagraph(
|
|
4387
|
-
"Yes! All paid plans include onboarding guides and video tutorials.
|
|
4387
|
+
"Yes! All paid plans include onboarding guides and video tutorials. Pro and Business plans include personalized onboarding calls to help you get set up for success.",
|
|
4388
4388
|
),
|
|
4389
4389
|
category: "support",
|
|
4390
4390
|
order: 2,
|
|
@@ -4392,7 +4392,7 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4392
4392
|
{
|
|
4393
4393
|
question: "Can I request new features?",
|
|
4394
4394
|
answer: createParagraph(
|
|
4395
|
-
"Absolutely!
|
|
4395
|
+
"Absolutely! Submit feature requests through our feedback portal. Many of our most popular features came directly from customer suggestions. We prioritize based on demand.",
|
|
4396
4396
|
),
|
|
4397
4397
|
category: "support",
|
|
4398
4398
|
order: 3,
|
|
@@ -4400,17 +4400,17 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4400
4400
|
|
|
4401
4401
|
// General FAQs
|
|
4402
4402
|
{
|
|
4403
|
-
question: "What makes
|
|
4403
|
+
question: "What makes SaaSify different from other platforms?",
|
|
4404
4404
|
answer: createParagraph(
|
|
4405
|
-
"
|
|
4405
|
+
"SaaSify brings together the best of project management, CRM, and collaboration tools in one unified platform designed for how modern teams actually work. No more app switching or lost context.",
|
|
4406
4406
|
),
|
|
4407
4407
|
category: "general",
|
|
4408
4408
|
order: 1,
|
|
4409
4409
|
},
|
|
4410
4410
|
{
|
|
4411
|
-
question: "Can I use
|
|
4411
|
+
question: "Can I use SaaSify for multiple teams?",
|
|
4412
4412
|
answer: createParagraph(
|
|
4413
|
-
"Yes! Our
|
|
4413
|
+
"Yes! Our Business plan supports unlimited teams and workspaces with unified billing and cross-team visibility. Perfect for organizations with multiple departments.",
|
|
4414
4414
|
),
|
|
4415
4415
|
category: "general",
|
|
4416
4416
|
order: 2,
|
|
@@ -4418,22 +4418,21 @@ export const faqData: Partial<Faq>[] = [
|
|
|
4418
4418
|
{
|
|
4419
4419
|
question: "How do I contact sales?",
|
|
4420
4420
|
answer: createParagraph(
|
|
4421
|
-
"For sales inquiries, contact us at sales@
|
|
4421
|
+
"For sales inquiries, contact us at sales@saasify.com or book a demo through our website. Our team will help you understand which plan and features are right for your needs.",
|
|
4422
4422
|
),
|
|
4423
4423
|
category: "general",
|
|
4424
4424
|
order: 3,
|
|
4425
4425
|
},
|
|
4426
4426
|
]
|
|
4427
4427
|
`,
|
|
4428
|
-
"marketing/payload/src/endpoints/seed/directoryhub/features/automation.ts":
|
|
4429
|
-
"marketing/payload/src/endpoints/seed/directoryhub/features/custom-fields.ts": `import type { Page } from "@/payload-types"
|
|
4428
|
+
"marketing/payload/src/endpoints/seed/directoryhub/features/automation.ts": `import type { Page } from "@/payload-types"
|
|
4430
4429
|
import { createParagraph } from "../richtext-helper"
|
|
4431
4430
|
|
|
4432
|
-
export const
|
|
4431
|
+
export const automationPage = (): Partial<Page> => {
|
|
4433
4432
|
return {
|
|
4434
|
-
slug: "features/
|
|
4433
|
+
slug: "features/automation",
|
|
4435
4434
|
_status: "published",
|
|
4436
|
-
title: "
|
|
4435
|
+
title: "Automation",
|
|
4437
4436
|
hero: {
|
|
4438
4437
|
type: "lowImpact",
|
|
4439
4438
|
richText: {
|
|
@@ -4449,7 +4448,7 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4449
4448
|
format: 0,
|
|
4450
4449
|
mode: "normal",
|
|
4451
4450
|
style: "",
|
|
4452
|
-
text: "
|
|
4451
|
+
text: "Eliminate busywork with smart automation",
|
|
4453
4452
|
version: 1,
|
|
4454
4453
|
},
|
|
4455
4454
|
],
|
|
@@ -4468,7 +4467,7 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4468
4467
|
format: 0,
|
|
4469
4468
|
mode: "normal",
|
|
4470
4469
|
style: "",
|
|
4471
|
-
text: "
|
|
4470
|
+
text: "Build powerful automations without code. Automate approvals, notifications, data entry, and repetitive tasks. Let your team focus on work that matters.",
|
|
4472
4471
|
version: 1,
|
|
4473
4472
|
},
|
|
4474
4473
|
],
|
|
@@ -4490,7 +4489,7 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4490
4489
|
link: {
|
|
4491
4490
|
type: "custom",
|
|
4492
4491
|
appearance: "default",
|
|
4493
|
-
label: "Start
|
|
4492
|
+
label: "Start free trial",
|
|
4494
4493
|
url: "/sign-up",
|
|
4495
4494
|
},
|
|
4496
4495
|
},
|
|
@@ -4498,7 +4497,7 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4498
4497
|
link: {
|
|
4499
4498
|
type: "custom",
|
|
4500
4499
|
appearance: "outline",
|
|
4501
|
-
label: "See
|
|
4500
|
+
label: "See automation examples",
|
|
4502
4501
|
url: "/features",
|
|
4503
4502
|
},
|
|
4504
4503
|
},
|
|
@@ -4507,118 +4506,348 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4507
4506
|
layout: [
|
|
4508
4507
|
{
|
|
4509
4508
|
blockType: "featureShowcase",
|
|
4510
|
-
blockName: "
|
|
4511
|
-
label: "
|
|
4512
|
-
headline: "
|
|
4509
|
+
blockName: "Visual Builder",
|
|
4510
|
+
label: "No-Code Builder",
|
|
4511
|
+
headline: "Build automations visually, no code required",
|
|
4513
4512
|
description: createParagraph(
|
|
4514
|
-
"
|
|
4513
|
+
"Our visual workflow builder makes automation accessible to everyone. Drag and drop triggers, conditions, and actions to create powerful automations in minutes.",
|
|
4515
4514
|
),
|
|
4516
4515
|
link: {
|
|
4517
4516
|
type: "custom",
|
|
4518
|
-
label: "
|
|
4519
|
-
url: "/
|
|
4517
|
+
label: "Try the workflow builder",
|
|
4518
|
+
url: "/sign-up",
|
|
4520
4519
|
appearance: "default",
|
|
4521
4520
|
},
|
|
4522
4521
|
imagePosition: "right",
|
|
4523
4522
|
features: [
|
|
4524
|
-
{ text: "
|
|
4525
|
-
{ text: "
|
|
4526
|
-
{ text: "
|
|
4527
|
-
{ text: "
|
|
4523
|
+
{ text: "Drag-and-drop interface" },
|
|
4524
|
+
{ text: "Pre-built templates" },
|
|
4525
|
+
{ text: "Test before you deploy" },
|
|
4526
|
+
{ text: "Version history" },
|
|
4528
4527
|
],
|
|
4529
4528
|
},
|
|
4530
4529
|
{
|
|
4531
4530
|
blockType: "featureShowcase",
|
|
4532
|
-
blockName: "
|
|
4533
|
-
label: "Smart
|
|
4534
|
-
headline: "
|
|
4531
|
+
blockName: "Triggers & Actions",
|
|
4532
|
+
label: "Smart Triggers",
|
|
4533
|
+
headline: "React to any event automatically",
|
|
4535
4534
|
description: createParagraph(
|
|
4536
|
-
"
|
|
4535
|
+
"Trigger automations based on form submissions, status changes, dates, or custom conditions. Chain multiple actions together for complex workflows.",
|
|
4537
4536
|
),
|
|
4538
4537
|
link: {
|
|
4539
4538
|
type: "custom",
|
|
4540
|
-
label: "
|
|
4539
|
+
label: "Explore triggers",
|
|
4541
4540
|
url: "/features",
|
|
4542
4541
|
appearance: "default",
|
|
4543
4542
|
},
|
|
4544
4543
|
imagePosition: "left",
|
|
4545
4544
|
features: [
|
|
4546
|
-
{ text: "
|
|
4547
|
-
{ text: "
|
|
4548
|
-
{ text: "
|
|
4549
|
-
{ text: "
|
|
4545
|
+
{ text: "Event-based triggers" },
|
|
4546
|
+
{ text: "Scheduled automations" },
|
|
4547
|
+
{ text: "Conditional logic" },
|
|
4548
|
+
{ text: "Multi-step workflows" },
|
|
4549
|
+
],
|
|
4550
|
+
},
|
|
4551
|
+
{
|
|
4552
|
+
blockType: "featureShowcase",
|
|
4553
|
+
blockName: "Cross-App Automation",
|
|
4554
|
+
label: "Connected Actions",
|
|
4555
|
+
headline: "Automate across all your tools",
|
|
4556
|
+
description: createParagraph(
|
|
4557
|
+
"Connect automations to Slack, email, Salesforce, and 100+ other tools. When something happens in SaaSify, trigger actions anywhere in your tech stack.",
|
|
4558
|
+
),
|
|
4559
|
+
link: {
|
|
4560
|
+
type: "custom",
|
|
4561
|
+
label: "See integrations",
|
|
4562
|
+
url: "/features/integrations",
|
|
4563
|
+
appearance: "default",
|
|
4564
|
+
},
|
|
4565
|
+
imagePosition: "right",
|
|
4566
|
+
features: [
|
|
4567
|
+
{ text: "100+ app integrations" },
|
|
4568
|
+
{ text: "Custom webhooks" },
|
|
4569
|
+
{ text: "API actions" },
|
|
4570
|
+
{ text: "Two-way data sync" },
|
|
4571
|
+
],
|
|
4572
|
+
},
|
|
4573
|
+
{
|
|
4574
|
+
blockType: "bentoFeatures",
|
|
4575
|
+
blockName: "Automation Features",
|
|
4576
|
+
heading: "Automation that saves hours every week",
|
|
4577
|
+
subheading: "Focus on meaningful work while automation handles the rest",
|
|
4578
|
+
features: [
|
|
4579
|
+
{
|
|
4580
|
+
size: "small",
|
|
4581
|
+
style: "gradient",
|
|
4582
|
+
icon: "zap",
|
|
4583
|
+
stat: "10x",
|
|
4584
|
+
title: "Faster Operations",
|
|
4585
|
+
description: createParagraph("Automate repetitive tasks instantly."),
|
|
4586
|
+
},
|
|
4587
|
+
{
|
|
4588
|
+
size: "small",
|
|
4589
|
+
style: "accent",
|
|
4590
|
+
icon: "settings",
|
|
4591
|
+
title: "No-Code Setup",
|
|
4592
|
+
description: createParagraph("Build automations without developers."),
|
|
4593
|
+
},
|
|
4594
|
+
{
|
|
4595
|
+
size: "small",
|
|
4596
|
+
style: "default",
|
|
4597
|
+
icon: "rocket",
|
|
4598
|
+
title: "Instant Triggers",
|
|
4599
|
+
description: createParagraph("React to events in real-time."),
|
|
4600
|
+
},
|
|
4601
|
+
{
|
|
4602
|
+
size: "small",
|
|
4603
|
+
style: "primary",
|
|
4604
|
+
icon: "layers",
|
|
4605
|
+
title: "Webhook Support",
|
|
4606
|
+
description: createParagraph("Connect to any external service."),
|
|
4607
|
+
},
|
|
4608
|
+
{
|
|
4609
|
+
size: "small",
|
|
4610
|
+
style: "default",
|
|
4611
|
+
icon: "database",
|
|
4612
|
+
title: "Action History",
|
|
4613
|
+
description: createParagraph("Full logs of all automated actions."),
|
|
4614
|
+
},
|
|
4615
|
+
{
|
|
4616
|
+
size: "small",
|
|
4617
|
+
style: "default",
|
|
4618
|
+
icon: "shield",
|
|
4619
|
+
title: "Fail-Safe Design",
|
|
4620
|
+
description: createParagraph("Automatic retries and error handling."),
|
|
4621
|
+
},
|
|
4622
|
+
],
|
|
4623
|
+
},
|
|
4624
|
+
{
|
|
4625
|
+
blockType: "proofBanner",
|
|
4626
|
+
blockName: "CTA Section",
|
|
4627
|
+
style: "centered",
|
|
4628
|
+
headline: "Let automation do the work",
|
|
4629
|
+
subtext: "Set up workflows once and save hours every week. Start automating today.",
|
|
4630
|
+
links: [
|
|
4631
|
+
{
|
|
4632
|
+
link: {
|
|
4633
|
+
type: "custom",
|
|
4634
|
+
appearance: "default",
|
|
4635
|
+
label: "Start free trial",
|
|
4636
|
+
url: "/sign-up",
|
|
4637
|
+
},
|
|
4638
|
+
},
|
|
4639
|
+
{
|
|
4640
|
+
link: {
|
|
4641
|
+
type: "custom",
|
|
4642
|
+
appearance: "outline",
|
|
4643
|
+
label: "See all features",
|
|
4644
|
+
url: "/features",
|
|
4645
|
+
},
|
|
4646
|
+
},
|
|
4647
|
+
],
|
|
4648
|
+
},
|
|
4649
|
+
],
|
|
4650
|
+
meta: {
|
|
4651
|
+
description:
|
|
4652
|
+
"Build powerful automations without code. Automate approvals, notifications, and cross-app workflows with SaaSify's visual automation builder.",
|
|
4653
|
+
title: "Automation \u2014 SaaSify No-Code Workflow Builder",
|
|
4654
|
+
},
|
|
4655
|
+
}
|
|
4656
|
+
}
|
|
4657
|
+
`,
|
|
4658
|
+
"marketing/payload/src/endpoints/seed/directoryhub/features/custom-fields.ts": `import type { Page } from "@/payload-types"
|
|
4659
|
+
import { createParagraph } from "../richtext-helper"
|
|
4660
|
+
|
|
4661
|
+
export const workflowsPage = (): Partial<Page> => {
|
|
4662
|
+
return {
|
|
4663
|
+
slug: "features/workflows",
|
|
4664
|
+
_status: "published",
|
|
4665
|
+
title: "Workflows",
|
|
4666
|
+
hero: {
|
|
4667
|
+
type: "lowImpact",
|
|
4668
|
+
richText: {
|
|
4669
|
+
root: {
|
|
4670
|
+
type: "root",
|
|
4671
|
+
children: [
|
|
4672
|
+
{
|
|
4673
|
+
type: "heading",
|
|
4674
|
+
children: [
|
|
4675
|
+
{
|
|
4676
|
+
type: "text",
|
|
4677
|
+
detail: 0,
|
|
4678
|
+
format: 0,
|
|
4679
|
+
mode: "normal",
|
|
4680
|
+
style: "",
|
|
4681
|
+
text: "Build custom processes without code",
|
|
4682
|
+
version: 1,
|
|
4683
|
+
},
|
|
4684
|
+
],
|
|
4685
|
+
direction: "ltr" as const,
|
|
4686
|
+
format: "" as const,
|
|
4687
|
+
indent: 0,
|
|
4688
|
+
tag: "h1",
|
|
4689
|
+
version: 1,
|
|
4690
|
+
},
|
|
4691
|
+
{
|
|
4692
|
+
type: "paragraph",
|
|
4693
|
+
children: [
|
|
4694
|
+
{
|
|
4695
|
+
type: "text",
|
|
4696
|
+
detail: 0,
|
|
4697
|
+
format: 0,
|
|
4698
|
+
mode: "normal",
|
|
4699
|
+
style: "",
|
|
4700
|
+
text: "Create workflows that match exactly how your team works. Visual builders, conditional logic, and templates make it easy to digitize any process.",
|
|
4701
|
+
version: 1,
|
|
4702
|
+
},
|
|
4703
|
+
],
|
|
4704
|
+
direction: "ltr" as const,
|
|
4705
|
+
format: "" as const,
|
|
4706
|
+
indent: 0,
|
|
4707
|
+
textFormat: 0,
|
|
4708
|
+
version: 1,
|
|
4709
|
+
},
|
|
4710
|
+
],
|
|
4711
|
+
direction: "ltr" as const,
|
|
4712
|
+
format: "" as const,
|
|
4713
|
+
indent: 0,
|
|
4714
|
+
version: 1,
|
|
4715
|
+
},
|
|
4716
|
+
},
|
|
4717
|
+
links: [
|
|
4718
|
+
{
|
|
4719
|
+
link: {
|
|
4720
|
+
type: "custom",
|
|
4721
|
+
appearance: "default",
|
|
4722
|
+
label: "Start free trial",
|
|
4723
|
+
url: "/sign-up",
|
|
4724
|
+
},
|
|
4725
|
+
},
|
|
4726
|
+
{
|
|
4727
|
+
link: {
|
|
4728
|
+
type: "custom",
|
|
4729
|
+
appearance: "outline",
|
|
4730
|
+
label: "See workflow templates",
|
|
4731
|
+
url: "/templates",
|
|
4732
|
+
},
|
|
4733
|
+
},
|
|
4734
|
+
],
|
|
4735
|
+
},
|
|
4736
|
+
layout: [
|
|
4737
|
+
{
|
|
4738
|
+
blockType: "featureShowcase",
|
|
4739
|
+
blockName: "Visual Builder",
|
|
4740
|
+
label: "Workflow Builder",
|
|
4741
|
+
headline: "Design workflows visually",
|
|
4742
|
+
description: createParagraph(
|
|
4743
|
+
"Drag and drop to create multi-step workflows. Add approvals, conditions, notifications, and integrations. See your entire process at a glance.",
|
|
4744
|
+
),
|
|
4745
|
+
link: {
|
|
4746
|
+
type: "custom",
|
|
4747
|
+
label: "Try the builder",
|
|
4748
|
+
url: "/sign-up",
|
|
4749
|
+
appearance: "default",
|
|
4750
|
+
},
|
|
4751
|
+
imagePosition: "right",
|
|
4752
|
+
features: [
|
|
4753
|
+
{ text: "Drag-and-drop interface" },
|
|
4754
|
+
{ text: "Multi-step workflows" },
|
|
4755
|
+
{ text: "Parallel branches" },
|
|
4756
|
+
{ text: "Visual process maps" },
|
|
4550
4757
|
],
|
|
4551
4758
|
},
|
|
4552
4759
|
{
|
|
4553
4760
|
blockType: "featureShowcase",
|
|
4554
|
-
blockName: "
|
|
4555
|
-
label: "
|
|
4556
|
-
headline: "
|
|
4761
|
+
blockName: "Approvals",
|
|
4762
|
+
label: "Approval Workflows",
|
|
4763
|
+
headline: "Streamline approvals and reviews",
|
|
4557
4764
|
description: createParagraph(
|
|
4558
|
-
"
|
|
4765
|
+
"Route requests to the right approvers automatically. Set up sequential or parallel approvals, escalations, and delegation rules.",
|
|
4559
4766
|
),
|
|
4560
4767
|
link: {
|
|
4561
4768
|
type: "custom",
|
|
4562
|
-
label: "Learn about
|
|
4769
|
+
label: "Learn about approvals",
|
|
4563
4770
|
url: "/features",
|
|
4564
4771
|
appearance: "default",
|
|
4565
4772
|
},
|
|
4773
|
+
imagePosition: "left",
|
|
4774
|
+
features: [
|
|
4775
|
+
{ text: "Multi-level approvals" },
|
|
4776
|
+
{ text: "Automatic escalation" },
|
|
4777
|
+
{ text: "Delegation and backup" },
|
|
4778
|
+
{ text: "Approval history" },
|
|
4779
|
+
],
|
|
4780
|
+
},
|
|
4781
|
+
{
|
|
4782
|
+
blockType: "featureShowcase",
|
|
4783
|
+
blockName: "Templates",
|
|
4784
|
+
label: "Workflow Templates",
|
|
4785
|
+
headline: "Start fast with pre-built templates",
|
|
4786
|
+
description: createParagraph(
|
|
4787
|
+
"Choose from dozens of workflow templates for common processes. Customize to fit your needs or build from scratch.",
|
|
4788
|
+
),
|
|
4789
|
+
link: {
|
|
4790
|
+
type: "custom",
|
|
4791
|
+
label: "Browse templates",
|
|
4792
|
+
url: "/templates",
|
|
4793
|
+
appearance: "default",
|
|
4794
|
+
},
|
|
4566
4795
|
imagePosition: "right",
|
|
4567
4796
|
features: [
|
|
4568
|
-
{ text: "
|
|
4569
|
-
{ text: "
|
|
4570
|
-
{ text: "
|
|
4571
|
-
{ text: "
|
|
4797
|
+
{ text: "50+ workflow templates" },
|
|
4798
|
+
{ text: "Onboarding workflows" },
|
|
4799
|
+
{ text: "Request and approval flows" },
|
|
4800
|
+
{ text: "Project workflows" },
|
|
4572
4801
|
],
|
|
4573
4802
|
},
|
|
4574
4803
|
{
|
|
4575
4804
|
blockType: "bentoFeatures",
|
|
4576
|
-
blockName: "
|
|
4577
|
-
heading: "
|
|
4578
|
-
subheading: "
|
|
4805
|
+
blockName: "Workflow Features",
|
|
4806
|
+
heading: "Workflows for any process",
|
|
4807
|
+
subheading: "From simple approvals to complex multi-department processes",
|
|
4579
4808
|
features: [
|
|
4580
4809
|
{
|
|
4581
4810
|
size: "small",
|
|
4582
4811
|
style: "gradient",
|
|
4583
4812
|
icon: "layers",
|
|
4584
|
-
stat: "
|
|
4585
|
-
title: "
|
|
4586
|
-
description: createParagraph("
|
|
4813
|
+
stat: "50+",
|
|
4814
|
+
title: "Templates",
|
|
4815
|
+
description: createParagraph("Pre-built workflows ready to use."),
|
|
4587
4816
|
},
|
|
4588
4817
|
{
|
|
4589
4818
|
size: "small",
|
|
4590
4819
|
style: "accent",
|
|
4591
4820
|
icon: "settings",
|
|
4592
|
-
title: "
|
|
4593
|
-
description: createParagraph("Visual
|
|
4821
|
+
title: "No-Code Builder",
|
|
4822
|
+
description: createParagraph("Visual workflow design interface."),
|
|
4594
4823
|
},
|
|
4595
4824
|
{
|
|
4596
4825
|
size: "small",
|
|
4597
4826
|
style: "default",
|
|
4598
4827
|
icon: "search",
|
|
4599
|
-
title: "
|
|
4600
|
-
description: createParagraph("
|
|
4828
|
+
title: "Forms & Fields",
|
|
4829
|
+
description: createParagraph("Custom forms for data collection."),
|
|
4601
4830
|
},
|
|
4602
4831
|
{
|
|
4603
4832
|
size: "small",
|
|
4604
4833
|
style: "primary",
|
|
4605
4834
|
icon: "database",
|
|
4606
|
-
title: "
|
|
4607
|
-
description: createParagraph("
|
|
4835
|
+
title: "Data Routing",
|
|
4836
|
+
description: createParagraph("Route data based on conditions."),
|
|
4608
4837
|
},
|
|
4609
4838
|
{
|
|
4610
4839
|
size: "small",
|
|
4611
4840
|
style: "default",
|
|
4612
4841
|
icon: "globe",
|
|
4613
|
-
title: "
|
|
4614
|
-
description: createParagraph("
|
|
4842
|
+
title: "Integrations",
|
|
4843
|
+
description: createParagraph("Connect to 100+ apps."),
|
|
4615
4844
|
},
|
|
4616
4845
|
{
|
|
4617
4846
|
size: "small",
|
|
4618
4847
|
style: "default",
|
|
4619
4848
|
icon: "shield",
|
|
4620
|
-
title: "
|
|
4621
|
-
description: createParagraph("
|
|
4849
|
+
title: "Audit Trail",
|
|
4850
|
+
description: createParagraph("Complete history of every workflow."),
|
|
4622
4851
|
},
|
|
4623
4852
|
],
|
|
4624
4853
|
},
|
|
@@ -4626,14 +4855,14 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4626
4855
|
blockType: "proofBanner",
|
|
4627
4856
|
blockName: "CTA Section",
|
|
4628
4857
|
style: "centered",
|
|
4629
|
-
headline: "
|
|
4630
|
-
subtext: "
|
|
4858
|
+
headline: "Digitize your processes today",
|
|
4859
|
+
subtext: "Build custom workflows in minutes. No coding required.",
|
|
4631
4860
|
links: [
|
|
4632
4861
|
{
|
|
4633
4862
|
link: {
|
|
4634
4863
|
type: "custom",
|
|
4635
4864
|
appearance: "default",
|
|
4636
|
-
label: "Start
|
|
4865
|
+
label: "Start free trial",
|
|
4637
4866
|
url: "/sign-up",
|
|
4638
4867
|
},
|
|
4639
4868
|
},
|
|
@@ -4650,8 +4879,8 @@ export const customFieldsPage = (): Partial<Page> => {
|
|
|
4650
4879
|
],
|
|
4651
4880
|
meta: {
|
|
4652
4881
|
description:
|
|
4653
|
-
"
|
|
4654
|
-
title: "
|
|
4882
|
+
"Build custom workflows for any process with SaaSify's visual workflow builder. Approvals, forms, conditions, and integrations without code.",
|
|
4883
|
+
title: "Workflows \u2014 SaaSify Custom Process Builder",
|
|
4655
4884
|
},
|
|
4656
4885
|
}
|
|
4657
4886
|
}
|
|
@@ -4663,7 +4892,7 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4663
4892
|
return {
|
|
4664
4893
|
slug: "features/dashboard",
|
|
4665
4894
|
_status: "published",
|
|
4666
|
-
title: "
|
|
4895
|
+
title: "Dashboard",
|
|
4667
4896
|
hero: {
|
|
4668
4897
|
type: "lowImpact",
|
|
4669
4898
|
richText: {
|
|
@@ -4679,7 +4908,7 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4679
4908
|
format: 0,
|
|
4680
4909
|
mode: "normal",
|
|
4681
4910
|
style: "",
|
|
4682
|
-
text: "
|
|
4911
|
+
text: "Your unified command center",
|
|
4683
4912
|
version: 1,
|
|
4684
4913
|
},
|
|
4685
4914
|
],
|
|
@@ -4698,7 +4927,7 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4698
4927
|
format: 0,
|
|
4699
4928
|
mode: "normal",
|
|
4700
4929
|
style: "",
|
|
4701
|
-
text: "
|
|
4930
|
+
text: "Everything your team needs in one place. Track projects, monitor progress, manage tasks, and collaborate seamlessly from a single intuitive dashboard.",
|
|
4702
4931
|
version: 1,
|
|
4703
4932
|
},
|
|
4704
4933
|
],
|
|
@@ -4720,7 +4949,7 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4720
4949
|
link: {
|
|
4721
4950
|
type: "custom",
|
|
4722
4951
|
appearance: "default",
|
|
4723
|
-
label: "
|
|
4952
|
+
label: "Start free trial",
|
|
4724
4953
|
url: "/sign-up",
|
|
4725
4954
|
},
|
|
4726
4955
|
},
|
|
@@ -4728,8 +4957,8 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4728
4957
|
link: {
|
|
4729
4958
|
type: "custom",
|
|
4730
4959
|
appearance: "outline",
|
|
4731
|
-
label: "
|
|
4732
|
-
url: "/
|
|
4960
|
+
label: "Watch demo",
|
|
4961
|
+
url: "/demo",
|
|
4733
4962
|
},
|
|
4734
4963
|
},
|
|
4735
4964
|
],
|
|
@@ -4737,75 +4966,75 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4737
4966
|
layout: [
|
|
4738
4967
|
{
|
|
4739
4968
|
blockType: "featureShowcase",
|
|
4740
|
-
blockName: "
|
|
4741
|
-
label: "
|
|
4742
|
-
headline: "
|
|
4969
|
+
blockName: "Project Overview",
|
|
4970
|
+
label: "Project Management",
|
|
4971
|
+
headline: "See all your projects at a glance",
|
|
4743
4972
|
description: createParagraph(
|
|
4744
|
-
"
|
|
4973
|
+
"Get a bird's-eye view of every project, task, and deadline. Customizable views let you organize work the way that makes sense for your team.",
|
|
4745
4974
|
),
|
|
4746
4975
|
link: {
|
|
4747
4976
|
type: "custom",
|
|
4748
|
-
label: "See
|
|
4977
|
+
label: "See project views",
|
|
4749
4978
|
url: "/features",
|
|
4750
4979
|
appearance: "default",
|
|
4751
4980
|
},
|
|
4752
4981
|
imagePosition: "right",
|
|
4753
4982
|
features: [
|
|
4754
|
-
{ text: "
|
|
4755
|
-
{ text: "
|
|
4756
|
-
{ text: "
|
|
4757
|
-
{ text: "
|
|
4983
|
+
{ text: "List, board, and calendar views" },
|
|
4984
|
+
{ text: "Custom project templates" },
|
|
4985
|
+
{ text: "Milestone tracking" },
|
|
4986
|
+
{ text: "Dependencies and blockers" },
|
|
4758
4987
|
],
|
|
4759
4988
|
},
|
|
4760
4989
|
{
|
|
4761
4990
|
blockType: "featureShowcase",
|
|
4762
|
-
blockName: "
|
|
4763
|
-
label: "
|
|
4764
|
-
headline: "
|
|
4991
|
+
blockName: "Task Management",
|
|
4992
|
+
label: "Task Tracking",
|
|
4993
|
+
headline: "Never lose track of a task again",
|
|
4765
4994
|
description: createParagraph(
|
|
4766
|
-
"
|
|
4995
|
+
"Create, assign, and track tasks with ease. Set priorities, due dates, and assignees. Get notifications when things change so nothing falls through the cracks.",
|
|
4767
4996
|
),
|
|
4768
4997
|
link: {
|
|
4769
4998
|
type: "custom",
|
|
4770
|
-
label: "Explore
|
|
4999
|
+
label: "Explore task features",
|
|
4771
5000
|
url: "/features",
|
|
4772
5001
|
appearance: "default",
|
|
4773
5002
|
},
|
|
4774
5003
|
imagePosition: "left",
|
|
4775
5004
|
features: [
|
|
4776
|
-
{ text: "
|
|
4777
|
-
{ text: "
|
|
4778
|
-
{ text: "
|
|
4779
|
-
{ text: "
|
|
5005
|
+
{ text: "Drag-and-drop task management" },
|
|
5006
|
+
{ text: "Priority levels and labels" },
|
|
5007
|
+
{ text: "Due dates and reminders" },
|
|
5008
|
+
{ text: "Subtasks and checklists" },
|
|
4780
5009
|
],
|
|
4781
5010
|
},
|
|
4782
5011
|
{
|
|
4783
5012
|
blockType: "featureShowcase",
|
|
4784
|
-
blockName: "
|
|
4785
|
-
label: "
|
|
4786
|
-
headline: "
|
|
5013
|
+
blockName: "Team Collaboration",
|
|
5014
|
+
label: "Team Features",
|
|
5015
|
+
headline: "Collaborate in real-time with your team",
|
|
4787
5016
|
description: createParagraph(
|
|
4788
|
-
"
|
|
5017
|
+
"Comments, mentions, and activity feeds keep everyone in sync. Share files, leave feedback, and make decisions together without leaving the dashboard.",
|
|
4789
5018
|
),
|
|
4790
5019
|
link: {
|
|
4791
5020
|
type: "custom",
|
|
4792
|
-
label: "Learn about
|
|
5021
|
+
label: "Learn about collaboration",
|
|
4793
5022
|
url: "/features",
|
|
4794
5023
|
appearance: "default",
|
|
4795
5024
|
},
|
|
4796
5025
|
imagePosition: "right",
|
|
4797
5026
|
features: [
|
|
4798
|
-
{ text: "
|
|
4799
|
-
{ text: "
|
|
4800
|
-
{ text: "
|
|
4801
|
-
{ text: "
|
|
5027
|
+
{ text: "Comments and @mentions" },
|
|
5028
|
+
{ text: "File sharing and attachments" },
|
|
5029
|
+
{ text: "Activity feed and updates" },
|
|
5030
|
+
{ text: "Team workload view" },
|
|
4802
5031
|
],
|
|
4803
5032
|
},
|
|
4804
5033
|
{
|
|
4805
5034
|
blockType: "bentoFeatures",
|
|
4806
5035
|
blockName: "Dashboard Features",
|
|
4807
|
-
heading: "Everything
|
|
4808
|
-
subheading: "A complete
|
|
5036
|
+
heading: "Everything your team needs",
|
|
5037
|
+
subheading: "A complete workspace without the complexity",
|
|
4809
5038
|
features: [
|
|
4810
5039
|
{
|
|
4811
5040
|
size: "small",
|
|
@@ -4826,21 +5055,21 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4826
5055
|
style: "default",
|
|
4827
5056
|
icon: "search",
|
|
4828
5057
|
title: "Global Search",
|
|
4829
|
-
description: createParagraph("Find any
|
|
5058
|
+
description: createParagraph("Find any project, task, or document instantly."),
|
|
4830
5059
|
},
|
|
4831
5060
|
{
|
|
4832
5061
|
size: "small",
|
|
4833
5062
|
style: "primary",
|
|
4834
5063
|
icon: "shield",
|
|
4835
5064
|
title: "Activity Logs",
|
|
4836
|
-
description: createParagraph("Full audit trail of all
|
|
5065
|
+
description: createParagraph("Full audit trail of all team activity."),
|
|
4837
5066
|
},
|
|
4838
5067
|
{
|
|
4839
5068
|
size: "small",
|
|
4840
5069
|
style: "default",
|
|
4841
5070
|
icon: "settings",
|
|
4842
|
-
title: "
|
|
4843
|
-
description: createParagraph("
|
|
5071
|
+
title: "Customization",
|
|
5072
|
+
description: createParagraph("Personalize your workspace and views."),
|
|
4844
5073
|
},
|
|
4845
5074
|
{
|
|
4846
5075
|
size: "small",
|
|
@@ -4855,14 +5084,14 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4855
5084
|
blockType: "proofBanner",
|
|
4856
5085
|
blockName: "CTA Section",
|
|
4857
5086
|
style: "centered",
|
|
4858
|
-
headline: "
|
|
4859
|
-
subtext: "
|
|
5087
|
+
headline: "Get your team organized today",
|
|
5088
|
+
subtext: "A powerful dashboard that scales with your business. Free to start.",
|
|
4860
5089
|
links: [
|
|
4861
5090
|
{
|
|
4862
5091
|
link: {
|
|
4863
5092
|
type: "custom",
|
|
4864
5093
|
appearance: "default",
|
|
4865
|
-
label: "
|
|
5094
|
+
label: "Start free trial",
|
|
4866
5095
|
url: "/sign-up",
|
|
4867
5096
|
},
|
|
4868
5097
|
},
|
|
@@ -4870,8 +5099,8 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4870
5099
|
link: {
|
|
4871
5100
|
type: "custom",
|
|
4872
5101
|
appearance: "outline",
|
|
4873
|
-
label: "
|
|
4874
|
-
url: "/
|
|
5102
|
+
label: "Watch demo",
|
|
5103
|
+
url: "/demo",
|
|
4875
5104
|
},
|
|
4876
5105
|
},
|
|
4877
5106
|
],
|
|
@@ -4879,24 +5108,265 @@ export const dashboardPage = (): Partial<Page> => {
|
|
|
4879
5108
|
],
|
|
4880
5109
|
meta: {
|
|
4881
5110
|
description:
|
|
4882
|
-
"Manage
|
|
4883
|
-
title: "
|
|
5111
|
+
"Manage projects, track tasks, and collaborate with your team from one unified dashboard. Intuitive interface, powerful features, no complexity.",
|
|
5112
|
+
title: "Dashboard \u2014 SaaSify Team Command Center",
|
|
4884
5113
|
},
|
|
4885
5114
|
}
|
|
4886
5115
|
}
|
|
4887
5116
|
`,
|
|
4888
|
-
"marketing/payload/src/endpoints/seed/directoryhub/features/index.ts": 'export {
|
|
4889
|
-
"marketing/payload/src/endpoints/seed/directoryhub/features/monetization.ts":
|
|
4890
|
-
"marketing/payload/src/endpoints/seed/directoryhub/features/seo.ts": `import type { Page } from "@/payload-types"
|
|
5117
|
+
"marketing/payload/src/endpoints/seed/directoryhub/features/index.ts": 'export { integrationsPage } from "./templates"\nexport { analyticsPage } from "./monetization"\nexport { securityPage } from "./seo"\nexport { dashboardPage } from "./dashboard"\nexport { automationPage } from "./automation"\nexport { workflowsPage } from "./custom-fields"\n',
|
|
5118
|
+
"marketing/payload/src/endpoints/seed/directoryhub/features/monetization.ts": `import type { Page } from "@/payload-types"
|
|
4891
5119
|
import { createParagraph } from "../richtext-helper"
|
|
4892
5120
|
|
|
4893
|
-
export const
|
|
5121
|
+
export const analyticsPage = (): Partial<Page> => {
|
|
5122
|
+
return {
|
|
5123
|
+
slug: "features/analytics",
|
|
5124
|
+
_status: "published",
|
|
5125
|
+
title: "Analytics & Reporting",
|
|
5126
|
+
hero: {
|
|
5127
|
+
type: "lowImpact",
|
|
5128
|
+
richText: {
|
|
5129
|
+
root: {
|
|
5130
|
+
type: "root",
|
|
5131
|
+
children: [
|
|
5132
|
+
{
|
|
5133
|
+
type: "heading",
|
|
5134
|
+
children: [
|
|
5135
|
+
{
|
|
5136
|
+
type: "text",
|
|
5137
|
+
detail: 0,
|
|
5138
|
+
format: 0,
|
|
5139
|
+
mode: "normal",
|
|
5140
|
+
style: "",
|
|
5141
|
+
text: "Turn data into actionable insights",
|
|
5142
|
+
version: 1,
|
|
5143
|
+
},
|
|
5144
|
+
],
|
|
5145
|
+
direction: "ltr" as const,
|
|
5146
|
+
format: "" as const,
|
|
5147
|
+
indent: 0,
|
|
5148
|
+
tag: "h1",
|
|
5149
|
+
version: 1,
|
|
5150
|
+
},
|
|
5151
|
+
{
|
|
5152
|
+
type: "paragraph",
|
|
5153
|
+
children: [
|
|
5154
|
+
{
|
|
5155
|
+
type: "text",
|
|
5156
|
+
detail: 0,
|
|
5157
|
+
format: 0,
|
|
5158
|
+
mode: "normal",
|
|
5159
|
+
style: "",
|
|
5160
|
+
text: "Real-time dashboards, custom reports, and automated insights help you make data-driven decisions. Track the metrics that matter without spreadsheet chaos.",
|
|
5161
|
+
version: 1,
|
|
5162
|
+
},
|
|
5163
|
+
],
|
|
5164
|
+
direction: "ltr" as const,
|
|
5165
|
+
format: "" as const,
|
|
5166
|
+
indent: 0,
|
|
5167
|
+
textFormat: 0,
|
|
5168
|
+
version: 1,
|
|
5169
|
+
},
|
|
5170
|
+
],
|
|
5171
|
+
direction: "ltr" as const,
|
|
5172
|
+
format: "" as const,
|
|
5173
|
+
indent: 0,
|
|
5174
|
+
version: 1,
|
|
5175
|
+
},
|
|
5176
|
+
},
|
|
5177
|
+
links: [
|
|
5178
|
+
{
|
|
5179
|
+
link: {
|
|
5180
|
+
type: "custom",
|
|
5181
|
+
appearance: "default",
|
|
5182
|
+
label: "Start free trial",
|
|
5183
|
+
url: "/sign-up",
|
|
5184
|
+
},
|
|
5185
|
+
},
|
|
5186
|
+
{
|
|
5187
|
+
link: {
|
|
5188
|
+
type: "custom",
|
|
5189
|
+
appearance: "outline",
|
|
5190
|
+
label: "See demo",
|
|
5191
|
+
url: "/demo",
|
|
5192
|
+
},
|
|
5193
|
+
},
|
|
5194
|
+
],
|
|
5195
|
+
},
|
|
5196
|
+
layout: [
|
|
5197
|
+
{
|
|
5198
|
+
blockType: "featureShowcase",
|
|
5199
|
+
blockName: "Real-Time Dashboards",
|
|
5200
|
+
label: "Live Dashboards",
|
|
5201
|
+
headline: "See what's happening right now",
|
|
5202
|
+
description: createParagraph(
|
|
5203
|
+
"Real-time dashboards update instantly as your team works. Track key metrics, monitor progress, and spot trends the moment they emerge.",
|
|
5204
|
+
),
|
|
5205
|
+
link: {
|
|
5206
|
+
type: "custom",
|
|
5207
|
+
label: "See dashboard examples",
|
|
5208
|
+
url: "/demo",
|
|
5209
|
+
appearance: "default",
|
|
5210
|
+
},
|
|
5211
|
+
imagePosition: "right",
|
|
5212
|
+
features: [
|
|
5213
|
+
{ text: "Real-time data updates" },
|
|
5214
|
+
{ text: "Customizable widgets" },
|
|
5215
|
+
{ text: "Team and individual views" },
|
|
5216
|
+
{ text: "Mobile-friendly dashboards" },
|
|
5217
|
+
],
|
|
5218
|
+
},
|
|
5219
|
+
{
|
|
5220
|
+
blockType: "featureShowcase",
|
|
5221
|
+
blockName: "Custom Reports",
|
|
5222
|
+
label: "Reporting Tools",
|
|
5223
|
+
headline: "Build reports that answer your questions",
|
|
5224
|
+
description: createParagraph(
|
|
5225
|
+
"Create custom reports with drag-and-drop simplicity. Filter, group, and visualize your data exactly how you need it. Schedule reports to deliver automatically.",
|
|
5226
|
+
),
|
|
5227
|
+
link: {
|
|
5228
|
+
type: "custom",
|
|
5229
|
+
label: "Explore report builder",
|
|
5230
|
+
url: "/features",
|
|
5231
|
+
appearance: "default",
|
|
5232
|
+
},
|
|
5233
|
+
imagePosition: "left",
|
|
5234
|
+
features: [
|
|
5235
|
+
{ text: "Drag-and-drop report builder" },
|
|
5236
|
+
{ text: "Multiple chart types" },
|
|
5237
|
+
{ text: "Scheduled report delivery" },
|
|
5238
|
+
{ text: "Export to PDF, CSV, Excel" },
|
|
5239
|
+
],
|
|
5240
|
+
},
|
|
5241
|
+
{
|
|
5242
|
+
blockType: "featureShowcase",
|
|
5243
|
+
blockName: "Team Analytics",
|
|
5244
|
+
label: "Performance Insights",
|
|
5245
|
+
headline: "Understand team performance at a glance",
|
|
5246
|
+
description: createParagraph(
|
|
5247
|
+
"Track productivity, workload distribution, and goal progress. Identify bottlenecks, celebrate wins, and make data-backed decisions about resource allocation.",
|
|
5248
|
+
),
|
|
5249
|
+
link: {
|
|
5250
|
+
type: "custom",
|
|
5251
|
+
label: "View team analytics",
|
|
5252
|
+
url: "/features",
|
|
5253
|
+
appearance: "default",
|
|
5254
|
+
},
|
|
5255
|
+
imagePosition: "right",
|
|
5256
|
+
features: [
|
|
5257
|
+
{ text: "Individual performance metrics" },
|
|
5258
|
+
{ text: "Team workload distribution" },
|
|
5259
|
+
{ text: "Goal tracking and progress" },
|
|
5260
|
+
{ text: "Historical trend analysis" },
|
|
5261
|
+
],
|
|
5262
|
+
},
|
|
5263
|
+
{
|
|
5264
|
+
blockType: "bentoFeatures",
|
|
5265
|
+
blockName: "Analytics Features",
|
|
5266
|
+
heading: "Analytics that drive results",
|
|
5267
|
+
subheading: "From overview dashboards to granular insights",
|
|
5268
|
+
features: [
|
|
5269
|
+
{
|
|
5270
|
+
size: "small",
|
|
5271
|
+
style: "gradient",
|
|
5272
|
+
icon: "barChart",
|
|
5273
|
+
stat: "50+",
|
|
5274
|
+
title: "Built-in Metrics",
|
|
5275
|
+
description: createParagraph("Pre-configured metrics ready to use."),
|
|
5276
|
+
},
|
|
5277
|
+
{
|
|
5278
|
+
size: "small",
|
|
5279
|
+
style: "accent",
|
|
5280
|
+
icon: "zap",
|
|
5281
|
+
title: "Real-Time",
|
|
5282
|
+
description: createParagraph("Data updates in seconds, not hours."),
|
|
5283
|
+
},
|
|
5284
|
+
{
|
|
5285
|
+
size: "small",
|
|
5286
|
+
style: "default",
|
|
5287
|
+
icon: "search",
|
|
5288
|
+
title: "Data Explorer",
|
|
5289
|
+
description: createParagraph("Query and explore raw data."),
|
|
5290
|
+
},
|
|
5291
|
+
{
|
|
5292
|
+
size: "small",
|
|
5293
|
+
style: "primary",
|
|
5294
|
+
icon: "layout",
|
|
5295
|
+
title: "Custom Views",
|
|
5296
|
+
description: createParagraph("Save and share personalized dashboards."),
|
|
5297
|
+
},
|
|
5298
|
+
{
|
|
5299
|
+
size: "small",
|
|
5300
|
+
style: "default",
|
|
5301
|
+
icon: "database",
|
|
5302
|
+
title: "Data Export",
|
|
5303
|
+
description: createParagraph("Export to any format or tool."),
|
|
5304
|
+
},
|
|
5305
|
+
{
|
|
5306
|
+
size: "small",
|
|
5307
|
+
style: "default",
|
|
5308
|
+
icon: "globe",
|
|
5309
|
+
title: "API Access",
|
|
5310
|
+
description: createParagraph("Pull analytics into your own tools."),
|
|
5311
|
+
},
|
|
5312
|
+
],
|
|
5313
|
+
},
|
|
5314
|
+
{
|
|
5315
|
+
blockType: "proofBanner",
|
|
5316
|
+
blockName: "CTA Section",
|
|
5317
|
+
style: "centered",
|
|
5318
|
+
headline: "Start making data-driven decisions",
|
|
5319
|
+
subtext:
|
|
5320
|
+
"Real-time dashboards and custom reports included in every plan. No setup required.",
|
|
5321
|
+
links: [
|
|
5322
|
+
{
|
|
5323
|
+
link: {
|
|
5324
|
+
type: "custom",
|
|
5325
|
+
appearance: "default",
|
|
5326
|
+
label: "Start free trial",
|
|
5327
|
+
url: "/sign-up",
|
|
5328
|
+
},
|
|
5329
|
+
},
|
|
5330
|
+
{
|
|
5331
|
+
link: {
|
|
5332
|
+
type: "custom",
|
|
5333
|
+
appearance: "outline",
|
|
5334
|
+
label: "See a demo",
|
|
5335
|
+
url: "/demo",
|
|
5336
|
+
},
|
|
5337
|
+
},
|
|
5338
|
+
],
|
|
5339
|
+
},
|
|
5340
|
+
],
|
|
5341
|
+
meta: {
|
|
5342
|
+
description:
|
|
5343
|
+
"Real-time dashboards, custom reports, and team analytics. Make data-driven decisions with SaaSify's powerful analytics and reporting tools.",
|
|
5344
|
+
title: "Analytics & Reporting \u2014 SaaSify Business Intelligence",
|
|
5345
|
+
},
|
|
5346
|
+
}
|
|
5347
|
+
}
|
|
5348
|
+
`,
|
|
5349
|
+
"marketing/payload/src/endpoints/seed/directoryhub/features/seo.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const securityPage = (): Partial<Page> => {\n return {\n slug: "features/security",\n _status: "published",\n title: "Security & Compliance",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Enterprise-grade security without the complexity",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "SOC 2 Type II certified with end-to-end encryption, SSO support, and comprehensive audit logs. Your data is protected by the same standards used by Fortune 500 companies.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "View security docs",\n url: "/security",\n },\n },\n ],\n },\n layout: [\n {\n blockType: "featureShowcase",\n blockName: "Data Encryption",\n label: "Data Protection",\n headline: "Your data encrypted at rest and in transit",\n description: createParagraph(\n "AES-256 encryption protects your data at rest, while TLS 1.3 secures all data in transit. Your information is protected by the same standards used by financial institutions.",\n ),\n link: {\n type: "custom",\n label: "Learn about encryption",\n url: "/security",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "AES-256 encryption at rest" },\n { text: "TLS 1.3 for data in transit" },\n { text: "Encrypted backups" },\n { text: "Key management best practices" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Access Control",\n label: "Access Management",\n headline: "Granular permissions and SSO support",\n description: createParagraph(\n "Role-based access control lets you define exactly who can see and do what. SAML SSO integration works with Okta, Azure AD, Google Workspace, and other identity providers.",\n ),\n link: {\n type: "custom",\n label: "Explore access controls",\n url: "/security",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Role-based access control (RBAC)" },\n { text: "SAML SSO integration" },\n { text: "Two-factor authentication" },\n { text: "Session management" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Compliance",\n label: "Compliance & Auditing",\n headline: "Meet compliance requirements with confidence",\n description: createParagraph(\n "SOC 2 Type II certified with comprehensive audit logs and data governance tools. Export reports for auditors and meet GDPR, CCPA, and HIPAA requirements.",\n ),\n link: {\n type: "custom",\n label: "View compliance docs",\n url: "/security",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "SOC 2 Type II certified" },\n { text: "GDPR and CCPA compliant" },\n { text: "Comprehensive audit logs" },\n { text: "Data retention controls" },\n ],\n },\n {\n blockType: "bentoFeatures",\n blockName: "Security Features",\n heading: "Security you can trust",\n subheading: "Enterprise-grade protection without enterprise complexity",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "shield",\n stat: "SOC 2",\n title: "Certified",\n description: createParagraph("Type II certification verified annually."),\n },\n {\n size: "small",\n style: "accent",\n icon: "lock",\n title: "Zero Trust",\n description: createParagraph("Verify every request, every time."),\n },\n {\n size: "small",\n style: "default",\n icon: "globe",\n title: "Global Infrastructure",\n description: createParagraph("Redundant systems across regions."),\n },\n {\n size: "small",\n style: "primary",\n icon: "database",\n title: "Backup & Recovery",\n description: createParagraph("Automated backups with point-in-time recovery."),\n },\n {\n size: "small",\n style: "default",\n icon: "search",\n title: "Threat Detection",\n description: createParagraph("24/7 monitoring for suspicious activity."),\n },\n {\n size: "small",\n style: "default",\n icon: "barChart",\n title: "Security Reports",\n description: createParagraph("Regular penetration testing and audits."),\n },\n ],\n },\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Security that scales with you",\n subtext: "Enterprise-grade protection from day one. SOC 2 certified, GDPR compliant.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Request security docs",\n url: "/contact",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "Enterprise-grade security with SOC 2 Type II certification, end-to-end encryption, SSO support, and comprehensive compliance tools.",\n title: "Security & Compliance \u2014 SaaSify Enterprise Protection",\n },\n }\n}\n',
|
|
5350
|
+
"marketing/payload/src/endpoints/seed/directoryhub/features/templates.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const integrationsPage = (): Partial<Page> => {\n return {\n slug: "features/integrations",\n _status: "published",\n title: "Integrations",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Connect all your tools in one place",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "One-click connections to 100+ apps your team already uses. Sync data, automate workflows, and eliminate context switching.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "View all integrations",\n url: "/integrations",\n },\n },\n ],\n },\n layout: [\n {\n blockType: "featureShowcase",\n blockName: "Native Integrations",\n label: "100+ Integrations",\n headline: "Connect your favorite tools instantly",\n description: createParagraph(\n "Native integrations with Slack, Salesforce, HubSpot, Jira, Notion, Google Workspace, Microsoft 365, and more. Set up in minutes, not days.",\n ),\n link: {\n type: "custom",\n label: "Browse integrations",\n url: "/integrations",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "100+ native integrations" },\n { text: "Two-way data sync" },\n { text: "Real-time updates" },\n { text: "No coding required" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Custom Integrations",\n label: "Developer Tools",\n headline: "Build custom integrations with our API",\n description: createParagraph(\n "REST API and webhooks let you connect any tool or build custom integrations. Comprehensive documentation and SDKs for popular languages.",\n ),\n link: {\n type: "custom",\n label: "View API docs",\n url: "/developers",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "RESTful API access" },\n { text: "Custom webhooks" },\n { text: "SDKs for popular languages" },\n { text: "Detailed documentation" },\n ],\n },\n {\n blockType: "bentoFeatures",\n blockName: "Integration Categories",\n heading: "Integrations for every workflow",\n subheading:\n "Connect your entire tech stack and keep data flowing seamlessly",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "messageSquare",\n title: "Communication",\n description: createParagraph(\n "Slack, Microsoft Teams, Discord, and email integrations.",\n ),\n },\n {\n size: "small",\n style: "accent",\n icon: "users",\n title: "CRM & Sales",\n description: createParagraph(\n "Salesforce, HubSpot, Pipedrive, and more.",\n ),\n },\n {\n size: "small",\n style: "default",\n icon: "folder",\n title: "Project Management",\n description: createParagraph(\n "Jira, Asana, Monday.com, Trello integrations.",\n ),\n },\n {\n size: "small",\n style: "primary",\n icon: "database",\n title: "Data & Storage",\n description: createParagraph(\n "Google Drive, Dropbox, AWS S3, and databases.",\n ),\n },\n {\n size: "small",\n style: "default",\n icon: "barChart",\n title: "Analytics",\n description: createParagraph("Google Analytics, Mixpanel, Amplitude."),\n },\n {\n size: "small",\n style: "default",\n icon: "zap",\n title: "Automation",\n description: createParagraph("Zapier, Make, n8n for custom workflows."),\n },\n ],\n },\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Connect your tools today",\n subtext: "One-click integrations with 100+ apps. Set up in minutes, not days.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "View all integrations",\n url: "/integrations",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "Connect SaaSify with 100+ tools including Slack, Salesforce, HubSpot, and more. Native integrations, custom webhooks, and REST API access.",\n title: "Integrations \u2014 Connect Your Tools with SaaSify",\n },\n }\n}\n',
|
|
5351
|
+
"marketing/payload/src/endpoints/seed/directoryhub/home.ts": `import type { Media, Page } from "@/payload-types"
|
|
5352
|
+
import { createParagraph } from "./richtext-helper"
|
|
5353
|
+
|
|
5354
|
+
interface HomePageParams {
|
|
5355
|
+
heroImage?: Media | null
|
|
5356
|
+
testimonialImages?: (Media | null)[]
|
|
5357
|
+
}
|
|
5358
|
+
|
|
5359
|
+
export const directoryHubHome = ({
|
|
5360
|
+
heroImage,
|
|
5361
|
+
testimonialImages = [],
|
|
5362
|
+
}: HomePageParams = {}): Partial<Page> => {
|
|
4894
5363
|
return {
|
|
4895
|
-
slug: "
|
|
5364
|
+
slug: "home",
|
|
4896
5365
|
_status: "published",
|
|
4897
|
-
title: "SEO Optimization",
|
|
4898
5366
|
hero: {
|
|
4899
|
-
type: "
|
|
5367
|
+
type: "productShowcase",
|
|
5368
|
+
// Include media reference if heroImage was uploaded
|
|
5369
|
+
...(heroImage && { media: heroImage.id }),
|
|
4900
5370
|
richText: {
|
|
4901
5371
|
root: {
|
|
4902
5372
|
type: "root",
|
|
@@ -4910,12 +5380,12 @@ export const seoPage = (): Partial<Page> => {
|
|
|
4910
5380
|
format: 0,
|
|
4911
5381
|
mode: "normal",
|
|
4912
5382
|
style: "",
|
|
4913
|
-
text: "
|
|
5383
|
+
text: "The modern platform for growing teams",
|
|
4914
5384
|
version: 1,
|
|
4915
5385
|
},
|
|
4916
5386
|
],
|
|
4917
|
-
direction: "ltr"
|
|
4918
|
-
format: ""
|
|
5387
|
+
direction: "ltr",
|
|
5388
|
+
format: "",
|
|
4919
5389
|
indent: 0,
|
|
4920
5390
|
tag: "h1",
|
|
4921
5391
|
version: 1,
|
|
@@ -4929,19 +5399,19 @@ export const seoPage = (): Partial<Page> => {
|
|
|
4929
5399
|
format: 0,
|
|
4930
5400
|
mode: "normal",
|
|
4931
5401
|
style: "",
|
|
4932
|
-
text: "
|
|
5402
|
+
text: "Streamline workflows, boost productivity, and scale your business with one powerful platform.",
|
|
4933
5403
|
version: 1,
|
|
4934
5404
|
},
|
|
4935
5405
|
],
|
|
4936
|
-
direction: "ltr"
|
|
4937
|
-
format: ""
|
|
5406
|
+
direction: "ltr",
|
|
5407
|
+
format: "",
|
|
4938
5408
|
indent: 0,
|
|
4939
5409
|
textFormat: 0,
|
|
4940
5410
|
version: 1,
|
|
4941
5411
|
},
|
|
4942
5412
|
],
|
|
4943
|
-
direction: "ltr"
|
|
4944
|
-
format: ""
|
|
5413
|
+
direction: "ltr",
|
|
5414
|
+
format: "",
|
|
4945
5415
|
indent: 0,
|
|
4946
5416
|
version: 1,
|
|
4947
5417
|
},
|
|
@@ -4951,7 +5421,7 @@ export const seoPage = (): Partial<Page> => {
|
|
|
4951
5421
|
link: {
|
|
4952
5422
|
type: "custom",
|
|
4953
5423
|
appearance: "default",
|
|
4954
|
-
label: "Start
|
|
5424
|
+
label: "Start free trial",
|
|
4955
5425
|
url: "/sign-up",
|
|
4956
5426
|
},
|
|
4957
5427
|
},
|
|
@@ -4959,151 +5429,467 @@ export const seoPage = (): Partial<Page> => {
|
|
|
4959
5429
|
link: {
|
|
4960
5430
|
type: "custom",
|
|
4961
5431
|
appearance: "outline",
|
|
4962
|
-
label: "
|
|
4963
|
-
url: "/
|
|
5432
|
+
label: "Watch demo",
|
|
5433
|
+
url: "/demo",
|
|
4964
5434
|
},
|
|
4965
5435
|
},
|
|
4966
5436
|
],
|
|
4967
5437
|
},
|
|
4968
5438
|
layout: [
|
|
5439
|
+
// 1. Logo Banner - Social proof strip
|
|
5440
|
+
{
|
|
5441
|
+
blockType: "logoBanner",
|
|
5442
|
+
blockName: "Trusted By",
|
|
5443
|
+
heading: "Trusted by fast-growing companies everywhere",
|
|
5444
|
+
style: "scroll",
|
|
5445
|
+
logos: [
|
|
5446
|
+
{ name: "TechFlow Inc" },
|
|
5447
|
+
{ name: "Acme Corp" },
|
|
5448
|
+
{ name: "Evergreen HQ" },
|
|
5449
|
+
{ name: "Atlas Network" },
|
|
5450
|
+
{ name: "Beacon Digital" },
|
|
5451
|
+
{ name: "Cascade Systems" },
|
|
5452
|
+
],
|
|
5453
|
+
},
|
|
5454
|
+
|
|
5455
|
+
// 2. Value Proposition - Bird-style headline section
|
|
5456
|
+
{
|
|
5457
|
+
blockType: "proofBanner",
|
|
5458
|
+
blockName: "Value Proposition",
|
|
5459
|
+
style: "centered",
|
|
5460
|
+
headline: "Transform how your team works, collaborates, and grows",
|
|
5461
|
+
subtext:
|
|
5462
|
+
"Every interaction feeds into a powerful platform that powers personalized experiences, seamless collaboration, and intelligent automation across every touchpoint.",
|
|
5463
|
+
links: [
|
|
5464
|
+
{
|
|
5465
|
+
link: {
|
|
5466
|
+
type: "custom",
|
|
5467
|
+
appearance: "default",
|
|
5468
|
+
label: "Start free trial",
|
|
5469
|
+
url: "/sign-up",
|
|
5470
|
+
},
|
|
5471
|
+
},
|
|
5472
|
+
{
|
|
5473
|
+
link: {
|
|
5474
|
+
type: "custom",
|
|
5475
|
+
appearance: "outline",
|
|
5476
|
+
label: "Book a demo",
|
|
5477
|
+
url: "/contact",
|
|
5478
|
+
},
|
|
5479
|
+
},
|
|
5480
|
+
],
|
|
5481
|
+
},
|
|
5482
|
+
|
|
5483
|
+
// 3. Bento Features - Asymmetric bento grid with 8 cards
|
|
5484
|
+
{
|
|
5485
|
+
blockType: "bentoFeatures",
|
|
5486
|
+
blockName: "Get to know SaaSify",
|
|
5487
|
+
heading: "Discover what SaaSify can do",
|
|
5488
|
+
subheading: "Everything you need to work smarter and scale faster",
|
|
5489
|
+
features: [
|
|
5490
|
+
// Position 1: Small (1x1) - top left
|
|
5491
|
+
{
|
|
5492
|
+
size: "small",
|
|
5493
|
+
style: "gradient",
|
|
5494
|
+
icon: "zap",
|
|
5495
|
+
stat: "5x",
|
|
5496
|
+
title: "Faster onboarding",
|
|
5497
|
+
description: createParagraph("Get your team up and running in hours, not weeks."),
|
|
5498
|
+
},
|
|
5499
|
+
// Position 2: Small (1x1) - top middle
|
|
5500
|
+
{
|
|
5501
|
+
size: "small",
|
|
5502
|
+
style: "accent",
|
|
5503
|
+
icon: "rocket",
|
|
5504
|
+
title: "Quick setup",
|
|
5505
|
+
description: createParagraph("Configure your workspace, invite your team, and start collaborating."),
|
|
5506
|
+
},
|
|
5507
|
+
// Position 3: Small (1x1) - top right
|
|
5508
|
+
{
|
|
5509
|
+
size: "small",
|
|
5510
|
+
style: "default",
|
|
5511
|
+
icon: "layers",
|
|
5512
|
+
title: "Powerful integrations",
|
|
5513
|
+
description: createParagraph("Connect with 100+ tools you already use."),
|
|
5514
|
+
},
|
|
5515
|
+
// Position 4: Tall (1x2) - left side spanning 2 rows
|
|
5516
|
+
{
|
|
5517
|
+
size: "tall",
|
|
5518
|
+
style: "primary",
|
|
5519
|
+
icon: "shield",
|
|
5520
|
+
title: "Enterprise security",
|
|
5521
|
+
description: createParagraph(
|
|
5522
|
+
"SOC 2 compliant with end-to-end encryption and complete audit trails for peace of mind.",
|
|
5523
|
+
),
|
|
5524
|
+
},
|
|
5525
|
+
// Position 5: Small (1x1) - row 2, middle
|
|
5526
|
+
{
|
|
5527
|
+
size: "small",
|
|
5528
|
+
style: "default",
|
|
5529
|
+
icon: "globe",
|
|
5530
|
+
stat: "99.9%",
|
|
5531
|
+
title: "Uptime",
|
|
5532
|
+
description: createParagraph("Reliable infrastructure you can count on."),
|
|
5533
|
+
},
|
|
5534
|
+
// Position 6: Small (1x1) - row 2, right
|
|
5535
|
+
{
|
|
5536
|
+
size: "small",
|
|
5537
|
+
style: "default",
|
|
5538
|
+
icon: "globe",
|
|
5539
|
+
title: "Global scale",
|
|
5540
|
+
description: createParagraph("Multi-region with custom domains."),
|
|
5541
|
+
},
|
|
5542
|
+
// Position 7: Small (1x1) - row 3, middle
|
|
5543
|
+
{
|
|
5544
|
+
size: "small",
|
|
5545
|
+
style: "default",
|
|
5546
|
+
icon: "settings",
|
|
5547
|
+
title: "Smart automation",
|
|
5548
|
+
description: createParagraph("Automate repetitive tasks and workflows."),
|
|
5549
|
+
},
|
|
5550
|
+
// Position 8: Small (1x1) - row 3, right
|
|
5551
|
+
{
|
|
5552
|
+
size: "small",
|
|
5553
|
+
style: "default",
|
|
5554
|
+
icon: "layers",
|
|
5555
|
+
title: "Flexible workflows",
|
|
5556
|
+
description: createParagraph("Build custom processes for any use case."),
|
|
5557
|
+
},
|
|
5558
|
+
],
|
|
5559
|
+
},
|
|
5560
|
+
|
|
5561
|
+
// 4. Feature Showcase: Integrations (image right)
|
|
4969
5562
|
{
|
|
4970
5563
|
blockType: "featureShowcase",
|
|
4971
|
-
blockName: "
|
|
4972
|
-
label: "
|
|
4973
|
-
headline: "
|
|
5564
|
+
blockName: "Feature: Integrations",
|
|
5565
|
+
label: "Seamless Integrations",
|
|
5566
|
+
headline: "Connect everything your team uses in one place",
|
|
4974
5567
|
description: createParagraph(
|
|
4975
|
-
"
|
|
5568
|
+
"Integrate with 100+ popular tools including Slack, Salesforce, HubSpot, and more. Two-way sync keeps everything up to date automatically.",
|
|
4976
5569
|
),
|
|
4977
5570
|
link: {
|
|
4978
5571
|
type: "custom",
|
|
4979
|
-
label: "
|
|
4980
|
-
url: "/features",
|
|
5572
|
+
label: "Explore integrations",
|
|
5573
|
+
url: "/features/integrations",
|
|
4981
5574
|
appearance: "default",
|
|
4982
5575
|
},
|
|
4983
5576
|
imagePosition: "right",
|
|
4984
5577
|
features: [
|
|
4985
|
-
{ text: "
|
|
4986
|
-
{ text: "
|
|
4987
|
-
{ text: "
|
|
4988
|
-
{ text: "
|
|
5578
|
+
{ text: "100+ native integrations" },
|
|
5579
|
+
{ text: "Two-way data sync" },
|
|
5580
|
+
{ text: "Custom webhooks" },
|
|
5581
|
+
{ text: "API access included" },
|
|
4989
5582
|
],
|
|
4990
5583
|
},
|
|
5584
|
+
|
|
5585
|
+
// 5. Feature Showcase: Analytics (image left)
|
|
4991
5586
|
{
|
|
4992
5587
|
blockType: "featureShowcase",
|
|
4993
|
-
blockName: "
|
|
4994
|
-
label: "
|
|
4995
|
-
headline: "
|
|
5588
|
+
blockName: "Feature: Analytics",
|
|
5589
|
+
label: "Actionable Analytics",
|
|
5590
|
+
headline: "Make decisions backed by real-time data",
|
|
4996
5591
|
description: createParagraph(
|
|
4997
|
-
"
|
|
5592
|
+
"Track every metric that matters. From team performance to customer insights, get the visibility you need to drive growth.",
|
|
4998
5593
|
),
|
|
4999
5594
|
link: {
|
|
5000
5595
|
type: "custom",
|
|
5001
|
-
label: "
|
|
5002
|
-
url: "/features",
|
|
5596
|
+
label: "Learn about analytics",
|
|
5597
|
+
url: "/features/analytics",
|
|
5003
5598
|
appearance: "default",
|
|
5004
5599
|
},
|
|
5005
5600
|
imagePosition: "left",
|
|
5006
5601
|
features: [
|
|
5007
|
-
{ text: "
|
|
5008
|
-
{ text: "
|
|
5009
|
-
{ text: "
|
|
5010
|
-
{ text: "
|
|
5602
|
+
{ text: "Real-time dashboards" },
|
|
5603
|
+
{ text: "Custom reports" },
|
|
5604
|
+
{ text: "Team performance metrics" },
|
|
5605
|
+
{ text: "Automated insights" },
|
|
5011
5606
|
],
|
|
5012
5607
|
},
|
|
5608
|
+
|
|
5609
|
+
// 6. Feature Showcase: Automation (image right)
|
|
5013
5610
|
{
|
|
5014
5611
|
blockType: "featureShowcase",
|
|
5015
|
-
blockName: "
|
|
5016
|
-
label: "
|
|
5017
|
-
headline: "
|
|
5612
|
+
blockName: "Feature: Automation",
|
|
5613
|
+
label: "Workflow Automation",
|
|
5614
|
+
headline: "Eliminate busywork with smart automation",
|
|
5018
5615
|
description: createParagraph(
|
|
5019
|
-
"
|
|
5616
|
+
"Build powerful workflows without code. Automate approvals, notifications, data entry, and more to focus on what matters.",
|
|
5020
5617
|
),
|
|
5021
5618
|
link: {
|
|
5022
5619
|
type: "custom",
|
|
5023
|
-
label: "See
|
|
5024
|
-
url: "/features",
|
|
5620
|
+
label: "See automation features",
|
|
5621
|
+
url: "/features/automation",
|
|
5025
5622
|
appearance: "default",
|
|
5026
5623
|
},
|
|
5027
5624
|
imagePosition: "right",
|
|
5028
5625
|
features: [
|
|
5029
|
-
{ text: "
|
|
5030
|
-
{ text: "
|
|
5031
|
-
{ text: "
|
|
5032
|
-
{ text: "
|
|
5626
|
+
{ text: "Visual workflow builder" },
|
|
5627
|
+
{ text: "Conditional logic" },
|
|
5628
|
+
{ text: "Scheduled triggers" },
|
|
5629
|
+
{ text: "Cross-app automation" },
|
|
5033
5630
|
],
|
|
5034
5631
|
},
|
|
5632
|
+
|
|
5633
|
+
// 7. Feature Showcase: Collaboration (image left)
|
|
5035
5634
|
{
|
|
5036
|
-
blockType: "
|
|
5037
|
-
blockName: "
|
|
5038
|
-
|
|
5039
|
-
|
|
5635
|
+
blockType: "featureShowcase",
|
|
5636
|
+
blockName: "Feature: Collaboration",
|
|
5637
|
+
label: "Team Collaboration",
|
|
5638
|
+
headline: "Work together seamlessly, from anywhere",
|
|
5639
|
+
description: createParagraph(
|
|
5640
|
+
"Real-time collaboration features keep everyone aligned. Share workspaces, leave comments, and track activity across your entire team.",
|
|
5641
|
+
),
|
|
5642
|
+
link: {
|
|
5643
|
+
type: "custom",
|
|
5644
|
+
label: "Explore collaboration",
|
|
5645
|
+
url: "/features",
|
|
5646
|
+
appearance: "default",
|
|
5647
|
+
},
|
|
5648
|
+
imagePosition: "left",
|
|
5040
5649
|
features: [
|
|
5650
|
+
{ text: "Real-time collaboration" },
|
|
5651
|
+
{ text: "Shared workspaces" },
|
|
5652
|
+
{ text: "Comments and mentions" },
|
|
5653
|
+
{ text: "Activity tracking" },
|
|
5654
|
+
],
|
|
5655
|
+
},
|
|
5656
|
+
|
|
5657
|
+
// 8. Industry Tabs - Team solutions
|
|
5658
|
+
{
|
|
5659
|
+
blockType: "industryTabs",
|
|
5660
|
+
blockName: "Team Solutions",
|
|
5661
|
+
heading: "Solutions that deliver real results",
|
|
5662
|
+
subheading:
|
|
5663
|
+
"Whether you're in sales, marketing, or product, SaaSify adapts to how your team works.",
|
|
5664
|
+
tabs: [
|
|
5041
5665
|
{
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5666
|
+
name: "Sales Teams",
|
|
5667
|
+
stat: "40%",
|
|
5668
|
+
statLabel: "Faster deal cycles with smart pipeline tools",
|
|
5669
|
+
description:
|
|
5670
|
+
"Close deals faster with intelligent pipeline management, automated follow-ups, and real-time insights that help your team hit quota every quarter.",
|
|
5671
|
+
link: {
|
|
5672
|
+
type: "custom",
|
|
5673
|
+
label: "Solutions for sales",
|
|
5674
|
+
url: "/use-cases/sales",
|
|
5675
|
+
appearance: "default",
|
|
5676
|
+
},
|
|
5048
5677
|
},
|
|
5049
5678
|
{
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5679
|
+
name: "Marketing Teams",
|
|
5680
|
+
stat: "3x",
|
|
5681
|
+
statLabel: "Campaign velocity with streamlined workflows",
|
|
5682
|
+
description:
|
|
5683
|
+
"Launch campaigns that convert with collaborative planning, asset management, and performance analytics all in one place.",
|
|
5684
|
+
link: {
|
|
5685
|
+
type: "custom",
|
|
5686
|
+
label: "Solutions for marketing",
|
|
5687
|
+
url: "/use-cases/marketing",
|
|
5688
|
+
appearance: "default",
|
|
5689
|
+
},
|
|
5055
5690
|
},
|
|
5056
5691
|
{
|
|
5057
|
-
|
|
5058
|
-
|
|
5059
|
-
|
|
5060
|
-
|
|
5061
|
-
|
|
5692
|
+
name: "Product Teams",
|
|
5693
|
+
stat: "50%",
|
|
5694
|
+
statLabel: "Faster shipping with better prioritization",
|
|
5695
|
+
description:
|
|
5696
|
+
"Ship features users love with roadmap planning, feedback collection, and release management that keeps everyone aligned.",
|
|
5697
|
+
link: {
|
|
5698
|
+
type: "custom",
|
|
5699
|
+
label: "Solutions for product",
|
|
5700
|
+
url: "/use-cases/product",
|
|
5701
|
+
appearance: "default",
|
|
5702
|
+
},
|
|
5062
5703
|
},
|
|
5063
5704
|
{
|
|
5064
|
-
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
5705
|
+
name: "Operations",
|
|
5706
|
+
stat: "60%",
|
|
5707
|
+
statLabel: "Time saved with process automation",
|
|
5708
|
+
description:
|
|
5709
|
+
"Scale your operations without the chaos. Automate processes, manage resources, and get visibility across your entire organization.",
|
|
5710
|
+
link: {
|
|
5711
|
+
type: "custom",
|
|
5712
|
+
label: "Solutions for ops",
|
|
5713
|
+
url: "/use-cases/operations",
|
|
5714
|
+
appearance: "default",
|
|
5715
|
+
},
|
|
5716
|
+
},
|
|
5717
|
+
],
|
|
5718
|
+
},
|
|
5719
|
+
|
|
5720
|
+
// 9. Testimonials Grid - Bird-style stats with photos
|
|
5721
|
+
{
|
|
5722
|
+
blockType: "testimonialsGrid",
|
|
5723
|
+
blockName: "Customer Stories",
|
|
5724
|
+
heading: "Loved by teams at companies of all sizes",
|
|
5725
|
+
subheading:
|
|
5726
|
+
"See how leading teams use SaaSify to drive growth and productivity.",
|
|
5727
|
+
testimonials: [
|
|
5728
|
+
{
|
|
5729
|
+
...(testimonialImages[0] && { image: testimonialImages[0].id }),
|
|
5730
|
+
stat: "94%",
|
|
5731
|
+
statLabel: "Faster onboarding",
|
|
5732
|
+
quote:
|
|
5733
|
+
"We got our entire team onboarded in under a day. The intuitive interface and powerful integrations saved us weeks of setup time.",
|
|
5734
|
+
author: "Sarah Chen",
|
|
5735
|
+
company: "TechFlow Inc",
|
|
5069
5736
|
},
|
|
5070
5737
|
{
|
|
5071
|
-
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
|
|
5075
|
-
|
|
5738
|
+
...(testimonialImages[1] && { image: testimonialImages[1].id }),
|
|
5739
|
+
stat: "3x",
|
|
5740
|
+
statLabel: "Productivity",
|
|
5741
|
+
quote:
|
|
5742
|
+
"Our team is shipping features faster than ever. The automation tools eliminated hours of manual work every week.",
|
|
5743
|
+
author: "Marcus Rivera",
|
|
5744
|
+
company: "Beacon Digital",
|
|
5076
5745
|
},
|
|
5077
5746
|
{
|
|
5078
|
-
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5747
|
+
...(testimonialImages[2] && { image: testimonialImages[2].id }),
|
|
5748
|
+
stat: "40%",
|
|
5749
|
+
statLabel: "Cost reduction",
|
|
5750
|
+
quote:
|
|
5751
|
+
"We consolidated five different tools into SaaSify. The ROI was immediate and our team loves having everything in one place.",
|
|
5752
|
+
author: "David Kim",
|
|
5753
|
+
company: "Cascade Systems",
|
|
5083
5754
|
},
|
|
5084
5755
|
],
|
|
5085
5756
|
},
|
|
5757
|
+
|
|
5758
|
+
// 10. Trust Columns - Bird-style two-column section
|
|
5086
5759
|
{
|
|
5087
|
-
blockType: "
|
|
5088
|
-
blockName: "
|
|
5089
|
-
|
|
5090
|
-
|
|
5091
|
-
|
|
5092
|
-
|
|
5760
|
+
blockType: "trustColumns",
|
|
5761
|
+
blockName: "Trust & Security",
|
|
5762
|
+
columns: [
|
|
5763
|
+
{
|
|
5764
|
+
label: "Integrations",
|
|
5765
|
+
heading: "Connect anywhere",
|
|
5766
|
+
description:
|
|
5767
|
+
"Plug in and get started immediately with pre-built connectors for every major platform.",
|
|
5768
|
+
items: [
|
|
5769
|
+
{ icon: "zap", text: "Go live in minutes" },
|
|
5770
|
+
{ icon: "plug", text: "Pre-built connectors" },
|
|
5771
|
+
{ icon: "database", text: "Complete data sync" },
|
|
5772
|
+
{ icon: "cloud", text: "Cloud-native infrastructure" },
|
|
5773
|
+
],
|
|
5774
|
+
},
|
|
5775
|
+
{
|
|
5776
|
+
label: "Security & Compliance",
|
|
5777
|
+
heading: "Enterprise-level security",
|
|
5778
|
+
description:
|
|
5779
|
+
"Keep your data safe with encryption, granular access control, and compliance-ready infrastructure.",
|
|
5780
|
+
items: [
|
|
5781
|
+
{ icon: "shield", text: "SOC 2 Type II certified" },
|
|
5782
|
+
{ icon: "lock", text: "End-to-end encryption" },
|
|
5783
|
+
{ icon: "award", text: "Complete audit trails" },
|
|
5784
|
+
{ icon: "globe", text: "GDPR compliant" },
|
|
5785
|
+
],
|
|
5786
|
+
},
|
|
5787
|
+
],
|
|
5788
|
+
},
|
|
5789
|
+
|
|
5790
|
+
// 11. Integrations Banner
|
|
5791
|
+
{
|
|
5792
|
+
blockType: "logoBanner",
|
|
5793
|
+
blockName: "Integrations",
|
|
5794
|
+
heading: "Integrates with your favorite tools",
|
|
5795
|
+
style: "grid",
|
|
5796
|
+
logos: [
|
|
5797
|
+
{ name: "Slack" },
|
|
5798
|
+
{ name: "Salesforce" },
|
|
5799
|
+
{ name: "HubSpot" },
|
|
5800
|
+
{ name: "Google Workspace" },
|
|
5801
|
+
{ name: "Zapier" },
|
|
5802
|
+
{ name: "Jira" },
|
|
5803
|
+
],
|
|
5804
|
+
},
|
|
5805
|
+
|
|
5806
|
+
// 12. Pricing
|
|
5807
|
+
{
|
|
5808
|
+
blockType: "pricingTable",
|
|
5809
|
+
blockName: "Pricing",
|
|
5810
|
+
heading: "Simple, transparent pricing",
|
|
5811
|
+
subheading: "Start free, upgrade as your team grows. No hidden fees.",
|
|
5812
|
+
showComparisonTable: false,
|
|
5813
|
+
showViewAllLink: true,
|
|
5814
|
+
maxFeaturesOnCard: 4,
|
|
5815
|
+
plans: [
|
|
5816
|
+
{
|
|
5817
|
+
name: "Free",
|
|
5818
|
+
price: "$0/mo",
|
|
5819
|
+
description: "Perfect for trying SaaSify.",
|
|
5820
|
+
features: [
|
|
5821
|
+
{ feature: "Up to 3 users", included: true },
|
|
5822
|
+
{ feature: "Basic features", included: true },
|
|
5823
|
+
{ feature: "Community support", included: true },
|
|
5824
|
+
],
|
|
5825
|
+
link: {
|
|
5826
|
+
type: "custom",
|
|
5827
|
+
label: "Get started free",
|
|
5828
|
+
url: "/sign-up",
|
|
5829
|
+
appearance: "outline",
|
|
5830
|
+
},
|
|
5831
|
+
},
|
|
5093
5832
|
{
|
|
5833
|
+
name: "Pro",
|
|
5834
|
+
price: "$29/mo",
|
|
5835
|
+
description: "For small teams getting started.",
|
|
5836
|
+
featured: true,
|
|
5837
|
+
features: [
|
|
5838
|
+
{ feature: "Up to 10 users", included: true },
|
|
5839
|
+
{ feature: "Advanced features", included: true },
|
|
5840
|
+
{ feature: "Integrations", included: true },
|
|
5841
|
+
{ feature: "Priority support", included: true },
|
|
5842
|
+
],
|
|
5094
5843
|
link: {
|
|
5095
5844
|
type: "custom",
|
|
5845
|
+
label: "Get Pro",
|
|
5846
|
+
url: "/sign-up",
|
|
5096
5847
|
appearance: "default",
|
|
5097
|
-
|
|
5848
|
+
},
|
|
5849
|
+
},
|
|
5850
|
+
{
|
|
5851
|
+
name: "Business",
|
|
5852
|
+
price: "$99/mo",
|
|
5853
|
+
description: "For teams ready to scale.",
|
|
5854
|
+
features: [
|
|
5855
|
+
{ feature: "Unlimited users", included: true },
|
|
5856
|
+
{ feature: "All features", included: true },
|
|
5857
|
+
{ feature: "API access", included: true },
|
|
5858
|
+
{ feature: "Dedicated support", included: true },
|
|
5859
|
+
],
|
|
5860
|
+
link: {
|
|
5861
|
+
type: "custom",
|
|
5862
|
+
label: "Get Business",
|
|
5098
5863
|
url: "/sign-up",
|
|
5864
|
+
appearance: "outline",
|
|
5099
5865
|
},
|
|
5100
5866
|
},
|
|
5867
|
+
],
|
|
5868
|
+
},
|
|
5869
|
+
|
|
5870
|
+
// 13. Final CTA - Bird-style full-width with background
|
|
5871
|
+
{
|
|
5872
|
+
blockType: "finalCta",
|
|
5873
|
+
blockName: "Final CTA",
|
|
5874
|
+
headline: "Ready to transform how your team works?",
|
|
5875
|
+
subheading:
|
|
5876
|
+
"Join thousands of teams who chose the smarter way to work. Start free, upgrade as you grow.",
|
|
5877
|
+
style: "dark",
|
|
5878
|
+
links: [
|
|
5101
5879
|
{
|
|
5102
5880
|
link: {
|
|
5103
5881
|
type: "custom",
|
|
5104
5882
|
appearance: "outline",
|
|
5105
|
-
label: "
|
|
5106
|
-
url: "/
|
|
5883
|
+
label: "Start free trial",
|
|
5884
|
+
url: "/sign-up",
|
|
5885
|
+
},
|
|
5886
|
+
},
|
|
5887
|
+
{
|
|
5888
|
+
link: {
|
|
5889
|
+
type: "custom",
|
|
5890
|
+
appearance: "default",
|
|
5891
|
+
label: "Book a demo",
|
|
5892
|
+
url: "/contact",
|
|
5107
5893
|
},
|
|
5108
5894
|
},
|
|
5109
5895
|
],
|
|
@@ -5111,15 +5897,14 @@ export const seoPage = (): Partial<Page> => {
|
|
|
5111
5897
|
],
|
|
5112
5898
|
meta: {
|
|
5113
5899
|
description:
|
|
5114
|
-
"
|
|
5115
|
-
title: "
|
|
5900
|
+
"Streamline workflows, boost productivity, and scale your business with SaaSify. The modern platform for growing teams. Free to start.",
|
|
5901
|
+
title: "SaaSify \u2014 The Modern Platform for Growing Teams",
|
|
5116
5902
|
},
|
|
5903
|
+
title: "Home",
|
|
5117
5904
|
}
|
|
5118
5905
|
}
|
|
5119
5906
|
`,
|
|
5120
|
-
"marketing/payload/src/endpoints/seed/directoryhub/features/templates.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const templatesPage = (): Partial<Page> => {\n return {\n slug: "features/templates",\n _status: "published",\n title: "Directory Templates",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Launch your directory in days, not months",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Choose from professionally designed directory templates, customize to match your brand, and go live instantly. No coding required.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Get started free",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "View all templates",\n url: "/templates",\n },\n },\n ],\n },\n layout: [\n // Feature showcase blocks\n {\n blockType: "featureShowcase",\n blockName: "Template Gallery",\n label: "Ready-Made Templates",\n headline: "Pick a template, customize, launch",\n description: createParagraph(\n "Our template library covers every niche from local services to B2B vendor directories. Each template is designed for conversions with optimized layouts, smart filtering, and mobile-first responsive design.",\n ),\n link: {\n type: "custom",\n label: "Browse templates",\n url: "/templates",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "10+ professionally designed templates" },\n { text: "Niche-specific layouts and fields" },\n { text: "Mobile-first responsive design" },\n { text: "One-click preview and deploy" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Customization",\n label: "Brand Customization",\n headline: "Make it yours in minutes",\n description: createParagraph(\n "Every template is fully customizable. Change colors, fonts, layouts, and content without touching a line of code. Our visual editor makes it simple to match your brand identity perfectly.",\n ),\n link: {\n type: "custom",\n label: "See customization options",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Visual drag-and-drop editor" },\n { text: "Custom color schemes and fonts" },\n { text: "Logo and branding integration" },\n { text: "Custom domain support" },\n ],\n },\n // Bento features for specific capabilities\n {\n blockType: "bentoFeatures",\n blockName: "Template Features",\n heading: "Built for every directory type",\n subheading:\n "Templates designed for specific use cases with pre-configured schemas and optimized layouts",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "layout",\n title: "Local Services",\n description: createParagraph(\n "Plumbers, photographers, restaurants with map integration.",\n ),\n },\n {\n size: "small",\n style: "accent",\n icon: "building",\n title: "B2B Directories",\n description: createParagraph(\n "Software vendors, agencies, consultants with comparison views.",\n ),\n },\n {\n size: "small",\n style: "default",\n icon: "users",\n title: "Community Directories",\n description: createParagraph(\n "Member directories, alumni networks, professional groups.",\n ),\n },\n {\n size: "small",\n style: "primary",\n icon: "building",\n title: "Marketplaces",\n description: createParagraph(\n "Multi-vendor platforms with seller profiles and products.",\n ),\n },\n {\n size: "small",\n style: "default",\n icon: "globe",\n title: "Global Ready",\n description: createParagraph("Multi-language support and localization built-in."),\n },\n {\n size: "small",\n style: "default",\n icon: "zap",\n title: "Fast Loading",\n description: createParagraph("Optimized for speed with edge caching."),\n },\n ],\n },\n // Proof banner\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Ready to launch your directory?",\n subtext: "Pick a template and go live today. Free to start, upgrade as you grow.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start for free",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Book a demo",\n url: "/contact",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "Launch your directory website in days with professionally designed templates. Customize colors, layouts, and content without coding. Start free today.",\n title: "Directory Templates \u2014 Launch Fast with DirectoryHub",\n },\n }\n}\n',
|
|
5121
|
-
"marketing/payload/src/endpoints/seed/directoryhub/home.ts": 'import type { Media, Page } from "@/payload-types"\nimport { createParagraph } from "./richtext-helper"\n\ninterface HomePageParams {\n heroImage?: Media | null\n testimonialImages?: (Media | null)[]\n}\n\nexport const directoryHubHome = ({\n heroImage,\n testimonialImages = [],\n}: HomePageParams = {}): Partial<Page> => {\n return {\n slug: "home",\n _status: "published",\n hero: {\n type: "productShowcase",\n // Include media reference if heroImage was uploaded\n ...(heroImage && { media: heroImage.id }),\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Launch, monetize, and scale directories fast",\n version: 1,\n },\n ],\n direction: "ltr",\n format: "",\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "The platform that accelerates directory launches, automates operations, and grows revenue.",\n version: 1,\n },\n ],\n direction: "ltr",\n format: "",\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr",\n format: "",\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Get started",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "View templates",\n url: "/templates",\n },\n },\n ],\n },\n layout: [\n // 1. Logo Banner - Social proof strip (KEEP)\n {\n blockType: "logoBanner",\n blockName: "Trusted By",\n heading: "Built for businesses where directories matter",\n style: "scroll",\n logos: [\n { name: "Northwind Market" },\n { name: "Acme Listings" },\n { name: "Evergreen HQ" },\n { name: "Atlas Network" },\n { name: "Beacon Partners" },\n { name: "Cascade Labs" },\n ],\n },\n\n // 2. Value Proposition - Bird-style headline section\n {\n blockType: "proofBanner",\n blockName: "Value Proposition",\n style: "centered",\n headline: "Turn your niche expertise into a revenue-generating directory",\n subtext:\n "Every interaction feeds into a powerful platform that powers personalized experiences, targeted discovery, and intelligent automation across every touchpoint.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start for free",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Book a demo",\n url: "/contact",\n },\n },\n ],\n },\n\n // 3. Bento Features - Asymmetric bento grid with 8 cards\n {\n blockType: "bentoFeatures",\n blockName: "Get to know DirectoryHub",\n heading: "Get to know DirectoryHub",\n subheading: "Everything you need to launch and monetize directories",\n features: [\n // Position 1: Small (1x1) - top left\n {\n size: "small",\n style: "gradient",\n icon: "zap",\n stat: "5x",\n title: "Faster launches",\n description: createParagraph("Launch your directory in days, not months."),\n },\n // Position 2: Small (1x1) - top middle\n {\n size: "small",\n style: "accent",\n icon: "rocket",\n title: "Go live quickly",\n description: createParagraph("Pick a template, customize your brand, and publish."),\n },\n // Position 3: Small (1x1) - top right\n {\n size: "small",\n style: "default",\n icon: "dollarSign",\n title: "Monetize instantly",\n description: createParagraph("Stripe payments and subscription tiers built-in."),\n },\n // Position 4: Tall (1x2) - left side spanning 2 rows\n {\n size: "tall",\n style: "primary",\n icon: "shield",\n title: "Enterprise security",\n description: createParagraph(\n "Per-tenant isolation, encrypted data, and complete audit trails for peace of mind.",\n ),\n },\n // Position 5: Small (1x1) - row 2, middle\n {\n size: "small",\n style: "default",\n icon: "search",\n stat: "100%",\n title: "SEO ready",\n description: createParagraph("Schema markup and sitemaps generated automatically."),\n },\n // Position 6: Small (1x1) - row 2, right\n {\n size: "small",\n style: "default",\n icon: "globe",\n title: "Global scale",\n description: createParagraph("Multi-tenant with custom domains."),\n },\n // Position 7: Small (1x1) - row 3, middle\n {\n size: "small",\n style: "default",\n icon: "settings",\n title: "Smart automation",\n description: createParagraph("Automated workflows and moderation."),\n },\n // Position 8: Small (1x1) - row 3, right\n {\n size: "small",\n style: "default",\n icon: "layers",\n title: "Custom fields",\n description: createParagraph("Flexible schemas for any directory type."),\n },\n ],\n },\n\n // 4. Feature Showcase: Templates (image right)\n {\n blockType: "featureShowcase",\n blockName: "Feature: Templates",\n label: "Directory Templates",\n headline: "Go from idea to live directory in a weekend",\n description: createParagraph(\n "High-converting directory templates designed for every niche. Benefit from schema pre-fills, dynamic UI, smart search, and intelligent optimizations that drive engagement.",\n ),\n link: {\n type: "custom",\n label: "Explore templates",\n url: "/templates",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "10+ ready-to-use templates" },\n { text: "Custom domain in minutes" },\n { text: "Mobile-first responsive design" },\n { text: "Deep localization support" },\n ],\n },\n\n // 5. Feature Showcase: Monetization (image left)\n {\n blockType: "featureShowcase",\n blockName: "Feature: Monetization",\n label: "Revenue Engine",\n headline: "Drive revenue with built-in monetization",\n description: createParagraph(\n "Stop leaving money on the table. Charge for listings, offer premium placements, and run subscription tiers without writing a line of payment code. Automated invoicing and tax handling included.",\n ),\n link: {\n type: "custom",\n label: "Learn about monetization",\n url: "/pricing",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Subscription tiers" },\n { text: "Featured placements" },\n { text: "Pay-per-listing options" },\n { text: "Automated payouts" },\n ],\n },\n\n // 6. Feature Showcase: SEO (image right)\n {\n blockType: "featureShowcase",\n blockName: "Feature: SEO",\n label: "Search Optimization",\n headline: "Rank on page one without the technical overhead",\n description: createParagraph(\n "Every directory comes with enterprise-grade SEO built-in. Structured data, dynamic sitemaps, and optimized meta tags ensure your listings get discovered by the right audience.",\n ),\n link: {\n type: "custom",\n label: "See SEO features",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Automatic schema markup" },\n { text: "Dynamic XML sitemaps" },\n { text: "SEO-friendly URLs" },\n { text: "Social sharing optimization" },\n ],\n },\n\n // 7. Feature Showcase: Management (image left)\n {\n blockType: "featureShowcase",\n blockName: "Feature: Management",\n label: "Admin Dashboard",\n headline: "Manage everything from one powerful dashboard",\n description: createParagraph(\n "Review submissions, moderate content, track analytics, and manage payments all in one place. Built-in tools help you maintain quality while scaling your directory business.",\n ),\n link: {\n type: "custom",\n label: "Explore dashboard",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Submission review queues" },\n { text: "Bulk moderation tools" },\n { text: "Real-time analytics" },\n { text: "User management" },\n ],\n },\n\n // 8. Industry Tabs - Bird-style tabbed use cases\n {\n blockType: "industryTabs",\n blockName: "Use Cases",\n heading: "Directories that turn data into intelligent experiences",\n subheading:\n "Whether you are building for local services or global marketplaces, DirectoryHub adapts to your model.",\n tabs: [\n {\n name: "Local Services",\n stat: "340%",\n statLabel: "Higher conversion with location-based discovery",\n description:\n "Plumbers, photographers, restaurants. Card grids with reviews, maps, and geo-filtering that help customers find exactly what they need.",\n link: {\n type: "custom",\n label: "Local directory solutions",\n url: "/templates",\n appearance: "default",\n },\n },\n {\n name: "B2B Vendor Hubs",\n stat: "94%",\n statLabel: "Faster vendor onboarding with smart filters",\n description:\n "SaaS tools, agencies, consultants. Advanced filters, comparison views, and lead capture that convert browsers into buyers.",\n link: {\n type: "custom",\n label: "B2B directory solutions",\n url: "/templates",\n appearance: "default",\n },\n },\n {\n name: "Communities",\n stat: "+12K",\n statLabel: "Members connected through curated networks",\n description:\n "Member directories, alumni networks, professional associations with gated access and rich member profiles.",\n link: {\n type: "custom",\n label: "Community solutions",\n url: "/templates",\n appearance: "default",\n },\n },\n {\n name: "Marketplaces",\n stat: "$2M+",\n statLabel: "Revenue processed through integrated payments",\n description:\n "Multi-vendor search, featured slots, automated payouts to sellers. Everything you need to run a thriving marketplace.",\n link: {\n type: "custom",\n label: "Marketplace solutions",\n url: "/templates",\n appearance: "default",\n },\n },\n ],\n },\n\n // 9. Testimonials Grid - Bird-style stats with photos\n {\n blockType: "testimonialsGrid",\n blockName: "Customer Stories",\n heading: "Trusted by founders who depend on their directories",\n subheading:\n "See how leading directory builders use DirectoryHub to drive intelligent growth.",\n testimonials: [\n {\n ...(testimonialImages[0] && { image: testimonialImages[0].id }),\n stat: "94%",\n statLabel: "Faster launch time",\n quote:\n "We went from idea to collecting payments in 3 days. The templates and Stripe integration saved us months of development time.",\n author: "Sarah Chen",\n company: "Northwind Market",\n },\n {\n ...(testimonialImages[1] && { image: testimonialImages[1].id }),\n stat: "+300%",\n statLabel: "Traffic growth",\n quote:\n "Our niche directory started ranking on page 1 within weeks. The structured data and sitemaps are handled automatically.",\n author: "Marcus Rivera",\n company: "Beacon Partners",\n },\n {\n ...(testimonialImages[2] && { image: testimonialImages[2].id }),\n stat: "161%",\n statLabel: "Revenue increase",\n quote:\n "Featured placements and premium tiers covered our costs in the first month. The monetization tools just work.",\n author: "David Kim",\n company: "Cascade Labs",\n },\n ],\n },\n\n // 10. Trust Columns - Bird-style two-column section\n {\n blockType: "trustColumns",\n blockName: "Trust & Security",\n columns: [\n {\n label: "Integrations",\n heading: "Connect anywhere",\n description:\n "Plug in and get started immediately with pre-built connectors for every major platform.",\n items: [\n { icon: "zap", text: "Go live in minutes" },\n { icon: "plug", text: "Pre-built connectors" },\n { icon: "database", text: "Complete data sync" },\n { icon: "cloud", text: "Cloud-native infrastructure" },\n ],\n },\n {\n label: "Security & Compliance",\n heading: "Enterprise-level security",\n description:\n "Keep your data private with encryption, granular access control, and compliance-ready infrastructure.",\n items: [\n { icon: "shield", text: "SOC 2-minded controls" },\n { icon: "lock", text: "Per-tenant data isolation" },\n { icon: "award", text: "Complete audit trails" },\n { icon: "globe", text: "GDPR-ready infrastructure" },\n ],\n },\n ],\n },\n\n // 11. Integrations Banner (KEEP)\n {\n blockType: "logoBanner",\n blockName: "Integrations",\n heading: "Powered by industry-leading technology",\n style: "grid",\n logos: [\n { name: "Stripe" },\n { name: "Vercel" },\n { name: "AWS" },\n { name: "Google Analytics" },\n { name: "Zapier" },\n { name: "Convex" },\n ],\n },\n\n // 12. Pricing (KEEP)\n {\n blockType: "pricingTable",\n blockName: "Pricing",\n heading: "Simple, transparent pricing",\n subheading: "Start free, upgrade as you grow. No hidden fees.",\n showComparisonTable: false,\n showViewAllLink: true,\n maxFeaturesOnCard: 4,\n plans: [\n {\n name: "Free",\n price: "$0/mo",\n description: "Perfect for getting started.",\n features: [\n { feature: "1 directory site", included: true },\n { feature: "Basic customization", included: true },\n { feature: "Community support", included: true },\n ],\n link: {\n type: "custom",\n label: "Get started free",\n url: "/sign-up",\n appearance: "outline",\n },\n },\n {\n name: "Pro",\n price: "$29/mo",\n description: "For growing businesses.",\n featured: true,\n features: [\n { feature: "5 directory sites", included: true },\n { feature: "Advanced customization", included: true },\n { feature: "Custom domains", included: true },\n { feature: "Priority support", included: true },\n ],\n link: {\n type: "custom",\n label: "Get Pro",\n url: "/sign-up",\n appearance: "default",\n },\n },\n {\n name: "Business",\n price: "$99/mo",\n description: "For teams and agencies.",\n features: [\n { feature: "Unlimited directory sites", included: true },\n { feature: "White-label branding", included: true },\n { feature: "API access", included: true },\n { feature: "Dedicated support", included: true },\n ],\n link: {\n type: "custom",\n label: "Get Business",\n url: "/sign-up",\n appearance: "outline",\n },\n },\n ],\n },\n\n // 13. Final CTA - Bird-style full-width with background\n {\n blockType: "finalCta",\n blockName: "Final CTA",\n headline: "The complete platform that scales with your directory business",\n subheading:\n "Join hundreds of founders who chose the faster path to a profitable directory business. Start free, upgrade as you grow.",\n style: "dark",\n links: [\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Get started",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Book a demo",\n url: "/contact",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "Launch a profitable directory business in minutes with built-in payments, SEO, and automation. Free to start.",\n title: "DirectoryHub \u2014 Launch revenue-first directories fast",\n },\n title: "Home",\n }\n}\n',
|
|
5122
|
-
"marketing/payload/src/endpoints/seed/directoryhub/index.ts": 'import * as fs from "node:fs"\nimport * as path from "node:path"\nimport type { CollectionSlug, File, Payload, PayloadRequest } from "payload"\n\nimport { directoryHubAbout } from "./about"\nimport { faqData } from "./faqs"\nimport {\n automationPage,\n customFieldsPage,\n dashboardPage,\n monetizationPage,\n seoPage,\n templatesPage,\n} from "./features"\nimport { directoryHubHome } from "./home"\nimport { blogPosts } from "./posts"\nimport { directoryHubPricing } from "./pricing"\nimport { directoryHubPrivacy } from "./privacy"\nimport { directoryHubTerms } from "./terms"\nimport {\n b2bVendorHubsPage,\n communitiesPage,\n localServicesPage,\n marketplacesPage,\n} from "./use-cases"\n\nconst collections: CollectionSlug[] = [\n "categories",\n "media",\n "pages",\n "posts",\n "forms",\n "form-submissions",\n "search",\n "faqs",\n]\n\nconst categories = [\n { title: "Business", slug: "business" },\n { title: "Technology", slug: "technology" },\n { title: "News", slug: "news" },\n { title: "Guides", slug: "guides" },\n]\n\n// Contact form configuration for DirectoryHub\nconst contactFormData = {\n title: "Contact Form",\n confirmationMessage: {\n root: {\n type: "root",\n children: [\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Thanks for reaching out! We\'ll get back to you within 24 hours.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n confirmationType: "message" as const,\n fields: [\n {\n name: "name",\n label: "Name",\n required: true,\n blockType: "text" as const,\n },\n {\n name: "email",\n label: "Email",\n required: true,\n blockType: "email" as const,\n },\n {\n name: "subject",\n label: "Subject",\n required: false,\n blockType: "text" as const,\n },\n {\n name: "message",\n label: "Message",\n required: true,\n blockType: "textarea" as const,\n },\n ],\n submitButtonLabel: "Send Message",\n}\n\nexport const seedDirectoryHub = async ({\n payload,\n req,\n}: {\n payload: Payload\n req: PayloadRequest\n}): Promise<void> => {\n payload.logger.info("Seeding DirectoryHub database...")\n\n // Clear collections and globals\n payload.logger.info("\u2014 Clearing collections and globals...")\n\n // Clear header\n await payload.updateGlobal({\n slug: "header",\n data: {\n navItems: [],\n },\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n })\n\n // Clear footer with new structure\n await payload.updateGlobal({\n slug: "footer",\n data: {\n columns: [],\n socialLinks: {},\n newsletter: { enabled: false },\n copyrightText: "",\n bottomLinks: [],\n },\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n })\n\n // Delete collections sequentially to avoid database deadlocks\n for (const collection of collections) {\n if (payload.collections[collection]) {\n try {\n await payload.db.deleteMany({ collection, req, where: {} })\n } catch (error) {\n payload.logger.warn(`Warning: Could not clear ${collection}: ${error}`)\n }\n }\n }\n\n // Delete versions sequentially\n for (const collection of collections) {\n if (payload.collections[collection]?.config?.versions) {\n try {\n await payload.db.deleteVersions({ collection, req, where: {} })\n } catch (error) {\n payload.logger.warn(`Warning: Could not clear ${collection} versions: ${error}`)\n }\n }\n }\n\n payload.logger.info("\u2014 Seeding demo author...")\n\n await payload.delete({\n collection: "users",\n depth: 0,\n where: {\n email: {\n equals: "demo-author@example.com",\n },\n },\n })\n\n const _demoAuthor = await payload.create({\n collection: "users",\n data: {\n name: "DirectoryHub Team",\n email: "demo-author@example.com",\n password: "password",\n },\n })\n\n // Seed categories\n payload.logger.info("\u2014 Seeding categories...")\n\n const categoryDocs = await Promise.all(\n categories.map((category) =>\n payload.create({\n collection: "categories",\n data: {\n title: category.title,\n slug: category.slug,\n },\n }),\n ),\n )\n\n // Seed FAQs\n payload.logger.info("\u2014 Seeding FAQs...")\n\n const faqDocs = await Promise.all(\n faqData.map((faq) =>\n payload.create({\n collection: "faqs",\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: faq as any,\n }),\n ),\n )\n\n payload.logger.info(`\u2014 Seeded ${faqDocs.length} FAQs`)\n\n // Upload hero dashboard image\n payload.logger.info("\u2014 Uploading hero media...")\n\n let heroImageDoc = null\n try {\n const heroImagePath = path.join(process.cwd(), "public/media/hero-dashboard.png")\n if (fs.existsSync(heroImagePath)) {\n const heroImageBuffer = fs.readFileSync(heroImagePath)\n const heroImageFile: File = {\n name: "hero-dashboard.png",\n data: heroImageBuffer,\n mimetype: "image/png",\n size: heroImageBuffer.byteLength,\n }\n heroImageDoc = await payload.create({\n collection: "media",\n data: {\n alt: "DirectoryHub Dashboard - Manage directories, track usage, and configure settings",\n },\n file: heroImageFile,\n })\n payload.logger.info("\u2014 Hero image uploaded successfully")\n } else {\n payload.logger.info("\u2014 Hero image not found, using animated mockup fallback")\n }\n } catch (_error) {\n payload.logger.info("\u2014 Error uploading hero image, using animated mockup fallback")\n }\n\n // Upload testimonial images\n payload.logger.info("\u2014 Uploading testimonial images...")\n\n const testimonialImages: (typeof heroImageDoc)[] = []\n const testimonialImageFiles = [\n { name: "testimonial-1.jpg", alt: "Professional woman entrepreneur" },\n { name: "testimonial-2.jpg", alt: "Business professional reviewing analytics" },\n { name: "testimonial-3.jpg", alt: "Team collaboration meeting" },\n ]\n\n for (const imgData of testimonialImageFiles) {\n try {\n const imagePath = path.join(process.cwd(), `public/media/${imgData.name}`)\n if (fs.existsSync(imagePath)) {\n const imageBuffer = fs.readFileSync(imagePath)\n const imageFile: File = {\n name: imgData.name,\n data: imageBuffer,\n mimetype: "image/jpeg",\n size: imageBuffer.byteLength,\n }\n const imageDoc = await payload.create({\n collection: "media",\n data: {\n alt: imgData.alt,\n },\n file: imageFile,\n })\n testimonialImages.push(imageDoc)\n }\n } catch (_error) {\n payload.logger.info(`\u2014 Error uploading ${imgData.name}`)\n }\n }\n payload.logger.info(`\u2014 Uploaded ${testimonialImages.length} testimonial images`)\n\n payload.logger.info("\u2014 Seeding contact form...")\n\n const contactForm = await payload.create({\n collection: "forms",\n depth: 0,\n data: contactFormData,\n })\n\n payload.logger.info("\u2014 Seeding pages...")\n\n // Seed main pages\n const [homePage, pricingPage, aboutPage, privacyPage, termsPage] = await Promise.all([\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubHome({ heroImage: heroImageDoc, testimonialImages }) as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubPricing() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubAbout({ contactForm }) as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubPrivacy() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubTerms() as any,\n }),\n ])\n\n // Seed feature pages\n payload.logger.info("\u2014 Seeding feature pages...")\n\n const featurePages = await Promise.all([\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: templatesPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: monetizationPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: seoPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: dashboardPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: automationPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: customFieldsPage() as any,\n }),\n ])\n\n payload.logger.info(`\u2014 Seeded ${featurePages.length} feature pages`)\n\n // Seed use case pages\n payload.logger.info("\u2014 Seeding use case pages...")\n\n const useCasePages = await Promise.all([\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: localServicesPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: b2bVendorHubsPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: communitiesPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: marketplacesPage() as any,\n }),\n ])\n\n payload.logger.info(`\u2014 Seeded ${useCasePages.length} use case pages`)\n\n // Seed blog posts\n payload.logger.info("\u2014 Seeding blog posts...")\n\n const posts = blogPosts(categoryDocs)\n const createdPosts = await Promise.all(\n posts.map((post) =>\n payload.create({\n collection: "posts",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: post as any,\n }),\n ),\n )\n\n payload.logger.info(`\u2014 Seeded ${createdPosts.length} blog posts`)\n\n payload.logger.info("\u2014 Seeding globals...")\n\n await Promise.all([\n payload.updateGlobal({\n slug: "header",\n context: {\n disableRevalidate: true,\n },\n data: {\n navItems: [\n {\n type: "megaMenu",\n label: "Product",\n megaMenuColumns: [\n {\n columnLabel: "Features",\n items: [\n {\n label: "Templates",\n description: "Beautiful, ready-to-use directory templates",\n icon: "layout",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[0].id,\n },\n },\n },\n {\n label: "Monetization",\n description: "Built-in payments and subscriptions",\n icon: "dollarSign",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[1].id,\n },\n },\n },\n {\n label: "SEO",\n description: "Schema markup and optimizations",\n icon: "search",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[2].id,\n },\n },\n },\n ],\n },\n {\n columnLabel: "Tools",\n items: [\n {\n label: "Dashboard",\n description: "Powerful admin and analytics",\n icon: "barChart",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[3].id,\n },\n },\n },\n {\n label: "Automation",\n description: "Smart workflows and actions",\n icon: "zap",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[4].id,\n },\n },\n },\n {\n label: "Custom Fields",\n description: "Flexible schemas for any niche",\n icon: "layers",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[5].id,\n },\n },\n },\n ],\n },\n ],\n },\n {\n type: "megaMenu",\n label: "Use Cases",\n megaMenuColumns: [\n {\n columnLabel: "Directory Types",\n items: [\n {\n label: "Local Services",\n description: "Plumbers, restaurants, photographers",\n icon: "globe",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[0].id,\n },\n },\n },\n {\n label: "B2B Vendor Hubs",\n description: "SaaS tools, agencies, consultants",\n icon: "building",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[1].id,\n },\n },\n },\n {\n label: "Communities",\n description: "Member directories, alumni networks",\n icon: "users",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[2].id,\n },\n },\n },\n {\n label: "Marketplaces",\n description: "Multi-vendor platforms",\n icon: "store",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[3].id,\n },\n },\n },\n ],\n },\n ],\n },\n {\n type: "link",\n label: "Pricing",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: pricingPage.id,\n },\n },\n },\n {\n type: "link",\n label: "Blog",\n link: {\n type: "custom",\n url: "/posts",\n },\n },\n {\n type: "link",\n label: "Sign In",\n link: {\n type: "custom",\n url: "/sign-in",\n },\n },\n {\n type: "link",\n label: "Get Started",\n link: {\n type: "custom",\n url: "/sign-up",\n },\n },\n ],\n },\n }),\n payload.updateGlobal({\n slug: "footer",\n context: {\n disableRevalidate: true,\n },\n data: {\n columns: [\n {\n title: "Product",\n links: [\n {\n link: {\n type: "reference",\n label: "Home",\n reference: {\n relationTo: "pages",\n value: homePage.id,\n },\n },\n },\n {\n link: {\n type: "reference",\n label: "Pricing",\n reference: {\n relationTo: "pages",\n value: pricingPage.id,\n },\n },\n },\n {\n link: {\n type: "reference",\n label: "Templates",\n reference: {\n relationTo: "pages",\n value: featurePages[0].id,\n },\n },\n },\n ],\n },\n {\n title: "Resources",\n links: [\n {\n link: {\n type: "custom",\n label: "Blog",\n url: "/posts",\n },\n },\n {\n link: {\n type: "custom",\n label: "Documentation",\n url: "/docs",\n },\n },\n ],\n },\n {\n title: "Company",\n links: [\n {\n link: {\n type: "reference",\n label: "About",\n reference: {\n relationTo: "pages",\n value: aboutPage.id,\n },\n },\n },\n ],\n },\n {\n title: "Legal",\n links: [\n {\n link: {\n type: "reference",\n label: "Privacy",\n reference: {\n relationTo: "pages",\n value: privacyPage.id,\n },\n },\n },\n {\n link: {\n type: "reference",\n label: "Terms",\n reference: {\n relationTo: "pages",\n value: termsPage.id,\n },\n },\n },\n ],\n },\n ],\n socialLinks: {\n twitter: "https://x.com/directoryhub",\n linkedin: "https://linkedin.com/company/directoryhub",\n github: "https://github.com/directoryhub",\n },\n newsletter: {\n enabled: true,\n title: "Newsletter",\n description: "Stay up to date with DirectoryHub through weekly updates to your inbox.",\n buttonText: "Subscribe",\n placeholder: "Enter your email",\n },\n copyrightText: "DirectoryHub",\n bottomLinks: [\n {\n link: {\n type: "custom",\n label: "Contact Support",\n url: "/support",\n },\n },\n ],\n },\n }),\n ])\n\n payload.logger.info("DirectoryHub database seeded successfully!")\n}\n',
|
|
5907
|
+
"marketing/payload/src/endpoints/seed/directoryhub/index.ts": 'import * as fs from "node:fs"\nimport * as path from "node:path"\nimport type { CollectionSlug, File, Payload, PayloadRequest } from "payload"\n\nimport { directoryHubAbout } from "./about"\nimport { faqData } from "./faqs"\nimport {\n analyticsPage,\n automationPage,\n dashboardPage,\n integrationsPage,\n securityPage,\n workflowsPage,\n} from "./features"\nimport { directoryHubHome } from "./home"\nimport { blogPosts } from "./posts"\nimport { directoryHubPricing } from "./pricing"\nimport { directoryHubPrivacy } from "./privacy"\nimport { directoryHubTerms } from "./terms"\nimport {\n marketingPage,\n operationsPage,\n productPage,\n salesPage,\n} from "./use-cases"\n\nconst collections: CollectionSlug[] = [\n "categories",\n "media",\n "pages",\n "posts",\n "forms",\n "form-submissions",\n "search",\n "faqs",\n]\n\nconst categories = [\n { title: "Business", slug: "business" },\n { title: "Technology", slug: "technology" },\n { title: "News", slug: "news" },\n { title: "Guides", slug: "guides" },\n]\n\n// Contact form configuration for DirectoryHub\nconst contactFormData = {\n title: "Contact Form",\n confirmationMessage: {\n root: {\n type: "root",\n children: [\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Thanks for reaching out! We\'ll get back to you within 24 hours.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n confirmationType: "message" as const,\n fields: [\n {\n name: "name",\n label: "Name",\n required: true,\n blockType: "text" as const,\n },\n {\n name: "email",\n label: "Email",\n required: true,\n blockType: "email" as const,\n },\n {\n name: "subject",\n label: "Subject",\n required: false,\n blockType: "text" as const,\n },\n {\n name: "message",\n label: "Message",\n required: true,\n blockType: "textarea" as const,\n },\n ],\n submitButtonLabel: "Send Message",\n}\n\nexport const seedDirectoryHub = async ({\n payload,\n req,\n}: {\n payload: Payload\n req: PayloadRequest\n}): Promise<void> => {\n payload.logger.info("Seeding SaaSify database...")\n\n // Clear collections and globals\n payload.logger.info("\u2014 Clearing collections and globals...")\n\n // Clear header\n await payload.updateGlobal({\n slug: "header",\n data: {\n navItems: [],\n },\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n })\n\n // Clear footer with new structure\n await payload.updateGlobal({\n slug: "footer",\n data: {\n columns: [],\n socialLinks: {},\n newsletter: { enabled: false },\n copyrightText: "",\n bottomLinks: [],\n },\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n })\n\n // Delete collections sequentially to avoid database deadlocks\n for (const collection of collections) {\n if (payload.collections[collection]) {\n try {\n await payload.db.deleteMany({ collection, req, where: {} })\n } catch (error) {\n payload.logger.warn(`Warning: Could not clear ${collection}: ${error}`)\n }\n }\n }\n\n // Delete versions sequentially\n for (const collection of collections) {\n if (payload.collections[collection]?.config?.versions) {\n try {\n await payload.db.deleteVersions({ collection, req, where: {} })\n } catch (error) {\n payload.logger.warn(`Warning: Could not clear ${collection} versions: ${error}`)\n }\n }\n }\n\n payload.logger.info("\u2014 Seeding demo author...")\n\n await payload.delete({\n collection: "users",\n depth: 0,\n where: {\n email: {\n equals: "demo-author@example.com",\n },\n },\n })\n\n const _demoAuthor = await payload.create({\n collection: "users",\n data: {\n name: "SaaSify Team",\n email: "demo-author@example.com",\n password: "password",\n },\n })\n\n // Seed categories\n payload.logger.info("\u2014 Seeding categories...")\n\n const categoryDocs = await Promise.all(\n categories.map((category) =>\n payload.create({\n collection: "categories",\n data: {\n title: category.title,\n slug: category.slug,\n },\n }),\n ),\n )\n\n // Seed FAQs\n payload.logger.info("\u2014 Seeding FAQs...")\n\n const faqDocs = await Promise.all(\n faqData.map((faq) =>\n payload.create({\n collection: "faqs",\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: faq as any,\n }),\n ),\n )\n\n payload.logger.info(`\u2014 Seeded ${faqDocs.length} FAQs`)\n\n // Upload hero dashboard image\n payload.logger.info("\u2014 Uploading hero media...")\n\n let heroImageDoc = null\n try {\n const heroImagePath = path.join(process.cwd(), "public/media/hero-dashboard.png")\n if (fs.existsSync(heroImagePath)) {\n const heroImageBuffer = fs.readFileSync(heroImagePath)\n const heroImageFile: File = {\n name: "hero-dashboard.png",\n data: heroImageBuffer,\n mimetype: "image/png",\n size: heroImageBuffer.byteLength,\n }\n heroImageDoc = await payload.create({\n collection: "media",\n data: {\n alt: "SaaSify Dashboard - Manage projects, track metrics, and configure settings",\n },\n file: heroImageFile,\n })\n payload.logger.info("\u2014 Hero image uploaded successfully")\n } else {\n payload.logger.info("\u2014 Hero image not found, using animated mockup fallback")\n }\n } catch (_error) {\n payload.logger.info("\u2014 Error uploading hero image, using animated mockup fallback")\n }\n\n // Upload testimonial images\n payload.logger.info("\u2014 Uploading testimonial images...")\n\n const testimonialImages: (typeof heroImageDoc)[] = []\n const testimonialImageFiles = [\n { name: "testimonial-1.jpg", alt: "Professional woman entrepreneur" },\n { name: "testimonial-2.jpg", alt: "Business professional reviewing analytics" },\n { name: "testimonial-3.jpg", alt: "Team collaboration meeting" },\n ]\n\n for (const imgData of testimonialImageFiles) {\n try {\n const imagePath = path.join(process.cwd(), `public/media/${imgData.name}`)\n if (fs.existsSync(imagePath)) {\n const imageBuffer = fs.readFileSync(imagePath)\n const imageFile: File = {\n name: imgData.name,\n data: imageBuffer,\n mimetype: "image/jpeg",\n size: imageBuffer.byteLength,\n }\n const imageDoc = await payload.create({\n collection: "media",\n data: {\n alt: imgData.alt,\n },\n file: imageFile,\n })\n testimonialImages.push(imageDoc)\n }\n } catch (_error) {\n payload.logger.info(`\u2014 Error uploading ${imgData.name}`)\n }\n }\n payload.logger.info(`\u2014 Uploaded ${testimonialImages.length} testimonial images`)\n\n payload.logger.info("\u2014 Seeding contact form...")\n\n const contactForm = await payload.create({\n collection: "forms",\n depth: 0,\n data: contactFormData,\n })\n\n payload.logger.info("\u2014 Seeding pages...")\n\n // Seed main pages\n const [homePage, pricingPage, aboutPage, privacyPage, termsPage] = await Promise.all([\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubHome({ heroImage: heroImageDoc, testimonialImages }) as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubPricing() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubAbout({ contactForm }) as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubPrivacy() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: {\n disableRevalidate: true,\n },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: directoryHubTerms() as any,\n }),\n ])\n\n // Seed feature pages\n payload.logger.info("\u2014 Seeding feature pages...")\n\n const featurePages = await Promise.all([\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: integrationsPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: analyticsPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: securityPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: dashboardPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: automationPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: workflowsPage() as any,\n }),\n ])\n\n payload.logger.info(`\u2014 Seeded ${featurePages.length} feature pages`)\n\n // Seed use case pages\n payload.logger.info("\u2014 Seeding use case pages...")\n\n const useCasePages = await Promise.all([\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: salesPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: marketingPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: productPage() as any,\n }),\n payload.create({\n collection: "pages",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: operationsPage() as any,\n }),\n ])\n\n payload.logger.info(`\u2014 Seeded ${useCasePages.length} use case pages`)\n\n // Seed blog posts\n payload.logger.info("\u2014 Seeding blog posts...")\n\n const posts = blogPosts(categoryDocs)\n const createdPosts = await Promise.all(\n posts.map((post) =>\n payload.create({\n collection: "posts",\n depth: 0,\n context: { disableRevalidate: true },\n // biome-ignore lint/suspicious/noExplicitAny: Payload seed data type mismatch\n data: post as any,\n }),\n ),\n )\n\n payload.logger.info(`\u2014 Seeded ${createdPosts.length} blog posts`)\n\n payload.logger.info("\u2014 Seeding globals...")\n\n await Promise.all([\n payload.updateGlobal({\n slug: "header",\n context: {\n disableRevalidate: true,\n },\n data: {\n navItems: [\n {\n type: "megaMenu",\n label: "Product",\n megaMenuColumns: [\n {\n columnLabel: "Core Features",\n items: [\n {\n label: "Integrations",\n description: "Connect with 100+ tools you already use",\n icon: "layout",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[0].id,\n },\n },\n },\n {\n label: "Analytics",\n description: "Real-time insights and reporting dashboards",\n icon: "barChart",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[1].id,\n },\n },\n },\n {\n label: "Security",\n description: "Enterprise-grade protection and compliance",\n icon: "shield",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[2].id,\n },\n },\n },\n ],\n },\n {\n columnLabel: "Productivity",\n items: [\n {\n label: "Dashboard",\n description: "Unified command center for your team",\n icon: "layout",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[3].id,\n },\n },\n },\n {\n label: "Automation",\n description: "Streamline repetitive tasks instantly",\n icon: "zap",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[4].id,\n },\n },\n },\n {\n label: "Workflows",\n description: "Build custom processes without code",\n icon: "layers",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: featurePages[5].id,\n },\n },\n },\n ],\n },\n ],\n },\n {\n type: "megaMenu",\n label: "Solutions",\n megaMenuColumns: [\n {\n columnLabel: "By Team",\n items: [\n {\n label: "Sales Teams",\n description: "Close deals faster with smart tools",\n icon: "target",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[0].id,\n },\n },\n },\n {\n label: "Marketing Teams",\n description: "Launch campaigns that convert",\n icon: "rocket",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[1].id,\n },\n },\n },\n {\n label: "Product Teams",\n description: "Ship features users love",\n icon: "layers",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[2].id,\n },\n },\n },\n {\n label: "Operations",\n description: "Scale without the growing pains",\n icon: "settings",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: useCasePages[3].id,\n },\n },\n },\n ],\n },\n ],\n },\n {\n type: "link",\n label: "Pricing",\n link: {\n type: "reference",\n reference: {\n relationTo: "pages",\n value: pricingPage.id,\n },\n },\n },\n {\n type: "link",\n label: "Blog",\n link: {\n type: "custom",\n url: "/posts",\n },\n },\n {\n type: "link",\n label: "Sign In",\n link: {\n type: "custom",\n url: "/sign-in",\n },\n },\n {\n type: "link",\n label: "Get Started",\n link: {\n type: "custom",\n url: "/sign-up",\n },\n },\n ],\n },\n }),\n payload.updateGlobal({\n slug: "footer",\n context: {\n disableRevalidate: true,\n },\n data: {\n columns: [\n {\n title: "Product",\n links: [\n {\n link: {\n type: "reference",\n label: "Home",\n reference: {\n relationTo: "pages",\n value: homePage.id,\n },\n },\n },\n {\n link: {\n type: "reference",\n label: "Pricing",\n reference: {\n relationTo: "pages",\n value: pricingPage.id,\n },\n },\n },\n {\n link: {\n type: "reference",\n label: "Integrations",\n reference: {\n relationTo: "pages",\n value: featurePages[0].id,\n },\n },\n },\n ],\n },\n {\n title: "Resources",\n links: [\n {\n link: {\n type: "custom",\n label: "Blog",\n url: "/posts",\n },\n },\n {\n link: {\n type: "custom",\n label: "Documentation",\n url: "/docs",\n },\n },\n ],\n },\n {\n title: "Company",\n links: [\n {\n link: {\n type: "reference",\n label: "About",\n reference: {\n relationTo: "pages",\n value: aboutPage.id,\n },\n },\n },\n ],\n },\n {\n title: "Legal",\n links: [\n {\n link: {\n type: "reference",\n label: "Privacy",\n reference: {\n relationTo: "pages",\n value: privacyPage.id,\n },\n },\n },\n {\n link: {\n type: "reference",\n label: "Terms",\n reference: {\n relationTo: "pages",\n value: termsPage.id,\n },\n },\n },\n ],\n },\n ],\n socialLinks: {\n twitter: "https://x.com/saasify",\n linkedin: "https://linkedin.com/company/saasify",\n github: "https://github.com/saasify",\n },\n newsletter: {\n enabled: true,\n title: "Newsletter",\n description: "Get product updates, tips, and insights delivered weekly.",\n buttonText: "Subscribe",\n placeholder: "Enter your email",\n },\n copyrightText: "SaaSify",\n bottomLinks: [\n {\n link: {\n type: "custom",\n label: "Contact Support",\n url: "/support",\n },\n },\n ],\n },\n }),\n ])\n\n payload.logger.info("SaaSify database seeded successfully!")\n}\n',
|
|
5123
5908
|
"marketing/payload/src/endpoints/seed/directoryhub/posts.ts": `import type { Category, Post } from "@/payload-types"
|
|
5124
5909
|
import { createRichText } from "./richtext-helper"
|
|
5125
5910
|
|
|
@@ -5142,601 +5927,611 @@ export const blogPosts = (categories: Category[]): Partial<Post>[] => {
|
|
|
5142
5927
|
const findCategory = (slug: string) => categories.find((c) => c.slug === slug)?.id
|
|
5143
5928
|
|
|
5144
5929
|
const posts: Partial<Post>[] = [
|
|
5145
|
-
//
|
|
5930
|
+
// Product & Growth (5 posts)
|
|
5146
5931
|
{
|
|
5147
|
-
title: "How to
|
|
5148
|
-
slug: "how-to-
|
|
5932
|
+
title: "How to Build a Product-Led Growth Strategy in 2024",
|
|
5933
|
+
slug: "how-to-build-product-led-growth-strategy-2024",
|
|
5149
5934
|
_status: "published",
|
|
5150
5935
|
publishedAt: new Date("2024-01-15").toISOString(),
|
|
5151
5936
|
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5152
5937
|
content: generatePostContent([
|
|
5153
5938
|
{
|
|
5154
|
-
heading: "The
|
|
5939
|
+
heading: "The Rise of Product-Led Growth",
|
|
5155
5940
|
content:
|
|
5156
|
-
"
|
|
5941
|
+
"Product-led growth (PLG) has become the dominant go-to-market strategy for modern SaaS companies. By letting the product drive acquisition, conversion, and expansion, companies like Slack, Dropbox, and Notion have achieved explosive growth with efficient unit economics.",
|
|
5157
5942
|
},
|
|
5158
5943
|
{
|
|
5159
|
-
heading: "
|
|
5944
|
+
heading: "Core PLG Principles",
|
|
5160
5945
|
content:
|
|
5161
|
-
"
|
|
5946
|
+
"At its heart, PLG is about removing friction. Users should be able to experience value from your product without talking to sales, attending demos, or jumping through hoops. The product itself becomes your best salesperson.",
|
|
5162
5947
|
},
|
|
5163
5948
|
{
|
|
5164
|
-
heading: "
|
|
5949
|
+
heading: "Designing for Self-Service",
|
|
5165
5950
|
content:
|
|
5166
|
-
"
|
|
5951
|
+
"Build onboarding flows that get users to their 'aha moment' as quickly as possible. Use progressive disclosure to avoid overwhelming new users. Implement in-app guidance that teaches by doing, not by reading documentation.",
|
|
5167
5952
|
},
|
|
5168
5953
|
{
|
|
5169
|
-
heading: "
|
|
5954
|
+
heading: "Freemium vs Free Trial",
|
|
5170
5955
|
content:
|
|
5171
|
-
"
|
|
5956
|
+
"Freemium works best for products with low marginal costs and strong network effects. Free trials work better for complex products where full functionality is needed to demonstrate value. Some companies combine both approaches.",
|
|
5172
5957
|
},
|
|
5173
5958
|
{
|
|
5174
|
-
heading: "
|
|
5959
|
+
heading: "Measuring PLG Success",
|
|
5175
5960
|
content:
|
|
5176
|
-
"
|
|
5961
|
+
"Track activation rate, time-to-value, expansion revenue, and product-qualified leads. The ratio of self-serve to sales-assisted conversions shows how effectively your product sells itself.",
|
|
5177
5962
|
},
|
|
5178
5963
|
]),
|
|
5179
5964
|
meta: {
|
|
5180
|
-
title: "How to
|
|
5965
|
+
title: "How to Build a Product-Led Growth Strategy in 2024",
|
|
5181
5966
|
description:
|
|
5182
|
-
"
|
|
5967
|
+
"Learn the principles of product-led growth and how to implement a PLG strategy. From freemium models to activation metrics.",
|
|
5183
5968
|
},
|
|
5184
5969
|
},
|
|
5185
5970
|
{
|
|
5186
|
-
title: "10
|
|
5187
|
-
slug: "10-
|
|
5971
|
+
title: "10 SaaS Metrics Every Founder Should Track",
|
|
5972
|
+
slug: "10-saas-metrics-every-founder-should-track",
|
|
5188
5973
|
_status: "published",
|
|
5189
5974
|
publishedAt: new Date("2024-01-22").toISOString(),
|
|
5190
5975
|
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5191
5976
|
content: generatePostContent([
|
|
5192
5977
|
{
|
|
5193
|
-
heading: "
|
|
5978
|
+
heading: "Why Metrics Matter",
|
|
5194
5979
|
content:
|
|
5195
|
-
"
|
|
5980
|
+
"SaaS businesses run on metrics. The right numbers help you make better decisions, raise capital, and identify problems before they become crises. Here are the 10 metrics every SaaS founder needs to understand and track.",
|
|
5196
5981
|
},
|
|
5197
5982
|
{
|
|
5198
|
-
heading: "1.
|
|
5983
|
+
heading: "1. Monthly Recurring Revenue (MRR)",
|
|
5199
5984
|
content:
|
|
5200
|
-
"
|
|
5985
|
+
"The foundation of SaaS metrics. Track new MRR, expansion MRR, contraction MRR, and churned MRR separately to understand the components of your growth.",
|
|
5201
5986
|
},
|
|
5202
5987
|
{
|
|
5203
|
-
heading: "2.
|
|
5988
|
+
heading: "2. Annual Recurring Revenue (ARR)",
|
|
5204
5989
|
content:
|
|
5205
|
-
"
|
|
5990
|
+
"MRR \xD7 12, but only if your MRR is relatively stable. ARR is the standard metric for SaaS valuations and helps with long-term planning and forecasting.",
|
|
5206
5991
|
},
|
|
5207
5992
|
{
|
|
5208
|
-
heading: "3.
|
|
5993
|
+
heading: "3. Customer Acquisition Cost (CAC)",
|
|
5209
5994
|
content:
|
|
5210
|
-
"
|
|
5995
|
+
"Total sales and marketing spend divided by new customers acquired. Include all costs: salaries, tools, ads, content, events. Measure by channel for optimization.",
|
|
5211
5996
|
},
|
|
5212
5997
|
{
|
|
5213
|
-
heading: "4.
|
|
5998
|
+
heading: "4. Customer Lifetime Value (LTV)",
|
|
5214
5999
|
content:
|
|
5215
|
-
"
|
|
6000
|
+
"Average revenue per customer divided by churn rate. LTV:CAC ratio should be 3:1 or higher for a healthy business. Below 3:1 means you're spending too much to acquire customers.",
|
|
5216
6001
|
},
|
|
5217
6002
|
{
|
|
5218
|
-
heading: "5.
|
|
6003
|
+
heading: "5. Churn Rate",
|
|
5219
6004
|
content:
|
|
5220
|
-
"
|
|
6005
|
+
"Percentage of customers or revenue lost in a period. Track both logo churn (customer count) and revenue churn. Negative revenue churn (expansion > losses) is the goal.",
|
|
5221
6006
|
},
|
|
5222
6007
|
]),
|
|
5223
6008
|
meta: {
|
|
5224
|
-
title: "10
|
|
6009
|
+
title: "10 SaaS Metrics Every Founder Should Track",
|
|
5225
6010
|
description:
|
|
5226
|
-
"
|
|
6011
|
+
"Essential SaaS metrics explained: MRR, ARR, CAC, LTV, churn, and more. Learn what to track and why it matters.",
|
|
5227
6012
|
},
|
|
5228
6013
|
},
|
|
5229
6014
|
{
|
|
5230
|
-
title: "The Complete Guide to
|
|
5231
|
-
slug: "complete-guide-
|
|
6015
|
+
title: "The Complete Guide to SaaS Pricing Strategies",
|
|
6016
|
+
slug: "complete-guide-saas-pricing-strategies",
|
|
5232
6017
|
_status: "published",
|
|
5233
6018
|
publishedAt: new Date("2024-02-01").toISOString(),
|
|
5234
6019
|
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5235
6020
|
content: generatePostContent([
|
|
5236
6021
|
{
|
|
5237
|
-
heading: "
|
|
6022
|
+
heading: "Pricing Is Your Most Important Decision",
|
|
5238
6023
|
content:
|
|
5239
|
-
"
|
|
6024
|
+
"Pricing affects every part of your business: which customers you attract, how you position against competitors, and your path to profitability. Yet most SaaS companies spend more time on their logo than their pricing.",
|
|
5240
6025
|
},
|
|
5241
6026
|
{
|
|
5242
|
-
heading: "
|
|
6027
|
+
heading: "Value-Based Pricing",
|
|
5243
6028
|
content:
|
|
5244
|
-
|
|
6029
|
+
"Price based on the value you deliver, not your costs. A tool that saves customers $10,000/month can command $1,000/month, regardless of what it costs you to deliver.",
|
|
5245
6030
|
},
|
|
5246
6031
|
{
|
|
5247
|
-
heading: "
|
|
6032
|
+
heading: "Per-Seat vs Usage-Based",
|
|
5248
6033
|
content:
|
|
5249
|
-
"
|
|
6034
|
+
"Per-seat pricing is predictable but can limit adoption. Usage-based pricing aligns costs with value but is harder to forecast. Many companies are moving to hybrid models.",
|
|
5250
6035
|
},
|
|
5251
6036
|
{
|
|
5252
|
-
heading: "
|
|
6037
|
+
heading: "Designing Your Pricing Tiers",
|
|
5253
6038
|
content:
|
|
5254
|
-
"
|
|
6039
|
+
"Three tiers is the sweet spot for most SaaS companies. Each tier should target a distinct customer segment with features they specifically value. Make the middle tier your target.",
|
|
5255
6040
|
},
|
|
5256
6041
|
{
|
|
5257
|
-
heading: "
|
|
6042
|
+
heading: "Testing and Iteration",
|
|
5258
6043
|
content:
|
|
5259
|
-
"
|
|
6044
|
+
"Pricing is never 'done.' Run price tests, survey customers about willingness to pay, and adjust as you learn. Companies that actively manage pricing grow 2-4x faster.",
|
|
5260
6045
|
},
|
|
5261
6046
|
]),
|
|
5262
6047
|
meta: {
|
|
5263
|
-
title: "The Complete Guide to
|
|
6048
|
+
title: "The Complete Guide to SaaS Pricing Strategies",
|
|
5264
6049
|
description:
|
|
5265
|
-
"
|
|
6050
|
+
"Master SaaS pricing with this comprehensive guide. Value-based pricing, tiering strategies, and testing approaches.",
|
|
5266
6051
|
},
|
|
5267
6052
|
},
|
|
5268
6053
|
{
|
|
5269
|
-
title: "Building
|
|
5270
|
-
slug: "building-
|
|
6054
|
+
title: "Building Your First SaaS MVP: A Step-by-Step Guide",
|
|
6055
|
+
slug: "building-first-saas-mvp-step-by-step-guide",
|
|
5271
6056
|
_status: "published",
|
|
5272
6057
|
publishedAt: new Date("2024-02-10").toISOString(),
|
|
5273
6058
|
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5274
6059
|
content: generatePostContent([
|
|
5275
6060
|
{
|
|
5276
|
-
heading: "
|
|
6061
|
+
heading: "What is an MVP Really?",
|
|
5277
6062
|
content:
|
|
5278
|
-
"
|
|
6063
|
+
"An MVP is not a half-baked product. It's the smallest thing you can build that delivers real value and tests your core assumptions. The goal is learning, not launching.",
|
|
5279
6064
|
},
|
|
5280
6065
|
{
|
|
5281
|
-
heading: "
|
|
6066
|
+
heading: "Defining Your Core Value Proposition",
|
|
5282
6067
|
content:
|
|
5283
|
-
"
|
|
6068
|
+
"Before writing code, articulate the one thing your product does better than anything else. Your MVP should nail that one thing perfectly. Everything else can wait.",
|
|
5284
6069
|
},
|
|
5285
6070
|
{
|
|
5286
|
-
heading: "
|
|
6071
|
+
heading: "Feature Prioritization",
|
|
5287
6072
|
content:
|
|
5288
|
-
"
|
|
6073
|
+
"List every feature you think you need, then ruthlessly cut. Ask: does this directly support the core value proposition? If not, cut it. You can always add features later.",
|
|
5289
6074
|
},
|
|
5290
6075
|
{
|
|
5291
|
-
heading: "
|
|
6076
|
+
heading: "Building vs Buying",
|
|
5292
6077
|
content:
|
|
5293
|
-
"
|
|
6078
|
+
"Don't build what you can buy or integrate. Use Stripe for payments, Auth0 for authentication, SendGrid for email. Focus your engineering time on what makes you unique.",
|
|
5294
6079
|
},
|
|
5295
6080
|
{
|
|
5296
|
-
heading: "
|
|
6081
|
+
heading: "Launch and Learn",
|
|
5297
6082
|
content:
|
|
5298
|
-
"
|
|
6083
|
+
"Ship before you're comfortable. Your first users will tell you what's really important. Their feedback is more valuable than any amount of planning.",
|
|
5299
6084
|
},
|
|
5300
6085
|
]),
|
|
5301
6086
|
meta: {
|
|
5302
|
-
title: "Building
|
|
6087
|
+
title: "Building Your First SaaS MVP: A Step-by-Step Guide",
|
|
5303
6088
|
description:
|
|
5304
|
-
"
|
|
6089
|
+
"Learn how to build a minimum viable SaaS product. From defining your value proposition to launching and learning.",
|
|
5305
6090
|
},
|
|
5306
6091
|
},
|
|
5307
6092
|
{
|
|
5308
|
-
title: "
|
|
5309
|
-
slug: "
|
|
6093
|
+
title: "Customer Onboarding Best Practices for SaaS Companies",
|
|
6094
|
+
slug: "customer-onboarding-best-practices-saas",
|
|
5310
6095
|
_status: "published",
|
|
5311
6096
|
publishedAt: new Date("2024-02-18").toISOString(),
|
|
5312
6097
|
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5313
6098
|
content: generatePostContent([
|
|
5314
6099
|
{
|
|
5315
|
-
heading: "The
|
|
6100
|
+
heading: "The Critical First Week",
|
|
5316
6101
|
content:
|
|
5317
|
-
"
|
|
6102
|
+
"Users who don't activate within the first week rarely come back. Your onboarding flow must get users to their first success as quickly as possible. This is where retention is won or lost.",
|
|
5318
6103
|
},
|
|
5319
6104
|
{
|
|
5320
|
-
heading: "
|
|
6105
|
+
heading: "Define Your Activation Moment",
|
|
5321
6106
|
content:
|
|
5322
|
-
"
|
|
6107
|
+
"What action indicates a user 'gets it'? For Slack, it's sending 2,000 team messages. For Dropbox, it's adding a file. Identify your activation metric and optimize everything to drive it.",
|
|
5323
6108
|
},
|
|
5324
6109
|
{
|
|
5325
|
-
heading: "
|
|
6110
|
+
heading: "Progressive Disclosure",
|
|
5326
6111
|
content:
|
|
5327
|
-
"
|
|
6112
|
+
"Don't overwhelm new users with every feature. Show them one thing at a time, building complexity as they master basics. Use contextual triggers to introduce features when relevant.",
|
|
5328
6113
|
},
|
|
5329
6114
|
{
|
|
5330
|
-
heading: "
|
|
6115
|
+
heading: "Personalized Onboarding",
|
|
5331
6116
|
content:
|
|
5332
|
-
"
|
|
6117
|
+
"Different users have different goals. Ask about use cases during signup and customize the onboarding flow accordingly. A marketer and a developer should see different paths.",
|
|
5333
6118
|
},
|
|
5334
6119
|
{
|
|
5335
|
-
heading: "
|
|
6120
|
+
heading: "Measuring and Improving",
|
|
5336
6121
|
content:
|
|
5337
|
-
"
|
|
6122
|
+
"Track completion rates for each onboarding step. Identify where users drop off and run experiments to improve. Small improvements in activation compound into major retention gains.",
|
|
5338
6123
|
},
|
|
5339
6124
|
]),
|
|
5340
6125
|
meta: {
|
|
5341
|
-
title: "
|
|
6126
|
+
title: "Customer Onboarding Best Practices for SaaS Companies",
|
|
5342
6127
|
description:
|
|
5343
|
-
"
|
|
6128
|
+
"Design onboarding flows that drive activation and retention. Progressive disclosure, personalization, and metrics.",
|
|
5344
6129
|
},
|
|
5345
6130
|
},
|
|
5346
6131
|
|
|
5347
|
-
//
|
|
6132
|
+
// Team Productivity (4 posts)
|
|
5348
6133
|
{
|
|
5349
|
-
title: "
|
|
5350
|
-
slug: "
|
|
6134
|
+
title: "Remote Team Collaboration: Tools and Best Practices",
|
|
6135
|
+
slug: "remote-team-collaboration-tools-best-practices",
|
|
5351
6136
|
_status: "published",
|
|
5352
6137
|
publishedAt: new Date("2024-02-25").toISOString(),
|
|
5353
6138
|
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5354
6139
|
content: generatePostContent([
|
|
5355
6140
|
{
|
|
5356
|
-
heading: "
|
|
6141
|
+
heading: "The Remote Work Toolkit",
|
|
5357
6142
|
content:
|
|
5358
|
-
"
|
|
6143
|
+
"Effective remote collaboration requires the right tools for the right jobs. Communication, project management, documentation, and async work each need dedicated solutions that integrate well together.",
|
|
5359
6144
|
},
|
|
5360
6145
|
{
|
|
5361
|
-
heading: "
|
|
6146
|
+
heading: "Synchronous vs Asynchronous",
|
|
5362
6147
|
content:
|
|
5363
|
-
"
|
|
6148
|
+
"Not everything needs a meeting. Use async communication (documented decisions, recorded videos, written updates) as your default. Reserve synchronous time for complex discussions and relationship building.",
|
|
5364
6149
|
},
|
|
5365
6150
|
{
|
|
5366
|
-
heading: "
|
|
6151
|
+
heading: "Documentation Culture",
|
|
5367
6152
|
content:
|
|
5368
|
-
"
|
|
6153
|
+
"Remote teams that document well operate faster than those that don't. Write things down: decisions, processes, context. Future you (and your teammates) will thank you.",
|
|
5369
6154
|
},
|
|
5370
6155
|
{
|
|
5371
|
-
heading: "
|
|
6156
|
+
heading: "Building Connection Remotely",
|
|
5372
6157
|
content:
|
|
5373
|
-
"
|
|
6158
|
+
"Remote work can be isolating. Create intentional spaces for non-work interaction. Virtual coffee chats, team channels for hobbies, and periodic in-person gatherings build the trust that makes collaboration work.",
|
|
5374
6159
|
},
|
|
5375
6160
|
{
|
|
5376
|
-
heading: "
|
|
6161
|
+
heading: "Managing Across Time Zones",
|
|
5377
6162
|
content:
|
|
5378
|
-
"
|
|
6163
|
+
"Distributed teams require intentional overlap. Establish core hours where everyone is available, and use async tools for everything else. Rotate meeting times to share the burden fairly.",
|
|
5379
6164
|
},
|
|
5380
6165
|
]),
|
|
5381
6166
|
meta: {
|
|
5382
|
-
title: "
|
|
6167
|
+
title: "Remote Team Collaboration: Tools and Best Practices",
|
|
5383
6168
|
description:
|
|
5384
|
-
"
|
|
6169
|
+
"Build effective remote collaboration with the right tools and practices. Async communication, documentation, and connection.",
|
|
5385
6170
|
},
|
|
5386
6171
|
},
|
|
5387
6172
|
{
|
|
5388
|
-
title: "
|
|
5389
|
-
slug: "
|
|
6173
|
+
title: "How to Build Effective Workflows Without Code",
|
|
6174
|
+
slug: "build-effective-workflows-without-code",
|
|
5390
6175
|
_status: "published",
|
|
5391
6176
|
publishedAt: new Date("2024-03-05").toISOString(),
|
|
5392
|
-
categories: findCategory("
|
|
6177
|
+
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5393
6178
|
content: generatePostContent([
|
|
5394
6179
|
{
|
|
5395
|
-
heading: "
|
|
6180
|
+
heading: "The No-Code Automation Revolution",
|
|
5396
6181
|
content:
|
|
5397
|
-
"
|
|
6182
|
+
"You don't need to be a developer to automate your work. Modern no-code tools let anyone build sophisticated workflows that save hours every week. Here's how to get started.",
|
|
5398
6183
|
},
|
|
5399
6184
|
{
|
|
5400
|
-
heading: "
|
|
6185
|
+
heading: "Identifying Automation Opportunities",
|
|
5401
6186
|
content:
|
|
5402
|
-
"
|
|
6187
|
+
"Start by documenting repetitive tasks. Data entry, status updates, notifications, and report generation are all automation candidates. If you do it the same way every time, it can probably be automated.",
|
|
5403
6188
|
},
|
|
5404
6189
|
{
|
|
5405
|
-
heading: "
|
|
6190
|
+
heading: "Choosing the Right Tools",
|
|
5406
6191
|
content:
|
|
5407
|
-
"
|
|
6192
|
+
"Tools like Zapier, Make, and Workato connect your existing apps. More specialized tools handle specific use cases. Start simple and add complexity as you learn.",
|
|
5408
6193
|
},
|
|
5409
6194
|
{
|
|
5410
|
-
heading: "
|
|
6195
|
+
heading: "Building Your First Workflow",
|
|
5411
6196
|
content:
|
|
5412
|
-
"
|
|
6197
|
+
"Start with a simple two-step automation: when X happens, do Y. Master the basics before adding conditions, loops, and branching logic. Complexity should be added incrementally.",
|
|
5413
6198
|
},
|
|
5414
6199
|
{
|
|
5415
|
-
heading: "
|
|
6200
|
+
heading: "Maintenance and Monitoring",
|
|
5416
6201
|
content:
|
|
5417
|
-
"
|
|
6202
|
+
"Automations need maintenance. Set up error notifications, review runs regularly, and update workflows as your processes change. Broken automations are worse than no automation.",
|
|
5418
6203
|
},
|
|
5419
6204
|
]),
|
|
5420
6205
|
meta: {
|
|
5421
|
-
title: "
|
|
6206
|
+
title: "How to Build Effective Workflows Without Code",
|
|
5422
6207
|
description:
|
|
5423
|
-
"
|
|
6208
|
+
"Automate repetitive tasks with no-code tools. Identify opportunities, choose tools, and build your first workflows.",
|
|
5424
6209
|
},
|
|
5425
6210
|
},
|
|
5426
6211
|
{
|
|
5427
|
-
title: "
|
|
5428
|
-
slug: "
|
|
6212
|
+
title: "Automating Repetitive Tasks: A Practical Guide",
|
|
6213
|
+
slug: "automating-repetitive-tasks-practical-guide",
|
|
5429
6214
|
_status: "published",
|
|
5430
6215
|
publishedAt: new Date("2024-03-12").toISOString(),
|
|
5431
|
-
categories: findCategory("
|
|
6216
|
+
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5432
6217
|
content: generatePostContent([
|
|
5433
6218
|
{
|
|
5434
|
-
heading: "The
|
|
6219
|
+
heading: "The Real Cost of Repetitive Work",
|
|
5435
6220
|
content:
|
|
5436
|
-
"
|
|
6221
|
+
"Knowledge workers spend an average of 4.5 hours per week on tasks that could be automated. That's 10+ weeks per year. Automation isn't just about efficiency\u2014it's about reclaiming your time for meaningful work.",
|
|
5437
6222
|
},
|
|
5438
6223
|
{
|
|
5439
|
-
heading: "
|
|
6224
|
+
heading: "Quick Wins: Personal Productivity",
|
|
5440
6225
|
content:
|
|
5441
|
-
"
|
|
6226
|
+
"Start with your own workflow. Text expansion, email templates, keyboard shortcuts, and personal automations add up. Small improvements compound into major time savings.",
|
|
5442
6227
|
},
|
|
5443
6228
|
{
|
|
5444
|
-
heading: "
|
|
6229
|
+
heading: "Team-Level Automation",
|
|
5445
6230
|
content:
|
|
5446
|
-
"
|
|
6231
|
+
"Scale from personal to team. Automated status updates, recurring reports, and notification routing reduce coordination overhead. The goal is information flow without manual intervention.",
|
|
5447
6232
|
},
|
|
5448
6233
|
{
|
|
5449
|
-
heading: "
|
|
6234
|
+
heading: "Business Process Automation",
|
|
5450
6235
|
content:
|
|
5451
|
-
"
|
|
6236
|
+
"At the business level, automate onboarding, billing, support triage, and reporting. These automations scale with the company and free up people for higher-value work.",
|
|
5452
6237
|
},
|
|
5453
6238
|
{
|
|
5454
|
-
heading: "
|
|
6239
|
+
heading: "Knowing What Not to Automate",
|
|
5455
6240
|
content:
|
|
5456
|
-
"
|
|
6241
|
+
"Not everything should be automated. Creative work, relationship building, and judgment calls benefit from human touch. Automate the routine to make space for the meaningful.",
|
|
5457
6242
|
},
|
|
5458
6243
|
]),
|
|
5459
6244
|
meta: {
|
|
5460
|
-
title: "
|
|
6245
|
+
title: "Automating Repetitive Tasks: A Practical Guide",
|
|
5461
6246
|
description:
|
|
5462
|
-
"
|
|
6247
|
+
"Reclaim hours every week by automating repetitive tasks. Personal productivity, team automation, and business processes.",
|
|
5463
6248
|
},
|
|
5464
6249
|
},
|
|
5465
6250
|
{
|
|
5466
|
-
title: "
|
|
5467
|
-
slug: "
|
|
6251
|
+
title: "Scaling Your Team Operations from 10 to 100 People",
|
|
6252
|
+
slug: "scaling-team-operations-10-to-100-people",
|
|
5468
6253
|
_status: "published",
|
|
5469
6254
|
publishedAt: new Date("2024-03-20").toISOString(),
|
|
5470
6255
|
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5471
6256
|
content: generatePostContent([
|
|
5472
6257
|
{
|
|
5473
|
-
heading: "
|
|
6258
|
+
heading: "The Scaling Challenge",
|
|
5474
6259
|
content:
|
|
5475
|
-
"
|
|
6260
|
+
"What works at 10 people breaks at 50 and completely fails at 100. Communication, decision-making, and coordination all need to evolve as you grow. Here's how to scale intentionally.",
|
|
5476
6261
|
},
|
|
5477
6262
|
{
|
|
5478
|
-
heading: "
|
|
6263
|
+
heading: "Communication at Scale",
|
|
5479
6264
|
content:
|
|
5480
|
-
"
|
|
6265
|
+
"Move from all-hands to structured communication. Team-level updates, written announcements, and recorded videos replace ad-hoc conversations. Documentation becomes critical.",
|
|
5481
6266
|
},
|
|
5482
6267
|
{
|
|
5483
|
-
heading: "
|
|
6268
|
+
heading: "Decision-Making Frameworks",
|
|
5484
6269
|
content:
|
|
5485
|
-
'
|
|
6270
|
+
"You can't be in every decision. Create clear frameworks for who decides what. DRI (Directly Responsible Individual) models, RACI matrices, and documented authority levels enable distributed decision-making.",
|
|
5486
6271
|
},
|
|
5487
6272
|
{
|
|
5488
|
-
heading: "
|
|
6273
|
+
heading: "Process Without Bureaucracy",
|
|
5489
6274
|
content:
|
|
5490
|
-
"
|
|
6275
|
+
"Add just enough process. Too little creates chaos; too much creates bureaucracy. Focus on processes that enable autonomy rather than those that enforce control.",
|
|
5491
6276
|
},
|
|
5492
6277
|
{
|
|
5493
|
-
heading: "
|
|
6278
|
+
heading: "Maintaining Culture",
|
|
5494
6279
|
content:
|
|
5495
|
-
"
|
|
6280
|
+
"Culture that isn't documented and actively maintained will drift. Articulate your values, hire for them, and create rituals that reinforce them. Culture is what you do, not what you say.",
|
|
5496
6281
|
},
|
|
5497
6282
|
]),
|
|
5498
6283
|
meta: {
|
|
5499
|
-
title: "
|
|
6284
|
+
title: "Scaling Your Team Operations from 10 to 100 People",
|
|
5500
6285
|
description:
|
|
5501
|
-
"
|
|
6286
|
+
"Navigate the operational challenges of hypergrowth. Communication, decision-making, and culture at scale.",
|
|
5502
6287
|
},
|
|
5503
6288
|
},
|
|
5504
6289
|
|
|
5505
|
-
//
|
|
6290
|
+
// Integrations & Tools (3 posts)
|
|
5506
6291
|
{
|
|
5507
|
-
title: "
|
|
5508
|
-
slug: "
|
|
6292
|
+
title: "The Ultimate Guide to SaaS Integrations",
|
|
6293
|
+
slug: "ultimate-guide-saas-integrations",
|
|
5509
6294
|
_status: "published",
|
|
5510
6295
|
publishedAt: new Date("2024-03-28").toISOString(),
|
|
5511
6296
|
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5512
6297
|
content: generatePostContent([
|
|
5513
6298
|
{
|
|
5514
|
-
heading: "Why
|
|
6299
|
+
heading: "Why Integrations Matter",
|
|
5515
6300
|
content:
|
|
5516
|
-
|
|
6301
|
+
"The average company uses 110 SaaS applications. Without integrations, data lives in silos, work requires manual transfer between systems, and teams lose hours to copy-paste. Integrations turn disconnected tools into a unified workflow.",
|
|
5517
6302
|
},
|
|
5518
6303
|
{
|
|
5519
|
-
heading: "
|
|
6304
|
+
heading: "Native vs Third-Party Integrations",
|
|
5520
6305
|
content:
|
|
5521
|
-
"
|
|
6306
|
+
"Native integrations (built by the vendors) typically offer deeper functionality. Third-party tools (Zapier, Make) provide breadth and flexibility. Most teams need both approaches.",
|
|
5522
6307
|
},
|
|
5523
6308
|
{
|
|
5524
|
-
heading: "
|
|
6309
|
+
heading: "Planning Your Integration Stack",
|
|
5525
6310
|
content:
|
|
5526
|
-
"
|
|
6311
|
+
"Map your workflows before choosing integrations. What data needs to flow where? What triggers should create what actions? Start with critical paths and expand systematically.",
|
|
5527
6312
|
},
|
|
5528
6313
|
{
|
|
5529
|
-
heading: "
|
|
6314
|
+
heading: "Implementation Best Practices",
|
|
5530
6315
|
content:
|
|
5531
|
-
"
|
|
6316
|
+
"Test integrations thoroughly before deploying. Set up error handling and monitoring. Document what's connected to what. Integration sprawl can become its own maintenance burden.",
|
|
5532
6317
|
},
|
|
5533
6318
|
{
|
|
5534
|
-
heading: "
|
|
6319
|
+
heading: "Security and Compliance",
|
|
5535
6320
|
content:
|
|
5536
|
-
"
|
|
6321
|
+
"Every integration is a potential security surface. Review OAuth permissions carefully. Audit regularly. Ensure integrations comply with your data handling requirements.",
|
|
5537
6322
|
},
|
|
5538
6323
|
]),
|
|
5539
6324
|
meta: {
|
|
5540
|
-
title: "
|
|
6325
|
+
title: "The Ultimate Guide to SaaS Integrations",
|
|
5541
6326
|
description:
|
|
5542
|
-
"
|
|
6327
|
+
"Connect your tools into a unified workflow. Native vs third-party integrations, planning, implementation, and security.",
|
|
5543
6328
|
},
|
|
5544
6329
|
},
|
|
5545
6330
|
{
|
|
5546
|
-
title: "
|
|
5547
|
-
slug: "
|
|
6331
|
+
title: "API Best Practices for Non-Technical Teams",
|
|
6332
|
+
slug: "api-best-practices-non-technical-teams",
|
|
5548
6333
|
_status: "published",
|
|
5549
6334
|
publishedAt: new Date("2024-04-05").toISOString(),
|
|
5550
6335
|
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5551
6336
|
content: generatePostContent([
|
|
5552
6337
|
{
|
|
5553
|
-
heading: "
|
|
6338
|
+
heading: "APIs Aren't Just for Developers",
|
|
5554
6339
|
content:
|
|
5555
|
-
"
|
|
6340
|
+
"APIs power most of the integrations you already use. Understanding the basics helps you evaluate tools, communicate with technical teams, and unlock powerful automations.",
|
|
5556
6341
|
},
|
|
5557
6342
|
{
|
|
5558
|
-
heading: "
|
|
6343
|
+
heading: "What Is an API?",
|
|
5559
6344
|
content:
|
|
5560
|
-
"
|
|
6345
|
+
"An API (Application Programming Interface) is how software talks to other software. When you connect Slack to your calendar, APIs make that possible. Think of it as a translator between applications.",
|
|
5561
6346
|
},
|
|
5562
6347
|
{
|
|
5563
|
-
heading: "
|
|
6348
|
+
heading: "Working with API Documentation",
|
|
5564
6349
|
content:
|
|
5565
|
-
"
|
|
6350
|
+
"Good API documentation tells you what's possible. You don't need to understand every technical detail\u2014focus on endpoints (what actions are available) and authentication (how to connect securely).",
|
|
5566
6351
|
},
|
|
5567
6352
|
{
|
|
5568
|
-
heading: "
|
|
6353
|
+
heading: "Common API Patterns",
|
|
5569
6354
|
content:
|
|
5570
|
-
"
|
|
6355
|
+
"Most business APIs follow similar patterns: creating records, reading data, updating information, and deleting things. Once you understand CRUD operations in one API, others become easier.",
|
|
5571
6356
|
},
|
|
5572
6357
|
{
|
|
5573
|
-
heading: "
|
|
6358
|
+
heading: "Evaluating API Quality",
|
|
5574
6359
|
content:
|
|
5575
|
-
"
|
|
6360
|
+
"Before choosing a tool, check its API. Is it well-documented? Are there rate limits? What support is available? A poor API can limit what you can build, regardless of the product's features.",
|
|
5576
6361
|
},
|
|
5577
6362
|
]),
|
|
5578
6363
|
meta: {
|
|
5579
|
-
title: "
|
|
6364
|
+
title: "API Best Practices for Non-Technical Teams",
|
|
5580
6365
|
description:
|
|
5581
|
-
"
|
|
6366
|
+
"Demystify APIs for non-technical users. Understand what's possible and evaluate tools based on integration capabilities.",
|
|
5582
6367
|
},
|
|
5583
6368
|
},
|
|
5584
6369
|
{
|
|
5585
|
-
title: "
|
|
5586
|
-
slug: "
|
|
6370
|
+
title: "Choosing the Right Tech Stack for Your Startup",
|
|
6371
|
+
slug: "choosing-right-tech-stack-startup",
|
|
5587
6372
|
_status: "published",
|
|
5588
6373
|
publishedAt: new Date("2024-04-12").toISOString(),
|
|
5589
6374
|
categories: findCategory("technology") ? [findCategory("technology")!] : [],
|
|
5590
6375
|
content: generatePostContent([
|
|
5591
6376
|
{
|
|
5592
|
-
heading: "
|
|
6377
|
+
heading: "Tech Stack Decisions Matter",
|
|
5593
6378
|
content:
|
|
5594
|
-
"
|
|
6379
|
+
"Your tech stack affects development speed, hiring, scalability, and costs. But perfect is the enemy of good. The best stack is one that lets you ship and iterate quickly.",
|
|
5595
6380
|
},
|
|
5596
6381
|
{
|
|
5597
|
-
heading: "
|
|
6382
|
+
heading: "Optimize for Velocity",
|
|
5598
6383
|
content:
|
|
5599
|
-
"
|
|
6384
|
+
"Early-stage startups should optimize for development speed. Choose technologies your team knows well, with strong ecosystems and available talent. You can always migrate later.",
|
|
5600
6385
|
},
|
|
5601
6386
|
{
|
|
5602
|
-
heading: "
|
|
6387
|
+
heading: "The Boring Technology Thesis",
|
|
5603
6388
|
content:
|
|
5604
|
-
"
|
|
6389
|
+
"Exciting new technologies come with unknown failure modes. Boring, established technologies have solved problems and documented solutions. Save your innovation tokens for your actual product.",
|
|
5605
6390
|
},
|
|
5606
6391
|
{
|
|
5607
|
-
heading: "
|
|
6392
|
+
heading: "Build vs Buy Decisions",
|
|
5608
6393
|
content:
|
|
5609
|
-
"
|
|
6394
|
+
"Default to buying (or using open source) for non-core functionality. Authentication, payments, email, and monitoring are solved problems. Focus engineering time on what makes you unique.",
|
|
5610
6395
|
},
|
|
5611
6396
|
{
|
|
5612
|
-
heading: "
|
|
6397
|
+
heading: "Planning for Scale",
|
|
5613
6398
|
content:
|
|
5614
|
-
"
|
|
6399
|
+
"Don't over-engineer for scale you don't have. That said, choose technologies that can scale when needed. Horizontal scaling, managed databases, and stateless architectures make growth easier.",
|
|
5615
6400
|
},
|
|
5616
6401
|
]),
|
|
5617
6402
|
meta: {
|
|
5618
|
-
title: "
|
|
6403
|
+
title: "Choosing the Right Tech Stack for Your Startup",
|
|
5619
6404
|
description:
|
|
5620
|
-
"
|
|
6405
|
+
"Make smart tech stack decisions. Optimize for velocity, embrace boring technology, and plan for scale.",
|
|
5621
6406
|
},
|
|
5622
6407
|
},
|
|
5623
6408
|
|
|
5624
|
-
// Success Stories
|
|
6409
|
+
// Success Stories (3 posts)
|
|
5625
6410
|
{
|
|
5626
|
-
title: "From
|
|
5627
|
-
slug: "
|
|
6411
|
+
title: "From Startup to Scale: How One Team 10x'd Productivity",
|
|
6412
|
+
slug: "startup-to-scale-team-10x-productivity",
|
|
5628
6413
|
_status: "published",
|
|
5629
6414
|
publishedAt: new Date("2024-04-20").toISOString(),
|
|
5630
|
-
categories: findCategory("
|
|
6415
|
+
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5631
6416
|
content: generatePostContent([
|
|
5632
6417
|
{
|
|
5633
|
-
heading: "The
|
|
6418
|
+
heading: "The Challenge",
|
|
5634
6419
|
content:
|
|
5635
|
-
"
|
|
6420
|
+
"When TechFlow Inc hit 50 employees, everything started breaking. Communication was chaotic, tasks fell through cracks, and the team spent more time coordinating than executing. Sound familiar?",
|
|
5636
6421
|
},
|
|
5637
6422
|
{
|
|
5638
|
-
heading: "
|
|
6423
|
+
heading: "The Diagnosis",
|
|
5639
6424
|
content:
|
|
5640
|
-
"
|
|
6425
|
+
"An audit revealed the problem: tools sprawl. The team was using 15 different apps that didn't talk to each other. Information was siloed, context was lost, and everyone was doing manual work that software could handle.",
|
|
5641
6426
|
},
|
|
5642
6427
|
{
|
|
5643
|
-
heading: "The
|
|
6428
|
+
heading: "The Transformation",
|
|
5644
6429
|
content:
|
|
5645
|
-
"
|
|
6430
|
+
"They consolidated to a unified platform. Project management, communication, and documentation in one place. Automations replaced manual handoffs. Integrations connected what couldn't be consolidated.",
|
|
5646
6431
|
},
|
|
5647
6432
|
{
|
|
5648
|
-
heading: "
|
|
6433
|
+
heading: "The Results",
|
|
5649
6434
|
content:
|
|
5650
|
-
"
|
|
6435
|
+
"Within six months: 94% faster onboarding, 3x project throughput, and a 40% reduction in meetings. The team grew to 150 without proportional growth in coordination overhead.",
|
|
5651
6436
|
},
|
|
5652
6437
|
{
|
|
5653
|
-
heading: "Lessons
|
|
6438
|
+
heading: "Key Lessons",
|
|
5654
6439
|
content:
|
|
5655
|
-
"
|
|
6440
|
+
"Tool consolidation alone isn't enough. Success required process redesign, change management, and leadership commitment. The tools enabled transformation, but the team made it happen.",
|
|
5656
6441
|
},
|
|
5657
6442
|
]),
|
|
5658
6443
|
meta: {
|
|
5659
|
-
title: "From
|
|
6444
|
+
title: "From Startup to Scale: How One Team 10x'd Productivity",
|
|
5660
6445
|
description:
|
|
5661
|
-
"
|
|
6446
|
+
"A real story of operational transformation. How TechFlow Inc conquered tool sprawl and 10x'd team productivity.",
|
|
5662
6447
|
},
|
|
5663
6448
|
},
|
|
5664
6449
|
{
|
|
5665
|
-
title: "
|
|
5666
|
-
slug: "
|
|
6450
|
+
title: "5 Founders Share Their Biggest Operational Mistakes",
|
|
6451
|
+
slug: "5-founders-share-biggest-operational-mistakes",
|
|
5667
6452
|
_status: "published",
|
|
5668
6453
|
publishedAt: new Date("2024-04-28").toISOString(),
|
|
5669
|
-
categories: findCategory("
|
|
6454
|
+
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5670
6455
|
content: generatePostContent([
|
|
5671
6456
|
{
|
|
5672
|
-
heading: "
|
|
6457
|
+
heading: "Learning from Others' Mistakes",
|
|
5673
6458
|
content:
|
|
5674
|
-
"
|
|
6459
|
+
"Every founder makes operational mistakes. The smart ones learn from others before making their own. Here are five founders sharing the mistakes that cost them the most\u2014and what they'd do differently.",
|
|
5675
6460
|
},
|
|
5676
6461
|
{
|
|
5677
|
-
heading: "
|
|
6462
|
+
heading: "Mistake 1: Hiring Too Fast",
|
|
5678
6463
|
content:
|
|
5679
|
-
"
|
|
6464
|
+
'"We doubled the team in 6 months and it nearly killed us. Communication broke down, culture diluted, and productivity actually decreased. I wish we\\'d hired half as many people twice as carefully." - Sarah, Series A founder',
|
|
5680
6465
|
},
|
|
5681
6466
|
{
|
|
5682
|
-
heading: "
|
|
6467
|
+
heading: "Mistake 2: No Documentation Culture",
|
|
5683
6468
|
content:
|
|
5684
|
-
"
|
|
6469
|
+
'"Everything lived in people\\'s heads. When key people left, institutional knowledge walked out the door. Building a documentation culture feels slow, but it\\'s the only way to scale." - Marcus, bootstrapped to $5M ARR',
|
|
5685
6470
|
},
|
|
5686
6471
|
{
|
|
5687
|
-
heading: "
|
|
6472
|
+
heading: "Mistake 3: Over-Engineering Processes",
|
|
5688
6473
|
content:
|
|
5689
|
-
"
|
|
6474
|
+
'"We created elaborate processes for everything. Teams spent more time following processes than doing work. Now we ask: what\\'s the minimum process that prevents chaos?" - David, second-time founder',
|
|
5690
6475
|
},
|
|
5691
6476
|
{
|
|
5692
|
-
heading: "
|
|
6477
|
+
heading: "Mistake 4: Ignoring Technical Debt",
|
|
5693
6478
|
content:
|
|
5694
|
-
"
|
|
6479
|
+
'"We shipped fast and worried about quality later. But later never came\u2014we were always shipping something new. The accumulated debt eventually paralyzed us. Pay it down continuously." - Amy, CTO turned CEO',
|
|
6480
|
+
},
|
|
6481
|
+
{
|
|
6482
|
+
heading: "Mistake 5: Not Investing in Tooling",
|
|
6483
|
+
content:
|
|
6484
|
+
'"We were cheap about software. Manual processes that could have been automated stayed manual. The false economy cost us far more in engineering time and errors." - James, enterprise SaaS founder',
|
|
5695
6485
|
},
|
|
5696
6486
|
]),
|
|
5697
6487
|
meta: {
|
|
5698
|
-
title: "
|
|
6488
|
+
title: "5 Founders Share Their Biggest Operational Mistakes",
|
|
5699
6489
|
description:
|
|
5700
|
-
"
|
|
6490
|
+
"Learn from founders who've been there. Hiring, documentation, processes, technical debt, and tooling mistakes to avoid.",
|
|
5701
6491
|
},
|
|
5702
6492
|
},
|
|
5703
6493
|
{
|
|
5704
|
-
title: "
|
|
5705
|
-
slug: "
|
|
6494
|
+
title: "How Fast-Growing Teams Stay Organized at Scale",
|
|
6495
|
+
slug: "fast-growing-teams-stay-organized-at-scale",
|
|
5706
6496
|
_status: "published",
|
|
5707
6497
|
publishedAt: new Date("2024-05-05").toISOString(),
|
|
5708
|
-
categories: findCategory("
|
|
6498
|
+
categories: findCategory("business") ? [findCategory("business")!] : [],
|
|
5709
6499
|
content: generatePostContent([
|
|
5710
6500
|
{
|
|
5711
|
-
heading: "
|
|
6501
|
+
heading: "Organization Is a Competitive Advantage",
|
|
5712
6502
|
content:
|
|
5713
|
-
"
|
|
6503
|
+
"The fastest-growing teams aren't disorganized\u2014they're extremely organized. Good organization enables speed. Here's how high-growth teams maintain order amid chaos.",
|
|
5714
6504
|
},
|
|
5715
6505
|
{
|
|
5716
|
-
heading: "
|
|
6506
|
+
heading: "Single Source of Truth",
|
|
5717
6507
|
content:
|
|
5718
|
-
|
|
6508
|
+
"Pick one place for each type of information and stick to it. Tasks in one system, documents in another, communication in a third. Cross-linking creates the connections; duplication creates confusion.",
|
|
5719
6509
|
},
|
|
5720
6510
|
{
|
|
5721
|
-
heading: "
|
|
6511
|
+
heading: "Clear Ownership",
|
|
5722
6512
|
content:
|
|
5723
|
-
|
|
6513
|
+
"Everything has an owner. Projects, documents, processes, decisions\u2014someone is explicitly responsible. Ownership without authority is frustrating; ownership with authority enables action.",
|
|
5724
6514
|
},
|
|
5725
6515
|
{
|
|
5726
|
-
heading: "
|
|
6516
|
+
heading: "Ruthless Prioritization",
|
|
5727
6517
|
content:
|
|
5728
|
-
|
|
6518
|
+
"Growing teams face infinite demands on finite attention. Explicit priorities, regularly reviewed and communicated, help everyone focus on what matters most. Everything can't be priority one.",
|
|
5729
6519
|
},
|
|
5730
6520
|
{
|
|
5731
|
-
heading: "
|
|
6521
|
+
heading: "Async by Default",
|
|
5732
6522
|
content:
|
|
5733
|
-
"
|
|
6523
|
+
"Synchronous communication doesn't scale. The best teams default to async (documented, accessible to all) and use sync time for what truly requires it: complex discussions, relationship building, rapid iteration.",
|
|
6524
|
+
},
|
|
6525
|
+
{
|
|
6526
|
+
heading: "Regular Retrospectives",
|
|
6527
|
+
content:
|
|
6528
|
+
"What's working? What isn't? What should we try? Regular reflection and adjustment keeps processes serving the team rather than the other way around. Evolve continuously.",
|
|
5734
6529
|
},
|
|
5735
6530
|
]),
|
|
5736
6531
|
meta: {
|
|
5737
|
-
title: "
|
|
6532
|
+
title: "How Fast-Growing Teams Stay Organized at Scale",
|
|
5738
6533
|
description:
|
|
5739
|
-
"
|
|
6534
|
+
"Organizational practices for hypergrowth. Single source of truth, clear ownership, prioritization, and async communication.",
|
|
5740
6535
|
},
|
|
5741
6536
|
},
|
|
5742
6537
|
]
|
|
@@ -5766,7 +6561,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5766
6561
|
format: 0,
|
|
5767
6562
|
mode: "normal",
|
|
5768
6563
|
style: "",
|
|
5769
|
-
text: "
|
|
6564
|
+
text: "Plans that grow with you",
|
|
5770
6565
|
version: 1,
|
|
5771
6566
|
},
|
|
5772
6567
|
],
|
|
@@ -5785,7 +6580,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5785
6580
|
format: 0,
|
|
5786
6581
|
mode: "normal",
|
|
5787
6582
|
style: "",
|
|
5788
|
-
text: "Start free
|
|
6583
|
+
text: "Start free. Upgrade as your team scales. No hidden fees, no surprises.",
|
|
5789
6584
|
version: 1,
|
|
5790
6585
|
},
|
|
5791
6586
|
],
|
|
@@ -5819,7 +6614,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5819
6614
|
{
|
|
5820
6615
|
name: "Free",
|
|
5821
6616
|
price: "$0/mo", // Fallback only
|
|
5822
|
-
description: "Perfect for
|
|
6617
|
+
description: "Perfect for trying SaaSify",
|
|
5823
6618
|
featured: false,
|
|
5824
6619
|
features: [], // Features come from Stripe Entitlements
|
|
5825
6620
|
link: {
|
|
@@ -5831,7 +6626,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5831
6626
|
{
|
|
5832
6627
|
name: "Pro",
|
|
5833
6628
|
price: "$29/mo", // Fallback only
|
|
5834
|
-
description: "For
|
|
6629
|
+
description: "For small teams getting started",
|
|
5835
6630
|
featured: false,
|
|
5836
6631
|
features: [], // Features come from Stripe Entitlements
|
|
5837
6632
|
link: {
|
|
@@ -5843,7 +6638,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5843
6638
|
{
|
|
5844
6639
|
name: "Business",
|
|
5845
6640
|
price: "$79/mo", // Fallback only
|
|
5846
|
-
description: "For
|
|
6641
|
+
description: "For teams ready to scale",
|
|
5847
6642
|
featured: true,
|
|
5848
6643
|
features: [], // Features come from Stripe Entitlements
|
|
5849
6644
|
link: {
|
|
@@ -5859,9 +6654,9 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5859
6654
|
blockType: "proofBanner",
|
|
5860
6655
|
blockName: "Trust Section",
|
|
5861
6656
|
style: "withBackground",
|
|
5862
|
-
headline: "Trusted by
|
|
6657
|
+
headline: "Trusted by 10,000+ teams worldwide",
|
|
5863
6658
|
subtext:
|
|
5864
|
-
"Join thousands of
|
|
6659
|
+
"Join thousands of teams who have transformed how they work with SaaSify",
|
|
5865
6660
|
},
|
|
5866
6661
|
// Features Comparison
|
|
5867
6662
|
{
|
|
@@ -5874,43 +6669,43 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5874
6669
|
size: "small",
|
|
5875
6670
|
style: "default",
|
|
5876
6671
|
icon: "layout",
|
|
5877
|
-
title: "
|
|
5878
|
-
description: createParagraph("
|
|
6672
|
+
title: "Intuitive Interface",
|
|
6673
|
+
description: createParagraph("Clean, modern design that's easy to use."),
|
|
5879
6674
|
},
|
|
5880
6675
|
{
|
|
5881
6676
|
size: "small",
|
|
5882
6677
|
style: "default",
|
|
5883
|
-
icon: "
|
|
5884
|
-
title: "
|
|
5885
|
-
description: createParagraph("
|
|
6678
|
+
icon: "zap",
|
|
6679
|
+
title: "Fast Performance",
|
|
6680
|
+
description: createParagraph("Lightning-fast load times, globally."),
|
|
5886
6681
|
},
|
|
5887
6682
|
{
|
|
5888
6683
|
size: "small",
|
|
5889
6684
|
style: "default",
|
|
5890
6685
|
icon: "shield",
|
|
5891
|
-
title: "
|
|
5892
|
-
description: createParagraph("
|
|
6686
|
+
title: "Enterprise Security",
|
|
6687
|
+
description: createParagraph("SOC 2 compliant with encryption."),
|
|
5893
6688
|
},
|
|
5894
6689
|
{
|
|
5895
6690
|
size: "small",
|
|
5896
6691
|
style: "default",
|
|
5897
|
-
icon: "
|
|
5898
|
-
title: "
|
|
5899
|
-
description: createParagraph("
|
|
6692
|
+
icon: "globe",
|
|
6693
|
+
title: "99.9% Uptime",
|
|
6694
|
+
description: createParagraph("Reliable infrastructure you can count on."),
|
|
5900
6695
|
},
|
|
5901
6696
|
{
|
|
5902
6697
|
size: "small",
|
|
5903
6698
|
style: "default",
|
|
5904
|
-
icon: "
|
|
5905
|
-
title: "
|
|
5906
|
-
description: createParagraph("
|
|
6699
|
+
icon: "layers",
|
|
6700
|
+
title: "Integrations",
|
|
6701
|
+
description: createParagraph("Connect with 100+ tools you use."),
|
|
5907
6702
|
},
|
|
5908
6703
|
{
|
|
5909
6704
|
size: "small",
|
|
5910
6705
|
style: "default",
|
|
5911
|
-
icon: "
|
|
5912
|
-
title: "
|
|
5913
|
-
description: createParagraph("
|
|
6706
|
+
icon: "users",
|
|
6707
|
+
title: "Collaboration",
|
|
6708
|
+
description: createParagraph("Real-time teamwork made simple."),
|
|
5914
6709
|
},
|
|
5915
6710
|
],
|
|
5916
6711
|
},
|
|
@@ -5923,7 +6718,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5923
6718
|
link: {
|
|
5924
6719
|
type: "custom",
|
|
5925
6720
|
appearance: "default",
|
|
5926
|
-
label: "Start
|
|
6721
|
+
label: "Start Free Trial",
|
|
5927
6722
|
url: "/sign-up",
|
|
5928
6723
|
},
|
|
5929
6724
|
},
|
|
@@ -5949,7 +6744,7 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5949
6744
|
format: 0,
|
|
5950
6745
|
mode: "normal",
|
|
5951
6746
|
style: "",
|
|
5952
|
-
text: "Ready to
|
|
6747
|
+
text: "Ready to get started?",
|
|
5953
6748
|
version: 1,
|
|
5954
6749
|
},
|
|
5955
6750
|
],
|
|
@@ -5989,8 +6784,8 @@ export const directoryHubPricing = (): Partial<Page> => {
|
|
|
5989
6784
|
],
|
|
5990
6785
|
meta: {
|
|
5991
6786
|
description:
|
|
5992
|
-
"Simple, transparent pricing for
|
|
5993
|
-
title: "Pricing \u2014
|
|
6787
|
+
"Simple, transparent pricing for SaaSify. Start free, scale as your team grows. Plans from $0 to enterprise.",
|
|
6788
|
+
title: "Pricing \u2014 SaaSify",
|
|
5994
6789
|
},
|
|
5995
6790
|
title: "Pricing",
|
|
5996
6791
|
}
|
|
@@ -6094,7 +6889,7 @@ export const directoryHubPrivacy = (): Partial<Page> => {
|
|
|
6094
6889
|
format: 0,
|
|
6095
6890
|
mode: "normal",
|
|
6096
6891
|
style: "",
|
|
6097
|
-
text: '
|
|
6892
|
+
text: 'SaaSify ("we", "our", or "us") is committed to protecting your privacy. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use our platform and services.',
|
|
6098
6893
|
version: 1,
|
|
6099
6894
|
},
|
|
6100
6895
|
],
|
|
@@ -6424,7 +7219,7 @@ export const directoryHubPrivacy = (): Partial<Page> => {
|
|
|
6424
7219
|
format: 0,
|
|
6425
7220
|
mode: "normal",
|
|
6426
7221
|
style: "",
|
|
6427
|
-
text: "If you have any questions about this Privacy Policy, please contact us at privacy@
|
|
7222
|
+
text: "If you have any questions about this Privacy Policy, please contact us at privacy@saasify.com.",
|
|
6428
7223
|
version: 1,
|
|
6429
7224
|
},
|
|
6430
7225
|
],
|
|
@@ -6447,7 +7242,7 @@ export const directoryHubPrivacy = (): Partial<Page> => {
|
|
|
6447
7242
|
],
|
|
6448
7243
|
meta: {
|
|
6449
7244
|
description:
|
|
6450
|
-
"Read
|
|
7245
|
+
"Read SaaSify's Privacy Policy to understand how we collect, use, and protect your personal information.",
|
|
6451
7246
|
title: "Privacy Policy",
|
|
6452
7247
|
},
|
|
6453
7248
|
title: "Privacy Policy",
|
|
@@ -6553,7 +7348,7 @@ export const directoryHubTerms = (): Partial<Page> => {
|
|
|
6553
7348
|
format: 0,
|
|
6554
7349
|
mode: "normal",
|
|
6555
7350
|
style: "",
|
|
6556
|
-
text: "By accessing or using
|
|
7351
|
+
text: "By accessing or using SaaSify, you agree to be bound by these Terms of Service. If you disagree with any part of these terms, you may not access our service.",
|
|
6557
7352
|
version: 1,
|
|
6558
7353
|
},
|
|
6559
7354
|
],
|
|
@@ -6592,7 +7387,7 @@ export const directoryHubTerms = (): Partial<Page> => {
|
|
|
6592
7387
|
format: 0,
|
|
6593
7388
|
mode: "normal",
|
|
6594
7389
|
style: "",
|
|
6595
|
-
text: "
|
|
7390
|
+
text: "SaaSify is a platform that enables teams to collaborate, automate workflows, and scale their operations. Our service includes project management, integrations, analytics, and various features to help you work smarter.",
|
|
6596
7391
|
version: 1,
|
|
6597
7392
|
},
|
|
6598
7393
|
],
|
|
@@ -6709,7 +7504,7 @@ export const directoryHubTerms = (): Partial<Page> => {
|
|
|
6709
7504
|
format: 0,
|
|
6710
7505
|
mode: "normal",
|
|
6711
7506
|
style: "",
|
|
6712
|
-
text: "The service and its original content, features, and functionality are and will remain the exclusive property of
|
|
7507
|
+
text: "The service and its original content, features, and functionality are and will remain the exclusive property of SaaSify. Our service is protected by copyright, trademark, and other laws. You retain ownership of any content you create using our platform.",
|
|
6713
7508
|
version: 1,
|
|
6714
7509
|
},
|
|
6715
7510
|
],
|
|
@@ -6787,7 +7582,7 @@ export const directoryHubTerms = (): Partial<Page> => {
|
|
|
6787
7582
|
format: 0,
|
|
6788
7583
|
mode: "normal",
|
|
6789
7584
|
style: "",
|
|
6790
|
-
text: "In no event shall
|
|
7585
|
+
text: "In no event shall SaaSify, its directors, employees, partners, agents, suppliers, or affiliates be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses.",
|
|
6791
7586
|
version: 1,
|
|
6792
7587
|
},
|
|
6793
7588
|
],
|
|
@@ -6904,7 +7699,7 @@ export const directoryHubTerms = (): Partial<Page> => {
|
|
|
6904
7699
|
format: 0,
|
|
6905
7700
|
mode: "normal",
|
|
6906
7701
|
style: "",
|
|
6907
|
-
text: "If you have any questions about these Terms, please contact us at legal@
|
|
7702
|
+
text: "If you have any questions about these Terms, please contact us at legal@saasify.com.",
|
|
6908
7703
|
version: 1,
|
|
6909
7704
|
},
|
|
6910
7705
|
],
|
|
@@ -6927,25 +7722,22 @@ export const directoryHubTerms = (): Partial<Page> => {
|
|
|
6927
7722
|
],
|
|
6928
7723
|
meta: {
|
|
6929
7724
|
description:
|
|
6930
|
-
"Read
|
|
7725
|
+
"Read SaaSify's Terms of Service to understand the rules and guidelines for using our platform.",
|
|
6931
7726
|
title: "Terms of Service",
|
|
6932
7727
|
},
|
|
6933
7728
|
title: "Terms of Service",
|
|
6934
7729
|
}
|
|
6935
7730
|
}
|
|
6936
7731
|
`,
|
|
6937
|
-
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/b2b-vendor-hubs.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const
|
|
6938
|
-
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/communities.ts":
|
|
6939
|
-
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/index.ts": 'export { localServicesPage } from "./local-services"\nexport { b2bVendorHubsPage } from "./b2b-vendor-hubs"\nexport { communitiesPage } from "./communities"\nexport { marketplacesPage } from "./marketplaces"\n',
|
|
6940
|
-
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/local-services.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const localServicesPage = (): Partial<Page> => {\n return {\n slug: "use-cases/local-services",\n _status: "published",\n title: "Local Services Directory",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Build the go-to directory for local services",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Help customers find trusted plumbers, electricians, restaurants, photographers, and more. Location-based search, reviews, and verified badges make it easy.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start your directory",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "See templates",\n url: "/templates",\n },\n },\n ],\n },\n layout: [\n {\n blockType: "featureShowcase",\n blockName: "Location Search",\n label: "Location-Based Discovery",\n headline: "Find services near you with map search",\n description: createParagraph(\n "Integrated maps let users search by location, view service areas, and get directions. Auto-detect location for instant local results. Perfect for plumbers, electricians, restaurants, and any location-based service.",\n ),\n link: {\n type: "custom",\n label: "See location features",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Interactive map search" },\n { text: "Service area boundaries" },\n { text: "Distance-based filtering" },\n { text: "Auto-detect user location" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Reviews",\n label: "Reviews & Ratings",\n headline: "Build trust with verified reviews",\n description: createParagraph(\n "Let customers leave reviews and ratings. Display aggregate scores, filter by rating, and highlight top-rated services. Verified reviews build trust and help great businesses stand out.",\n ),\n link: {\n type: "custom",\n label: "Learn about reviews",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Star ratings and written reviews" },\n { text: "Verified customer badges" },\n { text: "Review moderation tools" },\n { text: "Aggregate score display" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Categories",\n label: "Service Categories",\n headline: "Organize by service type",\n description: createParagraph(\n "Create unlimited service categories and subcategories. Users can browse by type or search across all services. Clean category navigation helps customers find exactly what they need.",\n ),\n link: {\n type: "custom",\n label: "See category options",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Unlimited categories" },\n { text: "Nested subcategories" },\n { text: "Category icons and images" },\n { text: "Featured category sections" },\n ],\n },\n {\n blockType: "bentoFeatures",\n blockName: "Local Services Features",\n heading: "Everything for local service directories",\n subheading: "Purpose-built features for connecting customers with local providers",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "globe",\n stat: "340%",\n title: "Higher Conversion",\n description: createParagraph("Location-based discovery drives action."),\n },\n {\n size: "small",\n style: "accent",\n icon: "users",\n title: "Business Profiles",\n description: createParagraph("Rich profiles with hours, services, and contact."),\n },\n {\n size: "small",\n style: "default",\n icon: "search",\n title: "Smart Search",\n description: createParagraph("Search by service, location, or keyword."),\n },\n {\n size: "small",\n style: "primary",\n icon: "shield",\n title: "Verified Badges",\n description: createParagraph("Highlight licensed and insured providers."),\n },\n {\n size: "small",\n style: "default",\n icon: "dollarSign",\n title: "Price Ranges",\n description: createParagraph("Display pricing tiers to set expectations."),\n },\n {\n size: "small",\n style: "default",\n icon: "zap",\n title: "Contact Forms",\n description: createParagraph("Lead capture directly from listings."),\n },\n ],\n },\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Launch your local services directory today",\n subtext:\n "Pick a template, customize for your market, and start connecting customers with local businesses.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Get started free",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "View pricing",\n url: "/pricing",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "Build a local services directory with location search, reviews, and verified badges. Help customers find plumbers, electricians, restaurants, and more.",\n title: "Local Services Directory \u2014 DirectoryHub Use Case",\n },\n }\n}\n',
|
|
6941
|
-
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/marketplaces.ts": `import type { Page } from "@/payload-types"
|
|
7732
|
+
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/b2b-vendor-hubs.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const marketingPage = (): Partial<Page> => {\n return {\n slug: "use-cases/marketing",\n _status: "published",\n title: "SaaSify for Marketing Teams",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Launch campaigns that actually convert",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Campaign planning, asset management, and performance analytics that help your marketing team move faster and measure what matters.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "See a demo",\n url: "/demo",\n },\n },\n ],\n },\n layout: [\n {\n blockType: "featureShowcase",\n blockName: "Campaign Management",\n label: "Campaign Planning",\n headline: "Plan and execute campaigns in one place",\n description: createParagraph(\n "Visual campaign calendars, task assignments, and deadline tracking. See every campaign across channels and keep your team aligned on priorities.",\n ),\n link: {\n type: "custom",\n label: "See campaign features",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Visual campaign calendar" },\n { text: "Multi-channel planning" },\n { text: "Task and deadline tracking" },\n { text: "Team collaboration tools" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Asset Management",\n label: "Asset Library",\n headline: "Organize and share marketing assets",\n description: createParagraph(\n "Central repository for all your marketing materials. Version control, approval workflows, and easy sharing make it simple to keep everyone on brand.",\n ),\n link: {\n type: "custom",\n label: "Learn about asset management",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Centralized asset library" },\n { text: "Version control" },\n { text: "Approval workflows" },\n { text: "Brand guidelines enforcement" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Performance Analytics",\n label: "Analytics",\n headline: "Measure what matters",\n description: createParagraph(\n "Track campaign performance across channels. Custom dashboards show the metrics that matter most to your team and stakeholders.",\n ),\n link: {\n type: "custom",\n label: "See analytics features",\n url: "/features/analytics",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Cross-channel analytics" },\n { text: "Custom dashboards" },\n { text: "Automated reporting" },\n { text: "ROI tracking" },\n ],\n },\n {\n blockType: "bentoFeatures",\n blockName: "Marketing Features",\n heading: "Tools that help you market smarter",\n subheading: "Everything your marketing team needs in one platform",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "rocket",\n stat: "3x",\n title: "Campaign Velocity",\n description: createParagraph("Launch campaigns faster than ever."),\n },\n {\n size: "small",\n style: "accent",\n icon: "folder",\n title: "Project Templates",\n description: createParagraph("Pre-built templates for common campaigns."),\n },\n {\n size: "small",\n style: "default",\n icon: "users",\n title: "Team Workload",\n description: createParagraph("Balance work across your team."),\n },\n {\n size: "small",\n style: "primary",\n icon: "barChart",\n title: "Performance Metrics",\n description: createParagraph("Track KPIs across all campaigns."),\n },\n {\n size: "small",\n style: "default",\n icon: "zap",\n title: "Integrations",\n description: createParagraph("Connect with HubSpot, Marketo, and more."),\n },\n {\n size: "small",\n style: "default",\n icon: "messageSquare",\n title: "Collaboration",\n description: createParagraph("Comments, feedback, and approvals in context."),\n },\n ],\n },\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Supercharge your marketing team",\n subtext:\n "Campaign planning, asset management, and analytics. Start launching better campaigns today.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Talk to sales",\n url: "/contact",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "SaaSify for marketing teams. Campaign planning, asset management, and performance analytics to help you launch campaigns that convert.",\n title: "Marketing Teams \u2014 SaaSify Use Case",\n },\n }\n}\n',
|
|
7733
|
+
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/communities.ts": `import type { Page } from "@/payload-types"
|
|
6942
7734
|
import { createParagraph } from "../richtext-helper"
|
|
6943
7735
|
|
|
6944
|
-
export const
|
|
7736
|
+
export const productPage = (): Partial<Page> => {
|
|
6945
7737
|
return {
|
|
6946
|
-
slug: "use-cases/
|
|
7738
|
+
slug: "use-cases/product",
|
|
6947
7739
|
_status: "published",
|
|
6948
|
-
title: "
|
|
7740
|
+
title: "SaaSify for Product Teams",
|
|
6949
7741
|
hero: {
|
|
6950
7742
|
type: "lowImpact",
|
|
6951
7743
|
richText: {
|
|
@@ -6961,7 +7753,7 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
6961
7753
|
format: 0,
|
|
6962
7754
|
mode: "normal",
|
|
6963
7755
|
style: "",
|
|
6964
|
-
text: "
|
|
7756
|
+
text: "Ship features your users will love",
|
|
6965
7757
|
version: 1,
|
|
6966
7758
|
},
|
|
6967
7759
|
],
|
|
@@ -6980,7 +7772,7 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
6980
7772
|
format: 0,
|
|
6981
7773
|
mode: "normal",
|
|
6982
7774
|
style: "",
|
|
6983
|
-
text: "
|
|
7775
|
+
text: "Roadmap planning, feedback collection, and release management that help your product team build what matters and ship faster.",
|
|
6984
7776
|
version: 1,
|
|
6985
7777
|
},
|
|
6986
7778
|
],
|
|
@@ -7002,7 +7794,7 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
7002
7794
|
link: {
|
|
7003
7795
|
type: "custom",
|
|
7004
7796
|
appearance: "default",
|
|
7005
|
-
label: "
|
|
7797
|
+
label: "Start free trial",
|
|
7006
7798
|
url: "/sign-up",
|
|
7007
7799
|
},
|
|
7008
7800
|
},
|
|
@@ -7010,8 +7802,8 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
7010
7802
|
link: {
|
|
7011
7803
|
type: "custom",
|
|
7012
7804
|
appearance: "outline",
|
|
7013
|
-
label: "See
|
|
7014
|
-
url: "/
|
|
7805
|
+
label: "See a demo",
|
|
7806
|
+
url: "/demo",
|
|
7015
7807
|
},
|
|
7016
7808
|
},
|
|
7017
7809
|
],
|
|
@@ -7019,118 +7811,118 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
7019
7811
|
layout: [
|
|
7020
7812
|
{
|
|
7021
7813
|
blockType: "featureShowcase",
|
|
7022
|
-
blockName: "
|
|
7023
|
-
label: "
|
|
7024
|
-
headline: "
|
|
7814
|
+
blockName: "Roadmap Planning",
|
|
7815
|
+
label: "Product Roadmap",
|
|
7816
|
+
headline: "Plan and communicate your product vision",
|
|
7025
7817
|
description: createParagraph(
|
|
7026
|
-
"
|
|
7818
|
+
"Visual roadmaps that keep everyone aligned on what's coming. Timeline, kanban, and list views help you plan sprints and communicate priorities to stakeholders.",
|
|
7027
7819
|
),
|
|
7028
7820
|
link: {
|
|
7029
7821
|
type: "custom",
|
|
7030
|
-
label: "See
|
|
7822
|
+
label: "See roadmap features",
|
|
7031
7823
|
url: "/features",
|
|
7032
7824
|
appearance: "default",
|
|
7033
7825
|
},
|
|
7034
7826
|
imagePosition: "right",
|
|
7035
7827
|
features: [
|
|
7036
|
-
{ text: "
|
|
7037
|
-
{ text: "
|
|
7038
|
-
{ text: "
|
|
7039
|
-
{ text: "
|
|
7828
|
+
{ text: "Visual product roadmap" },
|
|
7829
|
+
{ text: "Sprint planning" },
|
|
7830
|
+
{ text: "Milestone tracking" },
|
|
7831
|
+
{ text: "Stakeholder sharing" },
|
|
7040
7832
|
],
|
|
7041
7833
|
},
|
|
7042
7834
|
{
|
|
7043
7835
|
blockType: "featureShowcase",
|
|
7044
|
-
blockName: "
|
|
7045
|
-
label: "
|
|
7046
|
-
headline: "
|
|
7836
|
+
blockName: "Feedback Collection",
|
|
7837
|
+
label: "User Feedback",
|
|
7838
|
+
headline: "Collect and prioritize user feedback",
|
|
7047
7839
|
description: createParagraph(
|
|
7048
|
-
"
|
|
7840
|
+
"Centralize feedback from users, support, and sales. Vote on ideas, tag themes, and connect feedback directly to roadmap items.",
|
|
7049
7841
|
),
|
|
7050
7842
|
link: {
|
|
7051
7843
|
type: "custom",
|
|
7052
|
-
label: "
|
|
7844
|
+
label: "Learn about feedback tools",
|
|
7053
7845
|
url: "/features",
|
|
7054
7846
|
appearance: "default",
|
|
7055
7847
|
},
|
|
7056
7848
|
imagePosition: "left",
|
|
7057
7849
|
features: [
|
|
7058
|
-
{ text: "
|
|
7059
|
-
{ text: "
|
|
7060
|
-
{ text: "
|
|
7061
|
-
{ text: "
|
|
7850
|
+
{ text: "Feedback collection portal" },
|
|
7851
|
+
{ text: "Voting and prioritization" },
|
|
7852
|
+
{ text: "Theme tagging" },
|
|
7853
|
+
{ text: "Feedback-to-roadmap linking" },
|
|
7062
7854
|
],
|
|
7063
7855
|
},
|
|
7064
7856
|
{
|
|
7065
7857
|
blockType: "featureShowcase",
|
|
7066
|
-
blockName: "
|
|
7067
|
-
label: "
|
|
7068
|
-
headline: "
|
|
7858
|
+
blockName: "Release Management",
|
|
7859
|
+
label: "Releases",
|
|
7860
|
+
headline: "Ship releases with confidence",
|
|
7069
7861
|
description: createParagraph(
|
|
7070
|
-
"
|
|
7862
|
+
"Track releases, manage changelogs, and coordinate launches. Automated release notes and internal announcements keep everyone in the loop.",
|
|
7071
7863
|
),
|
|
7072
7864
|
link: {
|
|
7073
7865
|
type: "custom",
|
|
7074
|
-
label: "
|
|
7075
|
-
url: "/features
|
|
7866
|
+
label: "See release features",
|
|
7867
|
+
url: "/features",
|
|
7076
7868
|
appearance: "default",
|
|
7077
7869
|
},
|
|
7078
7870
|
imagePosition: "right",
|
|
7079
7871
|
features: [
|
|
7080
|
-
{ text: "
|
|
7081
|
-
{ text: "Automated
|
|
7082
|
-
{ text: "
|
|
7083
|
-
{ text: "
|
|
7872
|
+
{ text: "Release tracking" },
|
|
7873
|
+
{ text: "Automated changelogs" },
|
|
7874
|
+
{ text: "Internal announcements" },
|
|
7875
|
+
{ text: "Launch coordination" },
|
|
7084
7876
|
],
|
|
7085
7877
|
},
|
|
7086
7878
|
{
|
|
7087
7879
|
blockType: "bentoFeatures",
|
|
7088
|
-
blockName: "
|
|
7089
|
-
heading: "
|
|
7090
|
-
subheading: "
|
|
7880
|
+
blockName: "Product Features",
|
|
7881
|
+
heading: "Tools that help you ship faster",
|
|
7882
|
+
subheading: "Everything your product team needs in one platform",
|
|
7091
7883
|
features: [
|
|
7092
7884
|
{
|
|
7093
7885
|
size: "small",
|
|
7094
7886
|
style: "gradient",
|
|
7095
|
-
icon: "
|
|
7096
|
-
stat: "
|
|
7097
|
-
title: "
|
|
7098
|
-
description: createParagraph("
|
|
7887
|
+
icon: "rocket",
|
|
7888
|
+
stat: "50%",
|
|
7889
|
+
title: "Faster Shipping",
|
|
7890
|
+
description: createParagraph("Reduce time from idea to production."),
|
|
7099
7891
|
},
|
|
7100
7892
|
{
|
|
7101
7893
|
size: "small",
|
|
7102
7894
|
style: "accent",
|
|
7103
|
-
icon: "
|
|
7104
|
-
title: "
|
|
7105
|
-
description: createParagraph("
|
|
7895
|
+
icon: "layers",
|
|
7896
|
+
title: "Feature Specs",
|
|
7897
|
+
description: createParagraph("Document requirements and acceptance criteria."),
|
|
7106
7898
|
},
|
|
7107
7899
|
{
|
|
7108
7900
|
size: "small",
|
|
7109
7901
|
style: "default",
|
|
7110
|
-
icon: "
|
|
7111
|
-
title: "
|
|
7112
|
-
description: createParagraph("
|
|
7902
|
+
icon: "users",
|
|
7903
|
+
title: "Cross-Team Collaboration",
|
|
7904
|
+
description: createParagraph("Work with design, engineering, and QA."),
|
|
7113
7905
|
},
|
|
7114
7906
|
{
|
|
7115
7907
|
size: "small",
|
|
7116
7908
|
style: "primary",
|
|
7117
|
-
icon: "
|
|
7118
|
-
title: "
|
|
7119
|
-
description: createParagraph("
|
|
7909
|
+
icon: "barChart",
|
|
7910
|
+
title: "Product Analytics",
|
|
7911
|
+
description: createParagraph("Track feature adoption and usage."),
|
|
7120
7912
|
},
|
|
7121
7913
|
{
|
|
7122
7914
|
size: "small",
|
|
7123
7915
|
style: "default",
|
|
7124
|
-
icon: "
|
|
7125
|
-
title: "
|
|
7126
|
-
description: createParagraph("
|
|
7916
|
+
icon: "zap",
|
|
7917
|
+
title: "Jira Integration",
|
|
7918
|
+
description: createParagraph("Sync with your engineering workflow."),
|
|
7127
7919
|
},
|
|
7128
7920
|
{
|
|
7129
7921
|
size: "small",
|
|
7130
7922
|
style: "default",
|
|
7131
|
-
icon: "
|
|
7132
|
-
title: "
|
|
7133
|
-
description: createParagraph("
|
|
7923
|
+
icon: "messageSquare",
|
|
7924
|
+
title: "Stakeholder Updates",
|
|
7925
|
+
description: createParagraph("Keep leadership informed automatically."),
|
|
7134
7926
|
},
|
|
7135
7927
|
],
|
|
7136
7928
|
},
|
|
@@ -7138,15 +7930,15 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
7138
7930
|
blockType: "proofBanner",
|
|
7139
7931
|
blockName: "CTA Section",
|
|
7140
7932
|
style: "centered",
|
|
7141
|
-
headline: "
|
|
7933
|
+
headline: "Build products your users will love",
|
|
7142
7934
|
subtext:
|
|
7143
|
-
"
|
|
7935
|
+
"Roadmap planning, feedback collection, and release management. Start shipping faster today.",
|
|
7144
7936
|
links: [
|
|
7145
7937
|
{
|
|
7146
7938
|
link: {
|
|
7147
7939
|
type: "custom",
|
|
7148
7940
|
appearance: "default",
|
|
7149
|
-
label: "Start
|
|
7941
|
+
label: "Start free trial",
|
|
7150
7942
|
url: "/sign-up",
|
|
7151
7943
|
},
|
|
7152
7944
|
},
|
|
@@ -7154,8 +7946,8 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
7154
7946
|
link: {
|
|
7155
7947
|
type: "custom",
|
|
7156
7948
|
appearance: "outline",
|
|
7157
|
-
label: "
|
|
7158
|
-
url: "/
|
|
7949
|
+
label: "Talk to sales",
|
|
7950
|
+
url: "/contact",
|
|
7159
7951
|
},
|
|
7160
7952
|
},
|
|
7161
7953
|
],
|
|
@@ -7163,12 +7955,15 @@ export const marketplacesPage = (): Partial<Page> => {
|
|
|
7163
7955
|
],
|
|
7164
7956
|
meta: {
|
|
7165
7957
|
description:
|
|
7166
|
-
"
|
|
7167
|
-
title: "
|
|
7958
|
+
"SaaSify for product teams. Roadmap planning, feedback collection, and release management to help you build and ship features your users will love.",
|
|
7959
|
+
title: "Product Teams \u2014 SaaSify Use Case",
|
|
7168
7960
|
},
|
|
7169
7961
|
}
|
|
7170
7962
|
}
|
|
7171
7963
|
`,
|
|
7964
|
+
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/index.ts": 'export { salesPage } from "./local-services"\nexport { marketingPage } from "./b2b-vendor-hubs"\nexport { productPage } from "./communities"\nexport { operationsPage } from "./marketplaces"\n',
|
|
7965
|
+
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/local-services.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const salesPage = (): Partial<Page> => {\n return {\n slug: "use-cases/sales",\n _status: "published",\n title: "SaaSify for Sales Teams",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Close more deals with less effort",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Pipeline management, lead tracking, forecasting, and automation tools that help your sales team work smarter and close faster.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "See a demo",\n url: "/demo",\n },\n },\n ],\n },\n layout: [\n {\n blockType: "featureShowcase",\n blockName: "Pipeline Management",\n label: "Visual Pipeline",\n headline: "See your entire pipeline at a glance",\n description: createParagraph(\n "Drag-and-drop deal management with customizable stages. Track deal values, probabilities, and expected close dates. Never let a deal slip through the cracks.",\n ),\n link: {\n type: "custom",\n label: "See pipeline features",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Customizable deal stages" },\n { text: "Drag-and-drop interface" },\n { text: "Deal value tracking" },\n { text: "Win probability scoring" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Lead Management",\n label: "Lead Tracking",\n headline: "Never lose track of a lead again",\n description: createParagraph(\n "Capture leads from any source, score them automatically, and route them to the right rep. Activity tracking shows every touchpoint so you always have context.",\n ),\n link: {\n type: "custom",\n label: "Learn about lead management",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Lead capture from any source" },\n { text: "Automatic lead scoring" },\n { text: "Smart lead routing" },\n { text: "Complete activity history" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Sales Automation",\n label: "Automation",\n headline: "Automate follow-ups and admin tasks",\n description: createParagraph(\n "Set up automated email sequences, task reminders, and deal updates. Spend less time on admin and more time selling.",\n ),\n link: {\n type: "custom",\n label: "See automation options",\n url: "/features/automation",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Automated email sequences" },\n { text: "Task reminders and follow-ups" },\n { text: "Deal stage automation" },\n { text: "Meeting scheduling" },\n ],\n },\n {\n blockType: "bentoFeatures",\n blockName: "Sales Features",\n heading: "Tools that help you sell more",\n subheading: "Everything your sales team needs in one platform",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "barChart",\n stat: "40%",\n title: "Faster Deal Cycles",\n description: createParagraph("Close deals faster with better tools."),\n },\n {\n size: "small",\n style: "accent",\n icon: "users",\n title: "Contact Management",\n description: createParagraph("Complete contact and company records."),\n },\n {\n size: "small",\n style: "default",\n icon: "search",\n title: "Smart Search",\n description: createParagraph("Find any deal, contact, or activity instantly."),\n },\n {\n size: "small",\n style: "primary",\n icon: "target",\n title: "Forecasting",\n description: createParagraph("Accurate revenue forecasting and reporting."),\n },\n {\n size: "small",\n style: "default",\n icon: "zap",\n title: "Email Integration",\n description: createParagraph("Sync with Gmail and Outlook."),\n },\n {\n size: "small",\n style: "default",\n icon: "shield",\n title: "Activity Tracking",\n description: createParagraph("Log calls, emails, and meetings automatically."),\n },\n ],\n },\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Give your sales team an unfair advantage",\n subtext:\n "Pipeline management, lead tracking, and automation. Start closing more deals today.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Talk to sales",\n url: "/contact",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "SaaSify for sales teams. Pipeline management, lead tracking, forecasting, and automation tools to help you close more deals faster.",\n title: "Sales Teams \u2014 SaaSify Use Case",\n },\n }\n}\n',
|
|
7966
|
+
"marketing/payload/src/endpoints/seed/directoryhub/use-cases/marketplaces.ts": 'import type { Page } from "@/payload-types"\nimport { createParagraph } from "../richtext-helper"\n\nexport const operationsPage = (): Partial<Page> => {\n return {\n slug: "use-cases/operations",\n _status: "published",\n title: "SaaSify for Operations Teams",\n hero: {\n type: "lowImpact",\n richText: {\n root: {\n type: "root",\n children: [\n {\n type: "heading",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Scale your operations without the chaos",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n tag: "h1",\n version: 1,\n },\n {\n type: "paragraph",\n children: [\n {\n type: "text",\n detail: 0,\n format: 0,\n mode: "normal",\n style: "",\n text: "Process automation, resource planning, and reporting tools that help operations teams do more with less and scale efficiently.",\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n textFormat: 0,\n version: 1,\n },\n ],\n direction: "ltr" as const,\n format: "" as const,\n indent: 0,\n version: 1,\n },\n },\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "See a demo",\n url: "/demo",\n },\n },\n ],\n },\n layout: [\n {\n blockType: "featureShowcase",\n blockName: "Process Automation",\n label: "Automation",\n headline: "Automate repetitive processes",\n description: createParagraph(\n "Build workflows that handle approvals, notifications, data routing, and handoffs automatically. Reduce manual work and eliminate bottlenecks.",\n ),\n link: {\n type: "custom",\n label: "See automation features",\n url: "/features/automation",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Visual workflow builder" },\n { text: "Approval automation" },\n { text: "Data routing and handoffs" },\n { text: "Notification triggers" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Resource Planning",\n label: "Resource Management",\n headline: "Plan and allocate resources effectively",\n description: createParagraph(\n "See team capacity, workload distribution, and resource utilization at a glance. Make informed decisions about hiring, outsourcing, and prioritization.",\n ),\n link: {\n type: "custom",\n label: "Learn about resource planning",\n url: "/features",\n appearance: "default",\n },\n imagePosition: "left",\n features: [\n { text: "Capacity planning" },\n { text: "Workload visibility" },\n { text: "Resource allocation" },\n { text: "Utilization tracking" },\n ],\n },\n {\n blockType: "featureShowcase",\n blockName: "Reporting",\n label: "Operations Analytics",\n headline: "Get visibility into every process",\n description: createParagraph(\n "Track cycle times, bottlenecks, and throughput. Custom dashboards and scheduled reports keep stakeholders informed and help you continuously improve.",\n ),\n link: {\n type: "custom",\n label: "See analytics features",\n url: "/features/analytics",\n appearance: "default",\n },\n imagePosition: "right",\n features: [\n { text: "Process analytics" },\n { text: "Cycle time tracking" },\n { text: "Bottleneck identification" },\n { text: "Custom dashboards" },\n ],\n },\n {\n blockType: "bentoFeatures",\n blockName: "Operations Features",\n heading: "Tools that help you scale",\n subheading: "Everything your operations team needs in one platform",\n features: [\n {\n size: "small",\n style: "gradient",\n icon: "zap",\n stat: "60%",\n title: "Time Saved",\n description: createParagraph("Automate away the busywork."),\n },\n {\n size: "small",\n style: "accent",\n icon: "layers",\n title: "Process Templates",\n description: createParagraph("Pre-built templates for common processes."),\n },\n {\n size: "small",\n style: "default",\n icon: "users",\n title: "Cross-Team Visibility",\n description: createParagraph("See work across departments."),\n },\n {\n size: "small",\n style: "primary",\n icon: "barChart",\n title: "Performance Metrics",\n description: createParagraph("Track KPIs across all processes."),\n },\n {\n size: "small",\n style: "default",\n icon: "database",\n title: "Data Integrations",\n description: createParagraph("Connect with your existing tools."),\n },\n {\n size: "small",\n style: "default",\n icon: "shield",\n title: "Compliance Tracking",\n description: createParagraph("Audit trails and compliance reporting."),\n },\n ],\n },\n {\n blockType: "proofBanner",\n blockName: "CTA Section",\n style: "centered",\n headline: "Scale operations without adding headcount",\n subtext:\n "Process automation, resource planning, and analytics. Start scaling smarter today.",\n links: [\n {\n link: {\n type: "custom",\n appearance: "default",\n label: "Start free trial",\n url: "/sign-up",\n },\n },\n {\n link: {\n type: "custom",\n appearance: "outline",\n label: "Talk to sales",\n url: "/contact",\n },\n },\n ],\n },\n ],\n meta: {\n description:\n "SaaSify for operations teams. Process automation, resource planning, and reporting tools to help you scale your operations efficiently.",\n title: "Operations Teams \u2014 SaaSify Use Case",\n },\n }\n}\n',
|
|
7172
7967
|
"marketing/payload/src/endpoints/seed/home-static.ts": `import type { RequiredDataFromCollectionSlug } from "payload"
|
|
7173
7968
|
|
|
7174
7969
|
// Helper to create simple paragraph rich text
|