From 0ed347f9eff8147117173944b3662edace8c15bc Mon Sep 17 00:00:00 2001 From: Michael Neeley Date: Thu, 15 Oct 2026 15:13:43 -0400 Subject: [PATCH] feat: add a minimal open-source portfolio --- .github/workflows/check.yml | 25 +++++++ README.md | 138 +++++++++--------------------------- _config.yml | 10 +-- assets/animal-mania.webp | Bin 0 -> 56596 bytes assets/favicon.svg | 5 ++ index.html | 120 +++++++++++++++++++++++++++---- portfolio.css | 106 +++++++++++++++++++++++++++ 7 files changed, 279 insertions(+), 125 deletions(-) create mode 100644 .github/workflows/check.yml create mode 100644 assets/animal-mania.webp create mode 100644 assets/favicon.svg create mode 100644 portfolio.css diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000000000..1ab391e9f0bfb --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,25 @@ +name: Check Pages build + +on: + pull_request: + push: + branches: [master] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v4 + - name: Build with the GitHub Pages toolchain + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site + - uses: actions/upload-pages-artifact@v3 + with: + path: ./_site + retention-days: 1 diff --git a/README.md b/README.md index 45c202063a374..196b0a18158a1 100644 --- a/README.md +++ b/README.md @@ -1,120 +1,46 @@ -> March, 2016: If you're on an old version of Jekyll Now and run into a) build warnings or b) syntax highlighting issues caused by [Jekyll 3 and GitHub Pages updates](https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0), just :sparkles:[update your _config.yml](https://github.com/barryclark/jekyll-now/pull/445/files):sparkles: and you'll be set! +# Michael Neeley’s portfolio -# Jekyll Now +https://redreceipt.github.io/ -**Jekyll** is a static site generator that's perfect for GitHub hosted blogs ([Jekyll Repository](https://github.com/jekyll/jekyll)) +A handwritten HTML + CSS portfolio. No JavaScript, framework, package manager, +web fonts, tracking, or API calls. The homepage is served as written. -**Jekyll Now** makes it easier to create your Jekyll blog, by eliminating a lot of the up front setup. +## Preview -- You don't need to touch the command line -- You don't need to install/configure ruby, rvm/rbenv, ruby gems :relaxed: -- You don't need to install runtime dependencies like markdown processors, Pygments, etc -- If you're on Windows, this will make setting up Jekyll a lot easier -- It's easy to try out, you can just delete your forked repository if you don't like it +From this directory: -In a few minutes you'll be set up with a minimal, responsive blog like the one below giving you more time to spend on writing epic blog posts! +```sh +python3 -m http.server 8000 --bind 127.0.0.1 +``` -![Jekyll Now Theme Screenshot](/images/jekyll-now-theme-screenshot.jpg "Jekyll Now Theme Screenshot") +Open http://127.0.0.1:8000/. No install or build step is needed for the portfolio. -## Quick Start +## Update the gallery -### Step 1) Fork Jekyll Now to your User Repository +Edit the project cards in `index.html` and styles in `portfolio.css`. +Keep the selection small: original public projects with recent development, +useful documentation, and something meaningful to inspect or try. Do not +include private repositories or present upstream forks as original work. -Fork this repo, then rename the repository to yourgithubusername.github.io. +The current selection is Lamplight and Animal Mania, both active in October 2026. +Links and project descriptions are deliberately curated, not fetched in the +browser. Revisit the selection when projects change; there is no automatic sync. -Your Jekyll blog will often be viewable immediately at (if it's not, you can often force it to build by completing step 2) +`assets/animal-mania.webp` is a real gameplay capture from animalmania.app, +resized to 800px wide and encoded as WebP. The Lamplight preview is an HTML +workflow diagram, not a screenshot or claimed execution output. Keep images +local, specify dimensions, and keep the total homepage payload below 100 KB. -![Step 1](/images/step1.gif "Step 1") +## Publishing and older content -### Step 2) Customize and view your site +GitHub Pages already publishes `master` at the repository root. Merging the +portfolio PR will update the homepage; pushing a feature branch does not +publish it. No Pages settings changes are needed. -Enter your site name, description, avatar and many other options by editing the _config.yml file. You can easily turn on Google Analytics tracking, Disqus commenting and social icons here too. +The original Jekyll configuration, layouts, posts, and conference pages remain +to preserve older URLs. The malformed collection default in `_config.yml` +has been fixed so Pages can build again. Jekyll processes the legacy Markdown +and Sass only; the portfolio has no front matter, Liquid, or generated content. +The Python preview shows the new portfolio, not the rendered legacy pages. -Making a change to _config.yml (or any file in your repository) will force GitHub Pages to rebuild your site with jekyll. Your rebuilt site will be viewable a few seconds later at - if not, give it ten minutes as GitHub suggests and it'll appear soon - -> There are 3 different ways that you can make changes to your blog's files: - -> 1. Edit files within your new username.github.io repository in the browser at GitHub.com (shown below). -> 2. Use a third party GitHub content editor, like [Prose by Development Seed](http://prose.io). It's optimized for use with Jekyll making markdown editing, writing drafts, and uploading images really easy. -> 3. Clone down your repository and make updates locally, then push them to your GitHub repository. - -![_config.yml](/images/config.png "_config.yml") - -### Step 3) Publish your first blog post - -Edit `/_posts/2014-3-3-Hello-World.md` to publish your first blog post. This [Markdown Cheatsheet](http://www.jekyllnow.com/Markdown-Style-Guide/) might come in handy. - -![First Post](/images/first-post.png "First Post") - -> You can add additional posts in the browser on GitHub.com too! Just hit the + icon in `/_posts/` to create new content. Just make sure to include the [front-matter](http://jekyllrb.com/docs/frontmatter/) block at the top of each new blog post and make sure the post's filename is in this format: year-month-day-title.md - -## Local Development - -1. Install Jekyll and plug-ins in one fell swoop. `gem install github-pages` This mirrors the plug-ins used by GitHub Pages on your local machine including Jekyll, Sass, etc. -2. Clone down your fork `git clone https://github.com/yourusername/yourusername.github.io.git` -3. Serve the site and watch for markup/sass changes `jekyll serve` -4. View your website at http://127.0.0.1:4000/ -5. Commit any changes and push everything to the master branch of your GitHub user repository. GitHub Pages will then rebuild and serve your website. - -## Moar! - -I've created a more detailed walkthrough, [**Build A Blog With Jekyll And GitHub Pages**](http://www.smashingmagazine.com/2014/08/01/build-blog-jekyll-github-pages/) over at the Smashing Magazine website. Check it out if you'd like a more detailed walkthrough and some background on Jekyll. :metal: - -It covers: - -- A more detailed walkthrough of setting up your Jekyll blog -- Common issues that you might encounter while using Jekyll -- Importing from Wordpress, using your own domain name, and blogging in your favorite editor -- Theming in Jekyll, with Liquid templating examples -- A quick look at Jekyll 2.0’s new features, including Sass/Coffeescript support and Collections - -## Jekyll Now Features - -✓ Command-line free _fork-first workflow_, using GitHub.com to create, customize and post to your blog -✓ Fully responsive and mobile optimized base theme (**[Theme Demo](http://jekyllnow.com)**) -✓ Sass/Coffeescript support using Jekyll 2.0 -✓ Free hosting on your GitHub Pages user site -✓ Markdown blogging -✓ Syntax highlighting -✓ Disqus commenting -✓ Google Analytics integration -✓ SVG social icons for your footer -✓ 3 http requests, including your avatar - -✘ No installing dependencies -✘ No need to set up local development -✘ No configuring plugins -✘ No need to spend time on theming -✘ More time to code other things ... wait ✓! - -## Questions? - -[Open an Issue](https://github.com/barryclark/jekyll-now/issues/new) and let's chat! - -## Other forkable themes - -You can use the [Quick Start](https://github.com/barryclark/jekyll-now#quick-start) workflow with other themes that are set up to be forked too! Here are some of my favorites: - -- [Hyde](https://github.com/poole/hyde) by MDO -- [Lanyon](https://github.com/poole/lanyon) by MDO -- [mojombo.github.io](https://github.com/mojombo/mojombo.github.io) by Tom Preston-Werner -- [Left](https://github.com/holman/left) by Zach Holman -- [Minimal Mistakes](https://github.com/mmistakes/minimal-mistakes) by Michael Rose -- [Skinny Bones](https://github.com/mmistakes/skinny-bones-jekyll) by Michael Rose - -## Credits - -- [Jekyll](https://github.com/jekyll/jekyll) - Thanks to its creators, contributors and maintainers. -- [SVG icons](https://github.com/neilorangepeel/Free-Social-Icons) - Thanks, Neil Orange Peel. They're beautiful. -- [Solarized Light Pygments](https://gist.github.com/edwardhotchkiss/2005058) - Thanks, Edward. -- [Joel Glovier](http://joelglovier.com/writing/) - Great Jekyll articles. I used Joel's feed.xml in this repository. -- [David Furnes](https://github.com/dfurnes), [Jon Uy](https://github.com/jonuy), [Luke Patton](https://github.com/lkpttn) - Thanks for the design/code reviews. -- [Bart Kiers](https://github.com/bkiers), [Florian Simon](https://github.com/vermluh), [Henry Stanley](https://github.com/henryaj), [Hun Jae Lee](https://github.com/hunjaelee), [Javier Cejudo](https://github.com/javiercejudo), [Peter Etelej](https://github.com/etelej), [Ben Abbott](https://github.com/jaminscript), [Ray Nicholus](https://github.com/rnicholus), [Erin Grand](https://github.com/eringrand), [Léo Colombaro](https://github.com/LeoColomb), [Dean Attali](https://github.com/daattali), [Clayton Errington](https://github.com/cjerrington), [Colton Fitzgerald](https://github.com/coltonfitzgerald), [Trace Mayer](https://github.com/sunnankar) - Thanks for your [fantastic contributions](https://github.com/barryclark/jekyll-now/commits/master) to the project! - -## Contributing - -Issues and Pull Requests are greatly appreciated. If you've never contributed to an open source project before I'm more than happy to walk you through how to create a pull request. - -You can start by [opening an issue](https://github.com/barryclark/jekyll-now/issues/new) describing the problem that you're looking to resolve and we'll go from there. - -I want to keep Jekyll Now as minimal as possible. Every line of code should be one that's useful to 90% of the people using it. Please bear that in mind when submitting feature requests. If it's not something that most people will use, it probably won't get merged. :guardsman: +The original Jekyll Now license is retained in `LICENSE`. diff --git a/_config.yml b/_config.yml index 51f95379a729e..427608b091b98 100644 --- a/_config.yml +++ b/_config.yml @@ -6,7 +6,7 @@ name: Michael Neeley # Short bio or description (displayed in the header) -description: Web Developer from Somewhere +description: Software engineer · Greenville, SC # URL of your avatar or profile pic (you could use your GitHub profile pic) avatar: https://raw.githubusercontent.com/barryclark/jekyll-now/master/images/jekyll-logo.png @@ -91,7 +91,7 @@ collections: defaults: - scope: - path: "" - type: "connecttech2018" - values: - layout: "post" + path: "" + type: "connecttech2018" + values: + layout: "post" diff --git a/assets/animal-mania.webp b/assets/animal-mania.webp new file mode 100644 index 0000000000000000000000000000000000000000..382a99874a1078761288047b68a381c6cc9280f0 GIT binary patch literal 56596 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 literal 0 HcmV?d00001 diff --git a/assets/favicon.svg b/assets/favicon.svg new file mode 100644 index 0000000000000..da0b53fd399db --- /dev/null +++ b/assets/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/index.html b/index.html index 5e0cb3ee5773d..4bd27162f3727 100644 --- a/index.html +++ b/index.html @@ -1,18 +1,110 @@ ---- -layout: default ---- + + + + + + Michael Neeley — Software Engineer + + + + + + + + + + + + +
+ -
- {% for post in site.posts %} -
+
+
+

Software engineer · Greenville, SC

+

Useful software.
Less ceremony.

+

I’m Michael. I build developer tools, web apps, and the occasional game. Here’s a small collection of what I’m working on in the open.

+ Explore the projects +
-

{{ post.title }}

+
+
+

Selected projects / 02

+

Public code. Active work.

+
+
+
+ +
+

01 / Developer tooling

+

Lamplight

+

Issues in. Pull requests out. A small GitHub + pi runner that turns an issue queue into isolated coding-agent runs.

+

Sequential execution. Draft PRs. Zero runtime npm dependencies.

+
    +
  • JavaScript
  • Node.js
  • GitHub CLI
  • +
+ +
+
-
- {{ post.excerpt }} -
+
+
+ Animal Mania gameplay: a tiger faces a gorilla in a pixel-art jungle arena. +
+
+

02 / Browser game

+

Animal Mania

+

An 8-bit-style tactical animal battler. Play against the CPU, share a screen, or challenge a friend in a private online room.

+

Server-authoritative turns. Redis-backed rooms. Data-driven fighters.

+
    +
  • JavaScript
  • WebSockets
  • Redis
  • +
+ +
+
+
+ More on GitHub +
- Read More -
- {% endfor %} -
\ No newline at end of file +
+
+

Keep in touch

+

Good software starts
with a conversation.

+
+ michael@neeley.dev +
+ + + +
+ + diff --git a/portfolio.css b/portfolio.css new file mode 100644 index 0000000000000..86c9c855951e2 --- /dev/null +++ b/portfolio.css @@ -0,0 +1,106 @@ +:root { + color-scheme: dark; + --bg: #111412; + --surface: #181c19; + --line: #343d35; + --text: #edf0e9; + --muted: #a2aca2; + --accent: #c5e6a0; + --mono: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + background: var(--bg); + color: var(--text); +} + +* { box-sizing: border-box; } +body { margin: 0; line-height: 1.6; } +a { color: inherit; text-underline-offset: 0.25em; } +a:hover { color: var(--accent); } +a:focus-visible { outline: 2px solid var(--accent); outline-offset: 6px; } +::selection { background: var(--accent); color: var(--bg); } +h1, h2, h3, p { margin: 0; } +.shell { max-width: 1136px; margin: auto; padding: 0 40px; } +.site-header, .identity, nav, .section-header, .project-links, .site-footer, .site-footer div { + display: flex; + align-items: center; +} +.site-header { justify-content: space-between; gap: 24px; min-height: 112px; border-bottom: 1px solid var(--line); } +.identity { gap: 14px; font-weight: 600; text-decoration: none; letter-spacing: -0.02em; } +.monogram { color: var(--accent); font: 700 21px var(--mono); } +nav { gap: 28px; } +nav a, .site-footer a { text-decoration: none; } +nav a { font-size: 14px; padding: 10px 0; } +.intro { padding: 88px 0 80px; } +.eyebrow { font: 12px/1.6 var(--mono); color: var(--muted); letter-spacing: 0.04em; } +.intro .eyebrow { display: flex; align-items: center; gap: 10px; } +.marker { width: 7px; height: 7px; background: var(--accent); } +h1 { margin: 24px 0; font-size: clamp(44px, 6.8vw, 80px); font-weight: 600; line-height: 1.05; letter-spacing: -0.055em; } +h1 span { color: var(--accent); } +.intro-copy { max-width: 565px; font-size: 19px; line-height: 1.65; color: var(--muted); } +.text-link { display: inline-flex; align-items: center; gap: 16px; font-size: 14px; font-weight: 500; text-decoration: none; border-bottom: 1px solid var(--line); padding: 10px 0; } +.intro .text-link { margin-top: 23px; } +.text-link span { color: var(--accent); } +.work { scroll-margin-top: 24px; } +.section-header { justify-content: space-between; gap: 16px; border-top: 1px solid var(--line); padding: 26px 0; } +.section-header h2 { font-size: 16px; font-weight: 500; } +.count { margin-left: 9px; color: var(--muted); font: 12px var(--mono); } +.section-header p { font: 12px var(--mono); color: var(--muted); } +.project-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } +.project { display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--line); border-radius: 8px; overflow: hidden; } +.project-preview { aspect-ratio: 1.9; min-height: 240px; overflow: hidden; border-bottom: 1px solid var(--line); } +.terminal { background: #101713; font-family: var(--mono); } +.terminal-bar { display: flex; gap: 24px; align-items: center; padding: 12px 20px; border-bottom: 1px solid #29352b; font-size: 10px; color: var(--muted); } +.terminal-dots { color: #647660; letter-spacing: 3px; } +.terminal-body { padding: 20px 28px; font-size: 12px; } +.command { margin-bottom: 16px; font-size: 14px; } +.command span { color: var(--accent); margin-right: 8px; } +.workflow { list-style: none; padding: 0; margin: 0; line-height: 2; color: #c9d4c9; } +.workflow li span { color: #849682; margin-right: 16px; } +.workflow b { color: var(--accent); font-weight: 400; } +.game-preview { background: #061924; } +.game-preview img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; } +.project-body { display: flex; flex: 1; flex-direction: column; padding: 27px; } +.project h3 { margin: 8px 0 12px; font-size: 28px; font-weight: 500; line-height: 1.2; letter-spacing: -0.035em; } +.project h3 a { display: flex; justify-content: space-between; align-items: center; gap: 16px; text-decoration: none; } +.project h3 span { color: var(--muted); font-size: 22px; } +.project-body > p:not(.eyebrow) { color: var(--muted); font-size: 15px; } +.project-body > .technical-note { margin-top: 15px; } +.tags { display: flex; flex-wrap: wrap; gap: 8px; padding: 0; margin: 22px 0 28px; list-style: none; } +.tags li { border: 1px solid var(--line); border-radius: 4px; padding: 3px 8px; color: #c7d1c5; font: 11px/1.5 var(--mono); } +.project-links { flex-wrap: wrap; gap: 24px; margin-top: auto; } +.project-links a { font-size: 13px; text-decoration: none; padding: 8px 0; } +.project-links span[aria-hidden] { color: var(--accent); margin-left: 5px; } +.all-projects { margin-top: 24px; } +.contact { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 32px; margin-top: 72px; padding: 48px 0; border-top: 1px solid var(--line); } +.contact h2 { margin-top: 12px; font-size: clamp(25px, 3vw, 34px); font-weight: 500; line-height: 1.25; letter-spacing: -0.035em; } +.contact .text-link { color: var(--accent); } +.site-footer { justify-content: space-between; flex-wrap: wrap; gap: 16px; border-top: 1px solid var(--line); padding: 25px 0 32px; color: var(--muted); font: 11px/1.7 var(--mono); } +.site-footer div { flex-wrap: wrap; gap: 24px; } +.site-footer a { padding: 8px 0; } +.skip-link { position: absolute; top: -100px; left: 16px; padding: 12px; background: var(--accent); color: var(--bg); z-index: 1; } +.skip-link:focus { top: 16px; color: var(--bg); } +.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; } + +@media (max-width: 760px) { + .shell { padding: 0 24px; } + .site-header { min-height: 100px; } + .identity { font-size: 14px; gap: 9px; } + nav { gap: 16px; } + nav a { font-size: 12px; } + .intro { padding: 64px 0; } + .intro-copy { font-size: 17px; } + .project-grid { grid-template-columns: 1fr; } + .terminal-body { padding: 24px 28px; } + .contact { margin-top: 48px; } +} + +@media (max-width: 420px) { + .shell { padding: 0 20px; } + .site-header { align-items: flex-start; justify-content: center; flex-direction: column; gap: 4px; padding: 20px 0 12px; } + nav { gap: 24px; } + .intro .eyebrow { font-size: 10px; } + .section-header { align-items: flex-start; flex-direction: column; gap: 4px; } + .project-preview { aspect-ratio: 1.5; } + .terminal-body { padding: 18px 20px; font-size: 11px; } + .project-body { padding: 24px; } +}