
Accounting/Financial Analyst Portfolio — Blessing Osamudiamen
A portfolio for a Chartered Accountant and financial analyst — five finance case studies as indexable pages, with structured data that tells search engines exactly who she is.
Role: Sole developer for a paid client — design direction, build, deployment, and SEO. Built using an AI-assisted workflow (Claude Code).
Problem
Blessing Osamudiamen, a Chartered Accountant (ACA) and FMVA-certified financial analyst, was applying for accounting and financial-analyst roles. Her strongest evidence — five detailed case studies, including a DCF equity valuation, an integrated budgeting model, and a Tableau sales dashboard — existed only as PDF reports and model files, which don't make a quick first impression or show up in search.
Goals
Present her as a credible hire within seconds, make every case study readable on the page rather than only as a download, get her name and credentials found in search, and keep personal details private — no age, address, nationality, or grades anywhere. Every number on the site had to come from her CV or her own case-study reports.
Solution
A fully static Next.js site — Home, About, Projects, and a dedicated page for each of the five case studies — with downloadable PDFs and links to the original model files. Each case study follows the same structure (Problem → Methodology → Findings → Recommendations → "So what?") with its headline figures up front, and all content lives in one typed data file, so her details can change without touching any components.
Architecture
Every route is statically prerendered, including one page per case study generated with generateStaticParams (unknown slugs return a 404). Server Components by default; client components only for the mobile menu, scroll animations, and the projects explorer. The Projects page has a filterable grid with a deep-linkable modal (?open=<slug>, closed by the back button), and one shared content component renders each case study in both the modal and its standalone page.
Frontend
Tailwind CSS with a deliberately restrained finance palette — navy and slate with a single orange accent — and IBM Plex Mono for every figure, date, and label, so the site reads like a well-built financial model. Framer Motion animates the filter tabs and section reveals, and respects reduced-motion settings. Accessibility is built in: 44px touch targets, a modal that takes focus, closes on Escape, and returns focus afterward, a skip link, and tap feedback on phones (hover styles only apply on devices that can hover).
Backend
None needed: the site has no forms or accounts, and contact goes through direct email, phone, WhatsApp, and LinkedIn links — so there's no server to run or secure. The build does the server-side work instead: an llms.txt route generates a plain-text summary of her profile for AI search tools, and a build step reads git history to date every page (see Technical Decisions).
Database
None. All content — profile, experience, certifications, the five case studies, and every SEO keyword — lives in one typed TypeScript file (data/profile.ts). Strict typing catches a missing case-study field at build time, which matters on a site where every figure has to be exact.
Challenges
The biggest problem was invisible in a browser. Case studies originally existed only inside a modal, so search engines couldn't index them at all — and reading the modal's URL state with useSearchParams silently made the entire projects grid client-rendered, so crawlers received an empty page. I rebuilt each case study as its own static page and moved the URL read to after the page loads, so all five cards are now in the HTML a crawler receives. Link previews needed a fix too: the share image is a tall portrait, which X's large card format would crop through her face, so it uses the square card instead.
Technical Decisions
"Last modified" dates in the sitemap and structured data come from the git commit that last touched the content, read at build time — never from the build time itself, which would tell search engines everything changed on every deploy. Structured data is one linked JSON-LD graph: a single Person entity (credentials, issuers, occupations) referenced by every page, plus an Article for each case study. Privacy is a content rule, not an afterthought — no age, address, nationality, or grades appear anywhere, including in the CV download, which was edited to match.
Results
Live, verified in Google Search Console with its sitemap submitted, and showing in Google search results. Blessing is happy with it and is using it in her job applications — and people who've seen it have already asked about having similar sites built for themselves.
Lessons Learned
A site can look perfect in the browser and still be invisible to search engines — checking the raw HTML a crawler actually receives caught a problem no visual review would have. And on a finance portfolio, credibility depends on exactness, so every figure traces back to a source document instead of being rounded or paraphrased.