Overview
The chapter's public website: a React/TypeScript/Vite single-page app with typed data modules for events, projects, and the board, a research status page, event RSVPs, and a GitHub Pages deploy pipeline.
The chapter website is where the IEEE SPS @ UF student chapter publishes its board, events, research projects, and ways to join or collaborate. It is a React 19 + TypeScript single-page app built with Vite and served by GitHub Pages at ieee-sps-uf.raulv.dev. Almost all of the content sits in six typed data modules, so a future board can update the site by editing data rather than components.
A student-chapter website built so that the next board can keep it current by editing data files instead of learning a codebase.
What it is
The IEEE Signal Processing Society (SPS) student chapter at the University of Florida needed a public home for its board, events, workshop materials, and research projects. The site is a single-page application (SPA) built with React, TypeScript, and Vite, with a small three.js scene on the front page — a signal-globe reinterpretation of the SPS logo mark. It deploys automatically through GitHub Actions to GitHub Pages and is served from a raulv.dev subdomain.
The design decision I care most about is that content lives in typed data modules rather than in components: chapter info, the executive board, events, projects, engagement paths, and the research philosophy pillars. Adding an event or refreshing a project's status is a data edit, and the TypeScript types document the expected shape.
- Events with RSVP — each event carries a type, a scheduled/tentative/cancelled status, time-zone-aware start and end, a location, links, and an RSVP provider (for example, a Google Form or Discord).
- Research status page — every chapter project reports a phase, a health flag (on track, watch, or blocked), a progress value, and a next milestone.
- Project hubs — one page per chapter project with an overview, problem statement, current focus, roadmap, stack, and links.
Deploying a single-page app on GitHub Pages
GitHub Pages serves static files and has no server-side routing, so a direct visit to a route like /events would normally return GitHub's own 404 page. The build script copies the built index.html to 404.html; Pages serves that file for any unknown path, the app boots, and the client-side router renders the requested page. The trade-off is that deep links are answered with a 404 status code even though the page renders correctly.
A GitHub Actions workflow builds the Vite bundle and publishes it on every push, and a CNAME file pins the site to ieee-sps-uf.raulv.dev. Setting this up took a handful of small commits at the end of April 2026, mostly to get the project path and custom domain right.
Content as data
Six TypeScript modules under src/data/ hold the site's content: chapter info, the executive board, events, projects, engagement paths, and the research philosophy pillars. Each module exports plain values checked against an interface, so an editor who adds an event with a missing field finds out at build time rather than in production.
The events module is the most structured. An event has a type and a status, a start time (and optional end) in a named time zone, a location, a set of links, and an RSVP block with a provider — Google Form, Discord, Luma, or a mailto link — that can be enabled or closed with a message once the event has passed. The project model was expanded in April 2026 with a health flag, a progress value, a phase, and a next milestone, which is what the research status page reads.
My role
I am the chapter's President for the 2026–2027 term. Chapter members built the original scaffold and the original three.js model between December 2025 and April 2026; my work starts at the end of April 2026 with the deployment pipeline and custom domain, followed by the events and engagement data model, the expanded project status model, and the project hub, research status, research philosophy, events, join, network, and collaborate pages. In August 2026 I led a full visual redesign and wrote the deploy and handoff documentation so the site can outlive any one board.
The August 2026 redesign
The redesign introduced a shared layout component, a design-token system in plain CSS custom properties, a proper 404 page, and sitemap and robots files, and reworked the styling of the navbar, footer, cards, and profiles to match. Alongside it I wrote the build and deploy section of the README, a contributing-content guide, and an open-items checklist in docs/ that records everything still waiting on board input — from confirming tentative events to refreshing project statuses.
Where it stands
The site is live and was last updated on 2026-08-21, when the Fall 2026 first general body meeting and its RSVP form were added and the globe animation was reworked. The open-items checklist in the repository is honest about what still needs board input, including a refresh of the project status entries, which still reflect the Spring 2026 snapshot.