IEEE Signal Processing Society at UF logo.
IEEE SPS @ UF

IEEE SPS @ UF — chapter website

The public site for the IEEE Signal Processing Society student chapter at the University of Florida: a React/TypeScript single-page app whose content lives in typed data modules, deployed to a raulv.dev subdomain.

Status · Live and maintained; last update 2026-08-21. I serve as chapter President for the 2026–2027 term.

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.

FAQ

Did you build the whole site?

No. Chapter members built the original scaffold and the original three.js model. I set up deployment, added the events and engagement data model and most of the current pages, led the August 2026 redesign, and wrote the handoff documentation.

Why keep content in TypeScript modules instead of a CMS?

A student chapter turns over every year. Typed data files in a public repository need no accounts or hosting, the types tell the next editor what fields exist, and every change is recorded in the public git history where it can be reviewed.

How do deep links work on GitHub Pages?

GitHub Pages cannot route a single-page app on its own, so the build copies index.html to 404.html. A direct visit to a route like /research/status is answered with the app (technically with a 404 status code), which then renders the right page.

What I built

  • The GitHub Pages deployment and custom-domain setup: an Actions workflow that builds the Vite bundle and publishes it, a `CNAME` for the raulv.dev subdomain, and a post-build step that copies `index.html` to `404.html` so deep links into the single-page app resolve.
  • The content-as-data model: typed modules for events (with type, status, time zone, location, links, and an RSVP provider) and engagement paths, an expanded project model with status, health, progress, phase, and next milestone, plus the pages that render them — project hubs, events, join, network, and collaborate. The board and chapter-info modules predate my work.
  • The research status page, which shows each chapter project's phase, health, progress, and next milestone in one place.
  • The August 2026 redesign: a shared layout, a design-token system in plain CSS, a 404 page, and sitemap and robots files (the schema.org structured data dates from the April 2026 expansion).
  • Handoff documentation for officer turnover: build, deploy, and contributing instructions in the README, and an open-items checklist of everything that still needs board input.

Snapshot

Track
IEEE SPS @ UF · chapter website · web engineering
Status
Live and maintained; last update 2026-08-21. I serve as chapter President for the 2026–2027 term.
Focus
React + TypeScriptContent as dataResearch status pageGitHub Pages deploy

Stack

  • React
  • TypeScript
  • Vite
  • three.js
  • GitHub Actions
  • GitHub Pages

Collaborators

  • Chapter members built the original scaffold and the original three.js front-page model (December 2025 – April 2026).

Glossary

SPA
Single-page application: a site that loads one HTML page and renders each route in the browser with JavaScript.
Typed data module
A TypeScript file that exports site content (events, projects, board members) as values checked against a declared interface.
GitHub Pages
GitHub's static-site hosting; here it serves the built Vite bundle under a custom domain.