[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-category-en-news":3,"blog-list-en":10},[4,6,8],{"path":5},"\u002Fblog\u002Fdirect-developer-hiring-without-agencies",{"path":7},"\u002Fblog\u002Fsalary-transparency-in-tech-hiring",{"path":9},"\u002Fblog\u002Fwriting-technical-job-posting-developers-trust",[11,164,337,508,696,911,1070,1205,1322,1437,1606,1687,1784],{"id":12,"title":13,"author":14,"body":17,"category":137,"cover":138,"date":148,"dateModified":148,"description":149,"extension":150,"meta":151,"minutes":152,"navigation":153,"path":154,"seo":155,"stem":156,"tags":157,"version":162,"__hash__":163},"blog_en\u002Fblog\u002Frelease-22-07-2026.md","Release 22.07.2026 — partners, richer company pages, and the DevHunt blog",{"name":15,"type":16},"DevHunt Product Team","Organization",{"type":18,"value":19,"toc":132},"minimark",[20,25,59,62,98,100,115,117],[21,22,24],"h2",{"id":23},"what-shipped","What shipped",[26,27,30],"release-section",{"kind":28,"title":29},"new","New",[31,32,33,47,53],"ul",{},[34,35,36,40,41,46],"li",{},[37,38,39],"strong",{},"Partners page."," Meet the tools DevHunt runs on and the communities we work with — including IT Poznań Hub — on the new ",[42,43,45],"a",{"href":44},"\u002Fpartners","partners page",", available in all four languages.",[34,48,49,52],{},[37,50,51],{},"Redesigned public company pages."," Company profiles got a proper hero with an intro line, founded year, custom section headings, and titled gallery photos. Professional and Enterprise plans show the richest version.",[34,54,55,58],{},[37,56,57],{},"The DevHunt blog."," Release notes and practical hiring guides now live here on the blog, localized in English, Ukrainian, German, and Polish.",[60,61],"hr",{},[26,63,66],{"kind":64,"title":65},"improved","Improved",[31,67,68,74,80,86,92],{},[34,69,70,73],{},[37,71,72],{},"Smooth in-page scrolling."," Anchor links now glide to their section instead of jumping — across the whole site.",[34,75,76,79],{},[37,77,78],{},"Closed vacancies leave Google faster."," DevHunt notifies Google the moment a vacancy is published, edited, or closed, and an hourly job covers auto-closed postings — stale listings disappear from search results much sooner.",[34,81,82,85],{},[37,83,84],{},"More accurate job listings in Google."," Remote roles now describe where applicants can be based the way job search expects, so they surface correctly.",[34,87,88,91],{},[37,89,90],{},"Simpler company profile form."," The obsolete \"SEO keywords\" field is gone — search engines have ignored meta keywords for years, so we removed the busywork.",[34,93,94,97],{},[37,95,96],{},"Sign-up reliability."," Account provisioning got another hardening pass; an interrupted sign-up now repairs itself on the next visit.",[60,99],{},[26,101,104],{"kind":102,"title":103},"fixed","Fixed",[31,105,106,112],{},[34,107,108,111],{},[37,109,110],{},"Board view on the application pipeline."," Companies with Board access could see the toggle disabled until a vacancy section was expanded. The entitlement now arrives with your subscription status, so the board is available immediately.",[34,113,114],{},"A missing-translation warning on the applicants page is gone.",[60,116],{},[26,118,121],{"kind":119,"title":120},"engineering","Under the hood",[31,122,123,126,129],{},[34,124,125],{},"Google Indexing API integration with fail-soft behaviour and an hourly sweep worker.",[34,127,128],{},"New automated guardrails enforce the job-posting structured-data shape and blog author links.",[34,130,131],{},"Five automated code-health batches landed this cycle, and local tooling got a couple of quality-of-life fixes.",{"title":133,"searchDepth":134,"depth":134,"links":135},"",2,[136],{"id":23,"depth":134,"text":24},"release-notes",{"image":139,"alt":140,"width":141,"height":142,"ogImage":143,"schemaImages":144,"caption":147},"\u002Fimages\u002Fblog\u002Frelease-2026-07-07-rebrand-free-tier-messaging\u002Frelease-2026-07-07-rebrand-free-tier-messaging-16x9.webp","Deployment telemetry flowing through production servers",2400,1350,"\u002Fimages\u002Fblog\u002Frelease-2026-07-07-rebrand-free-tier-messaging\u002Frelease-2026-07-07-rebrand-free-tier-messaging-og.webp",[139,143,145,146],"\u002Fimages\u002Fblog\u002Frelease-2026-07-07-rebrand-free-tier-messaging\u002Frelease-2026-07-07-rebrand-free-tier-messaging-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-07-07-rebrand-free-tier-messaging\u002Frelease-2026-07-07-rebrand-free-tier-messaging-1x1.webp","Production telemetry traces each deployment through the server stack","2026-07-22","A partner directory, redesigned public company pages, a localized blog, smoother navigation, and faster search updates for closed vacancies.","md",{},3,true,"\u002Fblog\u002Frelease-22-07-2026",{"title":13,"description":149},"blog\u002Frelease-22-07-2026",[158,159,160,161],"release","partners","company-pages","seo","22.07.2026","nwoBun6uRafQtG_LJLVX6ZEUQZeuwJ0xJ5QZLAXIP2o",{"id":165,"title":166,"author":167,"body":169,"category":315,"cover":316,"date":324,"dateModified":324,"description":325,"extension":150,"meta":326,"minutes":327,"navigation":153,"path":328,"seo":329,"stem":330,"tags":331,"version":335,"__hash__":336},"blog_en\u002Fblog\u002Fanonymous-candidate-profiles-privacy-first-job-search.md","Anonymous candidate profiles: what employers need to see",{"name":168,"type":16},"DevHunt Editorial Team",{"type":18,"value":170,"toc":304},[171,175,178,182,185,188,191,195,198,201,204,208,211,214,217,221,224,227,230,237,241,244,247,250,258,262,265,268,271,275,278,281,284,288,291,294,298,301],[172,173,174],"p",{},"A developer browsing possible roles should not have to publish a name, photograph, phone number, and current employer just to find out whether a conversation is worthwhile. At the same time, an employer needs more than an empty card marked “backend developer.” An anonymous profile is the middle ground: it shows work-related information while keeping identity and contact details under the candidate's control.",[172,176,177],{},"That boundary has to be real. A hidden name offers little protection if the same page shows a personal website, an exact employment history, or a recognisable photograph. At the other extreme, a profile stripped of useful context gives recruiters no reason to write a relevant message. The product has to reveal enough for a work-related decision and stop before the person becomes identifiable.",[21,179,181],{"id":180},"what-an-employer-can-assess-without-identity","What an employer can assess without identity",[172,183,184],{},"For an initial relevance decision, employers usually need professional information rather than civil identity. A structured profile can show target position, seniority, years or depth of relevant experience, skills, languages, domain knowledge, preferred work formats, employment options, location constraints, and compensation expectations.",[172,186,187],{},"These signals should be specific enough to support a reasoned invitation. A skill list alone is weak; experience context and proficiency matter. A seniority label alone is also weak because companies define levels differently. Combining several fields helps an employer decide whether the role and candidate are plausibly aligned.",[172,189,190],{},"An anonymous profile does not replace an interview or technical assessment. It helps both sides decide whether to start a conversation. The employer still needs to explain the role, ask questions related to the work, and use the same standard for each candidate.",[21,192,194],{"id":193},"which-details-remain-private","Which details remain private",[172,196,197],{},"Identity and contact data should remain outside public search by default. That includes full name, personal email, phone number, avatar, precise home address, and documents such as a CV when they contain identifying details. Current employer and education may also identify a person when the combination is unique, so platforms and candidates need control over how much detail is shown.",[172,199,200],{},"Privacy is contextual. A rare job title in a small city, an exact project description, and a niche technology can identify someone even without a name. Candidates should review the whole profile for indirect clues. Platforms should avoid encouraging overly specific free text on anonymous surfaces.",[172,202,203],{},"Employers should not try to reconstruct identity through external search before consent. Besides undermining trust, that behaviour may create data-protection and fairness risks. Use the visible professional signals for the purpose for which they were provided: deciding whether to invite a conversation.",[21,205,207],{"id":206},"consent-should-be-specific-to-the-conversation","Consent should be specific to the conversation",[172,209,210],{},"Contact sharing is most defensible when the candidate makes an explicit choice in a specific conversation. The employer sees who is sharing, what information becomes visible, and why. Sharing with one recruiter should not silently reveal details to another company or another conversation.",[172,212,213],{},"The candidate should also understand whether a CV link expires, whether access can be revoked, and what happens to previously downloaded material. A platform can remove access to hosted data, but it cannot guarantee deletion of copies already lawfully downloaded by a recipient. Clear expectations are better than impossible promises.",[172,215,216],{},"On DevHunt, candidate identity and contact information remain hidden from recruiters until the candidate shares them in chat. The access state is conversation-specific. Product controls support consent, while each employer remains responsible for how authorised users handle data after receiving it.",[21,218,220],{"id":219},"how-anonymity-changes-employer-behaviour","How anonymity changes employer behaviour",[172,222,223],{},"Anonymous search puts more weight on the role itself. Recruiters have to write from the skills, experience, preferences, and vacancy in front of them rather than from a name, photograph, assumed age, or famous employer. It cannot make judgement perfectly fair, but it removes several early cues that have little to do with the work.",[172,225,226],{},"The invitation should state why the visible profile matches. Generic messages are especially damaging in an anonymous system because they suggest the employer ignored the structured information. Reference two or three relevant signals and provide enough vacancy detail for the candidate to decide whether to respond.",[172,228,229],{},"Employers should use the same screening criteria for every candidate. Write those criteria from the job requirements before browsing profiles. Do not raise the bar after identity is revealed or treat contact sharing as evidence of stronger qualification.",[172,231,232,233,236],{},"Our guide to ",[42,234,235],{"href":5},"direct developer hiring"," explains how to structure outreach, assessment, and response ownership around that direct relationship.",[21,238,240],{"id":239},"how-candidates-can-create-a-useful-private-profile","How candidates can create a useful private profile",[172,242,243],{},"Start with the work you want next, not a complete career history. Select a recognisable target role and realistic seniority. Add the technologies and domains you can discuss with evidence. State work-format, location, employment, and compensation preferences clearly enough to prevent mismatched invitations.",[172,245,246],{},"Describe outcomes without revealing confidential or identifying information. “Improved reliability of a high-traffic payment service” may show useful scope; naming a private customer, internal system, exact incident, and team structure may expose more than intended. Respect current and former employer confidentiality.",[172,248,249],{},"Review indirect identifiers. Personal project links, unique certifications, small-location combinations, and precise dates can narrow identity. Decide whether each detail improves matching enough to justify the exposure. Keep documents private until a conversation warrants them.",[172,251,252,253,257],{},"Search current ",[42,254,256],{"href":255},"\u002Ffind-work","developer roles"," before completing preferences. Real vacancies help calibrate titles, work formats, and compensation fields without requiring public identity.",[21,259,261],{"id":260},"security-and-product-safeguards-matter","Security and product safeguards matter",[172,263,264],{},"An anonymity promise must be enforced in every surface, not only the profile page. Search results, analytics, notifications, chat lists, file previews, browser metadata, logs, and error messages can leak data if they use an identity field without checking consent.",[172,266,267],{},"Access controls should fail closed: when the system cannot confirm that sharing occurred in this conversation, private data should remain hidden. Company membership and recruiter permissions need server-side validation. Sensitive URLs should expire where appropriate, and revocation should remove future access to hosted resources.",[172,269,270],{},"Search engines should not index private candidate routes. Robots rules are helpful for crawl control, but they are not access control; authentication and authorisation must prevent retrieval. Public sitemaps should include vacancies and companies intended for discovery, never private candidate records.",[21,272,274],{"id":273},"data-minimisation-continues-after-contact-is-shared","Data minimisation continues after contact is shared",[172,276,277],{},"Once a candidate shares details, the employer should collect and retain only what the process needs. Define who can view records, where interview notes are stored, how long unsuccessful-candidate data is retained, and how rights requests are handled. Do not export profiles into uncontrolled spreadsheets or personal messaging channels by default.",[172,279,280],{},"Keep interview notes factual and related to published criteria. Avoid sensitive personal observations. If a candidate withdraws or revokes platform access, follow the company’s retention policy and applicable law. Product features do not replace the employer’s obligations as a data controller or equivalent role under local rules.",[172,282,283],{},"Requirements vary by jurisdiction. Privacy notices, lawful basis, retention, international transfers, automated decision-making, and employment law require qualified advice for the markets involved. This article is product and process guidance, not a legal opinion.",[21,285,287],{"id":286},"know-the-limits-of-anonymous-hiring","Know the limits of anonymous hiring",[172,289,290],{},"Some information must eventually be verified. Contracts, right-to-work checks, payroll, conflict checks, and references may require identity. The objective is not permanent anonymity; it is to delay disclosure until there is a legitimate reason and a chosen recipient.",[172,292,293],{},"Anonymous profiles also do not guarantee fair decisions. A skill or career pattern can become a stand-in for personal background, assessment criteria can be badly chosen, and interviewers may behave differently after a name is shared. Compare what happens at each step—from the first invitation to contact sharing, interview, and offer—and investigate unexplained gaps in the process without trying to infer protected personal characteristics.",[21,295,297],{"id":296},"put-the-boundary-at-the-first-conversation","Put the boundary at the first conversation",[172,299,300],{},"An employer needs enough evidence to write a serious invitation. A candidate needs to know who will receive personal details and why. A structured anonymous profile can meet both needs: professional information is visible for the first decision, while identity and contact details move only after a deliberate choice.",[172,302,303],{},"Candidates should be able to see this boundary in the interface and explain it in one sentence. Recruiters should not be able to cross it through another page, a search result, or a technical shortcut. If those rules hold everywhere, the first conversation can begin with the work instead of the person's identity.",{"title":133,"searchDepth":134,"depth":134,"links":305},[306,307,308,309,310,311,312,313,314],{"id":180,"depth":134,"text":181},{"id":193,"depth":134,"text":194},{"id":206,"depth":134,"text":207},{"id":219,"depth":134,"text":220},{"id":239,"depth":134,"text":240},{"id":260,"depth":134,"text":261},{"id":273,"depth":134,"text":274},{"id":286,"depth":134,"text":287},{"id":296,"depth":134,"text":297},"product",{"image":317,"alt":318,"width":141,"height":142,"ogImage":319,"schemaImages":320,"caption":323},"\u002Fimages\u002Fblog\u002Fanonymous-candidate-profiles\u002Fanonymous-candidate-profiles-16x9.webp","Developer skills and code visible while identity fields remain redacted","\u002Fimages\u002Fblog\u002Fanonymous-candidate-profiles\u002Fanonymous-candidate-profiles-og.webp",[317,319,321,322],"\u002Fimages\u002Fblog\u002Fanonymous-candidate-profiles\u002Fanonymous-candidate-profiles-4x3.webp","\u002Fimages\u002Fblog\u002Fanonymous-candidate-profiles\u002Fanonymous-candidate-profiles-1x1.webp","Technical evidence is visible while identifying details remain private","2026-07-21","How candidates can show relevant experience while keeping their name and contact details private until they choose to share them.",{},10,"\u002Fblog\u002Fanonymous-candidate-profiles-privacy-first-job-search",{"title":166,"description":325},"blog\u002Fanonymous-candidate-profiles-privacy-first-job-search",[332,333,334],"candidate privacy","anonymous profiles","job search",null,"5ER_JeeeE4gwWi16rxvkvVTSSpShWNMYlimfvoAGBGM",{"id":338,"title":339,"author":340,"body":341,"category":490,"cover":491,"date":324,"dateModified":324,"description":499,"extension":150,"meta":500,"minutes":327,"navigation":153,"path":5,"seo":501,"stem":502,"tags":503,"version":335,"__hash__":507},"blog_en\u002Fblog\u002Fdirect-developer-hiring-without-agencies.md","How to hire developers directly without an agency",{"name":168,"type":16},{"type":18,"value":342,"toc":480},[343,346,349,353,356,359,362,366,369,372,379,383,386,389,406,409,413,416,419,422,425,429,432,435,438,442,445,452,456,459,467,471,474,477],[172,344,345],{},"When a company hires a developer without an agency, the conversation becomes shorter: the candidate can ask the team directly about the codebase, and the team hears the candidate's questions without a relay. The work around that conversation does not disappear. Someone still has to find people, answer them, organise interviews, make decisions, and close the hire.",[172,347,348],{},"Direct hiring works when those responsibilities have names and deadlines. If “no intermediary” turns into “no process,” candidates simply wait longer for less information. This guide covers the parts an in-house team needs to own and the points at which outside help may still earn its fee.",[21,350,352],{"id":351},"decide-which-roles-belong-in-a-direct-channel","Decide which roles belong in a direct channel",[172,354,355],{},"Begin with role clarity. Direct sourcing is easier when the team can describe the work, the technical environment, the reporting line, and the reason the position is open. A broad request for a “strong full-stack developer” transfers uncertainty to candidates and creates noisy applications.",[172,357,358],{},"Choose direct hiring when at least one person inside the company can evaluate the relevant experience and answer technical questions. It is especially useful for repeatable roles, visible product teams, and companies that want to develop their own talent network. An agency may remain appropriate for confidential searches, unfamiliar markets, executive appointments, or roles where the company lacks sourcing capacity.",[172,360,361],{},"Write a one-page role brief before publishing anything. Record the outcomes expected in the first months, essential technical constraints, acceptable adjacent experience, compensation range, work location, employment form, interview owners, and target decision date. If stakeholders disagree, resolve it before candidates absorb the cost of that disagreement.",[21,363,365],{"id":364},"make-the-vacancy-useful-enough-to-self-qualify","Make the vacancy useful enough to self-qualify",[172,367,368],{},"A direct vacancy must answer the questions an intermediary would normally clarify. Explain what the person will build or maintain, how the team works, which requirements are firm, and which can be learned. State the working model and compensation approach. Describe the interview stages and who participates.",[172,370,371],{},"Separate evidence from adjectives. “Five years of experience” is only useful when the work genuinely requires exposure that cannot be demonstrated another way. “Passionate,” “rockstar,” and “fast-paced” do not help a developer judge fit. Concrete constraints do: production ownership, on-call expectations, legacy migration, regulated data, customer contact, or a particular time-zone overlap.",[172,373,374,375,378],{},"Use the guide to ",[42,376,377],{"href":9},"writing a technical job posting developers trust"," as a pre-publication review. A better vacancy reduces unsuitable applications and gives outreach a credible destination.",[21,380,382],{"id":381},"source-with-a-reason-not-a-template","Source with a reason, not a template",[172,384,385],{},"Direct outreach should explain why the person appears relevant. Refer to a specific skill, project type, domain, or responsibility visible in the profile. Then connect it to the actual role in two or three sentences. Avoid pretending to know personal motivations, and do not pressure someone to disclose salary or contact information before they understand the opportunity.",[172,387,388],{},"Keep the first message compact:",[31,390,391,394,397,400,403],{},[34,392,393],{},"who you are and your connection to the hiring team;",[34,395,396],{},"what the role is responsible for;",[34,398,399],{},"why the person’s visible experience may fit;",[34,401,402],{},"the working model and compensation range, when available;",[34,404,405],{},"a low-pressure next step.",[172,407,408],{},"Measure reply quality, not only reply volume. If many relevant people decline for the same reason, update the role or the offer. If outreach receives no response, review specificity, reputation signals, and whether the vacancy supports the claims made in the message.",[21,410,412],{"id":411},"screen-for-evidence-and-adjacent-ability","Screen for evidence and adjacent ability",[172,414,415],{},"Agree on the assessment criteria before the first interview. Limit them to capabilities that predict success in this job: for example, designing a service boundary, debugging distributed failures, maintaining accessible interfaces, or collaborating with non-technical colleagues. Describe what convincing evidence would look like for each one.",[172,417,418],{},"Use the initial conversation to test mutual fit, not to conduct a compressed technical exam. Confirm the candidate’s interests, relevant examples, availability, work constraints, and questions. Explain what the team needs and allow a candidate to opt out without friction.",[172,420,421],{},"Technical assessment should resemble the work. A short discussion of an existing system, a focused code review, or a small bounded exercise is usually more informative than an unrelated puzzle. If you ask for take-home work, state the time limit, accept incomplete trade-offs, and do not use candidate output as unpaid production work.",[172,423,424],{},"Interviewers should write down their evidence independently before a group discussion. This keeps the loudest or most recent opinion from setting the tone. Record what was observed, not vague impressions such as “not senior enough” or “wouldn't fit the culture.”",[21,426,428],{"id":427},"keep-the-process-moving","Keep the process moving",[172,430,431],{},"Speed comes from preparation, not from skipping assessment. Reserve interview time before sourcing begins. Name one process owner. Send an agenda for every stage and communicate when a decision will be made. When the schedule changes, tell the candidate rather than going silent.",[172,433,434],{},"A compact process might include an introductory conversation, one role-relevant technical stage, a team discussion, and a final decision. More stages can be justified for complex roles, but each one should answer a distinct question. Repeated interviews that test the same capability add delay without improving confidence.",[172,436,437],{},"Close feedback loops internally within a defined period. A candidate who has invested several hours should not wait while stakeholders rediscover the requirements. Rejections can be concise, but they should be clear and respectful. Where policy permits useful feedback, tie it to the assessed criteria rather than personality.",[21,439,441],{"id":440},"protect-privacy-and-access","Protect privacy and access",[172,443,444],{},"Direct contact does not justify collecting more data. Ask only for information necessary for the hiring decision. Restrict notes and documents to the people involved, define retention rules, and use approved channels for sensitive material. Local law and company policy determine specific obligations; obtain qualified advice for your jurisdiction rather than copying a generic checklist.",[172,446,447,448,451],{},"DevHunt uses anonymous candidate profiles so employers can first assess professional signals. Identity and contact details remain controlled by the candidate until they choose to share them in a conversation. Our guide to ",[42,449,450],{"href":328},"privacy-first candidate profiles"," explains what that changes for both sides.",[21,453,455],{"id":454},"know-when-to-bring-in-outside-help","Know when to bring in outside help",[172,457,458],{},"Direct hiring is not a loyalty test. Escalate when the search is consuming more specialist time than planned, the team cannot reach the relevant market, confidentiality is essential, or repeated attempts reveal a compensation or role-design problem that needs external perspective.",[172,460,461,462,466],{},"If you engage an agency, define the brief and ownership rules carefully. A good partner should add reach, judgement, or delivery capacity, not merely forward profiles found through the same public channels. Compare the full cost and included work using the ",[42,463,465],{"href":464},"\u002Fblog\u002Fsubscription-instead-of-success-fee","subscription and success-fee guide",".",[21,468,470],{"id":469},"review-the-system-after-every-hire","Review the system after every hire",[172,472,473],{},"Track a small set of operational measures: relevant replies, qualified screens, stage conversion, time between stages, candidate withdrawals, offer acceptance, and the internal hours used. Break results down by role type and source without turning the dashboard into a substitute for judgement.",[172,475,476],{},"After the role closes, ask where information was missing, which interview produced useful evidence, and why suitable candidates withdrew. Update the role brief, vacancy template, and assessment criteria while the details are still fresh.",[172,478,479],{},"The real test is simple: can a candidate understand the job, speak to someone who knows it, and get a clear answer on time? If the team can do those three things consistently, direct hiring becomes more than a way to avoid a fee. It becomes a process the company can improve with every hire.",{"title":133,"searchDepth":134,"depth":134,"links":481},[482,483,484,485,486,487,488,489],{"id":351,"depth":134,"text":352},{"id":364,"depth":134,"text":365},{"id":381,"depth":134,"text":382},{"id":411,"depth":134,"text":412},{"id":427,"depth":134,"text":428},{"id":440,"depth":134,"text":441},{"id":454,"depth":134,"text":455},{"id":469,"depth":134,"text":470},"news",{"image":492,"alt":493,"width":141,"height":142,"ogImage":494,"schemaImages":495,"caption":498},"\u002Fimages\u002Fblog\u002Fdirect-developer-hiring-without-agencies\u002Fdirect-developer-hiring-without-agencies-16x9.webp","Two developers reviewing source code and a pull request together","\u002Fimages\u002Fblog\u002Fdirect-developer-hiring-without-agencies\u002Fdirect-developer-hiring-without-agencies-og.webp",[492,494,496,497],"\u002Fimages\u002Fblog\u002Fdirect-developer-hiring-without-agencies\u002Fdirect-developer-hiring-without-agencies-4x3.webp","\u002Fimages\u002Fblog\u002Fdirect-developer-hiring-without-agencies\u002Fdirect-developer-hiring-without-agencies-1x1.webp","A pull request is reviewed by the people who will own the code","A practical guide to sourcing, interviewing, and hiring developers in-house, including the work your team must be ready to own.",{},{"title":339,"description":499},"blog\u002Fdirect-developer-hiring-without-agencies",[504,505,506],"direct hiring","developer recruitment","hiring process","ze-YOOc-oeualARxn7pBj4Adb-MyKHWnuPprzJ1bAtc",{"id":509,"title":510,"author":511,"body":512,"category":490,"cover":679,"date":324,"dateModified":324,"description":687,"extension":150,"meta":688,"minutes":327,"navigation":153,"path":7,"seo":689,"stem":690,"tags":691,"version":335,"__hash__":695},"blog_en\u002Fblog\u002Fsalary-transparency-in-tech-hiring.md","How to publish a salary range candidates can trust",{"name":168,"type":16},{"type":18,"value":513,"toc":668},[514,517,520,524,527,530,533,537,540,543,546,550,553,556,559,563,566,589,592,595,599,602,609,612,616,619,622,625,629,632,635,638,642,645,648,655,659,662,665],[172,515,516],{},"A developer sees a vacancy, likes the work, and still cannot answer the most basic question: can this company pay an amount I would accept? Publishing a salary range lets that decision happen before either side spends an hour on a call. It also forces the hiring team to agree on the level it can actually afford.",[172,518,519],{},"Two numbers alone are not enough. A range that has not been approved, covers several different jobs, or refers to a different contract type will create the same uncertainty later in the process. The public figure, interview criteria, and eventual offer need to tell the same story.",[21,521,523],{"id":522},"define-the-role-before-pricing-it","Define the role before pricing it",[172,525,526],{},"Compensation cannot repair an undefined job. Confirm the scope, level, decision authority, expected outcomes, location, employment form, and scarce capabilities before selecting a range. If stakeholders describe different roles, a single range will hide the disagreement until the final interview.",[172,528,529],{},"Use an internal level framework where one exists, but translate it into responsibilities a candidate can recognise. Titles vary sharply between companies. A senior engineer in one organisation may lead architecture across teams; in another, the same title means independent delivery within one product squad.",[172,531,532],{},"Record the evidence that separates the lower, middle, and upper parts of the range. This keeps interviewers from assigning level through intuition after meeting a candidate they like. It also gives recruiters a fair explanation of how the offer will be calibrated.",[21,534,536],{"id":535},"build-the-range-from-comparable-inputs","Build the range from comparable inputs",[172,538,539],{},"Use compensation data relevant to the role’s location, employment form, discipline, and level. Internal pay relationships matter alongside external data. A range that attracts candidates but creates unexplained differences with current employees transfers the problem into retention and trust.",[172,541,542],{},"Document the date and source of each input. Market data ages, and a number copied from an old vacancy can become detached from current approval. Avoid presenting a midpoint as a universal market truth; it is a company decision informed by available evidence.",[172,544,545],{},"For cross-border hiring, distinguish gross salary, net pay, employer cost, and contractor invoice value. Taxes, benefits, leave, social contributions, and currency risk differ. These figures should not be compared as if they represent the same arrangement. Qualified payroll and legal advice is necessary for the jurisdictions involved.",[21,547,549],{"id":548},"choose-a-range-that-communicates-a-real-decision","Choose a range that communicates a real decision",[172,551,552],{},"The lower bound should be an amount the company would genuinely offer to someone who meets the published requirements at the intended level. The upper bound should be reachable within the same role, not reserved for a different job that has not been advertised.",[172,554,555],{},"An excessively wide range creates nominal compliance but weak information. It pushes the real negotiation back into private conversation and may attract candidates whose expectations the company never intended to meet. A range that is too narrow can create false precision when the company is open to adjacent levels.",[172,557,558],{},"If more than one level is genuinely possible, state that clearly and explain how scope changes. Consider separate vacancies when the responsibilities, interview bar, or reporting relationship would be materially different. One page should not quietly contain three jobs.",[21,560,562],{"id":561},"state-what-the-figures-mean","State what the figures mean",[172,564,565],{},"Every published range needs context:",[31,567,568,571,574,577,580,583,586],{},[34,569,570],{},"currency and payment period;",[34,572,573],{},"gross, net, or invoice basis;",[34,575,576],{},"employment or contract form;",[34,578,579],{},"whether location changes the range;",[34,581,582],{},"fixed compensation versus variable pay;",[34,584,585],{},"major benefits or equity described separately;",[34,587,588],{},"review cadence, if the company has an established policy.",[172,590,591],{},"Do not combine the theoretical value of every benefit into one impressive total unless candidates can understand the assumptions. Equity requires its own explanation; a paper valuation is not cash salary. Bonuses should be described by target, conditions, and whether payment is guaranteed.",[172,593,594],{},"For remote roles, say whether the company uses one global range, regional bands, or a location adjustment. None of these policies is automatically fair in every setting, but an unexplained adjustment during the offer stage will feel arbitrary.",[21,596,598],{"id":597},"connect-the-range-to-the-vacancy","Connect the range to the vacancy",[172,600,601],{},"Place compensation near the working conditions, not in a footnote. The title, seniority, responsibilities, and requirements should support the advertised band. If the text asks for technical leadership, on-call ownership, mentoring, and deep domain expertise while the approved range was built for a narrower individual-contributor role, rewrite the job or revisit the budget.",[172,603,604,605,608],{},"The guide to ",[42,606,607],{"href":9},"writing a technical job posting"," provides a full structure. Compensation is one part of that agreement, alongside work format, employment type, interview stages, and the problems the person will own.",[172,610,611],{},"Keep structured fields and visible text in sync. A search filter may show salary before a candidate opens the page. If that field uses a different basis from the body, the first signal is already misleading.",[21,613,615],{"id":614},"discuss-compensation-early-and-consistently","Discuss compensation early and consistently",[172,617,618],{},"A public range does not eliminate the conversation. Confirm the candidate has seen it and explain how placement is decided. Ask about expectations without forcing disclosure of previous salary, which may be irrelevant or restricted in some jurisdictions.",[172,620,621],{},"Recruiters and interviewers should use the same explanation. Create a short internal note covering the range basis, level criteria, approved exceptions, and escalation owner. Do not allow each interviewer to improvise a different promise about bonuses, review timing, or remote-location policy.",[172,623,624],{},"If a candidate’s expectation is above the range, decide whether the role can change. Continuing through several interviews while hoping the issue disappears wastes both sides’ time. If the budget changes, update the public page promptly rather than leaving stale figures in search results.",[21,626,628],{"id":627},"handle-exceptions-without-undermining-the-policy","Handle exceptions without undermining the policy",[172,630,631],{},"Exceptions may be justified by a different level, rare relevant experience, a competing offer, location, or a revised role. Record the reason and compare it with similar decisions. An exception that cannot be explained consistently is a warning that the framework needs work.",[172,633,634],{},"Do not stretch the public range after selecting a candidate merely to make the offer appear compliant. If the approved scope has changed, update the vacancy and consider whether other candidates were assessed against the wrong role.",[172,636,637],{},"Review the effect on internal equity. Transparency creates questions from current employees, and those questions may be legitimate. Prepare managers to discuss pay philosophy and correction processes instead of treating the vacancy range as information intended only for outsiders.",[21,639,641],{"id":640},"measure-whether-transparency-improves-the-process","Measure whether transparency improves the process",[172,643,644],{},"Track outcomes that reveal clarity: candidate withdrawals related to compensation, recruiter screens ending on expectations, offer acceptance, exceptions, time spent negotiating, and questions repeated across interviews. Compare by role and employment model.",[172,646,647],{},"Do not interpret more applications as proof of success. A useful range may reduce volume while increasing the share of viable conversations. Candidate feedback can also reveal whether the range is understood and whether later discussions match the page.",[172,649,650,651,654],{},"Review live ",[42,652,653],{"href":255},"developer vacancies with salary filters"," to see how compensation interacts with role and work-format information. The employer’s responsibility is to keep those fields current for the life of the vacancy.",[21,656,658],{"id":657},"keep-the-published-range-current","Keep the published range current",[172,660,661],{},"Assign ownership for range approval, publication, exceptions, and updates. Review the data when a role reopens, when responsibilities change, or when observed offers repeatedly cluster outside the band. Archive closed vacancies so outdated ranges do not continue to attract search traffic.",[172,663,664],{},"Requirements differ by jurisdiction and continue to change. This guide describes an operating approach, not legal advice. Employers should confirm applicable disclosure, equal-pay, recordkeeping, and candidate-data rules with qualified counsel.",[172,666,667],{},"A credible range lets a developer make an earlier decision and gives the company a defensible basis for the offer. It does not have to predict every negotiation. It does have to be a statement the hiring team is prepared to honour.",{"title":133,"searchDepth":134,"depth":134,"links":669},[670,671,672,673,674,675,676,677,678],{"id":522,"depth":134,"text":523},{"id":535,"depth":134,"text":536},{"id":548,"depth":134,"text":549},{"id":561,"depth":134,"text":562},{"id":597,"depth":134,"text":598},{"id":614,"depth":134,"text":615},{"id":627,"depth":134,"text":628},{"id":640,"depth":134,"text":641},{"id":657,"depth":134,"text":658},{"image":680,"alt":681,"width":141,"height":142,"ogImage":682,"schemaImages":683,"caption":686},"\u002Fimages\u002Fblog\u002Fsalary-transparency-tech-hiring\u002Fsalary-transparency-tech-hiring-16x9.webp","A compensation range mapped to developer level and system responsibility","\u002Fimages\u002Fblog\u002Fsalary-transparency-tech-hiring\u002Fsalary-transparency-tech-hiring-og.webp",[680,682,684,685],"\u002Fimages\u002Fblog\u002Fsalary-transparency-tech-hiring\u002Fsalary-transparency-tech-hiring-4x3.webp","\u002Fimages\u002Fblog\u002Fsalary-transparency-tech-hiring\u002Fsalary-transparency-tech-hiring-1x1.webp","Compensation grows with the scope and complexity of engineering responsibility","Set and explain a credible salary range for a technical role, then keep interviews and offers consistent with the vacancy.",{},{"title":510,"description":687},"blog\u002Fsalary-transparency-in-tech-hiring",[692,693,694],"salary transparency","compensation range","technical hiring","f-HlWJTChvauIWwM8R-PQcaMq_Ua6w3e5ett8AGt_RU",{"id":697,"title":698,"author":699,"body":700,"category":490,"cover":895,"date":324,"dateModified":324,"description":903,"extension":150,"meta":904,"minutes":327,"navigation":153,"path":9,"seo":905,"stem":906,"tags":907,"version":335,"__hash__":910},"blog_en\u002Fblog\u002Fwriting-technical-job-posting-developers-trust.md","How to write a technical job posting developers will trust",{"name":168,"type":16},{"type":18,"value":701,"toc":883},[702,705,708,712,715,718,721,725,728,731,734,738,741,744,747,751,754,757,765,768,771,775,778,781,784,788,791,794,797,801,804,811,814,818,821,824,827,831,834,837,840,844,847,873,876],[172,703,704],{},"A vacancy may be the first evidence a developer sees of how a company communicates. If it hides the salary, mixes several jobs into one title, and lists every technology in the repository, the reader has to guess what the team actually needs. Good candidates often choose not to guess.",[172,706,707],{},"A useful technical posting reads as if someone close to the work wrote it. It explains why the role exists, what the new person will own, which constraints are real, and what the company offers in return. It can also admit what the team has not decided yet.",[21,709,711],{"id":710},"agree-on-the-role-before-writing-the-page","Agree on the role before writing the page",[172,713,714],{},"Do not begin with the public text. Begin with the internal decision. Ask the hiring manager why the role exists, which outcomes matter in the first months, and which problems the new person will own. Confirm the reporting line, team composition, budget, location constraints, employment form, and interview owners.",[172,716,717],{},"Resolve contradictions before publishing. A role cannot simultaneously require daily office presence and advertise unrestricted remote work. A team cannot seek an autonomous senior engineer while reserving every technical decision for someone else. Candidates notice these gaps, and the best ones often leave instead of asking the employer to reconcile them.",[172,719,720],{},"Create two lists: evidence required on day one, and capability that can be learned after joining. If everything is labelled essential, the vacancy becomes a record of the current team rather than a description of the person needed next.",[21,722,724],{"id":723},"use-a-title-candidates-recognise","Use a title candidates recognise",[172,726,727],{},"Choose a title that reflects the work and seniority in terms the market understands. Internal levels, playful titles, and broad labels may be meaningful inside the company but weak in search and ambiguous to readers. “Backend Engineer, Payments” carries more information than “Platform Ninja.”",[172,729,730],{},"Do not add remote, location, or an entire technology list to the title unless the page design and search context require it. Those details belong in structured fields and the opening summary. Keep the title stable across the vacancy, outreach, interviews, and offer documents.",[172,732,733],{},"If the role combines several disciplines, state which one is primary. A full-stack title should not conceal that most work is frontend maintenance, data engineering, or production support.",[21,735,737],{"id":736},"open-with-the-work-and-its-context","Open with the work and its context",[172,739,740],{},"The first paragraph should answer four questions: what the team builds, why it is hiring, what this person will own, and who benefits from the work. Two or three specific sentences are enough.",[172,742,743],{},"Avoid starting with company history unless that history changes the role. A developer can read the company profile separately. In the vacancy, context is useful when it explains scale, technical risk, product stage, regulated constraints, or how quickly the team must learn.",[172,745,746],{},"A credible opening may say that the person will take ownership of a service used by a particular customer group, reduce a known reliability bottleneck, and work with two named functions. It should not promise “impact from day one” without explaining the decisions the person can actually make.",[21,748,750],{"id":749},"describe-responsibilities-as-outcomes","Describe responsibilities as outcomes",[172,752,753],{},"Group responsibilities into five or six meaningful areas. Use verbs that show ownership: design, operate, migrate, review, investigate, collaborate, or document. Pair the activity with the reason it matters.",[172,755,756],{},"Compare these statements:",[31,758,759,762],{},[34,760,761],{},"“Write high-quality code.”",[34,763,764],{},"“Design and operate the API boundaries used by the billing workflow, including monitoring and incident follow-up.”",[172,766,767],{},"The second gives a candidate material for self-assessment and interview preparation. It also creates a better basis for the scorecard. Include maintenance and operational work; hiding it produces mismatched expectations after the hire.",[172,769,770],{},"Be honest about balance. If the role spends substantial time on legacy systems, customer issues, on-call duty, or internal tools, say so. Interesting engineering is not limited to greenfield development, but it must be described accurately.",[21,772,774],{"id":773},"separate-requirements-from-preferences","Separate requirements from preferences",[172,776,777],{},"Requirements should be capabilities that cannot reasonably be learned within the planned onboarding period. Express them through evidence where possible. Instead of demanding a fixed number of years with one framework, describe the complexity the person must have handled.",[172,779,780],{},"Keep preferred experience in a separate section and explain why it helps. Candidates from adjacent stacks, domains, or company sizes can bring useful patterns. A rigid brand-name checklist may exclude them without improving the hiring decision.",[172,782,783],{},"Review every requirement for hidden assumptions. Degree requirements, flawless local-language fluency, narrow industry history, or continuous employment may be justified for some roles, but should not be inherited automatically. Local law and company policy govern equal-treatment obligations; seek qualified guidance for the markets where you recruit.",[21,785,787],{"id":786},"explain-the-technical-environment-without-dumping-keywords","Explain the technical environment without dumping keywords",[172,789,790],{},"List technologies in context. Identify which systems are central, which are being replaced, and which are incidental. Describe deployment, testing, ownership, and the maturity of the platform. A long stack list copied from a repository tells candidates little about daily work.",[172,792,793],{},"Useful details include team boundaries, review practices, release frequency, monitoring ownership, on-call expectations, and the main architectural direction. Avoid revealing confidential security information. The goal is to help an experienced reader understand the engineering setting, not to publish internal documentation.",[172,795,796],{},"If the team has technical debt, name the type of work involved and the support available. “Modernise a monolith gradually while feature delivery continues” is a real challenge. “Work with cutting-edge technology” is not a substitute for one.",[21,798,800],{"id":799},"publish-compensation-and-working-conditions-clearly","Publish compensation and working conditions clearly",[172,802,803],{},"State a meaningful compensation range when the company can do so, including currency, gross or net basis, and payment period. Explain whether the range changes by employment form or location. Do not publish a range so broad that almost every possible offer fits inside it.",[172,805,806,807,810],{},"Salary transparency improves the first conversation only when the range matches the approval behind the role. Our ",[42,808,809],{"href":7},"salary transparency guide"," covers calibration, exceptions, and how to discuss a range without turning it into a promise disconnected from level.",[172,812,813],{},"Also state remote, hybrid, or office expectations; required time-zone overlap; employment or contract options; core hours; on-call; travel; equipment; and major benefits. Distinguish policy from team habit. “Remote-friendly” is not clear if attendance is expected twice a week.",[21,815,817],{"id":816},"show-the-interview-process","Show the interview process",[172,819,820],{},"List the stages, their approximate purpose, and whether an exercise is involved. Name the expected decision path without promising a date the team cannot meet. Candidates use this information to assess the time commitment and prepare relevant examples.",[172,822,823],{},"Every stage should answer a different question. If three interviews independently test general technical competence, the process needs editing. Explain how take-home work is bounded, whether alternatives are available, and who can answer accessibility requests.",[172,825,826],{},"Include a contact route or clear application action, but do not ask for sensitive personal data before it is needed. If the platform supports private or anonymous profiles, explain when identity and contact details become visible.",[21,828,830],{"id":829},"edit-for-proof-tone-and-search-intent","Edit for proof, tone, and search intent",[172,832,833],{},"Before publishing, ask an engineer close to the role and a colleague outside the team to read the vacancy. The engineer checks technical accuracy; the second reader finds jargon and missing context. Then compare every claim with the approved role.",[172,835,836],{},"Use one main heading, short sections, and descriptive subheadings. Mention the recognised role title and core domain naturally, but do not repeat phrases for search engines. Search visibility depends on a page that answers the reader’s question, not a block of duplicated keywords.",[172,838,839],{},"Remove inflated adjectives, internal abbreviations, and statements that could describe any employer. Check title and description length in the actual page template. Verify the vacancy is indexable only while it is published, and that structured job data reflects visible content.",[21,841,843],{"id":842},"use-a-final-publication-checklist","Use a final publication checklist",[172,845,846],{},"Confirm that the vacancy includes:",[31,848,849,852,855,858,861,864,867,870],{},[34,850,851],{},"a recognisable title and accurate seniority;",[34,853,854],{},"a concise reason the role exists;",[34,856,857],{},"outcomes and responsibilities;",[34,859,860],{},"essential and preferred capabilities separated;",[34,862,863],{},"stack and engineering practices in context;",[34,865,866],{},"compensation and working conditions;",[34,868,869],{},"interview stages and a clear next step;",[34,871,872],{},"an owner who will respond and keep the page current.",[172,874,875],{},"Once published, review candidate questions. Repeated questions indicate missing copy. High application volume with weak fit usually signals a vague title, unclear essentials, or a promise that attracts the wrong intent. Update the vacancy rather than accepting noise as inevitable.",[172,877,878,879,882],{},"You can browse the current ",[42,880,881],{"href":255},"developer vacancies"," to see role, salary, work format, and company information together. The final test for your own page is straightforward: can a qualified person understand the work, the conditions, and the next step without asking for the missing half of the job?",{"title":133,"searchDepth":134,"depth":134,"links":884},[885,886,887,888,889,890,891,892,893,894],{"id":710,"depth":134,"text":711},{"id":723,"depth":134,"text":724},{"id":736,"depth":134,"text":737},{"id":749,"depth":134,"text":750},{"id":773,"depth":134,"text":774},{"id":786,"depth":134,"text":787},{"id":799,"depth":134,"text":800},{"id":816,"depth":134,"text":817},{"id":829,"depth":134,"text":830},{"id":842,"depth":134,"text":843},{"image":896,"alt":897,"width":141,"height":142,"ogImage":898,"schemaImages":899,"caption":902},"\u002Fimages\u002Fblog\u002Fwrite-technical-job-posting\u002Fwrite-technical-job-posting-16x9.webp","Technical role requirements aligned with an IDE and software architecture","\u002Fimages\u002Fblog\u002Fwrite-technical-job-posting\u002Fwrite-technical-job-posting-og.webp",[896,898,900,901],"\u002Fimages\u002Fblog\u002Fwrite-technical-job-posting\u002Fwrite-technical-job-posting-4x3.webp","\u002Fimages\u002Fblog\u002Fwrite-technical-job-posting\u002Fwrite-technical-job-posting-1x1.webp","A useful job description connects role requirements to the actual codebase","Turn an internal hiring request into a clear developer vacancy covering the work, requirements, salary, working conditions, and interviews.",{},{"title":698,"description":903},"blog\u002Fwriting-technical-job-posting-developers-trust",[908,694,909],"job description","employer communication","8ca1FR52-DLcQRiPldAOKWPX_CWSRTWftikEqdqLA-g",{"id":912,"title":913,"author":914,"body":915,"category":137,"cover":1049,"date":1057,"dateModified":324,"description":1058,"extension":150,"meta":1059,"minutes":1060,"navigation":153,"path":1061,"seo":1062,"stem":1063,"tags":1064,"version":1068,"__hash__":1069},"blog_en\u002Fblog\u002Frelease-14-07-2026.md","Release 14.07.2026 — one-off purchases, better search, and faster pages",{"name":15,"type":16},{"type":18,"value":916,"toc":1046},[917,919,959,961,992,994,1022,1024],[21,918,24],{"id":23},[26,920,921],{"kind":28,"title":29},[31,922,923,929,935,941,947,953],{},[34,924,925,928],{},[37,926,927],{},"Pay-as-you-go purchases."," No subscription required: buy vacancy boosts or one-time job posts directly (several per checkout). Boosts consume plan credits first, then purchased ones; a one-time job post gets a 45-day publish window and doesn't touch your plan slots. Credits stay valid for 12 months.",[34,930,931,934],{},[37,932,933],{},"Business checkout and invoices."," Checkout now collects a billing address and an optional VAT or tax ID, including support for EU reverse charge. Every one-time purchase produces a downloadable VAT invoice.",[34,936,937,940],{},[37,938,939],{},"The same pricing in both places."," The public pricing page and account billing page now use the same plan catalogue and cards. Eligible owners and administrators can check out from either page, and Free is the explicit default plan.",[34,942,943,946],{},[37,944,945],{},"Billing at a glance."," A unified \"Current plan & usage\" card (plan state, published quota, boost and job-post credit balances) on the billing page and the recruiter dashboard, plus a purchase-history list.",[34,948,949,952],{},[37,950,951],{},"Redesigned candidate & recruiter search."," Both pages rebuilt with a shared hero and panel-style filter sidebars; recruiter search gained filters by company, title, open positions, and minimum rating, plus smarter sorting (including a fairness-weighted top-rated sort).",[34,954,955,958],{},[37,956,957],{},"Dashboard rebrand."," Navy sidebar with a soft active pill, cleaner sub-navigation, and vacancy lists as tidy rows in a single panel. Boosted vacancies stand out with an amber border and a \"Boosted\" tab.",[60,960],{},[26,962,963],{"kind":64,"title":65},[31,964,965,971,977,983,986,989],{},[34,966,967,970],{},[37,968,969],{},"Faster common actions."," Sign-in checks are verified locally instead of making a network request each time, frequent lookups are cached, company-name search uses an index, and the chat engine loads only on the conversations page.",[34,972,973,976],{},[37,974,975],{},"Image edits are staged until Save."," Logos, covers, galleries, avatars, and CVs are only persisted when you save the form — abandoning an edit never loses or orphans files.",[34,978,979,982],{},[37,980,981],{},"Counters you can trust."," The promote dialog and the published-quota bar now agree everywhere, correctly combining plan credits and purchased boosts.",[34,984,985],{},"Chat's vacancy picker searches server-side with real pagination — no more truncated lists.",[34,987,988],{},"Recruiter profiles are fully private now — anonymous visitors can't browse or resolve them.",[34,990,991],{},"Copy refresh across the homepage, pricing, and about pages in all four languages; the launch offer is clearer (6 months of Enterprise for everyone; the first 10 companies keep it forever).",[60,993],{},[26,995,996],{"kind":102,"title":103},[31,997,998,1004,1010,1013,1016,1019],{},[34,999,1000,1003],{},[37,1001,1002],{},"LinkedIn sign-up reliability."," Some LinkedIn registrations created an incomplete account that later prevented profile saves. Accounts are now provisioned on the server, and affected records were repaired.",[34,1005,1006,1009],{},[37,1007,1008],{},"Privacy guards in chat."," Re-applying to a duplicated vacancy no longer starts a chat with contacts already revealed, and recruiters can only open chats from their own company's vacancies.",[34,1011,1012],{},"Logging out fully clears cached data — the next account on the same browser never sees the previous user's plan or stats.",[34,1014,1015],{},"The chat emoji picker works again, and empty avatars show a proper fallback.",[34,1017,1018],{},"A purchased boost is usable on Free and Starter plans.",[34,1020,1021],{},"A failed sign-up bootstrap now offers retry and back-to-login instead of an endless spinner.",[60,1023],{},[26,1025,1026],{"kind":119,"title":120},[31,1027,1028,1034,1040,1043],{},[34,1029,1030,1033],{},[37,1031,1032],{},"Codebase audit: 51 findings fixed."," The review covered background-task reliability, cache correctness, and API behaviour across all severity levels.",[34,1035,1036,1039],{},[37,1037,1038],{},"Security review fixes."," A separate security review produced additional changes, including the recruiter-privacy controls above.",[34,1041,1042],{},"Stale references and outdated comments were removed across the codebase.",[34,1044,1045],{},"Four automated code-health batches this cycle — the nightly agent keeps the codebase tidy while we ship.",{"title":133,"searchDepth":134,"depth":134,"links":1047},[1048],{"id":23,"depth":134,"text":24},{"image":1050,"alt":1051,"width":141,"height":142,"ogImage":1052,"schemaImages":1053,"caption":1056},"\u002Fimages\u002Fblog\u002Frelease-2026-07-14-payg-search-performance\u002Frelease-2026-07-14-payg-search-performance-16x9.webp","Source code changes moving through a Git branch and release pipeline","\u002Fimages\u002Fblog\u002Frelease-2026-07-14-payg-search-performance\u002Frelease-2026-07-14-payg-search-performance-og.webp",[1050,1052,1054,1055],"\u002Fimages\u002Fblog\u002Frelease-2026-07-14-payg-search-performance\u002Frelease-2026-07-14-payg-search-performance-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-07-14-payg-search-performance\u002Frelease-2026-07-14-payg-search-performance-1x1.webp","Code changes progress from review to a production release","2026-07-14","Companies can buy boosts and single vacancy posts without a subscription, receive VAT invoices, use rebuilt search, and benefit from faster, safer account flows.",{},4,"\u002Fblog\u002Frelease-14-07-2026",{"title":913,"description":1058},"blog\u002Frelease-14-07-2026",[158,1065,1066,1067],"billing","search","security","14.07.2026","5Djl5bKlRu_3yQSrcNVs60np6KR0519Pr2pyYWSFVA4",{"id":1071,"title":1072,"author":1073,"body":1074,"category":137,"cover":1190,"date":1192,"dateModified":324,"description":1193,"extension":150,"meta":1194,"minutes":1060,"navigation":153,"path":1195,"seo":1196,"stem":1197,"tags":1198,"version":1203,"__hash__":1204},"blog_en\u002Fblog\u002Frelease-07-07-2026.md","Release 07.07.2026 — new design, Free plan, and rebuilt messaging",{"name":15,"type":16},{"type":18,"value":1075,"toc":1187},[1076,1078,1124,1126,1142,1144,1169,1171],[21,1077,24],{"id":23},[26,1079,1080],{"kind":28,"title":29},[31,1081,1082,1088,1094,1100,1106,1112,1118],{},[34,1083,1084,1087],{},[37,1085,1086],{},"A new visual system across the app."," DevHunt now uses IBM Plex Sans and Space Grotesk, a navy dark theme with a matching light mode, a restyled header and footer, and full-width introductions on browse pages.",[34,1089,1090,1093],{},[37,1091,1092],{},"Free tier."," Companies can now stay on a permanent free plan (1 active post); Starter gained direct chat. Every \"create vacancy\" entry point respects your publish quota, with a clear upgrade dialog instead of a dead end.",[34,1095,1096,1099],{},[37,1097,1098],{},"Pricing page, rebuilt."," The page now includes a billing-period switch, plan cards, pay-as-you-go purchases, the launch offer, and common questions. Actions change according to the visitor's account state.",[34,1101,1102,1105],{},[37,1103,1104],{},"Richer cards everywhere."," Company cards show open-roles and team stats (open roles link straight to that company's jobs), a branded banner, and a clickable website; candidate cards now show salary and hourly-rate expectations — including in the applicants list and pipeline board.",[34,1107,1108,1111],{},[37,1109,1110],{},"Conversation details panel."," A collapsible side panel next to every chat: company and vacancy context for both sides, a shared-contact card for recruiters once the candidate shares it, and a match-score breakdown for candidates. Resizable on desktop, a slide-over on mobile.",[34,1113,1114,1117],{},[37,1115,1116],{},"Consent at registration."," Sign-up now asks for explicit agreement to the Terms and Privacy Policy — enforced for both e-mail and OAuth registration.",[34,1119,1120,1123],{},[37,1121,1122],{},"Redesigned login & registration."," A two-column layout with a promo panel, tab switching, and LinkedIn sign-in.",[60,1125],{},[26,1127,1128],{"kind":64,"title":65},[31,1129,1130,1136,1139],{},[34,1131,1132,1135],{},[37,1133,1134],{},"Messages, redesigned end to end."," Conversations have new message bubbles, date dividers, replies, reactions, empty states, and a new composer in both themes. System events appear as clear cards with Accept and Decline actions inside the thread. Shared CVs show the file name and 30-day expiry, conversation rows show the current contact status, and candidates can open a detailed match explanation from the side panel.",[34,1137,1138],{},"Recruiters always see a condensed, anonymity-safe candidate summary in the details rail (position, seniority, experience, skills, languages, expectations) — identity stays gated until the candidate shares it.",[34,1140,1141],{},"Welcome messages render as a compact context card with a linked vacancy chip.",[60,1143],{},[26,1145,1146],{"kind":102,"title":103},[31,1147,1148,1154,1160,1163,1166],{},[34,1149,1150,1153],{},[37,1151,1152],{},"Privacy: contact sharing is strictly per-conversation."," Sharing contacts in one conversation no longer reveals anything in any other conversation — each chat checks its own share state and fails closed.",[34,1155,1156,1159],{},[37,1157,1158],{},"Privacy: chat search respects anonymity."," Search results no longer expose a candidate's real name or photo in conversations where contacts haven't been shared.",[34,1161,1162],{},"Boost duration copy corrected: a boost promotes a vacancy for 5 days.",[34,1164,1165],{},"Long file names in CV cards are middle-truncated instead of wrapping across lines.",[34,1167,1168],{},"Missing content pages return a real 404.",[60,1170],{},[26,1172,1173],{"kind":119,"title":120},[31,1174,1175,1181,1184],{},[34,1176,1177,1180],{},[37,1178,1179],{},"Chat theme rewritten in TypeScript."," The embedded chat UI moved from a legacy template theme to a typed, componentized theme — the foundation that made the whole messaging redesign possible.",[34,1182,1183],{},"The design system uses shared tokens for colour, typography, corner radius, and motion instead of separate styles on every page.",[34,1185,1186],{},"Two automated code-health batches, including sign-in error-code mapping coverage.",{"title":133,"searchDepth":134,"depth":134,"links":1188},[1189],{"id":23,"depth":134,"text":24},{"image":139,"alt":140,"width":141,"height":142,"ogImage":143,"schemaImages":1191,"caption":147},[139,143,145,146],"2026-07-07","DevHunt has a new visual system, a permanent Free company plan, a rebuilt pricing page, richer chat, and stricter contact privacy.",{},"\u002Fblog\u002Frelease-07-07-2026",{"title":1072,"description":1193},"blog\u002Frelease-07-07-2026",[158,1199,1200,1201,1202],"design","pricing","chat","privacy","07.07.2026","boG48qBO5mP0H_TiYZ8kEthpiZZpfBMGmgTqp1bsTd4",{"id":1206,"title":1207,"author":1208,"body":1209,"category":137,"cover":1306,"date":1312,"dateModified":324,"description":1313,"extension":150,"meta":1314,"minutes":152,"navigation":153,"path":1315,"seo":1316,"stem":1317,"tags":1318,"version":1320,"__hash__":1321},"blog_en\u002Fblog\u002Frelease-25-06-2026.md","Release 25.06.2026 — new homepage, company search, and legal pages",{"name":15,"type":16},{"type":18,"value":1210,"toc":1303},[1211,1213,1250,1252,1268,1270,1291,1293],[21,1212,24],{"id":23},[26,1214,1215],{"kind":28,"title":29},[31,1216,1217,1223,1229,1235,1241,1247],{},[34,1218,1219,1222],{},[37,1220,1221],{},"Homepage, rebuilt."," The main search includes clickable examples that open matching vacancies. Separate candidate and employer views explain how DevHunt works, followed by a match breakdown, six core product features, and a relevant final action for each audience.",[34,1224,1225,1228],{},[37,1226,1227],{},"Companies search & filters."," The public companies directory got name search plus type, size, and domain filters — with a live results count.",[34,1230,1231,1234],{},[37,1232,1233],{},"Contract employment type."," Contract joined the employment options everywhere it matters: the vacancy form, candidate profiles, and both search filters.",[34,1236,1237,1240],{},[37,1238,1239],{},"Full legal-page set."," About, Terms & Conditions, DSA, Information Clause, GDPR, Whistleblowers, and a refreshed Privacy Policy — live in all four languages and readable without an account.",[34,1242,1243,1246],{},[37,1244,1245],{},"Clickable cards."," Vacancy, company, recruiter, and candidate cards are now clickable across their whole surface (middle-click and Ctrl-click open a new tab), while inner links keep their own behavior.",[34,1248,1249],{},"Flag emojis in the language switcher — quicker to scan.",[60,1251],{},[26,1253,1254],{"kind":64,"title":65},[31,1255,1256,1262,1265],{},[34,1257,1258,1261],{},[37,1259,1260],{},"Site-wide visual refresh."," New font pairing, softer elevation-based cards, and cleaner light-theme surfaces — the first step of the design direction that landed fully in the next release.",[34,1263,1264],{},"A new guest header and a four-column footer (candidates \u002F employers \u002F company links + socials).",[34,1266,1267],{},"Static content pages are now included in the sitemap and served from a long-lived cache.",[60,1269],{},[26,1271,1272],{"kind":102,"title":103},[31,1273,1274,1282,1285,1288],{},[34,1275,1276,1277,1281],{},"Chat: the \"Leave conversation\" button no longer looks like a log-out action, and message action menus stopped rendering \"",[1278,1279,1280],"span",{},"object Object","\" icons.",[34,1283,1284],{},"Footers wrap correctly on narrow screens instead of overflowing.",[34,1286,1287],{},"Relative timestamps (\"2 hours ago\") localize correctly in Ukrainian.",[34,1289,1290],{},"Company search handles special characters in the query safely.",[60,1292],{},[26,1294,1295],{"kind":119,"title":120},[31,1296,1297,1300],{},[34,1298,1299],{},"Locale-to-language-tag mapping centralized into a single utility, so every date\u002Fnumber formatter localizes consistently.",[34,1301,1302],{},"Another automated code-health batch: error-state coverage, retry actions, and safer query escaping.",{"title":133,"searchDepth":134,"depth":134,"links":1304},[1305],{"id":23,"depth":134,"text":24},{"image":1307,"alt":1051,"width":141,"height":142,"ogImage":1308,"schemaImages":1309,"caption":1056},"\u002Fimages\u002Fblog\u002Frelease-2026-06-25-homepage-company-search\u002Frelease-2026-06-25-homepage-company-search-16x9.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-25-homepage-company-search\u002Frelease-2026-06-25-homepage-company-search-og.webp",[1307,1308,1310,1311],"\u002Fimages\u002Fblog\u002Frelease-2026-06-25-homepage-company-search\u002Frelease-2026-06-25-homepage-company-search-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-25-homepage-company-search\u002Frelease-2026-06-25-homepage-company-search-1x1.webp","2026-06-25","The homepage now serves candidates and employers separately, the company directory has filters, Contract is a supported employment type, and seven legal pages are public.",{},"\u002Fblog\u002Frelease-25-06-2026",{"title":1207,"description":1313},"blog\u002Frelease-25-06-2026",[158,1319,1201],"companies","25.06.2026","6G98ws9qMmRkS5kdkVaczokW-kuDaMz39-eI-jvDDT0",{"id":1323,"title":1324,"author":1325,"body":1326,"category":137,"cover":1421,"date":1427,"dateModified":324,"description":1428,"extension":150,"meta":1429,"minutes":152,"navigation":153,"path":1430,"seo":1431,"stem":1432,"tags":1433,"version":1435,"__hash__":1436},"blog_en\u002Fblog\u002Frelease-18-06-2026.md","Release 18.06.2026 — faster navigation and safer chat",{"name":15,"type":16},{"type":18,"value":1327,"toc":1418},[1328,1330,1340,1342,1364,1366,1397,1399],[21,1329,24],{"id":23},[26,1331,1332],{"kind":28,"title":29},[31,1333,1334],{},[34,1335,1336,1339],{},[37,1337,1338],{},"Branded-layout picker for Enterprise."," Enterprise companies can now choose their premium layout right on the company profile page; other tiers see what they're missing with a direct path to upgrade.",[60,1341],{},[26,1343,1344],{"kind":64,"title":65},[31,1345,1346,1352,1358],{},[34,1347,1348,1351],{},[37,1349,1350],{},"Faster back navigation."," Job and candidate search results are restored when a visitor returns from a detail page, while a new search still fetches current results.",[34,1353,1354,1357],{},[37,1355,1356],{},"Faster repeat visits."," Public endpoints use HTTP caching, form dropdown options are cached locally for a day, and landing pages stopped recomputing filters on every pagination step.",[34,1359,1360,1363],{},[37,1361,1362],{},"Lighter pages for everyone else."," Premium branded layouts are now lazy-loaded, so regular company pages don't carry their weight.",[60,1365],{},[26,1367,1368],{"kind":102,"title":103},[31,1369,1370,1376,1382,1385,1388,1391,1394],{},[34,1371,1372,1375],{},[37,1373,1374],{},"Chat email delivery."," A recruiter's chat message now sends an email notification to the candidate, and vice versa, without exposing either email address in the browser.",[34,1377,1378,1381],{},[37,1379,1380],{},"CV access after contact revocation."," When a candidate revokes contact sharing, previously shared CV files are removed from the conversation.",[34,1383,1384],{},"Chat access checks were tightened to be strictly company-scoped.",[34,1386,1387],{},"The trial pill and banner show your effective tier — an Enterprise-granted company no longer sees \"Starter\".",[34,1389,1390],{},"Editing a published vacancy updates search results immediately instead of after a cache delay.",[34,1392,1393],{},"Candidate-search counts now match the visible results — no more \"9 found\" with 7 cards.",[34,1395,1396],{},"Account deletion is now fully durable — a partial failure can no longer leave an orphaned, login-capable account.",[60,1398],{},[26,1400,1401],{"kind":119,"title":120},[31,1402,1403,1409,1412,1415],{},[34,1404,1405,1408],{},[37,1406,1407],{},"Code-review fixes."," A codebase review covering background work, privacy controls, and performance produced many of the fixes listed above.",[34,1410,1411],{},"Safety rails on platform configuration: admin config changes are now validated against the expected value type before they apply.",[34,1413,1414],{},"Paid-promotion durations are range-guarded so a single bad value can't expire every active promotion platform-wide.",[34,1416,1417],{},"Candidate filter materialized views were aligned with the live search predicate.",{"title":133,"searchDepth":134,"depth":134,"links":1419},[1420],{"id":23,"depth":134,"text":24},{"image":1422,"alt":140,"width":141,"height":142,"ogImage":1423,"schemaImages":1424,"caption":147},"\u002Fimages\u002Fblog\u002Frelease-2026-06-18-performance-chat-privacy\u002Frelease-2026-06-18-performance-chat-privacy-16x9.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-18-performance-chat-privacy\u002Frelease-2026-06-18-performance-chat-privacy-og.webp",[1422,1423,1425,1426],"\u002Fimages\u002Fblog\u002Frelease-2026-06-18-performance-chat-privacy\u002Frelease-2026-06-18-performance-chat-privacy-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-18-performance-chat-privacy\u002Frelease-2026-06-18-performance-chat-privacy-1x1.webp","2026-06-18","Search pages restore quickly when you go back, chat email delivery is fixed, shared CV access can be revoked, and Enterprise gains a layout picker.",{},"\u002Fblog\u002Frelease-18-06-2026",{"title":1324,"description":1428},"blog\u002Frelease-18-06-2026",[158,1434,1201,1202],"performance","18.06.2026","3XM2yYPnl6ORxdW4KjPBtAEKm7AsG2jLl2k57odRE5k",{"id":1438,"title":1439,"author":1440,"body":1441,"category":315,"cover":1587,"date":1595,"dateModified":324,"description":1596,"extension":150,"meta":1597,"minutes":1598,"navigation":153,"path":464,"seo":1599,"stem":1600,"tags":1601,"version":335,"__hash__":1605},"blog_en\u002Fblog\u002Fsubscription-instead-of-success-fee.md","Recruitment subscription or success fee: compare the real cost",{"name":168,"type":16},{"type":18,"value":1442,"toc":1579},[1443,1446,1449,1453,1456,1459,1462,1466,1469,1492,1495,1503,1507,1510,1513,1516,1520,1523,1526,1533,1537,1540,1548,1551,1555,1558,1573,1576],[172,1444,1445],{},"An agency quote arrives as a percentage of the new hire's salary. A platform quote arrives as a monthly fee or a price per vacancy. Put those numbers side by side and the cheaper option appears obvious—until someone counts the hours spent finding candidates, arranging interviews, and keeping the process moving.",[172,1447,1448],{},"These models buy different things. An agency may take on sourcing and the first screen, then charge when a hire is made. A subscription gives the employer access and tools while its own team runs more of the work. The honest comparison is not one percentage against one monthly price; it is the full bill and the work left on your desk.",[21,1450,1452],{"id":1451},"start-with-the-work-each-model-includes","Start with the work each model includes",[172,1454,1455],{},"Agency terms vary. Some providers source candidates, conduct an initial screen, coordinate interviews, support negotiations, and offer a replacement clause. Others mainly introduce candidates. The commercial basis may be a percentage of compensation, a fixed amount, a retainer, or a combination. The contract, not a generic market benchmark, tells you what you are buying.",[172,1457,1458],{},"A subscription platform usually shifts more control to the employer. Your team writes the vacancy, reviews profiles, speaks with candidates, and decides how quickly the process moves. In return, the platform cost does not normally increase simply because another person accepts an offer. One-time vacancy posts or promotion credits sit between these models: they are useful when hiring is occasional and a recurring plan would be unnecessary.",[172,1460,1461],{},"List the included work before comparing prices. If your team needs specialist sourcing capacity that it does not have, removing an agency fee may only move the cost into internal workload. If your hiring managers already source and assess candidates, paying a commission for every completed hire may duplicate work you can perform directly.",[21,1463,1465],{"id":1464},"build-a-full-cost-hiring-scenario","Build a full-cost hiring scenario",[172,1467,1468],{},"Use one planning period and write down assumptions that your finance and hiring teams can verify. A useful model includes:",[31,1470,1471,1474,1477,1480,1483,1486,1489],{},[34,1472,1473],{},"platform subscriptions, posting credits, boosts, or agency charges;",[34,1475,1476],{},"recruiter and hiring-manager hours spent on sourcing, screening, interviews, and coordination;",[34,1478,1479],{},"paid advertising and assessment tools;",[34,1481,1482],{},"the number and type of roles you expect to open;",[34,1484,1485],{},"the likelihood that priorities will change before every role is filled;",[34,1487,1488],{},"any replacement, cancellation, exclusivity, or minimum-spend terms;",[34,1490,1491],{},"onboarding delays caused by an unfilled role.",[172,1493,1494],{},"Do not hide uncertain values. Put them in a low, expected, and high scenario. A subscription can look expensive in a quiet month and efficient during a concentrated hiring cycle. A success fee can preserve cash before a hire, yet create a larger variable expense precisely when several offers close together. Neither observation makes one model universally better; it shows why the hiring cadence matters.",[172,1496,1497,1498,1502],{},"Our ",[42,1499,1501],{"href":1500},"\u002Fhiring-calculator","hiring cost calculator"," is designed for your own assumptions. It should be treated as a planning aid, not as a quote and not as proof that every agency uses the same terms.",[21,1504,1506],{"id":1505},"compare-predictability-and-capacity","Compare predictability and capacity",[172,1508,1509],{},"Predictability has operational value. A known access cost is easier to assign to a team budget, and a hiring manager can open another role without asking whether the next successful hire creates a new commission. This matters for companies hiring several similar roles, building a new team, or replacing uncertain headcount plans with a rolling pipeline.",[172,1511,1512],{},"Capacity also has a cost. Direct hiring requires someone to own response times, screening decisions, interview feedback, and candidate communication. A platform cannot compensate for a vacancy that is vague or for an interview process that stalls. Before choosing a subscription, name the person responsible for each stage and confirm that the team can handle the likely volume.",[172,1514,1515],{},"An agency can be economically sensible when a role is confidential, unusually scarce, outside the company’s network, or urgent enough to justify dedicated external effort. A platform can be a better fit when the employer wants direct candidate relationships, repeatable hiring operations, and control over employer presentation. Many teams use both, but assign each channel a clear purpose rather than sending every vacancy everywhere.",[21,1517,1519],{"id":1518},"check-how-incentives-affect-the-process","Check how incentives affect the process",[172,1521,1522],{},"Commercial incentives do not automatically determine service quality, but they influence the process. A success-fee provider is paid when a hire completes. That can align well with an employer that needs an outcome and does not want to build a sourcing function. It can also encourage speed or candidate volume when the employer values a slower, highly selective process. Contract design and provider behaviour matter more than the label alone.",[172,1524,1525],{},"A subscription gives the employer freedom to contact, interview, and hire without a fee attached to each acceptance. The trade-off is that the platform is paid whether or not the employer runs the process well. Review response discipline, vacancy quality, and conversion between stages; otherwise a predictable subscription becomes predictable waste.",[172,1527,1528,1529,1532],{},"Direct communication can reduce hand-offs and make role details easier to clarify. Read our guide to ",[42,1530,1531],{"href":5},"hiring developers directly without agencies"," for the operational safeguards that keep that approach credible.",[21,1534,1536],{"id":1535},"review-the-contract-and-the-exit-path","Review the contract and the exit path",[172,1538,1539],{},"Before committing, check when a fee becomes payable, how candidate ownership is defined, whether a previous introduction still triggers a charge, and what happens when a hire leaves. For subscriptions, check plan limits, renewal rules, unused credits, publishing windows, account permissions, and whether you can move to one-off purchases.",[172,1541,1542,1543,1547],{},"DevHunt offers a Free tier, paid subscriptions, and selected pay-as-you-go tools. Current limits and included features belong on the ",[42,1544,1546],{"href":1545},"\u002Fpricing","pricing page","; an article should not duplicate values that can change. Compare that live product information with the terms of any other provider you are considering.",[172,1549,1550],{},"Also plan the exit. Candidate notes, interview decisions, and lawful records should not become inaccessible because a channel changes. Keep a consistent internal process and use external tools as delivery mechanisms, not as the only place where hiring knowledge exists.",[21,1552,1554],{"id":1553},"choose-from-the-work-you-expect-to-do","Choose from the work you expect to do",[172,1556,1557],{},"A practical decision can be made in four steps:",[1559,1560,1561,1564,1567,1570],"ol",{},[34,1562,1563],{},"Forecast the roles and hiring pace for one realistic planning period.",[34,1565,1566],{},"Price each option using its actual contract and your internal labour assumptions.",[34,1568,1569],{},"Confirm who will perform the work that is not included.",[34,1571,1572],{},"Recalculate after the first hiring cycle using observed time and results.",[172,1574,1575],{},"Choose a success-fee partner when external sourcing and process support justify variable cost. Choose subscription or one-off platform access when your team can operate the process and benefits from predictable, reusable capacity. Use both only when the division of work is explicit.",[172,1577,1578],{},"Write the comparison down. Finance should be able to check the assumptions, recruiters should know which work they own, and hiring managers should recognise the process they will actually run. If one of those three groups sees a different plan, the price comparison is not finished.",{"title":133,"searchDepth":134,"depth":134,"links":1580},[1581,1582,1583,1584,1585,1586],{"id":1451,"depth":134,"text":1452},{"id":1464,"depth":134,"text":1465},{"id":1505,"depth":134,"text":1506},{"id":1518,"depth":134,"text":1519},{"id":1535,"depth":134,"text":1536},{"id":1553,"depth":134,"text":1554},{"image":1588,"alt":1589,"width":141,"height":142,"ogImage":1590,"schemaImages":1591,"caption":1594},"\u002Fimages\u002Fblog\u002Fsubscription-vs-success-fee\u002Fsubscription-vs-success-fee-16x9.webp","A technical hiring platform showing recurring access costs beside a per-hire cost spike","\u002Fimages\u002Fblog\u002Fsubscription-vs-success-fee\u002Fsubscription-vs-success-fee-og.webp",[1588,1590,1592,1593],"\u002Fimages\u002Fblog\u002Fsubscription-vs-success-fee\u002Fsubscription-vs-success-fee-4x3.webp","\u002Fimages\u002Fblog\u002Fsubscription-vs-success-fee\u002Fsubscription-vs-success-fee-1x1.webp","A subscription spreads access costs over time; a success fee arrives after the hire","2026-06-10","Compare agency fees, hiring subscriptions, one-off tools, and the staff time each option needs before choosing a recruitment model.",{},8,{"title":1439,"description":1596},"blog\u002Fsubscription-instead-of-success-fee",[1602,1603,1604],"hiring costs","recruitment pricing","employer budgeting","CysQhXlNvy0XiNqJdxaepFCKo1oREB_hHJmt57Rc7p0",{"id":1607,"title":1608,"author":1609,"body":1610,"category":137,"cover":1672,"date":1678,"dateModified":324,"description":1679,"extension":150,"meta":1680,"minutes":134,"navigation":153,"path":1681,"seo":1682,"stem":1683,"tags":1684,"version":1685,"__hash__":1686},"blog_en\u002Fblog\u002Frelease-08-06-2026.md","Release 08.06.2026 — job-search pages and structured data",{"name":15,"type":16},{"type":18,"value":1611,"toc":1669},[1612,1614,1642,1644,1657,1659],[21,1613,24],{"id":23},[26,1615,1616],{"kind":28,"title":29},[31,1617,1618,1624,1630,1636],{},[34,1619,1620,1623],{},[37,1621,1622],{},"Job-search landing pages."," Popular searches now have dedicated pages by role category, seniority, work format, employment type, company type, and domain—for example, Game Designer jobs or remote jobs. Each page contains a pre-filtered vacancy list, sorting, a result count, mobile filters, and related search suggestions. The pages can be shared directly and indexed by search engines.",[34,1625,1626,1629],{},[37,1627,1628],{},"\"Our Partners\" on company profiles."," Companies on Professional and above can showcase a logo wall of partners — logo, name, and an optional link for each.",[34,1631,1632,1635],{},[37,1633,1634],{},"Free-trial promo banner."," Guests landing on the home page now see the \"6 months on us\" offer up front, with a direct path to the plans.",[34,1637,1638,1641],{},[37,1639,1640],{},"Search visibility."," Every published vacancy and company page is now included in the correct localised sitemap. Public pages also provide Organization, WebSite, JobPosting, and ItemList structured data. Private routes and paths containing candidate personal data remain excluded from crawling.",[60,1643],{},[26,1645,1646],{"kind":64,"title":65},[31,1647,1648,1651,1654],{},[34,1649,1650],{},"Pricing plan bullets now match the real tier limits exactly — Starter lists 5 active job posts, and promotion counts were corrected on Professional and Enterprise, with proper plural grammar in Ukrainian and Polish.",[34,1652,1653],{},"Several lists (recruiter vacancies, feedback dashboard, admin views) got proper error states with a retry button instead of failing quietly.",[34,1655,1656],{},"Pagination ordering is now stable across pages — no more duplicated or skipped rows in long lists.",[60,1658],{},[26,1660,1661],{"kind":119,"title":120},[31,1662,1663,1666],{},[34,1664,1665],{},"Database migration history was reconciled with production, so the repository and live schema ledger now match.",[34,1667,1668],{},"Three automated code-health batches landed this cycle.",{"title":133,"searchDepth":134,"depth":134,"links":1670},[1671],{"id":23,"depth":134,"text":24},{"image":1673,"alt":1051,"width":141,"height":142,"ogImage":1674,"schemaImages":1675,"caption":1056},"\u002Fimages\u002Fblog\u002Frelease-2026-06-08-job-search-visibility\u002Frelease-2026-06-08-job-search-visibility-16x9.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-08-job-search-visibility\u002Frelease-2026-06-08-job-search-visibility-og.webp",[1673,1674,1676,1677],"\u002Fimages\u002Fblog\u002Frelease-2026-06-08-job-search-visibility\u002Frelease-2026-06-08-job-search-visibility-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-08-job-search-visibility\u002Frelease-2026-06-08-job-search-visibility-1x1.webp","2026-06-08","Popular job searches now have dedicated pages, public vacancies and companies have structured data, and premium company profiles can show partners.",{},"\u002Fblog\u002Frelease-08-06-2026",{"title":1608,"description":1679},"blog\u002Frelease-08-06-2026",[158,161,1319],"08.06.2026","0mfrT5pKuWU8l2zg5iICr19vDHUpl29gBmGdaq_Rdxg",{"id":1688,"title":1689,"author":1690,"body":1691,"category":137,"cover":1768,"date":1774,"dateModified":324,"description":1775,"extension":150,"meta":1776,"minutes":152,"navigation":153,"path":1777,"seo":1778,"stem":1779,"tags":1780,"version":1782,"__hash__":1783},"blog_en\u002Fblog\u002Frelease-01-06-2026.md","Release 01.06.2026 — branded company pages and bot protection",{"name":15,"type":16},{"type":18,"value":1692,"toc":1765},[1693,1695,1717,1719,1729,1731,1747,1749],[21,1694,24],{"id":23},[26,1696,1697],{"kind":28,"title":29},[31,1698,1699,1705,1711],{},[34,1700,1701,1704],{},[37,1702,1703],{},"Premium company profiles."," Companies on paid plans can now build a branded public page with a tagline, services with images and links, culture and values cards, a photo gallery, and an application-trend widget. The editor shows only the fields included in the company's plan.",[34,1706,1707,1710],{},[37,1708,1709],{},"Per-company theming."," A premium profile can set its accent colour, typography style, and preferred colour mode. The header, footer, and page accents follow that theme while the visitor is on the company page, then return to the DevHunt theme on exit. Two branded layouts are available at launch.",[34,1712,1713,1716],{},[37,1714,1715],{},"CAPTCHA on all auth flows."," Cloudflare Turnstile now protects sign-up, sign-in, password recovery, and OTP resend against bots and credential stuffing — with localized error messages. Logging in with an unconfirmed e-mail now routes to an auto-resending confirmation page instead of a dead end.",[60,1718],{},[26,1720,1721],{"kind":64,"title":65},[31,1722,1723,1726],{},[34,1724,1725],{},"Recruiter list and detail pages now require login — recruiter profiles are no longer exposed to anonymous visitors.",[34,1727,1728],{},"Public recruiter list loads faster (responsiveness stats are now computed in a single query).",[60,1730],{},[26,1732,1733],{"kind":102,"title":103},[31,1734,1735,1738,1741,1744],{},[34,1736,1737],{},"The company \"About\" section renders rich text properly — headings, spacing, and lists instead of flat text.",[34,1739,1740],{},"Empty service-image slots no longer leave broken gaps on company profiles.",[34,1742,1743],{},"CAPTCHA failures show a translated message instead of a raw error code.",[34,1745,1746],{},"When a company downgrades its plan, premium profile sections stop rendering immediately.",[60,1748],{},[26,1750,1751],{"kind":119,"title":120},[31,1752,1753,1759,1762],{},[34,1754,1755,1758],{},[37,1756,1757],{},"Reusable theming architecture."," Company branding now comes from a theme configuration, so a new branded page does not require a copy of the full layout.",[34,1760,1761],{},"A deduplication refactor across backend and storefront consolidated repeated logic into shared utilities.",[34,1763,1764],{},"Two more automated code-health batches landed.",{"title":133,"searchDepth":134,"depth":134,"links":1766},[1767],{"id":23,"depth":134,"text":24},{"image":1769,"alt":140,"width":141,"height":142,"ogImage":1770,"schemaImages":1771,"caption":147},"\u002Fimages\u002Fblog\u002Frelease-2026-06-01-employer-branding-security\u002Frelease-2026-06-01-employer-branding-security-16x9.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-01-employer-branding-security\u002Frelease-2026-06-01-employer-branding-security-og.webp",[1769,1770,1772,1773],"\u002Fimages\u002Fblog\u002Frelease-2026-06-01-employer-branding-security\u002Frelease-2026-06-01-employer-branding-security-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-06-01-employer-branding-security\u002Frelease-2026-06-01-employer-branding-security-1x1.webp","2026-06-01","Paid company profiles gain richer branding and page themes, while Cloudflare Turnstile now protects every sign-in and registration flow.",{},"\u002Fblog\u002Frelease-01-06-2026",{"title":1689,"description":1775},"blog\u002Frelease-01-06-2026",[158,1781,1067],"company pages","01.06.2026","WWWJLsDi-06QNtEH1uVKzIY0OCuTsJJeLIp5n5DoeO0",{"id":1785,"title":1786,"author":1787,"body":1788,"category":137,"cover":1850,"date":1856,"dateModified":324,"description":1857,"extension":150,"meta":1858,"minutes":134,"navigation":153,"path":1859,"seo":1860,"stem":1861,"tags":1862,"version":1863,"__hash__":1864},"blog_en\u002Fblog\u002Frelease-25-05-2026.md","Release 25.05.2026 — six-month trial and launch fixes",{"name":15,"type":16},{"type":18,"value":1789,"toc":1847},[1790,1792,1802,1804,1811,1813,1835,1837],[21,1791,24],{"id":23},[26,1793,1794],{"kind":28,"title":29},[31,1795,1796],{},[34,1797,1798,1801],{},[37,1799,1800],{},"6-month free trial."," The free trial for new companies was extended from 3 to 6 months — reflected on the pricing page and in onboarding, in all four languages.",[60,1803],{},[26,1805,1806],{"kind":64,"title":65},[31,1807,1808],{},[34,1809,1810],{},"Login page title and description rewritten to be login-focused instead of a recruiting tagline.",[60,1812],{},[26,1814,1815],{"kind":102,"title":103},[31,1816,1817,1823,1826,1829,1832],{},[34,1818,1819,1822],{},[37,1820,1821],{},"Page-load errors after sign-in."," A crash in the global session middleware could return a server error on any rendered page immediately after login. It has been fixed.",[34,1824,1825],{},"Candidate application tabs (Interviews, Offers) now filter correctly, so each tab shows exactly the right applications.",[34,1827,1828],{},"Duplicating a vacancy shows a clear error notice when the source vacancy fails to load, instead of failing silently.",[34,1830,1831],{},"The review\u002Ffeedback option now appears reliably once the candidate profile finishes loading.",[34,1833,1834],{},"Admin subscription-grant rules list no longer errors when live grant rules exist.",[60,1836],{},[26,1838,1839],{"kind":119,"title":120},[31,1840,1841,1844],{},[34,1842,1843],{},"The automated nightly code-health checks produced their first production cleanup batches.",[34,1845,1846],{},"Database date parameters now use strictly typed bindings, removing a source of subtle query errors.",{"title":133,"searchDepth":134,"depth":134,"links":1848},[1849],{"id":23,"depth":134,"text":24},{"image":1851,"alt":1051,"width":141,"height":142,"ogImage":1852,"schemaImages":1853,"caption":1056},"\u002Fimages\u002Fblog\u002Frelease-2026-05-25-platform-polish\u002Frelease-2026-05-25-platform-polish-16x9.webp","\u002Fimages\u002Fblog\u002Frelease-2026-05-25-platform-polish\u002Frelease-2026-05-25-platform-polish-og.webp",[1851,1852,1854,1855],"\u002Fimages\u002Fblog\u002Frelease-2026-05-25-platform-polish\u002Frelease-2026-05-25-platform-polish-4x3.webp","\u002Fimages\u002Fblog\u002Frelease-2026-05-25-platform-polish\u002Frelease-2026-05-25-platform-polish-1x1.webp","2026-05-25","Our first post-launch update extends the company trial to six months and fixes sign-in, application tabs, vacancy duplication, and admin tools.",{},"\u002Fblog\u002Frelease-25-05-2026",{"title":1786,"description":1857},"blog\u002Frelease-25-05-2026",[158],"25.05.2026","hLDeljP7AodQOfSQ3zHHpkFmgAnIRehQMxkMhs2Nhds"]