From 42cf5fbeb7f11bd5bf76e333dd34255bc3ce6bd6 Mon Sep 17 00:00:00 2001 From: Ian Keane Date: Thu, 27 Aug 2026 13:39:55 -0400 Subject: [PATCH] Adjust display to show ownership of work-projects by specific job --- generate.scm | 12 ++++++------ resume.html | 2 +- style.css | 21 +++++++++++++++------ 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/generate.scm b/generate.scm index bf2287c..acf7bcd 100644 --- a/generate.scm +++ b/generate.scm @@ -64,11 +64,12 @@ (p (@ (class "title-blurb")) ,(string-join (field tc 'blurb) " ")))) -;; Emit a title card followed by its work-project cards as a flat list of siblings +;; Wrap title card + its project cards in a .job-group container (define (render-title-flat tc) - (append - (list (render-title-card tc)) - (map render-work-project (field tc 'projects)))) + (list + `(div (@ (class "job-group")) + ,(render-title-card tc) + ,@(map render-work-project (field tc 'projects))))) (define (render-education edu) `(div (@ (class "education-card") @@ -102,8 +103,7 @@ (define (section->items sec) (case (car sec) ((job) - (apply append (map render-title-flat (field sec 'titles)))) - ((education) + (apply append (map render-title-flat (field sec 'titles)))) ((education) (list (render-education sec))) ((hobby-projects) (map render-project (field sec 'projects))) diff --git a/resume.html b/resume.html index fec0321..89de567 100644 --- a/resume.html +++ b/resume.html @@ -1,2 +1,2 @@ -Jane Doe

Jane Doe

Springfield, USAjane@example.com

Education

Bachelor of Science in Computer ScienceAug 2011 – Dec 2016
The University of Georgia • Athens, GA
  • Graduated December 2016
  • ICPC Participant and Meeting Coordinator
  • WUOG 90.5 FM — Radio DJ and Operations Staff Member
  • UGA Game Development Club — founding member
  • Intramural soccer and volleyball

Work Experience

Full-Stack EngineerJul 2017 – Dec 2019
Startup XYZ • Athens, GA

Built product features across the React frontend and Node.js backend, maintained CI/CD pipelines and AWS infrastructure, and collaborated directly with design and product teams.

Real-Time DashboardFeb 2019 – Dec 2019
  • Live analytics dashboard processing 50k events/s via WebSocket fan-out.
  • Replaced polling, cutting server load by 60%.
  • User-configurable alert thresholds stored in IndexedDB.
  • React
  • Node.js
  • WebSockets
  • D3.js
  • AWS
Senior Software EngineerJun 2022 – Present
Acme Corp • Remote

Led a team of 4 engineers on the core platform, driving adoption of internal developer tooling and mentoring junior engineers through architecture proposals and code review.

Distributed Config ServiceMar 2023 – Present
  • Raft-based distributed config store serving 40+ services with <500 ms p99 propagation.
  • Designed consensus layer with custom Raft in Go.
  • Added multi-region replication with conflict-free merge semantics.
  • Reduced config propagation from ~30 s to <500 ms p99.
  • Go
  • Raft
  • gRPC
  • Kubernetes
  • Prometheus
Developer PortalJun 2022 – Feb 2023
  • Unified internal service catalogue and runbook search; cut time-to-runbook from 8 min to <30 s.
  • Indexed 300+ services via OpenAPI scraping.
  • Built fuzzy-search backend in Go with Bleve.
  • Go
  • Bleve
  • React
  • OpenAPI
Software Engineer IIJan 2020 – May 2022
Acme Corp • Remote

Owned the authentication service end-to-end, reducing API latency by 35% through targeted caching improvements.

Auth Service RewriteJan 2020 – Dec 2020
  • Rewrote legacy PHP auth service in Go; cut p99 latency 800 ms → 40 ms.
  • Migrated 12 M users with zero downtime via dual-write/dark-read.
  • Introduced PKCE OAuth 2.0 replacing home-grown session tokens.
  • Go
  • PostgreSQL
  • Redis
  • OAuth2
  • Docker
Rate Limiting LayerFeb 2021 – May 2022
  • Token-bucket rate limiting across all public API endpoints; reduced abusive traffic by 80%.
  • Built as a gRPC interceptor with hot-reloaded config.
  • Added per-tenant override rules via internal admin UI.
  • Go
  • gRPC
  • Redis
  • React

Projects

schemeresumeAug 2026 – Present

Resume generator written in Scheme; data as S-expressions, rendered to HTML via SXML.

  • Scheme
  • SXML
  • HTML
  • CSS
Tiny Lisp InterpreterJan 2025 – Mar 2025

600-line Lisp interpreter in Python with tail-call optimisation, closures, and a macro expander.

  • Python
  • Lisp

Interests

Open-SourceRegular contributor to Guile and Chicken Scheme ecosystem libraries.
Rock ClimbingSport climber; currently projecting 5.12a outdoors.
Technical WritingBlog at janedoe.dev — compilers, distributed systems, functional programming.

Favorite Software

Guile SchemeEmacsNeovimNixGuixTailscaleWireGuardmpvzathuratmuxAlacrittySyncthingBspwmRofi
+Jane Doe

Jane Doe

Springfield, USAjane@example.com

Education

Bachelor of Science in Computer ScienceAug 2011 – Dec 2016
The University of Georgia • Athens, GA
  • Graduated December 2016
  • ICPC Participant and Meeting Coordinator
  • WUOG 90.5 FM — Radio DJ and Operations Staff Member
  • UGA Game Development Club — founding member
  • Intramural soccer and volleyball

Work Experience

Full-Stack EngineerJul 2017 – Dec 2019
Startup XYZ • Athens, GA

Built product features across the React frontend and Node.js backend, maintained CI/CD pipelines and AWS infrastructure, and collaborated directly with design and product teams.

Real-Time DashboardFeb 2019 – Dec 2019
  • Live analytics dashboard processing 50k events/s via WebSocket fan-out.
  • Replaced polling, cutting server load by 60%.
  • User-configurable alert thresholds stored in IndexedDB.
  • React
  • Node.js
  • WebSockets
  • D3.js
  • AWS
Senior Software EngineerJun 2022 – Present
Acme Corp • Remote

Led a team of 4 engineers on the core platform, driving adoption of internal developer tooling and mentoring junior engineers through architecture proposals and code review.

Distributed Config ServiceMar 2023 – Present
  • Raft-based distributed config store serving 40+ services with <500 ms p99 propagation.
  • Designed consensus layer with custom Raft in Go.
  • Added multi-region replication with conflict-free merge semantics.
  • Reduced config propagation from ~30 s to <500 ms p99.
  • Go
  • Raft
  • gRPC
  • Kubernetes
  • Prometheus
Developer PortalJun 2022 – Feb 2023
  • Unified internal service catalogue and runbook search; cut time-to-runbook from 8 min to <30 s.
  • Indexed 300+ services via OpenAPI scraping.
  • Built fuzzy-search backend in Go with Bleve.
  • Go
  • Bleve
  • React
  • OpenAPI
Software Engineer IIJan 2020 – May 2022
Acme Corp • Remote

Owned the authentication service end-to-end, reducing API latency by 35% through targeted caching improvements.

Auth Service RewriteJan 2020 – Dec 2020
  • Rewrote legacy PHP auth service in Go; cut p99 latency 800 ms → 40 ms.
  • Migrated 12 M users with zero downtime via dual-write/dark-read.
  • Introduced PKCE OAuth 2.0 replacing home-grown session tokens.
  • Go
  • PostgreSQL
  • Redis
  • OAuth2
  • Docker
Rate Limiting LayerFeb 2021 – May 2022
  • Token-bucket rate limiting across all public API endpoints; reduced abusive traffic by 80%.
  • Built as a gRPC interceptor with hot-reloaded config.
  • Added per-tenant override rules via internal admin UI.
  • Go
  • gRPC
  • Redis
  • React

Projects

schemeresumeAug 2026 – Present

Resume generator written in Scheme; data as S-expressions, rendered to HTML via SXML.

  • Scheme
  • SXML
  • HTML
  • CSS
Tiny Lisp InterpreterJan 2025 – Mar 2025

600-line Lisp interpreter in Python with tail-call optimisation, closures, and a macro expander.

  • Python
  • Lisp

Interests

Open-SourceRegular contributor to Guile and Chicken Scheme ecosystem libraries.
Rock ClimbingSport climber; currently projecting 5.12a outdoors.
Technical WritingBlog at janedoe.dev — compilers, distributed systems, functional programming.

Favorite Software

Guile SchemeEmacsNeovimNixGuixTailscaleWireGuardmpvzathuratmuxAlacrittySyncthingBspwmRofi
diff --git a/style.css b/style.css index 4982c6c..8cea764 100644 --- a/style.css +++ b/style.css @@ -4,8 +4,8 @@ /* ─── Variables ──────────────────────────────────────────────────────────────── */ :root { --bg: #222129; - --bg-card: #272327; - --bg-hover: #2e2b33; + --bg-card: #2a2520; + --bg-hover: #3a3228; --text: #fff; --muted: rgba(255,255,255,0.5); --accent: #FFA86A; @@ -127,9 +127,9 @@ a { color: var(--accent); text-decoration: none; } /* ─── Title card ─────────────────────────────────────────────────────────────── */ .title-card { - padding: 5px 0 6px; - border-bottom: 1px solid var(--border); - margin-bottom: 4px; + padding: 6px 9px 0; + border-bottom: none; + margin-bottom: 0; } p.title-blurb { @@ -139,6 +139,15 @@ p.title-blurb { margin-top: 3px; } +/* Job group: lighter background surrounds title + all its project cards */ +.job-group { + background: #2e2b33; + border: 1px solid var(--border); + border-radius: 3px; + padding: 6px 8px 8px; + margin-bottom: 6px; +} + /* ─── Project card ───────────────────────────────────────────────────────────── */ .project-card { background: var(--bg-card); @@ -146,7 +155,7 @@ p.title-blurb { border-left: 2px solid rgba(255,168,106,0.35); border-radius: 3px; padding: 6px 9px; - margin-bottom: 4px; + margin-top: 5px; cursor: default; transition: background 0.18s, border-left-color 0.18s; }