1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/InstantMatchWidget-DVE_2teL.js","assets/index-Dw0n3iWh.js","assets/TechIcon-DSGUT21k.js","assets/loader-circle-CRRp8etx.js","assets/lock-GD08Dx_U.js"])))=>i.map(i=>d[i]); 2import{cx as v,br as k,bj as c,cy as N,bq as w,j as e,J as o,B as m,Q as d,A as S,t as x,bk as p,cz as h,r as f,cA as C,cB as $,bo as H,bm as E,K as U,cC as L,ap as T,bn as u,ab as R}from"./index-Dw0n3iWh.js";import{C as A}from"./CtaSection-BJq6zFnR.js";import{H as B}from"./HubOfferStrip-C4eOPruA.js";import{C as P}from"./CandidateGrid-BBtiPjmc.js";import{E as D}from"./EmployerTestimonials-BIYmeB1a.js";import{S as _}from"./StatStrip-BZ9fQYEl.js";import{S as q}from"./SalaryRangeChart-BjvhBmEq.js";import{S as O}from"./SkillsConstellation-R0zxnjWg.js";import{C as F}from"./CityHeatmap-BQVB2DJI.js";import{E as I}from"./EmployerLogoWall-RXSaaRs4.js";import{P as M}from"./ProcessBlueprint-BOql1Q7m.js";import{I as z}from"./InterviewCardDeck-BBuoLuRV.js";import{C as K}from"./CrosslinkGalaxy-DkBkfAcr.js";import{F as W}from"./FactCallout-o1rRixbY.js";import{T as Q}from"./TechIcon-DSGUT21k.js";import{A as G,a as Y,b as V,c as J}from"./accordion-C44FYf26.js";import{E as X}from"./employers-QGp5VK6S.js";import{S as Z}from"./SalaryDataLink-fabSYoUg.js";import{C as n}from"./code-xml-B1lzWnUk.js";import{L as g}from"./layers-CF2TsgUp.js";import"./BookingDialog-CjW4bUrC.js";import"./workEmail-B0D6SD0E.js";import"./check-D7IfZyM3.js";import"./CandidateAvatar-eQr63Bsc.js";import"./shield-check-ChQVBJCb.js";import"./proxy-DyrDERVD.js";import"./wrench-BvegezEM.js";import"./index-CzNZt0ta.js";import"./index-cxi3p0gh.js";import"./index--ITzrDyy.js";import"./index-DN-DCAsJ.js";import"./index-DPm_CR_f.js";import"./index-BsA8OOTi.js";const ee=f.lazy(()=>R(()=>import("./InstantMatchWidget-DVE_2teL.js"),__vite__mapDeps([0,1,2,3,4])).then(s=>({default:s.InstantMatchWidget})));function Ae(){const{stack:s,salaryLink:b}=v.useLoaderData(),i=k(s),r=c[s.baseRoleSlug],y=s.relatedStacks.map(a=>N[a]).filter(a=>!!a),j=w.filter(a=>a.category!==s.category).slice(0,6);return e.jsxs(e.Fragment,{children:[e.jsx("section",{className:"gradient-mesh-bg relative overflow-hidden",children:e.jsxs("div",{className:"container relative z-10 mx-auto max-w-6xl px-4 py-16 sm:py-24",children:[e.jsxs("nav",{"aria-label":"Breadcrumb",className:"mb-6 text-sm text-muted-foreground",children:[e.jsx(o,{to:"/",className:"hover:text-foreground",children:"Home"}),e.jsx("span",{className:"mx-2",children:"/"}),e.jsx(o,{to:"/hire",className:"hover:text-foreground",children:"Hire by tech"}),e.jsx("span",{className:"mx-2",children:"/"}),e.jsx("span",{className:"text-foreground",children:s.name})]}),e.jsxs("div",{className:"grid items-center gap-12 md:grid-cols-[1.4fr_1fr]",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"mb-3 inline-flex items-center gap-2 rounded-full border border-border bg-card px-3 py-1 text-xs font-semibold uppercase tracking-[0.2em] text-teal",children:[e.jsx(n,{className:"h-3 w-3"})," ",s.category]}),e.jsxs("h1",{className:"text-balance text-5xl font-bold tracking-tight sm:text-6xl md:text-7xl",children:["Hire"," ",s.hireTitle?e.jsx("span",{className:"gradient-text",children:s.hireTitle}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"gradient-text",children:s.name})," developers"]})]}),e.jsx("p",{className:"mt-6 max-w-xl text-lg text-muted-foreground",children:s.oneLiner}),e.jsxs("div",{className:"mt-8 flex flex-wrap gap-3",children:[e.jsx(m,{size:"lg",asChild:!0,children:e.jsxs("a",{href:d,onClick:()=>x("hub-hero"),children:["Post a job free ",e.jsx(S,{className:"ml-1 h-4 w-4"})]})}),e.jsx(m,{size:"lg",variant:"outline",asChild:!0,children:e.jsx("a",{href:p,children:"Talk to us about hard-to-fill roles"})})]}),i&&e.jsxs("div",{className:"mt-10 max-w-md border-l-2 border-teal pl-5",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-muted-foreground",children:"Mid-level base · UK · US · EU"}),e.jsxs("p",{className:"mt-1 font-mono text-sm font-bold",children:[i.mid," · ",h(i.mid,1.15,"â¬")," · ",h(i.mid,1.45,"$")]})]})]}),e.jsx("div",{className:"order-first md:order-last",children:e.jsxs("div",{className:"relative mx-auto flex aspect-square max-w-sm items-center justify-center rounded-[2rem] border border-border bg-card p-12 shadow-xl",children:[e.jsx("div",{className:"absolute inset-0 rounded-[2rem] bg-gradient-to-br from-primary/10 via-trans
2parent to-teal/10"}),e.jsx(Q,{name:s.name,size:200,surface:"light",className:"relative"})]})})]})]})}),e.jsx(B,{roleLabel:`${s.name} developer`}),e.jsx(f.Suspense,{fallback:null,children:e.jsx(ee,{employerSignupTo:"/employers/signup",initialPrompt:`${s.name} developer, remote or hybrid in the UK or US`})}),e.jsx(_,{stats:[{value:"3",label:"Markets",sub:"UK · US · EU"},{value:"Hours",label:"First applicants",sub:"after posting your job"},{value:"14â21",label:"Days to hire",sub:"median across stacks"}]}),e.jsx("section",{className:"py-16 sm:py-24",children:e.jsxs("div",{className:"container mx-auto max-w-3xl px-4",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal",children:"Why Haystack"}),e.jsxs("h2",{className:"mt-2 text-balance text-4xl font-bold tracking-tight sm:text-5xl",children:["The fastest way to hire ",s.name," developers - without the agency tax."]}),e.jsx("div",{className:"mt-8 space-y-5 text-lg text-muted-foreground",children:s.intro.map((a,t)=>e.jsx("p",{className:t===0?"text-foreground font-medium":"",children:a},t))})]})}),e.jsx("section",{className:"border-y border-border bg-muted/30 py-16 sm:py-24",children:e.jsx("div",{className:"container mx-auto max-w-5xl px-4",children:e.jsxs("div",{className:"grid gap-10 md:grid-cols-[1fr_2fr]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal",children:"What they ship"}),e.jsxs("h2",{className:"mt-2 text-3xl font-bold tracking-tight sm:text-4xl",children:["Production ",s.name," work, not tutorials."]})]}),e.jsx("ul",{className:"space-y-4",children:s.whatTheyBuild.map(a=>e.jsxs("li",{className:"flex items-start gap-3",children:[e.jsx(g,{className:"mt-1 h-4 w-4 flex-shrink-0 text-teal"}),e.jsx("span",{className:"text-lg text-foreground",children:a})]},a))})]})})}),e.jsx("section",{className:"py-16 sm:py-24",children:e.jsxs("div",{className:"container mx-auto max-w-3xl px-4",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal",children:"Playbook"}),e.jsxs("h2",{className:"mt-2 text-balance text-3xl font-bold tracking-tight sm:text-4xl",children:["Hiring ",s.name," engineers - the long version"]}),e.jsx("div",{className:"mt-10 space-y-12",children:C(s).map(a=>e.jsxs("article",{children:[e.jsx("h3",{className:"text-xl font-semibold tracking-tight sm:text-2xl",children:a.heading}),e.jsx("div",{className:"mt-4 space-y-4 text-muted-foreground",children:a.body.map((t,l)=>e.jsx("p",{children:t},l))}),a.bullets&&e.jsx("ul",{className:"mt-5 space-y-2.5",children:a.bullets.map(t=>e.jsxs("li",{className:"flex items-start gap-3 text-muted-foreground",children:[e.jsx(g,{className:"mt-1 h-4 w-4 flex-shrink-0 text-teal"}),e.jsx("span",{children:t})]},t))})]},a.heading))})]})}),i&&e.jsx(q,{title:`Salary benchmark for ${s.name} developers across UK, US and EU`,subtitle:"Anchored to live Haystack data. London, Berlin tech hubs and US coastal markets skew toward the upper bound.",markets:$(i),footnote:"EUR and USD bands are indicative conversions from live UK data using current market multipliers. Local seniority, sector and equity packages can push offers higher."}),r&&e.jsx(P,{role:r,seedKey:`tech:${s.slug}`,heading:`${s.name} developers ready to interview`,subheading:`A sample of ${s.name} engineers currently active on Haystack across the UK, US and EU. Tap a profile to start a conversation.`,skillsOverride:[s.name,...s.ecosystem],jobTitleOverride:`${s.name} Engineer`}),e.jsx(O,{skills:s.ecosystem,heading:`The ${s.name} ecosystem your hire should know`}),e.jsx(F,{cities:E,countries:H,title:`Hire ${s.name} developers by city`,subtitle:"Explore localised salary benchmarks and top employers in any of our cities."}),e.jsx(I,{heading:"Hires made on Haystack by teams like",employers:X}),s.interviewQuestions&&s.interviewQuestions.length>0&&e.jsx(z,{title:`Sample ${s.name} interview questions`,subtitle:"Use these across technical and behavioural rounds. Tap a card for what to listen for.",questions:s.interviewQuestions.map(a=>({q:a,a:"Listen for: structured problem framing, trade-off awareness, specific metrics, and ownership beyond the code."}))}),e.jsx(M,{title:"Hiring through Haystack takes days, not months",subtitle:"A repeatable five-step playbook our employers run for every role.",steps:[{title:"Post your job free",body:"Two minutes, no card, no long forms.",duration:"Day 0"}
2,{title:"Applicants within hours",body:"Vetted candidates apply; unlock them all for $349 when you are ready.",duration:"Day 1"},{title:"Interview rounds",body:"We handle scheduling. You focus on the conversation.",duration:"Day 2â10"},{title:"Offer & references",body:"We support both sides through offer and reference checks.",duration:"Day 10â14"},{title:"Onboard",body:"Structured ramp template so your new hire ships in week one.",duration:"Day 14â21"}]}),e.jsx(W,{number:"92%",label:"Offer acceptance",body:`Because every ${s.name} candidate has aligned on level, comp and working pattern before you meet, offers via Haystack are accepted 92% of the time.`,icon:U,tone:"teal"}),e.jsx(D,{}),(()=>{const a=L(s);return e.jsx("section",{className:"bg-muted/30 py-16 sm:py-24",children:e.jsxs("div",{className:"container mx-auto max-w-3xl px-4",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal",children:"FAQ"}),e.jsxs("h2",{className:"mt-2 text-balance text-3xl font-bold tracking-tight sm:text-4xl",children:["Hiring ",s.name," developers - common questions"]}),e.jsx(G,{type:"single",collapsible:!0,className:"mt-8",children:a.map((t,l)=>e.jsxs(Y,{value:`faq-${l}`,children:[e.jsx(V,{className:"text-left",children:t.q}),e.jsx(J,{className:"text-muted-foreground",children:t.a})]},t.q))})]})})})(),e.jsx(K,{heading:"Related stacks & roles",subheading:"Stay inside the Haystack network - every link is interview-ready.",groups:[{title:`More ${s.category}`,items:y.map(a=>({label:`Hire ${a.name} developers`,to:"/hire/$tech",params:{tech:a.slug},tagline:a.oneLiner,icon:n}))},{title:"By role",items:s.relatedRoles.map(a=>c[a]).filter(Boolean).map(a=>({label:`Hire ${u(a.title)}`,to:"/hiring/$slug",params:{slug:a.slug},tagline:a.category,icon:T}))},{title:"Other stacks",items:j.map(a=>({label:`Hire ${a.name} developers`,to:"/hire/$tech",params:{tech:a.slug},tagline:a.category,icon:n}))}]}),r&&e.jsx("section",{className:"border-t border-border bg-background py-10",children:e.jsxs("div",{className:"container mx-auto max-w-3xl px-4 text-center text-sm text-muted-foreground",children:["Looking for the broader role?"," ",e.jsxs(o,{to:"/hiring/$slug",params:{slug:r.slug},className:"font-medium text-foreground underline",children:["Hire ",u(r.title)]})," · ",e.jsxs(o,{to:"/salary-guide/$slug",params:{slug:r.slug},className:"font-medium text-foreground underline",children:[r.title," salary guide"]})]})}),e.jsx(Z,{link:b,roleLabel:`${s.name} Developer`}),e.jsx(A,{title:`Ready to hire ${s.name} developers?`,description:`Post your first ${`${s.name} developer`} job free and see who applies. No card needed.`,primaryCta:{label:"Post a job free",href:d,onClick:()=>x("hub-footer-cta")},secondaryCta:{label:"Talk to us about hard-to-fill roles",href:p}})]})}export{Ae as component};
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.