Developer-facing repo for a preserved-and-modernized snapshot of a classic XHTML-era personal/resume website (circa 2013).
It’s intentionally “no framework, no build step”: mostly static HTML/CSS/JS with a small PHP handler for the contact form.
Primary maintenance goals:
- Keep markup and shared navigation consistent across many static pages
- Preserve the original Flash-era header by rendering the SWF via Ruffle (WASM)
- Keep the contact form working via authenticated SMTP (not PHP
mail())
Canonical GitHub repository:
https://github.com/FrankJamison/FrankJamison.com-v2013
Clone:
git clone https://github.com/FrankJamison/FrankJamison.com-v2013.git- 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())
Production-style preview:
https://frankjamison2013.fcjamison.com/
- Serve this folder from a local web server (Apache/Nginx/IIS/etc.).
- Ensure the server’s document root is the repo root (the folder containing
index.htm). - Browse to
http://frankjamisoncomv2013.localhost/(or your chosen local hostname).
VS Code:
- Run the
Open in Browsertask to open the local URL in Chrome.
Notes:
- Opening pages directly from disk (
file:///...) can break script/resource loading. - Some pages use absolute-root links (like
/resources/...), so hosting under a subfolder usually requires rewrites.
- 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://frankjamisoncomv2013.localhost/
To use that URL, configure your local web server with:
- Host name:
frankjamisoncomv2013.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 frankjamisoncomv2013.localhost
<VirtualHost *:80>
ServerName frankjamisoncomv2013.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://frankjamisoncomv2013.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/.
If you use the included VS Code task (Open in Browser), it may automatically ensure your Windows hosts file and Apache VirtualHost entries include frankjamisoncomv2013.localhost (this can require admin privileges for the hosts-file step).
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.