@tokenoftrust/storefront-runner 0.1.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/LICENSE +58 -0
- package/README.md +40 -0
- package/apps/storefront/.dev.vars.example +41 -0
- package/apps/storefront/.env.example +24 -0
- package/apps/storefront/astro.config.mjs +245 -0
- package/apps/storefront/env.d.ts +155 -0
- package/apps/storefront/lib/ensure-preview-reconcile-secret.sh +31 -0
- package/apps/storefront/lib/resolve-cf-token.sh +48 -0
- package/apps/storefront/lib/resolve-tot-credentials.sh +69 -0
- package/apps/storefront/migrations/0000_baseline.sql +54 -0
- package/apps/storefront/migrations/0001_products_fts.sql +9 -0
- package/apps/storefront/migrations/README.md +54 -0
- package/apps/storefront/migrations/meta/0000_snapshot.json +347 -0
- package/apps/storefront/migrations/meta/0001_snapshot.json +347 -0
- package/apps/storefront/migrations/meta/_journal.json +20 -0
- package/apps/storefront/package.json +41 -0
- package/apps/storefront/public/brand/northwind-logo-dark.svg +4 -0
- package/apps/storefront/public/brand/northwind-logo-light.svg +4 -0
- package/apps/storefront/public/brand/northwind-og.svg +13 -0
- package/apps/storefront/public/favicon.svg +5 -0
- package/apps/storefront/public/js/dashboard-team.js +147 -0
- package/apps/storefront/public/js/dashboard-vendor-search.js +115 -0
- package/apps/storefront/src/components/Badge.astro +34 -0
- package/apps/storefront/src/components/Breadcrumbs.astro +45 -0
- package/apps/storefront/src/components/CollectionCard.astro +56 -0
- package/apps/storefront/src/components/EmptyState.astro +35 -0
- package/apps/storefront/src/components/Img.astro +68 -0
- package/apps/storefront/src/components/ProductCard.astro +228 -0
- package/apps/storefront/src/components/Section.astro +39 -0
- package/apps/storefront/src/components/Seo.astro +70 -0
- package/apps/storefront/src/components/WidgetFrame.astro +34 -0
- package/apps/storefront/src/components/auth/AuthBadge.astro +44 -0
- package/apps/storefront/src/components/chrome/AnnouncementBar.astro +108 -0
- package/apps/storefront/src/components/chrome/MegaMenu.astro +26 -0
- package/apps/storefront/src/components/chrome/NavDropdown.astro +116 -0
- package/apps/storefront/src/components/chrome/SiteFooter.astro +181 -0
- package/apps/storefront/src/components/chrome/SiteHeader.astro +181 -0
- package/apps/storefront/src/components/chrome/UtilityNav.astro +79 -0
- package/apps/storefront/src/components/commerce/FoxyLoader.astro +23 -0
- package/apps/storefront/src/components/commerce/PriceDisplay.astro +91 -0
- package/apps/storefront/src/components/commerce/ProductCarousel.astro +197 -0
- package/apps/storefront/src/components/commerce/ProductGrid.astro +75 -0
- package/apps/storefront/src/components/commerce/RatingStars.astro +58 -0
- package/apps/storefront/src/components/compliance/NicotineWarning.astro +33 -0
- package/apps/storefront/src/components/home/Hero.astro +164 -0
- package/apps/storefront/src/components/islands/AgeGate.tsx +105 -0
- package/apps/storefront/src/components/islands/ImageGallery.tsx +237 -0
- package/apps/storefront/src/components/islands/IsolatedAgeGate.tsx +73 -0
- package/apps/storefront/src/components/islands/MobileNav.tsx +239 -0
- package/apps/storefront/src/components/islands/QuickView.tsx +138 -0
- package/apps/storefront/src/components/islands/RecentlyViewed.tsx +122 -0
- package/apps/storefront/src/components/islands/SavedList.tsx +99 -0
- package/apps/storefront/src/components/islands/SearchTypeahead.tsx +248 -0
- package/apps/storefront/src/components/islands/VariantSelector.tsx +378 -0
- package/apps/storefront/src/components/marketing/CardGrid.astro +72 -0
- package/apps/storefront/src/components/marketing/CodeSample.astro +20 -0
- package/apps/storefront/src/components/marketing/CtaBand.astro +24 -0
- package/apps/storefront/src/components/marketing/Faq.astro +37 -0
- package/apps/storefront/src/components/marketing/Integrations.astro +63 -0
- package/apps/storefront/src/components/marketing/MarketingBlocks.astro +53 -0
- package/apps/storefront/src/components/marketing/MarketingCtas.astro +48 -0
- package/apps/storefront/src/components/marketing/MarketingHero.astro +72 -0
- package/apps/storefront/src/components/marketing/ProofStrip.astro +37 -0
- package/apps/storefront/src/components/marketing/SplitCompare.astro +53 -0
- package/apps/storefront/src/components/marketing/Steps.astro +36 -0
- package/apps/storefront/src/components/marketing/Testimonials.astro +38 -0
- package/apps/storefront/src/components/marketing/TrustBar.astro +22 -0
- package/apps/storefront/src/components/nav/Footer.astro +148 -0
- package/apps/storefront/src/components/nav/Header.astro +190 -0
- package/apps/storefront/src/components/plp/ActiveFilters.astro +79 -0
- package/apps/storefront/src/components/plp/FacetSidebar.astro +146 -0
- package/apps/storefront/src/components/plp/Pagination.astro +99 -0
- package/apps/storefront/src/components/plp/SortSelect.astro +64 -0
- package/apps/storefront/src/config/devTenants.ts +16 -0
- package/apps/storefront/src/config/kvTenantResolver.ts +87 -0
- package/apps/storefront/src/config/resolver.ts +46 -0
- package/apps/storefront/src/config/tenants.ts +193 -0
- package/apps/storefront/src/layouts/Layout.astro +303 -0
- package/apps/storefront/src/lib/analytics/index.ts +47 -0
- package/apps/storefront/src/lib/auth/brokerAssertion.ts +136 -0
- package/apps/storefront/src/lib/auth/devAuth.ts +90 -0
- package/apps/storefront/src/lib/auth/gatePage.ts +81 -0
- package/apps/storefront/src/lib/auth/identityToken.ts +341 -0
- package/apps/storefront/src/lib/auth/loginGate.ts +107 -0
- package/apps/storefront/src/lib/auth/route.ts +146 -0
- package/apps/storefront/src/lib/auth/session.ts +203 -0
- package/apps/storefront/src/lib/auth/totAccessClient.ts +503 -0
- package/apps/storefront/src/lib/basePath.ts +41 -0
- package/apps/storefront/src/lib/cfImage.ts +55 -0
- package/apps/storefront/src/lib/chrome/model.ts +65 -0
- package/apps/storefront/src/lib/colors.ts +97 -0
- package/apps/storefront/src/lib/content-edit/client.ts +230 -0
- package/apps/storefront/src/lib/content-edit/index.ts +14 -0
- package/apps/storefront/src/lib/content-edit/route.ts +25 -0
- package/apps/storefront/src/lib/content-edit/types.ts +19 -0
- package/apps/storefront/src/lib/cspStaticHashes.ts +24 -0
- package/apps/storefront/src/lib/d1/catalog.ts +289 -0
- package/apps/storefront/src/lib/dashboard/staffAdmission.ts +43 -0
- package/apps/storefront/src/lib/dashboard/staffVendorAccess.ts +449 -0
- package/apps/storefront/src/lib/dashboard/tenantSelection.ts +136 -0
- package/apps/storefront/src/lib/dashboard/vendorQuery.ts +61 -0
- package/apps/storefront/src/lib/demoGate.ts +113 -0
- package/apps/storefront/src/lib/dev/ai-widget-client.js +127 -0
- package/apps/storefront/src/lib/dev/cliSignInCode.ts +132 -0
- package/apps/storefront/src/lib/diag/redact.ts +20 -0
- package/apps/storefront/src/lib/edgeCache.ts +128 -0
- package/apps/storefront/src/lib/email/magicLinkInviteEmail.ts +62 -0
- package/apps/storefront/src/lib/env.ts +60 -0
- package/apps/storefront/src/lib/fixtures/sampleProducts.ts +130 -0
- package/apps/storefront/src/lib/format.ts +29 -0
- package/apps/storefront/src/lib/foxyCommerce.ts +49 -0
- package/apps/storefront/src/lib/imageAttrs.ts +55 -0
- package/apps/storefront/src/lib/jsonld.ts +136 -0
- package/apps/storefront/src/lib/maintenance.ts +71 -0
- package/apps/storefront/src/lib/memoryKv.ts +32 -0
- package/apps/storefront/src/lib/messaging/messagesClient.ts +143 -0
- package/apps/storefront/src/lib/placeholder.ts +99 -0
- package/apps/storefront/src/lib/previewReload.ts +125 -0
- package/apps/storefront/src/lib/rawMarketingHtml.ts +133 -0
- package/apps/storefront/src/lib/search/index.ts +74 -0
- package/apps/storefront/src/lib/sections.ts +129 -0
- package/apps/storefront/src/lib/securityHeaders.ts +31 -0
- package/apps/storefront/src/lib/storyblok/content-model.ts +289 -0
- package/apps/storefront/src/lib/storyblok/provider.ts +524 -0
- package/apps/storefront/src/lib/tenantRouting.ts +91 -0
- package/apps/storefront/src/lib/tot/ToTClient.ts +177 -0
- package/apps/storefront/src/lib/tot/d1Client.ts +62 -0
- package/apps/storefront/src/lib/tot/query.ts +187 -0
- package/apps/storefront/src/lib/tot/totClientInterface.ts +30 -0
- package/apps/storefront/src/lib/url.ts +119 -0
- package/apps/storefront/src/lib/wishlist.ts +63 -0
- package/apps/storefront/src/middleware/index.ts +413 -0
- package/apps/storefront/src/pages/404.astro +61 -0
- package/apps/storefront/src/pages/[...slug].astro +90 -0
- package/apps/storefront/src/pages/api/auth/logout.ts +21 -0
- package/apps/storefront/src/pages/api/auth/magic-exchange.ts +107 -0
- package/apps/storefront/src/pages/api/auth/send.ts +85 -0
- package/apps/storefront/src/pages/api/auth/verify.ts +135 -0
- package/apps/storefront/src/pages/api/cache-purge.ts +44 -0
- package/apps/storefront/src/pages/api/content-edit/ai-edit.ts +64 -0
- package/apps/storefront/src/pages/api/csp-report.ts +25 -0
- package/apps/storefront/src/pages/api/dashboard/enter-vendor.ts +124 -0
- package/apps/storefront/src/pages/api/dashboard/vendor-search.ts +120 -0
- package/apps/storefront/src/pages/api/dev/cli-signin-code.ts +44 -0
- package/apps/storefront/src/pages/api/newsletter.ts +104 -0
- package/apps/storefront/src/pages/api/request-access.ts +172 -0
- package/apps/storefront/src/pages/auth/login.astro +149 -0
- package/apps/storefront/src/pages/auth/magic.astro +105 -0
- package/apps/storefront/src/pages/capabilities.astro +292 -0
- package/apps/storefront/src/pages/collections/[handle].astro +154 -0
- package/apps/storefront/src/pages/collections/index.astro +59 -0
- package/apps/storefront/src/pages/dashboard/[appDomain]/index.astro +100 -0
- package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +154 -0
- package/apps/storefront/src/pages/dashboard/index.astro +160 -0
- package/apps/storefront/src/pages/dev.astro +653 -0
- package/apps/storefront/src/pages/index.astro +290 -0
- package/apps/storefront/src/pages/llms.txt.ts +92 -0
- package/apps/storefront/src/pages/products/[handle].astro +443 -0
- package/apps/storefront/src/pages/robots.txt.ts +24 -0
- package/apps/storefront/src/pages/saved.astro +35 -0
- package/apps/storefront/src/pages/search.astro +150 -0
- package/apps/storefront/src/pages/sitemap.xml.ts +78 -0
- package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +646 -0
- package/apps/storefront/src/pages/style-guide/[tenant]/index.astro +85 -0
- package/apps/storefront/src/pages/style-guide/index.astro +94 -0
- package/apps/storefront/src/pages/tenants/[id]/[...path].ts +57 -0
- package/apps/storefront/src/styles/global.css +277 -0
- package/apps/storefront/src/themes/reference.ts +61 -0
- package/apps/storefront/src/themes/schema.ts +111 -0
- package/apps/storefront/src/themes/tenants/index.ts +51 -0
- package/apps/storefront/tsconfig.json +16 -0
- package/apps/storefront/vitest.config.ts +22 -0
- package/apps/storefront/wrangler.toml +175 -0
- package/package.json +23 -0
- package/packages/public-runtime/LICENSE +58 -0
- package/packages/public-runtime/package.json +22 -0
- package/packages/public-runtime/src/binary-path.ts +68 -0
- package/packages/public-runtime/src/capabilities.ts +89 -0
- package/packages/public-runtime/src/catalog-api.ts +81 -0
- package/packages/public-runtime/src/catalog-d1.ts +192 -0
- package/packages/public-runtime/src/csp.ts +109 -0
- package/packages/public-runtime/src/customization-preview.ts +197 -0
- package/packages/public-runtime/src/customization-reconcile.ts +63 -0
- package/packages/public-runtime/src/customization-runtime.ts +157 -0
- package/packages/public-runtime/src/customization-scripts.ts +64 -0
- package/packages/public-runtime/src/customization-versioning.ts +95 -0
- package/packages/public-runtime/src/foxy.ts +184 -0
- package/packages/public-runtime/src/index.ts +30 -0
- package/packages/public-runtime/src/product.ts +159 -0
- package/packages/public-runtime/src/search.ts +45 -0
- package/packages/public-runtime/src/tenant-assets.ts +444 -0
- package/packages/public-runtime/src/tenant.ts +243 -0
- package/packages/public-runtime/tsconfig.json +8 -0
- package/packages/public-runtime/vitest.config.ts +8 -0
- package/pnpm-workspace.yaml +7 -0
- package/scripts/build/copy-tenant-assets.mjs +69 -0
- package/scripts/tot-dev.mjs +439 -0
- package/tenants/bigdvapor/content/blog.json +52 -0
- package/tenants/bigdvapor/content/chrome.html +149 -0
- package/tenants/bigdvapor/content/chrome.json +47 -0
- package/tenants/bigdvapor/content/home.html +463 -0
- package/tenants/bigdvapor/content/home.json +73 -0
- package/tenants/bigdvapor/content/pages/about.json +5 -0
- package/tenants/bigdvapor/content/pages/privacy.json +6 -0
- package/tenants/bigdvapor/content/pages/shipping-returns.json +6 -0
- package/tenants/bigdvapor/content/pages-html/blogs/news.html +86 -0
- package/tenants/bigdvapor/content/pages-html/pages/about-us.html +106 -0
- package/tenants/bigdvapor/content/pages-html/pages/contact-us.html +61 -0
- package/tenants/bigdvapor/content/pages-html/pages/privacy-policy.html +72 -0
- package/tenants/bigdvapor/content/pages-html/pages/shipping-returns.html +172 -0
- package/tenants/bigdvapor/content/themes/bigd-navy.json +109 -0
- package/tenants/bigdvapor/public/img/brands/adjust-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/again-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/al-fakher-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/arro-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/cookies-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/core-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/cyclone-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/dinner-lady-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/extre-bar-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/fifty-bar-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/firerose-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/flavor-beast-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/foger-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/kk-energy-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/kumi-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/lost-vape-dispoable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/melo-labs-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/mixo-vape-disposable.webp +0 -0
- package/tenants/bigdvapor/public/img/brands/one-tank-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/oxbar-vape-disposable.webp +0 -0
- package/tenants/bigdvapor/public/img/brands/pillow-talk-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/pod-king-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/raz-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/hero-texas.jpg +0 -0
- package/tenants/bigdvapor/public/img/og.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/AdobeStock_202106312_web.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/CREW_web.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/Hero-Image.jpg +0 -0
- package/tenants/bigdvapor/public/img/tiles/adjust.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/again.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/al-fakher.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/arro.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/cookies.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/core.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/cyclone.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/disposables.svg +23 -0
- package/tenants/bigdvapor/public/logo-wordmark.png +0 -0
- package/tenants/bigdvapor/public/pages/home.css +118 -0
- package/tenants/bigdvapor/public/pages/mkt.css +185 -0
- package/tenants/bigdvapor/public/pages/page.css +148 -0
- package/tenants/bigdvapor/public/themes/bigd-navy.css +73 -0
- package/tenants/bigdvapor/theme.json +12 -0
- package/tenants/giantvapes/content/chrome.html +152 -0
- package/tenants/giantvapes/content/chrome.json +94 -0
- package/tenants/giantvapes/content/home.html +194 -0
- package/tenants/giantvapes/content/home.json +50 -0
- package/tenants/giantvapes/content/pages/about.json +10 -0
- package/tenants/giantvapes/content/pages/privacy.json +6 -0
- package/tenants/giantvapes/content/pages/shipping-returns.json +6 -0
- package/tenants/giantvapes/content/pages-html/blogs/news.html +68 -0
- package/tenants/giantvapes/content/pages-html/pages/about-us.html +95 -0
- package/tenants/giantvapes/content/pages-html/pages/contact-us.html +68 -0
- package/tenants/giantvapes/content/pages-html/pages/privacy-policy.html +65 -0
- package/tenants/giantvapes/content/pages-html/pages/shipping-returns.html +77 -0
- package/tenants/giantvapes/content/themes/giant-navy.json +73 -0
- package/tenants/giantvapes/public/img/hero-suicide-bunny.jpg +0 -0
- package/tenants/giantvapes/public/img/hero.webp +0 -0
- package/tenants/giantvapes/public/img/og.jpg +0 -0
- package/tenants/giantvapes/public/logo-wordmark.png +0 -0
- package/tenants/giantvapes/public/pages/home.css +120 -0
- package/tenants/giantvapes/public/pages/mkt.css +185 -0
- package/tenants/giantvapes/public/pages/page.css +155 -0
- package/tenants/giantvapes/public/themes/giant-navy.css +76 -0
- package/tenants/giantvapes/theme.json +39 -0
- package/tenants/home/content/chrome.json +11 -0
- package/tenants/home/content/home.html +304 -0
- package/tenants/home/content/home.json +13 -0
- package/tenants/home/public/js/storefront.js +210 -0
- package/tenants/home/public/logo-wordmark.png +0 -0
- package/tenants/home/public/pages/storefront.css +212 -0
- package/tenants/home/theme.json +6 -0
- package/tenants/tokenoftrust/.tot/config.json +9 -0
- package/tenants/tokenoftrust/content/chrome.json +55 -0
- package/tenants/tokenoftrust/content/home.html +723 -0
- package/tenants/tokenoftrust/content/home.json +233 -0
- package/tenants/tokenoftrust/content/pages-html/careers.html +231 -0
- package/tenants/tokenoftrust/content/pages-html/company.html +275 -0
- package/tenants/tokenoftrust/content/pages-html/contact/contact-sales.html +188 -0
- package/tenants/tokenoftrust/content/pages-html/contact/startup-apply.html +206 -0
- package/tenants/tokenoftrust/content/pages-html/contact.html +178 -0
- package/tenants/tokenoftrust/content/pages-html/industries/adult-content-age-verification.html +286 -0
- package/tenants/tokenoftrust/content/pages-html/industries/cannabis.html +277 -0
- package/tenants/tokenoftrust/content/pages-html/pact-act-pricing.html +289 -0
- package/tenants/tokenoftrust/content/pages-html/pricing.html +483 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-estimation.html +278 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-gate.html +279 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-verification.html +265 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance.html +173 -0
- package/tenants/tokenoftrust/content/pages-html/product/compliance/aml.html +214 -0
- package/tenants/tokenoftrust/content/pages-html/product/compliance/pact-act.html +226 -0
- package/tenants/tokenoftrust/content/pages-html/product/fraud-prevention.html +254 -0
- package/tenants/tokenoftrust/content/pages-html/product/social-profile-verification.html +212 -0
- package/tenants/tokenoftrust/content/pages-html/product/tax/excise-tax.html +213 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/aml.html +259 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/biometric-selfie.html +305 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/coverage.html +254 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/document-verification.html +306 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/electronic-identity-verification.html +304 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/government-id-verification.html +308 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification.html +183 -0
- package/tenants/tokenoftrust/content/pages-html/product.html +228 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/bigcommerce-integration.html +220 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/shopify-integration.html +221 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/wordpress.html +220 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations.html +172 -0
- package/tenants/tokenoftrust/content/pages-html/resources/refer-a-friend-program.html +317 -0
- package/tenants/tokenoftrust/content/pages-html/resources.html +177 -0
- package/tenants/tokenoftrust/content/pages-html/reviews.html +273 -0
- package/tenants/tokenoftrust/content/pages-html/solutions.html +292 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-alcohol.html +289 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-cigars-and-tobacco.html +286 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-firearm-accessories.html +267 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-peptides.html +273 -0
- package/tenants/tokenoftrust/content/themes/tot-navy.json +88 -0
- package/tenants/tokenoftrust/public/favicon.png +0 -0
- package/tenants/tokenoftrust/public/logo-icon.png +0 -0
- package/tenants/tokenoftrust/public/logo-wordmark.png +0 -0
- package/tenants/tokenoftrust/public/pages/company.css +108 -0
- package/tenants/tokenoftrust/public/pages/home.css +457 -0
- package/tenants/tokenoftrust/public/pages/mkt.css +482 -0
- package/tenants/tokenoftrust/public/pages/pricing.css +214 -0
- package/tenants/tokenoftrust/public/pages/solutions.css +66 -0
- package/tenants/tokenoftrust/public/themes/tot-navy-1.0.0.css +136 -0
- package/tenants/tokenoftrust/public/themes/tot-navy.css +358 -0
- package/tenants/tokenoftrust/theme.json +31 -0
- package/tsconfig.base.json +20 -0
|
@@ -0,0 +1,723 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<link rel="icon" type="image/png" href="/tenants/tokenoftrust/favicon.png">
|
|
7
|
+
<title>Token of Trust — Customer Verification & Compliance for Regulated Ecommerce</title>
|
|
8
|
+
<meta name="description" content="Verify real customers, block risky transactions, and keep audit-ready evidence — without adding friction to checkout. Built for regulated ecommerce. Start free.">
|
|
9
|
+
<link rel="canonical" href="https://tokenoftrust.com/">
|
|
10
|
+
<meta name="robots" content="index,follow,max-image-preview:large">
|
|
11
|
+
<meta property="og:type" content="website">
|
|
12
|
+
<meta property="og:site_name" content="Token of Trust">
|
|
13
|
+
<meta property="og:title" content="Token of Trust — Customer Verification & Compliance for Regulated Ecommerce">
|
|
14
|
+
<meta property="og:description" content="Verify real customers, block risky transactions, and keep audit-ready evidence without slowing checkout. Built for alcohol, tobacco/vape, age-restricted goods, and high-risk ecommerce.">
|
|
15
|
+
<meta property="og:url" content="https://tokenoftrust.com/">
|
|
16
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
17
|
+
<meta name="twitter:title" content="Token of Trust — Verification & Compliance for Regulated Ecommerce">
|
|
18
|
+
<meta name="twitter:description" content="One checkout-ready platform replacing manual reviews, point solutions, and compliance spreadsheets.">
|
|
19
|
+
<script type="application/ld+json">
|
|
20
|
+
{
|
|
21
|
+
"@context": "https://schema.org",
|
|
22
|
+
"@graph": [
|
|
23
|
+
{
|
|
24
|
+
"@type": "Organization",
|
|
25
|
+
"@id": "https://tokenoftrust.com/#org",
|
|
26
|
+
"name": "Token of Trust",
|
|
27
|
+
"url": "https://tokenoftrust.com/",
|
|
28
|
+
"logo": "/tenants/tokenoftrust/logo-icon.png",
|
|
29
|
+
"slogan": "Real Customers. Less Fraud. More Trust.",
|
|
30
|
+
"description": "Token of Trust is a customer verification and compliance platform for regulated ecommerce. It verifies identity and age, prevents fraud, supports AML, PACT Act, and tax compliance workflows, and keeps audit-ready evidence — across 200+ countries."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"@type": "WebSite",
|
|
34
|
+
"@id": "https://tokenoftrust.com/#website",
|
|
35
|
+
"url": "https://tokenoftrust.com/",
|
|
36
|
+
"name": "Token of Trust",
|
|
37
|
+
"publisher": {
|
|
38
|
+
"@id": "https://tokenoftrust.com/#org"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"@type": "SoftwareApplication",
|
|
43
|
+
"name": "Token of Trust",
|
|
44
|
+
"applicationCategory": "BusinessApplication",
|
|
45
|
+
"operatingSystem": "Web",
|
|
46
|
+
"url": "https://tokenoftrust.com/",
|
|
47
|
+
"description": "Customer verification and compliance platform for ecommerce businesses selling regulated products: identity verification, age assurance, fraud prevention, AML and PACT Act workflows, tax solutions, and audit-ready evidence logs. Integrates with Shopify, WooCommerce, BigCommerce, Magento, WordPress, and NetSuite, plus a REST API.",
|
|
48
|
+
"offers": {
|
|
49
|
+
"@type": "Offer",
|
|
50
|
+
"price": "0",
|
|
51
|
+
"priceCurrency": "USD",
|
|
52
|
+
"description": "Free trial, no credit card required"
|
|
53
|
+
},
|
|
54
|
+
"aggregateRating": {
|
|
55
|
+
"@type": "AggregateRating",
|
|
56
|
+
"ratingValue": "4.9",
|
|
57
|
+
"bestRating": "5",
|
|
58
|
+
"ratingCount": "100",
|
|
59
|
+
"reviewCount": "100"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"@type": "FAQPage",
|
|
64
|
+
"mainEntity": [
|
|
65
|
+
{
|
|
66
|
+
"@type": "Question",
|
|
67
|
+
"name": "How does Token of Trust reduce checkout friction?",
|
|
68
|
+
"acceptedAnswer": {
|
|
69
|
+
"@type": "Answer",
|
|
70
|
+
"text": "Verification is risk-based: most customers are assessed quietly and never see a check. Verification appears only when a product, jurisdiction, or risk signal requires it, and good customers are approved in seconds — so conversion is preserved."
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"@type": "Question",
|
|
75
|
+
"name": "Can Token of Trust support age-restricted products?",
|
|
76
|
+
"acceptedAnswer": {
|
|
77
|
+
"@type": "Answer",
|
|
78
|
+
"text": "Yes. Age verification, age estimation, and age gates can be calibrated per product and jurisdiction — built for alcohol, tobacco and vape, and other age-restricted goods sold online."
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"@type": "Question",
|
|
83
|
+
"name": "What ecommerce platforms does Token of Trust integrate with?",
|
|
84
|
+
"acceptedAnswer": {
|
|
85
|
+
"@type": "Answer",
|
|
86
|
+
"text": "Pre-built integrations are available for Shopify, WooCommerce, BigCommerce, Magento, WordPress, and NetSuite, plus a REST API and webhooks for custom checkout, account creation, manual review, and post-purchase flows."
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"@type": "Question",
|
|
91
|
+
"name": "Can Token of Trust support custom compliance workflows?",
|
|
92
|
+
"acceptedAnswer": {
|
|
93
|
+
"@type": "Answer",
|
|
94
|
+
"text": "Yes. AML screening, PACT Act workflows, tax compliance, manual review queues, and custom decision rules can be combined through the dashboard or the API to match your compliance program."
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"@type": "Question",
|
|
99
|
+
"name": "What evidence does Token of Trust store for audits?",
|
|
100
|
+
"acceptedAnswer": {
|
|
101
|
+
"@type": "Answer",
|
|
102
|
+
"text": "Every verification event, decision record, and review action is logged with timestamps — so audit evidence lives in one place and can be exported on demand instead of being scattered across systems."
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"@type": "Question",
|
|
107
|
+
"name": "How does Token of Trust protect customer data?",
|
|
108
|
+
"acceptedAnswer": {
|
|
109
|
+
"@type": "Answer",
|
|
110
|
+
"text": "Token of Trust never sells customer data. Verification uses data minimization, 256-bit SSL encryption, and compliance-ready storage, and the platform is GDPR, CCPA, and PIPEDA compliant."
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"@type": "Question",
|
|
115
|
+
"name": "Is Token of Trust for self-serve merchants or enterprise teams?",
|
|
116
|
+
"acceptedAnswer": {
|
|
117
|
+
"@type": "Answer",
|
|
118
|
+
"text": "Both. Merchants can start free without a credit card, and enterprise compliance teams can book a demo for custom workflows, volume pricing, and vendor consolidation."
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
</script>
|
|
126
|
+
<link rel="stylesheet" href="/tenants/tokenoftrust/themes/tot-navy.css">
|
|
127
|
+
<link rel="stylesheet" href="/tenants/tokenoftrust/pages/home.css">
|
|
128
|
+
</head>
|
|
129
|
+
<body>
|
|
130
|
+
<a class="skip-link" href="#main">Skip to main content</a>
|
|
131
|
+
|
|
132
|
+
<header class="site">
|
|
133
|
+
<div class="container nav-row">
|
|
134
|
+
<a class="brand" href="/" aria-label="Token of Trust home"><img src="/tenants/tokenoftrust/logo-wordmark.png" alt="Token of Trust"></a>
|
|
135
|
+
<nav class="primary" id="primaryNav" aria-label="Primary">
|
|
136
|
+
<ul>
|
|
137
|
+
<li><a href="/product/">Platform</a></li>
|
|
138
|
+
<li><a href="/solutions/">Industries</a></li>
|
|
139
|
+
<li><a href="/company/">Company</a></li>
|
|
140
|
+
<li><a href="/resources/">Resources</a></li>
|
|
141
|
+
<li><a href="/pricing/">Pricing</a></li>
|
|
142
|
+
<li><a href="https://app.tokenoftrust.com">Login</a></li>
|
|
143
|
+
</ul>
|
|
144
|
+
</nav>
|
|
145
|
+
<div class="nav-cta">
|
|
146
|
+
<a class="btn btn-line" href="#">Book Demo</a>
|
|
147
|
+
<a class="btn btn-green" href="#">Start For Free</a>
|
|
148
|
+
<button class="hamburger" id="hamburger" aria-label="Toggle navigation menu" aria-expanded="false" aria-controls="primaryNav">
|
|
149
|
+
<span>
|
|
150
|
+
</span>
|
|
151
|
+
<span>
|
|
152
|
+
</span>
|
|
153
|
+
<span>
|
|
154
|
+
</span>
|
|
155
|
+
</button>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</header>
|
|
159
|
+
|
|
160
|
+
<main id="main">
|
|
161
|
+
<!-- 1. HERO -->
|
|
162
|
+
<section class="hero" aria-labelledby="hero-heading">
|
|
163
|
+
<span class="blob b1" aria-hidden="true"></span>
|
|
164
|
+
<span class="blob b2" aria-hidden="true"></span>
|
|
165
|
+
<div class="container hero-grid">
|
|
166
|
+
<div>
|
|
167
|
+
<span class="eyebrow"><span class="dot" aria-hidden="true"></span> Built for regulated ecommerce</span>
|
|
168
|
+
<h1 id="hero-heading">Customer verification and compliance for <span class="grad">regulated ecommerce</span></h1>
|
|
169
|
+
<p class="lede">Verify real customers, block risky transactions, and keep audit-ready evidence — without adding unnecessary friction to checkout.</p>
|
|
170
|
+
<p class="support-line">Welcome real customers. Wave goodbye to fraud.</p>
|
|
171
|
+
<div class="hero-ctas">
|
|
172
|
+
<a class="btn btn-green" href="#">Start For Free</a>
|
|
173
|
+
<a class="btn btn-line" href="#">Book Demo</a>
|
|
174
|
+
</div>
|
|
175
|
+
<div class="hero-cues">
|
|
176
|
+
<span><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> 200+ countries</span>
|
|
177
|
+
<span><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> Privacy-first verification</span>
|
|
178
|
+
<span><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> Audit-ready logs</span>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="hero-stage" role="img" aria-label="A shopper passes a quick verification while the merchant's compliance console confirms identity and age checks, flags a risky order, and logs audit evidence — then checkout continues.">
|
|
182
|
+
<div class="cart-chip" id="cartChip" aria-hidden="true"><span class="ok">✓</span> Order #1042 — checkout continues</div>
|
|
183
|
+
<div class="console" aria-hidden="true">
|
|
184
|
+
<div class="console-head"><b>Compliance console</b><span class="live"><i></i> evidence logging</span></div>
|
|
185
|
+
<div class="console-body">
|
|
186
|
+
<div class="c-row" data-crow>
|
|
187
|
+
<span class="ic">
|
|
188
|
+
<svg viewBox="0 0 24 24">
|
|
189
|
+
<path d="M4 12.5l5 5L20 7"/>
|
|
190
|
+
</svg>
|
|
191
|
+
</span> Identity verified — gov ID + selfie <small>1.9s</small>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="c-row" data-crow>
|
|
194
|
+
<span class="ic">
|
|
195
|
+
<svg viewBox="0 0 24 24">
|
|
196
|
+
<path d="M4 12.5l5 5L20 7"/>
|
|
197
|
+
</svg>
|
|
198
|
+
</span> Age 21+ confirmed — required for cart <small>0.6s</small>
|
|
199
|
+
</div>
|
|
200
|
+
<div class="c-row warn" data-crow>
|
|
201
|
+
<span class="ic">
|
|
202
|
+
<svg viewBox="0 0 24 24">
|
|
203
|
+
<path d="M12 6v7M12 17.5v.5"/>
|
|
204
|
+
</svg>
|
|
205
|
+
</span> Order #1044 flagged — manual review <small>risk 0.91</small>
|
|
206
|
+
</div>
|
|
207
|
+
<div class="c-row" data-crow>
|
|
208
|
+
<span class="ic">
|
|
209
|
+
<svg viewBox="0 0 24 24">
|
|
210
|
+
<path d="M4 12.5l5 5L20 7"/>
|
|
211
|
+
</svg>
|
|
212
|
+
</span> Evidence logged — decision record saved <small>audit</small>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="audit-line" id="auditLine"><b>audit></b> waiting for events…</div>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
<div class="shopper" id="shopperCard" aria-hidden="true">
|
|
218
|
+
<span class="avatar">
|
|
219
|
+
<svg viewBox="0 0 48 48" width="40" height="40">
|
|
220
|
+
<circle cx="24" cy="17" r="9" fill="#3ba99b"/>
|
|
221
|
+
<path d="M8 44c2-10 8-15 16-15s14 5 16 15" fill="#3ba99b"/>
|
|
222
|
+
</svg>
|
|
223
|
+
</span>
|
|
224
|
+
<h3>Sam · checking out</h3>
|
|
225
|
+
<p>Age-restricted cart · quick verify</p>
|
|
226
|
+
<div class="sh-progress"><i></i></div>
|
|
227
|
+
<div class="sh-status" id="shStatus">Starting verification…</div>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</section>
|
|
232
|
+
|
|
233
|
+
<!-- 2. PROOF STRIP -->
|
|
234
|
+
<div class="proof" aria-label="Trust and compliance proof points">
|
|
235
|
+
<div class="container">
|
|
236
|
+
<span><b>200+</b> countries</span><span class="sep">·</span>
|
|
237
|
+
<span><b>GDPR · CCPA · PIPEDA</b></span><span class="sep">·</span>
|
|
238
|
+
<span><b>256-bit</b> SSL</span><span class="sep">·</span>
|
|
239
|
+
<span><b>4.9/5</b> G2 · <b>4.5/5</b> Capterra</span><span class="sep">·</span>
|
|
240
|
+
<span>Shopify · WooCommerce · BigCommerce · Magento · API</span><span class="sep">·</span>
|
|
241
|
+
<span><b>Audit-ready</b> logs</span>
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
|
|
245
|
+
<!-- 3. BEFORE / AFTER -->
|
|
246
|
+
<section aria-labelledby="mess-heading">
|
|
247
|
+
<div class="container">
|
|
248
|
+
<div class="center reveal">
|
|
249
|
+
<span class="kicker">The problem</span>
|
|
250
|
+
<h2 id="mess-heading">Approving one customer shouldn't take five tools and a spreadsheet</h2>
|
|
251
|
+
<p class="section-lede">
|
|
252
|
+
If you sell regulated products online, your team is probably stitching verification and compliance
|
|
253
|
+
together by hand. That's slow for you and clumsy for good customers.
|
|
254
|
+
</p>
|
|
255
|
+
</div>
|
|
256
|
+
<div class="ba-grid">
|
|
257
|
+
<div class="ba-col before reveal">
|
|
258
|
+
<h3>⚠ Today's patchwork</h3>
|
|
259
|
+
<div class="mess">
|
|
260
|
+
<span>ID verification vendor</span>
|
|
261
|
+
<span>Age gate plugin</span>
|
|
262
|
+
<span>Fraud tool</span>
|
|
263
|
+
<span>Manual review queue</span>
|
|
264
|
+
<span>Compliance spreadsheet</span>
|
|
265
|
+
<span>Tax workflow</span>
|
|
266
|
+
<span>PACT Act process</span>
|
|
267
|
+
<span>Audit evidence folder</span>
|
|
268
|
+
</div>
|
|
269
|
+
<p class="mess-note">Eight places to check. Zero shared records. Risky orders slip through while good customers wait.</p>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="ba-arrow reveal" aria-hidden="true">
|
|
272
|
+
<svg viewBox="0 0 36 36"><path d="M5 18h24M21 9l9 9-9 9"/></svg>
|
|
273
|
+
</div>
|
|
274
|
+
<div class="ba-col after reveal">
|
|
275
|
+
<h3>✓ One checkout-ready platform</h3>
|
|
276
|
+
<div class="after-stack">
|
|
277
|
+
<div class="row"><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> Identity & age verification</div>
|
|
278
|
+
<div class="row"><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> Fraud & risk checks</div>
|
|
279
|
+
<div class="row"><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> AML, PACT Act & tax workflows</div>
|
|
280
|
+
<div class="row"><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> Manual review, in one queue</div>
|
|
281
|
+
<div class="row"><svg viewBox="0 0 24 24"><path d="M4 12.5l5 5L20 7"/></svg> Audit evidence, logged automatically</div>
|
|
282
|
+
</div>
|
|
283
|
+
<p class="after-note">Token of Trust replaces the patchwork of manual reviews, point solutions, and disconnected compliance workflows.</p>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
287
|
+
</section>
|
|
288
|
+
|
|
289
|
+
<!-- 4. TRUST JOURNEY -->
|
|
290
|
+
<section aria-labelledby="journey-heading" style="padding-top:0">
|
|
291
|
+
<div class="container">
|
|
292
|
+
<div class="center reveal">
|
|
293
|
+
<span class="kicker">The customer experience</span>
|
|
294
|
+
<h2 id="journey-heading">Verification that feels like a welcome, not a checkpoint</h2>
|
|
295
|
+
<p class="section-lede">Good customers barely notice it. Risky ones don't get through. Your audit trail writes itself.</p>
|
|
296
|
+
</div>
|
|
297
|
+
<div class="journey-wrap reveal">
|
|
298
|
+
<div class="journey">
|
|
299
|
+
<span class="jline" aria-hidden="true"></span>
|
|
300
|
+
<div class="jstep"><span class="jdot">🛒</span><h3>Checkout starts</h3><p>A customer begins buying a regulated product.</p></div>
|
|
301
|
+
<div class="jstep"><span class="jdot">🤫</span><h3>Risk assessed quietly</h3><p>Signals are checked in the background — no interruption.</p></div>
|
|
302
|
+
<div class="jstep">
|
|
303
|
+
<span class="jdot">🪪</span>
|
|
304
|
+
<h3>Verify only if needed</h3>
|
|
305
|
+
<p>ID or age check appears only when the product or risk requires it.</p>
|
|
306
|
+
</div>
|
|
307
|
+
<div class="jstep"><span class="jdot">✅</span><h3>Good customers approved</h3><p>Real buyers pass in seconds and keep their cart.</p></div>
|
|
308
|
+
<div class="jstep flag"><span class="jdot">🚩</span><h3>Risk flagged</h3><p>Fraud and compliance risks route to review — not to fulfillment.</p></div>
|
|
309
|
+
<div class="jstep"><span class="jdot">🗂️</span><h3>Evidence logged</h3><p>Every decision is recorded automatically, audit-ready.</p></div>
|
|
310
|
+
<div class="jstep"><span class="jdot">🎉</span><h3>Purchase continues</h3><p>Checkout keeps moving. Conversion stays intact.</p></div>
|
|
311
|
+
</div>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</section>
|
|
315
|
+
|
|
316
|
+
<!-- 5. PLATFORM PILLARS -->
|
|
317
|
+
<section id="platform" aria-labelledby="platform-heading" style="padding-top:0">
|
|
318
|
+
<div class="container">
|
|
319
|
+
<div class="center reveal">
|
|
320
|
+
<span class="kicker">The platform</span>
|
|
321
|
+
<h2 id="platform-heading">Everything you need to approve a customer, in one place</h2>
|
|
322
|
+
<p class="section-lede">Four core capabilities, working from one set of records — so verification, risk, and compliance never disagree.</p>
|
|
323
|
+
</div>
|
|
324
|
+
<div class="pillars">
|
|
325
|
+
<article class="pillar reveal">
|
|
326
|
+
<span class="icon" aria-hidden="true">
|
|
327
|
+
<svg viewBox="0 0 24 24">
|
|
328
|
+
<rect x="3" y="5" width="18" height="14" rx="2"/>
|
|
329
|
+
<circle cx="9" cy="11" r="2.2"/>
|
|
330
|
+
<path d="M5.5 17c.7-2 2-3 3.5-3s2.8 1 3.5 3M14 9h5M14 12.5h5"/>
|
|
331
|
+
</svg>
|
|
332
|
+
</span>
|
|
333
|
+
<div>
|
|
334
|
+
<h3>Identity Verification</h3>
|
|
335
|
+
<p>Confirm who's doing the buying with government ID, selfie match, and data checks — so accounts and orders belong to real people.</p>
|
|
336
|
+
<span class="when">Use it for: account opening, high-value orders, regulated purchases</span>
|
|
337
|
+
</div>
|
|
338
|
+
</article>
|
|
339
|
+
<article class="pillar warm reveal">
|
|
340
|
+
<span class="icon" aria-hidden="true"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3.5 2"/></svg></span>
|
|
341
|
+
<div>
|
|
342
|
+
<h3>Age Assurance</h3>
|
|
343
|
+
<p>Verify age-restricted buyers without sending every good customer through the same heavy-handed flow.</p>
|
|
344
|
+
<span class="when">Use it for: alcohol, tobacco & vape, age-restricted goods</span>
|
|
345
|
+
</div>
|
|
346
|
+
</article>
|
|
347
|
+
<article class="pillar warm reveal">
|
|
348
|
+
<span class="icon" aria-hidden="true">
|
|
349
|
+
<svg viewBox="0 0 24 24">
|
|
350
|
+
<path d="M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6z"/>
|
|
351
|
+
<path d="M9 12l2.2 2.2L15.5 9.5"/>
|
|
352
|
+
</svg>
|
|
353
|
+
</span>
|
|
354
|
+
<div>
|
|
355
|
+
<h3>Fraud Prevention</h3>
|
|
356
|
+
<p>Spot risky behavior before it becomes chargebacks, abuse, or regulatory exposure — while real buyers glide through.</p>
|
|
357
|
+
<span class="when">Use it for: checkout risk scoring, fake accounts, chargeback defense</span>
|
|
358
|
+
</div>
|
|
359
|
+
</article>
|
|
360
|
+
<article class="pillar reveal">
|
|
361
|
+
<span class="icon" aria-hidden="true">
|
|
362
|
+
<svg viewBox="0 0 24 24">
|
|
363
|
+
<path d="M5 21V5a2 2 0 012-2h7l5 5v13"/>
|
|
364
|
+
<path d="M14 3v5h5M9 13h6M9 17h6"/>
|
|
365
|
+
</svg>
|
|
366
|
+
</span>
|
|
367
|
+
<div>
|
|
368
|
+
<h3>Compliance Evidence & Audit Logs</h3>
|
|
369
|
+
<p>Keep decision records, verification events, and review history ready for audits — in one place, exportable on demand.</p>
|
|
370
|
+
<span class="when">Use it for: regulator requests, internal audits, dispute evidence</span>
|
|
371
|
+
</div>
|
|
372
|
+
</article>
|
|
373
|
+
</div>
|
|
374
|
+
<div class="second-row reveal" aria-label="Additional compliance workflows">
|
|
375
|
+
<span><b>+</b> AML screening</span>
|
|
376
|
+
<span><b>+</b> PACT Act compliance</span>
|
|
377
|
+
<span><b>+</b> Sales, VAT & excise tax</span>
|
|
378
|
+
<span><b>+</b> Manual review queue</span>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
</section>
|
|
382
|
+
|
|
383
|
+
<!-- 6. INDUSTRIES -->
|
|
384
|
+
<section id="industries" class="ind-section" aria-labelledby="industries-heading">
|
|
385
|
+
<div class="container">
|
|
386
|
+
<div class="reveal">
|
|
387
|
+
<span class="kicker">Who it's for</span>
|
|
388
|
+
<h2 id="industries-heading">Built for ecommerce businesses where every transaction carries compliance risk</h2>
|
|
389
|
+
<p class="section-lede">If a regulator, a card network, or a state law cares about who your customer is — Token of Trust was built for you.</p>
|
|
390
|
+
</div>
|
|
391
|
+
<div class="ind-grid">
|
|
392
|
+
<article class="ind reveal">
|
|
393
|
+
<h3>
|
|
394
|
+
<span class="em" aria-hidden="true">🍷</span> Alcohol</h3>
|
|
395
|
+
<p>Confirm legal drinking age at checkout and on delivery-adjacent flows, with records that satisfy state requirements.</p>
|
|
396
|
+
</article>
|
|
397
|
+
<article class="ind reveal">
|
|
398
|
+
<h3>
|
|
399
|
+
<span class="em" aria-hidden="true">💨</span> Tobacco & vape</h3>
|
|
400
|
+
<p>Age verification plus PACT Act registration, reporting, and excise tax handled in the same flow.</p>
|
|
401
|
+
</article>
|
|
402
|
+
<article class="ind reveal">
|
|
403
|
+
<h3>
|
|
404
|
+
<span class="em" aria-hidden="true">🔞</span> Age-restricted goods</h3>
|
|
405
|
+
<p>Knives, CBD, lottery, gaming, and other 18+/21+ products — checks calibrated per product and jurisdiction.</p>
|
|
406
|
+
</article>
|
|
407
|
+
<article class="ind reveal">
|
|
408
|
+
<h3>
|
|
409
|
+
<span class="em" aria-hidden="true">🏪</span> Marketplaces</h3>
|
|
410
|
+
<p>Verify regulated sellers and buyers without slowing onboarding, and keep evidence per account.</p>
|
|
411
|
+
</article>
|
|
412
|
+
<article class="ind reveal">
|
|
413
|
+
<h3>
|
|
414
|
+
<span class="em" aria-hidden="true">🏦</span> Financial services-adjacent</h3>
|
|
415
|
+
<p>KYC-grade identity checks and AML screening for commerce that touches money movement.</p>
|
|
416
|
+
</article>
|
|
417
|
+
<article class="ind reveal">
|
|
418
|
+
<h3>
|
|
419
|
+
<span class="em" aria-hidden="true">⚠️</span> High-risk ecommerce</h3>
|
|
420
|
+
<p>High-value or fraud-targeted catalogs — stop risky transactions before fulfillment, not after the chargeback.</p>
|
|
421
|
+
</article>
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
424
|
+
</section>
|
|
425
|
+
|
|
426
|
+
<!-- 7. INTEGRATIONS -->
|
|
427
|
+
<section aria-labelledby="int-heading">
|
|
428
|
+
<div class="container">
|
|
429
|
+
<div class="center reveal">
|
|
430
|
+
<span class="kicker">Implementation</span>
|
|
431
|
+
<h2 id="int-heading">Fits the store you already run</h2>
|
|
432
|
+
<p class="section-lede">
|
|
433
|
+
Pre-built ecommerce integrations for operators. A clean REST API and webhooks for developers.
|
|
434
|
+
Verification can run at checkout, account creation, manual review, or post-purchase.
|
|
435
|
+
</p>
|
|
436
|
+
</div>
|
|
437
|
+
<div class="int-row reveal" aria-label="Platform integrations">
|
|
438
|
+
<span class="int-badge">Shopify</span>
|
|
439
|
+
<span class="int-badge">WooCommerce</span>
|
|
440
|
+
<span class="int-badge">BigCommerce</span>
|
|
441
|
+
<span class="int-badge">Magento</span>
|
|
442
|
+
<span class="int-badge">WordPress</span>
|
|
443
|
+
<span class="int-badge">NetSuite</span>
|
|
444
|
+
<span class="int-badge">REST API</span>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="flow-note reveal" aria-label="Where verification can run">
|
|
447
|
+
<span>Checkout</span><span>Account creation</span><span>Manual review</span><span>Post-purchase</span>
|
|
448
|
+
</div>
|
|
449
|
+
<div class="api-card reveal" aria-label="Example API request creating a verification with identity, age, and AML checks">
|
|
450
|
+
<div class="bar" aria-hidden="true"><i></i><i></i><i></i></div>
|
|
451
|
+
<pre><span class="tok-c">// One call covers identity, age, and AML — evidence logs automatically</span>
|
|
452
|
+
<span class="tok-k">const</span> v = <span class="tok-k">await</span> tot.verifications.create({
|
|
453
|
+
type: <span class="tok-s">"checkout"</span>,
|
|
454
|
+
checks: [<span class="tok-s">"government_id"</span>, <span class="tok-s">"age_21_plus"</span>, <span class="tok-s">"aml_screen"</span>]
|
|
455
|
+
});
|
|
456
|
+
<span class="tok-c">// => { status: "approved", evidence_id: "ev_8841" }</span></pre>
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
</section>
|
|
460
|
+
|
|
461
|
+
<!-- 8. PRIVACY -->
|
|
462
|
+
<section aria-labelledby="privacy-heading" style="padding-top:0">
|
|
463
|
+
<div class="container reveal">
|
|
464
|
+
<div class="privacy-band">
|
|
465
|
+
<svg class="heart" viewBox="0 0 120 130" role="img" aria-label="A heart inside a shield, representing the privacy promise">
|
|
466
|
+
<path d="M60 6l46 17v34c0 30-20 47-46 56-26-9-46-26-46-56V23z" fill="#7fe3b8"/>
|
|
467
|
+
<path class="heartbeat" d="M60 92C46 81 38 73 38 62c0-8 6-13 12.5-13 4.5 0 8.5 2.6 9.5 6 1-3.4 5-6 9.5-6C76 49 82 54 82 62c0 11-8 19-22 30z" fill="#10294b"/>
|
|
468
|
+
</svg>
|
|
469
|
+
<div>
|
|
470
|
+
<span class="kicker">Our promise</span>
|
|
471
|
+
<h2 id="privacy-heading">We will never sell your data. Ever.</h2>
|
|
472
|
+
<p>
|
|
473
|
+
Your customers hand you their identity at a sensitive moment. We treat that with respect: we
|
|
474
|
+
collect only what each check requires, encrypt everything with 256-bit SSL, store it in
|
|
475
|
+
compliance-ready systems, and keep your audit evidence available to you — and no one else.
|
|
476
|
+
</p>
|
|
477
|
+
<div class="priv-points">
|
|
478
|
+
<span>Data minimization</span>
|
|
479
|
+
<span>256-bit SSL encryption</span>
|
|
480
|
+
<span>Compliance-ready storage</span>
|
|
481
|
+
<span>Customer consent & respect</span>
|
|
482
|
+
<span>GDPR · CCPA · PIPEDA</span>
|
|
483
|
+
<span>Audit-ready evidence</span>
|
|
484
|
+
</div>
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
</div>
|
|
488
|
+
</section>
|
|
489
|
+
|
|
490
|
+
<!-- 9. PROOF -->
|
|
491
|
+
<section aria-labelledby="proof-heading" style="padding-top:0">
|
|
492
|
+
<div class="container">
|
|
493
|
+
<div class="center reveal">
|
|
494
|
+
<span class="kicker">Outcomes</span>
|
|
495
|
+
<h2 id="proof-heading">What regulated merchants actually get</h2>
|
|
496
|
+
</div>
|
|
497
|
+
<div class="quotes">
|
|
498
|
+
<blockquote class="quote reveal">
|
|
499
|
+
<span class="metric">−80%</span>
|
|
500
|
+
<p>"Manual reviews dropped from hours a day to a short queue. One platform replaced three vendors and our compliance spreadsheet."</p>
|
|
501
|
+
<footer>Compliance lead · multi-state vape retailer</footer>
|
|
502
|
+
</blockquote>
|
|
503
|
+
<blockquote class="quote reveal">
|
|
504
|
+
<span class="metric warm">Conversion held</span>
|
|
505
|
+
<p>
|
|
506
|
+
"We were terrified age checks would tank checkout. Most customers never even see one — flagged
|
|
507
|
+
orders go to review, everyone else sails through."
|
|
508
|
+
</p>
|
|
509
|
+
<footer>Ecommerce director · online alcohol marketplace</footer>
|
|
510
|
+
</blockquote>
|
|
511
|
+
<blockquote class="quote reveal">
|
|
512
|
+
<span class="metric deep">Audit in minutes</span>
|
|
513
|
+
<p>"When the regulator asked for records, we exported the evidence log and were done. It used to take a week of digging across systems."</p>
|
|
514
|
+
<footer>COO · regulated goods brand</footer>
|
|
515
|
+
</blockquote>
|
|
516
|
+
</div>
|
|
517
|
+
<div class="ratings-row reveal">
|
|
518
|
+
<div class="rating-card">4.9/5 <small>G2</small></div>
|
|
519
|
+
<div class="rating-card">4.5/5 <small>Capterra</small></div>
|
|
520
|
+
</div>
|
|
521
|
+
</div>
|
|
522
|
+
</section>
|
|
523
|
+
|
|
524
|
+
<!-- 10. FAQ -->
|
|
525
|
+
<section id="faq" aria-labelledby="faq-heading" style="padding-top:0">
|
|
526
|
+
<div class="container">
|
|
527
|
+
<div class="center reveal">
|
|
528
|
+
<span class="kicker">FAQ</span>
|
|
529
|
+
<h2 id="faq-heading">Questions regulated merchants ask us</h2>
|
|
530
|
+
</div>
|
|
531
|
+
<div class="faq">
|
|
532
|
+
<details class="reveal">
|
|
533
|
+
<summary>How does Token of Trust reduce checkout friction?</summary>
|
|
534
|
+
<p>
|
|
535
|
+
Verification is risk-based: most customers are assessed quietly and never see a check. Verification
|
|
536
|
+
appears only when a product, jurisdiction, or risk signal requires it, and good customers are
|
|
537
|
+
approved in seconds — so conversion is preserved.
|
|
538
|
+
</p>
|
|
539
|
+
</details>
|
|
540
|
+
<details class="reveal">
|
|
541
|
+
<summary>Can it support age-restricted products?</summary>
|
|
542
|
+
<p>
|
|
543
|
+
Yes. Age verification, age estimation, and age gates can be calibrated per product and jurisdiction
|
|
544
|
+
— built for alcohol, tobacco and vape, and other age-restricted goods sold online.
|
|
545
|
+
</p>
|
|
546
|
+
</details>
|
|
547
|
+
<details class="reveal">
|
|
548
|
+
<summary>What ecommerce platforms does it integrate with?</summary>
|
|
549
|
+
<p>
|
|
550
|
+
Pre-built integrations for Shopify, WooCommerce, BigCommerce, Magento, WordPress, and NetSuite, plus
|
|
551
|
+
a REST API and webhooks for custom checkout, account creation, manual review, and post-purchase
|
|
552
|
+
flows.
|
|
553
|
+
</p>
|
|
554
|
+
</details>
|
|
555
|
+
<details class="reveal">
|
|
556
|
+
<summary>Can it support custom compliance workflows?</summary>
|
|
557
|
+
<p>
|
|
558
|
+
Yes. AML screening, PACT Act workflows, tax compliance, manual review queues, and custom decision
|
|
559
|
+
rules can be combined through the dashboard or the API to match your compliance program.
|
|
560
|
+
</p>
|
|
561
|
+
</details>
|
|
562
|
+
<details class="reveal">
|
|
563
|
+
<summary>What evidence is stored for audits?</summary>
|
|
564
|
+
<p>
|
|
565
|
+
Every verification event, decision record, and review action is logged with timestamps — audit
|
|
566
|
+
evidence lives in one place and exports on demand, instead of being scattered across systems.
|
|
567
|
+
</p>
|
|
568
|
+
</details>
|
|
569
|
+
<details class="reveal">
|
|
570
|
+
<summary>How does Token of Trust protect customer data?</summary>
|
|
571
|
+
<p>
|
|
572
|
+
We never sell customer data. Verification uses data minimization, 256-bit SSL encryption, and
|
|
573
|
+
compliance-ready storage, and the platform is GDPR, CCPA, and PIPEDA compliant.
|
|
574
|
+
</p>
|
|
575
|
+
</details>
|
|
576
|
+
<details class="reveal">
|
|
577
|
+
<summary>Is this for self-serve merchants or enterprise teams?</summary>
|
|
578
|
+
<p>
|
|
579
|
+
Both. Merchants can start free without a credit card, and enterprise compliance teams can book a
|
|
580
|
+
demo for custom workflows, volume pricing, and vendor consolidation.
|
|
581
|
+
</p>
|
|
582
|
+
</details>
|
|
583
|
+
</div>
|
|
584
|
+
</div>
|
|
585
|
+
</section>
|
|
586
|
+
|
|
587
|
+
<!-- 11. FINAL CTA -->
|
|
588
|
+
<section aria-labelledby="cta-heading" style="padding-top:0">
|
|
589
|
+
<div class="container">
|
|
590
|
+
<div class="cta-band reveal">
|
|
591
|
+
<span class="kicker">Get started</span>
|
|
592
|
+
<h2 id="cta-heading">Verify customers. Reduce risk. Keep checkout moving.</h2>
|
|
593
|
+
<p>
|
|
594
|
+
Start free in minutes — no credit card required. Or book a demo and we'll map verification and
|
|
595
|
+
compliance to your products, states, and risk profile.
|
|
596
|
+
</p>
|
|
597
|
+
<div class="hero-ctas">
|
|
598
|
+
<a class="btn btn-green" href="#">Start For Free</a>
|
|
599
|
+
<a class="btn btn-navy" href="#">Book Demo</a>
|
|
600
|
+
</div>
|
|
601
|
+
</div>
|
|
602
|
+
</div>
|
|
603
|
+
</section>
|
|
604
|
+
</main>
|
|
605
|
+
|
|
606
|
+
<footer class="site">
|
|
607
|
+
<div class="container">
|
|
608
|
+
<div class="foot-grid">
|
|
609
|
+
<div>
|
|
610
|
+
<a class="brand" href="/" aria-label="Token of Trust home"><img src="/tenants/tokenoftrust/logo-wordmark.png" alt="Token of Trust"></a>
|
|
611
|
+
<p style="color:var(--muted);font-size:.9rem;margin-top:12px;max-width:34ch">
|
|
612
|
+
Customer verification and compliance for regulated ecommerce. 200+ countries. We will never sell
|
|
613
|
+
your data.
|
|
614
|
+
</p>
|
|
615
|
+
</div>
|
|
616
|
+
<nav aria-label="Platform footer"><h3>Platform</h3><ul>
|
|
617
|
+
<li><a href="/product/verification/">Identity Verification</a></li>
|
|
618
|
+
<li><a href="/product/age-assurance/">Age Assurance</a></li>
|
|
619
|
+
<li><a href="/product/fraud-prevention/">Fraud Prevention</a></li>
|
|
620
|
+
<li><a href="/product/compliance/aml/">AML & Watchlist</a></li>
|
|
621
|
+
<li><a href="/product/">All products</a></li>
|
|
622
|
+
</ul></nav>
|
|
623
|
+
<nav aria-label="Industries footer"><h3>Industries</h3><ul>
|
|
624
|
+
<li><a href="/solutions/">All industries</a></li>
|
|
625
|
+
<li><a href="/vlp-cigars-and-tobacco/">Tobacco & Vape</a></li>
|
|
626
|
+
<li><a href="/vlp-alcohol/">Wine & Spirits</a></li>
|
|
627
|
+
<li><a href="/industries/cannabis/">Cannabis</a></li>
|
|
628
|
+
</ul></nav>
|
|
629
|
+
<nav aria-label="Company footer"><h3>Company</h3><ul>
|
|
630
|
+
<li><a href="/company/">Company</a></li>
|
|
631
|
+
<li><a href="/careers/">Careers</a></li>
|
|
632
|
+
<li><a href="/resources/">Resources</a></li>
|
|
633
|
+
<li><a href="/pricing/">Pricing</a></li>
|
|
634
|
+
</ul></nav>
|
|
635
|
+
</div>
|
|
636
|
+
<p class="copyright">© 2026 Token of Trust®. GDPR · CCPA · PIPEDA compliant. 256-bit SSL. We will never sell your data.</p>
|
|
637
|
+
</div>
|
|
638
|
+
</footer>
|
|
639
|
+
|
|
640
|
+
<script>
|
|
641
|
+
(function(){
|
|
642
|
+
var reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
643
|
+
|
|
644
|
+
// Mobile nav
|
|
645
|
+
var burger = document.getElementById('hamburger');
|
|
646
|
+
var nav = document.getElementById('primaryNav');
|
|
647
|
+
burger.addEventListener('click', function(){
|
|
648
|
+
var open = nav.classList.toggle('open');
|
|
649
|
+
burger.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
// Reveals
|
|
653
|
+
var io = new IntersectionObserver(function(entries){
|
|
654
|
+
entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });
|
|
655
|
+
}, {threshold:.12});
|
|
656
|
+
document.querySelectorAll('.reveal').forEach(function(el){ io.observe(el); });
|
|
657
|
+
|
|
658
|
+
// Journey steps stagger
|
|
659
|
+
var steps = document.querySelectorAll('.jstep');
|
|
660
|
+
var jio = new IntersectionObserver(function(entries){
|
|
661
|
+
entries.forEach(function(e){
|
|
662
|
+
if(e.isIntersecting){
|
|
663
|
+
steps.forEach(function(s, i){
|
|
664
|
+
setTimeout(function(){ s.classList.add('in'); }, reduced ? 0 : i * 160);
|
|
665
|
+
});
|
|
666
|
+
jio.disconnect();
|
|
667
|
+
}
|
|
668
|
+
});
|
|
669
|
+
}, {threshold:.2});
|
|
670
|
+
if(steps.length) jio.observe(steps[0]);
|
|
671
|
+
|
|
672
|
+
// Hero story loop: shopper verifies -> console rows light up -> evidence logged -> checkout continues
|
|
673
|
+
var shopper = document.getElementById('shopperCard');
|
|
674
|
+
var shStatus = document.getElementById('shStatus');
|
|
675
|
+
var crows = Array.prototype.slice.call(document.querySelectorAll('[data-crow]'));
|
|
676
|
+
var audit = document.getElementById('auditLine');
|
|
677
|
+
var cart = document.getElementById('cartChip');
|
|
678
|
+
var auditMsgs = [
|
|
679
|
+
'<b>audit></b> ev_8841 saved — id+age, order #1042',
|
|
680
|
+
'<b>audit></b> ev_8842 saved — review opened, order #1044',
|
|
681
|
+
'<b>audit></b> export ready — 2 records, 0.3s'
|
|
682
|
+
];
|
|
683
|
+
function resetStory(){
|
|
684
|
+
shopper.classList.remove('checking','approved');
|
|
685
|
+
shStatus.textContent = 'Starting verification…';
|
|
686
|
+
crows.forEach(function(r){ r.classList.remove('on'); });
|
|
687
|
+
audit.innerHTML = '<b>audit></b> waiting for events…';
|
|
688
|
+
cart.classList.remove('show');
|
|
689
|
+
}
|
|
690
|
+
function runStory(){
|
|
691
|
+
resetStory();
|
|
692
|
+
setTimeout(function(){
|
|
693
|
+
shopper.classList.add('checking');
|
|
694
|
+
shStatus.textContent = 'Verifying ID + age…';
|
|
695
|
+
}, 400);
|
|
696
|
+
crows.forEach(function(r, i){
|
|
697
|
+
setTimeout(function(){ r.classList.add('on'); }, 1100 + i * 750);
|
|
698
|
+
});
|
|
699
|
+
setTimeout(function(){
|
|
700
|
+
shopper.classList.add('approved');
|
|
701
|
+
shStatus.textContent = '✓ Approved · age 21+ confirmed';
|
|
702
|
+
}, 2400);
|
|
703
|
+
setTimeout(function(){ audit.innerHTML = auditMsgs[0]; }, 3300);
|
|
704
|
+
setTimeout(function(){
|
|
705
|
+
cart.classList.add('show');
|
|
706
|
+
audit.innerHTML = auditMsgs[1];
|
|
707
|
+
}, 4200);
|
|
708
|
+
setTimeout(function(){ audit.innerHTML = auditMsgs[2]; }, 5600);
|
|
709
|
+
}
|
|
710
|
+
if(reduced){
|
|
711
|
+
shopper.classList.add('approved');
|
|
712
|
+
shStatus.textContent = '✓ Approved · age 21+ confirmed';
|
|
713
|
+
crows.forEach(function(r){ r.classList.add('on'); });
|
|
714
|
+
audit.innerHTML = auditMsgs[0];
|
|
715
|
+
cart.classList.add('show');
|
|
716
|
+
} else {
|
|
717
|
+
runStory();
|
|
718
|
+
setInterval(runStory, 8200);
|
|
719
|
+
}
|
|
720
|
+
})();
|
|
721
|
+
</script>
|
|
722
|
+
</body>
|
|
723
|
+
</html>
|