Skip to content

Releases: mldangelo/personal-site

v4.1.0 (2026-01-03)

03 Jan 11:08
v4.1.0
e350ef9

Choose a tag to compare

Features

  • writing: add writing page with RSS feed (#776)
  • blog: add local markdown blog posts (#779)
  • footer: add view source link (#780)
  • design: 2026 design refresh with modern branding & improved UX (#773)
  • styles: migrate from SCSS to Tailwind CSS v4 (#772)

Bug Fixes

  • email: resolve state transition bug in EmailLink animation (#783)
  • hero: update hero section and fix link styling (#781)

Chores

  • deps: update dev dependencies - Vitest v4, jsdom v27, Tailwind v4.1 (#782)
  • test: migrate from Jest to Vitest with expanded test coverage (#778)
  • config: modernize root config files and documentation (#770)
  • cleanup: remove dead code and update LOC stat (#771)
  • license: update copyright year range (#775)

Documentation

  • update documentation for Tailwind CSS migration (#777)

Style

  • remove blue outline from portrait photos (#774)

Full Changelog: v4.0.0...v4.1.0

v4.0.0 - Next.js App Router + React 19

02 Jan 21:45
f580fb0

Choose a tag to compare

Overview

This release marks the complete transformation of the personal-site template from an Express/Webpack application to a modern Next.js Jamstack site. This is a documentation release for the continuous deployment model—the live site always reflects the latest main branch.

411 commits since v1.5.0, with contributions from Ian Webster, Michael D'Angelo, Nick Spaargaren, Noah Trueblood, Ray Liu, Will, and Yang Zhou.


Architecture Evolution

Component v1.5.0 (2018) v4.0.0 (2026)
Runtime Express 4.x server Static export (no server)
Framework React 16 + Webpack 4 Next.js 16 + React 19
Language JavaScript TypeScript 5.9 (strict)
Routing react-router Next.js App Router
Linting ESLint Biome
Testing Jest 30 + React Testing Library
Deployment Manual GitHub Actions → GitHub Pages
Node 8.x 20+

Highlights

🏗️ Framework Migrations

  • v2.0 — Adopted React Hooks API
  • v3.0 (Dec 2020) — Removed Express backend, migrated to Create React App
  • v4.0 (Jul 2025) — Migrated to Next.js App Router with TypeScript

⚡ Performance

  • Static export for instant page loads
  • Next.js automatic font optimization
  • Turbopack for fast development builds
  • Removed 944KB react-burger-menu dependency → native 2KB slide menu

🛠️ Developer Experience

  • TypeScript strict mode throughout
  • Biome for fast, unified linting and formatting
  • Jest + React Testing Library for component tests
  • Comprehensive documentation in /docs

♿ Accessibility

  • Native slide menu with focus trapping and keyboard navigation
  • ARIA attributes on interactive elements
  • prefers-reduced-motion support
  • Semantic HTML structure

For Forkers

If you're forking this project for your own personal site:

  1. See the Adapting Guide for step-by-step instructions
  2. All personal data is in /src/data/ — easy to swap out
  3. Deployment is automatic via GitHub Pages on push to main
  4. Node 20+ required

What's Next

This project follows continuous deployment. Future releases will only be created for major architectural changes. Day-to-day improvements deploy automatically to the live site.

V1.5.0 2018-03-15

15 Mar 05:07
3999bf3

Choose a tag to compare

Improved:

  • Updated dependencies to latest versions, including webpack 4
  • Removed variable injection in favor of cookies
  • updated about me section

Fixed:

  • various typos

V1.4.0 2017-04-03

03 Apr 12:57

Choose a tag to compare

Added:

  • Admin dashboard and accompanying middleware.

Improved:

  • Route handling for redirects after login. Now using cookies.
  • Refactored non-standard routes into separate components.

Fixed:

  • Added a delay in mocha tests to prevent occasional race condition failures.

V1.3.0 2017-03-28

28 Mar 22:04

Choose a tag to compare

Added:

  • Passport.js for user management with Google Oauth
  • Hide /resume behind authentication system

Improved:

  • Upgraded to react-router v4
  • Refactored directory tree, most server related files are now in a /server folder.

Fixed:

  • display: inline error on /resume that caused the page to not be fully responsive
  • no longer serving entire repository directory. Now only /dist and /public are served.

V1.2.0 2017-03-24

25 Mar 06:35

Choose a tag to compare

Added:

  • Tests with mocha and nightmare.js

Improved:

  • Updated resume text.

Fixed:

  • An error that caused Google Analytics to stop logging hits.

V1.1.1 2017-02-20

21 Feb 05:59

Choose a tag to compare

Fixed:

  • Breaking error on /stats caused by safari not supporting Object.values() and polyfill not being included.

V1.1.0 2017-02-19

19 Feb 15:28

Choose a tag to compare

Added:

  • A /music page that scrapes top played artists from last.fm.
  • A full page layout that hides the left nav.
  • A custom link renderer to react-markdown to navigate to other pages without performing a full refresh.
  • more babel plugins to minimize react file size and decrease loading time.

Improved:

  • Webpack config files rewritten in ES2015.
  • Refactored API. Each route is now in its own file.
  • Refactored SCSS file paths.
  • Google Analytics now only logs hits when in production mode.

Fixed:

  • Markdown was being rendered twice. Once by markdown-loader with webpack and once by react-markdown.
  • Now calling clearInterval on timers when components are unmounted. This previously caused a set state error.

Known Issues:

  • Artist tiles on page can be poorly formatted when artist names are too long.

V1.0.1 2017-02-15

16 Feb 05:33

Choose a tag to compare

Improvements:

  • react-helmet to set document.title
  • minifies html via html-minify-loader to save about 400kb (or 40 bytes after gzip compression)
  • suffers ~25 seconds less downtime during deployments.

V1.0.0 2017-02-13

14 Feb 07:57

Choose a tag to compare

First tracked release: A changelog will be kept for future releases.

current pages include:

  • index
  • about
  • resume
  • projects
  • stats
  • contact

Known issues:

  • resume is not well styled for mobile.
  • some project links are currently down.
  • some data fields need to be updated manually for /stats.
  • scss is not linted.
  • nginx gzip compression makes some files larger.