hosted/ifttt/pricing/index.html

3 lines
No EOL
15 KiB
HTML

<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="http://localhost:4321/pricing/"><title>IF.Trace — Pricing</title><meta name="description" content="Pricing for IF.Trace. One thing priced: the proof surface."><meta property="og:title" content="IF.Trace — Pricing"><meta property="og:description" content="Pricing for IF.Trace. One thing priced: the proof surface."><meta property="og:type" content="website"><meta property="og:image" content="/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.Dr9NnB1c.css"></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(900px_circle_at_20%_0%,rgba(59,130,246,0.10),transparent_60%),radial-gradient(900px_circle_at_100%_0%,rgba(16,185,129,0.08),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.86),rgba(2,6,23,0.96))]"></div> <div class="absolute inset-0 opacity-[0.035] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/35 px-4 py-3 backdrop-blur-sm shadow-[0_10px_30px_rgba(0,0,0,0.25)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Use cases</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/whitepaper/">Whitepaper</a> </nav> <a class="hidden rounded-full border border-white/10 bg-white/5 px-3 py-1 text-xs font-medium text-white/80 hover:bg-white/10 hover:text-white sm:inline-flex" href="https://api.infrafabric.io/login">Login</a> </div> </div> </header> <main class="pt-28 sm:pt-32"> <div class="mx-auto w-full max-w-6xl px-4 sm:px-6 "> <section class="py-14 sm:py-16"> <div class="mx-auto max-w-3xl"> <p class="text-xs font-medium uppercase tracking-[0.18em] text-white/55">Pricing</p> <h1 class="mt-4 text-4xl font-semibold tracking-tight text-white/95 sm:text-5xl">Pricing</h1> <p class="mt-4 text-lg leading-relaxed text-white/75">One thing priced: the proof surface.</p> </div> </section> <section class="py-8"> <div class="mb-6"> <h2 class="text-lg font-semibold tracking-tight text-white/95 sm:text-xl">Plans</h2> <div class="mt-4 h-px w-full bg-white/10" aria-hidden="true"></div> </div> <p class="mt-3 max-w-3xl text-sm leading-relaxed text-white/70">
A “receipt” is one binding of <span class="font-mono text-xs text-white/80">source_sha256</span> + <span class="font-mono text-xs text-white/80">output_sha256</span>. A third party verifies by checking whether the hashes match.
</p> <div class="grid gap-4 lg:grid-cols-3"> <div class="rounded-2xl border border-white/10 bg-white/5 p-5 shadow-[0_16px_60px_rgba(0,0,0,0.35)] "> <div class="text-xs font-medium uppercase tracking-wide text-white/50">Free</div> <div class="mt-2 text-2xl font-semibold text-white/90">$0</div> <ul class="mt-4 space-y-2 text-sm text-white/70"> <li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>10 receipts / month</span> </li><li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>Public receipt URLs</span> </li><li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>HTML view</span> </li> </ul> </div> <div class="rounded-2xl border border-white/10 bg-white/5 p-5 shadow-[0_16px_60px_rgba(0,0,0,0.35)] "> <div class="text-xs font-medium uppercase tracking-wide text-white/50">Subscription (sliding scale)</div> <div class="mt-2 text-2xl font-semibold text-white/90">$9.99+ / month</div> <ul class="mt-4 space-y-2 text-sm text-white/70"> <li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>Receipt creation + verification</span> </li><li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>Predictable monthly pricing</span> </li><li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>Unit price decreases with volume</span> </li> </ul> </div> <div class="rounded-2xl border border-white/10 bg-white/5 p-5 shadow-[0_16px_60px_rgba(0,0,0,0.35)] "> <div class="text-xs font-medium uppercase tracking-wide text-white/50">Pay as you go</div> <div class="mt-2 text-2xl font-semibold text-white/90">$0.12 / receipt</div> <ul class="mt-4 space-y-2 text-sm text-white/70"> <li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>No subscription</span> </li><li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>Same verification surface</span> </li> </ul> </div> </div> </section> <section class="py-10"> <div class="mb-6"> <h2 class="text-lg font-semibold tracking-tight text-white/95 sm:text-xl">Subscription calculator</h2> <p class="mt-2 text-sm leading-relaxed text-white/70 sm:text-[0.95rem]">Choose a plan breakpoint. Unit price decreases with volume.</p> <div class="mt-4 h-px w-full bg-white/10" aria-hidden="true"></div> </div> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="Z27trkA" prefix="r1" component-url="/assets/_astro/PricingCalculator.AawJrak5.js" component-export="PricingCalculator" renderer-url="/assets/_astro/client.nc8uITnr.js" props="{&quot;steps&quot;:[1,[[0,{&quot;receipts&quot;:[0,100],&quot;unitUsd&quot;:[0,0.1],&quot;monthlyUsd&quot;:[0,9.99]}],[0,{&quot;receipts&quot;:[0,1000],&quot;unitUsd&quot;:[0,0.07],&quot;monthlyUsd&quot;:[0,70]}],[0,{&quot;receipts&quot;:[0,10000],&quot;unitUsd&quot;:[0,0.06],&quot;monthlyUsd&quot;:[0,600]}],[0,{&quot;receipts&quot;:[0,25000],&quot;unitUsd&quot;:[0,0.05],&quot;monthlyUsd&quot;:[0,1250]}]]],&quot;paygUnitUsd&quot;:[0,0.12]}" ssr client="load" opts="{&quot;name&quot;:&quot;PricingCalculator&quot;,&quot;value&quot;:true}" await-children><div class="rounded-2xl border border-white/10 bg-white/5 p-5 shadow-[0_16px_60px_rgba(0,0,0,0.35)]"><div class="flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between"><div><div class="text-xs font-medium uppercase tracking-wide text-white/50">Monthly volume</div><div class="mt-1 text-2xl font-semibold tracking-tight text-white/90">100<!-- --> receipts</div></div><div class="grid grid-cols-2 gap-3 sm:grid-cols-3"><div class="rounded-xl border border-white/10 bg-slate-950/30 px-3 py-2"><div class="text-[11px] text-white/60">Unit price</div><div class="mt-1 text-sm font-semibold text-white/90">$0.10</div></div><div class="rounded-xl border border-white/10 bg-slate-950/30 px-3 py-2"><div class="text-[11px] text-white/60">Subscription</div><div class="mt-1 text-sm font-semibold text-white/90">$9.99</div></div><div class="hidden rounded-xl border border-white/10 bg-slate-950/30 px-3 py-2 sm:block"><div class="text-[11px] text-white/60">PAYG equivalent</div><div class="mt-1 text-sm font-semibold text-white/90">$12.00</div></div></div></div><div class="mt-5"><input aria-label="Select monthly receipt volume" class="w-full accent-[oklch(var(--primary))]" type="range" min="0" max="3" step="1" value="0"/><div class="mt-3 flex flex-wrap items-center gap-2"><button type="button" class="rounded-full border px-3 py-1 text-xs font-medium transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 focus-visible:ring-offset-2 focus-visible:ring-offset-background border-white/25 bg-white/10 text-white">100</button><button type="button" class="rounded-full border px-3 py-1 text-xs font-medium transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 focus-visible:ring-offset-2 focus-visible:ring-offset-background border-white/10 bg-white/5 text-white/70 hover:bg-white/10 hover:text-white">1,000</button><button type="button" class="rounded-full border px-3 py-1 text-xs font-medium transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 focus-visible:ring-offset-2 focus-visible:ring-offset-background border-white/10 bg-white/5 text-white/70 hover:bg-white/10 hover:text-white">10,000</button><button type="button" class="rounded-full border px-3 py-1 text-xs font-medium transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 focus-visible:ring-offset-2 focus-visible:ring-offset-background border-white/10 bg-white/5 text-white/70 hover:bg-white/10 hover:text-white">25,000</button></div></div><div class="mt-4 text-sm text-white/70"><span>At this volume, subscription is about <span class="font-semibold text-white/90">$2.01</span> less than PAYG.</span></div></div><!--astro:end--></astro-island> <p class="mt-4 text-sm text-white/70">The unit price is shown at the plan breakpoints. If you need volumes above 25,000/month, the unit price continues at $0.05 unless explicitly agreed otherwise.</p> </section> <section class="py-8"> <div class="mb-6"> <h2 class="text-lg font-semibold tracking-tight text-white/95 sm:text-xl">Notes</h2> <div class="mt-4 h-px w-full bg-white/10" aria-hidden="true"></div> </div> <ul class="space-y-2 text-sm text-white/70"> <li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>We verify integrity (hashes), not correctness or truth.</span> </li><li class="flex gap-2"> <span class="mt-1 text-primary" aria-hidden="true"></span> <span>Large file egress or unusual storage can incur overages; see Terms.</span> </li> </ul> </section> <footer class="pb-16 pt-6"> <div class="flex flex-col gap-3 border-t border-white/10 pt-8 text-sm text-white/70 sm:flex-row sm:items-center sm:justify-between"> <div>Integrity, not interpretation.</div> <div class="flex flex-wrap gap-4"> <a href="/privacy/" class="hover:text-white"> Privacy </a><a href="/terms/" class="hover:text-white"> Terms </a><a href="mailto:ds@infrafabric.io?subject=IF.Trace%20contact" class="hover:text-white" target="_blank" rel="noreferrer"> Contact </a> </div> </div> </footer> </div> </main> <a href="mailto:ds@infrafabric.io?subject=IF.Trace%20contact" class="fixed bottom-6 right-6 inline-flex h-10 items-center justify-center rounded-full border border-white/10 bg-slate-950/50 px-4 text-xs font-medium text-white/80 backdrop-blur hover:bg-slate-950/70 hover:text-white">contact</a> </body></html>