1import{_ as X}from"./DQu2cxIa.js";import{_ as E}from"./BIAU9qsL.js";import{p as q,b as B,r as c,D as O,q as D,c as a,e as t,d as N,l as H,n as M,t as z,j as C,F as L,x as $,w as S,z as W,o as n,f as K,I as Q,g as F,_ as Y}from"./By0BVG7O.js";import{u as Z}from"./DWSDSJzg.js";const ee={class:"jobs-section max-w-4xl mx-auto px-4 py-8"},te={id:"subscribe",class:"mb-10"},se={class:"mb-6 flex justify-between items-center"},oe={class:"flex items-center"},ne={class:"bg-[#f6f8f9] rounded-full p-1 flex shadow-sm gap-1"},ae=["disabled"],ie={key:0,class:"opacity-60"},re={key:1},le={key:0,class:"ml-3 text-xs text-red-500"},ue={key:0,class:"text-xs text-gray-400"},de=["datetime","title"],ce={key:0,class:"space-y-4 animate-pulse"},fe={key:1,class:"py-16 text-center"},ge={key:2,class:"py-16 text-center"},ve={class:"text-sm text-gray-500"},pe={key:3,class:"space-y-4"},me={class:"pt-2 pb-10 flex justify-center gap-6","aria-label":"Browse by category"},T="/api/jobs",be=q({__name:"index",async setup(ye){let p,U;B({title:"Design Jobs â Hand-Picked Roles for Designers | Muzli",meta:[{property:"og:title",content:"Design Jobs â Hand-Picked Roles for Designers | Muzli"},{name:"description",content:"Hand-picked design jobs in UX, product, and visual design. Updated weekly â get curated roles worth applying to from Muzli."},{property:"og:description",content:"Hand-picked design jobs in UX, product, and visual design. Updated weekly â get curated roles worth applying to from Muzli."},{property:"og:image",content:"https://muz.li/og-jobs.png"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Design Jobs â Hand-Picked Roles for Designers | Muzli"},{name:"twitter:description",content:"Hand-picked design jobs in UX, product, and visual design. Updated weekly â get curated roles worth applying to from Muzli."},{name:"twitter:image",content:"https://muz.li/og-jobs.png"}]}),B({link:[{rel:"canonical",href:"https://muz.li/jobs/"}],meta:[{name:"robots",content:"index, follow"}]});const f=c(null),g=c(null),i=c(!1),v=c(!1),l=c(null),u=c(!1);async function R(s){if(s!==i.value)if(l.value=null,u.value=!1,s){if(!navigator.geolocation){l.value="Geolocation not supported by your browser.";return}v.value=!0,navigator.geolocation.getCurrentPosition(async e=>{f.value=e.coords.latitude,g.value=e.coords.longitude,i.value=!0,v.value=!1,await k()},()=>{l.value="Location access denied.",v.value=!1,i.value=!1},{enableHighAccuracy:!1,timeout:5e3})}else f.value=null,g.value=null,i.value=!1,await k()}async function J(s){u.value=s,i.value=!1,f.value=null,g.value=null,l.value=null,await k()}function A(){if(u.value)return`${T}?remote=1`;if(f.value!==null&&g.value!==null){const s=new URLSearchParams({lat:f.value.toString(),lng:g.value.toString()});return`${T}?${s}`}return T}const{data:m,pending:h,error:P,refresh:G}=([p,U]=O(()=>Z("jobs",()=>$fetch(A()))),p=await p,U(),p);async function k(){h.value=!0,m.value=await $fetch(A()),h.value=!1}const b=D(()=>{if(!m.value||!Array.isArray(m.value))return[];const s=new Set;return m.value.map(e=>{const o=e.data&&typeof e.data=="object"&&!Array.isArray(e.data)?e.data:{};return{...o,id:e.id||o.id,slug:e.slug||o.slug,scraped_at:e.scraped_at||o.scraped_at,location:e.location||o.location,premium_score:e.premium_score,data:e.data}}).filter(e=>e.id?s.has(e.id)?!1:(s.add(e.id),!0):!0)}),V=D(()=>i.value?"No open roles near your location right now.":u.value?"No remote roles right now â check back soon.":"Check back soon â new roles are added weekly."),y=D(()=>{if(!b.value.length)return null;const s=b.value.map(e=>{var o,d;return((d=(o=e.data)==null?void 0:o.v5_processed_job_data)==null?void 0:d.estimated_publish_date)||e.scraped_at||e.posted_date}).filter(Boolean).map(e=>{const o=new Date(e).getTime();return isNaN(o)?null:o}).filter(e=>e!==null);return s.length?new Date(Math.max(...s)).toISOString():null});function j(s){if(!s)return"";const e=new Date(s);return isNaN(e.getTime())?"":e.toLocaleString()}function I(s){if(!s)return"";const e=new Date(s);if(isNaN(e.getTime()))return j(s);const o=Math.floor((Date.now()-e.getTime())/1e3);if(o<5)return"just now";const d=[{unit:"year",secs:31536e3},{unit:"month",secs:2592e3},{unit:"week",secs:604800},{unit:"day",secs:86400},{unit:"hour",secs:3600},{unit:"minute",secs:60},{unit:"second",secs:1}],x=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"});for(const{unit:w,secs:r}of d){const _=Math.floor(o/r);if(_>=1)return x.format(-_,w)}return j(s)}return(s,e)=>{var w;const o=X,d=E,x=W;return n(),a("section",ee,[e[12]||(e[12]=t("div",{class:"max-w-2xl mx-auto mt-6 mb-10 text-center"},[t("h1",{class:"text-5xl leading-tight mb-3 !font-serif"},"Design jobs worth applying to"),t("p",{class:"text-gray-500 text-sm leading-relaxed"}," Hand-picked roles in product design, UX, brand, and visual design â updated weekly. ")],-1)),t("div",te,[N(o,{SubTitle:"Get hand-picked design jobs delivered to your inbox every week"})]),t("div",se,[t("div",oe,[t("div",ne,[t("button",{type:"button",class:M(["w-[118px] py-2.5 rounded-full text-sm font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2e54ff] focus-visible:ring-offset-1",i.value?"bg-transparent text-gray-400 hover:text-gray-600":"bg-white shadow text-gray-800"]),onClick:e[0]||(e[0]=r=>R(!1))}," Everywhere ",2),t("button",{type:"button",class:M(["w-[118px] py-2.5 rounded-full text-sm font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2e54ff] focus-visible:ring-offset-1",i.value?"bg-white shadow text-gray-800":"bg-transparent text-gray-400 hover:text-gray-600"]),disabled:v.value,onClick:e[1]||(e[1]=r=>R(!0))},[v.value&&!i.value?(n(),a("span",ie,"Locatingâ¦")):(n(),a("span",re,"Nearby"))],10,ae),t("button",{type:"button",class:M(["w-[118px] py-2.5 rounded-full text-sm font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-green-500 focus-visible:ring-offset-1",u.value?"bg-white shadow text-green-600":"bg-transparent text-gray-400 hover:text-gray-600"]),onClick:e[2]||(e[2]=r=>J(!u.value))}," Remote ",2)]),l.value?(n(),a("p",le,z(l.value),1)):H("",!0)]),y.value?(n(),a("div",ue,[t("time",{class:"font-medium text-gray-500",datetime:y.value,title:j(y.value)}," Updated "+z(I(y.value)),9,de)])):H("",!0)]),e[13]||(e[13]=t("div",{class:"mb-8 flex flex-col md:flex-row items-center justify-between gap-4 roun
1ded-lg border border-[#D0D8FB] bg-[#f6f8fd] px-6 py-4 text-center md:text-left"},[t("div",null,[t("p",{class:"font-medium text-gray-800"},"Applying to one of these?"),t("p",{class:"text-sm text-gray-500"},"Build a page tailored to the exact role instead of sending the same resume everywhere. Free during beta.")]),t("a",{href:"https://apply.muz.li/?utm_source=muzli_jobs&utm_medium=callout",target:"_blank",rel:"noopener noreferrer",class:"shrink-0 whitespace-nowrap rounded-full bg-[#2e54ff] px-5 py-2.5 text-sm font-medium text-white hover:bg-[#2d4de2] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2e54ff] focus-visible:ring-offset-2"}," Try Apply by Muzli â ")],-1)),C(h)?(n(),a("div",ce,[(n(),a(L,null,$(6,r=>t("div",{key:r,class:"border border-[#D0D8FB] rounded overflow-hidden bg-white p-4 md:p-6"},e[4]||(e[4]=[K('<div class="flex gap-4 mb-4" data-v-471b2344><div class="w-12 h-12 rounded-lg bg-gray-100 flex-shrink-0" data-v-471b2344></div><div class="flex-1" data-v-471b2344><div class="h-5 bg-gray-100 rounded w-1/2 mb-2" data-v-471b2344></div><div class="h-3.5 bg-gray-100 rounded w-1/3" data-v-471b2344></div></div></div><div class="space-y-2" data-v-471b2344><div class="h-3.5 bg-gray-100 rounded w-full" data-v-471b2344></div><div class="h-3.5 bg-gray-100 rounded w-4/5" data-v-471b2344></div></div>',2)]))),64))])):C(P)?(n(),a("div",fe,[e[5]||(e[5]=t("p",{class:"text-3xl mb-3"},"â ï¸",-1)),e[6]||(e[6]=t("p",{class:"font-medium text-gray-800 mb-1"},"Couldn't load jobs",-1)),e[7]||(e[7]=t("p",{class:"text-sm text-gray-500 mb-5"},"There was a problem fetching the listing. Try refreshing.",-1)),t("button",{class:"text-sm font-medium text-[#2e54ff] hover:text-[#1a3fd8] transition-colors underline underline-offset-2",onClick:e[3]||(e[3]=()=>C(G)())}," Try again ")])):(w=b.value)!=null&&w.length?(n(),a("div",pe,[(n(!0),a(L,null,$(b.value,(r,_)=>(n(),Q(d,{key:r.id||_,job:r},null,8,["job"]))),128)),t("nav",me,[N(x,{to:"/jobs/remote/",class:"text-sm font-medium text-[#2e54ff] hover:text-[#1a3fd8] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2e54ff] focus-visible:ring-offset-2 rounded"},{default:S(()=>e[10]||(e[10]=[F(" Remote Jobs â ")])),_:1}),N(x,{to:"/jobs/product-design/",class:"text-sm font-medium text-[#2e54ff] hover:text-[#1a3fd8] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2e54ff] focus-visible:ring-offset-2 rounded"},{default:S(()=>e[11]||(e[11]=[F(" Product Design â ")])),_:1})])])):(n(),a("div",ge,[e[8]||(e[8]=t("p",{class:"text-3xl mb-3"},"ð",-1)),e[9]||(e[9]=t("p",{class:"font-medium text-gray-800 mb-1"},"No jobs found",-1)),t("p",ve,z(V.value),1)]))])}}}),ke=Y(be,[["__scopeId","data-v-471b2344"]]);export{ke 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.