Industrial Engineering student · Co-op at Tesla · Film Photography nerd
I study industrial engineering at Kettering, which runs on alternating terms, so I spend three months in class and three months working, back and forth.
Currently I co-op at Tesla in the Bay Area. I'm a PCBA SIE, and I've built two apps for the team. One tracks capacity across all of our PCBA suppliers, and the other is a central hub where anyone can follow a part's whole process, from the first design all the way to end of life. I go on site as well and solve problems daily to help keep lines running.
Experience click to expand
Tesla · Supplier Industrialization Engineer, PCBA · Palo Alto, CA · Jan 2026 to now
Defined and validated end-to-end production with contract manufacturers. Brought average PCB cost down 38% and cycle time down 73% across suppliers. I also built two apps for the team. One tracks capacity across all our PCBA suppliers by mapping EDI demand to line level PCBAs, so we catch utilization problems early. The other is a hub where the team can see a part's whole process flow, from first design to end of life.
Brembo North America · Industrial Engineering Intern · Jackson, MI · Jan to Mar 2025
Moved outsourced production back in house and saved $200K a year doing it. Reworked the end-of-arm tooling so maintenance went from weekly to quarterly. 3D-scanned 75+ pattern plates and built color maps to track wear.
Advanced 3D Printing · PCB Designer · Los Angeles, CA · Jan 2023 to Dec 2024
Designed small plug-and-play boards that became standard in high-speed custom printer builds. Sold over 500 of them and ran tier-3 support.
FRC 1836 · Captain · Los Angeles, CA · Jun 2023 to Jun 2024
Ran the school robotics team. Design instruction, tournament logistics, and keeping everyone pointed the same direction.
Education click to expand
Kettering University · BS, Industrial Engineering · Flint, MI · Oct 2024 to now
Junior, B-Section. Kettering alternates academic and work terms, so the degree runs alongside the co-op rather than after it.
Milken Community School · Los Angeles, CA · Aug 2020 to Jun 2024
Tools click to expand
| Design | Altium, KiCad, Fusion 360, SolidWorks, Onshape |
| Validation | Metrology, 3D scanning, PolyWorks, data analysis |
| Method | Lean, 8D, A3, DFM for PCBA, PCB, and Flex |
| Stack | Jira, Enovia, Git, Excel, LLM tooling |
Photographs click to expand
Shot on film, scanned, posted to @jgreerfilm. These update themselves, see How this repo works below.
Laguna Seca, Car Week 26 |
H A S S E L B L A D |
W O R K S A T U R D A Y |
Jun 23, 2026 |
Marin. 03/26 |
Flint |
How this repo works click to expand
This repo is two things at once: my GitHub profile, and the site itself.
index.html the whole site, no build step
ig/ the photographs
tools/sync_instagram.py pulls the latest posts
.github/workflows/sync-instagram.yml runs it daily
DOMAIN.md how to point a domain here
Hosting. Settings › Pages › Deploy from a branch › main / root.
Getting every photo into the picker. Instagram only shows a logged out visitor the newest dozen posts, so the back catalogue has to come from the export: Instagram › Settings › Accounts Centre › Your information and permissions › Download your information › JSON, all time. Then:
python3 tools/import_export.py ~/Downloads/instagram-jgreerfilm.zip
python3 tools/build_gallery.py # after picking, applies photos.config.jsonThe importer splits carousels, so every slide is selectable on its own, and keeps
full size copies in ig/originals/. These are the files as you uploaded them, which
beats anything the public CDN serves.
Choosing which photos show. Open picker.html (double click it, or visit
the hosted copy). Every post is
laid out as a grid: click to show or hide, switch to Manual order to arrange them,
then copy the JSON it builds into photos.config.json and commit.
Auto keeps new posts flowing in and skips whatever you switched off. Manual order pins exactly the photos you picked, in your order, so nothing new appears until you go back to the picker.
Editing photos.config.json by hand works too:
A post code is the part after /p/ in its URL. Each sync also regenerates FEED.md,
a table of every post with its code, and photos.manifest.js plus ig/thumbs/, which
are what the picker reads.
Keeping the photos current. A scheduled Action reads the Behold feed nightly,
archives anything new at full resolution, merges it into photos.manifest.js, then
applies photos.config.json. Set it up by adding the feed URL as a repository
variable named BEHOLD_FEED_URL (Settings › Secrets and variables ›
Actions › Variables). Without it the workflow exits cleanly and nothing moves.
Run it by hand any time from the Actions tab.
The archive only ever grows. A free Behold feed returns a short recent window, so
posts that scroll out of it stay in the manifest and remain pickable. Carousels are
split into their slides; onePerPost keeps a six slide carousel from swallowing the
page, and switching it off lets individual slides through.









{ "mode": "auto", // newest first, minus "hide", capped at "limit" "limit": 12, "hide": ["DTgZ4mzkqg6"], // drop individual posts "order": [] // mode "manual": exactly these, in this order }