1import{g as i,r as c,y as m,j as e,z as p,l as r,D as u,G as b,L as y,E as g}from"./index-DrsfCwz3.js";import{G as f}from"./GlassCard-tSgSoSpV.js";import{S as w}from"./Seo-DX61-3u-.js";import{C as j}from"./cpu-BcZvY4vO.js";/** 2 * @license lucide-react v0.460.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const k=i("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"}]]);/** 7 * @license lucide-react v0.460.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const d=i("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** 12 * @license lucide-react v0.460.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const v=i("Network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);/** 17 * @license lucide-react v0.460.0 - ISC 18 * 19 * This source code is licensed under the ISC license. 20 * See the LICENSE file in the root directory of this source tree. 21 */const N=i("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]),A=()=>{const[t,x]=c.useState(""),[a,h]=c.useState("All"),n=c.useMemo(()=>m.filter(s=>{const o=s.title.toLowerCase().includes(t.toLowerCase())||s.description.toLowerCase().includes(t.toLowerCase())||s.tags.join(" ").toLowerCase().includes(t.toLowerCase())||s.tech.join(" ").toLowerCase().includes(t.toLowerCase()),l=a==="All"||s.tech.includes(a)||s.tags.includes(a);return o&&l}),[t,a]);return e.jsxs(e.Fragment,{children:[e.jsx(w,{title:"Project Case Studies",description:"AI, software, data, geospatial, civic technology, and creative coding case studies by Gedion Disassa.",canonical:p("/projects")}),e.jsxs("div",{className:"max-w-6xl w-full flex flex-col pt-12 pb-24",children:[e.jsxs("div",{className:"sticky top-0 z-30 py-4 mb-6 flex flex-col md:flex-row gap-6 items-center px-4 bg-white/40 backdrop-blur-xl border-b border-slate-100/50",children:[e.jsxs("div",{className:"relative flex-1 w-full group",children:[e.jsx(N,{className:"absolute left-5 top-1/2 -translate-y-1/2 text-slate-400 group-focus-within:text-blue-600 transition-colors",size:20}),e.jsx("input",{value:t,onChange:s=>x(s.target.value),placeholder:"Search by system, tech, or concept...",className:"w-full bg-slate-50 border border-slate-200 rounded-[1.5rem] py-4 pl-14 pr-6 text-slate-900 focus:outline-none focus:border-blue-400 focus:ring-4 focus:ring-blue-500/5 transition-all shadow-xl shadow-slate-200/50"})]}),e.jsx("div",{className:"flex gap-2 overflow-x-auto pb-2 scrollbar-hide w-full md:w-auto",children:["All","Python","Rust","Go","AI Infra"].map(s=>e.jsx(r.button,{whileTap:{scale:.95},onClick:()=>h(s),className:`px-5 py-2.5 rounded-2xl text-xs font-black tracking-widest uppercase transition-all whitespace-nowrap border ${a===s?"bg-slate-900 text-white border-slate-900 shadow-xl":"bg-white text-slate-500 border-slate-200 hover:border-slate-400 hover:bg-slate-50"}`,children:s},s))})]}),e.jsxs("div",{className:"px-4",children:[e.jsxs("header",{className:"mb-8 sr-only",children:[e.jsx("h2",{children:"Gedion Disassa's Portfolio Projects"}),e.jsx("p",{children:"A collection of high-performance backend systems and AI research projects."})]}),e.jsx(r.div,{layout:!0,className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:e.jsx(u,{mode:"popLayout",children:n.map((s,o)=>e.jsx(r.div,{layout:!0,initial:{opacity:0,scale:.9,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.9,y:10},transition:{delay:o*.05},whileHover:{y:-5},children:e.jsxs(f,{className:"!p-6 h-full border-slate-100 hover:border-blue-300 transition-colors cursor-default",children:[e.jsxs("div",{className:"flex justify-between items-start mb-4",children:[e.jsx("div",{className:"p-2.5 bg-blue-50 rounded-xl text-blue-600",children:s.tags.includes("Database")?e.jsx(k,{size:20}):s.tags.includes("Network")?e.jsx(v,{size:20}):e.jsx(j,{size:20})}),e.jsx("div",{className:"flex gap-3 text-slate-400",children:s.link&&e.jsx("a",{href:s.link,target:"_blank",rel:"noreferrer","aria-label":`Open ${s.title}`,className:"hover:text-slate-900 transition-colors",children:s.link.includes("github.com")?e.jsx(b,{size:18}):e.jsx(d,{size:18})})})]}),e.jsx("h3",{className:"text-xl font-bold text-slate-900 mb-2 tracking-tight",children:s.title}),e.jsx("p",{className:"text-slate-500 text-sm mb-6 leading-relaxed line-clamp-3",children:s.description}),e.jsxs(y,{to:g(s),className:"inline-flex items-center gap-2 text-[10px] font-black uppercase tracking-widest text-blue-600 hover:text-slate-900 mb-6",children:["Case Study ",e.jsx(d,{size:12})]}),e.jsx("div",{className:"flex flex-wrap gap-2 mt-auto",children:s.tech.map(l
21=>e.jsx("span",{className:"px-2 py-0.5 rounded-md bg-slate-100 border border-slate-200 text-[10px] font-mono text-slate-500",children:l},l))})]})},s.id))})}),n.length===0&&e.jsxs(r.div,{initial:{opacity:0},animate:{opacity:1},className:"py-20 text-center space-y-4",children:[e.jsx("div",{className:"text-slate-200 text-5xl font-black",children:"404"}),e.jsx("p",{className:"text-slate-400",children:"No matching projects found."})]})]})]})]})};export{A as default};
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.