@cogenta/starters 0.2.2 → 0.4.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.
- package/dist/blueprints/assets/photos/association/coat-bank.jpg +0 -0
- package/dist/blueprints/assets/photos/association/food-bank.jpg +0 -0
- package/dist/blueprints/assets/photos/association/garden-corner.jpg +0 -0
- package/dist/blueprints/assets/photos/association/garden-planting.jpg +0 -0
- package/dist/blueprints/assets/photos/association/hall.jpg +0 -0
- package/dist/blueprints/assets/photos/association/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/association/homework-club.jpg +0 -0
- package/dist/blueprints/assets/photos/association/orientation.jpg +0 -0
- package/dist/blueprints/assets/photos/association/partner-fr-college.png +0 -0
- package/dist/blueprints/assets/photos/association/partner-fr-delcourt.png +0 -0
- package/dist/blueprints/assets/photos/association/partner-fr-fondation.png +0 -0
- package/dist/blueprints/assets/photos/association/partner-fr-habitat.png +0 -0
- package/dist/blueprints/assets/photos/association/partner-fr-mairie.png +0 -0
- package/dist/blueprints/assets/photos/association/partner-fr-pharmacie.png +0 -0
- package/dist/blueprints/assets/photos/association/supper.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/desk-setup.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/library.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/notebook-and-coffee.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/notebooks.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/platform.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/pour-over.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/typing.jpg +0 -0
- package/dist/blueprints/assets/photos/documentation/delivery-flow-en.png +0 -0
- package/dist/blueprints/assets/photos/documentation/delivery-flow-fr.png +0 -0
- package/dist/blueprints/assets/photos/magazine/allotments.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/archive-stacks.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/baguettes.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/dining-room.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/empty-tram-stop.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/gallery.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/office-block-dusk.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/reading-room.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/reception-hall.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/theatre.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/town-hall.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/tram-stop.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/coast-boats.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/coast-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/coast-ridge.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/coast-water.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/forest-beech.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/forest-birch.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/forest-branches.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/forest-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/glacier-cave.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/glacier-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/glacier-melt.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/glacier-tongue.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/lagoon-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/lagoon-egret.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/lagoon-shore.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/lagoon-storm.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/port-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/port-dusk.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/port-marina.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/port-quay.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/towers-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/towers-green.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/towers-single.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/towers-valley.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/vines-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/vines-grapes.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/vines-shed.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/vines-tree.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/beetroot-carpaccio.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/chocolate-tart.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/cod-vin-jaune.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/duck-confit.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/grilled-octopus.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/market-stall.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/mushroom-risotto.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/pike-quenelle.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/poached-pear.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/praline-cake.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/pumpkin-soup.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/street-burdeau.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/api-webhooks-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/api-webhooks-fr.png +0 -0
- package/dist/blueprints/assets/photos/saas/approvals-queue-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/approvals-queue-fr.png +0 -0
- package/dist/blueprints/assets/photos/saas/audit-log-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/audit-log-fr.png +0 -0
- package/dist/blueprints/assets/photos/saas/erp-sync-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/erp-sync-fr.png +0 -0
- package/dist/blueprints/assets/photos/saas/logo-castellan-alimentaire.png +0 -0
- package/dist/blueprints/assets/photos/saas/logo-cliniques-du-vivier.png +0 -0
- package/dist/blueprints/assets/photos/saas/logo-marenne-logistique.png +0 -0
- package/dist/blueprints/assets/photos/saas/logo-nordgate-habitat.png +0 -0
- package/dist/blueprints/assets/photos/saas/logo-tessaly-energies.png +0 -0
- package/dist/blueprints/assets/photos/saas/office-london.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/office-montreal.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/office-paris.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/office-toronto.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/policy-editor-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/policy-editor-fr.png +0 -0
- package/dist/blueprints/assets/photos/saas/security-racks.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/spend-reporting-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/spend-reporting-fr.png +0 -0
- package/dist/blueprints/assets/photos/saas/sso-scim-en.png +0 -0
- package/dist/blueprints/assets/photos/saas/sso-scim-fr.png +0 -0
- package/dist/blueprints/assets/photos/store/aleppo-soap.jpg +0 -0
- package/dist/blueprints/assets/photos/store/copper-pan.jpg +0 -0
- package/dist/blueprints/assets/photos/store/crochet-throw.jpg +0 -0
- package/dist/blueprints/assets/photos/store/enamel-mug.jpg +0 -0
- package/dist/blueprints/assets/photos/store/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/store/knit-sweater.jpg +0 -0
- package/dist/blueprints/assets/photos/store/leather-boots.jpg +0 -0
- package/dist/blueprints/assets/photos/store/leather-duffel.jpg +0 -0
- package/dist/blueprints/assets/photos/store/leather-wallet.jpg +0 -0
- package/dist/blueprints/assets/photos/store/moka-pot.jpg +0 -0
- package/dist/blueprints/assets/photos/store/skillet.jpg +0 -0
- package/dist/blueprints/assets/photos/store/stoneware-bottles.jpg +0 -0
- package/dist/blueprints/assets/photos/store/story.jpg +0 -0
- package/dist/blueprints/assets/photos/store/turned-bowl.jpg +0 -0
- package/dist/blueprints/association-copy-en.d.ts +3 -0
- package/dist/blueprints/association-copy-en.d.ts.map +1 -0
- package/dist/blueprints/association-copy-en.js +834 -0
- package/dist/blueprints/association-copy-en.js.map +1 -0
- package/dist/blueprints/association-copy-fr.d.ts +3 -0
- package/dist/blueprints/association-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/association-copy-fr.js +841 -0
- package/dist/blueprints/association-copy-fr.js.map +1 -0
- package/dist/blueprints/association-copy.d.ts +301 -0
- package/dist/blueprints/association-copy.d.ts.map +1 -0
- package/dist/blueprints/association-copy.js +17 -0
- package/dist/blueprints/association-copy.js.map +1 -0
- package/dist/blueprints/association-credits.d.ts +16 -0
- package/dist/blueprints/association-credits.d.ts.map +1 -0
- package/dist/blueprints/association-credits.js +80 -0
- package/dist/blueprints/association-credits.js.map +1 -0
- package/dist/blueprints/association-typography.d.ts +23 -0
- package/dist/blueprints/association-typography.d.ts.map +1 -0
- package/dist/blueprints/association-typography.js +55 -0
- package/dist/blueprints/association-typography.js.map +1 -0
- package/dist/blueprints/association.d.ts +86 -287
- package/dist/blueprints/association.d.ts.map +1 -1
- package/dist/blueprints/association.js +510 -1082
- package/dist/blueprints/association.js.map +1 -1
- package/dist/blueprints/blog-copy-en.d.ts +4 -0
- package/dist/blueprints/blog-copy-en.d.ts.map +1 -0
- package/dist/blueprints/blog-copy-en.js +701 -0
- package/dist/blueprints/blog-copy-en.js.map +1 -0
- package/dist/blueprints/blog-copy-fr.d.ts +12 -0
- package/dist/blueprints/blog-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/blog-copy-fr.js +722 -0
- package/dist/blueprints/blog-copy-fr.js.map +1 -0
- package/dist/blueprints/blog-copy.d.ts +157 -0
- package/dist/blueprints/blog-copy.d.ts.map +1 -0
- package/dist/blueprints/blog-copy.js +2 -0
- package/dist/blueprints/blog-copy.js.map +1 -0
- package/dist/blueprints/blog-credits.d.ts +28 -0
- package/dist/blueprints/blog-credits.d.ts.map +1 -0
- package/dist/blueprints/blog-credits.js +73 -0
- package/dist/blueprints/blog-credits.js.map +1 -0
- package/dist/blueprints/blog-rich.d.ts +19 -0
- package/dist/blueprints/blog-rich.d.ts.map +1 -0
- package/dist/blueprints/blog-rich.js +51 -0
- package/dist/blueprints/blog-rich.js.map +1 -0
- package/dist/blueprints/blog.d.ts +51 -176
- package/dist/blueprints/blog.d.ts.map +1 -1
- package/dist/blueprints/blog.js +358 -947
- package/dist/blueprints/blog.js.map +1 -1
- package/dist/blueprints/content-pack.d.ts.map +1 -1
- package/dist/blueprints/content-pack.js +11 -16
- package/dist/blueprints/content-pack.js.map +1 -1
- package/dist/blueprints/content-packs.d.ts +2 -4
- package/dist/blueprints/content-packs.d.ts.map +1 -1
- package/dist/blueprints/content-packs.js +27 -15
- package/dist/blueprints/content-packs.js.map +1 -1
- package/dist/blueprints/documentation-copy-en.d.ts +3 -0
- package/dist/blueprints/documentation-copy-en.d.ts.map +1 -0
- package/dist/blueprints/documentation-copy-en.js +883 -0
- package/dist/blueprints/documentation-copy-en.js.map +1 -0
- package/dist/blueprints/documentation-copy-fr.d.ts +3 -0
- package/dist/blueprints/documentation-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/documentation-copy-fr.js +939 -0
- package/dist/blueprints/documentation-copy-fr.js.map +1 -0
- package/dist/blueprints/documentation-copy.d.ts +52 -0
- package/dist/blueprints/documentation-copy.d.ts.map +1 -0
- package/dist/blueprints/documentation-copy.js +2 -0
- package/dist/blueprints/documentation-copy.js.map +1 -0
- package/dist/blueprints/documentation-writer.d.ts +67 -0
- package/dist/blueprints/documentation-writer.d.ts.map +1 -0
- package/dist/blueprints/documentation-writer.js +190 -0
- package/dist/blueprints/documentation-writer.js.map +1 -0
- package/dist/blueprints/documentation.d.ts +26 -29
- package/dist/blueprints/documentation.d.ts.map +1 -1
- package/dist/blueprints/documentation.js +106 -1064
- package/dist/blueprints/documentation.js.map +1 -1
- package/dist/blueprints/magazine-copy-en.d.ts +13 -0
- package/dist/blueprints/magazine-copy-en.d.ts.map +1 -0
- package/dist/blueprints/magazine-copy-en.js +553 -0
- package/dist/blueprints/magazine-copy-en.js.map +1 -0
- package/dist/blueprints/magazine-copy-fr.d.ts +14 -0
- package/dist/blueprints/magazine-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/magazine-copy-fr.js +568 -0
- package/dist/blueprints/magazine-copy-fr.js.map +1 -0
- package/dist/blueprints/magazine-copy.d.ts +166 -0
- package/dist/blueprints/magazine-copy.d.ts.map +1 -0
- package/dist/blueprints/magazine-copy.js +58 -0
- package/dist/blueprints/magazine-copy.js.map +1 -0
- package/dist/blueprints/magazine-credits.d.ts +19 -0
- package/dist/blueprints/magazine-credits.d.ts.map +1 -0
- package/dist/blueprints/magazine-credits.js +109 -0
- package/dist/blueprints/magazine-credits.js.map +1 -0
- package/dist/blueprints/magazine.d.ts +30 -78
- package/dist/blueprints/magazine.d.ts.map +1 -1
- package/dist/blueprints/magazine.js +269 -690
- package/dist/blueprints/magazine.js.map +1 -1
- package/dist/blueprints/portfolio-copy-en.d.ts +4 -0
- package/dist/blueprints/portfolio-copy-en.d.ts.map +1 -0
- package/dist/blueprints/portfolio-copy-en.js +745 -0
- package/dist/blueprints/portfolio-copy-en.js.map +1 -0
- package/dist/blueprints/portfolio-copy-fr.d.ts +9 -0
- package/dist/blueprints/portfolio-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/portfolio-copy-fr.js +737 -0
- package/dist/blueprints/portfolio-copy-fr.js.map +1 -0
- package/dist/blueprints/portfolio-copy.d.ts +204 -0
- package/dist/blueprints/portfolio-copy.d.ts.map +1 -0
- package/dist/blueprints/portfolio-copy.js +15 -0
- package/dist/blueprints/portfolio-copy.js.map +1 -0
- package/dist/blueprints/portfolio-credits.d.ts +18 -0
- package/dist/blueprints/portfolio-credits.d.ts.map +1 -0
- package/dist/blueprints/portfolio-credits.js +239 -0
- package/dist/blueprints/portfolio-credits.js.map +1 -0
- package/dist/blueprints/portfolio-typography.d.ts +19 -0
- package/dist/blueprints/portfolio-typography.d.ts.map +1 -0
- package/dist/blueprints/portfolio-typography.js +41 -0
- package/dist/blueprints/portfolio-typography.js.map +1 -0
- package/dist/blueprints/portfolio.d.ts +68 -157
- package/dist/blueprints/portfolio.d.ts.map +1 -1
- package/dist/blueprints/portfolio.js +475 -727
- package/dist/blueprints/portfolio.js.map +1 -1
- package/dist/blueprints/restaurant-copy-en.d.ts +3 -0
- package/dist/blueprints/restaurant-copy-en.d.ts.map +1 -0
- package/dist/blueprints/restaurant-copy-en.js +641 -0
- package/dist/blueprints/restaurant-copy-en.js.map +1 -0
- package/dist/blueprints/restaurant-copy-fr.d.ts +3 -0
- package/dist/blueprints/restaurant-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/restaurant-copy-fr.js +665 -0
- package/dist/blueprints/restaurant-copy-fr.js.map +1 -0
- package/dist/blueprints/restaurant-copy.d.ts +234 -0
- package/dist/blueprints/restaurant-copy.d.ts.map +1 -0
- package/dist/blueprints/restaurant-copy.js +15 -0
- package/dist/blueprints/restaurant-copy.js.map +1 -0
- package/dist/blueprints/restaurant-credits.d.ts +18 -0
- package/dist/blueprints/restaurant-credits.d.ts.map +1 -0
- package/dist/blueprints/restaurant-credits.js +121 -0
- package/dist/blueprints/restaurant-credits.js.map +1 -0
- package/dist/blueprints/restaurant.d.ts +55 -128
- package/dist/blueprints/restaurant.d.ts.map +1 -1
- package/dist/blueprints/restaurant.js +425 -770
- package/dist/blueprints/restaurant.js.map +1 -1
- package/dist/blueprints/saas-copy-en.d.ts +3 -0
- package/dist/blueprints/saas-copy-en.d.ts.map +1 -0
- package/dist/blueprints/saas-copy-en.js +901 -0
- package/dist/blueprints/saas-copy-en.js.map +1 -0
- package/dist/blueprints/saas-copy-fr.d.ts +3 -0
- package/dist/blueprints/saas-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/saas-copy-fr.js +912 -0
- package/dist/blueprints/saas-copy-fr.js.map +1 -0
- package/dist/blueprints/saas-copy.d.ts +266 -0
- package/dist/blueprints/saas-copy.d.ts.map +1 -0
- package/dist/blueprints/saas-copy.js +18 -0
- package/dist/blueprints/saas-copy.js.map +1 -0
- package/dist/blueprints/saas-credits.d.ts +22 -0
- package/dist/blueprints/saas-credits.d.ts.map +1 -0
- package/dist/blueprints/saas-credits.js +44 -0
- package/dist/blueprints/saas-credits.js.map +1 -0
- package/dist/blueprints/saas.d.ts +59 -203
- package/dist/blueprints/saas.d.ts.map +1 -1
- package/dist/blueprints/saas.js +505 -1108
- package/dist/blueprints/saas.js.map +1 -1
- package/dist/blueprints/store-copy-en.d.ts +4 -0
- package/dist/blueprints/store-copy-en.d.ts.map +1 -0
- package/dist/blueprints/store-copy-en.js +521 -0
- package/dist/blueprints/store-copy-en.js.map +1 -0
- package/dist/blueprints/store-copy-fr.d.ts +4 -0
- package/dist/blueprints/store-copy-fr.d.ts.map +1 -0
- package/dist/blueprints/store-copy-fr.js +521 -0
- package/dist/blueprints/store-copy-fr.js.map +1 -0
- package/dist/blueprints/store-copy.d.ts +219 -0
- package/dist/blueprints/store-copy.d.ts.map +1 -0
- package/dist/blueprints/store-copy.js +16 -0
- package/dist/blueprints/store-copy.js.map +1 -0
- package/dist/blueprints/store-credits.d.ts +3 -0
- package/dist/blueprints/store-credits.d.ts.map +1 -0
- package/dist/blueprints/store-credits.js +117 -0
- package/dist/blueprints/store-credits.js.map +1 -0
- package/dist/blueprints/store.d.ts +43 -231
- package/dist/blueprints/store.d.ts.map +1 -1
- package/dist/blueprints/store.js +466 -789
- package/dist/blueprints/store.js.map +1 -1
- package/dist/blueprints/vitrine-copy-en.d.ts.map +1 -1
- package/dist/blueprints/vitrine-copy-en.js +1 -0
- package/dist/blueprints/vitrine-copy-en.js.map +1 -1
- package/dist/blueprints/vitrine-copy-fr.d.ts.map +1 -1
- package/dist/blueprints/vitrine-copy-fr.js +1 -0
- package/dist/blueprints/vitrine-copy-fr.js.map +1 -1
- package/dist/blueprints/vitrine-copy.d.ts +1 -0
- package/dist/blueprints/vitrine-copy.d.ts.map +1 -1
- package/dist/blueprints/vitrine.d.ts +1 -0
- package/dist/blueprints/vitrine.d.ts.map +1 -1
- package/dist/blueprints/vitrine.js +24 -3
- package/dist/blueprints/vitrine.js.map +1 -1
- package/package.json +10 -10
- package/dist/blueprints/assets/photos/association/fundraising-dinner.jpg +0 -0
- package/dist/blueprints/assets/photos/association/volunteer-orientation.jpg +0 -0
- package/dist/blueprints/assets/photos/association/volunteer-portrait.jpg +0 -0
- package/dist/blueprints/assets/photos/association/winter-coat-collection.jpg +0 -0
- package/dist/blueprints/assets/photos/documentation/delivery-flow.png +0 -0
- package/dist/blueprints/assets/photos/magazine/archive-room.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/banquet-hall.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/city-hall.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/downtown-towers.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/gallery-opening.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/garden-volunteers.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/station-platform.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/theater-stage.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/fenmore-branch.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/fenmore-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/fenmore-stationery.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/gannet-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/gannet-sardines.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/gannet-shelf.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/hollis-crane-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/hollis-crane-grid.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/hollis-crane-salt-year.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/hollis-crane-spines.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/rookery-hall-brochure.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/rookery-hall-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/rookery-hall-poster-carnival.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/rookery-hall-poster-sibelius.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/rookery-hall-series.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/saltmarsh-quay-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/saltmarsh-quay-gate.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/saltmarsh-quay-pictograms.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/saltmarsh-quay-totem.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/tidewater-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/tidewater-data.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/tidewater-report-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/warp-and-weft-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/warp-and-weft-room.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/westmoor-rail-components.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/westmoor-rail-cover.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/westmoor-rail-departures.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/beetroot-goats-curd.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/ceps-risotto.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/duck-leg-red-cabbage.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/hake-green-peppercorns.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/vegetable-broth.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/adrian-tan.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/api-webhooks.png +0 -0
- package/dist/blueprints/assets/photos/saas/approvals-queue.png +0 -0
- package/dist/blueprints/assets/photos/saas/audit-log.png +0 -0
- package/dist/blueprints/assets/photos/saas/erp-sync.png +0 -0
- package/dist/blueprints/assets/photos/saas/policy-editor.png +0 -0
- package/dist/blueprints/assets/photos/saas/spend-reporting.png +0 -0
- package/dist/blueprints/assets/photos/saas/sso-scim.png +0 -0
- package/dist/blueprints/assets/photos/store/brushed-cotton-overshirt.jpg +0 -0
- package/dist/blueprints/assets/photos/store/cable-knit-beanie.jpg +0 -0
- package/dist/blueprints/assets/photos/store/canvas-shoulder-bag.jpg +0 -0
- package/dist/blueprints/assets/photos/store/canvas-tote.jpg +0 -0
- package/dist/blueprints/assets/photos/store/cast-iron-skillet.jpg +0 -0
- package/dist/blueprints/assets/photos/store/field-jacket.jpg +0 -0
- package/dist/blueprints/assets/photos/store/heavyweight-t-shirt.jpg +0 -0
- package/dist/blueprints/assets/photos/store/leather-card-holder.jpg +0 -0
- package/dist/blueprints/assets/photos/store/linen-table-runner.jpg +0 -0
- package/dist/blueprints/assets/photos/store/porcelain-pour-over-set.jpg +0 -0
- package/dist/blueprints/assets/photos/store/striped-wool-blanket.jpg +0 -0
|
@@ -0,0 +1,901 @@
|
|
|
1
|
+
/** The `saas` blueprint in English. See `saas-copy.ts` for the shape. */
|
|
2
|
+
const FEATURES = [
|
|
3
|
+
{
|
|
4
|
+
name: 'Approval routing',
|
|
5
|
+
slug: 'approval-routing',
|
|
6
|
+
short: 'Rules on amount, cost centre and vendor send each request to the right approvers.',
|
|
7
|
+
description: 'Write your approval matrix once, as rules on amount, cost centre, vendor and category, and every request finds its approvers without anyone forwarding it.',
|
|
8
|
+
icon: 'layers',
|
|
9
|
+
screenshot: 'policy-editor',
|
|
10
|
+
body: (name) => [
|
|
11
|
+
{ h2: 'Your approval matrix, as rules' },
|
|
12
|
+
{
|
|
13
|
+
p: `Most finance teams already have an approval matrix: a spreadsheet that says who signs off on what, above which amount, for which cost centre. In ${name} that spreadsheet becomes a policy. Each row is a step with its conditions, its approvers and a deadline, and a request is matched against the policy the moment it is submitted.`,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
p: 'Approvers can be named people, roles such as the budget owner of a cost centre, or groups synced from your identity provider. Steps run in sequence by default. A step can also run in parallel with another, so procurement can review a new vendor while the budget owner reviews the spend.',
|
|
17
|
+
},
|
|
18
|
+
{ h2: 'Change it safely' },
|
|
19
|
+
{
|
|
20
|
+
p: 'Policies are versioned. An edit is saved as a draft, and before you publish it you can run it against the requests of the last 90 days to see which of them would have been routed differently. Every published version stays in the audit log, with the name of the person who published it.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
ul: [
|
|
24
|
+
'Conditions on amount, currency, cost centre, vendor, category and any custom field',
|
|
25
|
+
'Deadlines in business days, with reminders the day before',
|
|
26
|
+
'Delegates for approvers who are away, and a fallback to their manager',
|
|
27
|
+
'Separate policies for purchase requests, vendor invoices and contract changes',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
details: [
|
|
32
|
+
[
|
|
33
|
+
'What happens when nobody matches a request?',
|
|
34
|
+
'It goes to the default step you choose for the policy, usually the finance controller, and the request is flagged so the gap in the matrix can be fixed.',
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
'Can one person approve two steps?',
|
|
38
|
+
'Only if you allow it. By default a person who approved one step is skipped on the next, and the step moves to the next eligible approver.',
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
'How many policies can we have?',
|
|
42
|
+
'Ten on the Team plan and as many as you need on Business and Enterprise.',
|
|
43
|
+
],
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Audit log',
|
|
48
|
+
slug: 'audit-log',
|
|
49
|
+
short: 'Every edit and decision is written once and never rewritten. Auditors read it directly.',
|
|
50
|
+
description: 'Every request, edit, comment and decision is written to a log that cannot be rewritten, and your auditors can filter and export it themselves.',
|
|
51
|
+
icon: 'shield',
|
|
52
|
+
screenshot: 'audit-log',
|
|
53
|
+
body: (name) => [
|
|
54
|
+
{ h2: 'One record for every decision' },
|
|
55
|
+
{
|
|
56
|
+
p: `When a request is created, changed, commented on or decided, ${name} writes an event: who did it, what changed, when, and from where. Events are appended and never edited. Each one carries a hash of the event before it, so a gap or a change anywhere in the chain is detected the next time the log is verified.`,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
p: 'The log records what people do in the browser and what integrations do on their behalf. A bill posted to NetSuite, a budget line read from your ERP and a decision made from a Slack message all appear in the same list, in order.',
|
|
60
|
+
},
|
|
61
|
+
{ h2: 'Evidence your auditors can pull themselves' },
|
|
62
|
+
{
|
|
63
|
+
p: 'Give an external auditor a read-only role limited to a date range. They can filter by request, person, event or amount and export exactly the sample they need, without a screenshot from your team and without seeing anything else in the workspace.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
ul: [
|
|
67
|
+
'Exports as CSV and PDF, signed so a file can be checked against the log',
|
|
68
|
+
'Retention of one year on Team, seven years on Business and ten years on Enterprise',
|
|
69
|
+
'Chain verification on demand and every night',
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
details: [
|
|
74
|
+
[
|
|
75
|
+
'Can an administrator delete an event?',
|
|
76
|
+
'No. Administrators can hide personal data from an event after a valid erasure request, and the hiding is itself recorded as an event.',
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
'Which time zone does the log use?',
|
|
80
|
+
'Events are stored in UTC and shown in the time zone of the person reading them. Exports use UTC.',
|
|
81
|
+
],
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'ERP sync',
|
|
86
|
+
slug: 'erp-sync',
|
|
87
|
+
short: 'Approved bills and orders post to NetSuite, Xero, QuickBooks or Business Central.',
|
|
88
|
+
description: 'Approved vendor bills and purchase orders post to your ERP within a minute, and budget lines come back every fifteen minutes so approvers see what is left.',
|
|
89
|
+
icon: 'cloud',
|
|
90
|
+
screenshot: 'erp-sync',
|
|
91
|
+
body: (name) => [
|
|
92
|
+
{ h2: 'Approvals that finish in the ledger' },
|
|
93
|
+
{
|
|
94
|
+
p: `An approval is only finished when the ERP knows about it. ${name} connects to NetSuite, Xero, QuickBooks Online and Microsoft Dynamics 365 Business Central. When the last step approves, the vendor bill or purchase order is created or updated in the ERP with the approvers, the dates and a link back to the request.`,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
p: 'The connection works in both directions. Vendors, cost centres, subsidiaries and budget lines are read from the ERP, so a request is coded the same way your books are, and an approver sees the remaining budget before deciding.',
|
|
98
|
+
},
|
|
99
|
+
{ h2: 'Failures you can see' },
|
|
100
|
+
{
|
|
101
|
+
p: 'Every sync is listed with its result. When the ERP rejects a record or limits the rate of calls, the sync is retried with a delay and the finance team is told if it still fails after an hour. Nothing is dropped quietly.',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
ul: [
|
|
105
|
+
'Mapping for subsidiaries, currencies and tax codes',
|
|
106
|
+
'Posting as draft or approved, per record type',
|
|
107
|
+
'A nightly CSV import for ERPs without an API',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
details: [
|
|
112
|
+
[
|
|
113
|
+
'How long does a connection take to set up?',
|
|
114
|
+
'Usually an hour with your ERP administrator. We send the list of permissions the integration user needs beforehand.',
|
|
115
|
+
],
|
|
116
|
+
[
|
|
117
|
+
'Does the sync write anything we did not approve?',
|
|
118
|
+
'No. It writes approved records and the approval details, and reads the reference data listed above.',
|
|
119
|
+
],
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'SSO and SCIM',
|
|
124
|
+
slug: 'sso-and-scim',
|
|
125
|
+
short: 'Sign in with Okta, Entra ID or Google. Access follows your directory.',
|
|
126
|
+
description: 'Members sign in through your identity provider, and SCIM keeps people, groups and roles in step with your directory.',
|
|
127
|
+
icon: 'lock',
|
|
128
|
+
screenshot: 'sso-scim',
|
|
129
|
+
body: () => [
|
|
130
|
+
{ h2: 'Sign-in through your identity provider' },
|
|
131
|
+
{
|
|
132
|
+
p: 'SAML single sign-on works with Okta, Microsoft Entra ID, Google Workspace and any provider that follows the standard. Once it is on, you can turn password sign-in off for the whole workspace, and the session length follows the policy you set.',
|
|
133
|
+
},
|
|
134
|
+
{ h2: 'Provisioning from your directory' },
|
|
135
|
+
{
|
|
136
|
+
p: 'With SCIM, a person added to a group in your directory appears in the workspace with the right role, and a person removed from the directory loses access at once. Groups map to roles, so the finance controllers group in Okta becomes the finance approvers in the product without anyone updating a list by hand.',
|
|
137
|
+
},
|
|
138
|
+
{ h2: 'Access that ends on time' },
|
|
139
|
+
{
|
|
140
|
+
p: 'Auditors and contractors can be given an end date when they are invited. On that date their access ends, any step still waiting on them moves to the person who invited them, and the change is written to the audit log.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
ul: [
|
|
144
|
+
'Roles for requesters, approvers, accounts payable, administrators and auditors',
|
|
145
|
+
'Time-limited auditor access, ended automatically on the date you set',
|
|
146
|
+
'Sign-in events recorded in the audit log',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
details: [
|
|
151
|
+
[
|
|
152
|
+
'Which plans include SSO?',
|
|
153
|
+
'Google sign-in is included on every plan. SAML and SCIM are included on Business and Enterprise.',
|
|
154
|
+
],
|
|
155
|
+
[
|
|
156
|
+
'What happens to open approvals when someone leaves?',
|
|
157
|
+
'Their pending steps move to their delegate, or to their manager if they had none, and the reassignment is recorded.',
|
|
158
|
+
],
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: 'Spend reporting',
|
|
163
|
+
slug: 'spend-reporting',
|
|
164
|
+
short: 'See where requests wait, who is slow and which budgets are running over.',
|
|
165
|
+
description: 'Reports on time to approve, spend against budget and requests waiting too long, built from the same records as the audit log.',
|
|
166
|
+
icon: 'chart',
|
|
167
|
+
screenshot: 'spend-reporting',
|
|
168
|
+
body: () => [
|
|
169
|
+
{ h2: 'Where approvals wait' },
|
|
170
|
+
{
|
|
171
|
+
p: 'The time-to-approve report shows the median time from request to final decision, by week, month or quarter, and breaks it down by step and by approver. When a step is slow, you see which one, and whether it is slow for every amount or only for large ones.',
|
|
172
|
+
},
|
|
173
|
+
{ h2: 'Spend against budget' },
|
|
174
|
+
{
|
|
175
|
+
p: 'Because budget lines are read from the ERP, every approved request is counted against its cost centre as soon as it is approved, weeks before the invoice arrives. Budget owners see committed spend, and finance sees which cost centres will run over before the month closes.',
|
|
176
|
+
},
|
|
177
|
+
{ h2: 'Figures you can trace' },
|
|
178
|
+
{
|
|
179
|
+
p: 'Every figure in a report opens the requests it was computed from, each with its approval chain and its history in the audit log. A median quoted in a board pack can be traced back to the individual requests in two clicks.',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
ul: [
|
|
183
|
+
'Saved views that can be shared with a link',
|
|
184
|
+
'A weekly email to budget owners with their committed spend',
|
|
185
|
+
'CSV export of every report, and a read-only API for your data warehouse',
|
|
186
|
+
],
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
details: [
|
|
190
|
+
[
|
|
191
|
+
'Do reports include requests that were rejected?',
|
|
192
|
+
'Yes, as a separate series, so the time spent on rejected requests is visible too.',
|
|
193
|
+
],
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'API and webhooks',
|
|
198
|
+
slug: 'api-and-webhooks',
|
|
199
|
+
short: 'A versioned REST API and signed webhooks, with the permissions of the app.',
|
|
200
|
+
description: 'Everything the product does in the browser can be done through a versioned REST API, and signed webhooks tell your systems when a decision is made.',
|
|
201
|
+
icon: 'code',
|
|
202
|
+
screenshot: 'api-webhooks',
|
|
203
|
+
body: () => [
|
|
204
|
+
{ h2: 'The same product, through an API' },
|
|
205
|
+
{
|
|
206
|
+
p: 'The REST API is versioned by date and covers requests, approvals, policies, vendors, the audit log and reports. API keys are scoped to read or write and to the parts of the workspace they need, and every call they make is written to the audit log like any other action.',
|
|
207
|
+
},
|
|
208
|
+
{ h2: 'Webhooks for every decision' },
|
|
209
|
+
{
|
|
210
|
+
p: 'Webhooks fire when a request is created, approved, rejected or changed. Each delivery is signed with HMAC-SHA256 and retried for up to 24 hours when your endpoint does not answer, and the last deliveries of every endpoint are listed with their response codes.',
|
|
211
|
+
},
|
|
212
|
+
{ h2: 'Changes announced in advance' },
|
|
213
|
+
{
|
|
214
|
+
p: 'A new API version is published with a date, and the previous version keeps working for at least 12 months after it. Every change is listed in the changelog, and the owners of the keys that still call a retiring version are told by email three months before it ends.',
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
ul: [
|
|
218
|
+
'Idempotency keys on every write',
|
|
219
|
+
'A sandbox workspace with test data for every customer',
|
|
220
|
+
'Rate limits of 600 requests a minute per key',
|
|
221
|
+
],
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
details: [
|
|
225
|
+
[
|
|
226
|
+
'Is there a client library?',
|
|
227
|
+
'We publish clients for TypeScript and Python. Any language that can make an HTTPS request can use the API directly.',
|
|
228
|
+
],
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
];
|
|
232
|
+
/** Oldest first: seeded in this order, listed newest first by id. */
|
|
233
|
+
const UPDATES = [
|
|
234
|
+
{
|
|
235
|
+
title: 'SCIM group mapping',
|
|
236
|
+
slug: 'scim-group-mapping',
|
|
237
|
+
summary: 'Groups in your identity provider now map to roles, so directory changes set permissions too.',
|
|
238
|
+
publishedAt: '2026-05-14T09:00:00.000Z',
|
|
239
|
+
screenshot: 'sso-scim',
|
|
240
|
+
caption: 'Sign-in and provisioning settings, with five Okta groups mapped to roles.',
|
|
241
|
+
body: () => [
|
|
242
|
+
{
|
|
243
|
+
p: 'Until now SCIM created and removed members, and roles were set by hand. From today you can map a group in Okta, Microsoft Entra ID or Google Workspace to a role, and membership of that group sets the role.',
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
ul: [
|
|
247
|
+
'A group can map to requester, approver, accounts payable, administrator or auditor',
|
|
248
|
+
'An approver role can be limited to the cost centres the group owns',
|
|
249
|
+
'Changes are applied within a minute of the directory sending them',
|
|
250
|
+
],
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
p: 'Existing roles are left as they are until you save a mapping. Settings, then Sign-in and provisioning, lists every group your directory has sent.',
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
title: 'Deadlines and reminders on every step',
|
|
259
|
+
slug: 'deadlines-and-reminders',
|
|
260
|
+
summary: 'Each step of a policy can now carry a deadline in business days, with a reminder the day before.',
|
|
261
|
+
publishedAt: '2026-06-04T09:00:00.000Z',
|
|
262
|
+
body: () => [
|
|
263
|
+
{
|
|
264
|
+
p: 'A request that waits on one person holds up everyone after them. Steps now carry a deadline, counted in business days from the moment the step opens and following the public holidays of the approver’s country.',
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
p: 'The approver gets a reminder the working day before the deadline, by email and in Slack or Microsoft Teams if connected. When a deadline passes, the request is marked overdue in the queue and the step can move to a delegate automatically.',
|
|
268
|
+
},
|
|
269
|
+
],
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
title: 'Delegation while you are away',
|
|
273
|
+
slug: 'delegation-while-away',
|
|
274
|
+
summary: 'Approvers can name a delegate for a date range, and their steps move to that person while they are out.',
|
|
275
|
+
publishedAt: '2026-06-25T09:00:00.000Z',
|
|
276
|
+
body: () => [
|
|
277
|
+
{
|
|
278
|
+
p: 'Set a date range and a delegate from your profile, or let your calendar do it: when Google Calendar or Outlook shows you out of office, the delegate you chose receives your steps for those days.',
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
ul: [
|
|
282
|
+
'A delegate cannot approve a request they submitted themselves',
|
|
283
|
+
'Delegated decisions show both names in the request and in the audit log',
|
|
284
|
+
'Administrators can set a delegate for someone on unplanned leave',
|
|
285
|
+
],
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
title: 'Microsoft Dynamics 365 Business Central',
|
|
291
|
+
slug: 'business-central',
|
|
292
|
+
summary: 'Business Central joins NetSuite, Xero and QuickBooks Online as a two-way ERP connection.',
|
|
293
|
+
publishedAt: '2026-07-16T09:00:00.000Z',
|
|
294
|
+
screenshot: 'erp-sync',
|
|
295
|
+
caption: 'The recent activity of an ERP connection, with one sync retried after a rate limit.',
|
|
296
|
+
body: () => [
|
|
297
|
+
{
|
|
298
|
+
p: 'The Business Central connection reads vendors, dimensions and budget entries, and writes approved purchase invoices and purchase orders. Dimensions map to cost centres, so an approval policy written for a department works on the dimension your books already use.',
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
p: 'Connections are available on Business and Enterprise. Setting one up takes a Business Central user with the permissions listed in the setup screen, and about an hour.',
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
title: 'Signed audit exports',
|
|
307
|
+
slug: 'signed-audit-exports',
|
|
308
|
+
summary: 'CSV and PDF exports of the audit log are now signed, so a file can be checked against the log.',
|
|
309
|
+
publishedAt: '2026-08-06T09:00:00.000Z',
|
|
310
|
+
screenshot: 'audit-log',
|
|
311
|
+
caption: 'The audit log filtered to one purchase request, ready to export.',
|
|
312
|
+
body: () => [
|
|
313
|
+
{
|
|
314
|
+
p: 'Each export of the audit log now comes with a signature over its contents and the hash of the last event it includes. Anyone with the file can check it against the workspace’s public key, and an auditor can confirm that no row was added, removed or edited after the export.',
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
p: 'Signing is on for every export from Business and Enterprise workspaces, with nothing to set up. The verification steps are described under Settings, then Audit log.',
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
title: 'Parallel approval steps',
|
|
323
|
+
slug: 'parallel-approval-steps',
|
|
324
|
+
summary: 'Two steps can now run at the same time, so procurement and a budget owner review a request together.',
|
|
325
|
+
publishedAt: '2026-08-27T09:00:00.000Z',
|
|
326
|
+
screenshot: 'policy-editor',
|
|
327
|
+
caption: 'A purchase request policy with procurement reviewing new vendors in parallel with step 1.',
|
|
328
|
+
body: () => [
|
|
329
|
+
{
|
|
330
|
+
p: 'Steps used to run strictly one after the other. A policy can now open two steps at once: procurement reviews a new vendor while the budget owner reviews the spend, and the request moves on when both have approved.',
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
ul: [
|
|
334
|
+
'Mark a step as parallel with the step before it in the policy editor',
|
|
335
|
+
'A rejection on either step ends the request, with the reason shown to the requester',
|
|
336
|
+
'Reports count the time of a parallel step from when it opened',
|
|
337
|
+
],
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
p: 'Across the workspaces that tried it in August, requests from new vendors reached a decision a day and a half sooner.',
|
|
341
|
+
},
|
|
342
|
+
],
|
|
343
|
+
},
|
|
344
|
+
];
|
|
345
|
+
export const SAAS_COPY_EN = {
|
|
346
|
+
locale: 'en',
|
|
347
|
+
defaultProductName: 'Ledgerline',
|
|
348
|
+
schema: {
|
|
349
|
+
routes: { feature: '/features/:slug', changelog: '/changelog/:slug' },
|
|
350
|
+
labels: {
|
|
351
|
+
feature: { singular: 'Feature', plural: 'Features' },
|
|
352
|
+
changelog: { singular: 'Changelog entry', plural: 'Changelog' },
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
slugs: {
|
|
356
|
+
home: 'home',
|
|
357
|
+
product: 'product',
|
|
358
|
+
pricing: 'pricing',
|
|
359
|
+
security: 'security',
|
|
360
|
+
changelog: 'changelog',
|
|
361
|
+
about: 'about',
|
|
362
|
+
demo: 'demo',
|
|
363
|
+
legal: 'legal',
|
|
364
|
+
privacy: 'privacy',
|
|
365
|
+
credits: 'photo-credits',
|
|
366
|
+
},
|
|
367
|
+
// A London number in the range Ofcom reserves for drama: it rings nobody.
|
|
368
|
+
phone: { display: '+44 20 7946 0321', href: 'tel:+442079460321' },
|
|
369
|
+
customers: [
|
|
370
|
+
{ key: 'logo-halvorsen-freight', name: 'Halvorsen Freight' },
|
|
371
|
+
{ key: 'logo-brightwell-clinics', name: 'Brightwell Clinics' },
|
|
372
|
+
{ key: 'logo-castlemere-foods', name: 'Castlemere Foods' },
|
|
373
|
+
{ key: 'logo-tessaly-energy', name: 'Tessaly Energy' },
|
|
374
|
+
{ key: 'logo-orrin-and-vale', name: 'Orrin & Vale' },
|
|
375
|
+
{ key: 'logo-northgate-homes', name: 'Northgate Homes' },
|
|
376
|
+
],
|
|
377
|
+
features: FEATURES,
|
|
378
|
+
updates: UPDATES,
|
|
379
|
+
media: [
|
|
380
|
+
{
|
|
381
|
+
name: 'app',
|
|
382
|
+
file: 'approvals-queue-en.png',
|
|
383
|
+
alt: 'The approvals queue of a freight company, with a purchase request for brake servicing open beside the list and its approval chain',
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
name: 'policy-editor',
|
|
387
|
+
file: 'policy-editor-en.png',
|
|
388
|
+
alt: 'The policy editor for purchase requests, with four approval steps and their conditions on amount, vendor and category',
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
name: 'audit-log',
|
|
392
|
+
file: 'audit-log-en.png',
|
|
393
|
+
alt: 'The audit log filtered to one purchase request, listing six events with their time, actor and chain hash',
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
name: 'erp-sync',
|
|
397
|
+
file: 'erp-sync-en.png',
|
|
398
|
+
alt: 'The NetSuite connection settings and its recent activity, with four synced records',
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
name: 'sso-scim',
|
|
402
|
+
file: 'sso-scim-en.png',
|
|
403
|
+
alt: 'Sign-in and provisioning settings, with SAML single sign-on through Okta and five groups mapped to roles',
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
name: 'spend-reporting',
|
|
407
|
+
file: 'spend-reporting-en.png',
|
|
408
|
+
alt: 'The time-to-approve report, a bar chart of the median hours to approval falling from 6.8 to 3.6 over thirteen weeks',
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
name: 'api-webhooks',
|
|
412
|
+
file: 'api-webhooks-en.png',
|
|
413
|
+
alt: 'The API and webhooks settings, with an HTTP request creating a purchase request and two webhook endpoints',
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
name: 'office-1',
|
|
417
|
+
file: 'office-london.jpg',
|
|
418
|
+
alt: 'The skyline of the City of London seen across the rooftops of south-east London, with the Shard, the Walkie-Talkie and the Gherkin',
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
name: 'office-2',
|
|
422
|
+
file: 'office-toronto.jpg',
|
|
423
|
+
alt: 'The Toronto skyline and the CN Tower seen from the water, on a day of broken cloud',
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
name: 'security-racks',
|
|
427
|
+
file: 'security-racks.jpg',
|
|
428
|
+
alt: 'A row of black equipment racks with patch panels and blue network cables, in a data centre room with a raised floor',
|
|
429
|
+
},
|
|
430
|
+
],
|
|
431
|
+
tiers: [
|
|
432
|
+
{
|
|
433
|
+
key: 'tier-team',
|
|
434
|
+
name: 'Team',
|
|
435
|
+
price: '$12',
|
|
436
|
+
interval: 'per approver, per month, billed yearly',
|
|
437
|
+
features: [
|
|
438
|
+
'Approvers: Up to 25',
|
|
439
|
+
'Requesters: Unlimited, free',
|
|
440
|
+
'Approval policies: 10',
|
|
441
|
+
'ERP connections: 1',
|
|
442
|
+
'Audit log history: 1 year',
|
|
443
|
+
'Single sign-on: Google',
|
|
444
|
+
'Support: Email, next business day',
|
|
445
|
+
],
|
|
446
|
+
actionLabel: 'Start a trial',
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
key: 'tier-business',
|
|
450
|
+
name: 'Business',
|
|
451
|
+
price: '$24',
|
|
452
|
+
interval: 'per approver, per month, billed yearly',
|
|
453
|
+
features: [
|
|
454
|
+
'Approvers: Up to 250',
|
|
455
|
+
'Requesters: Unlimited, free',
|
|
456
|
+
'Approval policies: Unlimited',
|
|
457
|
+
'ERP connections: 3',
|
|
458
|
+
'Audit log history: 7 years',
|
|
459
|
+
'Single sign-on: SAML and SCIM',
|
|
460
|
+
'Support: Email and chat, same business day',
|
|
461
|
+
'Parallel approval steps',
|
|
462
|
+
'Signed audit exports',
|
|
463
|
+
],
|
|
464
|
+
actionLabel: 'Start a trial',
|
|
465
|
+
primary: true,
|
|
466
|
+
highlighted: true,
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
key: 'tier-enterprise',
|
|
470
|
+
name: 'Enterprise',
|
|
471
|
+
price: 'Custom',
|
|
472
|
+
interval: 'annual contract, from 100 approvers',
|
|
473
|
+
features: [
|
|
474
|
+
'Approvers: Unlimited',
|
|
475
|
+
'Requesters: Unlimited, free',
|
|
476
|
+
'Approval policies: Unlimited',
|
|
477
|
+
'ERP connections: Unlimited',
|
|
478
|
+
'Audit log history: 10 years',
|
|
479
|
+
'Single sign-on: SAML and SCIM',
|
|
480
|
+
'Support: Named engineer, 1-hour response',
|
|
481
|
+
'Parallel approval steps',
|
|
482
|
+
'Signed audit exports',
|
|
483
|
+
'Data residency in the EU or the US',
|
|
484
|
+
'Invoicing on 30-day terms',
|
|
485
|
+
],
|
|
486
|
+
actionLabel: 'Talk to sales',
|
|
487
|
+
},
|
|
488
|
+
],
|
|
489
|
+
homeQuestions: (name) => [
|
|
490
|
+
[
|
|
491
|
+
'How long does it take to set up?',
|
|
492
|
+
'Most teams approve their first real request within two weeks. A solutions engineer turns your current approval matrix into a policy with you, and connecting the ERP takes about an hour with your administrator.',
|
|
493
|
+
],
|
|
494
|
+
[
|
|
495
|
+
'Do requesters need a paid seat?',
|
|
496
|
+
`No. Anyone in the company can submit a request or upload an invoice to ${name} at no cost. You pay for approvers, and only for the months in which they approve something.`,
|
|
497
|
+
],
|
|
498
|
+
[
|
|
499
|
+
'Which ERPs do you connect to?',
|
|
500
|
+
'NetSuite, Xero, QuickBooks Online and Microsoft Dynamics 365 Business Central, in both directions. Any other system can use the API, or a nightly CSV import.',
|
|
501
|
+
],
|
|
502
|
+
[
|
|
503
|
+
'Can our auditors get access?',
|
|
504
|
+
'Yes. The auditor role is read-only and limited to the date range you set. Auditors filter and export the log themselves, and their access ends on its own.',
|
|
505
|
+
],
|
|
506
|
+
[
|
|
507
|
+
'Where is our data stored?',
|
|
508
|
+
'In Frankfurt or in northern Virginia, chosen when the workspace is created. Backups stay in the same region, and Enterprise customers can keep them in a second region of their choice.',
|
|
509
|
+
],
|
|
510
|
+
[
|
|
511
|
+
'What happens to our data if we leave?',
|
|
512
|
+
'You can export every request, decision and attachment at any time. We delete the workspace 30 days after the end of the contract and send a certificate of deletion.',
|
|
513
|
+
],
|
|
514
|
+
],
|
|
515
|
+
detailsTitle: 'Details',
|
|
516
|
+
otherFeaturesTitle: 'Other features',
|
|
517
|
+
moreUpdatesTitle: 'More updates',
|
|
518
|
+
pages: (name, mail) => ({
|
|
519
|
+
titles: {
|
|
520
|
+
home: 'Home',
|
|
521
|
+
product: 'Product',
|
|
522
|
+
pricing: 'Pricing',
|
|
523
|
+
security: 'Security',
|
|
524
|
+
changelog: 'Changelog',
|
|
525
|
+
about: 'Company',
|
|
526
|
+
demo: 'Book a demo',
|
|
527
|
+
legal: 'Legal',
|
|
528
|
+
privacy: 'Privacy',
|
|
529
|
+
credits: 'Photo credits',
|
|
530
|
+
},
|
|
531
|
+
demoAction: 'Book a demo',
|
|
532
|
+
home: {
|
|
533
|
+
heroEyebrow: 'For finance and operations teams',
|
|
534
|
+
heroTitle: 'Spend approvals with the audit trail built in',
|
|
535
|
+
heroSubtitle: `${name} routes purchase requests, vendor invoices and contract changes to the right approvers by amount, cost centre and vendor, then writes every decision to a log your auditors can read for themselves.`,
|
|
536
|
+
heroSecondary: 'See pricing',
|
|
537
|
+
customersCaption: `Finance teams at 1,400 companies approve spend in ${name}`,
|
|
538
|
+
featuresTitle: 'One system for every spend decision',
|
|
539
|
+
stepsTitle: `How a request moves through ${name}`,
|
|
540
|
+
steps: [
|
|
541
|
+
{
|
|
542
|
+
title: 'A request comes in',
|
|
543
|
+
text: 'From a form, an email to your approvals address or a draft bill synced from the ERP, with the quote attached.',
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
title: 'Your policy routes it',
|
|
547
|
+
text: 'Amount, cost centre, vendor and category decide who approves, in what order and by when.',
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
title: 'The decision is recorded',
|
|
551
|
+
text: 'Approvers decide from the web, Slack or email. The ERP is updated and the audit log keeps who, what and when.',
|
|
552
|
+
},
|
|
553
|
+
],
|
|
554
|
+
tourTitle: 'A closer look at the product',
|
|
555
|
+
figuresTitle: 'Across every workspace, last quarter',
|
|
556
|
+
figures: [
|
|
557
|
+
{ value: '3.6', unit: 'h', label: 'median time from request to final approval' },
|
|
558
|
+
{ value: '2.1', unit: 'M', label: 'requests and invoices approved' },
|
|
559
|
+
{ value: '99.99', unit: '%', label: 'uptime over the last twelve months' },
|
|
560
|
+
{ value: '7', unit: 'years', label: 'of audit history kept on Business' },
|
|
561
|
+
],
|
|
562
|
+
quote: [
|
|
563
|
+
'We used to close the month with a folder of forwarded emails as our evidence. Now the auditors filter the log themselves and stop asking us for screenshots.',
|
|
564
|
+
'Invoice approvals went from nine days to under two in the first quarter, and nobody on my team has chased a signature since March.',
|
|
565
|
+
],
|
|
566
|
+
quoteName: 'Adrian Tan',
|
|
567
|
+
quoteRole: 'Financial Controller, Halvorsen Freight',
|
|
568
|
+
pricingTitle: 'Priced per approver',
|
|
569
|
+
questionsTitle: 'Questions finance teams ask us',
|
|
570
|
+
ctaTitle: 'See it with your own approval policy',
|
|
571
|
+
ctaText: 'Send us your approval matrix. A solutions engineer builds it in a trial workspace before a 30-minute call.',
|
|
572
|
+
ctaSecurity: 'Read the security overview',
|
|
573
|
+
},
|
|
574
|
+
product: {
|
|
575
|
+
heroEyebrow: 'Product',
|
|
576
|
+
heroTitle: 'From the request to the ledger in one system',
|
|
577
|
+
heroSubtitle: `${name} replaces the approval email chain, the matrix spreadsheet and the folder of evidence with one record per request, from the moment it is submitted to the moment it is posted.`,
|
|
578
|
+
stepsTitle: 'What changes in the first month',
|
|
579
|
+
steps: [
|
|
580
|
+
{
|
|
581
|
+
title: 'Week one',
|
|
582
|
+
text: 'Your approval matrix becomes a policy, tested against last quarter’s requests before anyone uses it.',
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
title: 'Week two',
|
|
586
|
+
text: 'The ERP is connected, and requesters start submitting through a form instead of an email.',
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
title: 'Week four',
|
|
590
|
+
text: 'The first month closes with every approval in the log and the evidence exported in one file.',
|
|
591
|
+
},
|
|
592
|
+
],
|
|
593
|
+
ctaTitle: 'See your own policy running',
|
|
594
|
+
ctaText: 'We build it in a trial workspace before the call, so the demo uses your cost centres and your amounts.',
|
|
595
|
+
ctaCompare: 'Compare plans',
|
|
596
|
+
},
|
|
597
|
+
pricing: {
|
|
598
|
+
heroEyebrow: 'Pricing',
|
|
599
|
+
heroTitle: 'Pay for the people who approve',
|
|
600
|
+
heroSubtitle: `Anyone in the company can submit requests and invoices to ${name} at no cost. Plans are billed yearly per approver, and an approver who decides nothing in a month is not counted that month.`,
|
|
601
|
+
trialAction: 'Start a trial',
|
|
602
|
+
plansTitle: 'Compare plans',
|
|
603
|
+
billingTitle: 'Billing',
|
|
604
|
+
billing: [
|
|
605
|
+
[
|
|
606
|
+
'How does the trial work?',
|
|
607
|
+
'A solutions engineer sets up a workspace with your approval policy and a copy of last month’s requests. You use it for 14 days. It does not turn into a subscription on its own, and no card is asked for.',
|
|
608
|
+
],
|
|
609
|
+
[
|
|
610
|
+
'Who counts as an approver?',
|
|
611
|
+
'Anyone who approved or rejected at least one step in the month. People who only submit requests, upload invoices or read reports are free.',
|
|
612
|
+
],
|
|
613
|
+
[
|
|
614
|
+
'Can we pay by invoice?',
|
|
615
|
+
'Yes. Business and Enterprise are invoiced yearly on 30-day terms, with your purchase order number on the invoice. Team is paid by card.',
|
|
616
|
+
],
|
|
617
|
+
[
|
|
618
|
+
'What if we grow during the year?',
|
|
619
|
+
'Extra approvers are billed at the end of each quarter for the months they were active, at the rate of your plan. Nothing is charged in advance.',
|
|
620
|
+
],
|
|
621
|
+
[
|
|
622
|
+
'Do you offer discounts?',
|
|
623
|
+
'Registered charities and schools get 40 percent off Team and Business. Write to us from your organisation’s address.',
|
|
624
|
+
],
|
|
625
|
+
[
|
|
626
|
+
'Can we change plans later?',
|
|
627
|
+
'Yes. An upgrade applies at once and is prorated to the day. A downgrade applies at the next renewal.',
|
|
628
|
+
],
|
|
629
|
+
],
|
|
630
|
+
ctaTitle: 'Help choosing a plan',
|
|
631
|
+
ctaText: 'Tell us how many people approve spend and which ERP you use, and we will recommend a plan in one email.',
|
|
632
|
+
ctaEmail: 'Email sales',
|
|
633
|
+
},
|
|
634
|
+
security: {
|
|
635
|
+
heroEyebrow: 'Security',
|
|
636
|
+
heroTitle: 'How we protect your financial data',
|
|
637
|
+
heroSubtitle: `${name} holds your vendors, your budgets and the record of who approved what. Here is how that data is hosted, encrypted, accessed and kept.`,
|
|
638
|
+
packAction: 'Request the security pack',
|
|
639
|
+
controlsTitle: 'Controls in place',
|
|
640
|
+
controls: [
|
|
641
|
+
{
|
|
642
|
+
icon: 'lock',
|
|
643
|
+
title: 'Encryption',
|
|
644
|
+
text: 'TLS 1.3 in transit and AES-256 at rest, with keys rotated every 90 days.',
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
icon: 'globe',
|
|
648
|
+
title: 'Data residency',
|
|
649
|
+
text: 'Workspaces are hosted in Frankfurt or northern Virginia, and data stays in the region.',
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
icon: 'users',
|
|
653
|
+
title: 'Access',
|
|
654
|
+
text: 'Single sign-on, SCIM and role-based permissions, with every sign-in recorded.',
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
icon: 'shield',
|
|
658
|
+
title: 'Tamper-evident log',
|
|
659
|
+
text: 'Every event carries the hash of the one before it, and the chain is verified nightly.',
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
icon: 'refresh',
|
|
663
|
+
title: 'Backups',
|
|
664
|
+
text: 'Encrypted backups every hour, kept for 35 days and restored in a test every month.',
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
icon: 'check',
|
|
668
|
+
title: 'Independent audits',
|
|
669
|
+
text: 'A SOC 2 Type II report each year and an external penetration test every six months.',
|
|
670
|
+
},
|
|
671
|
+
],
|
|
672
|
+
detail: [
|
|
673
|
+
{ h2: 'Hosting' },
|
|
674
|
+
{
|
|
675
|
+
p: 'Workspaces run on Amazon Web Services, in eu-central-1 (Frankfurt) or us-east-1 (northern Virginia). The region is chosen when the workspace is created and cannot be changed by our staff. Production runs across three availability zones, and the database is replicated between them.',
|
|
676
|
+
},
|
|
677
|
+
{ h2: 'Access by our staff' },
|
|
678
|
+
{
|
|
679
|
+
p: 'Nobody at the company can read your workspace by default. A support engineer can be granted access to one workspace for 24 hours, only after an administrator of that workspace approves it, and every action taken during that time is written to your audit log.',
|
|
680
|
+
},
|
|
681
|
+
{ h2: 'Keeping the record' },
|
|
682
|
+
{
|
|
683
|
+
p: 'The audit log is append-only. Events are hashed in a chain, the chain is verified every night and on demand, and exports are signed so a file can be checked against the workspace. Deleted requests are kept in the log as deletions.',
|
|
684
|
+
},
|
|
685
|
+
{ h2: 'Reporting a vulnerability' },
|
|
686
|
+
{
|
|
687
|
+
p: `Write to ${mail('security')}. We acknowledge reports within one business day, keep you informed while we fix the issue, and credit you when it is resolved if you wish.`,
|
|
688
|
+
},
|
|
689
|
+
],
|
|
690
|
+
logCaption: 'The audit log of one purchase request, with the chain verified.',
|
|
691
|
+
racksCaption: 'Network racks in a data centre room. Our hosting provider runs the buildings; we run the software on top.',
|
|
692
|
+
subprocessorsTitle: 'Subprocessors',
|
|
693
|
+
subprocessors: [
|
|
694
|
+
[
|
|
695
|
+
'Amazon Web Services',
|
|
696
|
+
'Hosting, storage and backups, in the region of the workspace. Data processing agreement in place.',
|
|
697
|
+
],
|
|
698
|
+
[
|
|
699
|
+
'Cloudflare',
|
|
700
|
+
'Network protection and delivery of the web application. Request metadata only, never the contents of a workspace.',
|
|
701
|
+
],
|
|
702
|
+
[
|
|
703
|
+
'Postmark',
|
|
704
|
+
'Transactional email: approval requests, reminders and receipts. The subject and summary of a request, never its attachments.',
|
|
705
|
+
],
|
|
706
|
+
[
|
|
707
|
+
'Slack and Microsoft Teams',
|
|
708
|
+
'Only when a customer connects them. Approval messages sent to the channels the customer chooses.',
|
|
709
|
+
],
|
|
710
|
+
],
|
|
711
|
+
ctaTitle: 'Security questionnaires',
|
|
712
|
+
ctaText: 'Our security pack includes the SOC 2 report, the latest penetration test summary and answers to the usual questionnaires.',
|
|
713
|
+
},
|
|
714
|
+
changelog: {
|
|
715
|
+
heroEyebrow: 'Changelog',
|
|
716
|
+
heroTitle: `What is new in ${name}`,
|
|
717
|
+
heroSubtitle: 'We ship every week. These are the changes that alter how you work, newest first.',
|
|
718
|
+
},
|
|
719
|
+
about: {
|
|
720
|
+
heroEyebrow: 'Company',
|
|
721
|
+
heroTitle: 'Built by people who have closed the books',
|
|
722
|
+
heroSubtitle: `${name} was started in London in 2019 by two former financial controllers who had spent too many month-ends chasing approvals by email.`,
|
|
723
|
+
story: [
|
|
724
|
+
{
|
|
725
|
+
p: `Ruth Okonjo and Tomasz Wierzbicki met at a logistics company where approving a purchase meant an email, a spreadsheet and a signature on a printed form. Each month-end, the finance team spent two days rebuilding who had approved what. They wrote the first version of ${name} for that team, and it ran there for a year before anyone else used it.`,
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
p: 'Today 58 people work on the product, in London and Toronto. Half of them write software. Most of the rest have worked in finance, procurement or audit, and every solutions engineer has run a month-end close.',
|
|
729
|
+
},
|
|
730
|
+
{ h2: 'How we work' },
|
|
731
|
+
{
|
|
732
|
+
ul: [
|
|
733
|
+
'One product, sold to finance and operations teams, and nothing else',
|
|
734
|
+
'Pricing on the website, the same for every customer of the same size',
|
|
735
|
+
'Support answered by the people who build the product',
|
|
736
|
+
'A changelog that lists every change that alters how you work',
|
|
737
|
+
],
|
|
738
|
+
},
|
|
739
|
+
{ h2: 'Funding' },
|
|
740
|
+
{
|
|
741
|
+
p: 'We raised a seed round in 2020 and a Series A in 2023, and have been profitable since the last quarter of 2025.',
|
|
742
|
+
},
|
|
743
|
+
],
|
|
744
|
+
numbersTitle: 'The company today',
|
|
745
|
+
numbers: [
|
|
746
|
+
{ value: '1,400', label: 'customers' },
|
|
747
|
+
{ value: '31', label: 'countries' },
|
|
748
|
+
{ value: '58', label: 'people' },
|
|
749
|
+
{ value: '2', label: 'offices' },
|
|
750
|
+
],
|
|
751
|
+
places: [
|
|
752
|
+
{ h2: 'Where we work' },
|
|
753
|
+
{
|
|
754
|
+
p: 'London. The team that answers support and builds the audit log works a few stops from the City.',
|
|
755
|
+
},
|
|
756
|
+
{ p: 'Toronto. Our second office, opened in 2023, covers North American hours.' },
|
|
757
|
+
],
|
|
758
|
+
customersTitle: 'Some of our customers',
|
|
759
|
+
ctaTitle: 'Work with us',
|
|
760
|
+
ctaText: 'We hire engineers, solutions engineers and support specialists in London and Toronto.',
|
|
761
|
+
ctaAction: 'Write to us',
|
|
762
|
+
},
|
|
763
|
+
demo: {
|
|
764
|
+
heroEyebrow: 'Book a demo',
|
|
765
|
+
heroTitle: 'Talk to someone who has run a month-end close',
|
|
766
|
+
heroSubtitle: 'A 30-minute call with a solutions engineer, then a trial workspace set up with your own approval policy.',
|
|
767
|
+
emailAction: `Email ${mail('demo')}`,
|
|
768
|
+
emailSubject: 'Demo request',
|
|
769
|
+
contactTitle: 'Ways to reach us',
|
|
770
|
+
emailText: `${mail('demo')}, answered within one business day.`,
|
|
771
|
+
phoneText: 'Monday to Friday, 08:00 to 18:00 UK time.',
|
|
772
|
+
securityTitle: 'Security review',
|
|
773
|
+
securityText: 'Start your security review before the call.',
|
|
774
|
+
how: [
|
|
775
|
+
{ h2: 'Before the call' },
|
|
776
|
+
{
|
|
777
|
+
p: 'Write to us with the number of people who approve spend, the ERP you use, and your current approval matrix if you can share it. A spreadsheet is fine. We reply within one business day to agree a time.',
|
|
778
|
+
},
|
|
779
|
+
{ h2: 'On the call' },
|
|
780
|
+
{
|
|
781
|
+
p: 'A solutions engineer shows the product with your own policy already built, answers questions from finance, procurement and IT, and goes through what a rollout would take for your team.',
|
|
782
|
+
},
|
|
783
|
+
{ h2: 'The trial' },
|
|
784
|
+
{
|
|
785
|
+
p: 'After the call, you get a workspace for 14 days with your policy and a copy of last month’s requests from a CSV export. Your team can submit and approve requests in it. The trial does not turn into a subscription on its own, and we do not ask for a card.',
|
|
786
|
+
},
|
|
787
|
+
],
|
|
788
|
+
},
|
|
789
|
+
legal: [
|
|
790
|
+
{ h2: 'Company details' },
|
|
791
|
+
{
|
|
792
|
+
p: `${name} is operated by ${name} Ltd, a company registered in England and Wales, whose registered office is at 2nd floor, 41 Tabernacle Street, London EC2A 4AA, United Kingdom.`,
|
|
793
|
+
},
|
|
794
|
+
{ h2: 'Terms of service' },
|
|
795
|
+
{
|
|
796
|
+
p: 'Use of the product is governed by the subscription agreement signed with each customer, or for Team plans by the terms accepted when the workspace is created. Where the two differ, the signed agreement applies.',
|
|
797
|
+
},
|
|
798
|
+
{ h2: 'Data processing' },
|
|
799
|
+
{
|
|
800
|
+
p: 'We process personal data in customer workspaces as a processor, under a data processing agreement that includes the standard contractual clauses. The list of subprocessors is on the security page, and customers are told 30 days before a new one is added.',
|
|
801
|
+
},
|
|
802
|
+
{ h2: 'Contact' },
|
|
803
|
+
{ p: `For legal questions, write to ${mail('legal')}.` },
|
|
804
|
+
],
|
|
805
|
+
privacy: [
|
|
806
|
+
{
|
|
807
|
+
p: 'This notice covers the personal data we collect through this website and when you contact us. Data inside a customer workspace is covered by that customer’s agreement with us.',
|
|
808
|
+
},
|
|
809
|
+
{ h2: 'What we collect' },
|
|
810
|
+
{
|
|
811
|
+
ul: [
|
|
812
|
+
'The name, work email and company you give us when you ask for a demo or write to us',
|
|
813
|
+
'Records of our emails and calls with you',
|
|
814
|
+
'Anonymous page views, counted without cookies and without tracking you across sites',
|
|
815
|
+
],
|
|
816
|
+
},
|
|
817
|
+
{ h2: 'How long we keep it' },
|
|
818
|
+
{
|
|
819
|
+
p: 'Enquiries that do not lead to a contract are deleted after 24 months. Customer contacts are kept for the length of the contract and six years after it, as UK law requires for business records.',
|
|
820
|
+
},
|
|
821
|
+
{ h2: 'Your rights' },
|
|
822
|
+
{
|
|
823
|
+
p: `You can ask to see, correct or delete the data we hold about you by writing to ${mail('privacy')}. You can also complain to the Information Commissioner’s Office.`,
|
|
824
|
+
},
|
|
825
|
+
],
|
|
826
|
+
credits: {
|
|
827
|
+
intro: [
|
|
828
|
+
{
|
|
829
|
+
p: 'The photographs on this site come from Wikimedia Commons and are used under the licences below. The interface screenshots and the customer wordmarks were drawn for this site, and the people and companies they show are invented.',
|
|
830
|
+
},
|
|
831
|
+
],
|
|
832
|
+
sourceWord: 'source',
|
|
833
|
+
},
|
|
834
|
+
}),
|
|
835
|
+
menus: {
|
|
836
|
+
header: [
|
|
837
|
+
{ label: 'Product', page: 'product' },
|
|
838
|
+
{ label: 'Security', page: 'security' },
|
|
839
|
+
{ label: 'Pricing', page: 'pricing' },
|
|
840
|
+
{ label: 'Changelog', page: 'changelog' },
|
|
841
|
+
{ label: 'Company', page: 'about' },
|
|
842
|
+
],
|
|
843
|
+
action: 'Book a demo',
|
|
844
|
+
},
|
|
845
|
+
footer: [
|
|
846
|
+
{
|
|
847
|
+
heading: 'Product',
|
|
848
|
+
links: [
|
|
849
|
+
{ label: 'Overview', page: 'product' },
|
|
850
|
+
{ label: 'Approval routing', feature: 'approval-routing' },
|
|
851
|
+
{ label: 'Audit log', feature: 'audit-log' },
|
|
852
|
+
{ label: 'Pricing', page: 'pricing' },
|
|
853
|
+
],
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
heading: 'Company',
|
|
857
|
+
links: [
|
|
858
|
+
{ label: 'About', page: 'about' },
|
|
859
|
+
{ label: 'Security', page: 'security' },
|
|
860
|
+
{ label: 'Book a demo', page: 'demo' },
|
|
861
|
+
],
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
heading: 'Resources',
|
|
865
|
+
links: [
|
|
866
|
+
{ label: 'Changelog', page: 'changelog' },
|
|
867
|
+
{ label: 'API and webhooks', feature: 'api-and-webhooks' },
|
|
868
|
+
{ label: 'ERP sync', feature: 'erp-sync' },
|
|
869
|
+
],
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
heading: 'Legal',
|
|
873
|
+
links: [
|
|
874
|
+
{ label: 'Terms and company', page: 'legal' },
|
|
875
|
+
{ label: 'Privacy', page: 'privacy' },
|
|
876
|
+
{ label: 'Photo credits', page: 'credits' },
|
|
877
|
+
],
|
|
878
|
+
},
|
|
879
|
+
],
|
|
880
|
+
settings: {
|
|
881
|
+
tagline: 'Spend approvals and audit trail for finance and operations teams.',
|
|
882
|
+
footerNote: '2nd floor, 41 Tabernacle Street\nLondon EC2A 4AA\nUnited Kingdom\n\nSupport on business days, 08:00 to 18:00 UK time.',
|
|
883
|
+
},
|
|
884
|
+
widgets: {
|
|
885
|
+
searchPlaceholder: 'Audit, ERP',
|
|
886
|
+
archivesTitle: 'Changelog by month',
|
|
887
|
+
recentTitle: 'Recently shipped',
|
|
888
|
+
resourcesTitle: 'Resources',
|
|
889
|
+
resources: [
|
|
890
|
+
{ label: 'Product overview', page: 'product' },
|
|
891
|
+
{ label: 'API and webhooks', feature: 'api-and-webhooks' },
|
|
892
|
+
{ label: 'ERP sync', feature: 'erp-sync' },
|
|
893
|
+
{ label: 'Security and compliance', page: 'security' },
|
|
894
|
+
{ label: 'Pricing', page: 'pricing' },
|
|
895
|
+
],
|
|
896
|
+
ctaHeading: 'See it on your own approval policy',
|
|
897
|
+
ctaBody: 'A 30-minute call with a solutions engineer, then a trial workspace set up with your policy.',
|
|
898
|
+
ctaLabel: 'Book a demo',
|
|
899
|
+
},
|
|
900
|
+
};
|
|
901
|
+
//# sourceMappingURL=saas-copy-en.js.map
|