Allen Padilla

Manitoba Métis Federation • In progress 2026

Métis Veterans Legacy Program Website

A public website for the program that recognizes WWII Métis Veterans. A Next.js front end on top of a Strapi CMS, so program staff can publish news, recipient profiles, and commemoration projects without a developer.

Role
Sole developer
Timeline
Started June 2026, on a staging domain ahead of launch
Team
Solo, with the program's staff as content owners
Stack
Next.js 16, React 19, Strapi 5, TipTap, Tailwind 4

Context

The Métis Veterans Legacy Program recognizes Métis Veterans who served in the Second World War. It runs two things, a one-time recognition payment for veterans and their families, and a commemoration program that funds projects honouring them. The website is how families find out they qualify and how communities see what the program does.

The old site was on WordPress, and every change went through someone who knew their way around it. The program wanted to post news, add recipient profiles, and put up commemoration projects on their own, and they wanted it to look like it was made this decade. I'm the developer in the IT department, so it came to me.

Home page hero of the Métis Veterans Legacy Program website, with photos blurred
The home page. Dark hero, a couple of program numbers, and the two calls to action that matter, apply, or learn about the commemoration program.

Problem

Three kinds of content, three different shapes.

  • News articles with a header image, an author, a category, and a body someone non-technical has to be able to write.
  • Recipient profiles, with the veteran's name, a bio, a list of survivors and beneficiaries, and photos from the ceremony.
  • Commemoration projects, with a title, a banner, project photos, a summary, and whatever extra the funded group wants to add.

The static pages about eligibility, how to apply, and the commission could stay in code. Everything that changes month to month had to be editable by staff, with drafts, and without me in the loop.

Approach

  • Next.js 16
  • React 19
  • Strapi 5
  • TipTap
  • Tailwind 4
  • Motion

I split it in two, a Strapi 5 backend that holds the content, and a Next.js 16 front end that reads from it.

The CMS. Four collection types, articles, categories, commemoration programs, and recognition payments. Articles, programs, and recipients all have draft and publish, so staff can get something ready and put it live later. Rich text uses a TipTap editor plugin instead of Strapi's default, with one preset that gives staff headings, lists, links, alignment, and the media library, and nothing else to get lost in. A seed script sets up public read permissions and sample content on first start, so a fresh environment is ready to demo.

Grid of recognition payment recipient cards pulled from the CMS, with photos and names blurred
Recognition payment recipients. Each card is a CMS entry with its own page, bio, and ceremony gallery. Names and photos are blurred here.

Rendering rich text. The editor stores documents as ProseMirror JSON. I wrote a small renderer that turns that into HTML on the server with no DOM dependency, then runs it through DOMPurify before it hits the page. Paragraphs, headings, lists, links, alignment, and marks are all handled explicitly, so what staff see in the editor is what shows up.

The front end. Next.js with the App Router, server components fetching from Strapi, and dynamic routes for each article, recipient, and project. Strapi relations are populated by name rather than with a wildcard, because a wildcard populate can fall over on custom fields. Header images come from Strapi when there is one and fall back to a local placeholder keyed by the slug, so a card is never empty.

Program cards on the home page linking to the Commemoration Program and Recognition Payment
The two programs the site exists to explain, right below the hero.

Design. Dark hero sections, a light body, cards with soft borders, and a little motion on scroll, counters that count up, sections that fade in. It takes the mood of the program's printed material without copying it. The commission page gives each commissioner a full profile with a portrait, and the eligibility page turns a dense set of rules into three cards a family can actually scan.

The Commission page with a commissioner's profile card, portrait and text blurred
The Commission page. Each commissioner gets a full profile. Portraits, names, and bios are blurred.
Recognition payment eligibility cards for veterans, spouses, and children
Eligibility rules as three cards, the veteran, a surviving spouse or partner, and children.

Outcome

It's live on a staging domain with real content, over a dozen recipient profiles that program staff published themselves through the CMS, the commission, and both program pages. It moves to its permanent domain when the program is ready to announce it. Staff can post a news story or add a recipient without asking me, which was the whole point.