More font tweaks

This commit is contained in:
Ian Keane 2026-08-27 12:55:55 -04:00
parent 230bc5a002
commit 6e8d7bc106
4 changed files with 83 additions and 50 deletions

View file

@ -18,8 +18,8 @@
;; ─── Individual cards (all become flat children of .columns) ──────────────────
;; Project card — detail bullets revealed on hover (desktop) or click (mobile)
(define (render-project proj)
;; Work-experience project card — bullet summary + hover-reveal detail bullets
(define (render-work-project proj)
`(div (@ (class "project-card")
(onclick "this.classList.toggle('open')"))
(div (@ (class "project-header"))
@ -31,6 +31,27 @@
,(bullets (field proj 'detail-bullets)))
,(tech-list (field proj 'technologies))))
;; Hobby/personal project card — sentence summary + hover-reveal links
(define (render-project proj)
(let* ((links (field proj 'detail-links))
(has-links (and (pair? links) (> (length links) 0))))
`(div (@ (class "project-card")
,@(if has-links '((onclick "this.classList.toggle('open')")) '()))
(div (@ (class "project-header"))
(span (@ (class "project-name")) ,(field proj 'name))
,(date-range (field proj 'date-start) (field proj 'date-end)))
(p (@ (class "project-summary")) ,(field proj 'summary))
,(if has-links
`(div (@ (class "project-details"))
(ul ,@(map (lambda (link)
`(li (a (@ (href ,(cdr link))
(target "_blank")
(rel "noopener"))
,(car link))))
links)))
'(span))
,(tech-list (field proj 'technologies)))))
;; Title card: blurb only, no projects nested inside.
;; Projects are emitted as siblings after the title card.
(define (render-title-card tc)
@ -43,11 +64,11 @@
(p (@ (class "title-blurb"))
,(string-join (field tc 'blurb) " "))))
;; Emit a title card followed by its project cards as a flat list of siblings
;; Emit a title card followed by its work-project cards as a flat list of siblings
(define (render-title-flat tc)
(append
(list (render-title-card tc))
(map render-project (field tc 'projects))))
(map render-work-project (field tc 'projects))))
(define (render-education edu)
`(div (@ (class "education-card")

File diff suppressed because one or more lines are too long

View file

@ -8,15 +8,25 @@
(cons 'email email)
(cons 'location location)))
(define (make-project name date-start date-end summary-bullets detail-bullets technologies . rest)
(list 'project
;; Work-experience project: bullet summary + hover-reveal detail bullets
(define (make-work-project name date-start date-end summary-bullets detail-bullets technologies)
(list 'work-project
(cons 'name name)
(cons 'date-start date-start)
(cons 'date-end date-end)
(cons 'summary-bullets summary-bullets)
(cons 'detail-bullets detail-bullets)
(cons 'technologies technologies)
(cons 'url (if (null? rest) #f (car rest)))))
(cons 'technologies technologies)))
;; Hobby/personal project: sentence summary + hover-reveal (label . url) links
(define (make-project name date-start date-end summary detail-links technologies)
(list 'project
(cons 'name name)
(cons 'date-start date-start)
(cons 'date-end date-end)
(cons 'summary summary)
(cons 'detail-links detail-links)
(cons 'technologies technologies)))
;; Title card: lives inside a job card
;; blurb responsibility bullets
@ -93,37 +103,34 @@
"Senior Software Engineer" "Acme Corp" "Remote" "Jun 2022" "Present"
'("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.")
(list
(make-project
(make-work-project
"Distributed Config Service" "Mar 2023" "Present"
'("Built a Raft-based distributed config store used by 40+ services.")
'("Designed the consensus layer using a custom Raft implementation in Go."
'("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 time from ~30 s to <500 ms p99.")
"Reduced config propagation from ~30 s to <500 ms p99.")
'("Go" "Raft" "gRPC" "Kubernetes" "Prometheus"))
(make-project
(make-work-project
"Developer Portal" "Jun 2022" "Feb 2023"
'("Unified internal service catalogue and runbook search into one portal.")
'("Indexed 300+ services via OpenAPI scraping and custom metadata YAML."
"Built a fuzzy-search backend in Go backed by Bleve."
"Reduced mean time-to-runbook from ~8 min to <30 s.")
'("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"))))
(make-title
"Software Engineer II" "Acme Corp" "Remote" "Jan 2020" "May 2022"
'("Owned the authentication service end-to-end, reducing API latency by 35% through targeted caching improvements.")
(list
(make-project
(make-work-project
"Auth Service Rewrite" "Jan 2020" "Dec 2020"
'("Rewrote legacy PHP auth service in Go; cut p99 latency from 800 ms to 40 ms.")
'("Migrated 12 M users with zero downtime using a dual-write/dark-read strategy."
"Introduced PKCE OAuth 2.0 flow replacing home-grown session tokens."
"Added comprehensive integration test suite with 92% coverage.")
'("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"))
(make-project
(make-work-project
"Rate Limiting Layer" "Feb 2021" "May 2022"
'("Implemented token-bucket rate limiting across all public API endpoints.")
'("Built as a gRPC interceptor; config hot-reloaded from the config service."
"Reduced abusive traffic incidents by 80% in the first quarter after launch."
"Added per-tenant override rules managed via an internal admin UI.")
'("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")))))))
(define job-startup
@ -134,12 +141,11 @@
"Full-Stack Engineer" "Startup XYZ" "Athens, GA" "Jul 2017" "Dec 2019"
'("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.")
(list
(make-project
(make-work-project
"Real-Time Dashboard" "Feb 2019" "Dec 2019"
'("Delivered a live analytics dashboard processing 50k events/s.")
'("Replaced polling with WebSocket fan-out, cutting server load by 60%."
"Implemented client-side time-series aggregation using D3.js."
"Added user-configurable alert thresholds stored in IndexedDB.")
'("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")))))))
(define my-education
@ -159,19 +165,14 @@
(list
(make-project
"schemeresume" "Aug 2026" "Present"
'("A resume generator written in Scheme that produces HTML via SXML.")
'("Defined a small DSL for resume data in resume.scm."
"generate.scm walks the data and emits SXML serialised to HTML."
"CSS handles all layout including the two-column split.")
'("Scheme" "SXML" "HTML" "CSS")
"https://github.com/janedoe/schemeresume")
"Resume generator written in Scheme; data as S-expressions, rendered to HTML via SXML."
'(("GitHub" . "https://github.com/janedoe/schemeresume"))
'("Scheme" "SXML" "HTML" "CSS"))
(make-project
"Tiny Lisp Interpreter" "Jan 2025" "Mar 2025"
'("A 600-line Lisp interpreter in Python supporting tail-call optimisation.")
'("Implemented environments as linked frames, closures, and a macro expander."
"Added a REPL with readline history and pretty-printing.")
'("Python" "Lisp")
"https://github.com/janedoe/tinylisp"))))
"600-line Lisp interpreter in Python with tail-call optimisation, closures, and a macro expander."
'(("GitHub" . "https://github.com/janedoe/tinylisp"))
'("Python" "Lisp")))))
(define my-interests
(make-interests

View file

@ -166,13 +166,19 @@ p.title-blurb {
.project-name { font-size: 0.72rem; }
.project-summary ul { padding-left: 12px; margin-top: 2px; }
.project-summary li {
p.project-summary {
font-size: 0.68rem;
line-height: 1.5;
color: rgba(255,255,255,0.85);
margin-top: 2px;
}
div.project-summary ul { list-style: disc; padding-left: 14px; margin-top: 2px; }
div.project-summary li {
font-size: 0.68rem;
line-height: 1.5;
color: rgba(255,255,255,0.85);
}
.project-summary li::before { content: "• "; color: var(--muted); }
.project-details {
max-height: 0;
@ -198,14 +204,19 @@ p.title-blurb {
.education-card:hover .edu-extras { max-height: 0; opacity: 0; margin-top: 0; }
.education-card.open .edu-extras { max-height: 400px; opacity: 1; margin-top: 4px; }
}
.project-details ul { padding-left: 12px; margin-top: 4px; }
.project-details ul { list-style: disc; padding-left: 14px; margin-top: 4px; }
.project-details li {
font-size: 0.68rem;
color: var(--muted);
line-height: 1.5;
margin-bottom: 1px;
margin-bottom: 2px;
}
.project-details li::before { content: "• "; }
.project-details li a {
color: var(--accent);
text-decoration: underline;
text-underline-offset: 2px;
}
.project-details li a:hover { opacity: 0.8; }
.tech-list {
display: flex;