Skip to content

ZNova projectWebsite · 2026

Nidaa humanitarian briefings

A non-commercial site that explains six humanitarian crises in two-minute, UN-sourced briefings and links straight to verified charities. Built pro bono.

Built byAhsan Nadeem

About this project

The challenge

When a crisis is in the news, it is hard to know what is true, what people actually need, and which appeals can be trusted. Nidaa (نداء, “a call”) answers those three questions in a couple of minutes for Gaza, Sudan, DR Congo, Yemen, the Rohingya and Afghanistan.

It had to earn trust: every figure needed a named source and date, the site could never touch donations, and it had to stay free of ads, cookies and trackers while still thanking the people who give.

The approach

We built Nidaa as a static Astro site. Crisis briefings, charities and Insights articles are typed content, and the build fails if a figure loses its source or an article names an unknown crisis or cover photo.

Every donate button opens the charity’s own page. Visitors can then tell Nidaa they gave: a small Cloudflare Pages Functions API validates the form on the server, stores it in D1 and sends a thank-you email through Brevo. Forms post normally without JavaScript, and the script on the page is progressive enhancement only.

The design is dark-first, with soft aurora light and a dotted world map that marks each crisis by severity. Each briefing zooms the map to its crisis, so the site needs almost no imagery.

The outcome

Six crisis briefings, Insights articles with credited, openly licensed cover photos, and verified charities for each crisis, with every figure checked against the UN (OCHA, UNHCR, UNICEF, WFP, WHO) or the IPC.

Every page is tested at three screen widths and in both themes, for accessibility (WCAG 2.2 AA), console and CSP errors and broken links, with an end-to-end test of the thank-you form. Built and maintained pro bono by ZNova.

Inside the product.

A look at the screens. Drag the front one aside or use the arrows to flip through.

Home page (1 / 4)

How it's built, layer by layer.

From what people see down to what it runs on, with the stack behind each layer.

nidaa · architecture
  1. Interface

    • Astro
    • TypeScript
    • Interactive dotted world map with sourced crisis figures
    • Dark and light themes from one token system
    • Accessible to WCAG 2.2 AA, with reduced-motion support
  2. Content

    • Markdown
    • Briefings, charities and figures as typed data
    • Markdown Insights, validated at build time
    • Every figure carries its source and date
  3. Server

    • Cloudflare Pages Functions
    • Brevo
    • Donation and newsletter forms validated server-side
    • Same-origin checks and a honeypot
    • Thank-you emails and the mailing list
  4. Delivery

    • Cloudflare
    • Playwright
    • Static pages on Cloudflare’s edge, D1 for submissions
    • Strict Content Security Policy with hashed inline scripts
    • Accessibility and smoke tests on every route

What shipped.

The capabilities that went live, one card each.

  • A map that explains

    Each crisis glows on a dotted world map by severity, with its latest sourced figure on hover or focus.

  • Every figure sourced

    Numbers come from the UN or the IPC with a date, and the build fails if one loses its source.

  • Verified charities

    Only UN agencies and registered charities working on the ground, each with a working donate page.

  • A thank-you for giving

    Donors can tell Nidaa they gave and get a personal thank-you email, with their first name on the wall if they choose.

  • No cookies, no trackers

    Nidaa never handles money and collects only what visitors type into its forms, with consent.

  • Accessible to everyone

    Tested against WCAG 2.2 AA at three widths and in both themes, with reduced-motion support.

Decisions that shaped it.

The engineering calls behind the build, and why they were made.

  1. Static first

    Every page is prerendered HTML on the edge, so the site is fast, cheap to run and has almost nothing to attack.

  2. Progressive enhancement

    Forms, filters and the menu work without JavaScript; scripts only add the extras, such as the live donor counter.

  3. A tiny API

    Only the forms need a server, so they run as Cloudflare Pages Functions with D1 instead of a separate backend.

  4. Tests as the safety net

    Accessibility, CSP, link and layout checks run on every route at three widths, so content updates can’t quietly break a page.

Next project

Ahad Brothers online store

ZNova project · E-commerce · 2026

A WooCommerce store for a school-uniform maker: parents find their school, build its exact kit by season, class and age, and check out in one basket.

All projects

Got a workflow nobody's tool quite fits?

That's the kind we like. Tell us about it and we'll reply with how we'd approach it.

Popular searches

Change theme