Recruitment Agency Template

£10

A complete one-page recruitment agency template for specialist hiring studios, pairing candid editorial art direction with a kinetic talent-network hero, live Flip-powered role matching, a scroll-drawn three-step method, candidate stories, and a full employer brief dialog.

ScrollTriggerFlip Lenis advanced
11 more details
flip-layoutreordersvg-connector-redrawcount-animationclick-togglekeyboard-navigationscroll-revealinfinite-loopsvg-drawscrubdialog-animation
Recruitment Agency Template - website template preview

This template reads better at your own screen size than in the frame below:

About this template

A complete one-page site for Good People, a fictional specialist hiring studio matching small UK product companies with design, engineering and operations candidates. Its chartreuse-painted ground, deep navy type, peach paper and hand-stamped data marks feel lively and human without turning recruitment into a joke.

Read the full template overview

The signature live-role board lets visitors build a match profile from native skill, working-style and location toggles. Every role carries real criteria in data attributes and receives a computed percentage; all roles stay readable while Flip moves the strongest matches upward, the numbers roll and three authored SVG paths redraw from the profile to the leading briefs.

The rest of the page stays intentionally direct: an offset type-led hero with an ambient candidate network and seamless principles ticker, a scroll-drawn three-step method with outcome figures, stacked candidate and employer stories, an employer brief call-to-action and a compact contact footer. Buyers can replace the seven role records, edit the three criteria groups or remove any content section without untangling one monolithic animation.

What's included

12 items
  • Complete deployable one-page recruitment site with navigation, hero, interactive live-role board, three-step method, quote stack, employer brief and contact footer
  • Data-driven role matching across skills, working style and location, with every role receiving a transparent computed score
  • GSAP Flip reorders the full readable role list without hiding weaker matches or collapsing the board during rapid choices
  • Three SVG connector paths redraw from the selected profile summary to the highest-ranked briefs after every update
  • Match percentages and the live-role count roll to their new values with GSAP, while concise live-region copy names the two best matches
  • Kinetic hero network combines continuously rotating SVG orbits, floating candidate notes, a pulsing fit score and seamless GSAP ticker
  • Native full-job dialog opens from every card by click, Enter or Space and returns focus to its source on close
  • Three-step method route draws with ScrollTrigger scrub while a runner follows the exact SVG geometry
  • Native toggle buttons support touch, Tab, Space and Enter, with arrow, Home and End navigation inside each criteria group
  • Graphic candidate monograms, company stamps, lines and data marks create a complete visual system with no photography or image assets
  • Synchronous no-flash JavaScript gate, guarded section initialisers, reduced-motion updates and a useful no-JavaScript role board
  • Lenis smooth scrolling is synchronised with ScrollTrigger and remains optional

Perfect for

5 use cases
  • Recruitment agencies specialising in product, design, engineering or operations hires
  • Executive search and talent partners presenting a curated live-role board
  • Internal talent teams that want candidates to compare open product roles
  • Small consultancies matching specialists to startups and scale-ups
  • Job boards that need ranked discovery without hiding the full market

How it works

5 sections

Matching the profile

Each role article carries comma-separated data-skills, data-style and data-location values, while each native toggle carries a group and value. Skills can be combined; working style and location are single choices that can also be cleared. The script gives every open brief a base score, weights selected skill evidence most heavily, then adds working-style and location matches before converting the result to a percentage. The useful starting profile is owned by aria-pressed in the markup, so buyers can change defaults without editing JavaScript.

Reordering every role

On each choice the script captures all role rectangles with Flip.getState, computes and sorts the new ranking, then appends every card back into the same in-flow list. Flip.from animates between positions with absolute disabled, and the list's current minimum height is held until the tween completes, so rapid toggles cannot collapse the board or pull the method section upward. Weaker matches are never filtered out: the top three gain emphasis, while all seven salaries, summaries and criteria remain readable. The SVG connectors remain visible throughout the desktop board so visitors retain the visual link between their profile and the ranked results.

Redrawing the links

An SVG overlays the board and contains three authored paths. After the new order is committed, the script measures the profile hub and each leading role peg relative to the board, writes a cubic path between them, and animates its dash offset so the connection draws toward the match. The match values roll from their previous number to the new percentage on the same update; under reduced motion both the path and number jump straight to their final state.

Opening full briefs

Each role stores its longer team, responsibility and requirement copy in data attributes beside its matching criteria. When the reusable native dialog opens, the script copies that role's visible summary, salary, tags and current score, builds its longer lists, and updates the email subject. Cards receive button semantics only when the dialog API is available; Escape, backdrop click and the close button all dismiss it, with focus returning to the source card.

Access and fallbacks

The controls are real buttons with aria-pressed, visible focus and native touch and keyboard activation, plus arrow, Home and End movement within each criteria group. A polite atomic live region reports only the top two role names and percentages after a deliberate choice. CSS and the script's own motion branch make every motion layer static when motion is reduced. If GSAP, ScrollTrigger or Flip is unavailable, the synchronous gate is removed: controls and connectors stay out of view, all seven fully detailed briefs remain in their authored order, and every other section is ordinary semantic HTML.

Plugins ScrollTrigger, Flip
Difficulty Advanced
Smooth scroll Lenis integration
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Questions about this template

Does the role board connect to my ATS?

No. Roles live in the page and matching is computed in the browser, so publishing a role is editing markup. The scoring is transparent and data-driven, which makes it a clean brief to hand a developer wiring it to an ATS feed later.

Does filtering hide roles a candidate might still want?

No, and that is a deliberate design choice. Flip reorders the full readable list by computed match score rather than removing weaker matches, so the whole market stays visible and the board does not collapse during rapid changes. Ranked discovery without hiding, rather than a filter that empties the page.

Do I need candidate or office photography?

None. Graphic monograms, company stamps, lines and data marks make a complete visual system with no photography or image assets, which also sidesteps the consent problem of putting real candidates' faces on an agency site.

How does a candidate read the full job description?

A native dialog opens from every card by click, Enter or Space, and returns focus to the card it came from on close. Match percentages and the live-role count roll to new values, with concise live-region copy naming the two best matches for screen-reader users.

Can internal talent teams use it, not just agencies?

Yes. An in-house team wanting candidates to compare open product roles gets the same board, and the three-step method rail re-labels to an internal hiring process easily. The employer brief section is the part that is agency-specific.

Paid template

Purchase to unlock the code.

Buying Recruitment Agency Template opens the HTML, CSS and JavaScript source, the full documentation, an AI setup prompt for your editor, and every update we ship to it. Standard license: unlimited personal and commercial projects.

£10 Standard license, unlimited projects

Browse free effects

Documentation

Quick start

  1. Copy the complete recruitment-agency-template folder into your project.
  2. Open index.html and replace the Good People name, contact details, hero copy and section copy.
  3. Edit the role articles and matching controls using the instructions below.
  4. Deploy the folder as static files. There is no build step.

The dependencies load before assets/script.js at the end of <body>:

Code snippet omitted: it ships with the download.

Editing role data

Every role is a complete <article data-role> inside [data-role-list]. Its matching data is on the article itself:

Code snippet omitted: it ships with the download.

  • data-title is the concise name announced in the live region.
  • data-skills, data-style and data-location accept comma-separated values.
  • Values must match a corresponding control's data-value exactly.
  • The visible tags are ordinary copy. Keep them aligned with the data so people and the score receive the same information.
  • Keep [data-role-peg] if you want a connector to land on the role when it ranks in the top three.
  • Keep [data-match-value] for the rolling percentage.
  • data-about supplies the dialog's team introduction.
  • data-responsibilities and data-requirements are pipe-separated lists used in the full brief.

To add a role, duplicate one article, change its attributes and all visible content, then choose a new authored monogram. The initial no-JavaScript order is the order in the HTML, so put the most useful briefs first. The script can handle any number of roles.

Full role dialog

JavaScript makes each role article keyboard focusable and opens one shared native <dialog> on click, Enter or Space. The script copies the company, title, short summary, current match, salary, contract and visible criteria into the dialog, then fills the long-form sections from the three data attributes above. The application link receives a role-specific email subject automatically.

Edit the reusable process list and closing copy once inside [data-job-dialog]. Escape, the close button and a click on the backdrop all close it; focus then returns to the role that opened it. While open, both native page scrolling and Lenis are paused so wheel and touch input scroll the dialog itself rather than the page behind it. Without JavaScript the cards remain ordinary readable articles and the dialog stays closed.

How the score is calculated

Every open brief starts with a 28-point base. Selected skills are worth 42 points, working style 16 and location 14. Multiple selected skills divide the skill weight evenly, so a role matching one of two chosen skills earns half of those 42 points. The total is converted to a rounded percentage; this keeps every role meaningful while making the selected evidence determine the ranking.

Change those four numbers in scoreRole() in assets/script.js if your matching model needs different priorities.

Editing criteria

A matching control is a native button:

Code snippet omitted: it ships with the download.

There are three supported groups:

Group Behaviour Role attribute
skill Multi-select data-skills
style One choice at a time; active choice can be cleared data-style
location One choice at a time; active choice can be cleared data-location

Add a button by giving it a value used by one or more roles. To change the starting profile, move both aria-pressed="true" and class="is-active" to the desired buttons. JavaScript reads the active defaults from aria-pressed; the class supplies the matching first-paint style.

The script also provides Arrow key, Home and End movement between controls in the same group. Space and Enter activation come from the native <button> element.

The board animation

The board uses Flip.getState() before sorting and Flip.from() after appending all cards in score order. It deliberately leaves absolute: false, so the cards remain in document flow; the role list also holds its current min-height until the animation finishes. This prevents rapid choices from collapsing the board or moving the content beneath it.

The three paths in [data-connectors] are measured after each reorder. The script converts the profile hub and top role pegs into board-relative coordinates, writes cubic SVG paths, then animates their dash offsets. They remain visible throughout the desktop board so the connection effect is present while visitors browse the full list. At widths below 980px the connector overlay is hidden to keep the stacked board clear, while the ranking, percentage update and top-match treatment remain.

Removing sections

Every animation initializer checks for its own root and required children before doing anything. Delete a complete section and remove its navigation link; the rest continues to work.

Section Root / ID Notes
Hero [data-hero] Includes the masked headline, live-role count, ambient candidate network and ticker.
Role board #roles, [data-match-board] Remove as one unit, including the overlay SVG.
Method #method The SVG route draws on scroll; the three steps and proof strip remain semantic content.
Stories #stories Candidate and employer quote stack.
Employer brief #brief Mail link and response promise.
Contact footer #contact Compact contact details; no script dependency.

Individual roles can be removed without changing the script. If fewer than three remain, unused connector paths are cleared automatically.

Palette

The identity is carried by six solid tokens. Keep each RGB triple in step with its hex because every translucent border, wash, shadow and dim text value uses those triples.

Code snippet omitted: it ships with the download.

The buyer-facing comment at the top of assets/style.css records the measured ratios for solid text, dim text, active controls and the top-match wash. Keep these constraints when reskinning:

  • navy and navy at .72 are the only text colours on chartreuse, peach, paper and white;
  • white and white at .76 are the text colours on navy;
  • white is safe on cobalt;
  • cobalt can carry match percentages on white or the top-match wash, but is banned as small text on chartreuse because the pair has too little margin;
  • chartreuse and peach never carry white text.

Accessibility and fallbacks

  • Native controls: every criterion is a real button with aria-pressed, visible focus, touch activation and ordinary keyboard activation. Role articles receive button semantics only after the working dialog is available.
  • Keyboard navigation: Arrow keys move within a criteria group; Home and End jump to its first and last controls.
  • Live updates: one polite atomic live region announces only the best two role names and percentages after a choice. Individual rolling values have accessible percentage labels but do not each announce.
  • Reduced motion: CSS restores every gated reveal before paint. The ticker, ambient hero network, route draw and dialog transitions become static; matching order, scores and connectors update instantly; the live role count displays its final value.
  • No JavaScript: the head gate never applies, matching controls and connector SVG remain hidden, and every fully detailed role appears in the authored default order. A short note explains the static board.
  • Blocked CDN: assets/script.js removes has-js if GSAP, ScrollTrigger or Flip is missing, restoring the same plain document.
  • Contrast: all reading text clears 4.5:1 at its actual size and surface. Exact ratios and colour bans are documented at the top of assets/style.css.

Dependencies

Lenis is optional. Remove its CDN tag and the marked Lenis setup block near the top of assets/script.js; ScrollTrigger and the board continue to work with native scrolling.

Image assets

None are required. Candidate marks, role stamps, connectors and all other visual details are CSS or inline SVG, so there are no image licences, external photo URLs or files to replace.

Worked examples, the events and programmatic API, and the class reference ship with the download, alongside the full source.

Your cart

Your cart is empty

The Vault £99

Everything in the catalogue, plus everything we release next.