// components.jsx — all RNZAF Avionics Reunion site components const Header = () => (
RNZAF Avionics Reunion crest
Wigram - 1938 - 2026 RNZAF Avionics Reunion
); const slugify = (s = "") => s .toString() .toLowerCase() .replace(/[^a-z0-9]+/g, "-") .replace(/^-+|-+$/g, ""); const Sidebar = () => { const chapters = typeof CHAPTERS !== "undefined" ? CHAPTERS : []; return ( ); }; const Hero = ({ onContact }) => (
Royal New Zealand Air Force · Avionics Trades

The Avionics
Trades Reunion.

Fifty years on from the 1976 amalgamation, former and serving members of the Electrical, Instrument, Radio, Radar and Avionics trades.

The 2026 reunion has been cancelled.
1938 — 2026
Eighty-eight years of service
RNZAF Harvard line-up · Wigram tarmac, archival
); const AnnouncementPanel = ({ onContact }) => (
2026

Cancelled

Reunion Cancelled

The 2026 RNZAF Avionics Trades Reunion has been cancelled. We thank everyone who expressed interest. Please get in touch with the committee if you have any questions.

Christchurch · 2026
); const StatsStrip = () => { const STATS = [ { num: "5,290", label: "Airmen Trained", desc: "Across 288 wireless and radar courses run through WW2.", }, { num: "88", unit: "yrs", label: "Of Avionics Training", desc: "From the Electrical & Wireless School, 4 January 1938.", }, { num: "5", unit: "→ 1", label: "Trades Amalgamated", desc: "Electrical, Instrument, Ground Radio, Air Radio and Radar Fitters.", }, { num: "50", unit: "yrs", label: "Since Amalgamation", desc: "The September 1976 restructure that defined today's trade.", }, ]; return (
{STATS.map((s, i) => (
{s.num} {s.unit && {s.unit}}
{s.label}

{s.desc}

))}
); }; const Chapter = ({ eyebrow, title, year, place, lead, body, figure, id }) => (

{eyebrow}

{title}

{year && {year}} {year && place && } {place && {place}}
{lead &&

{lead}

} {body && body.map((para, i) =>

{para}

)} {figure && (
{figure.alt}
{figure.caption}
)} Read more
); const PullQuote = ({ text, attr }) => (

{text}

{attr}
); const Gallery = () => { const ITEMS = [ { src: "assets/photos/wigram-01.jpg", year: "c.1960s", label: "Harvard line-up, Wigram tarmac", span: "span-c-6 span-r-2", }, { src: "assets/photos/CombinedFitters76.jpg", year: "Dec 1976", label: "Combined Fitters Course — last of the Fitters", span: "span-c-6", }, { src: "assets/photos/2ttsStaff78.jpg", year: "1978", label: "2TTS staff, Wigram", span: "span-c-3", }, { src: "assets/photos/1960-bristol-NZ5907.jpg", year: "1960", label: "Bristol Freighter NZ5907 in flight", span: "span-c-3", }, { src: "assets/photos/wigram-03.jpg", year: "1950s", label: "Tiger Moth servicing, Wigram", span: "span-c-4", }, { src: "assets/photos/wigram-07.jpg", year: "1980s", label: "Skyhawk on display, open day", span: "span-c-4", }, { src: "assets/photos/wigram-05.jpg", year: "1950s", label: "P2 Neptune on the line", span: "span-c-4", }, ]; return ( ); }; const PastReunions = () => { const PAST = [ { year: "2002", title: "Auckland Reunion", where: "Auckland · 15-17 March 2002", tag: "First combined Avionics reunion", body: "The first large gathering of the amalgamated Avionics trade — held in Auckland over three days. Friday night venue was the old 3 Sqn hangar at Hobsonville, and the Saturday night function was held at the Alexandra racecourse. Over 500 attended; more than four hundred training course photographs were collected.", img: "assets/photos/wigram-10.jpg", }, { year: "2018", title: "80th Anniversary", where: "Air Force Museum · Wigram", tag: "1938 — 2018", body: "Held on Friday 23rd and Saturday 24th March 2018 to mark eighty years since the founding of the Electrical and Wireless School. The 80th-anniversary mark, designed for that reunion, is still in use today.", img: "assets/photos/wigram-12.png", }, ]; return (
Service Record · Past Reunions

Previous Gatherings

Earlier reunions have been the seed of the collection now preserved in the photo archive.

{PAST.map((p) => (
{`${p.year}
{p.year}

{p.title}

{p.body}

))}
2002 · Auckland 2018 · 80 Years 2026 · Cancelled
); }; const ContactForm = () => { const [submitted, setSubmitted] = React.useState(false); const [loading, setLoading] = React.useState(false); const [serverError, setServerError] = React.useState(""); const [name, setName] = React.useState(""); const [email, setEmail] = React.useState(""); const [message, setMessage] = React.useState(""); const [errors, setErrors] = React.useState({}); const validate = () => { const e = {}; if (!name.trim()) e.name = "Name is required"; if (!email.trim()) { e.email = "Email is required"; } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { e.email = "Please enter a valid email address"; } if (!message.trim()) e.message = "Message is required"; return e; }; const handle = async (e) => { e.preventDefault(); setServerError(""); const errs = validate(); if (Object.keys(errs).length) { setErrors(errs); return; } setErrors({}); setLoading(true); try { const res = await fetch("https://formsubmit.co/ajax/contact@rnzafavionicsreunion.co.nz", { method: "POST", headers: { "Content-Type": "application/json", Accept: "application/json" }, body: JSON.stringify({ name, email, message, _subject: "RNZAF Avionics Reunion — Contact from " + name, }), }); const data = await res.json(); if (data.success === "true" || data.success === true) { setSubmitted(true); } else { setServerError("Something went wrong. Please try again or email us directly."); } } catch { setServerError("Could not send message. Please email us directly."); } finally { setLoading(false); } }; if (submitted) { return (

Message received

Thank you, {name || "there"}.

Your message has been sent to the committee.

); } return (

Get in touch

Contact the Committee

For any questions about the reunion or the association, send a message using the form below {/* or email us directly at{" "} contact@rnzafavionicsreunion.co.nz */} .