Skip to content

2013 personal website built with vanilla HTML, CSS, JavaScript, and PHP. Demonstrates pre-framework static site architecture, shared UI via JavaScript includes, SMTP contact handling, and legacy Flash preservation using Ruffle.

Notifications You must be signed in to change notification settings

FrankJamison/2013FrankJamison

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

2013 Frank Jamison — Legacy Personal Site (Portfolio Project)

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)

What it does

  • 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())

How it works (implementation overview)

Static pages + shared UI includes

  • Pages are .htm files.
  • 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 navigation
  • resources/javascripts/resumeMenu.js — resume-side navigation
  • resources/javascripts/header.js — loads the Flash header via Ruffle
  • resources/javascripts/footer.js — footer markup

Flash-era header, preserved via Ruffle

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.

Contact form: PHP + SMTP

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.

Running locally

Requirements

  • 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.

Recommended local URL

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

XAMPP / Apache VirtualHost (example)

<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>

Troubleshooting

  • If browsing http://2013frankjamison.localhost/ redirects to /dashboard/, you’re hitting XAMPP’s default site (not this repo). Enable Apache VirtualHosts and confirm the DocumentRoot points at this folder.
  • If the header animation doesn’t render, hard refresh (Ctrl+F5) and check the browser console for missing files under resources/ruffle/.

Repo layout (quick tour)

  • index.htm — home page entry point
  • resume/ — resume section pages
  • portfolio/, gallery/, music/, poetry/ — content sections
  • contact/ — contact form + PHP mail handler
  • resources/ — shared CSS/JS/images + the Ruffle runtime and SWF assets

Notes and constraints (useful for real-world maintenance)

Absolute-root links

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.

Character encoding

Many pages declare charset=iso-8859-1. If you edit content, keep encoding consistent across the site to avoid mojibake in older text.

SMTP configuration (deployment)

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 (default smtp.office365.com)
  • FJ_SMTP_PORT (default 587)
  • FJ_SMTP_FROM (default = FJ_SMTP_USER)
  • FJ_MAIL_TO (default frank@frankjamison.com)

Config file method (common on shared hosting):

  1. Copy contact/smtp_settings.example.php to contact/smtp_settings.php
  2. Fill in real values
  3. contact/.htaccess blocks direct web access to smtp_settings.php

If sending fails, the handler can write to contact/sendmail_failures.log (ignored by Git) to help troubleshoot server-side issues.

Updating Ruffle (optional)

Ruffle is vendored in resources/ruffle/. If you need newer Flash compatibility:

  1. Download the official web self-hosted build from https://ruffle.rs/ (or the GitHub releases page)
  2. Replace the contents of resources/ruffle/ with the new files
  3. Hard refresh (Ctrl+F5) and verify there are no 404s in DevTools

Security and repo hygiene

  • Credentials are intentionally not committed: contact/smtp_settings.php is ignored.
  • Large local “downloads” folders are ignored to keep the repo GitHub-friendly.

About

2013 personal website built with vanilla HTML, CSS, JavaScript, and PHP. Demonstrates pre-framework static site architecture, shared UI via JavaScript includes, SMTP contact handling, and legacy Flash preservation using Ruffle.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages