All work

LiveClient websiteNonprofit

Mangfoldshuset Vestland

The website for a community organization in Vestland, where people from different backgrounds meet, take part and learn. I designed it, built it and still look after it.

My role
Design, development and maintenance, on my own
Client
Mangfoldshuset Vestland, a nonprofit in Vestland
Timeline
March 2026 – today
Built with
Next.js · Supabase · Resend · Vercel
Front page of mangfoldshusetvestland.no on a desktop: a green hero reading 'Et varmt fellesskap i Vestland' beside a photo from a girls' basketball event.
The same front page on a phone, with the menu button, the hero text and the organization's impact numbers.

What the site does

Two sides of the same site: what visitors see, and the admin area the volunteers use to keep it alive without needing a developer for every change.

For visitors

  • A front page with a photo carousel and the organization's own impact numbers
  • Activities and regular offers, with sign-up and email reminders
  • News, committees and an about page
  • Mangfoldsposten, the organization's magazine, readable as a flip-through edition with an archive
  • Membership and volunteer forms, ideas and partnership requests
  • Vipps donations, a privacy page and a cookie notice that only uses necessary cookies

For the team

  • Sign-in for the team, with roles that decide who may edit what
  • Publishing activities, offers, news, committees and front-page images
  • Uploading new magazine editions
  • Members, incoming messages and form submissions in one place
  • Statistics the team updates themselves

Decisions I'm glad I made

A real database, not a page builder

Content lives in Supabase (Postgres) with row-level security, so the team edits through the admin area and the database itself enforces who can read and change what. The schema grew through about 27 SQL migrations as new needs came in.

Email that does not double-send

Form notifications and activity reminders go through Resend. The reminder job runs on a schedule, uses Norwegian time for its dates and is idempotent, so a retry never sends the same reminder twice.

The magazine as a magazine

Mangfoldsposten is published as a PDF. Instead of a download link only, the site renders it page by page with pdf.js and lets readers flip through it, with zoom, fullscreen and an archive of earlier editions.

Validate everything that comes in

Forms are validated with Zod on the server, and link fields such as external links and the Vipps link only accept real http(s) addresses before anything is saved.

What went wrong, and what I changed

In September I reviewed the whole site as if I were auditing someone else's work. These are the findings that mattered most.

  1. A missing mobile menu

    A full review in September showed the navigation had no menu on phones at all. I added one, widened the breakpoint and moved it to a simpler native details/summary pattern.

  2. Fail-open roles

    The same review found that role checks let people through when a role could not be read. I changed them to fail closed, fixed the related database policies and added HTTP security headers, with regression tests so it stays fixed.

  3. Accessibility findings

    Automated axe scans flagged colour contrast, heading order and a missing landmark. I fixed all three, added visible focus rings, reduced-motion support and pause buttons for the moving carousel, and made the animated counters announce their final value to screen readers.

  4. A logo that disappeared at night

    On phones with forced dark mode, the browser darkened the header and the logo vanished. The header now keeps a fixed light background so the logo is always visible.

How it stays healthy

  • ~360commits since 12 March 2026
  • 27database migrations
  • 3kinds of automated checks: Vitest, Playwright, axe

Unit and regression tests run with Vitest, real browser checks with Playwright, and accessibility scans with axe. Dependencies are kept current, and production has no open npm audit findings.

Does your organization need a site like this?

I build websites for nonprofits, organizations and small businesses, and I stay around after launch. Tell me what you need and I'll answer honestly about what it takes.