Personal portfolio site for Brandon Temple, focused on workflow and data systems: C#/.NET desktop apps, browser-based reporting, Python/SQL automation, API integrations, Excel exports, and AI-assisted tools that turn manual staff workflows into maintainable internal software.
Live site: brandontemple.com
- Professional experience, education, and contact information
- Workflow software and data-quality case studies for
Query,MetaTable, andAdy Resolver, with supporting project cards forMac Window Arranger,HTMLConverter, andconnect4-ai - Searchable resume PDF generated from the shared resume page with document metadata and extraction checks
- Shared portfolio and resume content managed from
assets/js/profile-data.jsand pre-rendered into initial HTML for crawlers - Responsive single-page layout with a dark theme and art-directed project imagery
index.html- main portfolio siteassets/css/site.css- site stylingassets/js/site.js- navigation and UI behaviorassets/js/profile-data.js- shared portfolio and resume content sourceassets/js/profile-render.js- renders shared content into the site and resumescripts/prerender-profile-content.mjs- writes shared content into the initial HTML response for search and AI crawlersscripts/validate-crawlability.mjs- checks canonical metadata, generated HTML, JSON-LD, image descriptions, sitemap files, and PDF extractionscripts/build-responsive-images.sh- generates portrait, standard, wide, and square image variantsscripts/set-pdf-metadata.mjs- applies searchable identity and subject metadata to the generated resume PDFresume/index.html- printable resume viewresume/brandon-temple-resume.pdf- canonical PDF downloadresume/resume.css- resume stylingresume/resume-print.css- print-specific resume styles
From the repository root:
python3 -m http.server 8000Then open http://127.0.0.1:8000.
Regenerate the illustrated portrait crops and project screenshot variants after replacing a source image:
./scripts/build-responsive-images.shThe script preserves each source image's proportions, removes output metadata, and composes complete project interfaces into 4:5, 4:3, 16:10, and 1:1 frames.
After changing assets/js/profile-data.js or assets/js/profile-render.js, refresh the committed HTML from the same source:
./scripts/prerender-profile-content.mjsVerify that the generated HTML is current without modifying files:
./scripts/prerender-profile-content.mjs --checkRun the complete local crawlability check:
./scripts/validate-crawlability.mjsRegenerate the canonical resume PDF from the shared resume page:
./scripts/build-resume-pdf.shThe script uses Chrome headless without browser headers/footers, applies title, author, subject, and keyword metadata, and verifies that the PDF remains valid and text-extractable.