PageSourceSearch

https://xeinebiu.com/_next/static/chunks/app/page-1f64b6923429233d.js

js xeinebiu.com collected 2026-10-05 06:57:20 UTC 37,940 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{6588:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>G});var r=a(5155),i=a(2115),s=a(9937),n=a(5336);let l=[{id:"about",label:"About"},{id:"work",label:"Experience"},{id:"products",label:"Products"},{id:"open-source",label:"Open Source"},{id:"skills",label:"Capabilities"},{id:"contact",label:"Contact"}],o=({theme:e,onToggleTheme:t})=>{let[a,s]=(0,i.useState)(""),[o,d]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{let e=new IntersectionObserver(e=>{let t=e.filter(e=>e.isIntersecting).sort((e,t)=>t.intersectionRatio-e.intersectionRatio);t[0]&&s(t[0].target.id)},{rootMargin:"-45% 0px -45% 0px",threshold:[0,.25,.5,1]});return l.forEach(({id:t})=>{let a=document.getElementById(t);a&&e.observe(a)}),()=>e.disconnect()},[]),(0,i.useEffect)(()=>{let e=()=>d(window.scrollY>24);return e(),window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),(0,r.jsx)("header",{className:`fixed top-0 inset-x-0 z-50 ${o?"backdrop-blur-md bg-[var(--theme-background)]/80 border-b border-[var(--theme-border)]":"border-b border-transparent"}`,children:(0,r.jsx)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16",children:(0,r.jsxs)("div",{className:"flex items-center justify-between h-16",children:[(0,r.jsxs)("button",{onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),className:"font-bold tracking-tight text-[var(--theme-foreground)] text-lg","aria-label":"Back to top",children:["Arzan",(0,r.jsx)("span",{className:"text-[var(--theme-accent)]",children:"."}),"Nebiu"]}),(0,r.jsx)("nav",{className:"hidden md:flex items-center gap-7",children:l.map(({id:e,label:t})=>{let i=a===e;return(0,r.jsxs)("button",{onClick:()=>{document.getElementById(e)?.scrollIntoView({behavior:"smooth",block:"start"})},className:"kicker relative text-[var(--theme-foreground)] hover:text-[var(--theme-accent)]",style:{opacity:i?1:.55},children:[t,i&&(0,r.jsx)(n.P.span,{layoutId:"nav-underline",className:"absolute -bottom-1.5 left-0 right-0 h-[2px] bg-[var(--theme-accent)]"})]},e)})}),(0,r.jsxs)("button",{onClick:t,className:"kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)] flex items-center gap-2","aria-label":"Toggle color theme",children:["dark"===e?"Light":"Dark",(0,r.jsx)("span",{className:"text-[var(--theme-accent)]",children:"●"})]})]})})})},d={main:{title:"Arzan Nebiu",name:"Arzan Nebiu",email:"[email protected]",phone:"+41 77 944 9306",location:"St. Gallen, Switzerland",role:"Senior Software Engineer"},socials:{github:"https://github.com/xeinebiu",githubHandle:"xeinebiu",linkedin:"https://www.linkedin.com/in/xeinebiu/",instagram:"https://instagram.com/xeinebiu",facebook:"https://facebook.com/xeinebiu"},profile:{title:"Full-Stack & Mobile Product Engineer",lead:"About me",description:"I turn messy product problems into polished, reliable software people actually use. My deepest strength is mobile and frontend product architecture: shaping workflows, design systems, state/data layers, performance, and release quality. I also work comfortably across backend modernization when the product needs it, especially around APIs, caching, concurrency issues, and database bottlenecks."},skills:{languages:["TypeScript","JavaScript","Kotlin","Java","Dart","C#","SQL"],frameworks:["Flutter","React","Next.js","Angular","AngularJS","jQuery","Node.js","NestJS",".NET","Ionic","NativeScript","Electron","Tailwind","Recharts"],technologies:["Android SDK","Coroutines","Flows","Hilt","Dagger","Room","Retrofit","ViewModels","ExoPlayer","ML Kit","Firebase","Entity Framework","Prisma","PostgreSQL","MSSQL","Redis","OpenAPI"],tools:["Git","Docker","Gradle","Webpack","Android Studio","VS Code","Postman","Figma"]},languages:[{name:"Albanian",level:"Native"},{name:"English",level:"Fluent"},{name:"German",level:"B1"},{name:"Macedonian",level:"B1"}],projects:[{title:"DJENETE",description:"A wedding planning SaaS that brings guest management, budgets, vendors, timelines, RSVP, seating, and invitations into one coordinated workflow.",problem:"Wedding planning quickly spreads across chats, spreadsheets, vendor notes, budget lists, and guest updates.",audience:"Couples planning a wedding together, with workflows that also account for vendors and family input.",outcome:"A structured planning system that reduces context switching and keeps the couple's core decisions in one place.",architecture:"Next.js website, Vite/React frontend, and NestJS backend with typed planning workflows, collaboration, invitation management, and Stripe payments/subscriptions.",role:"Defined the product concept, mapped the core workflows, and built the SaaS experience end to end.",technologies:["Next.js","Vite","React","NestJS","TypeScript","Stripe"],link:"https://djenete.com/en",linkText:"Visit Website",image:"./djenete.png",featured:!0,category:"Web App",detailedFeatures:["Guest list, RSVP & seating charts","Budget planner that tracks every cent","Vendor manager & wedding timeline","Invitation & stationery designer","Real-time partner collaboration"],targetAudience:"Couples planning their wedding"},{title:"Gallerif",description:"A secure photo sharing platform for photographers who need private client galleries, password protection, white-label branding, and client-side decryption.",problem:"Photographers need to deliver private client galleries without losing brand control or exposing sensitive shoots.",audience:"Professional photographers working with wedding, commercial, school, and private client galleries.",outcome:"Encrypted, password-protected, white-label galleries with fast delivery and client-side decryption.",architecture:"Next.js website, React frontend, and NestJS backend with AES-256 encryption, CDN-backed delivery, Stripe payments/subscriptions, and a zero-knowledge client-decryption flow.",role:"Defined the secure sharing workflow, built the product experience, and balanced trust, branding, and delivery speed.",technologies:["Next.js","React","NestJS","TypeScript","AES-256","CDN","Stripe"],link:"https://gallerif.com",linkText:"Visit Website",image:"./gallerif-placeholder.png",featured:!0,category:"Web App",detailedFeatures:["End-to-end AES-256 encryption","Password-protected client galleries","Full white-label branding support","Global CDN for fast delivery","Client-side decryption (zero-knowledge)"],targetAudience:"Professional photographers (wedding, commercial, school)"},{title:"AN Player",description:"A native Android streaming player built around plugins, media playback quality, offline support, and a maintainable Kotlin architecture.",problem:"Media apps often lock users into fixed sources and brittle playback flows.",audience:"Android users who want flexible music and video playback without being tied to one fixed content source.",outcome:"A long-running app with 60K+ downloads, 400-500 monthly active users, a 4.1 rating, extensible sources, stable playback, streaming, and offline support.",architecture:"Native Kotlin app using MVVM, Coroutines, Hilt, ExoPlayer, Firebase, and a plugin-based source layer.",role:"Owned the product over multiple years, from architecture and playback quality to UX details and release maintenance.",technologies:["Kotlin","Coroutines","MVVM","ExoPlayer","Hilt","Firebase"],link:"https://anplayer.xeinebiu.com",linkText:"Visit Website",image:"./anplayer.jpg",featured:!0,category:"Mobile App",detailedFeatures:["Plugin-based architecture for extensibility","Material Design 3 themed UI","Smooth streaming with ExoPlayer","Offline playback support"],targetAudience:"Music and video streaming enthusiasts"},{title:"Zoraxy Analytics Dashboard",description:"A local-first analytics dashboard for Zoraxy reverse proxy logs, focused on operational visibility without sending logs to a third-party service.",problem:"Reverse proxy logs contain useful operational signals, but teams often need external analytics tools to read them clearly.",audience:"Sysadmins, developers, security team
1s, and DevOps/SRE engineers running Zoraxy.",outcome:"Local-first analytics with overview metrics, log exploration, IP, host, and file analysis without sending data away.",architecture:"React and TypeScript dashboard with local log parsing, tabbed analysis views, filtering, and Recharts visualizations.",role:"Designed the information architecture, built the interactive dashboards, and kept the privacy model local by default.",technologies:["React","TypeScript","Recharts","Tailwind","Zoraxy"],link:"https://zoraxy.xeinebiu.com/",linkText:"Visit Website",image:"./zoraxy-placeholder.png",featured:!0,category:"Web App",detailedFeatures:["Local data processing for complete privacy","5 specialized analysis tabs (Overview, Logs, IPs, Hosts, Files)","Interactive Recharts visualizations","Real-time log filtering and search"],targetAudience:"Sysadmins, developers, security teams, DevOps/SRE engineers"}],experience:[{title:"Senior Software Engineer",company:"Kaspar&",period:"Aug 2024 - Present",location:"St. Gallen, Switzerland",highlights:["Help shape the Kaspar& and Liberty app experience from product requirements through mobile and web implementation","Drive a full app redesign focused on stability, usability, visual consistency, and stronger confidence with bank partners","Build and maintain the design system that now powers the full app experience: components, themes, motion, and interaction patterns","Rebuild the data layer around query-based caching, generated OpenAPI clients, and automatic refresh as Sentry crash-free users improved from 75% to 93%","Cut slow startup work by moving from 20+ sequential app-loading calls toward backend-owned state and demand-driven loading","Tune the product for smoother interactions with minimal frame drops on 120Hz devices, including scrolling, transitions, frost effects, and theme toggles","Make the apps work naturally in German, Italian, French, and English with responsive layouts that respect text scaling and zoom"]},{title:"Lead Engineer",company:"ServiceOcean",period:"Aug 2022 - Aug 2024",location:"St. Gallen, Switzerland",highlights:["Led a team of four through delivery planning, hiring, performance feedback, stakeholder communication, code reviews, shipping features, and mentoring","Diagnosed a production voice server handling roughly 10K peak-hour call requests that stalled around 100-120 concurrent requests while CPU stayed under 10%","Removed shared request bottlenecks by isolating per-request state, letting the .NET backend use CPU capacity again and respond without thread starvation","Tracked down random server crashes to an Entity Framework exception being sent to Sentry with circular references, causing recursive serialization and runaway memory usage","Modernized the product architecture by splitting a monolith into clearer voice, AI, and frontend domains with tenant-specific features across teams and customers","Moved the frontend from Razor pages to React, using modular boundaries and micro-frontend ideas where tenants needed different capabilities","Made key workflows noticeably faster by rewriting Entity Framework queries that caused excessive database round-trips","Worked across C# / .NET Core, React, TypeScript, MSSQL, and Entity Framework to keep delivery moving end to end"]},{title:"Senior Software Engineer",company:"Sablono",period:"Oct 2021 - Jul 2022",location:"Berlin, Germany",highlights:["Drove the migration of the web app from AngularJS to modern Angular and TypeScript","Ran it incrementally as micro-frontends, embedding new Angular code inside the existing AngularJS shell so both frameworks ran side by side during the migration","Migrated the jobsite mobile app off legacy NativeScript to Flutter, keeping it offline-first for large stadium and hotel projects with thousands of field workers","Helped preserve progress locally and sync it back online once connectivity returned, reducing the risk of lost field updates","Worked across AngularJS, Angular, TypeScript, NativeScript, Flutter and Dart, and native Android with Kotlin"]},{title:"Freelancer (Android/Web)",company:"Upwork",period:"Jan 2021 - Aug 2022",location:"Remote",highlights:["
1Scoped product needs directly with clients, translated vague ideas into buildable plans, and shipped Android and cross-platform apps end to end","Built product prototypes and production apps including an on-device machine-learning translator, embedded Android server, and virtual-space app","Delivered web and desktop tools such as a keyword analytics platform and a multi-account Google Photos manager in Electron","Used my own open-source Android libraries to add media playback, streaming, and audio effects faster and with less risk","Rescued legacy apps by fixing platform deprecations, improving stability, and bringing them back in line with Play Store requirements"]},{title:"Senior Android Developer",company:"Check24",period:"Feb 2021 - Sep 2021",location:"Berlin, Germany",highlights:["Built features for Check24's Consumer and Service Provider Android apps, part of Germany's largest comparison platform","Helped migrate the app from Java to Kotlin, modernizing it with Coroutines, Flows, Room, ViewModels, and Dagger","Mentored four junior Android developers through feature work, Kotlin adoption, and modern Android architecture patterns","Modularized the build with custom Gradle scripts to speed up development","Used Coroutines to untangle and fix concurrency issues"]},{title:"Full Stack Developer",company:"Escriba AG",period:"Jan 2018 - Feb 2021",location:"Berlin, Germany",highlights:["Built ESCRIBA's enterprise document-automation product as a full-stack engineer, in Java on the backend and Angular with TypeScript on the front end","Developed up to nine micro-apps within the product, unifying them with a shared design system and reusable component library","Worked across the stack against REST APIs, shipping features end to end","Contributed to architecture and design decisions across three years of Agile delivery","Helped establish ESCRIBA's branch office in North Macedonia, taking part in hiring and standing up the new team"]},{title:"Full Stack Developer",company:"Turbosoft",period:"Jan 2015 - Apr 2019",location:"Tetovo, Macedonia",highlights:["Built web and mobile applications using .NET, AngularJS, and Ionic","Delivered quiz, warehouse, and appointment systems","Designed data models and implemented efficient API communication between frontend and backend layers"]}],education:[{degree:"Information Technology",institution:"University of Tetovo",period:"2014–2017",location:"Tetovo, Macedonia"},{degree:"Medicine",institution:"Nikola Stejn",period:"2010–2014",location:"Tetovo, Macedonia"}]},c=[{value:10,suffix:"+",label:"years building products"},{value:20,suffix:"+",label:"projects shipped"},{value:4,suffix:"",label:"owned products"},{value:15,suffix:"",label:"original public repos"}],m=[{repo:"android-suspend-dialogs",displayName:"Android Suspendable Dialogs",description:"Display Android dialogs by suspending the coroutine until they finish.",language:"Kotlin",href:"https://github.com/xeinebiu/android-suspend-dialogs",fallbackStars:33},{repo:"android_audioeffects",displayName:"Audio Effect Manager",description:"Add audio effects to music apps for a richer sound experience.",language:"Kotlin",href:"https://github.com/xeinebiu/android_audioeffects",fallbackStars:16},{repo:"android_floating_video",displayName:"Floating Video Player",description:"ExoPlayer-based player with floating-window (PiP) playback.",language:"Kotlin",href:"https://github.com/xeinebiu/android_floating_video",fallbackStars:10},{repo:"ts_injector",displayName:"TypeScript Injector",description:"Small dependency injection container for TypeScript projects.",language:"TypeScript",href:"https://github.com/xeinebiu/ts_injector",fallbackStars:7},{repo:"ts-iterable",displayName:"TypeScript Iterable",description:"Iterable and stream utilities for TypeScript applications.",language:"TypeScript",href:"https://github.com/xeinebiu/ts-iterable",fallbackStars:3},{repo:"react-mvvm",displayName:"React MVVM",description:"View-model pattern for separating UI from business logic in React.",language:"TypeScript",href:"https://github.com/xeinebiu/react-mvvm",fallbackStars:2},{repo:"android_media_stream",displayName:"Media Stream",description:"Stream videos from an Android device over the network.",language:"Kotlin",href:"https://github.com/xeinebiu/android_media_stream",fallbackStars:1}],p=[{displayName:"Dependy",description:"A simple dependency injection library for Dart that simplifies app architecture and testing.",language:"Dart",href:"https://dependy.xeinebiu.com",badge:"Website"},{displayName:"Linked PageView",description:"Synchronize scroll activity across multiple Flutter PageViews for a seamless UI.",language:"Dart",href:"https://pub.dev/packages/linked_pageview",badge:"pub.dev"}],h=[.22,1,.36,1],u=()=>{let{main:e,socials:t}=d,a=e=>({initial:{opacity:0,y:20}
1,animate:{opacity:1,y:0},transition:{duration:.6,ease:h,delay:e}});return(0,r.jsxs)("section",{id:"hero",className:"relative min-h-screen flex flex-col justify-center bg-[var(--theme-background)]",children:[(0,r.jsxs)("div",{className:"mx-auto w-full max-w-[1280px] px-6 md:px-10 lg:px-16 pt-28 pb-20",children:[(0,r.jsxs)(n.P.div,{...a(0),className:"flex flex-wrap items-center justify-between gap-4 mb-12 md:mb-20",children:[(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:e.role}),(0,r.jsxs)("span",{className:"kicker text-[var(--theme-muted)]",children:[e.location," \xb7 @",t.githubHandle]})]}),(0,r.jsxs)(n.P.h1,{...a(.08),className:"display-xl text-[var(--theme-foreground)] uppercase",children:["Arzan",(0,r.jsx)("br",{}),"Nebiu",(0,r.jsx)("span",{className:"text-[var(--theme-accent)]",children:"."})]}),(0,r.jsxs)(n.P.p,{...a(.16),className:"mt-8 max-w-2xl text-xl md:text-2xl text-[var(--theme-muted)] leading-snug",children:["I build polished web and mobile products from"," ",(0,r.jsx)("span",{className:"text-[var(--theme-foreground)]",children:"idea to launch"}),"."]}),(0,r.jsxs)(n.P.div,{...a(.24),className:"mt-12 flex flex-wrap gap-8",children:[(0,r.jsx)("a",{href:"#products",className:"kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)] border-b-2 border-[var(--theme-accent)] pb-1",children:"View work →"}),(0,r.jsx)("a",{href:"#contact",className:"kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)] border-b-2 border-transparent hover:border-[var(--theme-accent)] pb-1",children:"Get in touch →"})]})]}),(0,r.jsx)(n.P.div,{...a(.4),className:"absolute bottom-8 left-1/2 -translate-x-1/2",children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-muted)]",children:"Scroll ↓"})})]})},x=[.22,1,.36,1],g=({children:e,className:t,delay:a=0,y:i=16,as:s="div"})=>{let l=n.P[s];return(0,r.jsx)(l,{className:t,initial:{opacity:0,y:i},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-10% 0px"},transition:{duration:.6,ease:x,delay:a},children:e})},b=()=>{let{profile:e}=d;return(0,r.jsx)("section",{id:"about",className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-24 md:py-32",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"01 / About"})}),(0,r.jsxs)("div",{className:"mt-10 grid grid-cols-1 lg:grid-cols-12 gap-10 lg:gap-12",children:[(0,r.jsx)(g,{className:"lg:col-span-4",delay:.05,children:(0,r.jsx)("img",{src:"./profile.jpg",alt:"Arzan Nebiu",width:480,height:600,loading:"lazy",className:"portrait w-full aspect-[4/5] object-cover"})}),(0,r.jsxs)("div",{className:"lg:col-span-8",children:[(0,r.jsx)(g,{children:(0,r.jsx)("p",{className:"display-l text-[var(--theme-foreground)] max-w-3xl",children:e.lead})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsx)("p",{className:"mt-8 max-w-2xl text-lg text-[var(--theme-muted)] leading-relaxed",children:e.description})})]})]})]})})};var f=a(8310),v=a(1792),y=a(9303);let j=new Intl.NumberFormat("en-US"),k=({value:e,className:t,durationMs:a=1200})=>{let s=(0,f.I)(),n=(0,i.useRef)(null),l=(0,v.W)(n,{once:!0,margin:"-10% 0px"}),[o,d]=(0,i.useState)(0);return(0,i.useEffect)(()=>{if(s)return void d(e);if(!l)return;let t=(0,y.i)(0,e,{duration:a/1e3,ease:[.22,1,.36,1],onUpdate:e=>d(Math.round(e))});return()=>t.stop()},[l,e,a,s]),(0,r.jsx)("span",{ref:n,className:t,children:j.format(o)})},w=()=>(0,r.jsx)("section",{className:"bg-[var(--theme-foreground)] text-[var(--theme-background)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-16 md:py-20",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker",style:{color:"var(--theme-accent)"},children:"By the numbers"})}),(0,r.jsx)("div",{className:"mt-10 grid grid-cols-2 lg:grid-cols-4 gap-x-8 gap-y-12",children:c.map((e,t)=>(0,r.jsx)(g,{delay:.05*t,children:(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"stat-number",children:[e.prefix,(0,r.jsx)(k,{value:e.value}),e.suffix]}),(0,r.jsx)("p",{className:"mt-3 font-mono text-xs uppercase tracking-widest opacity-70",children:e.label})]})},t))})]})}),N=()=>(0,r.jsx)("section",{id:"work",className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-24 md:py-32",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"02 / Work"})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsx)("h2",{className:"mt-6 display-l text-[var(--theme-foreground)]",children:"Experience"})}),(0,r.jsx)("div",{className:"mt-14 border-t border-[var(--theme-border)]",children:d.experience.map((e,t)=>(0,r.jsx)(g,{as:"div",delay:.04*Math.min(t,4),children:(0,r.jsxs)("article",{className:"row-hover group grid grid-cols-1 md:grid-cols-12 gap-3 md:gap-6 py-8 border-b border-[var(--theme-border)] hover:bg-[var(--theme-surface)] px-3 -mx-3",children:[(0,r.jsxs)("div",{className:"md:col-span-3",children:[(0,r.jsx)("p",{className:"kicker text-[var(--theme-muted)]",children:e.period}),(0,r.jsx)("p",{className:"mt-2 font-mono text-xs text-[var(--theme-muted)]",children:e.location})]}),(0,r.jsxs)("div",{className:"md:col-span-9",children:[(0,r.jsx)("h3",{className:"text-2xl md:text-3xl font-bold text-[var(--theme-foreground)] group-hover:text-[var(--theme-accent)] tracking-tight",children:e.company}),(0,r.jsx)("p",{className:"mt-1 text-lg font-medium text-[var(--theme-foreground)]",children:e.title}),(0,r.jsx)("ul",{className:"mt-4 space-y-2 max-w-2xl",children:e.highlights.map((e,t)=>(0,r.jsxs)("li",{className:"flex gap-3 text-[var(--theme-muted)] leading-relaxed",children:[(0,r.jsx)("span",{className:"text-[var(--theme-accent)] mt-1 shrink-0",children:"›"}),(0,r.jsx)("span",{children:e})]},t))})]})]})},t))})]})}),S=[["Problem","problem"],["Audience","audience"],["Outcome","outcome"],["Architecture","architecture"],["Build role","role"]],A=({project:e,index:t})=>{let a=t%2==1,i=S.flatMap(([t,a])=>{let r=e[a];return r?[{label:t,value:r}]:[]});return(0,r.jsxs)("article",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12 items-center py-16 md:py-24 border-b border-[var(--theme-border)]",children:[(0,r.jsx)(g,{className:`lg:col-span-7 ${a?"lg:order-2":""}`,children:(0,r.jsx)("a",{href:e.link,target:"_blank",rel:"noopener noreferrer",className:"block group",children:(0,r.jsx)("div",{className:"overflow-hidden border border-[var(--theme-border)] bg-[var(--theme-surface)]",children:(0,r.jsx)("img",{src:e.image,alt:e.title,loading:"lazy",className:"w-full aspect-[16/10] object-cover transition-transform duration-500 group-hover:scale-[1.03]"})})})}),(0,r.jsxs)("div",{className:`lg:col-span-5 ${a?"lg:order-1":""}`,children:[(0,r.jsx)(g,{children:(0,r.jsxs)("div",{className:"flex items-center gap-4",children:[(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"Shipped product"}),e.year&&(0,r.jsx)("span",{className:"font-mono text-xs text-[var(--theme-muted)]",children:e.year})]})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsx)("h3",{className:"mt-4 display-l text-[var(--theme-foreground)]",children:e.title})}),(0,r.jsx)(g,{delay:.1,children:(0,r.jsx)("p",{className:"mt-5 text-[var(--theme-muted)] leading-relaxed",children:e.description})}),i.length>0&&(0,r.jsx)(g,{delay:.12,children:(0,r.jsx)("dl",{className:"mt-6 space-y-4 border-t border-[var(--theme-border)] pt-5",children:i.map(e=>(0,r.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-12 gap-1 sm:gap-4",children:[(0,r.jsx)("dt",{className:"sm:col-span-4 font-mono text-[0.68rem] uppercase tracking-widest text-[var(--theme-accent)]",children:e.label}),(0,r.jsx)("dd",{className:"sm:col-span-8 text-sm leading-relaxed text-[var(--theme-muted)]",children:e.value})]},e.label))})}),(0,r.jsx)(g,{delay:.14,children:(0,r.jsx)("div",{className:"mt-6 flex flex-wrap gap-2",children:e.technologies.map((e,t)=>(0,r.jsx)("span",{className:"font-mono text-xs px-3 py-1 border border-[var(--theme-border)] text-[var(--theme-muted)]",children:e},t))})}),(0,r.jsx)(g,{delay:.16,children:(0,r.jsxs)("a",{href:e.link,target:"_blank",rel:"noopener noreferrer",className:"mt-8 inl
1ine-block kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)] border-b-2 border-[var(--theme-accent)] pb-1",children:[e.linkText," →"]})})]})]})},E=()=>{let e=d.projects.filter(e=>e.featured);return(0,r.jsx)("section",{id:"products",className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 pt-24 md:pt-32",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"03 / Products"})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsx)("h2",{className:"mt-6 display-l text-[var(--theme-foreground)]",children:"Selected work"})}),(0,r.jsx)(g,{delay:.08,children:(0,r.jsx)("p",{className:"mt-5 max-w-2xl text-lg text-[var(--theme-muted)]",children:"Product case studies with the problem, audience, architecture, and build role made explicit, with numbers included where I can stand behind them."})}),(0,r.jsx)("div",{className:"mt-8 border-t border-[var(--theme-border)]",children:e.map((e,t)=>(0,r.jsx)(A,{project:e,index:t},t))})]})})},P="gh-stats-v2",T="https://api.github.com";function I(){let e={},t=0;for(let a of m)e[a.repo]={repo:a.repo,stars:a.fallbackStars,forks:0},t+=a.fallbackStars;return{publicRepos:15,followers:16,totalStars:t,repos:e}}async function R(e){let t=await fetch(e,{headers:{Accept:"application/vnd.github+json"}});if(!t.ok)throw Error(`GitHub ${t.status} for ${e}`);return t.json()}async function D(){let e=d.socials.githubHandle,t=R(`${T}/users/${e}`),a=R(`${T}/users/${e}/repos?per_page=100&type=owner`),r=m.map(t=>R(`${T}/repos/${e}/${t.repo}`)),[i,s,...n]=await Promise.allSettled([t,a,...r]),l=I(),o=0;if(n.forEach((e,t)=>{let a=m[t];if("fulfilled"===e.status){let t=e.value,r=t.stargazers_count??a.fallbackStars;l.repos[a.repo]={repo:a.repo,stars:r,forks:t.forks_count??0},o+=r}else o+=a.fallbackStars}),l.totalStars=o,"fulfilled"===i.status&&(l.followers=i.value.followers??l.followers),"fulfilled"===s.status&&(l.publicRepos=s.value.filter(e=>!e.fork).length),!("fulfilled"===i.status||"fulfilled"===s.status||n.some(e=>"fulfilled"===e.status)))throw Error("All GitHub requests failed");return l}let M=({count:e,live:t})=>(0,r.jsxs)("span",{className:"font-mono text-sm text-[var(--theme-accent)] tabular-nums",children:["★ ",t?(0,r.jsx)(k,{value:e,durationMs:800}):e]}),C=()=>{let{data:e,status:t}=function(){let[e,t]=(0,i.useState)(I),[a,r]=(0,i.useState)("loading");return(0,i.useEffect)(()=>{let e=function(){try{let e=sessionStorage.getItem(P);if(!e)return null;let t=JSON.parse(e);if(Date.now()-t.fetchedAt>18e5)return null;return t.data}catch{return null}}();if(e){t(e),r("ready");return}let a=!1;return D().then(e=>{if(!a){t(e),r("ready");try{let t={fetchedAt:Date.now(),data:e};sessionStorage.setItem(P,JSON.stringify(t))}catch{}}}).catch(()=>{a||r("fallback")}),()=>{a=!0}},[]),{data:e,status:a}}(),a="ready"===t,s=p.find(e=>"Dependy"===e.displayName),n=p.filter(e=>"Dependy"!==e.displayName);return(0,r.jsx)("section",{id:"open-source",className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-24 md:py-32",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"04 / Open Source"})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsx)("h2",{className:"mt-6 display-l text-[var(--theme-foreground)]",children:"Original tools I maintain"})}),(0,r.jsx)(g,{delay:.08,children:(0,r.jsx)("p",{className:"mt-5 max-w-2xl text-lg text-[var(--theme-muted)]",children:"Non-fork repositories and libraries extracted from real engineering problems, useful as a signal of initiative, API design, and long-term maintenance rather than broad industry adoption."})}),s&&(0,r.jsx)(g,{delay:.1,children:(0,r.jsxs)("a",{href:s.href,target:"_blank",rel:"noopener noreferrer",className:"group block mt-12 border border-[var(--theme-accent)] bg-[var(--theme-surface)] p-6 md:p-8 hover:bg-[var(--theme-background)]",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"Featured library"}),(0,r.jsx)("span",{className:"font-mono text-xs text-[var(--theme-muted)]",children:s.language})]}),(0,r.jsx)("h3",{className:"mt-3 text-3xl md:text-4xl font-bold tracking-tight text-[var(--theme-foreground)] group-hover:text-[var(--theme-accent)]",children:s.displayName}),(0,r.jsx)("p",{className:"mt-3 max-w-2xl text-[var(--theme-muted)]",children:s.description}),(0,r.jsx)("span",{className:"mt-5 inline-block kicker text-[var(--theme-foreground)] group-hover:text-[var(--theme-accent)] border-b-2 border-[var(--theme-accent)] pb-1",children:"Visit dependy.xeinebiu.com →"})]})}),(0,r.jsxs)("ul",{className:"mt-8 border-t border-[var(--theme-border)]",children:[m.map((t,i)=>{let s=e.repos[t.repo];return(0,r.jsx)(g,{as:"li",delay:.04*Math.min(i,5),children:(0,r.jsxs)("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",className:"row-hover group grid grid-cols-1 md:grid-cols-12 gap-2 md:gap-6 items-baseline py-5 border-b border-[var(--theme-border)] hover:bg-[var(--theme-surface)] px-3 -mx-3",children:[(0,r.jsx)("div",{className:"md:col-span-4",children:(0,r.jsx)("p",{className:"text-lg font-semibold text-[var(--theme-foreground)] group-hover:text-[var(--theme-accent)]",children:t.displayName})}),(0,r.jsx)("div",{className:"md:col-span-6",children:(0,r.jsx)("p",{className:"text-sm text-[var(--theme-muted)]",children:t.description})}),(0,r.jsxs)("div",{className:"md:col-span-2 flex items-center justify-between md:justify-end gap-4",children:[(0,r.jsx)("span",{className:"font-mono text-xs text-[var(--theme-muted)]",children:t.language}),(0,r.jsx)(M,{count:s?s.stars:t.fallbackStars,live:a})]})]})},t.repo)}),n.map((e,t)=>(0,r.jsx)(g,{as:"li",delay:.04*Math.min(m.length+t,7),children:(0,r.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"row-hover group grid grid-cols-1 md:grid-cols-12 gap-2 md:gap-6 items-baseline py-5 border-b border-[var(--theme-border)] hover:bg-[var(--theme-surface)] px-3 -mx-3",children:[(0,r.jsx)("div",{className:"md:col-span-4",children:(0,r.jsx)("p",{className:"text-lg font-semibold text-[var(--theme-foreground)] group-hover:text-[var(--theme-accent)]",children:e.displayName})}),(0,r.jsx)("div",{className:"md:col-span-6",children:(0,r.jsx)("p",{className:"text-sm text-[var(--theme-muted)]",children:e.description})}),(0,r.jsxs)("div",{className:"md:col-span-2 flex items-center justify-between md:justify-end gap-4",children:[(0,r.jsx)("span",{className:"font-mono text-xs text-[var(--theme-muted)]",children:e.language}),(0,r.jsxs)("span",{className:"font-mono text-xs text-[var(--theme-accent)]",children:[e.badge," ↗"]})]})]})},e.displayName))]}),(0,r.jsx)(g,{delay:.1,children:(0,r.jsx)("a",{href:d.socials.github,target:"_blank",rel:"noopener noreferrer",className:"mt-10 inline-block kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)] border-b-2 border-[var(--theme-accent)] pb-1",children:"All repositories on GitHub →"})})]})})},F=({label:e,items:t})=>(0,r.jsx)(g,{as:"div",children:(0,r.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-12 gap-3 md:gap-6 py-7 border-b border-[var(--theme-border)]",children:[(0,r.jsx)("div",{className:"md:col-span-3",children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:e})}),(0,r.jsx)("div",{className:"md:col-span-9",children:(0,r.jsx)("p",{className:"text-xl md:text-2xl text-[var(--theme-foreground)] leading-relaxed tracking-tight",children:t.map((e,a)=>(0,r.jsxs)("span",{children:[e,a<t.length-1&&(0,r.jsx)("span",{className:"text-[var(--theme-muted)]",children:" \xb7 "})]},a))})})]})}),z=()=>{let{skills:e,languages:t}=d;return(0,r.jsx)("section",{id:"skills",className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-24 md:py-32",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"05 / Skills"})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsx)("h2",{className:"mt-6 display-l text-[var(--theme-foreground)]",children:"Capabilities"})}),(0,r.jsxs)("div",{className:"mt-12 border-t border-[var(--theme-border)]",children:[(0,r.jsx)(F,{label:"Languages",items:e.languages}),(0,r.jsx)(F,{label:"Frameworks",items:e.frameworks}),(0,r.jsx)(F,{label:"Technologies",items:e.technologies}),(0,r.jsx)(F,{label:"Tools",items:e.tools}),(0,r.jsx)(F,{label:"Spoken",items:t.map(e=>`${e.name} (${e.level})`)})]})]})})},_=()=>{let{main:e,socials:t}=d,a=[{label:"GitHub",href:t.github},{label:"LinkedIn",href:t.linkedin},{label:"Instagram",href:t.instagram},{label:"Facebook",href:t.facebook}];return(0,r.jsx)("section",{id:"contact",className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-24 md:py-36",children:[(0,r.jsx)(g,{children:(0,r.jsx)("span",{className:"kicker text-[var(--theme-accent)]",children:"06 / Contact"})}),(0,r.jsx)(g,{delay:.05,children:(0,r.jsxs)("h2",{className:"mt-6 display-l text-[var(--theme-foreground)]",children:["Let's build something",(0,r.jsx)("span",{className:"text-[var(--theme-accent)]",children:"."})]})}),(0,r.jsx)(g,{delay:.1,children:(0,r.jsx)("p",{className:"mt-8 max-w-xl text-lg text-[var(--theme-muted)]",children:"Always open to interesting problems and good teams. Drop me a line and I'll get back to you."})}),(0,r.jsx)(g,{delay:.14,children:(0,r.jsx)("a",{href:`mailto:${e.email}
1`,className:"mt-8 inline-block text-lg md:text-xl font-semibold text-[var(--theme-foreground)] hover:text-[var(--theme-accent)] border-b-2 border-[var(--theme-accent)] pb-1 break-words",children:e.email})}),(0,r.jsx)(g,{delay:.18,children:(0,r.jsxs)("div",{className:"mt-12 flex flex-wrap items-center gap-x-8 gap-y-4",children:[(0,r.jsx)("span",{className:"kicker text-[var(--theme-muted)]",children:e.location}),a.map(e=>(0,r.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)]",children:[e.label," ↗"]},e.label))]})})]})})},V=()=>{let e=new Date().getFullYear();return(0,r.jsx)("footer",{className:"bg-[var(--theme-background)] border-t border-[var(--theme-border)]",children:(0,r.jsxs)("div",{className:"mx-auto max-w-[1280px] px-6 md:px-10 lg:px-16 py-10 flex flex-col md:flex-row items-start md:items-center justify-between gap-4",children:[(0,r.jsxs)("p",{className:"font-mono text-xs text-[var(--theme-muted)]",children:["\xa9 ",e," ",d.main.name,". All rights reserved."]}),(0,r.jsx)("p",{className:"font-mono text-xs text-[var(--theme-muted)]",children:"Built with Next.js + Tailwind"}),(0,r.jsx)("button",{onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),className:"kicker text-[var(--theme-foreground)] hover:text-[var(--theme-accent)]",children:"Back to top ↑"})]})})},G=()=>{let[e,t]=(0,i.useState)("light"),a=(0,i.useRef)(!1);return(0,i.useEffect)(()=>{t(document.documentElement.dataset.theme||"light")},[]),(0,r.jsx)(s.x,{reducedMotion:"user",children:(0,r.jsxs)("div",{className:"min-h-screen bg-[var(--theme-background)]",children:[(0,r.jsx)(o,{theme:e,onToggleTheme:()=>{if(a.current)return;let r="dark"===e?"light":"dark",i="dark"===e?"#0A0A0B":"#FAFAF7",s="polygon(100% 0, -120% 0, 100% 220%)",n=window.scrollY,l=document.documentElement.clientWidth,o=document.createElement("div");o.setAttribute("aria-hidden","true"),o.dataset.theme=e,o.style.cssText=`position:fixed;inset:0;z-index:9999;pointer-events:none;overflow:hidden;background:${i};clip-path:${s};transform:translateZ(0);`;let d=document.createElement("div");d.style.cssText=`position:absolute;top:${-n}px;left:0;width:${l}px;`,Array.from(document.body.children).forEach(e=>{"SCRIPT"!==e.tagName&&"STYLE"!==e.tagName&&d.appendChild(e.cloneNode(!0))}),o.appendChild(d),a.current=!0;document.documentElement.dataset.theme=r,t(r);try{localStorage.setItem("portfolio-theme",r)}catch{}document.body.appendChild(o),o.animate([{clipPath:s},{clipPath:"polygon(100% 0, 100% 0, 100% 0)"}],{duration:1100,easing:"cubic-bezier(0.65, 0, 0.35, 1)",fill:"forwards"}).onfinish=()=>{o.remove(),a.current=!1}}}),(0,r.jsxs)("main",{children:[(0,r.jsx)(u,{}),(0,r.jsx)(b,{}),(0,r.jsx)(w,{}),(0,r.jsx)(N,{}),(0,r.jsx)(E,{}),(0,r.jsx)(C,{}),(0,r.jsx)(z,{}),(0,r.jsx)(_,{})]}),(0,r.jsx)(V,{})]})})}},9963:(e,t,a)=>{Promise.resolve().then(a.bind(a,6588))}},e=>{e.O(0,[150,441,794,358],()=>e(e.s=9963)),_N_E=e.O()}]);

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.