1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,39964,e=>{"use strict";var t=e.i(43476),r=e.i(71645),s=e.i(75157);let a=(0,r.forwardRef)(({className:e,...r},a)=>(0,t.jsx)("div",{ref:a,className:(0,s.cn)("rounded-xl border border-border bg-card text-card-foreground",e),...r}));a.displayName="Card",e.s(["Card",0,a])},72520,e=>{"use strict";let t=(0,e.i(75254).default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);e.s(["ArrowRight",()=>t],72520)},58041,e=>{"use strict";let t=(0,e.i(75254).default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);e.s(["Database",()=>t],58041)},39312,e=>{"use strict";let t=(0,e.i(75254).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",()=>t],39312)},16715,e=>{"use strict";let t=(0,e.i(75254).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",()=>t],16715)},55436,e=>{"use strict";let t=(0,e.i(75254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["Search",()=>t],55436)},95468,e=>{"use strict";let t=(0,e.i(75254).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",()=>t],95468)},78894,e=>{"use strict";let t=(0,e.i(75254).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);e.s(["AlertTriangle",()=>t],78894)},52008,e=>{"use strict";let t=(0,e.i(75254).default)("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);e.s(["Layers",()=>t],52008)},95427,e=>{"use strict";var t=e.i(43476),r=e.i(71645);function s({color:e="#1eb182",opacity:s=.15}){let a=(0,r.useRef)(null),i=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=a.current;if(!t)return;let r=t.getContext("2d");if(!r)return;let l=()=>{let e=t.parentElement;e&&(t.width=e.clientWidth,t.height=e.clientHeight)};l(),window.addEventListener("resize",l);let n=[];for(let e=0;e<8;e++)n.push({x:Math.random()*t.width,y:Math.random()*t.height,phase:Math.random()*Math.PI*2});let d=0,c=(t,s,a,i,l)=>{r.save(),r.translate(t,s),r.rotate(l),r.beginPath(),r.rect(-a/2,-a/2,a,a),r.strokeStyle=e,r.globalAlpha=i,r.lineWidth=1.5,r.stroke(),r.restore()},o=()=>{r.clearRect(0,0,t.width,t.height),d+=.003,n.forEach((e,t)=>{let r=.02*Math.sin(2*d+e.phase);c(e.x,e.y,45,.6*s+r,.1*d+e.phase);for(let t=1;t<=6;t++){let r=4*t,a=45*t*1.2;for(let i=0;i<r;i++){let l=i/r*Math.PI*2,n=e.x+Math.cos(l)*a,o=e.y+Math.sin(l)*a,m=.015*Math.sin(2*d+.3*t+.1*i+e.phase),x=s*(.5-.06*t)+m;x>.005&&c(n,o,36,x,.05*d+.1*t+e.phase)}}}),i.current=requestAnimationFrame(o)};return o(),()=>{window.removeEventListener("resize",l),i.current&&cancelAnimationFrame(i.current)}},[e,s]),(0,t.jsx)("canvas",{ref:a,className:"absolute inset-0 pointer-events-none",style:{zIndex:0}})}e.s(["AnimatedGrainBg",()=>s])},17923,e=>{"use strict";let t=(0,e.i(75254).default)("chart-column",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);e.s(["BarChart3",()=>t],17923)},55716,e=>{"use strict";
1let t=(0,e.i(75254).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>t],55716)},3116,e=>{"use strict";let t=(0,e.i(75254).default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["Clock",()=>t],3116)},64428,e=>{"use strict";var t=e.i(43476),r=e.i(71645),s=e.i(57688),a=e.i(22016),i=e.i(44181),l=e.i(39964),n=e.i(95427),d=e.i(39312),c=e.i(58041),o=e.i(3116),m=e.i(98919),x=e.i(52008),u=e.i(55716),h=e.i(72520),p=e.i(17923),g=e.i(55436),f=e.i(16715);let b=(0,e.i(75254).default)("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);var y=e.i(78894),j=e.i(95468);let v=[{id:"overview",label:"Overview"},{id:"performance",label:"Performance"},{id:"online-offline",label:"Online/Offline"},{id:"capabilities",label:"Capabilities"},{id:"registry",label:"Feature Registry"}];function N(){let[e,s]=(0,r.useState)("");return(0,r.useEffect)(()=>{let e=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&s(e.target.id)})},{rootMargin:"-20% 0px -70% 0px"});return v.forEach(({id:t})=>{let r=document.getElementById(t);r&&e.observe(r)}),()=>e.disconnect()},[]),(0,t.jsx)("div",{className:"hidden xl:block fixed left-8 top-1/2 -translate-y-1/2 z-40",children:(0,t.jsx)("div",{className:"flex flex-col gap-1 bg-popover/90 backdrop-blur-sm rounded-sm p-2 shadow-sm border border-border",children:v.map(({id:r,label:s})=>(0,t.jsx)("a",{href:`#${r}`,className:`px-3 py-1.5 text-sm rounded-sm transition-colors ${e===r?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-muted"}`,children:s},r))})})}let w=[{title:"No Principled Feature Access",description:"Features are embedded in training jobs. No way to access them during serving without duplicating code."},{title:"Training-Serving Skew",description:"Features computed differently for training vs production. Inconsistent data causes model failures."},{title:"No Feature Reuse",description:"Teams rebuild the same features from scratch. No sharing, no discovery, no governance."},{title:"Data Silos",description:"Customer data lives in dozens of systems. Building ML features requires joining data that was never meant to be joined."}],k=[{icon:d.Zap,title:"Sub-Millisecond Serving",description:"Powered by RonDB, the world's fastest key-value store. 250k+ ops/sec with 7.5ms p99 latency."},{icon:c.Database,title:"Dual Storage System",description:"Online store for low-latency serving, offline store for training. Same features, consistent data."},{icon:o.Clock,title:"Point-in-Time Correct",description:"Generate training datasets that reflect feature state at any historical point. No data leakage."},{icon:b,title:"Feature Reuse",description:"Build features once, use everywhere. Meta reports top 100 features reused across 100+ models."},{icon:u.GitBranch,title:"Data Lineage",description:"Track every feature from raw data to production. Full audit trails for compliance."},{icon:p.BarChart3,title:"Feature Monitoring",description:"Track distributions, detect drift, receive alerts. Ensure models always have reliable inputs."}],S=[{metric:"250k+",label:"ops/sec",detail:"Feature vector lookups"},{metric:"7.5ms",label:"p99 latency",detail:"11 features, ~1KB"}];function z({jsonLdScript:e}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:e}}),(0,t.jsx)(N,{}),(0,t.jsxs)("section",{className:"bg-grain py-16 md:py-24 relative",children:[(0,t.jsx)(n.AnimatedGrainBg,{}),(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-6 relative z-10",children:[(0,t.jsx)("div",{className:"flex justify-center mb-6",children:(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 px-4 py-2 rounded-full border border-primary/30 bg-card/80 backdrop-blur-sm",children:[(0,t.jsx)(c.Database,{size:16,className:"text-primary"}),(0,t.jsx)("span",{className:"text-sm font-medium text-primary",children:"Platform"})]})}),(0,t.jsxs)("h1",{className:"text-4xl md:text-5xl font-bold text-center mb-6 text-foreground",children:["The ",(0,t.jsx)("span",{className:"text-primary",children:"Feature Store"})]}),(0,t.jsxs)("p",{className:"text-lg md:text-xl text-center text-muted-foreground max-w-3xl mx-auto mb-8",children:["The missing data layer for machine learning pipelines. Manage, reuse, and serve features with sub-millisecond latency - powered by ",(0,t.jsx)(a.default,{href:"https://www.rondb.com",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"RonDB"}),", the world's fastest key-value store."]}),(0,t.jsxs)("div",{className:"flex gap-4 justify-center flex-wrap",children:[(0,t.jsx)(i.LinkButton,{href:"https://run.hopsworks.ai",intent:"primary",size:"lg",target:"_blank",children:"Start Building"}),(0,t.jsx)(i.LinkButton,{href:"#overview",intent:"secondary",size:"lg",children:"Learn More"})]})]})]}),(0,t.jsx)("section",{id:"overview",className:"py-24 bg-muted",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl mx-auto text-center mb-16",children:[(0,t.jsx)("h2",{className:"text-3xl font-bold text-foreground mb-6",children:"Life Without a Feature Store"}),(0,t.jsx)("p",{className:"text-lg text-muted-foreground",children:"Data is the hardest part of ML. Teams spend 80% of their time on feature engineering, yet features are duplicated, inconsistent, and impossible to reuse."})]}),(0,t.jsx)("div",{className:"grid md:grid-cols-2 gap-6 mb-16",children:w.map(e=>(0,t.jsx)(l.Card,{className:"p-6 border-l-4 border-l-red-500",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"w-8 h-8 rounded-full bg-red-100 dark:bg-red-500/15 flex items-center justify-center flex-shrink-0",children:(0,t.jsx)(y.AlertTriangle,{size:16,className:"text-red-600 dark:text-red-400"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-semibold text-foreground mb-2",children:e.title}),(0,t.jsx)("p",{className:"text-muted-foreground text-sm",children:e.description})]})]})}
1,e.title))}),(0,t.jsx)("div",{className:"p-8 bg-primary/5 rounded-lg border border-primary/20",children:(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[(0,t.jsx)("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:(0,t.jsx)(j.CheckCircle2,{size:24,className:"text-primary"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-semibold text-foreground mb-1",children:"With a Feature Store"}),(0,t.jsx)("p",{className:"text-foreground",children:"Data Scientists search for features and easily build models with minimal engineering. Features are cached and reused across models. A managed, governed asset for the enterprise."})]})]})})]})}),(0,t.jsx)("section",{id:"architecture",className:"py-24",children:(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-6",children:(0,t.jsxs)("div",{className:"grid md:grid-cols-2 gap-8",children:[(0,t.jsxs)(l.Card,{className:"p-6 border-t-4 border-t-blue-500",children:[(0,t.jsx)("p",{className:"text-sm font-semibold text-blue-600 dark:text-blue-400 uppercase tracking-wide mb-4",children:"Data Engineers"}),(0,t.jsx)("p",{className:"font-semibold text-foreground mb-2",children:"Write to the Feature Store"}),(0,t.jsx)("p",{className:"text-muted-foreground text-sm mb-4",children:"At the end of your feature pipeline, write features to the store instead of project-specific databases. Spark, Pandas, or any DataFrame API."}),(0,t.jsx)("div",{className:"bg-gray-900 rounded p-4 text-sm font-mono text-gray-300",children:(0,t.jsx)("code",{children:"fg.insert(features_df)"})})]}),(0,t.jsxs)(l.Card,{className:"p-6 border-t-4 border-t-green-500",children:[(0,t.jsx)("p",{className:"text-sm font-semibold text-green-600 dark:text-green-400 uppercase tracking-wide mb-4",children:"Data Scientists"}),(0,t.jsx)("p",{className:"font-semibold text-foreground mb-2",children:"Read from the Feature Store"}),(0,t.jsx)("p",{className:"text-muted-foreground text-sm mb-4",children:"Query features by name across any feature group. The query planner handles joins automatically. No SQL required."}),(0,t.jsx)("div",{className:"bg-gray-900 rounded p-4 text-sm font-mono text-gray-300",children:(0,t.jsx)("code",{children:"fv.get_feature_vector(entity_id)"})})]})]})})}),(0,t.jsx)("section",{id:"performance",className:"py-24 bg-gray-900 text-white",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-6",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-4 max-w-3xl mb-16",children:[(0,t.jsxs)("h2",{className:"text-3xl font-bold text-white",children:["Powered by ",(0,t.jsx)(a.default,{href:"https://www.rondb.com",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"RonDB"})]}),(0,t.jsx)("p",{className:"text-lg text-gray-300",children:"The world's fastest key-value store with SQL capabilities. Peer-reviewed benchmarks published and verified."})]}),(0,t.jsx)("div",{className:"grid md:grid-cols-3 gap-8 mb-16",children:S.map(e=>(0,t.jsxs)("div",{className:"rounded-xl border border-white/10 bg-white/5 p-8 text-center",children:[(0,t.jsx)("p",{className:"text-5xl font-bold text-primary mb-2",children:e.metric}),(0,t.jsx)("p",{className:"text-lg font-semibold text-white mb-1",children:e.label}),(0,t.jsx)("p",{className:"text-sm text-gray-400",children:e.detail})]},e.label))}),(0,t.jsxs)("div",{className:"grid md:grid-cols-2 gap-8",children:[(0,t.jsxs)("div",{className:"bg-white/5 rounded-lg p-4",children:[(0,t.jsx)(s.default,{src:"/images/blog/658590409326173d60e21837_2_online-read-latencies_lightbox.png",alt:"Hopsworks vs Feast Latency Comparison",width:600,height:400,className:"w-full rounded"}),(0,t.jsx)("p",{className:"text-sm text-gray-400 mt-4 text-center",children:"P99 latency comparison: Hopsworks vs Feast"})]}),(0,t.jsxs)("div",{className:"bg-white/5 rounded-lg p-4",children:[(0,t.jsx)(s.default,{src:"/images/blog/6585936970cc153e562c8f4d_5_feature-vector-retrieval-latencies_lightbox.png",alt:"Feature Vector Retrieval Latencies",width:600,height:400,className:"w-full rounded"}),(0,t.jsx)("p",{className:"text-sm text-gray-400 mt-4 text-center",children:"Feature vector retrieval: batch size scaling"})]})]}),(0,t.jsx)("div",{className:"mt-12 text-center",children:(0,t.jsxs)(a.default,{href:"https://github.com/featurestoreorg/featurestore-benchmarks",target:"_blank",className:"text-primary hover:underline inline-flex items-center gap-2",children:["View Be
1nchmark Code on GitHub ",(0,t.jsx)(h.ArrowRight,{size:16})]})})]})}),(0,t.jsx)("section",{id:"online-offline",className:"py-24",children:(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-6",children:(0,t.jsxs)("div",{className:"grid lg:grid-cols-2 gap-16 items-center",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 px-3 py-1 bg-orange-100 dark:bg-orange-500/15 rounded-full mb-6",children:[(0,t.jsx)(x.Layers,{size:14,className:"text-orange-600 dark:text-orange-400"}),(0,t.jsx)("span",{className:"text-sm font-medium text-orange-600 dark:text-orange-400",children:"Dual Storage"})]}),(0,t.jsx)("h2",{className:"text-3xl font-bold text-foreground mb-6",children:"Online + Offline Store"}),(0,t.jsx)("p",{className:"text-lg text-muted-foreground mb-6",children:"A transparent dual storage system. The offline store for high-bandwidth training, the online store for low-latency serving. Same features, consistent data."}),(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)(l.Card,{className:"p-4 border-l-4 border-l-blue-500",children:[(0,t.jsx)("p",{className:"font-semibold text-foreground mb-1",children:"Offline Store"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Apache Hudi tables on HopsFS (S3/Azure). High bandwidth for training and batch inference. Time-travel for reproducibility."})]}),(0,t.jsxs)(l.Card,{className:"p-4 border-l-4 border-l-green-500",children:[(0,t.jsx)("p",{className:"font-semibold text-foreground mb-1",children:"Online Store"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"RonDB key-value store. Sub-millisecond latency for real-time serving. Stores only latest feature values per primary key."})]})]})]}),(0,t.jsxs)("div",{className:"bg-muted rounded-lg p-6",children:[(0,t.jsx)(s.default,{src:"/images/blog/628635c7bb7dd85c4e2eb5e3_fast-access-blog-01_lightbox.png",alt:"Hopsworks Feature Store Dual Storage",width:600,height:400,className:"w-full rounded"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground mt-4",children:"HSFS abstracts the dual storage system - write once, serve anywhere."})]})]})})}),(0,t.jsx)("section",{id:"capabilities",className:"py-24 bg-muted",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-6",children:[(0,t.jsxs)("div",{className:"text-center mb-16",children:[(0,t.jsx)("h2",{className:"text-3xl font-bold text-foreground mb-6",children:"Enterprise Feature Management"}),(0,t.jsx)("p",{className:"text-lg text-muted-foreground max-w-2xl mx-auto",children:"Everything you need to manage features at scale - from ingestion to serving to monitoring."})]}),(0,t.jsx)("div",{className:"grid md:grid-cols-2 lg:grid-cols-3 gap-6",children:k.map(e=>(0,t.jsx)(l.Card,{className:"p-6",children:(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,t.jsx)("div",{className:"w-10 h-10 rounded-sm bg-primary/10 flex items-center justify-center",children:(0,t.jsx)(e.icon,{size:20,className:"text-primary"})}),(0,t.jsx)("p",{className:"font-semibold text-foreground",children:e.title}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:e.description})]})},e.title))})]})}),(0,t.jsx)("section",{id:"registry",className:"py-24",children:(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-6",children:(0,t.jsxs)("div",{className:"grid lg:grid-cols-2 gap-16 items-center",children:[(0,t.jsxs)("div",{className:"order-2 lg:order-1 bg-muted rounded-lg p-6",children:[(0,t.jsx)(s.default,{src:"/images/blog/66c70dcd309d9964c3dacb06_61bb49092cbbb4891f51675d_new20feature20store20ui202021_lighbox.png",alt:"Feature Registry UI",width:600,height:400,className:"w-full rounded"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground mt-4",children:"Feature Registry: search, discover, and analyze features across your organization."})]}),(0,t.jsxs)("div",{className:"order-1 lg:order-2",children:[(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 px-3 py-1 bg-purple-100 dark:bg-purple-500/15 rounded-full mb-6",children:[(0,t.jsx)(g.Search,{size:14,className:"text-purple-600 dark:text-purple-400"}),(0,t.jsx)("span",{className:"text-sm font-medium text-purple-600 dar
1k:text-purple-400",children:"Discovery"})]}),(0,t.jsx)("h2",{className:"text-3xl font-bold text-foreground mb-6",children:"Feature Registry"}),(0,t.jsx)("p",{className:"text-lg text-muted-foreground mb-6",children:"When starting a new project, Data Scientists scan the registry for existing features. Only add new features that don't already exist."}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"w-8 h-8 rounded-full bg-purple-100 dark:bg-purple-500/15 flex items-center justify-center",children:(0,t.jsx)(g.Search,{size:16,className:"text-purple-600 dark:text-purple-400"})}),(0,t.jsx)("p",{className:"text-foreground",children:"Keyword search on metadata"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"w-8 h-8 rounded-full bg-purple-100 dark:bg-purple-500/15 flex items-center justify-center",children:(0,t.jsx)(p.BarChart3,{size:16,className:"text-purple-600 dark:text-purple-400"})}),(0,t.jsx)("p",{className:"text-foreground",children:"Automatic feature analysis & statistics"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"w-8 h-8 rounded-full bg-purple-100 dark:bg-purple-500/15 flex items-center justify-center",children:(0,t.jsx)(f.RefreshCw,{size:16,className:"text-purple-600 dark:text-purple-400"})}),(0,t.jsx)("p",{className:"text-foreground",children:"Version comparison & evolution tracking"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"w-8 h-8 rounded-full bg-purple-100 dark:bg-purple-500/15 flex items-center justify-center",children:(0,t.jsx)(m.Shield,{size:16,className:"text-purple-600 dark:text-purple-400"})}),(0,t.jsx)("p",{className:"text-foreground",children:"Access control & governance"})]})]})]})]})})}),(0,t.jsx)("section",{className:"py-24 bg-muted",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-6",children:[(0,t.jsxs)("div",{className:"text-center mb-16",children:[(0,t.jsx)("h2",{className:"text-3xl font-bold text-foreground mb-6",children:"Economies of Scale for ML"}),(0,t.jsx)("p",{className:"text-lg text-muted-foreground max-w-3xl mx-auto",children:"The more features in your store, the easier it becomes to build new models. Uber reported 10,000+ features in their feature store in 2017."})]}),(0,t.jsxs)("div",{className:"bg-card rounded-lg p-8 shadow-sm border border-border",children:[(0,t.jsx)(s.default,{src:"/images/blog/61b8af9a90558f2fcfb936ec_nujisziyc2apkuitwvr0qx3uv8_rrkirghsudugcdrr7kzuw-ury-c4rx4or3t2aoul3ivi6_viqwqpbdyysltzyqltj8nx7y5ofiflknzgacilozqqwxygciyuarv7cbggim7g7.png",alt:"Centralized Feature Store",width:1200,height:400,className:"w-full rounded"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground mt-4 text-center",children:"Centralizing feature storage reduces ramp-up time for new models and projects."})]})]})}),(0,t.jsx)("section",{className:"py-24 bg-gray-900",children:(0,t.jsxs)("div",{className:"max-w-4xl mx-auto px-6 text-center",children:[(0,t.jsx)("h2",{className:"text-3xl font-bold text-white mb-6",children:"The Missing Data Layer for ML"}),(0,t.jsx)("p",{className:"text-xl text-gray-300 mb-8",children:"Stop rebuilding features from scratch. Start sharing, reusing, and serving features with enterprise-grade infrastructure."}),(0,t.jsxs)("div",{className:"flex justify-center gap-4",children:[(0,t.jsx)(i.LinkButton,{href:"https://run.hopsworks.ai",intent:"primary",size:"lg",target:"_blank",children:"Start Free"}),(0,t.jsx)(i.LinkButton,{href:"/contact/main",intent:"secondary",size:"lg",onDark:!0,children:"Request Demo"})]})]})})]})}e.s(["default",()=>z],64428)}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.