PageSourceSearch

https://nyanza.ai/assets/Score-CsSAepYu.js

js nyanza.ai collected 2026-10-02 01:11:51 UTC 16,343 bytes, 1 lines download raw bytes

1import{r as n,j as e}from"./react-TITiJaTY.js";import{u as Z,t as x,I as M,k as ee,p as te,n as se,o as ae,f as re}from"./shared-lite-BOZiOCY1.js";import{a1 as ne,r as ie}from"./App-Dli7sJFM.js";import"./index-D0VpW5-F.js";import"./memory-BnxUEnat.js";import"./llm-CdWZ4qgd.js";import"./podcastDeviceState-B0NlAIS7.js";import"./motion-DheP8iPc.js";const U="/early-access?source=score",oe="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fnyanza.ai%2Fscore",ce={sections:"Restore a source-backed Experience, Project, Research, Skills, or Education section that belongs to this resume.",quantified:"Strengthen thin bullets with real context and outcomes already in your source material. Use a verified number only when you have one.",nopad:"Keep dates in role headings instead of using time-in-role as accomplishment filler.",verbs:"Open bullets with clear actions and ownership. Present tense is appropriate for current work; past tense fits completed work.",variety:'Vary your opening verbs. When three bullets start with "Led", only the first one lands.',concise:"Split genuinely overloaded bullets so each one communicates one coherent accomplishment.",clean:'Cut the clichés - "team player", "results-driven", "responsible for" - and lead with an outcome instead.',length:"Use one or two readable pages based on relevant evidence. Keep body text at least 9.5pt and remove low-value repetition before useful sections.",contact:"Put your email, phone, or LinkedIn at the very top. Reaching you should take one glance.",summary:"Use a short Summary only when it clarifies your level, specialization, domain, or career transition.",firstperson:'Drop "I", "my", "me" - resumes read in implied third person.'};function le(g,{clearCount:S,totalCount:d,lines:$,status:z}){const t=g.getContext("2d");if(!t)return;const p=ie(),i=1200,l=630;g.width=i,g.height=l,t.fillStyle="#0a070e",t.fillRect(0,0,i,l);let h=t.createRadialGradient(i*.86,l*.18,40,i*.86,l*.18,640);h.addColorStop(0,"rgba(255,77,109,0.17)"),h.addColorStop(1,"rgba(255,77,109,0)"),t.fillStyle=h,t.fillRect(0,0,i,l),h=t.createRadialGradient(i*.06,l*1.02,40,i*.06,l*1.02,520),h.addColorStop(0,"rgba(255,179,71,0.10)"),h.addColorStop(1,"rgba(255,179,71,0)"),t.fillStyle=h,t.fillRect(0,0,i,l);const a=2.6,P=72,E=54,F="M7 27 V11 C7 6.6 10.4 6 12.4 9.6 L16.4 22.4 C18.4 26 21.6 25.4 21.6 21 V5",T=new Path2D(F),w=t.createLinearGradient(0,32,32,0);w.addColorStop(0,p.accent),w.addColorStop(1,p.amber),t.save(),t.translate(P,E),t.scale(a,a),t.lineCap="round",t.lineJoin="round",t.strokeStyle=w,t.shadowColor="rgba(255,107,107,0.75)",t.shadowBlur=14,t.lineWidth=2.6,t.stroke(T),t.translate(4.2,.8),t.stroke(T),t.restore(),t.fillStyle="#fbf4f1",t.font="600 34px Fraunces, Georgia, serif",t.textBaseline="middle",t.fillText("Nyanza",P+30*a+18,E+16*a),t.textBaseline="alphabetic",t.fillStyle="#968ba0",t.font='500 21px "Spline Sans Mono", Menlo, monospace';try{t.letterSpacing="5px"}catch{}t.fillText("RECRUITER READABILITY",72,218);try{t.letterSpacing="0px"}catch{}t.fillStyle="#fbf4f1",t.font="500 170px Fraunces, Georgia, serif";const c=String(S);t.fillText(c,68,366);const v=t.measureText(c).width;t.fillStyle="#968ba0",t.font="500 38px Fraunces, Georgia, serif",t.fillText(`of ${d} checks clear`,68+v+18,366),t.fillStyle=p.accent,t.font="italic 500 38px Fraunces, Georgia, serif",t.fillText(z,72,428),t.font="400 25px Inter, system-ui, sans-serif";let N=486;for(const D of $.slice(0,3)){t.fillStyle=D.ok?p.ok:p.amber,t.fillText(D.ok?"✓":"→",72,N),t.fillStyle="#cbbcc6";let C=D.text;for(;t.measureText(C).width>620&&C.length>4;)C=C.slice(0,-4)+"...";t.fillText(C,106,N),N+=44}const u=i-235,y=l/2+30,b=150;t.lineWidth=20,t.lineCap="round",t.strokeStyle="rgba(255,255,255,0.08)",t.beginPath(),t.arc(u,y,b,0,Math.PI*2),t.stroke();const R=t.createLinearGradient(u-b,y-b,u+b,y+b);R.addColorStop(0,p.accent),R.addColorStop(1,p.amber),t.strokeStyle=R,t.beginPath(),t.arc(u,y,b,-Math.PI/2,-Math.PI/2+Math.PI*2*Math.max(.02,S/Math.max(1,d))),t.stroke(),t.strokeStyle="rgba(255,255,255,0.12)",t.lineWidth=1,t.beginPath(),t.moveTo(72,572),t.lineTo(i-72,572),t.stroke(),t.fillStyle="#968ba0",t.font='500 20px "Spline Sans Mono", Menlo, monospace',t.fillText("nyanza.ai/score",72,604);const L="the free resume check";t.fillText(L,i-72-t.measureText(L).width,604)}function ye(){Z("Free resume readability check - no signup | Nyanza","Review your resume against named recruiter-readability checks and get concrete fixes. Free, private, and in your browser.");const[g,S]=n.useState(""),[d,$]=n.useState(!1),[z,t]=n.useState(!1),[p,i]=n.useState(""),[l,h]=n.useState(""),[a,P]=n.useState(null),[E,F]=n.useState(""),[T,w]=n.useState(""),[c,v]=n.useState(null),N=n.useRef(null),u=n.useRef(null),y=n.useRef(null),b=n.useRef(null),R=n.useRef(null),[L,D]=n.useState([]),C=typeof navigator<"u"&&!!navigator.share;n.useEffect(()=>{x("score.view")},[]);const q=g.trim().length>0&&g.trim().length<80,A=(s,r)=>{const o=String(s||"").trim();if(o.length<80){i("That doesn't look like a full resume yet - paste the whole thing and try again.");return}i("");const k=ee(te(o)),I=k.recruiter||k,{checks:j}=I,m=j.filter(f=>!f.ok);
1m.sort((f,Q)=>(f.warn?1:0)-(Q.warn?1:0));const Y=m.slice(0,3).map(f=>({key:f.key,label:f.label,action:ce[f.key]||f.detail,detail:f.detail})),G=j.filter(f=>f.ok).length;P({checks:j,fixes:Y,failedCount:m.length,clearCount:G,totalCount:j.length,status:I.label||(m.length?"Review suggested":"Clear and readable")}),F(o),w(""),v(null),x("score.result",{clear:G,total:j.length,failed:m.length,via:r}),se("score")};n.useEffect(()=>{var I,j;if(!a||!u.current)return;let s=!1;const r=a.checks.filter(m=>m.ok).slice(0,2).map(m=>({ok:!0,text:m.label})),o=[...r,...a.fixes.map(m=>({ok:!1,text:m.action})).slice(0,3-r.length)];D(o);const k=()=>{!s&&u.current&&le(u.current,{clearCount:a.clearCount,totalCount:a.totalCount,lines:o,status:a.status})};k();try{(j=(I=document.fonts)==null?void 0:I.ready)==null||j.then(k)}catch{}return()=>{s=!0}},[a]),n.useEffect(()=>{if(!a||!y.current)return;let s=!1;try{s=window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{}y.current.focus({preventScroll:!0}),y.current.scrollIntoView({behavior:s?"auto":"smooth",block:"start"})},[a]),n.useEffect(()=>{var r;const s=R.current;R.current=a,s&&!a&&((r=b.current)==null||r.focus())},[a]);const O=async s=>{if(s){i(""),h(""),$(!0);try{const r=await ae(s);if(!r){i(/\.pdf$/i.test(s.name||"")?"This PDF looks like a scanned image - there's no selectable text in it. Paste your resume text below instead.":"Couldn't find text in that file - try a PDF, DOCX, TXT, or MD export, or paste the text below."),x("score.extract_failed",{kind:"empty"});return}S(r),A(r,"file-local")}catch(r){i("Couldn't read that file in this browser - paste your resume text below instead (select-all + copy works great)."),x("score.extract_failed",{kind:"error",message:String((r==null?void 0:r.message)||r).slice(0,160)})}finally{$(!1)}}},_=s=>{var r,o;s.preventDefault(),t(!1),O((o=(r=s.dataTransfer)==null?void 0:r.files)==null?void 0:o[0])},B=()=>new Promise(s=>{if(!u.current)return s(null);u.current.toBlob(s,"image/png")}),K=async()=>{const s=await B();if(!s){h("Couldn't render the card in this browser - try a screenshot on your device, or open this on a laptop."),x("score.card_download_failed");return}const r=URL.createObjectURL(s),o=document.createElement("a");o.href=r,o.download="nyanza-resume-readability-check.png",document.body.appendChild(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(r),4e3),x("score.card_download",{clear:a==null?void 0:a.clearCount,total:a==null?void 0:a.totalCount})},V=async()=>{var s;try{const r=await B(),o=`My resume cleared ${a==null?void 0:a.clearCount} of ${a==null?void 0:a.totalCount} recruiter-readability checks on Nyanza`;if(r){const k=new File([r],"nyanza-resume-readability-check.png",{type:"image/png"});if((s=navigator.canShare)!=null&&s.call(navigator,{files:[k]})){await navigator.share({files:[k],title:o,text:"Check yours free - no signup. nyanza.ai/score"}),x("score.share",{method:"native-file"});return}}await navigator.share({title:o,text:"Check yours free - no signup.",url:"https://nyanza.ai/score"}),x("score.share",{method:"native-url"})}catch{}},W=()=>{P(null),S(""),i(""),h(""),F(""),w(""),v(null)},X=()=>{const s=T.trim();if(s.length<60){v({error:"Paste the full posting - a title alone is not enough for a useful comparison."});return}const r=re(E,s);v(r),x("score.fit_teaser",{matched:r.matched.length,missing:r.missing.length})},H=s=>s.ok?"ok":s.warn?"warn":"fail",J=s=>s.ok?"check":s.warn?"warn":"x";return e.jsxs("div",{className:"sc-root",children:[e.jsx(ne,{}),e.jsxs("main",{className:"sc-wrap",children:[e.jsxs("section",{className:"sc-hero",children:[e.jsx("div",{className:"sc-eyebrow",children:"Free resume check - no signup"}),e.jsxs("h1",{className:"sc-title",children:["How clearly does your ",e.jsx("em",{children:"resume"})," read?"]}),e.jsx("p",{className:"sc-sub",children:"Drop it in for a transparent recruiter-readability check: source-backed sections, concrete outcomes, clear ownership, scannability, and page geometry - plus the top fixes."})]}),!a&&e.jsxs("section",{className:"sc-input","aria-label":"Add your resume",children:[e.jsxs("div",{ref:b,className:`sc-drop${z?" is-dragging":""}${d?" is-busy":""}`,role:"button",tabIndex:0,"aria-busy":d,"aria-disabled":d,"aria-label":d?"Reading your resume":"Drop a resume file here, or press Enter to choose one",onClick:()=>{var s;return!d&&((s=N.current)==null?void 0:s.click())},onKeyDown:s=>{var r;(s.key==="Enter"||s.key===" ")&&!d&&(s.preventDefault(),(r=N.current)==null||r.click())},onDragOver:s=>{s.preventDefault(),t(!0)},onDragLeave:()=>t(!1),onDrop:_,children:[e.jsx("span",{className:"sc-drop-ic",children:e.jsx(M,{name:"doc",size:26})}),e.jsx("span",{className:"sc-drop-main",children:d?"Reading your resume...":"Drop your resume here"}),e.jsx("span",{className:"sc-drop-sub",children:"or tap to choose a file - PDF, DOCX, TXT, or MD"}),e.jsx("input",{ref:N,type:"file",accept:".pdf,.docx,.txt,.md,.markdown,text/plain",hidden:!0,onChange:s=>{var r;O((r=s.target.files)==null?void 0:r[0]),s.target.value=""}})]}),e.jsx("div",{className:"sc-or","aria-hidden":"true",children:e.jsx("span",{children:"or paste it"})}),e.jsx("textarea",{className:"sc-textarea",value:g,onChange:s=>S(s.target.value),rows:9,placeholder:"Paste your full resume text here...","aria-label":"Paste your resume text"}),e.jsxs("div",{className:"sc-input-row",children:[e.jsx("button",{type:"button",className:"sc-btn",disabled:d||g.trim().length<80,onClick:()=>A(g,"paste"),children:"Check readability"}),e.jsx("p",{className:"sc-privacy",children:"Everything happens in your browser - your resume is parsed and reviewed right here on this page, and never uploaded anywhere."})]}),q&&e.jsx("p",{className:"sc-hint",role:"status",children:"Keep going - paste the full resume so the checks reflect the whole document."}),p&&e.jsxs("p",{className:"sc-error",role:"alert",children:[e.jsx(M,{name:"warn",size:15})," ",p]})]}
1),a&&e.jsxs("section",{className:"sc-result",ref:y,tabIndex:-1,children:[e.jsx("p",{className:"sc-sr-only","aria-live":"polite",children:`${a.status}. ${a.clearCount} of ${a.totalCount} recruiter-readability checks clear.`}),l&&e.jsx("p",{className:"sc-notice",children:l}),e.jsxs("div",{className:"sc-scorehead",children:[e.jsxs("div",{className:"sc-scorenum","aria-label":`${a.clearCount} of ${a.totalCount} recruiter-readability checks clear`,children:[e.jsx("span",{className:"sc-num",children:a.clearCount}),e.jsxs("span",{className:"sc-outof",children:["of ",a.totalCount," clear"]})]}),e.jsxs("div",{className:"sc-verdictwrap",children:[e.jsx("div",{className:"sc-verdict",children:a.status}),e.jsx("p",{className:"sc-verdict-sub",children:"A deterministic writing and layout review - not an ATS pass, interview forecast, or hiring probability."})]})]}),e.jsx("ul",{className:"sc-checks",children:a.checks.map(s=>e.jsxs("li",{className:`sc-check is-${H(s)}`,children:[e.jsx("span",{className:"sc-check-ic","aria-hidden":"true",children:e.jsx(M,{name:J(s),size:15})}),e.jsx("span",{className:"sc-check-label",children:s.label}),e.jsx("span",{className:"sc-check-detail",children:s.detail})]},s.key))}),a.fixes.length>0&&e.jsxs("div",{className:"sc-fixes",children:[e.jsx("h2",{className:"sc-h2",children:a.fixes.length===1?"Start with this fix":`Start with these ${a.fixes.length} fixes`}),e.jsx("ol",{children:a.fixes.map((s,r)=>e.jsxs("li",{className:"sc-fix",children:[e.jsx("span",{className:"sc-fix-n",children:r+1}),e.jsx("span",{children:s.action})]},s.key))})]}),e.jsxs("div",{className:"sc-cardblock",children:[e.jsx("h2",{className:"sc-h2",children:"Your readability card"}),e.jsx("canvas",{ref:u,role:"img",className:"sc-canvas","aria-label":`Share card: ${a.clearCount} of ${a.totalCount} recruiter-readability checks clear. ${a.status}. ${L.map(s=>`${s.ok?"Clear":"Review"}: ${s.text}`).join(". ")}`}),e.jsxs("div",{className:"sc-actions",children:[e.jsx("button",{type:"button",className:"sc-btn",onClick:K,children:"Download card"}),C&&e.jsx("button",{type:"button",className:"sc-ghostbtn",onClick:V,children:"Share..."}),e.jsx("a",{className:"sc-ghostbtn",href:oe,target:"_blank",rel:"noreferrer noopener",onClick:()=>x("score.share",{method:"linkedin"}),children:"Share on LinkedIn"})]}),e.jsx("p",{className:"sc-actions-note",children:"LinkedIn shares the link - download the card to attach it to your post."})]}),e.jsxs("div",{className:"sc-fitteaser",children:[e.jsx("h2",{className:"sc-h2",children:"Preview role evidence for a real job"}),e.jsx("p",{className:"sc-fit-sub",children:"Paste a posting to see which explicit requirement terms appear in this resume. Everything stays in your browser."}),e.jsx("textarea",{className:"sc-textarea sc-fit-ta",rows:5,placeholder:"Paste the job posting here - title, requirements, all of it...",value:T,onChange:s=>{w(s.target.value),c&&v(null)},"aria-label":"Job posting to compare with the resume"}),e.jsx("button",{type:"button",className:"sc-btn",disabled:T.trim().length<60,onClick:X,children:"Compare role evidence"}),c&&(c.error?e.jsx("p",{className:"sc-fit-err",role:"alert",children:c.error}):e.jsxs("div",{className:"sc-fit-result",role:"status",children:[e.jsxs("div",{className:"sc-fit-score",children:[e.jsx("strong",{children:c.matched.length}),e.jsxs("span",{children:["explicit evidence term",c.matched.length===1?"":"s"," found"]})]}),c.matched.length>0&&e.jsxs("p",{className:"sc-fit-line ok",children:[e.jsx("strong",{children:"Present in the resume:"})," ",c.matched.slice(0,6).join(", "),c.matched.length>6?` +${c.matched.length-6} more`:""]}),c.missing.length>0&&e.jsxs("p",{className:"sc-fit-line miss",children:[e.jsx("strong",{children:"Terms to verify:"})," ",c.missing.slice(0,6).join(", "),c.missing.length>6?` +${c.missing.length-6} more`:""]}),e.jsx("p",{className:"sc-fit-note",children:"This is literal term coverage, not proof that you meet a qualification, an ATS-pass result, or a hiring prediction. It can miss equivalent experience written differently. Verify each gap against your real work before adding language to the resume."}),e.jsx("a",{href:U,className:"sc-btn",children:"Create my Career Persona →"})]}))]}),e.jsxs("div",{className:"sc-cta",children:[e.jsx("h2",{className:"sc-cta-title",children:a.failedCount>0?e.jsxs(e.Fragment,{children:["Nyanza found ",a.failedCount," thing",a.failedCount===1?"":"s"," to fix. Its agents apply them."]}):e.jsx(e.Fragment,{children:"A clean sweep. Now put it to work."})}),e.jsx("p",{className:"sc-cta-sub",children:"Built from your supplied work, with source cues and automated checks to support your review. Tailored resumes, mock interviews, and matched jobs can all read the same living model of you."}),e.jsxs("div",{className:"sc-cta-actions",children:[e.jsx("a",{href:U,className:"sc-btn",children:"Request early access →"}),e.jsx("a",{href:"/#flow",className:"sc-ghostlink",children:"See how it works"})]})]}),e.jsx("button",{type:"button",className:"sc-again",onClick:W,children:"← Check another resume"})]})]}),e.jsxs("footer",{className:"sc-footer",children:[e.jsx("span",{children:"Nyanza - your career, modeled."}),e.jsx("a",{href:"/",children:"nyanza.ai"})]})]})}export{ye 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.