This repository is a preserved-and-modernized snapshot of a classic XHTML-era personal/resume website (circa 2013). It’s intentionally “no framework, no build step” — just static HTML/CSS/JS plus a small PHP email handler for the contact form.
For employers/clients, this project is here to demonstrate:
- Maintaining and shipping improvements on a legacy codebase without rewriting everything
- Practical web fundamentals (information architecture, navigation consistency, asset organization)
- Compatibility work: keeping a Flash-era header working in modern browsers via Ruffle (WASM)
- Basic server-side integration for form handling (PHP + SMTP)
- Serves a multi-section personal site (home, resume pages, portfolio/gallery sections, writing archive)
- Uses shared JavaScript “includes” to keep navigation/header/footer consistent across many pages
- Renders a legacy Flash banner (
.swf) using a self-hosted Ruffle runtime so it still displays today - Provides a working contact form that submits via authenticated SMTP (rather than PHP
mail())
- Pages are
.htmfiles. - Repeated UI (header/menu/footer) is generated through classic JavaScript includes (primarily via
document.write). - Shared assets live under
resources/.
Key include scripts:
resources/javascripts/menu.js— primary navigationresources/javascripts/resumeMenu.js— resume-side navigationresources/javascripts/header.js— loads the Flash header via Ruffleresources/javascripts/footer.js— footer markup
The banner animation is still the original SWF:
resources/sfw/header.swf
Modern browsers no longer support the Flash plugin, so pages load Ruffle (a WebAssembly Flash emulator) from:
resources/ruffle/
resources/javascripts/header.js initializes Ruffle and instructs it to render the SWF. No Adobe Flash Player is required.
The contact form posts to:
contact/sendmail.php
Email is sent via SMTP submission (STARTTLS on port 587 by default), which is generally more reliable than PHP mail() on shared hosting.
- A web server (Apache/Nginx/IIS/etc.)
- A browser (Chrome/Edge recommended)
- For the contact form: PHP support is required
Avoid opening pages via file:///... — modern browser security restrictions can break script/resource loading.
This workspace includes a VS Code task that opens:
http://2013frankjamison.localhost/
To use that URL, configure your local web server with:
- Host name:
2013frankjamison.localhost - Document root: this repo folder (the one containing
index.htm)
Most systems treat *.localhost as loopback automatically. If it does not resolve on your machine, add to:
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 2013frankjamison.localhost
<VirtualHost *:80>
ServerName 2013frankjamison.localhost
DocumentRoot "D:/path/to/2013FrankJamison"
# This repo uses index.htm (not index.html)
DirectoryIndex index.htm index.html index.php
<Directory "D:/path/to/2013FrankJamison">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>- If browsing
http://2013frankjamison.localhost/redirects to/dashboard/, you’re hitting XAMPP’s default site (not this repo). Enable Apache VirtualHosts and confirm theDocumentRootpoints at this folder. - If the header animation doesn’t render, hard refresh (
Ctrl+F5) and check the browser console for missing files underresources/ruffle/.
index.htm— home page entry pointresume/— resume section pagesportfolio/,gallery/,music/,poetry/— content sectionscontact/— contact form + PHP mail handlerresources/— shared CSS/JS/images + the Ruffle runtime and SWF assets
Many pages use absolute-root URLs like /resources/... and /resume/....
That means:
- The site should be served at the web server’s document root.
- If you host it under a subfolder (for example
https://example.com/2013/), many links will break unless paths are rewritten or a base-path strategy is applied.
Many pages declare charset=iso-8859-1. If you edit content, keep encoding consistent across the site to avoid mojibake in older text.
SMTP can be configured either with environment variables (preferred) or with a local config file.
Environment variables:
FJ_SMTP_USER— mailbox (example:contact@yourdomain.com)FJ_SMTP_PASS— mailbox password (SMTP AUTH must be enabled)
Optional overrides:
FJ_SMTP_HOST(defaultsmtp.office365.com)FJ_SMTP_PORT(default587)FJ_SMTP_FROM(default =FJ_SMTP_USER)FJ_MAIL_TO(defaultfrank@frankjamison.com)
Config file method (common on shared hosting):
- Copy
contact/smtp_settings.example.phptocontact/smtp_settings.php - Fill in real values
contact/.htaccessblocks direct web access tosmtp_settings.php
If sending fails, the handler can write to contact/sendmail_failures.log (ignored by Git) to help troubleshoot server-side issues.
Ruffle is vendored in resources/ruffle/. If you need newer Flash compatibility:
- Download the official web self-hosted build from https://ruffle.rs/ (or the GitHub releases page)
- Replace the contents of
resources/ruffle/with the new files - Hard refresh (
Ctrl+F5) and verify there are no 404s in DevTools
- Credentials are intentionally not committed:
contact/smtp_settings.phpis ignored. - Large local “downloads” folders are ignored to keep the repo GitHub-friendly.