@jxsuite/starters 0.34.0

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.
Files changed (440) hide show
  1. package/index.ts +72 -0
  2. package/package.json +28 -0
  3. package/registry.json +178 -0
  4. package/sites/blog/components/bl-author-bio.json +82 -0
  5. package/sites/blog/components/bl-contact-form.json +114 -0
  6. package/sites/blog/components/bl-contact-info.json +54 -0
  7. package/sites/blog/components/bl-cta.json +62 -0
  8. package/sites/blog/components/bl-footer.json +145 -0
  9. package/sites/blog/components/bl-masthead.json +128 -0
  10. package/sites/blog/components/bl-nav.json +97 -0
  11. package/sites/blog/components/bl-newsletter-cta.json +120 -0
  12. package/sites/blog/components/bl-post-card.json +114 -0
  13. package/sites/blog/components/bl-post-list.json +17 -0
  14. package/sites/blog/components/bl-prose.json +74 -0
  15. package/sites/blog/components/bl-section-header.json +53 -0
  16. package/sites/blog/components/bl-tag-pill.json +26 -0
  17. package/sites/blog/content/posts/designing-for-slowness.md +25 -0
  18. package/sites/blog/content/posts/notes-from-a-long-walk.md +27 -0
  19. package/sites/blog/content/posts/the-city-as-a-text.md +27 -0
  20. package/sites/blog/content/posts/the-quiet-craft-of-revision.md +27 -0
  21. package/sites/blog/content/posts/tools-that-disappear.md +27 -0
  22. package/sites/blog/content/posts/what-i-learned-rereading.md +27 -0
  23. package/sites/blog/images.json +54 -0
  24. package/sites/blog/layouts/base.json +22 -0
  25. package/sites/blog/layouts/post.json +15 -0
  26. package/sites/blog/package.json +15 -0
  27. package/sites/blog/pages/[slug].json +148 -0
  28. package/sites/blog/pages/about.md +32 -0
  29. package/sites/blog/pages/contact.md +18 -0
  30. package/sites/blog/pages/index.md +48 -0
  31. package/sites/blog/project.json +107 -0
  32. package/sites/blog/public/favicon.svg +6 -0
  33. package/sites/blog/public/images/author.jpg +0 -0
  34. package/sites/blog/public/images/hero.jpg +0 -0
  35. package/sites/blog/public/images/post-1.jpg +0 -0
  36. package/sites/blog/public/images/post-2.jpg +0 -0
  37. package/sites/blog/public/images/post-3.jpg +0 -0
  38. package/sites/blog/public/images/post-4.jpg +0 -0
  39. package/sites/blog/public/images/post-5.jpg +0 -0
  40. package/sites/blog/public/images/post-6.jpg +0 -0
  41. package/sites/course/components/co-application.json +170 -0
  42. package/sites/course/components/co-cta.json +74 -0
  43. package/sites/course/components/co-curriculum-accordion.json +1476 -0
  44. package/sites/course/components/co-faq.json +524 -0
  45. package/sites/course/components/co-footer.json +145 -0
  46. package/sites/course/components/co-hero.json +139 -0
  47. package/sites/course/components/co-instructor-card.json +76 -0
  48. package/sites/course/components/co-module-card.json +93 -0
  49. package/sites/course/components/co-nav.json +119 -0
  50. package/sites/course/components/co-outcome-card.json +58 -0
  51. package/sites/course/components/co-pricing.json +133 -0
  52. package/sites/course/components/co-section-header.json +53 -0
  53. package/sites/course/components/co-stat.json +36 -0
  54. package/sites/course/components/co-testimonial-card.json +54 -0
  55. package/sites/course/content/modules/backend.md +8 -0
  56. package/sites/course/content/modules/capstone.md +8 -0
  57. package/sites/course/content/modules/foundations.md +8 -0
  58. package/sites/course/content/modules/frameworks.md +8 -0
  59. package/sites/course/content/modules/html-css.md +8 -0
  60. package/sites/course/content/modules/javascript.md +8 -0
  61. package/sites/course/images.json +24 -0
  62. package/sites/course/layouts/base.json +22 -0
  63. package/sites/course/package.json +15 -0
  64. package/sites/course/pages/about.md +44 -0
  65. package/sites/course/pages/curriculum.md +31 -0
  66. package/sites/course/pages/enroll.md +46 -0
  67. package/sites/course/pages/index.md +86 -0
  68. package/sites/course/project.json +102 -0
  69. package/sites/course/public/favicon.svg +5 -0
  70. package/sites/course/public/images/about.jpg +0 -0
  71. package/sites/course/public/images/hero.jpg +0 -0
  72. package/sites/course/public/images/instructor.jpg +0 -0
  73. package/sites/event/components/ev-agenda-tabs.json +542 -0
  74. package/sites/event/components/ev-cta.json +97 -0
  75. package/sites/event/components/ev-feature.json +58 -0
  76. package/sites/event/components/ev-footer.json +145 -0
  77. package/sites/event/components/ev-hero.json +196 -0
  78. package/sites/event/components/ev-nav.json +123 -0
  79. package/sites/event/components/ev-savedate.json +244 -0
  80. package/sites/event/components/ev-section-header.json +53 -0
  81. package/sites/event/components/ev-session-row.json +72 -0
  82. package/sites/event/components/ev-speaker-card.json +84 -0
  83. package/sites/event/components/ev-stat.json +42 -0
  84. package/sites/event/components/ev-ticket-card.json +196 -0
  85. package/sites/event/components/ev-venue.json +59 -0
  86. package/sites/event/content/sessions/01-opening-keynote.md +9 -0
  87. package/sites/event/content/sessions/02-designing-for-trust.md +9 -0
  88. package/sites/event/content/sessions/03-reactive-islands.md +9 -0
  89. package/sites/event/content/sessions/04-scaling-systems.md +9 -0
  90. package/sites/event/content/sessions/05-motion-and-meaning.md +9 -0
  91. package/sites/event/content/sessions/06-ship-it.md +9 -0
  92. package/sites/event/images.json +42 -0
  93. package/sites/event/layouts/base.json +22 -0
  94. package/sites/event/package.json +15 -0
  95. package/sites/event/pages/index.md +65 -0
  96. package/sites/event/pages/schedule.md +89 -0
  97. package/sites/event/pages/speakers.md +102 -0
  98. package/sites/event/pages/tickets.md +33 -0
  99. package/sites/event/project.json +103 -0
  100. package/sites/event/public/favicon.svg +5 -0
  101. package/sites/event/public/images/hero.jpg +0 -0
  102. package/sites/event/public/images/speaker-1.jpg +0 -0
  103. package/sites/event/public/images/speaker-2.jpg +0 -0
  104. package/sites/event/public/images/speaker-3.jpg +0 -0
  105. package/sites/event/public/images/speaker-4.jpg +0 -0
  106. package/sites/event/public/images/venue.jpg +0 -0
  107. package/sites/fitness-studio/components/fs-class-card.json +112 -0
  108. package/sites/fitness-studio/components/fs-class-grid.json +36 -0
  109. package/sites/fitness-studio/components/fs-cta.json +62 -0
  110. package/sites/fitness-studio/components/fs-feature.json +42 -0
  111. package/sites/fitness-studio/components/fs-footer.json +145 -0
  112. package/sites/fitness-studio/components/fs-hero.json +128 -0
  113. package/sites/fitness-studio/components/fs-hours.json +90 -0
  114. package/sites/fitness-studio/components/fs-instructor-card.json +73 -0
  115. package/sites/fitness-studio/components/fs-intro.json +59 -0
  116. package/sites/fitness-studio/components/fs-nav.json +97 -0
  117. package/sites/fitness-studio/components/fs-pricing-card.json +223 -0
  118. package/sites/fitness-studio/components/fs-pricing-table.json +458 -0
  119. package/sites/fitness-studio/components/fs-review.json +54 -0
  120. package/sites/fitness-studio/components/fs-section-header.json +53 -0
  121. package/sites/fitness-studio/content/classes/hiit-circuit.md +10 -0
  122. package/sites/fitness-studio/content/classes/pilates-core.md +10 -0
  123. package/sites/fitness-studio/content/classes/power-yoga.md +10 -0
  124. package/sites/fitness-studio/content/classes/restorative-yoga.md +10 -0
  125. package/sites/fitness-studio/content/classes/strength-tone.md +10 -0
  126. package/sites/fitness-studio/content/classes/vinyasa-flow.md +10 -0
  127. package/sites/fitness-studio/images.json +48 -0
  128. package/sites/fitness-studio/layouts/base.json +22 -0
  129. package/sites/fitness-studio/package.json +15 -0
  130. package/sites/fitness-studio/pages/classes.md +37 -0
  131. package/sites/fitness-studio/pages/contact.md +53 -0
  132. package/sites/fitness-studio/pages/index.md +112 -0
  133. package/sites/fitness-studio/pages/pricing.md +41 -0
  134. package/sites/fitness-studio/project.json +104 -0
  135. package/sites/fitness-studio/public/favicon.svg +5 -0
  136. package/sites/fitness-studio/public/images/about.jpg +0 -0
  137. package/sites/fitness-studio/public/images/class-1.jpg +0 -0
  138. package/sites/fitness-studio/public/images/class-2.jpg +0 -0
  139. package/sites/fitness-studio/public/images/class-3.jpg +0 -0
  140. package/sites/fitness-studio/public/images/hero.jpg +0 -0
  141. package/sites/fitness-studio/public/images/instructor-1.jpg +0 -0
  142. package/sites/fitness-studio/public/images/instructor-2.jpg +0 -0
  143. package/sites/home-services/components/hs-cta.json +123 -0
  144. package/sites/home-services/components/hs-feature.json +43 -0
  145. package/sites/home-services/components/hs-footer.json +157 -0
  146. package/sites/home-services/components/hs-gallery.json +53 -0
  147. package/sites/home-services/components/hs-hero.json +128 -0
  148. package/sites/home-services/components/hs-intro.json +59 -0
  149. package/sites/home-services/components/hs-nav.json +113 -0
  150. package/sites/home-services/components/hs-reservation.json +146 -0
  151. package/sites/home-services/components/hs-review.json +54 -0
  152. package/sites/home-services/components/hs-section-header.json +53 -0
  153. package/sites/home-services/components/hs-service-card.json +79 -0
  154. package/sites/home-services/components/hs-step.json +53 -0
  155. package/sites/home-services/components/hs-trust-bar.json +108 -0
  156. package/sites/home-services/content/services/ac-installation.md +8 -0
  157. package/sites/home-services/content/services/ac-repair.md +8 -0
  158. package/sites/home-services/content/services/furnace-installation.md +8 -0
  159. package/sites/home-services/content/services/furnace-repair.md +8 -0
  160. package/sites/home-services/content/services/heat-pumps.md +8 -0
  161. package/sites/home-services/content/services/maintenance-plans.md +8 -0
  162. package/sites/home-services/images.json +42 -0
  163. package/sites/home-services/layouts/base.json +22 -0
  164. package/sites/home-services/package.json +15 -0
  165. package/sites/home-services/pages/about.md +40 -0
  166. package/sites/home-services/pages/contact.md +53 -0
  167. package/sites/home-services/pages/index.md +87 -0
  168. package/sites/home-services/pages/services.md +39 -0
  169. package/sites/home-services/project.json +103 -0
  170. package/sites/home-services/public/favicon.svg +7 -0
  171. package/sites/home-services/public/images/about.jpg +0 -0
  172. package/sites/home-services/public/images/cta-bg.jpg +0 -0
  173. package/sites/home-services/public/images/gallery-1.jpg +0 -0
  174. package/sites/home-services/public/images/gallery-2.jpg +0 -0
  175. package/sites/home-services/public/images/gallery-3.jpg +0 -0
  176. package/sites/home-services/public/images/hero.jpg +0 -0
  177. package/sites/nonprofit/components/np-contact-form.json +134 -0
  178. package/sites/nonprofit/components/np-contact-info.json +153 -0
  179. package/sites/nonprofit/components/np-cta.json +128 -0
  180. package/sites/nonprofit/components/np-donate-tier.json +89 -0
  181. package/sites/nonprofit/components/np-feature.json +53 -0
  182. package/sites/nonprofit/components/np-footer.json +187 -0
  183. package/sites/nonprofit/components/np-hero.json +132 -0
  184. package/sites/nonprofit/components/np-intro.json +59 -0
  185. package/sites/nonprofit/components/np-nav.json +137 -0
  186. package/sites/nonprofit/components/np-program-card.json +69 -0
  187. package/sites/nonprofit/components/np-section-header.json +53 -0
  188. package/sites/nonprofit/components/np-stat.json +48 -0
  189. package/sites/nonprofit/components/np-step.json +55 -0
  190. package/sites/nonprofit/components/np-team-member.json +67 -0
  191. package/sites/nonprofit/components/np-testimonial.json +54 -0
  192. package/sites/nonprofit/content/programs/community-garden.md +8 -0
  193. package/sites/nonprofit/content/programs/food-pantry.md +8 -0
  194. package/sites/nonprofit/content/programs/housing-support.md +8 -0
  195. package/sites/nonprofit/content/programs/job-training.md +8 -0
  196. package/sites/nonprofit/content/programs/youth-mentoring.md +8 -0
  197. package/sites/nonprofit/images.json +54 -0
  198. package/sites/nonprofit/layouts/base.json +22 -0
  199. package/sites/nonprofit/package.json +15 -0
  200. package/sites/nonprofit/pages/about.md +54 -0
  201. package/sites/nonprofit/pages/contact.md +17 -0
  202. package/sites/nonprofit/pages/get-involved.md +63 -0
  203. package/sites/nonprofit/pages/index.md +87 -0
  204. package/sites/nonprofit/pages/programs.md +39 -0
  205. package/sites/nonprofit/project.json +103 -0
  206. package/sites/nonprofit/public/favicon.svg +5 -0
  207. package/sites/nonprofit/public/images/about.jpg +0 -0
  208. package/sites/nonprofit/public/images/cta-bg.jpg +0 -0
  209. package/sites/nonprofit/public/images/hero.jpg +0 -0
  210. package/sites/nonprofit/public/images/program-1.jpg +0 -0
  211. package/sites/nonprofit/public/images/program-2.jpg +0 -0
  212. package/sites/nonprofit/public/images/program-3.jpg +0 -0
  213. package/sites/nonprofit/public/images/program-4.jpg +0 -0
  214. package/sites/nonprofit/public/images/program-5.jpg +0 -0
  215. package/sites/portfolio/components/pv-about-split.json +59 -0
  216. package/sites/portfolio/components/pv-category-pill.json +24 -0
  217. package/sites/portfolio/components/pv-contact-form.json +137 -0
  218. package/sites/portfolio/components/pv-cta.json +64 -0
  219. package/sites/portfolio/components/pv-feature.json +48 -0
  220. package/sites/portfolio/components/pv-footer.json +145 -0
  221. package/sites/portfolio/components/pv-gallery.json +50 -0
  222. package/sites/portfolio/components/pv-hero.json +132 -0
  223. package/sites/portfolio/components/pv-nav.json +106 -0
  224. package/sites/portfolio/components/pv-project-card.json +103 -0
  225. package/sites/portfolio/components/pv-project-grid.json +22 -0
  226. package/sites/portfolio/components/pv-section-header.json +53 -0
  227. package/sites/portfolio/content/projects/architecture.md +12 -0
  228. package/sites/portfolio/content/projects/editorial.md +12 -0
  229. package/sites/portfolio/content/projects/food.md +12 -0
  230. package/sites/portfolio/content/projects/portraits.md +12 -0
  231. package/sites/portfolio/content/projects/travel.md +12 -0
  232. package/sites/portfolio/content/projects/weddings.md +12 -0
  233. package/sites/portfolio/images.json +54 -0
  234. package/sites/portfolio/layouts/base.json +22 -0
  235. package/sites/portfolio/package.json +15 -0
  236. package/sites/portfolio/pages/[slug].json +260 -0
  237. package/sites/portfolio/pages/about.md +40 -0
  238. package/sites/portfolio/pages/contact.md +42 -0
  239. package/sites/portfolio/pages/index.md +45 -0
  240. package/sites/portfolio/pages/work.md +39 -0
  241. package/sites/portfolio/project.json +105 -0
  242. package/sites/portfolio/public/favicon.svg +7 -0
  243. package/sites/portfolio/public/images/about.jpg +0 -0
  244. package/sites/portfolio/public/images/hero.jpg +0 -0
  245. package/sites/portfolio/public/images/project-1.jpg +0 -0
  246. package/sites/portfolio/public/images/project-2.jpg +0 -0
  247. package/sites/portfolio/public/images/project-3.jpg +0 -0
  248. package/sites/portfolio/public/images/project-4.jpg +0 -0
  249. package/sites/portfolio/public/images/project-5.jpg +0 -0
  250. package/sites/portfolio/public/images/project-6.jpg +0 -0
  251. package/sites/professional-firm/components/pf-article-header.json +79 -0
  252. package/sites/professional-firm/components/pf-contact-form.json +138 -0
  253. package/sites/professional-firm/components/pf-cta.json +62 -0
  254. package/sites/professional-firm/components/pf-feature.json +55 -0
  255. package/sites/professional-firm/components/pf-footer.json +172 -0
  256. package/sites/professional-firm/components/pf-hero.json +128 -0
  257. package/sites/professional-firm/components/pf-insight-card.json +99 -0
  258. package/sites/professional-firm/components/pf-intro.json +59 -0
  259. package/sites/professional-firm/components/pf-logo-bar.json +112 -0
  260. package/sites/professional-firm/components/pf-nav.json +110 -0
  261. package/sites/professional-firm/components/pf-section-header.json +53 -0
  262. package/sites/professional-firm/components/pf-service-card.json +77 -0
  263. package/sites/professional-firm/components/pf-stat.json +37 -0
  264. package/sites/professional-firm/components/pf-team-member.json +70 -0
  265. package/sites/professional-firm/content/insights/cash-flow-forecasting.md +15 -0
  266. package/sites/professional-firm/content/insights/choosing-business-entity.md +15 -0
  267. package/sites/professional-firm/content/insights/r-and-d-tax-credits.md +15 -0
  268. package/sites/professional-firm/content/insights/when-to-hire-cfo.md +15 -0
  269. package/sites/professional-firm/content/insights/year-end-tax-moves.md +15 -0
  270. package/sites/professional-firm/images.json +48 -0
  271. package/sites/professional-firm/layouts/article.json +48 -0
  272. package/sites/professional-firm/layouts/base.json +22 -0
  273. package/sites/professional-firm/package.json +15 -0
  274. package/sites/professional-firm/pages/contact.md +36 -0
  275. package/sites/professional-firm/pages/index.md +81 -0
  276. package/sites/professional-firm/pages/insights/[slug].json +118 -0
  277. package/sites/professional-firm/pages/insights.md +29 -0
  278. package/sites/professional-firm/pages/services.md +39 -0
  279. package/sites/professional-firm/pages/team.md +33 -0
  280. package/sites/professional-firm/project.json +104 -0
  281. package/sites/professional-firm/public/favicon.svg +5 -0
  282. package/sites/professional-firm/public/images/about.jpg +0 -0
  283. package/sites/professional-firm/public/images/hero.jpg +0 -0
  284. package/sites/professional-firm/public/images/insight-cover.jpg +0 -0
  285. package/sites/professional-firm/public/images/team-1.jpg +0 -0
  286. package/sites/professional-firm/public/images/team-2.jpg +0 -0
  287. package/sites/professional-firm/public/images/team-3.jpg +0 -0
  288. package/sites/professional-firm/public/images/team-4.jpg +0 -0
  289. package/sites/real-estate/components/re-agent-card.json +66 -0
  290. package/sites/real-estate/components/re-contact-form.json +132 -0
  291. package/sites/real-estate/components/re-cta.json +63 -0
  292. package/sites/real-estate/components/re-detail-row.json +26 -0
  293. package/sites/real-estate/components/re-feature.json +53 -0
  294. package/sites/real-estate/components/re-footer.json +151 -0
  295. package/sites/real-estate/components/re-hero.json +183 -0
  296. package/sites/real-estate/components/re-intro.json +59 -0
  297. package/sites/real-estate/components/re-listing-card.json +126 -0
  298. package/sites/real-estate/components/re-listings-filter.json +337 -0
  299. package/sites/real-estate/components/re-nav.json +117 -0
  300. package/sites/real-estate/components/re-section-header.json +53 -0
  301. package/sites/real-estate/components/re-stat.json +36 -0
  302. package/sites/real-estate/components/re-step.json +55 -0
  303. package/sites/real-estate/components/re-testimonial.json +54 -0
  304. package/sites/real-estate/content/listings.csv +7 -0
  305. package/sites/real-estate/images.json +84 -0
  306. package/sites/real-estate/layouts/base.json +22 -0
  307. package/sites/real-estate/package.json +15 -0
  308. package/sites/real-estate/pages/[slug].json +327 -0
  309. package/sites/real-estate/pages/about.md +42 -0
  310. package/sites/real-estate/pages/contact.md +54 -0
  311. package/sites/real-estate/pages/index.md +77 -0
  312. package/sites/real-estate/pages/listings.md +13 -0
  313. package/sites/real-estate/project.json +109 -0
  314. package/sites/real-estate/public/favicon.svg +5 -0
  315. package/sites/real-estate/public/images/about.jpg +0 -0
  316. package/sites/real-estate/public/images/agent-1.jpg +0 -0
  317. package/sites/real-estate/public/images/agent-2.jpg +0 -0
  318. package/sites/real-estate/public/images/agent-3.jpg +0 -0
  319. package/sites/real-estate/public/images/hero.jpg +0 -0
  320. package/sites/real-estate/public/images/interior-1.jpg +0 -0
  321. package/sites/real-estate/public/images/interior-2.jpg +0 -0
  322. package/sites/real-estate/public/images/listing-1.jpg +0 -0
  323. package/sites/real-estate/public/images/listing-2.jpg +0 -0
  324. package/sites/real-estate/public/images/listing-3.jpg +0 -0
  325. package/sites/real-estate/public/images/listing-4.jpg +0 -0
  326. package/sites/real-estate/public/images/listing-5.jpg +0 -0
  327. package/sites/real-estate/public/images/listing-6.jpg +0 -0
  328. package/sites/restaurant/components/bit-cta.json +62 -0
  329. package/sites/restaurant/components/bit-feature.json +42 -0
  330. package/sites/restaurant/components/bit-footer.json +145 -0
  331. package/sites/restaurant/components/bit-gallery.json +65 -0
  332. package/sites/restaurant/components/bit-hero.json +128 -0
  333. package/sites/restaurant/components/bit-hours.json +90 -0
  334. package/sites/restaurant/components/bit-intro.json +59 -0
  335. package/sites/restaurant/components/bit-menu-group.json +29 -0
  336. package/sites/restaurant/components/bit-menu-item.json +57 -0
  337. package/sites/restaurant/components/bit-nav.json +97 -0
  338. package/sites/restaurant/components/bit-reservation.json +134 -0
  339. package/sites/restaurant/components/bit-review.json +54 -0
  340. package/sites/restaurant/components/bit-section-header.json +53 -0
  341. package/sites/restaurant/content/menu/bruschetta.md +9 -0
  342. package/sites/restaurant/content/menu/cappuccino.md +9 -0
  343. package/sites/restaurant/content/menu/chocolate-tart.md +9 -0
  344. package/sites/restaurant/content/menu/house-coffee.md +9 -0
  345. package/sites/restaurant/content/menu/mushroom-tagliatelle.md +9 -0
  346. package/sites/restaurant/content/menu/roast-chicken.md +9 -0
  347. package/sites/restaurant/content/menu/seared-salmon.md +9 -0
  348. package/sites/restaurant/content/menu/squash-soup.md +9 -0
  349. package/sites/restaurant/content/menu/tiramisu.md +9 -0
  350. package/sites/restaurant/images.json +66 -0
  351. package/sites/restaurant/layouts/base.json +22 -0
  352. package/sites/restaurant/package.json +15 -0
  353. package/sites/restaurant/pages/about.md +30 -0
  354. package/sites/restaurant/pages/contact.md +28 -0
  355. package/sites/restaurant/pages/index.md +63 -0
  356. package/sites/restaurant/pages/menu.md +80 -0
  357. package/sites/restaurant/project.json +105 -0
  358. package/sites/restaurant/public/favicon.svg +7 -0
  359. package/sites/restaurant/public/images/about.jpg +0 -0
  360. package/sites/restaurant/public/images/dish-desserts.jpg +0 -0
  361. package/sites/restaurant/public/images/dish-mains.jpg +0 -0
  362. package/sites/restaurant/public/images/dish-starters.jpg +0 -0
  363. package/sites/restaurant/public/images/gallery-1.jpg +0 -0
  364. package/sites/restaurant/public/images/gallery-2.jpg +0 -0
  365. package/sites/restaurant/public/images/gallery-3.jpg +0 -0
  366. package/sites/restaurant/public/images/gallery-4.jpg +0 -0
  367. package/sites/restaurant/public/images/hero.jpg +0 -0
  368. package/sites/restaurant/public/images/intro.jpg +0 -0
  369. package/sites/saas/components/sa-check-item.json +40 -0
  370. package/sites/saas/components/sa-contact-form.json +153 -0
  371. package/sites/saas/components/sa-cta.json +102 -0
  372. package/sites/saas/components/sa-faq.json +413 -0
  373. package/sites/saas/components/sa-feature-card.json +59 -0
  374. package/sites/saas/components/sa-feature-split.json +60 -0
  375. package/sites/saas/components/sa-footer.json +145 -0
  376. package/sites/saas/components/sa-hero.json +160 -0
  377. package/sites/saas/components/sa-logo-cloud.json +119 -0
  378. package/sites/saas/components/sa-nav.json +130 -0
  379. package/sites/saas/components/sa-pricing.json +427 -0
  380. package/sites/saas/components/sa-section-header.json +55 -0
  381. package/sites/saas/components/sa-stat.json +40 -0
  382. package/sites/saas/components/sa-testimonial-card.json +57 -0
  383. package/sites/saas/content/testimonials/marcus-bell.md +8 -0
  384. package/sites/saas/content/testimonials/nadia-okafor.md +8 -0
  385. package/sites/saas/content/testimonials/priya-raman.md +8 -0
  386. package/sites/saas/content/testimonials/theo-lindqvist.md +8 -0
  387. package/sites/saas/images.json +30 -0
  388. package/sites/saas/layouts/base.json +22 -0
  389. package/sites/saas/package.json +15 -0
  390. package/sites/saas/pages/contact.md +39 -0
  391. package/sites/saas/pages/features.md +87 -0
  392. package/sites/saas/pages/index.md +122 -0
  393. package/sites/saas/pages/pricing.md +39 -0
  394. package/sites/saas/project.json +134 -0
  395. package/sites/saas/public/favicon.svg +5 -0
  396. package/sites/saas/public/images/feature-1.jpg +0 -0
  397. package/sites/saas/public/images/feature-2.jpg +0 -0
  398. package/sites/saas/public/images/feature-3.jpg +0 -0
  399. package/sites/saas/public/images/hero.jpg +0 -0
  400. package/sites/shop/components/shp-badge.json +18 -0
  401. package/sites/shop/components/shp-contact-form.json +156 -0
  402. package/sites/shop/components/shp-cta.json +63 -0
  403. package/sites/shop/components/shp-feature.json +55 -0
  404. package/sites/shop/components/shp-footer.json +145 -0
  405. package/sites/shop/components/shp-hero.json +128 -0
  406. package/sites/shop/components/shp-intro.json +59 -0
  407. package/sites/shop/components/shp-nav.json +104 -0
  408. package/sites/shop/components/shp-product-card.json +131 -0
  409. package/sites/shop/components/shp-product-filter.json +184 -0
  410. package/sites/shop/components/shp-review.json +54 -0
  411. package/sites/shop/components/shp-section-header.json +53 -0
  412. package/sites/shop/components/shp-service.json +83 -0
  413. package/sites/shop/components/shp-stat.json +37 -0
  414. package/sites/shop/components/shp-visit-info.json +132 -0
  415. package/sites/shop/content/product/aero-road-helmet.md +10 -0
  416. package/sites/shop/content/product/apex-carbon-road.md +10 -0
  417. package/sites/shop/content/product/backroad-gravel-adv.md +10 -0
  418. package/sites/shop/content/product/boulder-enduro.md +10 -0
  419. package/sites/shop/content/product/rambler-kids-20.md +10 -0
  420. package/sites/shop/content/product/summit-trail-29er.md +10 -0
  421. package/sites/shop/content/product/trailhead-pannier-set.md +10 -0
  422. package/sites/shop/content/product/velocity-alloy-road.md +10 -0
  423. package/sites/shop/images.json +54 -0
  424. package/sites/shop/layouts/base.json +22 -0
  425. package/sites/shop/package.json +15 -0
  426. package/sites/shop/pages/about.md +42 -0
  427. package/sites/shop/pages/contact.md +15 -0
  428. package/sites/shop/pages/index.md +82 -0
  429. package/sites/shop/pages/products/[sku].json +191 -0
  430. package/sites/shop/pages/products.md +29 -0
  431. package/sites/shop/project.json +105 -0
  432. package/sites/shop/public/favicon.svg +6 -0
  433. package/sites/shop/public/images/about.jpg +0 -0
  434. package/sites/shop/public/images/hero.jpg +0 -0
  435. package/sites/shop/public/images/product-1.jpg +0 -0
  436. package/sites/shop/public/images/product-2.jpg +0 -0
  437. package/sites/shop/public/images/product-3.jpg +0 -0
  438. package/sites/shop/public/images/product-4.jpg +0 -0
  439. package/sites/shop/public/images/product-5.jpg +0 -0
  440. package/sites/shop/public/images/product-6.jpg +0 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "flowlark",
3
+ "private": true,
4
+ "description": "A modern SaaS product landing site with an interactive pricing toggle and FAQ accordion, built with Jx.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "scripts": {
8
+ "build": "jx build",
9
+ "dev": "jx dev"
10
+ },
11
+ "devDependencies": {
12
+ "@jxsuite/compiler": "^0.19.0",
13
+ "@jxsuite/runtime": "^0.19.0"
14
+ }
15
+ }
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: "Contact — Flowlark"
3
+ ---
4
+
5
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem clamp(2rem, 5vw, 3rem)"}
6
+ ::sa-section-header{props.eyebrow="Get in touch" props.heading="Let’s talk about your team" props.subheading="Have a question, want a demo, or need a custom plan? Send us a note and we’ll get back within one business day."}
7
+ :::::
8
+
9
+ ::::::section{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="0 1.5rem clamp(4rem, 8vw, 6rem)"}
10
+ :::::div{style.display="grid" style.gridTemplateColumns="1.2fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.--md.gridTemplateColumns="1fr"}
11
+
12
+ ::sa-contact-form{props.heading="Send us a message"}
13
+
14
+ ::::div
15
+
16
+ :::div{style.padding="2rem" style.backgroundColor="var(--color-bg-cream)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)"}
17
+
18
+ ### Talk to a human
19
+
20
+ Prefer email? Reach the team directly.
21
+
22
+ [hello@flowlark.app](mailto:hello@flowlark.app)
23
+ :::
24
+
25
+ :::div{style.marginTop="1.5rem" style.padding="2rem" style.backgroundColor="var(--color-bg-cream)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)"}
26
+
27
+ ### Support & sales
28
+
29
+ ::sa-check-item{props.text="Response within one business day"}
30
+
31
+ ::sa-check-item{props.text="Live demo tailored to your team"}
32
+
33
+ ::sa-check-item{props.text="Startup & nonprofit discounts available"}
34
+ :::
35
+ ::::
36
+ :::::
37
+ ::::::
38
+
39
+ ::sa-cta{props.heading="Rather just dive in?" props.text="You don’t need to talk to us first. Create a free workspace and explore Flowlark at your own pace." props.cta="Get started free" props.ctaHref="/pricing/"}
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: "Features — Flowlark"
3
+ ---
4
+
5
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem clamp(2rem, 5vw, 3rem)"}
6
+ ::sa-section-header{props.eyebrow="Features" props.heading="One tool for the whole build" props.subheading="From the first idea to the shipped release, Flowlark keeps your team’s work in one connected, fast, and friendly place."}
7
+ :::::
8
+
9
+ :::::section{style.padding="clamp(2rem, 5vw, 3rem) 1.5rem clamp(4rem, 8vw, 6rem)"}
10
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
11
+ ::sa-feature-card{props.icon="🗂️" props.title="Projects & tasks" props.text="Organize work into projects, break it into tasks, and see it on boards, lists, or timelines."}
12
+
13
+ ::sa-feature-card{props.icon="🤖" props.title="Automations" props.text="Rules that move work forward for you — assignments, status changes, reminders, and handoffs."}
14
+
15
+ ::sa-feature-card{props.icon="📊" props.title="Analytics" props.text="Live dashboards for velocity, cycle time, and workload — always current, never exported."}
16
+
17
+ ::sa-feature-card{props.icon="🧩" props.title="Integrations" props.text="Connect your repo, chat, and docs so updates flow both ways without copy-paste."}
18
+
19
+ ::sa-feature-card{props.icon="🔔" props.title="Smart notifications" props.text="Get exactly the updates you care about — and none of the noise you don’t."}
20
+
21
+ ::sa-feature-card{props.icon="🔒" props.title="Enterprise security" props.text="SSO, SCIM provisioning, granular roles, and audit logs for teams with real compliance needs."}
22
+ ::::
23
+ :::::
24
+
25
+ :::::section{style.padding="0 0 clamp(2rem, 5vw, 4rem)" style.backgroundColor="var(--color-bg-cream)"}
26
+ ::::sa-feature-split{props.image="/images/feature-1.jpg" props.imageAlt="Team collaborating in the Flowlark workspace"}
27
+ :::div
28
+ ::sa-section-header{props.eyebrow="Plan" props.heading="Plan work everyone can see" props.align="left"}
29
+
30
+ Roadmaps, sprints, and backlogs share one source of truth. Drag work between stages, set dependencies, and let the timeline update itself.
31
+ :::
32
+
33
+ :::div{style.display="flex" style.flexDirection="column" style.gap="0.75rem" style.marginTop="1.5rem"}
34
+ ::sa-check-item{props.text="Boards, lists, and timeline views"}
35
+
36
+ ::sa-check-item{props.text="Dependencies and milestones"}
37
+
38
+ ::sa-check-item{props.text="Templates for recurring work"}
39
+ :::
40
+ ::::
41
+
42
+ ::::sa-feature-split{props.image="/images/feature-2.jpg" props.imageAlt="Analytics dashboard inside Flowlark" props.reverse="true"}
43
+ :::div
44
+ ::sa-section-header{props.eyebrow="Measure" props.heading="Know exactly where things stand" props.align="left"}
45
+
46
+ Every action feeds a live dashboard, so progress is always visible. Catch blockers early and share a link instead of assembling a report.
47
+ :::
48
+
49
+ :::div{style.display="flex" style.flexDirection="column" style.gap="0.75rem" style.marginTop="1.5rem"}
50
+ ::sa-check-item{props.text="Velocity and cycle-time charts"}
51
+
52
+ ::sa-check-item{props.text="Workload and capacity views"}
53
+
54
+ ::sa-check-item{props.text="Exportable, shareable reports"}
55
+ :::
56
+ ::::
57
+
58
+ ::::sa-feature-split{props.image="/images/feature-3.jpg" props.imageAlt="Flowlark mobile app interface"}
59
+ :::div
60
+ ::sa-section-header{props.eyebrow="Anywhere" props.heading="Your work, on every device" props.align="left"}
61
+
62
+ The mobile app keeps you in the loop on the go. Review, comment, and unblock teammates from your phone — then pick up right where you left off on desktop.
63
+ :::
64
+
65
+ :::div{style.display="flex" style.flexDirection="column" style.gap="0.75rem" style.marginTop="1.5rem"}
66
+ ::sa-check-item{props.text="Native iOS and Android apps"}
67
+
68
+ ::sa-check-item{props.text="Offline-friendly and fast"}
69
+
70
+ ::sa-check-item{props.text="Push notifications that respect focus time"}
71
+ :::
72
+ ::::
73
+ :::::
74
+
75
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 1.5rem"}
76
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
77
+ ::sa-stat{props.value="200+" props.label="Integrations and counting"}
78
+
79
+ ::sa-stat{props.value="50ms" props.label="Median action response time"}
80
+
81
+ ::sa-stat{props.value="SOC 2" props.label="Type II compliant"}
82
+
83
+ ::sa-stat{props.value="24/7" props.label="Monitoring and on-call"}
84
+ ::::
85
+ :::::
86
+
87
+ ::sa-cta{props.heading="See it with your own projects" props.text="Spin up a free workspace and bring in real work. You’ll feel the difference in the first afternoon." props.cta="Get started free" props.ctaHref="/pricing/" props.cta2="Talk to sales" props.cta2Href="/contact/"}
@@ -0,0 +1,122 @@
1
+ ---
2
+ title: "Flowlark — Plan, ship, and scale in one place"
3
+ state:
4
+ testimonials:
5
+ $prototype: ContentCollection
6
+ $src: "@jxsuite/parser/ContentCollection.class.json"
7
+ contentType: testimonials
8
+ sort:
9
+ field: order
10
+ order: asc
11
+ limit: 4
12
+ ---
13
+
14
+ ::sa-hero{props.eyebrow="✦ Now with automations & analytics" props.heading="The product platform for teams that ship." props.subheading="Flowlark brings planning, building, and shipping into one fast, delightful workspace — so your team spends less time on busywork and more time making things." props.cta="Get started free" props.ctaHref="/pricing/" props.cta2="See the features" props.cta2Href="/features/" props.note="Free forever plan · No credit card required" props.image="/images/hero.jpg" props.imageAlt="The Flowlark product dashboard showing projects, timelines, and analytics"}
15
+
16
+ ::sa-logo-cloud{}
17
+
18
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 1.5rem"}
19
+ ::sa-section-header{props.eyebrow="Why Flowlark" props.heading="Everything your team needs, nothing it doesn’t" props.subheading="One workspace that replaces the tangle of trackers, docs, and spreadsheets your team juggles today."}
20
+
21
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
22
+ ::sa-feature-card{props.icon="⚡" props.title="Ship faster" props.text="Plan work, track progress, and hand off cleanly — all in a workspace that keeps everyone in sync."}
23
+
24
+ ::sa-feature-card{props.icon="🤖" props.title="Automate the busywork" props.text="Trigger updates, assignments, and reminders automatically. Set a rule once and let it run."}
25
+
26
+ ::sa-feature-card{props.icon="📊" props.title="See what matters" props.text="Live dashboards turn your team’s activity into insight — no exports, no stale slides."}
27
+
28
+ ::sa-feature-card{props.icon="🧩" props.title="Fits your stack" props.text="Connect the tools you already use. Flowlark plays nicely with the rest of your workflow."}
29
+
30
+ ::sa-feature-card{props.icon="🔒" props.title="Secure by default" props.text="Encryption in transit and at rest, granular permissions, SSO, and audit logs when you need them."}
31
+
32
+ ::sa-feature-card{props.icon="🌍" props.title="Built for teams" props.text="From two people to two thousand, Flowlark scales with you without slowing anyone down."}
33
+ ::::
34
+ :::::
35
+
36
+ :::::section{style.padding="0 0 clamp(2rem, 5vw, 4rem)" style.backgroundColor="var(--color-bg-cream)"}
37
+ ::::sa-feature-split{props.image="/images/feature-1.jpg" props.imageAlt="Team collaborating in the Flowlark workspace"}
38
+ :::div
39
+ ::sa-section-header{props.eyebrow="Collaborate" props.heading="One workspace, every team" props.align="left"}
40
+
41
+ Bring product, design, and engineering into a shared space where plans, discussions, and decisions live side by side. No more digging through threads to find the latest.
42
+ :::
43
+
44
+ :::div{style.display="flex" style.flexDirection="column" style.gap="0.75rem" style.marginTop="1.5rem"}
45
+ ::sa-check-item{props.text="Shared roadmaps and timelines"}
46
+
47
+ ::sa-check-item{props.text="Comments and mentions in context"}
48
+
49
+ ::sa-check-item{props.text="Real-time updates across the team"}
50
+ :::
51
+ ::::
52
+
53
+ ::::sa-feature-split{props.image="/images/feature-2.jpg" props.imageAlt="Analytics dashboard inside Flowlark" props.reverse="true"}
54
+ :::div
55
+ ::sa-section-header{props.eyebrow="Measure" props.heading="Insight without the spreadsheet" props.align="left"}
56
+
57
+ Dashboards update themselves as your team works. Track velocity, spot bottlenecks, and share progress with a link instead of a status meeting.
58
+ :::
59
+
60
+ :::div{style.display="flex" style.flexDirection="column" style.gap="0.75rem" style.marginTop="1.5rem"}
61
+ ::sa-check-item{props.text="Live velocity and cycle-time charts"}
62
+
63
+ ::sa-check-item{props.text="Custom reports in a few clicks"}
64
+
65
+ ::sa-check-item{props.text="Shareable, always-current links"}
66
+ :::
67
+ ::::
68
+ :::::
69
+
70
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 0"}
71
+ ::sa-section-header{props.eyebrow="Pricing" props.heading="Simple pricing that scales with you" props.subheading="Start free, upgrade when you’re ready. Switch between monthly and annual any time."}
72
+
73
+ ::sa-pricing{}
74
+ :::::
75
+
76
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
77
+ ::sa-section-header{props.eyebrow="Compare plans" props.heading="Every plan, side by side"}
78
+
79
+ ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.overflowX="auto" style.borderRadius="var(--radius)" style.border="1px solid var(--color-border)" style.backgroundColor="var(--color-bg-white)"}
80
+
81
+ | | Starter | Pro | Scale |
82
+ | ------------------- | --------- | -------------- | ----------------- |
83
+ | Projects | 3 | Unlimited | Unlimited |
84
+ | Automations | — | ✓ | ✓ |
85
+ | Analytics dashboard | — | ✓ | ✓ |
86
+ | SSO & SCIM | — | — | ✓ |
87
+ | Audit logs | — | — | ✓ |
88
+ | Support | Community | Priority email | Dedicated manager |
89
+ | Uptime SLA | — | — | 99.9% |
90
+
91
+ ::::
92
+ :::::
93
+
94
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 1.5rem"}
95
+ ::sa-section-header{props.eyebrow="Loved by teams" props.heading="Teams do their best work on Flowlark"}
96
+
97
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(2, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
98
+ :::Array{items.ref="#/state/testimonials"}
99
+ ::sa-testimonial-card{props.quote="${item.data.quote}" props.author="${item.data.author}" props.company="${item.data.company}"}
100
+ :::
101
+ ::::
102
+ :::::
103
+
104
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
105
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
106
+ ::sa-stat{props.value="12k+" props.label="Teams building on Flowlark"}
107
+
108
+ ::sa-stat{props.value="40%" props.label="Less time spent on status updates"}
109
+
110
+ ::sa-stat{props.value="99.9%" props.label="Uptime, backed by an SLA"}
111
+
112
+ ::sa-stat{props.value="4.9/5" props.label="Average customer rating"}
113
+ ::::
114
+ :::::
115
+
116
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 1.5rem"}
117
+ ::sa-section-header{props.eyebrow="FAQ" props.heading="Questions, answered" props.subheading="Everything you need to know before you get started."}
118
+
119
+ ::sa-faq{}
120
+ :::::
121
+
122
+ ::sa-cta{props.heading="Ready to give your team its time back?" props.text="Start free in minutes. No credit card, no sales call — just your team, shipping." props.cta="Get started free" props.ctaHref="/pricing/" props.cta2="Talk to sales" props.cta2Href="/contact/"}
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: "Pricing — Flowlark"
3
+ ---
4
+
5
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem clamp(2rem, 5vw, 3rem)"}
6
+ ::sa-section-header{props.eyebrow="Pricing" props.heading="Pricing that grows with your team" props.subheading="Start on the free plan and upgrade whenever you’re ready. Every paid plan includes a 14-day trial — no credit card to begin."}
7
+ :::::
8
+
9
+ :::::section{style.padding="0 0 clamp(4rem, 8vw, 6rem)"}
10
+ ::sa-pricing{}
11
+ :::::
12
+
13
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
14
+ ::sa-section-header{props.eyebrow="Compare plans" props.heading="What’s included at every tier"}
15
+
16
+ ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.overflowX="auto" style.borderRadius="var(--radius)" style.border="1px solid var(--color-border)" style.backgroundColor="var(--color-bg-white)"}
17
+
18
+ | | Starter | Pro | Scale |
19
+ | ------------------- | --------- | -------------- | ----------------- |
20
+ | Projects | 3 | Unlimited | Unlimited |
21
+ | Team members | 3 | Unlimited | Unlimited |
22
+ | Automations | — | ✓ | ✓ |
23
+ | Analytics dashboard | — | ✓ | ✓ |
24
+ | Integrations | Core | All | All + custom |
25
+ | SSO & SCIM | — | — | ✓ |
26
+ | Audit logs | — | — | ✓ |
27
+ | Support | Community | Priority email | Dedicated manager |
28
+ | Uptime SLA | — | — | 99.9% |
29
+
30
+ ::::
31
+ :::::
32
+
33
+ :::::section{style.padding="clamp(4rem, 8vw, 6rem) 1.5rem"}
34
+ ::sa-section-header{props.eyebrow="FAQ" props.heading="Pricing questions" props.subheading="Still deciding? These are the questions teams ask us most."}
35
+
36
+ ::sa-faq{}
37
+ :::::
38
+
39
+ ::sa-cta{props.heading="Try Flowlark free for 14 days" props.text="Explore every Pro feature with your real team and real projects. Cancel any time — we’ll even remind you before the trial ends." props.cta="Start free trial" props.ctaHref="/contact/" props.cta2="Talk to sales" props.cta2Href="/contact/"}
@@ -0,0 +1,134 @@
1
+ {
2
+ "name": "Flowlark",
3
+ "url": "https://example.com",
4
+ "defaults": {
5
+ "layout": "./layouts/base.json",
6
+ "lang": "en"
7
+ },
8
+ "$head": [
9
+ {
10
+ "tagName": "meta",
11
+ "attributes": { "name": "viewport", "content": "width=device-width, initial-scale=1" }
12
+ },
13
+ {
14
+ "tagName": "meta",
15
+ "attributes": {
16
+ "name": "description",
17
+ "content": "Flowlark is the modern product platform that helps teams plan, ship, and scale — with pricing that flexes from your first project to your thousandth."
18
+ }
19
+ },
20
+ {
21
+ "tagName": "link",
22
+ "attributes": { "rel": "icon", "href": "/favicon.svg" }
23
+ },
24
+ {
25
+ "tagName": "link",
26
+ "attributes": { "rel": "preconnect", "href": "https://fonts.googleapis.com" }
27
+ },
28
+ {
29
+ "tagName": "link",
30
+ "attributes": { "rel": "preconnect", "href": "https://fonts.gstatic.com", "crossorigin": "" }
31
+ },
32
+ {
33
+ "tagName": "link",
34
+ "attributes": {
35
+ "rel": "stylesheet",
36
+ "href": "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&display=swap"
37
+ }
38
+ }
39
+ ],
40
+ "$media": {
41
+ "--": "1200px",
42
+ "--lg": "(max-width: 1024px)",
43
+ "--md": "(max-width: 768px)",
44
+ "--sm": "(max-width: 640px)"
45
+ },
46
+ "style": {
47
+ "--color-primary": "#6366f1",
48
+ "--color-primary-hover": "#4f46e5",
49
+ "--color-ink": "#0d0d1a",
50
+ "--color-bg-dark": "#0d0d1a",
51
+ "--color-bg-cream": "#f6f6fb",
52
+ "--color-bg-surface": "#f6f6fb",
53
+ "--color-bg-white": "#ffffff",
54
+ "--color-text-primary": "#14142b",
55
+ "--color-text-white": "#ffffff",
56
+ "--color-text-muted": "#64647a",
57
+ "--color-border": "#e6e6f0",
58
+ "--color-accent": "#6366f1",
59
+ "--color-accent-soft": "rgba(99, 102, 241, 0.12)",
60
+ "--font-heading": "'Space Grotesk', 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif",
61
+ "--max-width": "1200px",
62
+ "--max-width-narrow": "820px",
63
+ "--radius": "0.75rem",
64
+ "margin": "0",
65
+ "padding": "0",
66
+ "fontFamily": "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
67
+ "lineHeight": "1.6",
68
+ "color": "var(--color-text-primary)",
69
+ "backgroundColor": "var(--color-bg-white)",
70
+ "table": {
71
+ "width": "100%",
72
+ "borderCollapse": "collapse",
73
+ "fontSize": "0.95rem",
74
+ "textAlign": "left",
75
+ "backgroundColor": "var(--color-bg-white)",
76
+ "thead": {
77
+ "borderBottom": "1px solid var(--color-border)",
78
+ "th": {
79
+ "padding": "1rem 1.1rem",
80
+ "fontFamily": "var(--font-heading)",
81
+ "fontSize": "0.9rem",
82
+ "fontWeight": "600",
83
+ "color": "var(--color-text-primary)"
84
+ }
85
+ },
86
+ "tbody": {
87
+ "tr": {
88
+ "borderBottom": "1px solid var(--color-border)"
89
+ },
90
+ "td": {
91
+ "padding": "0.9rem 1.1rem",
92
+ "color": "var(--color-text-muted)",
93
+ ":first-child": {
94
+ "color": "var(--color-text-primary)",
95
+ "fontWeight": "600"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ },
101
+ "imports": {
102
+ "Markdown": "@jxsuite/parser/Markdown.class.json",
103
+ "ContentCollection": "@jxsuite/parser/ContentCollection.class.json"
104
+ },
105
+ "images": {
106
+ "optimize": true,
107
+ "widths": [320, 640, 960, 1280, 1920],
108
+ "formats": ["webp", "avif"],
109
+ "quality": { "webp": 80, "avif": 65, "jpeg": 80, "png": 80 },
110
+ "sizes": "(max-width: 768px) 100vw, 50vw",
111
+ "lazyLoad": true
112
+ },
113
+ "contentTypes": {
114
+ "testimonials": {
115
+ "source": "./content/testimonials/",
116
+ "format": "Markdown",
117
+ "schema": {
118
+ "type": "object",
119
+ "properties": {
120
+ "quote": { "type": "string" },
121
+ "author": { "type": "string" },
122
+ "company": { "type": "string" },
123
+ "order": { "type": "number" }
124
+ },
125
+ "required": ["quote", "author"]
126
+ }
127
+ }
128
+ },
129
+ "build": {
130
+ "outDir": "./dist",
131
+ "format": "directory",
132
+ "trailingSlash": "always"
133
+ }
134
+ }
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
+ <rect width="32" height="32" rx="7" fill="#6366f1"/>
3
+ <path d="M8 21c3-1 4.5-3 5.5-6S15.5 8 19 7c-1 3-1 5 0 7s3 2.5 5 2c-2.5 2-4.5 2.5-6.5 1.5S13.5 14 12 16s-2.5 4-4 5z" fill="#fff"/>
4
+ <circle cx="21.5" cy="10.5" r="1.6" fill="#fff"/>
5
+ </svg>
@@ -0,0 +1,18 @@
1
+ {
2
+ "tagName": "shp-badge",
3
+ "state": {
4
+ "label": ""
5
+ },
6
+ "style": {
7
+ "display": "inline-block",
8
+ "padding": "0.25rem 0.7rem",
9
+ "borderRadius": "999px",
10
+ "fontSize": "0.72rem",
11
+ "fontWeight": "600",
12
+ "textTransform": "uppercase",
13
+ "letterSpacing": "0.06em",
14
+ "backgroundColor": "rgba(22, 163, 74, 0.12)",
15
+ "color": "var(--color-primary-hover)"
16
+ },
17
+ "children": [{ "tagName": "span", "textContent": "${state.label}" }]
18
+ }
@@ -0,0 +1,156 @@
1
+ {
2
+ "tagName": "shp-contact-form",
3
+ "state": {
4
+ "heading": "Send us a message"
5
+ },
6
+ "style": {
7
+ "display": "block"
8
+ },
9
+ "children": [
10
+ {
11
+ "tagName": "h3",
12
+ "style": {
13
+ "fontFamily": "var(--font-heading)",
14
+ "fontSize": "1.6rem",
15
+ "margin": "0 0 1.25rem"
16
+ },
17
+ "textContent": "${state.heading}"
18
+ },
19
+ {
20
+ "tagName": "form",
21
+ "attributes": { "action": "#", "method": "post" },
22
+ "style": { "display": "grid", "gap": "1rem", "alignContent": "start" },
23
+ "children": [
24
+ {
25
+ "tagName": "input",
26
+ "attributes": {
27
+ "type": "text",
28
+ "name": "name",
29
+ "placeholder": "Your name",
30
+ "required": "true",
31
+ "aria-label": "Your name"
32
+ },
33
+ "style": {
34
+ "width": "100%",
35
+ "padding": "0.75rem 0.9rem",
36
+ "border": "1px solid var(--color-border)",
37
+ "borderRadius": "var(--radius)",
38
+ "fontSize": "1rem"
39
+ }
40
+ },
41
+ {
42
+ "tagName": "input",
43
+ "attributes": {
44
+ "type": "email",
45
+ "name": "email",
46
+ "placeholder": "Email address",
47
+ "required": "true",
48
+ "aria-label": "Email address"
49
+ },
50
+ "style": {
51
+ "width": "100%",
52
+ "padding": "0.75rem 0.9rem",
53
+ "border": "1px solid var(--color-border)",
54
+ "borderRadius": "var(--radius)",
55
+ "fontSize": "1rem"
56
+ }
57
+ },
58
+ {
59
+ "tagName": "div",
60
+ "style": { "display": "grid", "gridTemplateColumns": "1fr 1fr", "gap": "1rem" },
61
+ "children": [
62
+ {
63
+ "tagName": "select",
64
+ "attributes": { "name": "topic", "aria-label": "What can we help with?" },
65
+ "style": {
66
+ "width": "100%",
67
+ "padding": "0.75rem 0.9rem",
68
+ "border": "1px solid var(--color-border)",
69
+ "borderRadius": "var(--radius)",
70
+ "fontSize": "1rem",
71
+ "backgroundColor": "var(--color-bg-white)"
72
+ },
73
+ "children": [
74
+ {
75
+ "tagName": "option",
76
+ "attributes": { "value": "sales" },
77
+ "textContent": "Buying a bike"
78
+ },
79
+ {
80
+ "tagName": "option",
81
+ "attributes": { "value": "service" },
82
+ "textContent": "Book a service"
83
+ },
84
+ {
85
+ "tagName": "option",
86
+ "attributes": { "value": "fit" },
87
+ "textContent": "Bike fitting"
88
+ },
89
+ {
90
+ "tagName": "option",
91
+ "attributes": { "value": "other" },
92
+ "textContent": "Something else"
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "tagName": "input",
98
+ "attributes": {
99
+ "type": "date",
100
+ "name": "date",
101
+ "aria-label": "Preferred service date"
102
+ },
103
+ "style": {
104
+ "width": "100%",
105
+ "padding": "0.75rem 0.9rem",
106
+ "border": "1px solid var(--color-border)",
107
+ "borderRadius": "var(--radius)",
108
+ "fontSize": "1rem"
109
+ }
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ "tagName": "textarea",
115
+ "attributes": {
116
+ "name": "notes",
117
+ "rows": "3",
118
+ "placeholder": "Tell us about your bike or what you're after…",
119
+ "aria-label": "Notes"
120
+ },
121
+ "style": {
122
+ "width": "100%",
123
+ "padding": "0.75rem 0.9rem",
124
+ "border": "1px solid var(--color-border)",
125
+ "borderRadius": "var(--radius)",
126
+ "fontSize": "1rem",
127
+ "fontFamily": "inherit"
128
+ }
129
+ },
130
+ {
131
+ "tagName": "button",
132
+ "attributes": { "type": "submit" },
133
+ "textContent": "Send Message",
134
+ "style": {
135
+ "backgroundColor": "var(--color-primary)",
136
+ "color": "var(--color-text-white)",
137
+ "padding": "0.85rem 1.5rem",
138
+ "border": "none",
139
+ "borderRadius": "999px",
140
+ "fontSize": "1rem",
141
+ "fontWeight": "600",
142
+ "cursor": "pointer",
143
+ "justifySelf": "start",
144
+ "transition": "background-color 0.15s",
145
+ ":hover": { "backgroundColor": "var(--color-primary-hover)" }
146
+ }
147
+ },
148
+ {
149
+ "tagName": "p",
150
+ "style": { "fontSize": "0.85rem", "color": "var(--color-text-muted)", "margin": "0" },
151
+ "textContent": "This is a demo form. Wire it to your booking provider or email in pages/contact.md."
152
+ }
153
+ ]
154
+ }
155
+ ]
156
+ }