Skip to content

Commit 87ca194

Browse files
committed
Refine ATS resume and print layout
1 parent 6185854 commit 87ca194

77 files changed

Lines changed: 2117 additions & 3573 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

_data/resume/ats.yml

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
---
2+
skills:
3+
- Platform Architecture
4+
- Legacy Modernization
5+
- System Reliability
6+
- Incident Leadership
7+
- Observability
8+
- Cross-Team Technical Leadership
9+
- Ruby on Rails
10+
- PostgreSQL
11+
- Redis
12+
- AWS
13+
- OpenTelemetry
14+
- Secure API Design
15+
- CI/CD
16+
17+
positions:
18+
- id: onemain
19+
summary: >-
20+
Owned architecture, production health, and systemic risk for a
21+
revenue-critical acquisition platform in a regulated financial environment.
22+
highlights:
23+
- >-
24+
Served as the final escalation point for high-severity production
25+
incidents, leading cross-team diagnosis and driving remediation plans
26+
with clear ownership.
27+
- >-
28+
Reconstructed end-to-end customer acquisition flows across browser,
29+
application, middleware, and downstream business systems, giving teams
30+
an authoritative operating model for incident response and change planning.
31+
- >-
32+
Re-architected session state handling in multi-step application flows,
33+
removing a persistent integrity failure mode affecting customer tracking
34+
and incident recovery.
35+
- >-
36+
Founded and led the OpenTelemetry Working Group, establishing shared
37+
observability standards adopted across engineering and cybersecurity teams.
38+
- >-
39+
Created an enablement function that separated platform risk and remediation
40+
work from feature delivery, sustaining long-horizon stability improvements.
41+
42+
- id: sk-holdings
43+
summary: >-
44+
Stabilized and modernized a shared Rails platform supporting multiple
45+
digital properties, millions of users, and high-volume data flows.
46+
highlights:
47+
- >-
48+
Upgraded Ruby and Rails across multiple applications, reducing technical
49+
debt, security exposure, and long-term maintenance risk.
50+
- >-
51+
Built data pipelines synchronizing millions of records between internal
52+
systems and third-party services to support high-volume operations.
53+
- >-
54+
Replaced expensive dynamic queries with materialized views and moved
55+
session and cache load from MySQL to Redis, improving performance under load.
56+
- >-
57+
Optimized CI by reordering and parallelizing test execution, shortening
58+
feedback cycles and improving delivery throughput.
59+
60+
- id: benchprep
61+
summary: >-
62+
Improved correctness, performance, and security for enterprise assessment
63+
workflows where calculation accuracy and response integrity were business-critical.
64+
highlights:
65+
- >-
66+
Eliminated assessment calculation errors by analyzing and tuning critical
67+
PostgreSQL queries with EXPLAIN ANALYZE and query-planning tools.
68+
- >-
69+
Implemented JWT-based response verification and once-only processing to
70+
prevent tampering and strengthen trust in assessment outcomes.
71+
- >-
72+
Designed a secure cross-origin communication API for embedded client
73+
applications and reduced high-concurrency bottlenecks in assessment workflows.
74+
75+
additional_experience:
76+
title: Additional Experience
77+
items:
78+
- id: activecampaign
79+
summary: >-
80+
Improved testability, performance, and change safety inside a tightly
81+
coupled CRM core.
82+
- id: reachlocal
83+
summary: >-
84+
De-risked a large legacy rewrite by proposing an incremental modernization
85+
strategy built around API boundaries.
86+
- id: klobomedia
87+
summary: >-
88+
Built and delivered a social media analytics platform as technical
89+
co-founder and CTO.
90+
- id: coderwall
91+
summary: >-
92+
Relaunched the platform as open source and modernized background jobs
93+
and data storage to reduce cost and improve maintainability.
94+
95+
earlier_experience:
96+
title: Earlier Experience
97+
dates: 1999 - 2014
98+
summary: >-
99+
Built enterprise systems, startup platforms, and revenue-critical fulfillment
100+
services across consulting, product, and operational environments.
101+
items:
102+
- label: TicketsNow
103+
summary: >-
104+
Designed and delivered a real-time inventory locking and order fulfillment
105+
service that generated more than $2 million in annual revenue.
106+
- label: Groupon and Obtiva
107+
summary: >-
108+
Led onboarding, mentoring, and engineering enablement work while delivering
109+
backend systems in high-growth and consultancy environments.
110+
- label: BrightStar, Motorola, BP, and earlier enterprise roles
111+
summary: >-
112+
Built integration and operational systems across large organizations with
113+
a foundation in .NET, SQL, and production support.

_data/resume/earlier_experience.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Earlier Experience
3-
dates: 1999 2014
3+
dates: 1999 - 2014
44
description: >-
55
Foundations in enterprise systems, consulting, and early web scale, with emphasis on
66
craftsmanship, mentoring, and resilient delivery under real production constraints.

_data/resume/positions/onemain.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ context: >-
1414
digital channels. The company specializes in personal loans for non-prime
1515
borrowers, operating in a heavily regulated financial services environment
1616
with strict compliance requirements. The Acquisitions platform owns the
17-
customer-facing loan application flowa revenue-critical system processing
17+
customer-facing loan application flow, a revenue-critical system processing
1818
high volumes of applications daily under strict availability, auditability,
1919
and data-integrity constraints.
2020

_data/resume/profile.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
---
22
name: Mike Hall
33
title: Staff Software Engineer
4+
location:
5+
display: Chicago, IL
6+
locality: Chicago
7+
region: IL
8+
country: US
49
contact:
510
email: mike@just3ws.com
611
phone: (847) 877-3825

_data/resume/summary.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
---
22
title: Summary
33
text: >-
4-
Staff-level engineer who sets direction for critical platforms, makes system behavior legible, and reduces systemic risk
5-
so multi-team plans are grounded in reality.
6-
Known for aligning engineering, product, and leadership on what’s required to stabilize and evolve systems, enabling
7-
durable change tied to business outcomes.
4+
Staff software engineer who stabilizes revenue-critical platforms, reduces systemic
5+
risk, and makes complex systems understandable enough for teams to change safely.
6+
Strongest in platform architecture, legacy modernization, observability, incident
7+
leadership, and cross-team execution across Ruby on Rails and PostgreSQL systems.
8+
Known for turning production ambiguity into clear operating models, durable
9+
remediation plans, and safer delivery.

_data/resume/timeline.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33
items:
44
- onemain
55
- sk-holdings
6-
- activecampaign
76
- benchprep
8-
- reachlocal
9-
- klobomedia
10-
- coderwall
117

128
# Full history (chronological, most recent first) for /history page
139
history:

_includes/head/base.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,30 @@
4242
<meta name="twitter:description" content="{{ seo_description }}">
4343
<link rel="shortcut icon" href="/favicon.ico">
4444
{% assign defer_stylesheets = include.defer_stylesheets %}
45+
{% assign include_patina = include.include_patina %}
46+
{% if include_patina == nil %}
47+
{% assign include_patina = true %}
48+
{% endif %}
4549
{% if defer_stylesheets %}
4650
<link rel="preload" href="/assets/css/core.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
4751
<link rel="preload" href="{{ include.theme_stylesheet }}" as="style" onload="this.onload=null;this.rel='stylesheet'">
52+
{% if include_patina %}
4853
<link rel="preload" href="/assets/css/digital-patina.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
54+
{% endif %}
4955
<noscript>
5056
<link rel="stylesheet" href="/assets/css/core.css">
5157
<link rel="stylesheet" href="{{ include.theme_stylesheet }}">
58+
{% if include_patina %}
5259
<link rel="stylesheet" href="/assets/css/digital-patina.css">
60+
{% endif %}
5361
</noscript>
5462
{% else %}
5563
<link rel="stylesheet" href="/assets/css/core.css">
5664
<link rel="stylesheet" href="{{ include.theme_stylesheet }}">
65+
{% if include_patina %}
5766
<link rel="stylesheet" href="/assets/css/digital-patina.css">
5867
{% endif %}
68+
{% endif %}
5969
{% if page.stylesheets and page.stylesheets.size > 0 %}
6070
{% for stylesheet in page.stylesheets %}
6171
<link rel="stylesheet" href="{{ stylesheet }}">

_includes/json-ld.html

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
{% assign profile = site.data.resume.profile %}
77
{% assign summary = site.data.resume.summary %}
88
{% assign person_id = site_url | append: "/id/person/mike-hall" %}
9+
{% assign profile_location = profile.location %}
910
<script type="application/ld+json">
1011
{
1112
"@context": "https://schema.org",
@@ -19,7 +20,17 @@
1920
"email": "mailto:{{ profile.contact.email }}",
2021
"telephone": {{ profile.contact.phone_tel | default: "+18478773825" | jsonify }},
2122
"jobTitle": {{ profile.title | default: "Staff Software Engineer" | jsonify }},
22-
"description": {{ summary.text | strip | jsonify }},
23+
"description": {{ summary.text | strip | jsonify }}{% if profile_location %},
24+
"homeLocation": {
25+
"@type": "Place",
26+
"name": {{ profile_location.display | jsonify }},
27+
"address": {
28+
"@type": "PostalAddress",
29+
"addressLocality": {{ profile_location.locality | jsonify }},
30+
"addressRegion": {{ profile_location.region | jsonify }},
31+
"addressCountry": {{ profile_location.country | default: "US" | jsonify }}
32+
}
33+
}{% endif %},
2334
"mainEntityOfPage": {
2435
"@type": "WebPage",
2536
"@id": "{{ site_url }}/"

_includes/resume/ats-content.html

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
{% assign ats = site.data.resume.ats %}
2+
<nav class="resume-actions no-print" aria-label="Resume actions">
3+
<span class="resume-actions-label">Resume</span>
4+
<a href="/history/" class="resume-actions-primary">Full Career Timeline</a>
5+
<a href="/resume.txt">Plain Text</a>
6+
<a href="/resume.md">Markdown</a>
7+
<a href="/resume.json">JSON</a>
8+
<button aria-label="Print or save ATS resume as PDF" title="Print or save ATS resume as PDF" onclick="window.print()">Print / PDF</button>
9+
</nav>
10+
11+
<article class="ats-resume-content">
12+
{% include resume/profile-header.html %}
13+
14+
{% assign summary = site.data.resume.summary %}
15+
<section id="summary">
16+
<h2>{{ summary.title }}</h2>
17+
<p>{{ summary.text }}</p>
18+
</section>
19+
20+
<section id="skills">
21+
<h2>Core Skills</h2>
22+
<ul class="skills-list ats-skills">
23+
{% for skill in ats.skills %}
24+
<li>{{ skill }}</li>
25+
{% endfor %}
26+
</ul>
27+
</section>
28+
29+
<section id="experience">
30+
<h2>Experience</h2>
31+
{% for entry in ats.positions %}
32+
{% assign position = site.data.resume.positions[entry.id] %}
33+
{% if position and entry %}
34+
{% include resume/ats-position-entry.html position=position entry=entry %}
35+
{% endif %}
36+
{% endfor %}
37+
</section>
38+
39+
<section id="additional-experience">
40+
<h2>{{ ats.additional_experience.title }}</h2>
41+
<ul class="ats-supporting-list">
42+
{% for item in ats.additional_experience.items %}
43+
{% assign position = site.data.resume.positions[item.id] %}
44+
{% if position %}
45+
<li>
46+
<strong>{{ position.title }}, {{ position.company.name }}</strong>
47+
<span class="ats-supporting-meta"> | {{ position.start_date }} - {{ position.end_date | default: "Present" }}{% if position.company.location %} | {{ position.company.location }}{% endif %}</span>
48+
: {{ item.summary }}
49+
</li>
50+
{% endif %}
51+
{% endfor %}
52+
</ul>
53+
</section>
54+
55+
<section id="earlier-experience">
56+
<h2>{{ ats.earlier_experience.title }}</h2>
57+
<p class="section-meta">{{ ats.earlier_experience.dates }}</p>
58+
<p>{{ ats.earlier_experience.summary }}</p>
59+
<ul class="ats-supporting-list">
60+
{% for item in ats.earlier_experience.items %}
61+
<li><strong>{{ item.label }}</strong>: {{ item.summary }}</li>
62+
{% endfor %}
63+
</ul>
64+
</section>
65+
</article>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<article class="position position-ats">
2+
<header class="position-header">
3+
<h3 class="position-title">{{ include.position.title }}</h3>
4+
<p class="position-meta">
5+
<span class="position-company">{{ include.position.company.name }}</span>
6+
{%- if include.position.company.location %} | <span>{{ include.position.company.location }}</span>{%- endif %}
7+
<span class="position-dates"> | <time>{{ include.position.start_date }}</time> - <time>{{ include.position.end_date | default: "Present" }}</time></span>
8+
</p>
9+
</header>
10+
11+
{%- if include.entry.summary %}
12+
<p>{{ include.entry.summary }}</p>
13+
{%- endif %}
14+
15+
{%- if include.entry.highlights %}
16+
<ul>
17+
{%- for highlight in include.entry.highlights %}
18+
<li>{{ highlight }}</li>
19+
{%- endfor %}
20+
</ul>
21+
{%- endif %}
22+
</article>

0 commit comments

Comments
 (0)