Skip to content
View enonymous1's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report enonymous1

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
enonymous1/README.md

Justin Lyons

Hi there, I'm Justin 👋

Typing SVG

Profile Views

I build automation and full-stack tools for real operations, and I ship them tested, documented, and CI-green — not as demos.

IT Manager with an AS & BS in Computer Science (Full Sail). I blend hands-on engineering with leadership: pricing and vendor data, message and photo archives, video and market-data pipelines, Android apps, and the homelab they all run on.

Portfolio LinkedIn


🚀 About Me

  • 💼 IT Manager passionate about technology, infrastructure, and people — and about removing the manual work in between.
  • 🎓 AS & BS in Computer Science, with weight in Mobile Application Development.
  • 🛠️ Builds automation and full-stack tools for real operations: pricing and vendor data, message and photo archives, video and market-data pipelines.
  • 🧪 Ships tested, documented tools with CI. The numbers in Featured Projects below are from the repos themselves, not marketing copy.
  • 🏠 Runs a homelab stack (Unraid, Docker) for media, backups, and automation, plus functional 3D printing on a Bambu Lab P1S.
  • 📍 Fredericksburg / Spotsylvania, Virginia. See the work live at justinlyons.dev.

🛠️ Skills & Tools

Languages

My Skills

Frameworks, Data & Platforms

Infrastructure & Homelab

Leadership, in one line: Agile delivery, team building, project management, and mentorship — the work above is what that looks like in practice.


🌟 Featured Projects

sms-toolkit chat-style viewer voxel-portfolio voxel world spawn area

Project What it does Proof
repo-sync Dozens of repos on GitHub, dozens of folders on disk — tells you which is which, with metadata reports and Markdown export. Python, GitHub API · 132 tests
sms-toolkit Your backup app copies everything, every day. This keeps only what's new — deduplicated SMS/MMS archives in a chat-style viewer. 1,146,266 items processed, 99.78% duplicates dropped · 184/184 tests
gas-auditor Google hides some of your scripts from Drive. This finds them anyway — inventory and audit for Google Apps Script projects. Python, Flask, Google APIs · CLI + dashboard + Apps Script app
google_maps_poi Drop a marker, add a photo and category, search, edit, get directions. A POI is a real database row, not EXIF hidden in a JPEG. Kotlin, Compose, Room, Maps SDK
video-optimizer-suite HEVC video-library optimizer: scan, convert, verify, then replace — only if verified. DVD and camcorder ingest included. Python, ffmpeg/x265, SQLite, Flask dashboard
voxel-portfolio A portfolio you walk through: a voxel world in the browser, with real projects to open. TypeScript, Svelte 5, Three.js

More, in the same spirit: photo-stitcher (FastFoto scan wizard, with a real demo GIF in the repo), gsa-vendor-toolkit (GSA vendor price-list pipeline), and kalshi-recorder (Kalshi order-book recorder to Parquet). Full list on justinlyons.dev.


📈 This month in code

As of Nov 03, 2026: 85 public repos counted (2 forks excluded) · 9,630,117 bytes of code across 17 languages. Shares below are share of code by bytes — not share of repos.

▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃▂█▄▅▆▇▆▆▁▁
Oct 05 - Nov 03, 2026 · 246 public events · busiest day Oct 26 (46)

Top languages

Python      ██████████           51.4%  4,952,614 bytes · 44 repos
JavaScript  ██████               27.5%  2,649,528 bytes · 22 repos
Kotlin      █                     5.8%  554,218 bytes · 14 repos
HTML        █                     5.6%  535,872 bytes · 30 repos
PowerShell  █                     2.4%  230,632 bytes · 4 repos
CSS         █                     1.7%  163,618 bytes · 21 repos
Swift       █                     1.6%  157,555 bytes · 5 repos
TypeScript  █                     1.3%  128,206 bytes · 3 repos
C#          █                     1.3%  124,239 bytes · 3 repos
C++         █                     0.5%  51,111 bytes · 2 repos
Other       █                     0.9%  82,524 bytes · 11 repos

Stats are refreshed by automation (see “About this repository” below). The Oct 29, 2026 clone audit (code files only, 5,475,378 bytes / 150,017 lines) cross-checked exact for 3 of 5 sampled repos, within 9% for jpl-dev (generated CSS) and 2% for voxel-portfolio; method and the Oct 31 live-API note are in docs/REVIEW.md.


⚙️ Behind the Scenes: Homelab & Maker Stack

Beyond code, I maintain a home server environment running Unraid and Docker for media, backups, and automation. I'm also heavily involved in functional 3D printing using a Bambu Lab P1S to design parametric models and custom organizers — see openscad-toolkit for the calibration prints and the sliding-lid box that actually fits.


📡 Recent Activity


📫 Connect With Me

LinkedIn Portfolio



🛠️ About this repository

This section is for maintainers of the repo. Everything above it is the profile page itself; everything here is how that page is built and kept up to date.

Description

This is a GitHub special repository: a repo named enonymous1 whose README.md on main renders as the profile page at https://github.com/enonymous1. The README is the product.

Separation of concerns, stated plainly because getting it wrong caused real bugs: profileforge is the updater, this repo houses the content. profileforge (separate repo, enonymous1/profileforge) runs its Refresh workflow daily at 04:17 UTC, syncs both generated sections — Recent Activity and “This month in code” — into their <!--START_SECTION:…--> markers, and commits as github-actions[bot] with [skip ci]. This repo deliberately contains no updater script and no workflow: an earlier in-repo activity updater ran on a different schedule with a different output format (“Pushed 0 commits” vs profileforge's “Pushed to”), and the two writers kept overwriting each other. It was deleted, not fixed, for exactly that reason. Do not re-add an updater here; fix the updater in profileforge instead.

The animated header at the top, header.gif, is a content asset, so its generator does live here: see scripts/build_header.py. The stats and activity sections are profileforge-owned — do not hand-edit inside their markers, or the next refresh run will overwrite your edit.

Prerequisites

  • A GitHub account, and git on your machine, for cloning and pushing.
  • Python 3.10 or newer, only if you want to regenerate the header GIF locally. The header generator uses the standard library plus Pillow. There is no other code in this repo to install or run.
  • No token is required to read this repo. Updating the generated sections is profileforge's job and uses its own PROFILE_PAT secret in the profileforge repo, not anything in this repo.

Installation

git clone https://github.com/enonymous1/enonymous1.git
cd enonymous1

That is the whole install. There is no build step, no package, and no server. If you only want to edit the profile text, edit README.md directly; if you want to change what the automations write, change profileforge, not this repo.

Local Development

Edit profile text in README.md and preview it in a Markdown viewer or on a branch. Regenerate the animated header after any change to its design:

python scripts/build_header.py

That writes header.gif in the repo root. Commit the GIF, not just the script: GitHub renders the committed file, and the script alone does not reproduce it on the profile page.

To preview an updater change, run profileforge locally against a copy (see the profileforge README for its exact flags — the --dry-run previews exist for exactly this), never by adding a workflow to this repo. To check what the refresh last did, look at the profileforge repo's Actions runs and at the chore: refresh profile data [skip ci] commits here, which land shortly after 04:17 UTC when the daily run succeeds.

Deployment

Deployment is a push to main. There is no separate hosting step: GitHub renders the profile from main within minutes of the push.

git add README.md header.gif
git commit -m "docs: describe the change"
git push

If the push is rejected as non-fast-forward, the refresh moved first (a daily profileforge commit). Do not force-push: git fetch origin, then git pull --rebase origin main and resolve in favour of the refresh's newer generated lines, or rebuild your change on top of the fresh remote README.

How this profile stays up to date

Verify after pushing: open https://github.com/enonymous1 and confirm the header animates, the stats section shows the latest snapshot, and the activity lines look sane. Generated sections refresh on profileforge's daily schedule, not on push — if activity looks stale, check profileforge's Actions or dispatch its Refresh workflow there. Rollback is a normal revert: git revert <commit> and push again — nothing here is destructive, because every generated section can be regenerated by the next refresh run.

"Code is like humor. When you have to explain it, it's bad."
— Cory House

Pinned Loading

  1. pdf-toolkit pdf-toolkit Public

    Inspect, compress, split, dissect, and convert PDFs from one Python CLI: metadata and TOC inspection, structural, pypdf, and Ghostscript compression, chapter splitting, form-page reconstruction to …

    Python

  2. voxel-portfolio voxel-portfolio Public

    A portfolio you walk through: a voxel world in the browser. Spawn in the atrium, explore the library and gallery, and open real projects — Svelte 5, Three.js, BVH collision, worker-meshed chunks, f…

    TypeScript

  3. workspace-monitor workspace-monitor Public

    Workspace dashboard for small teams: geolocation attendance, schedule calendar, mileage log with bulk upload, directory, and distance calculator. Flask + Jinja2 + SQLite, session auth with role-bas…

    Python

  4. gmail-forensic-toolkit gmail-forensic-toolkit Public

    Archive Gmail locally as forensic Markdown, organise with labels, and export the label inventory and Google Calendar events, from one Python CLI.

    Python