@pylonsync/create-pylon 0.3.273 → 0.3.275
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/bin/create-pylon.js +80 -0
- package/package.json +1 -1
- package/templates/ARCHETYPES.md +339 -0
- package/templates/agency/.env.example +12 -0
- package/templates/agency/AGENTS.md +61 -0
- package/templates/agency/README.md +90 -0
- package/templates/agency/app/auth-form.tsx +129 -0
- package/templates/agency/app/contact-form.tsx +258 -0
- package/templates/agency/app/dashboard/dashboard-client.tsx +286 -0
- package/templates/agency/app/dashboard/page.tsx +70 -0
- package/templates/agency/app/error.tsx +26 -0
- package/templates/agency/app/globals.css +148 -0
- package/templates/agency/app/layout.tsx +174 -0
- package/templates/agency/app/login/page.tsx +39 -0
- package/templates/agency/app/not-found.tsx +19 -0
- package/templates/agency/app/page.tsx +207 -0
- package/templates/agency/app/robots.ts +12 -0
- package/templates/agency/app/sitemap.ts +9 -0
- package/templates/agency/app.ts +135 -0
- package/templates/agency/components/marketing.tsx +148 -0
- package/templates/agency/components/section-scroller.tsx +35 -0
- package/templates/agency/components/ui/button.tsx +56 -0
- package/templates/agency/components/ui/card.tsx +90 -0
- package/templates/agency/components.json +20 -0
- package/templates/agency/functions/bookInquiry.ts +42 -0
- package/templates/agency/functions/declineInquiry.ts +41 -0
- package/templates/agency/functions/inquiriesForOwner.ts +31 -0
- package/templates/agency/functions/seedCapacity.ts +26 -0
- package/templates/agency/functions/setCapacity.ts +32 -0
- package/templates/agency/functions/submitInquiry.ts +55 -0
- package/templates/agency/gitignore +10 -0
- package/templates/agency/lib/agency.ts +27 -0
- package/templates/agency/lib/owner.ts +26 -0
- package/templates/agency/lib/site.config.ts +239 -0
- package/templates/agency/lib/utils.ts +10 -0
- package/templates/agency/package.json +34 -0
- package/templates/agency/tsconfig.json +18 -0
- package/templates/ai-chat/.env.example +33 -0
- package/templates/ai-chat/AGENTS.md +61 -0
- package/templates/ai-chat/README.md +99 -0
- package/templates/ai-chat/app/auth-form.tsx +124 -0
- package/templates/ai-chat/app/chat-client.tsx +414 -0
- package/templates/ai-chat/app/error.tsx +26 -0
- package/templates/ai-chat/app/globals.css +148 -0
- package/templates/ai-chat/app/layout.tsx +75 -0
- package/templates/ai-chat/app/login/page.tsx +39 -0
- package/templates/ai-chat/app/not-found.tsx +19 -0
- package/templates/ai-chat/app/page.tsx +23 -0
- package/templates/ai-chat/app.ts +121 -0
- package/templates/ai-chat/components.json +20 -0
- package/templates/ai-chat/gitignore +10 -0
- package/templates/ai-chat/lib/site.config.ts +103 -0
- package/templates/ai-chat/lib/utils.ts +10 -0
- package/templates/ai-chat/package.json +34 -0
- package/templates/ai-chat/tsconfig.json +18 -0
- package/templates/ai-studio/.env.example +19 -0
- package/templates/ai-studio/AGENTS.md +61 -0
- package/templates/ai-studio/README.md +83 -0
- package/templates/ai-studio/app/auth-form.tsx +124 -0
- package/templates/ai-studio/app/error.tsx +26 -0
- package/templates/ai-studio/app/globals.css +148 -0
- package/templates/ai-studio/app/layout.tsx +75 -0
- package/templates/ai-studio/app/login/page.tsx +39 -0
- package/templates/ai-studio/app/not-found.tsx +19 -0
- package/templates/ai-studio/app/page.tsx +34 -0
- package/templates/ai-studio/app/studio-client.tsx +214 -0
- package/templates/ai-studio/app.ts +108 -0
- package/templates/ai-studio/components.json +20 -0
- package/templates/ai-studio/functions/_getGeneration.ts +25 -0
- package/templates/ai-studio/functions/_updateGeneration.ts +37 -0
- package/templates/ai-studio/functions/generate.ts +42 -0
- package/templates/ai-studio/functions/pollGeneration.ts +134 -0
- package/templates/ai-studio/gitignore +10 -0
- package/templates/ai-studio/lib/site.config.ts +80 -0
- package/templates/ai-studio/lib/studio.ts +52 -0
- package/templates/ai-studio/lib/utils.ts +10 -0
- package/templates/ai-studio/package.json +34 -0
- package/templates/ai-studio/tsconfig.json +18 -0
- package/templates/creator/.env.example +12 -0
- package/templates/creator/AGENTS.md +61 -0
- package/templates/creator/README.md +67 -0
- package/templates/creator/app/auth-form.tsx +129 -0
- package/templates/creator/app/dashboard/dashboard-client.tsx +297 -0
- package/templates/creator/app/dashboard/page.tsx +70 -0
- package/templates/creator/app/error.tsx +26 -0
- package/templates/creator/app/globals.css +148 -0
- package/templates/creator/app/layout.tsx +160 -0
- package/templates/creator/app/login/page.tsx +39 -0
- package/templates/creator/app/newsletter-signup.tsx +162 -0
- package/templates/creator/app/not-found.tsx +19 -0
- package/templates/creator/app/page.tsx +160 -0
- package/templates/creator/app/robots.ts +12 -0
- package/templates/creator/app/sitemap.ts +9 -0
- package/templates/creator/app.ts +134 -0
- package/templates/creator/components/marketing.tsx +148 -0
- package/templates/creator/components/section-scroller.tsx +35 -0
- package/templates/creator/components/ui/button.tsx +56 -0
- package/templates/creator/components/ui/card.tsx +90 -0
- package/templates/creator/components.json +20 -0
- package/templates/creator/functions/subscribe.ts +82 -0
- package/templates/creator/functions/subscriberStats.ts +75 -0
- package/templates/creator/gitignore +10 -0
- package/templates/creator/lib/owner.ts +26 -0
- package/templates/creator/lib/site.config.ts +173 -0
- package/templates/creator/lib/stats.ts +30 -0
- package/templates/creator/lib/utils.ts +10 -0
- package/templates/creator/package.json +34 -0
- package/templates/creator/tsconfig.json +18 -0
- package/templates/default/app/layout.tsx +26 -27
- package/templates/default/app/page.tsx +90 -274
- package/templates/default/lib/products.ts +9 -122
- package/templates/default/lib/site.config.ts +739 -0
- package/templates/default/lib/site.ts +14 -261
- package/templates/directory/.env.example +12 -0
- package/templates/directory/AGENTS.md +61 -0
- package/templates/directory/README.md +80 -0
- package/templates/directory/app/auth-form.tsx +129 -0
- package/templates/directory/app/dashboard/dashboard-client.tsx +205 -0
- package/templates/directory/app/dashboard/page.tsx +70 -0
- package/templates/directory/app/directory-browse.tsx +328 -0
- package/templates/directory/app/error.tsx +26 -0
- package/templates/directory/app/globals.css +148 -0
- package/templates/directory/app/layout.tsx +171 -0
- package/templates/directory/app/login/page.tsx +39 -0
- package/templates/directory/app/not-found.tsx +19 -0
- package/templates/directory/app/page.tsx +50 -0
- package/templates/directory/app/robots.ts +12 -0
- package/templates/directory/app/sitemap.ts +9 -0
- package/templates/directory/app/submit/page.tsx +30 -0
- package/templates/directory/app/submit-form.tsx +151 -0
- package/templates/directory/app.ts +146 -0
- package/templates/directory/components/marketing.tsx +148 -0
- package/templates/directory/components/section-scroller.tsx +35 -0
- package/templates/directory/components/ui/button.tsx +56 -0
- package/templates/directory/components/ui/card.tsx +90 -0
- package/templates/directory/components.json +20 -0
- package/templates/directory/functions/approveSubmission.ts +45 -0
- package/templates/directory/functions/rejectSubmission.ts +20 -0
- package/templates/directory/functions/seedListings.ts +33 -0
- package/templates/directory/functions/submissionsForOwner.ts +29 -0
- package/templates/directory/functions/submitListing.ts +63 -0
- package/templates/directory/functions/upvote.ts +24 -0
- package/templates/directory/gitignore +10 -0
- package/templates/directory/lib/directory.ts +45 -0
- package/templates/directory/lib/owner.ts +26 -0
- package/templates/directory/lib/site.config.ts +130 -0
- package/templates/directory/lib/utils.ts +10 -0
- package/templates/directory/package.json +34 -0
- package/templates/directory/tsconfig.json +18 -0
- package/templates/local-service/.env.example +12 -0
- package/templates/local-service/AGENTS.md +61 -0
- package/templates/local-service/README.md +82 -0
- package/templates/local-service/app/auth-form.tsx +129 -0
- package/templates/local-service/app/booking-widget.tsx +399 -0
- package/templates/local-service/app/dashboard/dashboard-client.tsx +304 -0
- package/templates/local-service/app/dashboard/page.tsx +63 -0
- package/templates/local-service/app/error.tsx +26 -0
- package/templates/local-service/app/globals.css +148 -0
- package/templates/local-service/app/layout.tsx +151 -0
- package/templates/local-service/app/login/page.tsx +39 -0
- package/templates/local-service/app/not-found.tsx +19 -0
- package/templates/local-service/app/page.tsx +233 -0
- package/templates/local-service/app/robots.ts +12 -0
- package/templates/local-service/app/sitemap.ts +9 -0
- package/templates/local-service/app.ts +131 -0
- package/templates/local-service/components/marketing.tsx +162 -0
- package/templates/local-service/components/section-scroller.tsx +35 -0
- package/templates/local-service/components/ui/button.tsx +56 -0
- package/templates/local-service/components/ui/card.tsx +90 -0
- package/templates/local-service/components.json +20 -0
- package/templates/local-service/functions/bookingsForOwner.ts +30 -0
- package/templates/local-service/functions/cancelBooking.ts +27 -0
- package/templates/local-service/functions/confirmBooking.ts +18 -0
- package/templates/local-service/functions/createBooking.ts +98 -0
- package/templates/local-service/gitignore +10 -0
- package/templates/local-service/lib/booking.ts +24 -0
- package/templates/local-service/lib/owner.ts +26 -0
- package/templates/local-service/lib/site.config.ts +232 -0
- package/templates/local-service/lib/slots.ts +97 -0
- package/templates/local-service/lib/utils.ts +10 -0
- package/templates/local-service/package.json +34 -0
- package/templates/local-service/tsconfig.json +18 -0
- package/templates/marketplace/.env.example +9 -0
- package/templates/marketplace/AGENTS.md +61 -0
- package/templates/marketplace/README.md +78 -0
- package/templates/marketplace/app/_components/CategoryIcon.tsx +40 -0
- package/templates/marketplace/app/error.tsx +26 -0
- package/templates/marketplace/app/globals.css +64 -0
- package/templates/marketplace/app/layout.tsx +60 -0
- package/templates/marketplace/app/listing/[id]/page.tsx +163 -0
- package/templates/marketplace/app/me/page.tsx +15 -0
- package/templates/marketplace/app/not-found.tsx +20 -0
- package/templates/marketplace/app/page.tsx +159 -0
- package/templates/marketplace/app/robots.ts +12 -0
- package/templates/marketplace/app/sell/page.tsx +26 -0
- package/templates/marketplace/app/sitemap.ts +14 -0
- package/templates/marketplace/app.ts +190 -0
- package/templates/marketplace/client/AuthNav.tsx +46 -0
- package/templates/marketplace/client/LiveTicker.tsx +104 -0
- package/templates/marketplace/client/LoginCard.tsx +130 -0
- package/templates/marketplace/client/MarketProvider.tsx +148 -0
- package/templates/marketplace/client/MyMarket.tsx +180 -0
- package/templates/marketplace/client/OfferPanel.tsx +355 -0
- package/templates/marketplace/client/SeedOnEmpty.tsx +26 -0
- package/templates/marketplace/client/SellForm.tsx +160 -0
- package/templates/marketplace/client/WatchButton.tsx +88 -0
- package/templates/marketplace/client/market.ts +341 -0
- package/templates/marketplace/functions/buyNow.ts +78 -0
- package/templates/marketplace/functions/makeOffer.ts +65 -0
- package/templates/marketplace/functions/respondToOffer.ts +62 -0
- package/templates/marketplace/functions/seedMarket.ts +90 -0
- package/templates/marketplace/gitignore +10 -0
- package/templates/marketplace/package.json +35 -0
- package/templates/marketplace/tsconfig.json +14 -0
- package/templates/marketplace/ui/badge.tsx +30 -0
- package/templates/marketplace/ui/button.tsx +49 -0
- package/templates/marketplace/ui/card.tsx +48 -0
- package/templates/marketplace/ui/input.tsx +17 -0
- package/templates/marketplace/ui/label.tsx +18 -0
- package/templates/marketplace/ui/textarea.tsx +17 -0
- package/templates/marketplace/ui/tokens.css +32 -0
- package/templates/marketplace/ui/utils.ts +6 -0
- package/templates/restaurant/.env.example +12 -0
- package/templates/restaurant/AGENTS.md +61 -0
- package/templates/restaurant/README.md +77 -0
- package/templates/restaurant/app/auth-form.tsx +129 -0
- package/templates/restaurant/app/dashboard/dashboard-client.tsx +263 -0
- package/templates/restaurant/app/dashboard/page.tsx +59 -0
- package/templates/restaurant/app/error.tsx +26 -0
- package/templates/restaurant/app/globals.css +148 -0
- package/templates/restaurant/app/layout.tsx +151 -0
- package/templates/restaurant/app/login/page.tsx +39 -0
- package/templates/restaurant/app/not-found.tsx +19 -0
- package/templates/restaurant/app/page.tsx +194 -0
- package/templates/restaurant/app/reservation-widget.tsx +359 -0
- package/templates/restaurant/app/robots.ts +12 -0
- package/templates/restaurant/app/sitemap.ts +9 -0
- package/templates/restaurant/app.ts +115 -0
- package/templates/restaurant/components/marketing.tsx +162 -0
- package/templates/restaurant/components/section-scroller.tsx +35 -0
- package/templates/restaurant/components/ui/button.tsx +56 -0
- package/templates/restaurant/components/ui/card.tsx +90 -0
- package/templates/restaurant/components.json +20 -0
- package/templates/restaurant/functions/cancelReservation.ts +26 -0
- package/templates/restaurant/functions/confirmReservation.ts +17 -0
- package/templates/restaurant/functions/createReservation.ts +92 -0
- package/templates/restaurant/functions/reservationsForOwner.ts +28 -0
- package/templates/restaurant/gitignore +10 -0
- package/templates/restaurant/lib/owner.ts +26 -0
- package/templates/restaurant/lib/reservation.ts +22 -0
- package/templates/restaurant/lib/site.config.ts +218 -0
- package/templates/restaurant/lib/slots.ts +55 -0
- package/templates/restaurant/lib/utils.ts +10 -0
- package/templates/restaurant/package.json +34 -0
- package/templates/restaurant/tsconfig.json +18 -0
- package/templates/shop/.env.example +32 -0
- package/templates/shop/AGENTS.md +61 -0
- package/templates/shop/README.md +102 -0
- package/templates/shop/app/auth-form.tsx +129 -0
- package/templates/shop/app/dashboard/dashboard-client.tsx +264 -0
- package/templates/shop/app/dashboard/page.tsx +59 -0
- package/templates/shop/app/error.tsx +26 -0
- package/templates/shop/app/globals.css +148 -0
- package/templates/shop/app/layout.tsx +160 -0
- package/templates/shop/app/login/page.tsx +39 -0
- package/templates/shop/app/not-found.tsx +19 -0
- package/templates/shop/app/page.tsx +95 -0
- package/templates/shop/app/robots.ts +12 -0
- package/templates/shop/app/shop-client.tsx +436 -0
- package/templates/shop/app/sitemap.ts +9 -0
- package/templates/shop/app/success/page.tsx +33 -0
- package/templates/shop/app.ts +134 -0
- package/templates/shop/components/marketing.tsx +96 -0
- package/templates/shop/components/section-scroller.tsx +35 -0
- package/templates/shop/components/ui/button.tsx +56 -0
- package/templates/shop/components/ui/card.tsx +90 -0
- package/templates/shop/components.json +20 -0
- package/templates/shop/functions/cancelOrder.ts +33 -0
- package/templates/shop/functions/checkout.ts +130 -0
- package/templates/shop/functions/fulfillOrder.ts +17 -0
- package/templates/shop/functions/markGroupPaid.ts +26 -0
- package/templates/shop/functions/ordersForOwner.ts +28 -0
- package/templates/shop/functions/releaseGroup.ts +36 -0
- package/templates/shop/functions/reserveCart.ts +87 -0
- package/templates/shop/functions/restockProduct.ts +23 -0
- package/templates/shop/functions/seedProducts.ts +30 -0
- package/templates/shop/functions/stripeWebhook.ts +72 -0
- package/templates/shop/gitignore +10 -0
- package/templates/shop/lib/owner.ts +26 -0
- package/templates/shop/lib/shop.ts +45 -0
- package/templates/shop/lib/site.config.ts +198 -0
- package/templates/shop/lib/utils.ts +10 -0
- package/templates/shop/package.json +35 -0
- package/templates/shop/tsconfig.json +18 -0
- package/templates/waitlist/.env.example +12 -0
- package/templates/waitlist/AGENTS.md +61 -0
- package/templates/waitlist/README.md +81 -0
- package/templates/waitlist/app/auth-form.tsx +129 -0
- package/templates/waitlist/app/dashboard/dashboard-client.tsx +297 -0
- package/templates/waitlist/app/dashboard/page.tsx +70 -0
- package/templates/waitlist/app/error.tsx +26 -0
- package/templates/waitlist/app/globals.css +148 -0
- package/templates/waitlist/app/layout.tsx +158 -0
- package/templates/waitlist/app/login/page.tsx +39 -0
- package/templates/waitlist/app/not-found.tsx +19 -0
- package/templates/waitlist/app/page.tsx +119 -0
- package/templates/waitlist/app/robots.ts +12 -0
- package/templates/waitlist/app/sitemap.ts +9 -0
- package/templates/waitlist/app/waitlist-hero.tsx +219 -0
- package/templates/waitlist/app.ts +134 -0
- package/templates/waitlist/components/marketing.tsx +96 -0
- package/templates/waitlist/components/ui/button.tsx +56 -0
- package/templates/waitlist/components/ui/card.tsx +90 -0
- package/templates/waitlist/components.json +20 -0
- package/templates/waitlist/functions/joinWaitlist.ts +82 -0
- package/templates/waitlist/functions/waitlistStats.ts +75 -0
- package/templates/waitlist/gitignore +10 -0
- package/templates/waitlist/lib/owner.ts +26 -0
- package/templates/waitlist/lib/site.config.ts +178 -0
- package/templates/waitlist/lib/stats.ts +30 -0
- package/templates/waitlist/lib/utils.ts +10 -0
- package/templates/waitlist/package.json +34 -0
- package/templates/waitlist/tsconfig.json +18 -0
|
@@ -0,0 +1,739 @@
|
|
|
1
|
+
// THE single source of truth for everything business-specific in this template.
|
|
2
|
+
// Rebrand the entire site by editing this ONE file — the marketing components
|
|
3
|
+
// (hero, pricing, FAQ, footer, nav) all read from here and stay generic. The
|
|
4
|
+
// `create-pylon` scaffolder and automated generators target this file too, so a
|
|
5
|
+
// whole site can be themed by producing one typed object.
|
|
6
|
+
//
|
|
7
|
+
// Colors live here (applied as CSS variables on <html> in app/layout.tsx), so
|
|
8
|
+
// you don't touch globals.css to re-theme the marketing pages.
|
|
9
|
+
//
|
|
10
|
+
// Fictional demo copy — replace the values, keep the shape.
|
|
11
|
+
|
|
12
|
+
/* ----------------------------- types ----------------------------- */
|
|
13
|
+
|
|
14
|
+
export type ProductFeature = { title: string; body: string };
|
|
15
|
+
|
|
16
|
+
export type Product = {
|
|
17
|
+
slug: string;
|
|
18
|
+
icon: string;
|
|
19
|
+
title: string; // nav label + page <h1> subject
|
|
20
|
+
tagline: string; // one-line blurb for the nav dropdown
|
|
21
|
+
eyebrow: string; // section/page eyebrow
|
|
22
|
+
headline: string; // page hero headline
|
|
23
|
+
summary: string; // page hero paragraph
|
|
24
|
+
features: ProductFeature[];
|
|
25
|
+
mockupUrl: string; // fake browser URL in the screenshot frame
|
|
26
|
+
mockupLabel: string; // placeholder label inside the frame
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type ContentSection = { title: string; body: string };
|
|
30
|
+
|
|
31
|
+
export type SitePage = {
|
|
32
|
+
slug: string;
|
|
33
|
+
navLabel: string; // label in nav/footer
|
|
34
|
+
eyebrow: string;
|
|
35
|
+
title: string; // hero headline
|
|
36
|
+
summary: string;
|
|
37
|
+
sections: ContentSection[];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type Comparison = {
|
|
41
|
+
slug: string;
|
|
42
|
+
navLabel: string;
|
|
43
|
+
competitor: string;
|
|
44
|
+
title: string;
|
|
45
|
+
summary: string;
|
|
46
|
+
rows: { dim: string; acme: string; them: string }[];
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export type Social = { label: string; href: string; path: string };
|
|
50
|
+
export type TextItem = { title: string; body: string };
|
|
51
|
+
export type IconItem = { icon: string; title: string; body: string };
|
|
52
|
+
export type Quote = { quote: string; name: string; role: string };
|
|
53
|
+
export type Plan = {
|
|
54
|
+
name: string;
|
|
55
|
+
tagline: string;
|
|
56
|
+
price: string;
|
|
57
|
+
unit: string;
|
|
58
|
+
cta: string;
|
|
59
|
+
featured: boolean;
|
|
60
|
+
features: string[];
|
|
61
|
+
};
|
|
62
|
+
export type Faq = { q: string; a: string };
|
|
63
|
+
|
|
64
|
+
export type SiteConfig = {
|
|
65
|
+
brand: {
|
|
66
|
+
name: string;
|
|
67
|
+
letter: string; // logo monogram
|
|
68
|
+
domain: string; // shown in mockup browser frames, e.g. "acme.app"
|
|
69
|
+
email: string;
|
|
70
|
+
footerBlurb: string;
|
|
71
|
+
copyrightName: string;
|
|
72
|
+
socials: Social[];
|
|
73
|
+
};
|
|
74
|
+
// Marketing accent + surfaces. Applied as CSS vars on <html> in layout.tsx.
|
|
75
|
+
colors: { brand: string; brandSoft: string; paper: string };
|
|
76
|
+
seo: { title: string; description: string };
|
|
77
|
+
hero: {
|
|
78
|
+
badge: string;
|
|
79
|
+
headline: string;
|
|
80
|
+
subcopy: string;
|
|
81
|
+
mockupLabel: string;
|
|
82
|
+
};
|
|
83
|
+
logoCloud: { label: string; companies: string[] };
|
|
84
|
+
outcomes: { eyebrow: string; headline: string; body: string; items: TextItem[] };
|
|
85
|
+
featuredTestimonial: { quote: string; name: string; role: string };
|
|
86
|
+
entryPoints: { eyebrow: string; title: string; body: string; items: IconItem[] };
|
|
87
|
+
engagement: {
|
|
88
|
+
eyebrow: string;
|
|
89
|
+
headline: string;
|
|
90
|
+
paragraphs: string[];
|
|
91
|
+
items: TextItem[];
|
|
92
|
+
};
|
|
93
|
+
customers: { eyebrow: string; title: string; body: string; quotes: Quote[] };
|
|
94
|
+
gettingStarted: { eyebrow: string; headline: string; body: string; steps: TextItem[] };
|
|
95
|
+
pricing: { eyebrow: string; headline: string; body: string; plans: Plan[] };
|
|
96
|
+
team: { eyebrow: string; headline: string; body: string; items: TextItem[] };
|
|
97
|
+
finalCta: {
|
|
98
|
+
eyebrow: string;
|
|
99
|
+
headline: string;
|
|
100
|
+
bodyLead: string;
|
|
101
|
+
highlight: string;
|
|
102
|
+
bodyTail: string;
|
|
103
|
+
cta: string;
|
|
104
|
+
footnote: string;
|
|
105
|
+
};
|
|
106
|
+
faq: { eyebrow: string; headline: string; items: Faq[] };
|
|
107
|
+
products: Product[];
|
|
108
|
+
solutions: SitePage[];
|
|
109
|
+
resources: SitePage[];
|
|
110
|
+
company: SitePage[];
|
|
111
|
+
comparisons: Comparison[];
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/* ----------------------------- config ---------------------------- */
|
|
115
|
+
|
|
116
|
+
export const siteConfig: SiteConfig = {
|
|
117
|
+
brand: {
|
|
118
|
+
name: "Acme",
|
|
119
|
+
letter: "A",
|
|
120
|
+
domain: "acme.app",
|
|
121
|
+
email: "hello@acme.example",
|
|
122
|
+
footerBlurb:
|
|
123
|
+
"The workspace where your team plans, builds, and ships together — projects, docs, and automation in one place.",
|
|
124
|
+
copyrightName: "Acme, Inc.",
|
|
125
|
+
socials: [
|
|
126
|
+
{
|
|
127
|
+
label: "X",
|
|
128
|
+
href: "https://x.com/pylonsync",
|
|
129
|
+
path: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
label: "GitHub",
|
|
133
|
+
href: "https://github.com/pylonsync/pylon",
|
|
134
|
+
path: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
colors: { brand: "#2563eb", brandSoft: "#e8f0fe", paper: "#fafafa" },
|
|
140
|
+
|
|
141
|
+
seo: {
|
|
142
|
+
title: "Acme — the workspace where work gets done",
|
|
143
|
+
description:
|
|
144
|
+
"Acme brings your projects, your people, and your updates into one fast, real-time workspace. Plan together, ship together, keep everyone in the loop.",
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
hero: {
|
|
148
|
+
badge: "Acme for teams is here →",
|
|
149
|
+
headline: "The workspace where work gets done.",
|
|
150
|
+
subcopy:
|
|
151
|
+
"Acme brings your projects, your people, and your updates into one fast, real-time workspace. Plan together, ship together, and keep everyone in the loop without the busywork.",
|
|
152
|
+
mockupLabel: "Dashboard preview",
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
logoCloud: {
|
|
156
|
+
label: "Powering fast-moving teams",
|
|
157
|
+
companies: ["Northwind", "Globex", "Initech", "Umbrella", "Soylent", "Hooli"],
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
outcomes: {
|
|
161
|
+
eyebrow: "Why Acme",
|
|
162
|
+
headline: "Everything your team needs to stay in motion.",
|
|
163
|
+
body: "Most teams lose work somewhere between the kickoff and the ship date. Acme keeps the whole path in one place, so every idea has a clear route from planned, to in progress, to done.",
|
|
164
|
+
items: [
|
|
165
|
+
{
|
|
166
|
+
title: "Work in one place",
|
|
167
|
+
body: "Plans, tasks, and docs live together, so nothing gets lost between tools.",
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
title: "Clear priorities",
|
|
171
|
+
body: "Everyone can see what is planned, in progress, and done — and why.",
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
title: "Real-time by default",
|
|
175
|
+
body: "Every change syncs instantly, so the workspace is the same on every screen.",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
title: "Less busywork",
|
|
179
|
+
body: "Automations handle the routine, so your team focuses on the work that matters.",
|
|
180
|
+
},
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
featuredTestimonial: {
|
|
185
|
+
quote:
|
|
186
|
+
"Our whole team finally works in one place. Acme made it easy to see what is happening, decide what is next, and keep everyone moving in the same direction.",
|
|
187
|
+
name: "Maya Chen",
|
|
188
|
+
role: "Head of Product, Northwind",
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
entryPoints: {
|
|
192
|
+
eyebrow: "Anywhere",
|
|
193
|
+
title: "Meet your team where they already are.",
|
|
194
|
+
body: "Web, desktop, and a typed API all share the same workspace underneath, so nothing lives in two places.",
|
|
195
|
+
items: [
|
|
196
|
+
{
|
|
197
|
+
icon: "◇",
|
|
198
|
+
title: "Cloud workspace",
|
|
199
|
+
body: "Your whole team works in the browser. Nothing to install, always up to date, and secure by default.",
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
icon: "◆",
|
|
203
|
+
title: "Open API",
|
|
204
|
+
body: "A typed API and webhooks for everything in Acme, so you can wire it into the rest of your stack.",
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
engagement: {
|
|
210
|
+
eyebrow: "Momentum",
|
|
211
|
+
headline: "Most tools go quiet after the kickoff.",
|
|
212
|
+
paragraphs: [
|
|
213
|
+
"Someone shares an idea, it lands in a list, and that is the last anyone hears of it. Acme treats every idea as the start of a loop, not the end of one.",
|
|
214
|
+
"When the status moves to planned, the people who care hear about it. When it ships, they hear about it first. And every week a digest pulls them back with the work worth weighing in on.",
|
|
215
|
+
"None of it is something you configure. Turn Acme on, and the loop starts running the same day.",
|
|
216
|
+
],
|
|
217
|
+
items: [
|
|
218
|
+
{
|
|
219
|
+
title: "The loop",
|
|
220
|
+
body: "Submission, acknowledgment, progress, launch. Four moments every person gets to feel heard.",
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
title: "Instant alerts",
|
|
224
|
+
body: "The moment someone votes or comments on their idea, social proof brings them back.",
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
title: "Launch alerts",
|
|
228
|
+
body: "The note that tells a person the thing they asked for just shipped. Nothing builds loyalty faster.",
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
title: "Weekly digest",
|
|
232
|
+
body: "The top ideas across your boards, delivered every week, with a one-click way to weigh in.",
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
customers: {
|
|
238
|
+
eyebrow: "Customers",
|
|
239
|
+
title: "Teams that ship with Acme.",
|
|
240
|
+
body: "A few words from the people who run their work in Acme every day.",
|
|
241
|
+
quotes: [
|
|
242
|
+
{
|
|
243
|
+
quote:
|
|
244
|
+
"We finally have one source of truth for the work. The whole team can see what is happening without a status meeting.",
|
|
245
|
+
name: "Daniel Reyes",
|
|
246
|
+
role: "Founder, Globex",
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
quote:
|
|
250
|
+
"Acme noticeably improved how we plan. Instead of piecing together five tools, we have one hub for everything.",
|
|
251
|
+
name: "Hannah Brooks",
|
|
252
|
+
role: "Founder, OpenLane",
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
quote:
|
|
256
|
+
"Ever since we added Acme, people actually feel heard. It has helped us build a loyal community of users.",
|
|
257
|
+
name: "Marcus Bell",
|
|
258
|
+
role: "Cofounder, Initech",
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
},
|
|
262
|
+
|
|
263
|
+
gettingStarted: {
|
|
264
|
+
eyebrow: "Get started",
|
|
265
|
+
headline: "Up and running in 60 seconds.",
|
|
266
|
+
body: "No credit card, no sales call, no setup wizard. An email and a workspace name are all it takes to start.",
|
|
267
|
+
steps: [
|
|
268
|
+
{
|
|
269
|
+
title: "Create a workspace",
|
|
270
|
+
body: "Sign up with just an email. Pick a name. That is the entire form.",
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
title: "Invite your team",
|
|
274
|
+
body: "Add teammates, share the board URL, or link it from your site. Work starts flowing in.",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
title: "Watch the loop start",
|
|
278
|
+
body: "People add ideas, votes pile up, you ship, and everyone hears about it and comes back with more.",
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
pricing: {
|
|
284
|
+
eyebrow: "Pricing",
|
|
285
|
+
headline: "Simple pricing. Every plan.",
|
|
286
|
+
body: "Start free and upgrade when your team grows. No per-seat surprises, no annual lock-in.",
|
|
287
|
+
plans: [
|
|
288
|
+
{
|
|
289
|
+
name: "Free",
|
|
290
|
+
tagline: "For getting started.",
|
|
291
|
+
price: "$0",
|
|
292
|
+
unit: "forever",
|
|
293
|
+
cta: "Get started",
|
|
294
|
+
featured: false,
|
|
295
|
+
features: [
|
|
296
|
+
"Up to 3 projects",
|
|
297
|
+
"Unlimited members",
|
|
298
|
+
"Real-time board",
|
|
299
|
+
"Community support",
|
|
300
|
+
],
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
name: "Team",
|
|
304
|
+
tagline: "For small teams.",
|
|
305
|
+
price: "$29",
|
|
306
|
+
unit: "/ month",
|
|
307
|
+
cta: "Start free trial",
|
|
308
|
+
featured: true,
|
|
309
|
+
features: [
|
|
310
|
+
"Unlimited projects",
|
|
311
|
+
"Roadmap and updates",
|
|
312
|
+
"Private boards",
|
|
313
|
+
"Priority support",
|
|
314
|
+
],
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: "Business",
|
|
318
|
+
tagline: "For growing teams.",
|
|
319
|
+
price: "$59",
|
|
320
|
+
unit: "/ month",
|
|
321
|
+
cta: "Start free trial",
|
|
322
|
+
featured: false,
|
|
323
|
+
features: [
|
|
324
|
+
"Everything in Team",
|
|
325
|
+
"SSO and audit log",
|
|
326
|
+
"Custom domain",
|
|
327
|
+
"Onboarding help",
|
|
328
|
+
],
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
team: {
|
|
334
|
+
eyebrow: "The team",
|
|
335
|
+
headline: "Built by people who use it every day.",
|
|
336
|
+
body: "Acme is built by a small team that got tired of clunky, overpriced tools. Every feature earns its place by being something worth using every day.",
|
|
337
|
+
items: [
|
|
338
|
+
{
|
|
339
|
+
title: "A small team",
|
|
340
|
+
body: "No committees. Every feature ships because someone decided it was worth building.",
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
title: "Design first",
|
|
344
|
+
body: "Beautiful software makes people want to use it. Every screen is built with that in mind.",
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
title: "Ships every week",
|
|
348
|
+
body: "Updates go out weekly, often based on work posted directly to our own board.",
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
title: "Customer funded",
|
|
352
|
+
body: "We optimize for your renewal, not an exit. If Acme works for you, it works for us.",
|
|
353
|
+
},
|
|
354
|
+
],
|
|
355
|
+
},
|
|
356
|
+
|
|
357
|
+
finalCta: {
|
|
358
|
+
eyebrow: "Start building",
|
|
359
|
+
headline: "Stop losing momentum to busywork.",
|
|
360
|
+
bodyLead:
|
|
361
|
+
"When your team can see the work, decide what is next, and ship in one place, momentum takes care of itself. This is what ",
|
|
362
|
+
highlight: "working in flow",
|
|
363
|
+
bodyTail: " looks like.",
|
|
364
|
+
cta: "Start building with Acme",
|
|
365
|
+
footnote: "Free to start · No credit card · Cancel anytime",
|
|
366
|
+
},
|
|
367
|
+
|
|
368
|
+
faq: {
|
|
369
|
+
eyebrow: "Questions",
|
|
370
|
+
headline: "Frequently asked.",
|
|
371
|
+
items: [
|
|
372
|
+
{
|
|
373
|
+
q: "Is Acme a fit for my team?",
|
|
374
|
+
a: "Acme works for any team that plans and ships work together — product, design, engineering, or ops.",
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
q: "What about migrating from another tool?",
|
|
378
|
+
a: "Import your existing projects and pick up where you left off.",
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
q: "Is there an API or a way to script this?",
|
|
382
|
+
a: "Yes — every action in Acme is available over a typed API and an MCP server.",
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
q: "Do you offer SSO?",
|
|
386
|
+
a: "SSO and audit logging are included on the Business plan.",
|
|
387
|
+
},
|
|
388
|
+
],
|
|
389
|
+
},
|
|
390
|
+
|
|
391
|
+
products: [
|
|
392
|
+
{
|
|
393
|
+
slug: "projects",
|
|
394
|
+
icon: "▤",
|
|
395
|
+
title: "Projects",
|
|
396
|
+
tagline: "Plan and track every initiative.",
|
|
397
|
+
eyebrow: "Projects",
|
|
398
|
+
headline: "Plan every project in one place.",
|
|
399
|
+
summary:
|
|
400
|
+
"Give your team one place to plan the work, see what is in flight, and keep every project moving toward done.",
|
|
401
|
+
mockupUrl: "acme.app/projects",
|
|
402
|
+
mockupLabel: "Projects board",
|
|
403
|
+
features: [
|
|
404
|
+
{ title: "Flexible views", body: "See the work as a board, a list, or a timeline — whatever fits the team." },
|
|
405
|
+
{ title: "Milestones", body: "Group work into milestones so everyone knows what ships next." },
|
|
406
|
+
{ title: "Dependencies", body: "Link related work so blockers surface before they bite." },
|
|
407
|
+
{ title: "Custom fields", body: "Track the details that matter to your team, your way." },
|
|
408
|
+
{ title: "Templates", body: "Start new projects from a template instead of a blank page." },
|
|
409
|
+
{ title: "Saved filters", body: "Slice the work by owner, status, or label in a single click." },
|
|
410
|
+
],
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
slug: "tasks",
|
|
414
|
+
icon: "✓",
|
|
415
|
+
title: "Tasks",
|
|
416
|
+
tagline: "Assign, prioritize, and finish work.",
|
|
417
|
+
eyebrow: "Tasks",
|
|
418
|
+
headline: "Turn plans into finished work.",
|
|
419
|
+
summary:
|
|
420
|
+
"Break projects into tasks, assign owners, and watch progress update in real time across every screen.",
|
|
421
|
+
mockupUrl: "acme.app/tasks",
|
|
422
|
+
mockupLabel: "Task list",
|
|
423
|
+
features: [
|
|
424
|
+
{ title: "Assignees and due dates", body: "Every task has a clear owner and a clear deadline." },
|
|
425
|
+
{ title: "Subtasks", body: "Break big tasks into small, checkable steps." },
|
|
426
|
+
{ title: "Priorities", body: "Sort by what matters most so the right work happens first." },
|
|
427
|
+
{ title: "Comments", body: "Discuss the work where it lives, with full context attached." },
|
|
428
|
+
{ title: "My work", body: "A personal view of everything on your plate, across projects." },
|
|
429
|
+
{ title: "Recurring tasks", body: "Set it once and the task comes back when it should." },
|
|
430
|
+
],
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
slug: "docs",
|
|
434
|
+
icon: "≡",
|
|
435
|
+
title: "Docs",
|
|
436
|
+
tagline: "Write and share team knowledge.",
|
|
437
|
+
eyebrow: "Docs",
|
|
438
|
+
headline: "Keep what your team knows in one place.",
|
|
439
|
+
summary:
|
|
440
|
+
"Write docs, notes, and specs alongside the work, so the context never lives in just one person's head.",
|
|
441
|
+
mockupUrl: "acme.app/docs",
|
|
442
|
+
mockupLabel: "Doc editor",
|
|
443
|
+
features: [
|
|
444
|
+
{ title: "Rich editor", body: "Headings, checklists, tables, and embeds in a clean editor." },
|
|
445
|
+
{ title: "Linked to work", body: "Connect a doc to the project or task it describes." },
|
|
446
|
+
{ title: "Real-time co-editing", body: "Write together, with changes syncing as you type." },
|
|
447
|
+
{ title: "Version history", body: "Roll back to any earlier version in a click." },
|
|
448
|
+
{ title: "Templates", body: "Spin up specs, briefs, and notes from reusable templates." },
|
|
449
|
+
{ title: "Instant search", body: "Find any doc by title or content in milliseconds." },
|
|
450
|
+
],
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
slug: "automations",
|
|
454
|
+
icon: "⟳",
|
|
455
|
+
title: "Automations",
|
|
456
|
+
tagline: "Automate the busywork.",
|
|
457
|
+
eyebrow: "Automations",
|
|
458
|
+
headline: "Let the routine work run itself.",
|
|
459
|
+
summary:
|
|
460
|
+
"Build simple rules that move work forward automatically, so your team spends its time on what actually matters.",
|
|
461
|
+
mockupUrl: "acme.app/automations",
|
|
462
|
+
mockupLabel: "Automation builder",
|
|
463
|
+
features: [
|
|
464
|
+
{ title: "Rules", body: "When this happens, do that — no code required." },
|
|
465
|
+
{ title: "Scheduled runs", body: "Kick off routine work on a schedule you set." },
|
|
466
|
+
{ title: "Webhooks", body: "Trigger automations from anything that can send a request." },
|
|
467
|
+
{ title: "Run history", body: "See exactly what ran, when, and why." },
|
|
468
|
+
],
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
slug: "analytics",
|
|
472
|
+
icon: "◔",
|
|
473
|
+
title: "Analytics",
|
|
474
|
+
tagline: "Measure what actually matters.",
|
|
475
|
+
eyebrow: "Analytics",
|
|
476
|
+
headline: "See how the work is really going.",
|
|
477
|
+
summary:
|
|
478
|
+
"Track throughput, cycle time, and progress across projects, so you can spot what is stuck before it slips.",
|
|
479
|
+
mockupUrl: "acme.app/analytics",
|
|
480
|
+
mockupLabel: "Analytics dashboard",
|
|
481
|
+
features: [
|
|
482
|
+
{ title: "Dashboards", body: "Build views that answer the questions your team asks most." },
|
|
483
|
+
{ title: "Cycle time", body: "See how long work takes from start to done." },
|
|
484
|
+
{ title: "Throughput", body: "Track how much ships each week, by team or project." },
|
|
485
|
+
{ title: "Exports", body: "Send any view to CSV or your warehouse." },
|
|
486
|
+
],
|
|
487
|
+
},
|
|
488
|
+
],
|
|
489
|
+
|
|
490
|
+
solutions: [
|
|
491
|
+
{
|
|
492
|
+
slug: "startups",
|
|
493
|
+
navLabel: "For startups",
|
|
494
|
+
eyebrow: "Solutions",
|
|
495
|
+
title: "Move fast without losing the thread.",
|
|
496
|
+
summary:
|
|
497
|
+
"Keep a small team aligned as everything changes weekly. Acme gives you one place to plan, build, and ship before the next pivot.",
|
|
498
|
+
sections: [
|
|
499
|
+
{ title: "One tool, not ten", body: "Projects, tasks, and docs in one place, so you are not paying for or stitching together five apps." },
|
|
500
|
+
{ title: "Set up in minutes", body: "No admin overhead. Invite the team and start working the same day." },
|
|
501
|
+
{ title: "Grows with you", body: "The same workspace works at five people and at fifty." },
|
|
502
|
+
],
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
slug: "agencies",
|
|
506
|
+
navLabel: "For agencies",
|
|
507
|
+
eyebrow: "Solutions",
|
|
508
|
+
title: "Run every client like clockwork.",
|
|
509
|
+
summary:
|
|
510
|
+
"Give each client their own space, keep the work organized, and show progress without a status meeting.",
|
|
511
|
+
sections: [
|
|
512
|
+
{ title: "A space per client", body: "Separate workspaces keep every engagement tidy and private." },
|
|
513
|
+
{ title: "Shareable views", body: "Send clients a read-only view of exactly what is in flight." },
|
|
514
|
+
{ title: "Reusable templates", body: "Start every new engagement from a proven playbook." },
|
|
515
|
+
],
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
slug: "enterprise",
|
|
519
|
+
navLabel: "For enterprise",
|
|
520
|
+
eyebrow: "Solutions",
|
|
521
|
+
title: "Scale without the chaos.",
|
|
522
|
+
summary:
|
|
523
|
+
"Bring hundreds of people into one system of record, with the controls and visibility a larger org needs.",
|
|
524
|
+
sections: [
|
|
525
|
+
{ title: "SSO and roles", body: "Single sign-on and granular roles keep access where it belongs." },
|
|
526
|
+
{ title: "Audit log", body: "A complete record of who changed what, and when." },
|
|
527
|
+
{ title: "Rollups", body: "See progress across teams and departments in one view." },
|
|
528
|
+
],
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
slug: "teams",
|
|
532
|
+
navLabel: "For teams",
|
|
533
|
+
eyebrow: "Solutions",
|
|
534
|
+
title: "Built for how your team works.",
|
|
535
|
+
summary:
|
|
536
|
+
"Whether you build, design, market, or support, Acme adapts to your process instead of forcing a new one.",
|
|
537
|
+
sections: [
|
|
538
|
+
{ title: "Your workflow", body: "Custom statuses and fields match the way your team already works." },
|
|
539
|
+
{ title: "Cross-team work", body: "Hand work between teams without it falling through a crack." },
|
|
540
|
+
{ title: "Less status-chasing", body: "Everyone sees the same live picture, so updates write themselves." },
|
|
541
|
+
],
|
|
542
|
+
},
|
|
543
|
+
],
|
|
544
|
+
|
|
545
|
+
resources: [
|
|
546
|
+
{
|
|
547
|
+
slug: "docs",
|
|
548
|
+
navLabel: "Docs",
|
|
549
|
+
eyebrow: "Resources",
|
|
550
|
+
title: "Documentation.",
|
|
551
|
+
summary: "Everything you need to set up Acme and get your team productive.",
|
|
552
|
+
sections: [
|
|
553
|
+
{ title: "Getting started", body: "Create a workspace, invite your team, and ship your first project." },
|
|
554
|
+
{ title: "Guides", body: "Deep dives on projects, tasks, docs, automations, and analytics." },
|
|
555
|
+
{ title: "API", body: "Build on the typed Acme API and webhooks." },
|
|
556
|
+
],
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
slug: "guides",
|
|
560
|
+
navLabel: "Guides",
|
|
561
|
+
eyebrow: "Resources",
|
|
562
|
+
title: "Guides and playbooks.",
|
|
563
|
+
summary: "Practical walkthroughs for getting the most out of Acme.",
|
|
564
|
+
sections: [
|
|
565
|
+
{ title: "Run a sprint", body: "Plan, track, and review a two-week cycle in Acme." },
|
|
566
|
+
{ title: "Automate intake", body: "Route incoming work to the right team automatically." },
|
|
567
|
+
{ title: "Report to leadership", body: "Build a dashboard that answers the questions you get asked." },
|
|
568
|
+
],
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
slug: "changelog",
|
|
572
|
+
navLabel: "Changelog",
|
|
573
|
+
eyebrow: "Resources",
|
|
574
|
+
title: "What's new.",
|
|
575
|
+
summary: "Every improvement we ship, in one place.",
|
|
576
|
+
sections: [
|
|
577
|
+
{ title: "This week", body: "Faster search, a redesigned task list, and new automation triggers." },
|
|
578
|
+
{ title: "Last week", body: "Timeline view for projects and CSV export for analytics." },
|
|
579
|
+
{ title: "Earlier", body: "Webhooks, custom fields, and version history for docs." },
|
|
580
|
+
],
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
slug: "api",
|
|
584
|
+
navLabel: "API reference",
|
|
585
|
+
eyebrow: "Resources",
|
|
586
|
+
title: "API reference.",
|
|
587
|
+
summary: "A typed REST API and webhooks for everything in Acme.",
|
|
588
|
+
sections: [
|
|
589
|
+
{ title: "Authentication", body: "API keys scoped to a workspace, revocable at any time." },
|
|
590
|
+
{ title: "Resources", body: "Projects, tasks, docs, and automations, all over the same API." },
|
|
591
|
+
{ title: "Webhooks", body: "Subscribe to events and react to changes in real time." },
|
|
592
|
+
],
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
slug: "status",
|
|
596
|
+
navLabel: "Status",
|
|
597
|
+
eyebrow: "Resources",
|
|
598
|
+
title: "System status.",
|
|
599
|
+
summary: "Live status for every Acme service.",
|
|
600
|
+
sections: [
|
|
601
|
+
{ title: "API", body: "Operational — 99.99% over the last 90 days." },
|
|
602
|
+
{ title: "Web app", body: "Operational — no incidents this week." },
|
|
603
|
+
{ title: "Webhooks", body: "Operational — delivering within seconds." },
|
|
604
|
+
],
|
|
605
|
+
},
|
|
606
|
+
],
|
|
607
|
+
|
|
608
|
+
company: [
|
|
609
|
+
{
|
|
610
|
+
slug: "about",
|
|
611
|
+
navLabel: "About",
|
|
612
|
+
eyebrow: "Company",
|
|
613
|
+
title: "About Acme.",
|
|
614
|
+
summary: "We build the workspace we always wanted: fast, focused, and a pleasure to use.",
|
|
615
|
+
sections: [
|
|
616
|
+
{ title: "Our mission", body: "Help teams do their best work without fighting their tools." },
|
|
617
|
+
{ title: "How we work", body: "Small team, weekly releases, every decision close to the user." },
|
|
618
|
+
{ title: "Where we are", body: "Remote-first, with people across a dozen time zones." },
|
|
619
|
+
],
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
slug: "blog",
|
|
623
|
+
navLabel: "Blog",
|
|
624
|
+
eyebrow: "Company",
|
|
625
|
+
title: "The Acme blog.",
|
|
626
|
+
summary: "Notes on building Acme, and on building product in general.",
|
|
627
|
+
sections: [
|
|
628
|
+
{ title: "Why one tool beats ten", body: "The hidden cost of stitching your stack together." },
|
|
629
|
+
{ title: "Shipping weekly", body: "How a small team keeps a steady release cadence." },
|
|
630
|
+
{ title: "Designing for focus", body: "The principles behind the Acme interface." },
|
|
631
|
+
],
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
slug: "careers",
|
|
635
|
+
navLabel: "Careers",
|
|
636
|
+
eyebrow: "Company",
|
|
637
|
+
title: "Work at Acme.",
|
|
638
|
+
summary: "We are a small team that ships a lot. If that sounds good, come build with us.",
|
|
639
|
+
sections: [
|
|
640
|
+
{ title: "Engineering", body: "Full-stack engineers who care about craft and speed." },
|
|
641
|
+
{ title: "Design", body: "Product designers who sweat the details." },
|
|
642
|
+
{ title: "Support", body: "People who love helping customers succeed." },
|
|
643
|
+
],
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
slug: "contact",
|
|
647
|
+
navLabel: "Contact",
|
|
648
|
+
eyebrow: "Company",
|
|
649
|
+
title: "Get in touch.",
|
|
650
|
+
summary: "Questions, feedback, or just want to say hi? We would love to hear from you.",
|
|
651
|
+
sections: [
|
|
652
|
+
{ title: "Sales", body: "Talk through whether Acme is a fit for your team." },
|
|
653
|
+
{ title: "Support", body: "Get help from a human, usually within a few hours." },
|
|
654
|
+
{ title: "Press", body: "Logos, screenshots, and company facts for the press." },
|
|
655
|
+
],
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
slug: "privacy",
|
|
659
|
+
navLabel: "Privacy",
|
|
660
|
+
eyebrow: "Company",
|
|
661
|
+
title: "Privacy.",
|
|
662
|
+
summary: "How Acme handles your data, in plain language.",
|
|
663
|
+
sections: [
|
|
664
|
+
{ title: "What we collect", body: "Only what we need to run the product and support you." },
|
|
665
|
+
{ title: "How we use it", body: "To operate Acme — never sold, never rented." },
|
|
666
|
+
{ title: "Your control", body: "Export or delete your data at any time." },
|
|
667
|
+
],
|
|
668
|
+
},
|
|
669
|
+
],
|
|
670
|
+
|
|
671
|
+
// Generic, made-up competitors so the template ships no real brand names.
|
|
672
|
+
comparisons: [
|
|
673
|
+
{
|
|
674
|
+
slug: "beacon",
|
|
675
|
+
navLabel: "Acme vs Beacon",
|
|
676
|
+
competitor: "Beacon",
|
|
677
|
+
title: "Acme vs Beacon",
|
|
678
|
+
summary:
|
|
679
|
+
"Beacon is a capable tool, but it splits projects, docs, and automation across separate products. Acme brings them into one fast workspace.",
|
|
680
|
+
rows: [
|
|
681
|
+
{ dim: "Projects, tasks, and docs", acme: "In one workspace", them: "Separate products" },
|
|
682
|
+
{ dim: "Real-time sync", acme: "Built in", them: "Add-on" },
|
|
683
|
+
{ dim: "Automations", acme: "Included", them: "Higher tier" },
|
|
684
|
+
{ dim: "Typed API", acme: "Yes", them: "Partial" },
|
|
685
|
+
{ dim: "Setup time", acme: "Minutes", them: "Hours" },
|
|
686
|
+
],
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
slug: "orbit",
|
|
690
|
+
navLabel: "Acme vs Orbit",
|
|
691
|
+
competitor: "Orbit",
|
|
692
|
+
title: "Acme vs Orbit",
|
|
693
|
+
summary:
|
|
694
|
+
"Orbit is flexible but slow to set up and heavy to run. Acme gives you the same power with a fraction of the overhead.",
|
|
695
|
+
rows: [
|
|
696
|
+
{ dim: "Time to first project", acme: "Same day", them: "Onboarding required" },
|
|
697
|
+
{ dim: "Speed", acme: "Instant, real-time", them: "Page reloads" },
|
|
698
|
+
{ dim: "Per-seat pricing", acme: "No surprises", them: "Adds up fast" },
|
|
699
|
+
{ dim: "Analytics", acme: "Built in", them: "Separate tool" },
|
|
700
|
+
{ dim: "Learning curve", acme: "Gentle", them: "Steep" },
|
|
701
|
+
],
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
slug: "tempo",
|
|
705
|
+
navLabel: "Acme vs Tempo",
|
|
706
|
+
competitor: "Tempo",
|
|
707
|
+
title: "Acme vs Tempo",
|
|
708
|
+
summary:
|
|
709
|
+
"Tempo is built for managers; Acme is built for the whole team. Everyone gets a fast, shared view of the work.",
|
|
710
|
+
rows: [
|
|
711
|
+
{ dim: "Designed for", acme: "The whole team", them: "Managers" },
|
|
712
|
+
{ dim: "Daily driver", acme: "Yes", them: "Reporting layer" },
|
|
713
|
+
{ dim: "Docs included", acme: "Yes", them: "No" },
|
|
714
|
+
{ dim: "Automations", acme: "Included", them: "Limited" },
|
|
715
|
+
{ dim: "Self-serve", acme: "Yes", them: "Sales-led" },
|
|
716
|
+
],
|
|
717
|
+
},
|
|
718
|
+
],
|
|
719
|
+
};
|
|
720
|
+
|
|
721
|
+
/* ------------------- back-compat exports + helpers ---------------- */
|
|
722
|
+
// Existing imports (`@/lib/products`, `@/lib/site`) keep working via these.
|
|
723
|
+
|
|
724
|
+
export const PRODUCTS = siteConfig.products;
|
|
725
|
+
export function productBySlug(slug: string): Product | undefined {
|
|
726
|
+
return PRODUCTS.find((p) => p.slug === slug);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
export const SOLUTIONS = siteConfig.solutions;
|
|
730
|
+
export const RESOURCES = siteConfig.resources;
|
|
731
|
+
export const COMPANY = siteConfig.company;
|
|
732
|
+
export const COMPARISONS = siteConfig.comparisons;
|
|
733
|
+
|
|
734
|
+
export function bySlug<T extends { slug: string }>(
|
|
735
|
+
list: T[],
|
|
736
|
+
slug: string,
|
|
737
|
+
): T | undefined {
|
|
738
|
+
return list.find((x) => x.slug === slug);
|
|
739
|
+
}
|