Return

Nørgård Mikkelsen

Reimagining how employees find each other with AI

An AI-driven skills directory

Role
Design & Full-stack
Year
2026
Type
Web platform
Live
NM Skills is an internal tool for Nørgård Mikkelsen, so the live site isn't publicly available.
Nørgård Mikkelsen — Reimagining how employees find each other with AI

Overview

Nørgård Mikkelsen is an 80-person ad agency spread across five departments and two cities. The work is deeply cross-disciplinary, but knowing who can actually do what is not — so the right people get found by asking around, or get missed entirely.

NM Skills is the answer: an AI competency directory where you describe a task in plain language and get back the colleagues best suited to it, with a short explanation of why. It was our final-exam thesis project, and on it I owned the entire digital solution — the design and the full-stack build — alongside the shared research. It scored a 12, the top of the Danish grading scale.

The whole idea fits in five steps — and since the product has to explain itself to first-time users anyway, those five steps live right inside it as a short "how it works" walkthrough. It's the fastest tour of everything below.

1/5 Profiles and projects feed one system — the more there is, the smarter it gets.

The problem

The Danish term is samtænkning — thinking across the silos. People wanted to, but the agency had no shared picture of its own competencies, and the cost showed up in concrete ways: 3D animation bought from an external studio that one of their own art directors could have done in-house, specialists pulled into briefs too late to do their best work, new hires lost across two offices.

I was helping on a project that needed some animation, and found out they'd bought the 3D externally. I could have finished it in-house myself. Oh well.

Jens Madsen — composite persona, grounded in interviews and survey responses

To ground this in evidence rather than anecdote, we ran a mixed-methods study: 30 survey responses across all five departments, 5 think-aloud user tests, and observations on-site during the internship. The findings were triangulated — survey patterns checked against interviews against observation — so the brief rested on more than one source. The picture was consistent: discovery was almost entirely informal. The knowledge existed; the map didn't.

83%

sense there are skills in their colleagues they're unaware of

87%

work across departments regularly

80%

don't feel fully informed about projects across the agency

The insight that shaped everything

The appetite was clearly there: 93% would find an AI skills search useful, and 70% were willing to keep a profile. But underneath sat a single, load-bearing objection — and which of the two won would decide the whole project.

Yet another system to maintain.

The most common reason people gave for not using it

Two-thirds named that one line as the biggest reason they wouldn't use it. So it became the brief: NM Skills had to be effortless, or it was dead on arrival. Success wouldn't be decided by features — it would be decided by friction.

We made that explicit using BJ Fogg's behaviour model (Behaviour = Motivation × Ability × Trigger). The honest read of the data was that you can't count on motivation to keep a profile current — it's a chore nobody is passionate about, and no design changes that. So rather than trying to motivate people, every design decision after this point turned the dial on Ability: make the action so easy it happens regardless of how anyone feels about it.

Behaviour = Motivation × Ability × Trigger

M

Motivation

Fixed — nobody is passionate about upkeep, and no design can change that.

A

Ability

The dial we could move — make the action so easy it happens anyway.

T

Trigger

A gentle quarterly nudge at the right moment.

You can't motivate people into upkeep — so we made it effortless instead.

Two people it had to win over

The design was built around two personas pulled straight from the data — and they wanted opposite things. Sofia is new, eager, and rates the idea 5/5. Jens is a 14-year veteran, skeptical of new systems, and rates it 3/5. A tool that only delighted Sofia would never reach the people whose hidden skills mattered most — people like Jens, whose best competencies aren't in his job title.

S

Sofia

New hire · Multimedia designer

I don't know who does what yet. I'd use this on day one to find the right people.

Rated the idea
5/5
J

Jens

14-year veteran · Art director

Another system to keep updated? I barely have time for the ones I've got.

Rated the idea
3/5

Mapping Sofia's current path to finding a developer showed where the friction actually lived — and what removing it would feel like. The redesigned flow makes NM Skills the first stop instead of the last resort.

Journey map

Sofia (Media, 6 months in) gets a client brief and needs to find a developer in Digital — but she doesn't have a full picture of the agency yet.

Emotional curve

ReadyConfusedWorriedFrustratedRelievedDrained
1Brief meeting

Gets the brief from the project lead — needs a developer in Digital.

Pain points: Brief says nothing about who's done similar work

2Teams channels

Scrolls Teams channels looking for similar projects.

Pain points: No overview of who can do what

31:1 with manager

Asks her manager, who points her onward to Digital.

Pain points: The manager is a bottleneck — doesn't know everyone

4Teams DM

Messages a colleague who turns out to have a different specialism.

Pain points: 30 minutes lost on the wrong match

5Coffee machine

Hears at the coffee machine that Mads is the right person.

Pain points: Key knowledge hidden in informal channels

6Teams call

Briefs Mads, but the deadline is close now. Rushed.

Pain points: Delay turns into quality under pressure

Time spent

2 days → 10 min

Phases

6 → 5

Lowest point

Frustrated → Ready

Semantic, not keyword

A keyword directory would have failed the exact people it needed to surface — the ones whose best skills aren't in their job title. So search runs on meaning. You can paste a whole brief; it understands intent, finds people whose experience fits even when the words don't match, and explains the connection.

Hvem kan lave 3D-animation til en produktvideo?
J

Jens Madsen

KreativArt Director

Seasoned art director with a quiet specialism in 3D and motion — built in-house animation on past briefs.

Art Direction3DMotion
94% match

Shipped 3D product animation in-house on past briefs, though it isn't in his title.

S

Sofia Lind

DigitalMultimedia Designer

New multimedia designer with motion and 3D coursework, eager to take on supporting animation work.

MultimediaMotionAfter Effects
71% match

Motion & 3D coursework — a strong fit for a supporting role.

Semantic search understood the intent — and found a hidden skill.

In practice it's three steps. You ask in plain language — here, "who can help with a website for Molslinjen?"

Ask the way you'd ask a colleague — no filters, no keywords, just the question.

It comes back with people ranked by how well they actually fit, each scored and reasoned over rather than keyword-matched.

Ranked by fit, with a match score on each — the model's read of the whole profile, not a tag match.

And opening a match shows why it surfaced them. The reasoning points at real evidence — including the actual projects they've worked on — so the answer is auditable, not a black box.

Every match explains itself, grounded in real project history rather than a confident guess.

Search is the main way in, but not the only one. All of the agency's competencies also live in a single browsable skills cloud — a quick, slightly playful way to see everything the company can do at a glance — and clicking any one skill flips the question around: instead of "who fits this brief?", it answers "who here can do this?"

Click any skill and it lists everyone who has it — search's question, asked the other way round.

Under the hood

The hard part was keeping search fast, cheap, and honest. Every profile is turned into an embedding — 1,536 numbers that place it as a single point in "meaning space," where texts about the same thing land close together. A dedicated embedding model (OpenAI's text-embedding-3-small) does only that one job: text in, coordinates out.

80+

Every profile in the agency

25

Closest by vector similarity — a cheap pre-filter

Top few

Ranked & explained by the language model

Each query is turned into an embedding — a point in “meaning space.” pgvector finds the 25 nearest neighbours instantly, so the expensive model only ever reasons over a handful of candidates. Cost stays flat whether the agency is 80 people or 800.

When someone searches, the query becomes a point too, and pgvector finds the 25 nearest profiles by cosine similarity — directly inside Postgres, so there's no separate vector database to run. Only those 25 go to the chat model that ranks and explains the matches. That pre-filter is why cost and speed per search stay flat whether the agency has 80 employees or 800: the model never reads more than a fixed shortlist.

Two failure modes designed around

LLMs are confident and unreliable in exactly the wrong places, so the build included defences for the two ways this could embarrass the agency:

Made-up project history. Claims about who worked on what are grounded in real data through tool-calling — the model calls a search_projects tool against the actual project database rather than recalling from training. It explains matches; it doesn't fabricate them.

Mangled identities. Early on, the model garbled employee UUIDs in 5–10% of searches, occasionally attaching the right reasoning to the wrong person. The fix was to reference people with stable, simple numeric IDs and keep the UUID mapping server-side. A small, concrete bug — found, understood, and designed out.

Frontend

  • Next.js
  • React
  • TypeScript
  • Tailwind

Backend

  • PostgreSQL
  • pgvector
  • Tool-calling

AI

  • Embeddings
  • Gemini
  • Semantic search

The objection, answered: zero-effort upkeep

Every decision traces back to "not another system to maintain." The way we beat that objection is that you never start from a blank profile. Tell it who you are, point it at your LinkedIn or CV, and it does the heavy lifting — so onboarding becomes editing, not writing from scratch. The last steps deliberately ask about interests and passions, not just job titles: two designers can have the same CV, but the one who's genuinely into a subject is the better match for it. In testing, a participant finished the whole thing in under four minutes.

Step 1 of 5

The basics

Name, role and department — the only thing you type by hand.

Generated from your name

Name

Role

Art Director

Department

Kreativ

Two details make the enrichment trustworthy rather than magic. It's a dual-model strategy: a conservative primary model (Claude Sonnet 4.6) drafts the profile, and if it returns nothing, a more eager fallback proposes plausible findings — but everything lands in a review step the user confirms before anything is saved. Nothing is asserted on the employee's behalf without a human nod. And because all of this routes through OpenRouter, the underlying model can be swapped with a config change instead of a rewrite — important when models age out and reprice every few months.

After onboarding, upkeep stays friction-free by design: profiles re-embed automatically whenever they change, edits take under two minutes, and gentle quarterly check-in nudges (sent via cron + email) prompt people to keep things current without nagging.

One system, end to end

The platform breaks into five parts, each handling a different job, from what users see to what happens behind the scenes.

Frontend

The directory, profiles, projects, cards & admin

API layer

Route handlers — search, team-builder, onboarding

AI layer

Embeddings, ranking & tool-calling, routed via OpenRouter

Data layer

Postgres + pgvector, auth & row-level security

Infra & jobs

File storage, transactional email, scheduled nudges

Everything sits on a small, deliberate design system built on Atomic Design, so the components, the data model, and the AI features all speak the same language. A shared component library keeps every screen feeling like one product, and the parallel structure between the UI layer and the API layer means each feature lives as one coherent slice top to bottom.

A shared component library keeps every screen feeling like one product.

From finding people to building teams

Search answers "who's right for this?" — but a brief usually needs a team, not a person. So the directory extends into lightweight project management built on the same semantic core.

You can upload a brief as a PPTX, PDF, or DOCX and the platform parses it and fills the project form automatically — title, client, the competencies it'll need. So creating a project is mostly confirming what the AI already pulled out, not typing it in.

Drop in a brief and the form fills itself — title, client, and the competencies it'll need.

From there, an AI Team Builder proposes a balanced team by reasoning over the brief against everyone's profile, with a short note on why each person fits. It's the same idea as search, scaled up from one match to a whole crew.

The same semantic core as search, scaled from one person to a whole crew — each with a reason attached.

The part that compounds: a living project history

Here's where the two halves close into a loop. Every project carries the team that actually worked on it — and that record is the thing that makes the whole system get better the longer it runs.

Every project remembers who was on it — which is exactly what search reads back later.

Because search is grounded in real data through tool-calling, that growing history becomes searchable too. The model can call a search_projects tool against the actual project database, so over time the directory stops being just "who says they can do X" and starts answering "who has actually done X, and for whom." Ask for someone who's worked with a particular client, or who's shipped a particular kind of project, and the answer comes from what really happened — not from self-reported profiles alone.

That's the quiet payoff of tying the projects page back into the overview: every brief staffed and every project closed leaves the next search a little smarter. The directory you fill out once keeps compounding on its own.

Making profiles worth keeping: NM Cards

The research said the same thing twice: people won't maintain a profile they see as admin. Quarterly nudges fight the forgetting; NM Cards fight the apathy — they give people a reason to want a good profile.

Every employee gets a Pokémon-inspired collector card, AI-generated from their skills: a subtitle and two signature "moves," with a rarity tier that rises with tenure at the agency — from a plain New card to an animated holographic Legendary at ten years. They tilt in 3D on hover, flip on click, and can be printed to PDF as physical cards. It reframes the profile from a form you fill out into something you'd actually show off — turning upkeep from a chore into a small flex.

Legendarisk
J

the quiet 3D wizard

Jens Madsen

Art Director

Kreativ

In-house animation

Turns a brief into 3D product motion without going external.

Calm under deadline

The one you want on the team when it's due tomorrow.

Siden 2014

Legendary · 10+ yr at the agency — hover to tilt, click to flip

Behind the card sits the profile it's generated from: the full set of competencies, the tools someone works in, and the things they can help with — the real material every search and team suggestion reasons over.

The profile behind the card — competencies, tools, and 'can help with', all of it searchable.

A launch, not just a product

A directory only works if it's full, so adoption was treated as part of the design problem, not an afterthought. The product shipped with a launch campaign — which I designed — that leans into the same Pokémon language as the cards: playful enough to get a smile, pointed enough to make the value obvious.

“170 km. 2 min.” launch poster
“Reach out” launch poster
“I choose YOU!” launch poster
Collaboration launch poster

The posters did the persuading the data couldn't: "170 km. 2 min." collapses the distance between the two offices into a single search, and the conversation cards ask people the one question the whole project is built on — what's your unofficial professional superpower that isn't in your job title?

Responsible by design

Because the tool suggests people rather than decides anything about them, it sits firmly in the low-risk tier of the EU AI Act — a sparring partner, not an automated gatekeeper. That framing is a deliberate design choice: staffing and HR decisions made by AI fall into the Act's high-risk category, so we drew the line on purpose. The system never gives one answer — it returns three to five ranked suggestions with a reason for each, and a human always makes the call.

It's worth being honest about the limits, too. Some groups describe their own skills more modestly than others, which can skew who the model surfaces — a real bias risk to watch. And the project's true test, whether people keep their profiles fresh over time, is one a single study can't answer; it needs the product followed across several quarters in real use. Naming the weak point is part of the design.

Outcome

NM Skills turns a two-day scavenger hunt into a ten-minute search, and gives quiet specialists a way to be found for the work they're actually best at.

2d → 10m

to find the right colleague for a specific brief

80 → 800

scales without rising cost per search

12 (A+)

final thesis grade — top of the Danish scale