default-spec.ts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. import type { NextAppSpec } from "@json-render/next";
  2. export const defaultSpec: NextAppSpec = {
  3. metadata: {
  4. title: {
  5. default: "Acme Inc",
  6. template: "%s | Acme Inc",
  7. },
  8. description: "We build the future of software.",
  9. icons: "/icon.svg",
  10. },
  11. state: {},
  12. layouts: {
  13. main: {
  14. root: "wrapper",
  15. elements: {
  16. wrapper: {
  17. type: "Stack",
  18. props: {
  19. direction: "vertical",
  20. gap: "none",
  21. align: "stretch",
  22. className: "min-h-screen",
  23. },
  24. children: ["header", "content", "footer"],
  25. },
  26. header: {
  27. type: "Header",
  28. props: {
  29. brand: "Acme Inc",
  30. links: [
  31. { label: "Home", href: "/" },
  32. { label: "About", href: "/about" },
  33. { label: "Contact", href: "/contact" },
  34. ],
  35. variant: "simple",
  36. },
  37. },
  38. content: {
  39. type: "Slot",
  40. props: {},
  41. },
  42. footer: {
  43. type: "Footer",
  44. props: {
  45. brand: "Acme Inc",
  46. links: [
  47. { label: "Home", href: "/" },
  48. { label: "About", href: "/about" },
  49. { label: "Contact", href: "/contact" },
  50. ],
  51. copyright: "2026 Acme Inc. All rights reserved.",
  52. variant: "simple",
  53. },
  54. },
  55. },
  56. },
  57. },
  58. routes: {
  59. "/": {
  60. layout: "main",
  61. metadata: {
  62. title: "Home",
  63. description: "Welcome to Acme Inc - we build the future of software.",
  64. },
  65. page: {
  66. root: "page",
  67. elements: {
  68. page: {
  69. type: "Stack",
  70. props: {
  71. direction: "vertical",
  72. gap: "none",
  73. align: "stretch",
  74. },
  75. children: ["hero", "features", "testimonials", "cta"],
  76. },
  77. hero: {
  78. type: "Hero",
  79. props: {
  80. headline: "Build the future with Acme",
  81. description:
  82. "We help companies ship better software, faster. Our platform provides the tools, infrastructure, and insights you need to build world-class products.",
  83. primaryCta: { label: "Get Started", href: "/contact" },
  84. secondaryCta: { label: "Learn More", href: "/about" },
  85. badge: "Now in Beta",
  86. variant: "centered",
  87. },
  88. },
  89. features: {
  90. type: "Features",
  91. props: {
  92. headline: "Why Acme?",
  93. description:
  94. "Everything you need to build, deploy, and scale your applications.",
  95. items: [
  96. {
  97. title: "Lightning Fast",
  98. description:
  99. "Optimized for speed with edge-first architecture and smart caching.",
  100. },
  101. {
  102. title: "Secure by Default",
  103. description:
  104. "Enterprise-grade security with end-to-end encryption and SOC 2 compliance.",
  105. },
  106. {
  107. title: "Developer First",
  108. description:
  109. "APIs, SDKs, and CLI tools designed to fit your workflow perfectly.",
  110. },
  111. ],
  112. columns: 3,
  113. variant: "cards",
  114. },
  115. },
  116. testimonials: {
  117. type: "Testimonials",
  118. props: {
  119. headline: "Trusted by industry leaders",
  120. items: [
  121. {
  122. quote:
  123. "Acme has completely transformed how we ship products. Our deployment time went from hours to minutes.",
  124. author: "Jordan Lee",
  125. role: "VP Engineering at Globex",
  126. },
  127. {
  128. quote:
  129. "The developer experience is unmatched. Our team onboarded in a single afternoon.",
  130. author: "Priya Patel",
  131. role: "CTO at Initech",
  132. },
  133. {
  134. quote:
  135. "We cut our infrastructure costs by 40% within the first quarter of switching to Acme.",
  136. author: "Sam Ortiz",
  137. role: "Head of Platform at Hooli",
  138. },
  139. ],
  140. },
  141. },
  142. cta: {
  143. type: "CTA",
  144. props: {
  145. headline: "Ready to get started?",
  146. description:
  147. "Join thousands of teams building better software with Acme.",
  148. buttonLabel: "Contact Us",
  149. buttonHref: "/contact",
  150. variant: "banner",
  151. },
  152. },
  153. },
  154. },
  155. },
  156. "/about": {
  157. layout: "main",
  158. metadata: {
  159. title: "About",
  160. description:
  161. "Learn about our mission, values, and the team behind Acme.",
  162. },
  163. page: {
  164. root: "page",
  165. elements: {
  166. page: {
  167. type: "Stack",
  168. props: {
  169. direction: "vertical",
  170. gap: "none",
  171. align: "stretch",
  172. },
  173. children: ["hero", "features", "team", "cta"],
  174. },
  175. hero: {
  176. type: "Hero",
  177. props: {
  178. headline: "About Acme Inc",
  179. description:
  180. "Founded in 2024, we are on a mission to make software development accessible to everyone. We believe the best tools should be simple, powerful, and delightful to use.",
  181. variant: "centered",
  182. primaryCta: null,
  183. secondaryCta: null,
  184. badge: null,
  185. },
  186. },
  187. features: {
  188. type: "Features",
  189. props: {
  190. headline: "Our Values",
  191. items: [
  192. {
  193. title: "Simplicity",
  194. description:
  195. "We remove complexity so you can focus on building great products.",
  196. },
  197. {
  198. title: "Transparency",
  199. description:
  200. "Open communication, honest pricing, and clear documentation.",
  201. },
  202. {
  203. title: "Craftsmanship",
  204. description:
  205. "Every detail matters. We sweat the small stuff so you don't have to.",
  206. },
  207. ],
  208. columns: 3,
  209. variant: "simple",
  210. description: null,
  211. },
  212. },
  213. team: {
  214. type: "Team",
  215. props: {
  216. headline: "Meet the Team",
  217. description:
  218. "The people behind Acme who are passionate about building great developer tools.",
  219. members: [
  220. {
  221. name: "Alex Chen",
  222. role: "CEO & Co-founder",
  223. bio: "Previously at Vercel and Google. Passionate about developer experience.",
  224. },
  225. {
  226. name: "Sarah Kim",
  227. role: "CTO & Co-founder",
  228. bio: "Built distributed systems at AWS. Loves solving hard infrastructure problems.",
  229. },
  230. {
  231. name: "Marcus Rivera",
  232. role: "Head of Design",
  233. bio: "Former design lead at Figma and Stripe. Obsessed with clarity and craft.",
  234. },
  235. ],
  236. variant: "grid",
  237. },
  238. },
  239. cta: {
  240. type: "CTA",
  241. props: {
  242. headline: "Want to join us?",
  243. description:
  244. "We are always looking for talented people to join our team.",
  245. buttonLabel: "Get in Touch",
  246. buttonHref: "/contact",
  247. variant: "centered",
  248. },
  249. },
  250. },
  251. },
  252. },
  253. "/contact": {
  254. layout: "main",
  255. metadata: {
  256. title: "Contact",
  257. description: "Get in touch with the Acme team.",
  258. },
  259. page: {
  260. root: "page",
  261. elements: {
  262. page: {
  263. type: "Stack",
  264. props: {
  265. direction: "vertical",
  266. gap: "none",
  267. align: "stretch",
  268. },
  269. children: ["form"],
  270. },
  271. form: {
  272. type: "ContactForm",
  273. props: {
  274. headline: "Get in Touch",
  275. description:
  276. "Have a question or want to work with us? Fill out the form below and we'll get back to you within 24 hours.",
  277. fields: [
  278. {
  279. label: "Name",
  280. type: "text" as const,
  281. placeholder: "Your name",
  282. },
  283. {
  284. label: "Email",
  285. type: "email" as const,
  286. placeholder: "you@example.com",
  287. },
  288. {
  289. label: "Message",
  290. type: "textarea" as const,
  291. placeholder: "Tell us about your project...",
  292. },
  293. ],
  294. submitLabel: "Send Message",
  295. },
  296. },
  297. },
  298. },
  299. },
  300. },
  301. };