Case Study
simisolaadedeji.com: giving the evidence one address
Context
Simisola Adedeji is a global health monitoring, evaluation, and surveillance specialist with nearly a decade inside the World Health Organization, working across West Africa on M&E frameworks, disease surveillance infrastructure, and digital health systems. The work is the kind that shows up in outbreak response and national programme data rather than in anything a general audience ever sees.
I designed and built her site end to end: the brief, the content structure, the visual direction, the build, and the deployment. One person, one domain, live.
The Problem
She had a substantial body of evidence and nowhere that was hers to put it. The programme results lived in WHO reporting, the research lived in journals, and the public-facing version of her career was a LinkedIn profile.
A profile page is a poor container for this particular kind of career. It orders everything by employer and date, which turns three years of outbreak surveillance into a job title and a bullet list. It gives no room to peer-reviewed publications, which in global health carry real weight. And the frame around the work belongs to a third party who can change the rules, the layout, and the reach whenever they like.
The gap was not visibility. It was that the evidence was scattered across places she did not control, in a shape that made her look like a sequence of roles rather than a specialist with a track record.
Constraints
A one-person build with no design system to inherit and no budget for stock photography of a domain that stock photography handles badly. Global health imagery is either clinical and generic or exploitative, so the site had to establish seriousness through typography, structure, and data rather than pictures.
The content also carries a duty of accuracy that a normal portfolio does not. Every figure on the page traces to real programme reporting, so nothing could be rounded up or softened for rhythm, and claims had to survive being read by people who worked on the same programmes.
Strategy
Lead with evidence and let the biography follow. The site is arranged so that the first thing a visitor meets is what the work achieved, the second is how it was done, and only then who employed her and when.
That ordering is the entire strategy. Everything else, the typography, the ticker, the section breaks, exists to make that order feel natural rather than like a CV that has been shuffled.
What the Site Is
Hero
Name, discipline, and four figures: cases investigated, programmes delivered, surveillance uplift, years of experience. A live outbreak ticker runs above the fold.
About
The one-paragraph version, with the domains and instruments named as tags: M&E frameworks, disease surveillance, digital health systems, DHIS2, SORMAS, ODK.
Impact
Programme cards, each carrying its outcome rather than its job title. Mpox outbreak surveillance, M&E framework design for polio and vaccine-preventable disease, COVID-19 and multi-disease emergency response.
Experience
The chronological track record across WHO roles, placed after the programmes rather than before them.
Publications
Peer-reviewed contributions with a route out to Google Scholar, because in global health the citation is its own currency.
Design Decisions
Numbers before prose
Her credibility is quantitative, so the hero states it that way: 53,000+ case investigations, 25 programmes, 40% surveillance uplift. A visitor who reads nothing else has already met the argument.
Programmes as the unit, not jobs
A CV orders work by employer and date, which flattens three years of outbreak response into a title. The site leads with programmes and lets each carry its own result, so the reader meets the work before the org chart.
A live outbreak ticker
The header carries a current surveillance headline. It costs a strip of space and buys the one thing a static portfolio cannot: the sense that this field is active and she is in it now, not that this is an archive of past posts.
Publications given their own room
Peer review is a separate kind of proof from delivery, and collapsing it into a list of links would have wasted it. It gets a section, an abstract, and an outbound Scholar link.
A consultation CTA, not an apply button
The primary action is Request a Consultation. That is a positioning decision as much as a design one: it frames her as someone engaged for expertise rather than someone available for a vacancy.
How It Was Built
Next.js and TypeScript, styled with Tailwind, deployed on Vercel. Nothing about that stack is interesting on its own, which is the point: the decisions worth defending here are editorial, not architectural.
It was vibe-coded, which is worth being straight about rather than dressing up. I worked conversationally with an AI assistant, describing the intent for a section and iterating on what came back rather than writing every line by hand. That collapses the distance between deciding something and seeing it rendered, which makes it cheap to try a layout and throw it away.
What it does not do is make the judgement calls. Deciding that programmes outrank job titles, that publications deserve their own section, and that a live outbreak ticker earns its space were the decisions the site turns on, and none of them came from the tooling.
Engineering & Interface
The build is small, so the engineering decisions worth writing down are the ones that were decided rather than defaulted. Most of what follows is what you get for free if you know it exists, and get wrong forever if you do not.
Rendered on the server, not assembled in the browser
Next.js App Router with the content server-rendered, so the programme results and publication titles are in the HTML at first paint. For a site whose entire job is to be read and indexed, shipping an empty shell and filling it with JavaScript would have put the evidence behind a render.
Four languages, chosen from the domain rather than from a template
The site serves localised routes for French, Spanish, and German alongside English, with hreflang alternates and an x-default so search engines hand each visitor the right one. This is not internationalisation for its own sake: French and Spanish are WHO working languages, and French is the working language across much of the West Africa where her programmes ran. The audience is genuinely multilingual, so the site is.
Progressive disclosure instead of one long page
Each section states its summary and then offers a route deeper: read the full story, see all programmes, see the full track record. The landing page stays scannable for the visitor deciding whether to care, and the depth stays available for the one who already does.
Content as data, not as markup
Programmes, publications, and media are served from a Supabase project rather than hard-coded into the page. A new publication or a new programme is a record, not a pull request, which matters for a site whose owner is not going to open a code editor to update it.
A skim layer above the read layer
Every programme card carries its outcome on the card face, and the hero carries four figures. The page is built to survive being read in fifteen seconds, because that is how long most visitors will give it.
Security Posture
A personal site holds no card numbers and no patient records, which is exactly why most of them ship with whatever headers the host happened to send. This one did not. Every item below is verifiable from the response headers on the live domain, which is the point of listing them: they are claims a reader can check rather than take.
A real content security policy, not an inherited one
default-src is self, and every external origin the page is allowed to reach is named explicitly per directive: fonts, analytics, the Supabase project, nothing else. frame-ancestors is none, base-uri is self, and form-action is self, which closes off clickjacking, base-tag injection, and form redirection respectively.
HTTPS made non-optional
Strict-Transport-Security with a two-year max-age, includeSubDomains, and preload. After the first visit the browser refuses to speak plain HTTP to the domain at all, so there is no downgrade to intercept.
The weak line, named
script-src still carries unsafe-inline and unsafe-eval. That is the concession the framework asks for, and it is the softest part of the policy. Saying so is more useful than presenting the configuration as airtight: moving to nonce-based script loading is the obvious next move, and it has not been made yet.
None of this makes me a security engineer, and the section is not claiming it does. It is the checklist a developer picks up from four years of shipping inside a regulated bank, sitting through security reviews and watching what gets a release stopped: know what each header does, set it deliberately, name only the origins you actually need, and be able to say which line of your own policy is the weak one.
That last part is the difference between understanding a practice and performing it. Vibe-coding accelerates the typing, and it will happily ship a default configuration that passes every visual test. It does not tell you that a portfolio site should be denying geolocation, or that the CSP it just generated has a hole in the script directive. Knowing what to ask for is still the job.
Outcomes
- Live on an owned domain rather than a platform profile, so the presentation cannot be changed by someone else's product decision
- Nearly a decade of programme work readable in a single scroll, with outcomes attached to each programme
- Peer-reviewed publications surfaced as a first-class section rather than a footnote
- A consultation route that positions her for advisory engagements, not only employment
- Delivered end to end by one person, from brief to deployed domain
Lessons Learned
- For an evidence-heavy career, the hardest editorial job is subtraction. Nine years at WHO produces more material than a site can carry, and the value came from deciding what to leave out.
- Ordering by programme instead of by employer changed the whole reading. It is a small structural choice that does more for credibility than any amount of visual polish.
- AI-assisted building collapses the distance between a design decision and seeing it live, which makes it far cheaper to try a layout and reject it. The judgement about what to keep is still entirely human, and that is where the time actually went.
- A domain of your own is a positioning asset. The technical work here was modest; the value was in no longer renting the frame around the work.