More font tweaks
This commit is contained in:
parent
230bc5a002
commit
6e8d7bc106
4 changed files with 83 additions and 50 deletions
29
generate.scm
29
generate.scm
|
|
@ -18,8 +18,8 @@
|
||||||
|
|
||||||
;; ─── Individual cards (all become flat children of .columns) ──────────────────
|
;; ─── Individual cards (all become flat children of .columns) ──────────────────
|
||||||
|
|
||||||
;; Project card — detail bullets revealed on hover (desktop) or click (mobile)
|
;; Work-experience project card — bullet summary + hover-reveal detail bullets
|
||||||
(define (render-project proj)
|
(define (render-work-project proj)
|
||||||
`(div (@ (class "project-card")
|
`(div (@ (class "project-card")
|
||||||
(onclick "this.classList.toggle('open')"))
|
(onclick "this.classList.toggle('open')"))
|
||||||
(div (@ (class "project-header"))
|
(div (@ (class "project-header"))
|
||||||
|
|
@ -31,6 +31,27 @@
|
||||||
,(bullets (field proj 'detail-bullets)))
|
,(bullets (field proj 'detail-bullets)))
|
||||||
,(tech-list (field proj 'technologies))))
|
,(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.
|
;; Title card: blurb only, no projects nested inside.
|
||||||
;; Projects are emitted as siblings after the title card.
|
;; Projects are emitted as siblings after the title card.
|
||||||
(define (render-title-card tc)
|
(define (render-title-card tc)
|
||||||
|
|
@ -43,11 +64,11 @@
|
||||||
(p (@ (class "title-blurb"))
|
(p (@ (class "title-blurb"))
|
||||||
,(string-join (field tc '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)
|
(define (render-title-flat tc)
|
||||||
(append
|
(append
|
||||||
(list (render-title-card tc))
|
(list (render-title-card tc))
|
||||||
(map render-project (field tc 'projects))))
|
(map render-work-project (field tc 'projects))))
|
||||||
|
|
||||||
(define (render-education edu)
|
(define (render-education edu)
|
||||||
`(div (@ (class "education-card")
|
`(div (@ (class "education-card")
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
79
resume.scm
79
resume.scm
|
|
@ -8,15 +8,25 @@
|
||||||
(cons 'email email)
|
(cons 'email email)
|
||||||
(cons 'location location)))
|
(cons 'location location)))
|
||||||
|
|
||||||
(define (make-project name date-start date-end summary-bullets detail-bullets technologies . rest)
|
;; Work-experience project: bullet summary + hover-reveal detail bullets
|
||||||
(list 'project
|
(define (make-work-project name date-start date-end summary-bullets detail-bullets technologies)
|
||||||
|
(list 'work-project
|
||||||
(cons 'name name)
|
(cons 'name name)
|
||||||
(cons 'date-start date-start)
|
(cons 'date-start date-start)
|
||||||
(cons 'date-end date-end)
|
(cons 'date-end date-end)
|
||||||
(cons 'summary-bullets summary-bullets)
|
(cons 'summary-bullets summary-bullets)
|
||||||
(cons 'detail-bullets detail-bullets)
|
(cons 'detail-bullets detail-bullets)
|
||||||
(cons 'technologies technologies)
|
(cons 'technologies technologies)))
|
||||||
(cons 'url (if (null? rest) #f (car rest)))))
|
|
||||||
|
;; 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
|
;; Title card: lives inside a job card
|
||||||
;; blurb – responsibility bullets
|
;; blurb – responsibility bullets
|
||||||
|
|
@ -93,37 +103,34 @@
|
||||||
"Senior Software Engineer" "Acme Corp" "Remote" "Jun 2022" "Present"
|
"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.")
|
'("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
|
(list
|
||||||
(make-project
|
(make-work-project
|
||||||
"Distributed Config Service" "Mar 2023" "Present"
|
"Distributed Config Service" "Mar 2023" "Present"
|
||||||
'("Built a Raft-based distributed config store used by 40+ services.")
|
'("Raft-based distributed config store serving 40+ services with <500 ms p99 propagation.")
|
||||||
'("Designed the consensus layer using a custom Raft implementation in Go."
|
'("Designed consensus layer with custom Raft in Go."
|
||||||
"Added multi-region replication with conflict-free merge semantics."
|
"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"))
|
'("Go" "Raft" "gRPC" "Kubernetes" "Prometheus"))
|
||||||
(make-project
|
(make-work-project
|
||||||
"Developer Portal" "Jun 2022" "Feb 2023"
|
"Developer Portal" "Jun 2022" "Feb 2023"
|
||||||
'("Unified internal service catalogue and runbook search into one portal.")
|
'("Unified internal service catalogue and runbook search; cut time-to-runbook from 8 min to <30 s.")
|
||||||
'("Indexed 300+ services via OpenAPI scraping and custom metadata YAML."
|
'("Indexed 300+ services via OpenAPI scraping."
|
||||||
"Built a fuzzy-search backend in Go backed by Bleve."
|
"Built fuzzy-search backend in Go with Bleve.")
|
||||||
"Reduced mean time-to-runbook from ~8 min to <30 s.")
|
|
||||||
'("Go" "Bleve" "React" "OpenAPI"))))
|
'("Go" "Bleve" "React" "OpenAPI"))))
|
||||||
(make-title
|
(make-title
|
||||||
"Software Engineer II" "Acme Corp" "Remote" "Jan 2020" "May 2022"
|
"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.")
|
'("Owned the authentication service end-to-end, reducing API latency by 35% through targeted caching improvements.")
|
||||||
(list
|
(list
|
||||||
(make-project
|
(make-work-project
|
||||||
"Auth Service Rewrite" "Jan 2020" "Dec 2020"
|
"Auth Service Rewrite" "Jan 2020" "Dec 2020"
|
||||||
'("Rewrote legacy PHP auth service in Go; cut p99 latency from 800 ms to 40 ms.")
|
'("Rewrote legacy PHP auth service in Go; cut p99 latency 800 ms → 40 ms.")
|
||||||
'("Migrated 12 M users with zero downtime using a dual-write/dark-read strategy."
|
'("Migrated 12 M users with zero downtime via dual-write/dark-read."
|
||||||
"Introduced PKCE OAuth 2.0 flow replacing home-grown session tokens."
|
"Introduced PKCE OAuth 2.0 replacing home-grown session tokens.")
|
||||||
"Added comprehensive integration test suite with 92% coverage.")
|
|
||||||
'("Go" "PostgreSQL" "Redis" "OAuth2" "Docker"))
|
'("Go" "PostgreSQL" "Redis" "OAuth2" "Docker"))
|
||||||
(make-project
|
(make-work-project
|
||||||
"Rate Limiting Layer" "Feb 2021" "May 2022"
|
"Rate Limiting Layer" "Feb 2021" "May 2022"
|
||||||
'("Implemented token-bucket rate limiting across all public API endpoints.")
|
'("Token-bucket rate limiting across all public API endpoints; reduced abusive traffic by 80%.")
|
||||||
'("Built as a gRPC interceptor; config hot-reloaded from the config service."
|
'("Built as a gRPC interceptor with hot-reloaded config."
|
||||||
"Reduced abusive traffic incidents by 80% in the first quarter after launch."
|
"Added per-tenant override rules via internal admin UI.")
|
||||||
"Added per-tenant override rules managed via an internal admin UI.")
|
|
||||||
'("Go" "gRPC" "Redis" "React")))))))
|
'("Go" "gRPC" "Redis" "React")))))))
|
||||||
|
|
||||||
(define job-startup
|
(define job-startup
|
||||||
|
|
@ -134,12 +141,11 @@
|
||||||
"Full-Stack Engineer" "Startup XYZ" "Athens, GA" "Jul 2017" "Dec 2019"
|
"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.")
|
'("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
|
(list
|
||||||
(make-project
|
(make-work-project
|
||||||
"Real-Time Dashboard" "Feb 2019" "Dec 2019"
|
"Real-Time Dashboard" "Feb 2019" "Dec 2019"
|
||||||
'("Delivered a live analytics dashboard processing 50k events/s.")
|
'("Live analytics dashboard processing 50k events/s via WebSocket fan-out.")
|
||||||
'("Replaced polling with WebSocket fan-out, cutting server load by 60%."
|
'("Replaced polling, cutting server load by 60%."
|
||||||
"Implemented client-side time-series aggregation using D3.js."
|
"User-configurable alert thresholds stored in IndexedDB.")
|
||||||
"Added user-configurable alert thresholds stored in IndexedDB.")
|
|
||||||
'("React" "Node.js" "WebSockets" "D3.js" "AWS")))))))
|
'("React" "Node.js" "WebSockets" "D3.js" "AWS")))))))
|
||||||
|
|
||||||
(define my-education
|
(define my-education
|
||||||
|
|
@ -159,19 +165,14 @@
|
||||||
(list
|
(list
|
||||||
(make-project
|
(make-project
|
||||||
"schemeresume" "Aug 2026" "Present"
|
"schemeresume" "Aug 2026" "Present"
|
||||||
'("A resume generator written in Scheme that produces HTML via SXML.")
|
"Resume generator written in Scheme; data as S-expressions, rendered to HTML via SXML."
|
||||||
'("Defined a small DSL for resume data in resume.scm."
|
'(("GitHub" . "https://github.com/janedoe/schemeresume"))
|
||||||
"generate.scm walks the data and emits SXML serialised to HTML."
|
'("Scheme" "SXML" "HTML" "CSS"))
|
||||||
"CSS handles all layout including the two-column split.")
|
|
||||||
'("Scheme" "SXML" "HTML" "CSS")
|
|
||||||
"https://github.com/janedoe/schemeresume")
|
|
||||||
(make-project
|
(make-project
|
||||||
"Tiny Lisp Interpreter" "Jan 2025" "Mar 2025"
|
"Tiny Lisp Interpreter" "Jan 2025" "Mar 2025"
|
||||||
'("A 600-line Lisp interpreter in Python supporting tail-call optimisation.")
|
"600-line Lisp interpreter in Python with tail-call optimisation, closures, and a macro expander."
|
||||||
'("Implemented environments as linked frames, closures, and a macro expander."
|
'(("GitHub" . "https://github.com/janedoe/tinylisp"))
|
||||||
"Added a REPL with readline history and pretty-printing.")
|
'("Python" "Lisp")))))
|
||||||
'("Python" "Lisp")
|
|
||||||
"https://github.com/janedoe/tinylisp"))))
|
|
||||||
|
|
||||||
(define my-interests
|
(define my-interests
|
||||||
(make-interests
|
(make-interests
|
||||||
|
|
|
||||||
23
style.css
23
style.css
|
|
@ -166,13 +166,19 @@ p.title-blurb {
|
||||||
|
|
||||||
.project-name { font-size: 0.72rem; }
|
.project-name { font-size: 0.72rem; }
|
||||||
|
|
||||||
.project-summary ul { padding-left: 12px; margin-top: 2px; }
|
p.project-summary {
|
||||||
.project-summary li {
|
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;
|
font-size: 0.68rem;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
color: rgba(255,255,255,0.85);
|
color: rgba(255,255,255,0.85);
|
||||||
}
|
}
|
||||||
.project-summary li::before { content: "• "; color: var(--muted); }
|
|
||||||
|
|
||||||
.project-details {
|
.project-details {
|
||||||
max-height: 0;
|
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:hover .edu-extras { max-height: 0; opacity: 0; margin-top: 0; }
|
||||||
.education-card.open .edu-extras { max-height: 400px; opacity: 1; margin-top: 4px; }
|
.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 {
|
.project-details li {
|
||||||
font-size: 0.68rem;
|
font-size: 0.68rem;
|
||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
line-height: 1.5;
|
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 {
|
.tech-list {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue