Finalized the best resume as version 5

This commit is contained in:
StormRunner06106
2026-09-13 12:37:01 -07:00
parent 643d836875
commit 2f027a3723
13 changed files with 867 additions and 147 deletions
+49 -135
View File
@@ -1,185 +1,99 @@
# Alexander Herlan # Alexander Herlan
**Senior Software Engineer · DevOps & IT Manager** **Senior Software Engineer · Full-Stack & DevOps**
Albuquerque, NM
1207 El Portal NW, Albuquerque, NM 87107
[813-402-8692](tel:+18134028692) · [alexwherlan@gmail.com](mailto:alexwherlan@gmail.com) · [alex.herlan.dev](https://alex.herlan.dev) · [LinkedIn](https://linkedin.com/in/alexander-herlan) · [GitHub](https://github.com/AlexanderHerlan) [813-402-8692](tel:+18134028692) · [alexwherlan@gmail.com](mailto:alexwherlan@gmail.com) · [alex.herlan.dev](https://alex.herlan.dev) · [LinkedIn](https://linkedin.com/in/alexander-herlan) · [GitHub](https://github.com/AlexanderHerlan)
## Overview ## Summary
Senior software engineer with over 27 years of hands-on technology experience spanning software engineering, web design, database engineering, IT management, computer repair, and user experience design. My primary focus is full-stack web application development with Python and JavaScript. Senior software engineer building Python and JavaScript applications, REST APIs, and cloud infrastructure. Experience modernizing real estate platforms, automating membership workflows, and deploying Android machine learning applications. Combines full-stack development with database engineering and DevOps.
Through professional roles, freelance work, and side projects, I have expanded my skills in DevOps, Docker, Kubernetes, cloud deployment, and resource management. Recent projects include membership platforms, Android applications with machine learning and AI, and financial technology. I continue to explore Web3 and emerging technologies, and I am seeking a software engineering role where I can build reliable applications and contribute across the development lifecycle. ## Work Experience
## Experience
### Independent Software Developer / Freelancer ### Independent Software Developer / Freelancer
*June 2024 - Present* *June 2024 - Present*
I develop web and mobile applications for long-term clients sourced through Upwork, agency partnerships, and professional referrals. Working directly with clients and distributed teams, I turn early-stage ideas and complex business requirements into production-ready software. I own projects from discovery and architecture through implementation, cloud deployment, feedback cycles, and ongoing support. Recent work spans membership management, AI-powered safety systems, and financial technology. - Delivered 3 selected client projects spanning mortgage lending, membership management, and Android safety applications, covering architecture, implementation, cloud deployment, and support.
#### Selected Projects #### Selected Projects
##### [IIPM.ie](https://iipm.ie)
*April 2025 - March 2026*
- Developed a membership platform for the Irish Institute of Pensions Management through an Upwork engagement, collaborating with an Australia-based agency and Daniel Steven.
- Expanded an initial set of WordPress landing pages into a larger PHP and PostgreSQL platform supporting individual and organisational membership applications, qualification requirements, annual payments, monthly course-progress reviews, and downloadable PDF certificates.
- Built an administrative portal with statistical dashboards for membership, onboarding, qualifications, payments, and course progress. Automated programme-timeline calculations, approved-leave handling, certificate issuance, and several previously manual documentation workflows.
**Technologies:** WordPress, PHP, PostgreSQL
##### [SafeSchoolz](https://heroeyez.com)
*June 2024 - June 2025*
- Worked with David Gray, VP of Grays Communications in Los Angeles, to develop a safety platform that detects firearms and communicates potential incidents to first responders.
- Built the Media Pipe and Aegis Android applications and integrated them with the existing .NET-based HeroEyez portal. Media Pipe detects firearms in device or IP-camera feeds; Aegis receives alerts with screenshots and a one-minute evidence clip, initiates a Twilio-powered call workflow, and forwards incident information to HeroEyez for monitoring and response coordination.
- Evaluated YOLO before adopting TensorFlow Lite to improve object-detection accuracy within mobile hardware constraints. Trained and tested the model using more than 10,000 firearm images from Roboflow and custom-captured samples.
- Completed the end-to-end alert workflow and deployed the application in June 2025. Broader commercial rollout was later paused because of market and regulatory constraints.
**Technologies:** Android, Java, Kotlin, object detection, TensorFlow Lite
##### [Equity Funding Source](https://equityfundingsource.com) ##### [Equity Funding Source](https://equityfundingsource.com)
*April 2026 - July 2026* *April 2026 - July 2026*
- Built a mortgage-lending platform for a Los Angeles-based mortgage-loan broker, using Preact for a lightweight frontend and Bun for the backend. - Developed a Preact and Bun mortgage platform supporting 3 user groups: borrowers, lenders, and administrators, with application workflows, collaboration, and secure document handling.
- Analyzed United States mortgage and private-lending workflows, including the forms and information exchanged throughout the loan process, to support borrower applications, lender collaboration, administrative oversight, and secure document handling. - Deployed serverless application logic and relational data on Cloudflare Workers and D1, with Durable Objects enabling real-time messaging and R2 storing loan documents.
- Deployed the platform on Cloudflare using Workers for server-side execution, D1 for relational data, Durable Objects for real-time messaging, and R2 for document storage. Used AI-assisted development with Codex to accelerate implementation and iteration while maintaining system stability.
**Technologies:** Preact, Bun, Cloudflare Workers, Cloudflare D1, Durable Objects, Cloudflare R2 ##### [IIPM.ie](https://iipm.ie)
*April 2025 - March 2026*
- Expanded WordPress landing pages into a PHP and PostgreSQL platform supporting 2 membership types, individual and organizational, with annual payments and monthly progress reviews.
- Automated 3 previously manual workflows: program-timeline calculations, approved-leave handling, and PDF certificate issuance; added dashboards for membership, qualifications, payments, onboarding, and course progress.
##### [SafeSchoolz](https://heroeyez.com)
*June 2024 - June 2025*
- Built 2 Android applications in Java and Kotlin: Media Pipe detects firearms, while Aegis coordinates incident alerts with the .NET-based HeroEyez portal.
- Trained and tested a TensorFlow Lite detection model on 10,000+ firearm images, selecting it over YOLO to improve accuracy within mobile hardware constraints.
- Integrated 60-second evidence clips, screenshots, and Twilio calls into the incident-alert workflow; completed deployment in June 2025 before the broader commercial rollout paused.
### Covius, LLC / Senior Software Engineer ### Covius, LLC / Senior Software Engineer
*January 2022 - April 2024 · Pompano Beach, FL* *January 2022 - April 2024 | Pompano Beach, FL*
At Covius, a nationwide real estate technology and holdings company, I contributed to the frontend and backend redesign of RealtyBid.com, an online real estate auction platform. The platform combined a REST API backend, a responsive JavaScript frontend, and asynchronous updates to provide users with real-time auction status. I also built internal tools for website administration and customer support. - Integrated REST APIs and asynchronous auction updates into the RealtyBid.com redesign, giving bidders real-time auction status across desktop and mobile browsers.
- Delivered responsive Angular and RxJS interfaces across desktop and mobile browsers, incorporating QA and business feedback through iterative development sprints.
#### Accomplishments - Modernized a legacy database for the redesigned auction platform and created internal tools enabling website administration and customer support.
- Contributed to the complete redesign of a major legacy website containing extensive historical data.
- Helped manage and adapt a legacy database to support the redesigned platform.
- Built a responsive web application frontend for desktop and mobile browsers.
- Refined the user experience with QA testers and business partners through iterative sprints and testing sessions.
- Developed frontend functionality using Angular and RxJS.
### SEAD Software / Software Engineer ### SEAD Software / Software Engineer
*April 2021 - July 2022 · Delray Beach, FL* *April 2021 - July 2022 | Delray Beach, FL*
At SEAD Software, I used Python and web development skills to build web applications and deliver business analytics for healthcare and legal clients. I also improved company-wide development operations with Azure DevOps and development pipelines to streamline team coordination. - Digitized physical laboratory documents with Python and Google Cloud Vision, automating text recognition and categorization for healthcare document processing.
- Designed a Twilio messaging application that automatically responded to customer interactions and generated leads for law firms.
#### Accomplishments - Established Azure DevOps development pipelines and instructed staff on their use, coordinating delivery across client projects backed by AWS infrastructure and a shared Git repository.
- Designed and implemented Python code using the Google Cloud Vision API to recognize and digitally categorize physical laboratory documents.
- Developed a text messaging web application using the Twilio API to automate customer responses and generate leads for law firms.
- Maintained and implemented Amazon Web Services infrastructure to support multiple projects
- Implemented and trained staff on Microsoft Azure DevOps development platform infrastructure
- Maintained a large Git code repository for multiple clients
### Clarity Diagnostics & Lab Solutions / Director of IT ### Clarity Diagnostics & Lab Solutions / Director of IT
*September 2020 - January 2022 · Boca Raton, FL* *September 2020 - January 2022 | Boca Raton, FL*
Managed IT operations and technology decisions for a medical testing laboratory and diagnostics test manufacturing business. Supported the company's expansion to work with organizations nationwide, including local and state governments. I also managed software quality control, deployment, and training for its sister company, SEAD Software. - Directed laboratory and diagnostics manufacturing IT operations through expansion to nationwide clients, including local and state governments.
- Secured laboratory access with a badge system and enforced email security standards in Google Workspace and Microsoft 365; assisted medical equipment quality assurance.
#### Accomplishments - Supervised IT staff and coordinated software quality control, deployment, and user training for SEAD Software while maintaining client-facing websites.
- Implemented a physical keycard/badge access security system for the entire laboratory facility
- Implemented and maintained security standards for email and cloud-based applications in Google Workspace and Microsoft 365
- Maintained client-facing websites
- Expanded laboratory infrastructure and assisted with quality assurance testing of medical equipment
- Managed and instructed other IT staff in their daily responsibilities
### MyTap, aka Which Craft / Lead Developer ### MyTap, aka Which Craft / Lead Developer
*January 2016 - April 2020 · Albuquerque, NM* *January 2016 - April 2020 | Albuquerque, NM*
At this startup, I collaborated with a team of designers to build a craft beer recommendation engine using web scraping and natural language processing (NLP) of online beer reviews. This work introduced me to practical applications of machine learning and AI. - Extracted online beer reviews with Python Scrapy and analyzed adjective frequency to generate flavor profiles used by the craft beer recommendation engine.
- Implemented a Django and PostgreSQL backend serving beer recommendations through a responsive mobile web application developed with a design team.
#### Accomplishments
- Implemented a robust web scraper in Python using the Scrapy Python library
- Created a responsive web application frontend for mobile browsers
- Designed custom natural language processing code in Python to create craft beer flavor profiles based on adjective frequency in craft beer review text.
- Maintained a Django backend serving data from a PostgreSQL database
### TriCore Reference Laboratories / Production Support Specialist ### TriCore Reference Laboratories / Production Support Specialist
*April 2013 - January 2017 · Albuquerque, NM* *April 2013 - January 2017 | Albuquerque, NM*
Provided technology support to staff across multiple regional hospitals. Responsibilities included urgent password resets, troubleshooting healthcare applications such as Sunquest, retrieving patient medical records and diagnostic information, and monitoring systems for performance issues and errors. - Monitored the production environment as the sole overnight specialist, troubleshooting and escalating incidents for systems supported by 60 staff during the day.
- Resolved urgent hospital access and Sunquest issues, checked patient-record transfers between medical systems, and coached help desk staff on troubleshooting procedures.
#### Accomplishments ## Technical Skills
- Solely monitored and supported the company production environment overnight, handling troubleshooting and escalation for an environment supported by 60 staff during the day. - **Languages:** Python, JavaScript, TypeScript, PHP, Go, Java, Kotlin, C, C++, HTML, CSS, Sass.
- Monitored the transmission of patient records between hospitals using different medical record systems and healthcare applications. - **Frameworks and APIs:** Django, Flask, Angular, RxJS, Preact, Node.js, Bun, WordPress, REST APIs, Twilio, Scrapy.
- Guided medical staff through time-sensitive IT troubleshooting affecting patient care. - **Databases:** PostgreSQL, Microsoft SQL Server, MySQL, MongoDB, CouchDB, Redis.
- Monitored critical hospital infrastructure for performance and errors, correcting them promptly. - **Cloud and DevOps:** AWS, Azure DevOps, Cloudflare Workers, D1, Durable Objects, R2, Docker, Kubernetes, Linux, Git, Jira.
- Trained new help desk employees on their daily tasks and responsibilities - **Machine Learning and Mobile:** TensorFlow Lite, Google Cloud Vision API, natural language processing, Android.
- Remained on-call off hours for emergency assistance.
## Skills
### Programming Languages
Python (Flask, Django), JavaScript (Node.js, jQuery, Angular, AngularJS, RxJS, Preact, Bun), TypeScript, Go, PHP, Java, Kotlin, C, C++, CoffeeScript, HTML5, CSS3, Sass
### Database Technologies
- **SQL:** Microsoft SQL Server, MySQL Server, PostgreSQL Server
- **NoSQL:** MongoDB, CouchDB, Redis
- **Other:** Microsoft Access, Microsoft Excel
### Applications
- **Programming:** Microsoft Visual Studio, Visual Studio Code, PyCharm, Sublime Text 3, Devart dbForge, Microsoft SQL Studio, Vim, Eclipse, Git
- **Design:** Adobe Photoshop, Adobe Dreamweaver, Adobe Illustrator, Adobe Edge, Adobe InDesign
- **Productivity:** Microsoft Office, Google Docs (Drive), WordPerfect Suite
- **Virtualization:** VMware, VirtualBox, Docker, Kubernetes
### Cloud Technologies
- Microsoft 365 and Google Workspace Administration
- Amazon Web Services (AWS) Administration
- Microsoft Azure DevOps Administration
- Cloudflare Workers, D1, Durable Objects, and R2
### Other
- Jira Agile Project Management skills
- Responsive web design
- Advanced (and remote) Linux administration
- Search engine optimization (SEO) for Google and Bing
- Social media presence implementation (Facebook, Twitter, Instagram, etc.)
## Education ## Education
### University of New Mexico ### University of New Mexico
#### Certifications Programming studies in C++, advanced Visual C++, and Visual Basic.
- Beginning Programming in C++
- Intermediate Programming in C++
- Advanced Visual C++
- Beginning Visual Basic
- Intermediate Visual Basic
### Central New Mexico Community College (aka TVI) ### Central New Mexico Community College (aka TVI)
- Beginning Photoshop Coursework in Adobe Photoshop through advanced level and introductory Lightwave 3D.
- Intermediate Photoshop
- Advanced Photoshop
- Introduction to Lightwave 3D
## References
| Name | Role | Organization | Phone |
| --- | --- | --- | --- |
| David Foy | Senior Software Engineer | Covius | [407-954-1245](tel:+14079541245) |
| Warren Wright | CEO | SEAD Software | [201-988-1513](tel:+12019881513) |
| Ashley Park | Director | Clarity Diagnostics | [508-341-5387](tel:+15083415387) |
| Douglas Radecki | CEO | MyTap / Which Craft | [505-400-4636](tel:+15054004636) |
+1 -1
View File
@@ -22,7 +22,7 @@ resumes/ Matching HTML/PDF files for each generated version
## Generate a resume ## Generate a resume
The standalone generator reads `Alexander Herlan Resume 2024.md`, creates a self-contained HTML document, and prints that exact HTML to PDF using Python Playwright. The template and CSS are in `scripts/generate_resume.py`. It follows the original PDF's Letter page size, narrow left column for section labels, right column for content, black dividers, and green header accents. It uses local Raleway/Lato fonts when available and Arial otherwise; updated content flows across as many pages as needed. The original PDF is only a design reference, and is not needed to run the generator. The standalone generator reads `Alexander Herlan Resume 2024.md`, creates a self-contained HTML document, and prints that exact HTML to PDF using Python Playwright. The template and CSS are in `scripts/generate_resume.py`. The default `--layout original` retains the sidebar design with left-column section labels, right-column content, Letter pages, and green header accents. Section starts use normal-flow grid layout to preserve the PDF text reading order. The current content occupies three pages in this layout. Use `--layout ats` for the optional single-column layout, which fits the current content into two pages. Both layouts use the same Markdown and local Raleway/Lato fonts when available, with Arial as a fallback. The original PDF is only a design reference, and is not needed to run the generator.
Install the generator dependencies separately from the web backend: Install the generator dependencies separately from the web backend:
+139
View File
@@ -0,0 +1,139 @@
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="source-sha256" content="9bf54f81c5a18ff0bab9ee98795bd6eca95d386078cab27423c55760edc19013"><meta name="resume-layout" content="original"><title>Alexander Herlan | Resume</title><style>
@page { size: Letter; margin: 50pt 55.5pt 50pt 57.75pt; }
* { box-sizing: border-box; }
html { background: #e8e8e8; }
body {
width: 612pt; margin: 24px auto; padding: 50pt 55.5pt 50pt 57.75pt;
background: white; color: #111; font: 10pt/1.2 Lato, Arial, sans-serif;
-webkit-print-color-adjust: exact; print-color-adjust: exact;
}
header { display: grid; grid-template-columns: 166.5pt 1fr; gap: 18pt;
min-height: 124pt; break-inside: avoid; }
h1, h2, h3, h5, .contact-name { font-family: Raleway, Arial, sans-serif; }
h1 { font-size: 24pt; line-height: 1.16; margin: 0 0 5pt; }
.subtitle { font-size: 16pt; font-weight: bold; line-height: 1.2;
color: #38761d; margin: 0; }
.subtitle > span { display: block; }
.gradient-word { white-space: nowrap; }
.contact { border-top: 3pt solid #000; padding-top: 9pt; }
.contact-name { font-size: 12pt; font-weight: bold; margin: 0 0 3pt; }
.contact p { margin: 0 0 7pt; }
.contact-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 9pt 10pt; margin-top: 10pt; }
.contact-grid a { grid-column: span 2; display: block; min-width: 0;
border-left: 2pt solid #d6e7cb; padding-left: 7pt; font-size: 9pt;
line-height: 1.3; }
.contact-grid a.direct { grid-column: span 3; }
.contact-label { display: block; color: #72796d; font-size: 7pt;
letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; }
.contact-value { display: inline-block; }
a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; }
section { margin: 0 0 18pt 184.5pt; }
.section-start { display: grid; grid-template-columns: 166.5pt minmax(0, 1fr);
column-gap: 18pt; margin-left: -184.5pt; break-inside: avoid; break-after: avoid; }
.section-start > h2 + * { border-top: 3pt solid #000; padding-top: 10pt; }
h2 { width: 166.5pt;
font-size: 12pt; line-height: 1.2; margin: 0; }
h2::before { content: ''; display: block; width: 12pt;
border-top: 1.5pt solid #111; margin-bottom: 12pt; }
h3 { font-size: 12pt; line-height: 1.2; margin: 16pt 0 4pt; }
.section-start > h3 { margin-top: 0; }
h4 { color: #666; font-size: 10pt; margin: 8pt 0 4pt; }
h5, h6 { font-size: 11pt; margin: 12pt 0 4pt; }
h3, h4, h5, h6 { break-after: avoid; }
p { margin: 0 0 6pt; orphans: 3; widows: 3; }
p.dates { color: #666; font-size: 9pt; text-transform: uppercase;
margin-bottom: 8pt; break-after: avoid; }
p.dates em { font-style: normal; }
ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; }
li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; break-inside: avoid; }
li > p { margin-bottom: 2pt; }
.references { list-style: none; padding: 0; }
.references li { margin-bottom: 6pt; break-inside: avoid; }
table { width: 100%; border-collapse: collapse; font-size: 9pt; }
th, td { text-align: left; vertical-align: top; padding: 4pt;
border-bottom: 1px solid #ddd; overflow-wrap: anywhere; }
tr { break-inside: avoid; }
img { max-width: 100%; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
@media print {
html { background: white; }
body { width: auto; margin: 0; padding: 0; }
}
</style></head><body><header><div><h1>Alexander Herlan</h1>
<p class="subtitle"><span><span class="gradient-word"><span style="color:#286414">S</span><span style="color:#2c6818">e</span><span style="color:#316c1b">n</span><span style="color:#35701f">i</span><span style="color:#397423">o</span><span style="color:#3d7826">r</span></span> <span class="gradient-word"><span style="color:#46802e">S</span><span style="color:#4a8432">o</span><span style="color:#4e8835">f</span><span style="color:#538c39">t</span><span style="color:#57903d">w</span><span style="color:#5b9340">a</span><span style="color:#5f9744">r</span><span style="color:#649b48">e</span></span> <span class="gradient-word"><span style="color:#6ca34f">E</span><span style="color:#70a753">n</span><span style="color:#75ab57">g</span><span style="color:#79af5a">i</span><span style="color:#7db35e">n</span><span style="color:#81b762">e</span><span style="color:#86bb65">e</span><span style="color:#8abf69">r</span></span></span><span><span class="gradient-word"><span style="color:#286414">F</span><span style="color:#2d6919">u</span><span style="color:#336e1d">l</span><span style="color:#387322">l</span><span style="color:#3e7827">-</span><span style="color:#437d2c">S</span><span style="color:#498230">t</span><span style="color:#4e8735">a</span><span style="color:#548c3a">c</span><span style="color:#59923e">k</span></span> <span class="gradient-word"><span style="color:#649c48">&amp;</span></span> <span class="gradient-word"><span style="color:#6fa651">D</span><span style="color:#74ab56">e</span><span style="color:#7ab05b">v</span><span style="color:#7fb560">O</span><span style="color:#85ba64">p</span><span style="color:#8abf69">s</span></span></span></p></div><div class="contact"><p class="contact-name">Alexander Herlan</p><p>Albuquerque, NM</p>
<nav class="contact-grid" aria-label="Contact and social links"><a href="tel:+18134028692" class="direct"><span class="contact-label">Phone</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">8</span><span style="color:#316c1c">1</span><span style="color:#3a7523">3</span><span style="color:#437d2b">-</span><span style="color:#4c8533">4</span><span style="color:#558d3b">0</span><span style="color:#5d9642">2</span><span style="color:#669e4a">-</span><span style="color:#6fa652">8</span><span style="color:#78ae5a">6</span><span style="color:#81b761">9</span><span style="color:#8abf69">2</span></span></span></a><a href="mailto:alexwherlan@gmail.com" class="direct"><span class="contact-label">Email</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2d6918">l</span><span style="color:#326d1c">e</span><span style="color:#377221">x</span><span style="color:#3c7625">w</span><span style="color:#407b29">h</span><span style="color:#457f2e">e</span><span style="color:#4a8432">r</span><span style="color:#4f8836">l</span><span style="color:#548d3a">a</span><span style="color:#59923e">n</span><span style="color:#5e9643">@</span><span style="color:#639b47">g</span><span style="color:#689f4b">m</span><span style="color:#6da450">a</span><span style="color:#72a854">i</span><span style="color:#76ad58">l</span><span style="color:#7bb15c">.</span><span style="color:#80b660">c</span><span style="color:#85ba65">o</span><span style="color:#8abf69">m</span></span></span></a><a href="https://alex.herlan.dev"><span class="contact-label">Website</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2f6a1a">l</span><span style="color:#367120">e</span><span style="color:#3d7826">x</span><span style="color:#447e2c">.</span><span style="color:#4b8432">h</span><span style="color:#528b38">e</span><span style="color:#59923e">r</span><span style="color:#609845">l</span><span style="color:#679e4b">a</span><span style="color:#6ea551">n</span><span style="color:#75ac57">.</span><span style="color:#7cb25d">d</span><span style="color:#83b863">e</span><span style="color:#8abf69">v</span></span></span></a><a href="https://linkedin.com/in/alexander-herlan"><span class="contact-label">Profile</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">L</span><span style="color:#367120">i</span><span style="color:#447e2c">n</span><span style="color:#528b38">k</span><span style="color:#609845">e</span><span style="color:#6ea551">d</span><span style="color:#7cb25d">I</span><span style="color:#8abf69">n</span></span></span></a><a href="https://github.com/AlexanderHerlan"><span class="contact-label">Code</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">G</span><span style="color:#3c7625">i</span><span style="color:#4f8836">t</span><span style="color:#639b47">H</span><span style="color:#76ad58">u</span><span style="color:#8abf69">b</span></span></span></a></nav></div></header><main><section><div class="section-start"><h2>Summary</h2>
<p>Senior software engineer building Python and JavaScript applications, REST APIs, and cloud infrastructure. Experience modernizing real estate platforms, automating membership workflows, and deploying Android machine learning applications. Combines full-stack development with database engineering and DevOps.</p>
</div></section><section><div class="section-start"><h2>Work Experience</h2>
<h3>Independent Software Developer / Freelancer</h3>
</div><p class="dates"><em>June 2024 - Present</em></p>
<ul>
<li>Delivered 3 selected client projects spanning mortgage lending, membership management, and Android safety applications, covering architecture, implementation, cloud deployment, and support.</li>
</ul>
<h4>Selected Projects</h4>
<h5><a href="https://equityfundingsource.com">Equity Funding Source</a></h5>
<p class="dates"><em>April 2026 - July 2026</em></p>
<ul>
<li>Developed a Preact and Bun mortgage platform supporting 3 user groups: borrowers, lenders, and administrators, with application workflows, collaboration, and secure document handling.</li>
<li>Deployed serverless application logic and relational data on Cloudflare Workers and D1, with Durable Objects enabling real-time messaging and R2 storing loan documents.</li>
</ul>
<h5><a href="https://iipm.ie">IIPM.ie</a></h5>
<p class="dates"><em>April 2025 - March 2026</em></p>
<ul>
<li>Expanded WordPress landing pages into a PHP and PostgreSQL platform supporting 2 membership types, individual and organizational, with annual payments and monthly progress reviews.</li>
<li>Automated 3 previously manual workflows: program-timeline calculations, approved-leave handling, and PDF certificate issuance; added dashboards for membership, qualifications, payments, onboarding, and course progress.</li>
</ul>
<h5><a href="https://heroeyez.com">SafeSchoolz</a></h5>
<p class="dates"><em>June 2024 - June 2025</em></p>
<ul>
<li>Built 2 Android applications in Java and Kotlin: Media Pipe detects firearms, while Aegis coordinates incident alerts with the .NET-based HeroEyez portal.</li>
<li>Trained and tested a TensorFlow Lite detection model on 10,000+ firearm images, selecting it over YOLO to improve accuracy within mobile hardware constraints.</li>
<li>Integrated 60-second evidence clips, screenshots, and Twilio calls into the incident-alert workflow; completed deployment in June 2025 before the broader commercial rollout paused.</li>
</ul>
<h3>Covius, LLC / Senior Software Engineer</h3>
<p class="dates"><em>January 2022 - April 2024 | Pompano Beach, FL</em></p>
<ul>
<li>Integrated REST APIs and asynchronous auction updates into the RealtyBid.com redesign, giving bidders real-time auction status across desktop and mobile browsers.</li>
<li>Delivered responsive Angular and RxJS interfaces across desktop and mobile browsers, incorporating QA and business feedback through iterative development sprints.</li>
<li>Modernized a legacy database for the redesigned auction platform and created internal tools enabling website administration and customer support.</li>
</ul>
<h3>SEAD Software / Software Engineer</h3>
<p class="dates"><em>April 2021 - July 2022 | Delray Beach, FL</em></p>
<ul>
<li>Digitized physical laboratory documents with Python and Google Cloud Vision, automating text recognition and categorization for healthcare document processing.</li>
<li>Designed a Twilio messaging application that automatically responded to customer interactions and generated leads for law firms.</li>
<li>Established Azure DevOps development pipelines and instructed staff on their use, coordinating delivery across client projects backed by AWS infrastructure and a shared Git repository.</li>
</ul>
<h3>Clarity Diagnostics &amp; Lab Solutions / Director of IT</h3>
<p class="dates"><em>September 2020 - January 2022 | Boca Raton, FL</em></p>
<ul>
<li>Directed laboratory and diagnostics manufacturing IT operations through expansion to nationwide clients, including local and state governments.</li>
<li>Secured laboratory access with a badge system and enforced email security standards in Google Workspace and Microsoft 365; assisted medical equipment quality assurance.</li>
<li>Supervised IT staff and coordinated software quality control, deployment, and user training for SEAD Software while maintaining client-facing websites.</li>
</ul>
<h3>MyTap, aka Which Craft / Lead Developer</h3>
<p class="dates"><em>January 2016 - April 2020 | Albuquerque, NM</em></p>
<ul>
<li>Extracted online beer reviews with Python Scrapy and analyzed adjective frequency to generate flavor profiles used by the craft beer recommendation engine.</li>
<li>Implemented a Django and PostgreSQL backend serving beer recommendations through a responsive mobile web application developed with a design team.</li>
</ul>
<h3>TriCore Reference Laboratories / Production Support Specialist</h3>
<p class="dates"><em>April 2013 - January 2017 | Albuquerque, NM</em></p>
<ul>
<li>Monitored the production environment as the sole overnight specialist, troubleshooting and escalating incidents for systems supported by 60 staff during the day.</li>
<li>Resolved urgent hospital access and Sunquest issues, checked patient-record transfers between medical systems, and coached help desk staff on troubleshooting procedures.</li>
</ul>
</section><section><div class="section-start"><h2>Technical Skills</h2>
<ul>
<li><strong>Languages:</strong> Python, JavaScript, TypeScript, PHP, Go, Java, Kotlin, C, C++, HTML, CSS, Sass.</li>
<li><strong>Frameworks and APIs:</strong> Django, Flask, Angular, RxJS, Preact, Node.js, Bun, WordPress, REST APIs, Twilio, Scrapy.</li>
<li><strong>Databases:</strong> PostgreSQL, Microsoft SQL Server, MySQL, MongoDB, CouchDB, Redis.</li>
<li><strong>Cloud and DevOps:</strong> AWS, Azure DevOps, Cloudflare Workers, D1, Durable Objects, R2, Docker, Kubernetes, Linux, Git, Jira.</li>
<li><strong>Machine Learning and Mobile:</strong> TensorFlow Lite, Google Cloud Vision API, natural language processing, Android.</li>
</ul>
</div></section><section><div class="section-start"><h2>Education</h2>
<h3>University of New Mexico</h3>
</div><p>Programming studies in C++, advanced Visual C++, and Visual Basic.</p>
<h3>Central New Mexico Community College (aka TVI)</h3>
<p>Coursework in Adobe Photoshop through advanced level and introductory Lightwave 3D.</p></section></main></body></html>
Binary file not shown.
+164
View File
@@ -0,0 +1,164 @@
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="source-sha256" content="9018d883a60f686eda080e87f9864c5260caf1a7c6f81da62b3762e4f7003615"><meta name="resume-layout" content="ats"><title>Alexander Herlan | Resume</title><style>
@page { size: Letter; margin: 50pt 55.5pt 50pt 57.75pt; }
* { box-sizing: border-box; }
html { background: #e8e8e8; }
body {
width: 612pt; margin: 24px auto; padding: 50pt 55.5pt 50pt 57.75pt;
background: white; color: #111; font: 10pt/1.2 Lato, Arial, sans-serif;
-webkit-print-color-adjust: exact; print-color-adjust: exact;
}
header { display: grid; grid-template-columns: 166.5pt 1fr; gap: 18pt;
min-height: 124pt; break-inside: avoid; }
h1, h2, h3, h5, .contact-name { font-family: Raleway, Arial, sans-serif; }
h1 { font-size: 24pt; line-height: 1.16; margin: 0 0 5pt; }
.subtitle { font-size: 16pt; font-weight: bold; line-height: 1.2;
color: #38761d; margin: 0; }
.subtitle > span { display: block; }
.gradient-word { white-space: nowrap; }
.contact { border-top: 3pt solid #000; padding-top: 9pt; }
.contact-name { font-size: 12pt; font-weight: bold; margin: 0 0 3pt; }
.contact p { margin: 0 0 7pt; }
.contact-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 9pt 10pt; margin-top: 10pt; }
.contact-grid a { grid-column: span 2; display: block; min-width: 0;
border-left: 2pt solid #d6e7cb; padding-left: 7pt; font-size: 9pt;
line-height: 1.3; }
.contact-grid a.direct { grid-column: span 3; }
.contact-label { display: block; color: #72796d; font-size: 7pt;
letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; }
.contact-value { display: inline-block; }
a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; }
section { position: relative; margin: 0 0 18pt 184.5pt; }
.section-start { position: relative; border-top: 3pt solid #000;
padding-top: 10pt; break-inside: avoid; break-after: avoid; }
h2 { position: absolute; top: -3pt; left: -184.5pt; width: 166.5pt;
font-size: 12pt; line-height: 1.2; margin: 0; }
h2::before { content: ''; display: block; width: 12pt;
border-top: 1.5pt solid #111; margin-bottom: 12pt; }
h3 { font-size: 12pt; line-height: 1.2; margin: 16pt 0 4pt; }
.section-start > h3 { margin-top: 0; }
h4 { color: #666; font-size: 10pt; margin: 8pt 0 4pt; }
h5, h6 { font-size: 11pt; margin: 12pt 0 4pt; }
h3, h4, h5, h6 { break-after: avoid; }
p { margin: 0 0 6pt; orphans: 3; widows: 3; }
p.dates { color: #666; font-size: 9pt; text-transform: uppercase;
margin-bottom: 8pt; break-after: avoid; }
p.dates em { font-style: normal; }
ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; }
li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; }
li > p { margin-bottom: 2pt; }
.references { list-style: none; padding: 0; }
.references li { margin-bottom: 6pt; break-inside: avoid; }
table { width: 100%; border-collapse: collapse; font-size: 9pt; }
th, td { text-align: left; vertical-align: top; padding: 4pt;
border-bottom: 1px solid #ddd; overflow-wrap: anywhere; }
tr { break-inside: avoid; }
img { max-width: 100%; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
@media print {
html { background: white; }
body { width: auto; margin: 0; padding: 0; }
}
@page { size: Letter; margin: 40pt 43pt; }
body { padding: 40pt 43pt; font-size: 10.5pt; line-height: 1.22; }
header { display: block; min-height: 0; margin-bottom: 12pt; }
h1 { font-size: 23pt; margin-bottom: 3pt; }
.subtitle { font-size: 12pt; margin-bottom: 6pt; }
.subtitle > span { display: inline-block; margin-right: 10pt; }
.contact { border: 0; padding: 0; }
.contact-name { display: none; }
.contact p { margin-bottom: 4pt; }
.contact-grid { display: flex; flex-wrap: wrap; gap: 3pt 12pt; margin-top: 0; }
.contact-grid a { border: 0; padding: 0; font-size: 9.5pt; }
.contact-label { display: none; }
section { position: static; margin: 0 0 11pt; }
.section-start { position: static; border: 0; padding: 0; }
h2 { position: static; width: auto; font-size: 11pt; text-transform: uppercase;
border-bottom: 1pt solid #333; padding-bottom: 3pt; margin: 0 0 6pt; }
h2::before { display: none; }
h3 { font-size: 11pt; margin: 10pt 0 2pt; }
h4 { font-size: 10.5pt; margin: 6pt 0 3pt; }
h5, h6 { font-size: 10.5pt; margin: 6pt 0 2pt; }
p { margin-bottom: 5pt; }
p.dates { font-size: 9pt; margin-bottom: 4pt; }
ul, ol { padding-left: 15pt; margin: 3pt 0 7pt; }
li { margin-bottom: 3pt; break-inside: avoid; }
@media print { body { padding: 0; } }
</style></head><body><header><div><h1>Alexander Herlan</h1>
<p class="subtitle"><span><span class="gradient-word"><span style="color:#286414">S</span><span style="color:#2c6818">e</span><span style="color:#316c1b">n</span><span style="color:#35701f">i</span><span style="color:#397423">o</span><span style="color:#3d7826">r</span></span> <span class="gradient-word"><span style="color:#46802e">S</span><span style="color:#4a8432">o</span><span style="color:#4e8835">f</span><span style="color:#538c39">t</span><span style="color:#57903d">w</span><span style="color:#5b9340">a</span><span style="color:#5f9744">r</span><span style="color:#649b48">e</span></span> <span class="gradient-word"><span style="color:#6ca34f">E</span><span style="color:#70a753">n</span><span style="color:#75ab57">g</span><span style="color:#79af5a">i</span><span style="color:#7db35e">n</span><span style="color:#81b762">e</span><span style="color:#86bb65">e</span><span style="color:#8abf69">r</span></span></span><span><span class="gradient-word"><span style="color:#286414">D</span><span style="color:#2d6919">e</span><span style="color:#336e1d">v</span><span style="color:#387322">O</span><span style="color:#3e7827">p</span><span style="color:#437d2c">s</span></span> <span class="gradient-word"><span style="color:#4e8735">&amp;</span></span> <span class="gradient-word"><span style="color:#59923e">I</span><span style="color:#5e9743">T</span></span> <span class="gradient-word"><span style="color:#69a14d">M</span><span style="color:#6fa651">a</span><span style="color:#74ab56">n</span><span style="color:#7ab05b">a</span><span style="color:#7fb560">g</span><span style="color:#85ba64">e</span><span style="color:#8abf69">r</span></span></span></p></div><div class="contact"><p class="contact-name">Alexander Herlan</p><p>1207 El Portal NW, Albuquerque, NM 87107</p>
<nav class="contact-grid" aria-label="Contact and social links"><a href="tel:+18134028692" class="direct"><span class="contact-label">Phone</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">8</span><span style="color:#316c1c">1</span><span style="color:#3a7523">3</span><span style="color:#437d2b">-</span><span style="color:#4c8533">4</span><span style="color:#558d3b">0</span><span style="color:#5d9642">2</span><span style="color:#669e4a">-</span><span style="color:#6fa652">8</span><span style="color:#78ae5a">6</span><span style="color:#81b761">9</span><span style="color:#8abf69">2</span></span></span></a><a href="mailto:alexwherlan@gmail.com" class="direct"><span class="contact-label">Email</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2d6918">l</span><span style="color:#326d1c">e</span><span style="color:#377221">x</span><span style="color:#3c7625">w</span><span style="color:#407b29">h</span><span style="color:#457f2e">e</span><span style="color:#4a8432">r</span><span style="color:#4f8836">l</span><span style="color:#548d3a">a</span><span style="color:#59923e">n</span><span style="color:#5e9643">@</span><span style="color:#639b47">g</span><span style="color:#689f4b">m</span><span style="color:#6da450">a</span><span style="color:#72a854">i</span><span style="color:#76ad58">l</span><span style="color:#7bb15c">.</span><span style="color:#80b660">c</span><span style="color:#85ba65">o</span><span style="color:#8abf69">m</span></span></span></a><a href="https://alex.herlan.dev"><span class="contact-label">Website</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2f6a1a">l</span><span style="color:#367120">e</span><span style="color:#3d7826">x</span><span style="color:#447e2c">.</span><span style="color:#4b8432">h</span><span style="color:#528b38">e</span><span style="color:#59923e">r</span><span style="color:#609845">l</span><span style="color:#679e4b">a</span><span style="color:#6ea551">n</span><span style="color:#75ac57">.</span><span style="color:#7cb25d">d</span><span style="color:#83b863">e</span><span style="color:#8abf69">v</span></span></span></a><a href="https://linkedin.com/in/alexander-herlan"><span class="contact-label">Profile</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">L</span><span style="color:#367120">i</span><span style="color:#447e2c">n</span><span style="color:#528b38">k</span><span style="color:#609845">e</span><span style="color:#6ea551">d</span><span style="color:#7cb25d">I</span><span style="color:#8abf69">n</span></span></span></a><a href="https://github.com/AlexanderHerlan"><span class="contact-label">Code</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">G</span><span style="color:#3c7625">i</span><span style="color:#4f8836">t</span><span style="color:#639b47">H</span><span style="color:#76ad58">u</span><span style="color:#8abf69">b</span></span></span></a></nav></div></header><main><section><div class="section-start"><h2>Summary</h2>
<p>Senior software engineer specializing in full-stack Python and JavaScript development, REST APIs, and cloud deployment. Built web platforms for real estate, membership management, and mortgage lending, plus Android applications using machine learning. Background includes DevOps, database modernization, healthcare systems, and IT management.</p>
</div></section><section><div class="section-start"><h2>Work Experience</h2>
<h3>Independent Software Developer / Freelancer</h3>
</div><p class="dates"><em>June 2024 - Present</em></p>
<ul>
<li>Deliver web and mobile applications for clients sourced through Upwork, agency partnerships, and referrals, covering architecture, implementation, cloud deployment, and ongoing support.</li>
</ul>
<h4>Selected Projects</h4>
<h5><a href="https://equityfundingsource.com">Equity Funding Source</a></h5>
<p class="dates"><em>April 2026 - July 2026</em></p>
<ul>
<li>Built a mortgage-lending platform with Preact and Bun for borrower applications, lender collaboration, administrative oversight, and secure document handling.</li>
<li>Deployed Cloudflare Workers and D1 for application logic and data, Durable Objects for real-time messaging, and R2 for document storage.</li>
</ul>
<h5><a href="https://iipm.ie">IIPM.ie</a></h5>
<p class="dates"><em>April 2025 - March 2026</em></p>
<ul>
<li>Expanded WordPress landing pages into a PHP and PostgreSQL membership platform supporting individual and organizational applications, qualification requirements, annual payments, and course-progress reviews.</li>
<li>Automated program timelines, approved-leave calculations, and PDF certificate issuance; built administrative dashboards for membership, onboarding, qualifications, payments, and course progress.</li>
</ul>
<h5><a href="https://heroeyez.com">SafeSchoolz</a></h5>
<p class="dates"><em>June 2024 - June 2025</em></p>
<ul>
<li>Developed two Android applications, Media Pipe and Aegis, in Java and Kotlin to detect firearms and coordinate alerts with the .NET-based HeroEyez portal.</li>
<li>Evaluated YOLO and adopted TensorFlow Lite for mobile detection; trained and tested the model using more than 10,000 firearm images from Roboflow and custom samples.</li>
<li>Integrated screenshots, one-minute evidence clips, and a Twilio call workflow into incident alerts; deployed the application in June 2025 before commercial rollout was paused.</li>
</ul>
<h3>Covius, LLC / Senior Software Engineer</h3>
<p class="dates"><em>January 2022 - April 2024 | Pompano Beach, FL</em></p>
<ul>
<li>Redesigned RealtyBid.com frontend and backend components with the engineering team, integrating REST APIs and asynchronous updates for real-time auction status.</li>
<li>Built responsive Angular and RxJS interfaces for desktop and mobile users, refining the experience with QA testers and business partners through iterative sprints.</li>
<li>Adapted a legacy database for the redesigned platform and developed internal tools for website administration and customer support.</li>
</ul>
<h3>SEAD Software / Software Engineer</h3>
<p class="dates"><em>April 2021 - July 2022 | Delray Beach, FL</em></p>
<ul>
<li>Implemented Python document processing with the Google Cloud Vision API to recognize and categorize physical laboratory documents.</li>
<li>Created a Twilio text messaging application to automate customer responses and generate leads for law firms.</li>
<li>Configured AWS infrastructure and Azure DevOps development pipelines; trained staff on Azure DevOps and maintained a shared Git repository for multiple clients.</li>
</ul>
<h3>Clarity Diagnostics &amp; Lab Solutions / Director of IT</h3>
<p class="dates"><em>September 2020 - January 2022 | Boca Raton, FL</em></p>
<ul>
<li>Directed IT operations for a medical laboratory and diagnostics manufacturer expanding to serve organizations nationwide, including local and state governments.</li>
<li>Implemented laboratory badge access and email security standards across Google Workspace and Microsoft 365; supported laboratory expansion and medical equipment quality assurance.</li>
<li>Managed IT staff, client-facing websites, and software quality control, deployment, and training for sister company SEAD Software.</li>
</ul>
<h3>MyTap, aka Which Craft / Lead Developer</h3>
<p class="dates"><em>January 2016 - April 2020 | Albuquerque, NM</em></p>
<ul>
<li>Engineered a Python Scrapy pipeline and natural language processing logic to derive craft beer flavor profiles from adjective frequency in online reviews.</li>
<li>Delivered a mobile-friendly recommendation application with designers, backed by Django and PostgreSQL.</li>
</ul>
<h3>TriCore Reference Laboratories / Production Support Specialist</h3>
<p class="dates"><em>April 2013 - January 2017 | Albuquerque, NM</em></p>
<ul>
<li>Served as the sole overnight production support specialist for an environment supported by 60 staff during the day, handling monitoring, troubleshooting, and escalation.</li>
<li>Resolved time-sensitive hospital IT issues, monitored patient-record transfers across medical systems, and supported Sunquest applications; trained help desk staff and provided on-call assistance.</li>
</ul>
</section><section><div class="section-start"><h2>Technical Skills</h2>
<ul>
<li><strong>Languages:</strong> Python, JavaScript, TypeScript, PHP, Go, Java, Kotlin, C, C++, HTML, CSS, Sass.</li>
<li><strong>Frameworks and APIs:</strong> Django, Flask, Angular, RxJS, Preact, Node.js, Bun, WordPress, REST APIs, Twilio, Scrapy.</li>
<li><strong>Databases:</strong> PostgreSQL, Microsoft SQL Server, MySQL, MongoDB, CouchDB, Redis.</li>
<li><strong>Cloud and DevOps:</strong> AWS, Azure DevOps, Cloudflare Workers, D1, Durable Objects, R2, Docker, Kubernetes, Linux, Git, Jira.</li>
<li><strong>Machine Learning and Mobile:</strong> TensorFlow Lite, Google Cloud Vision API, natural language processing, Android.</li>
</ul>
</div></section><section><div class="section-start"><h2>Education</h2>
<h3>University of New Mexico</h3>
</div><p>Programming studies: Beginning Programming in C++, Intermediate Programming in C++, Advanced Visual C++, Beginning Visual Basic, Intermediate Visual Basic.</p>
<h3>Central New Mexico Community College (aka TVI)</h3>
<p>Coursework: Beginning, Intermediate, and Advanced Photoshop; Introduction to Lightwave 3D.</p></section></main></body></html>
Binary file not shown.
+164
View File
@@ -0,0 +1,164 @@
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="source-sha256" content="a0511788815055ad6cfd659b8ce52dfae3788e8301c78b4ebe72fa2811e2a67f"><meta name="resume-layout" content="ats"><title>Alexander Herlan | Resume</title><style>
@page { size: Letter; margin: 50pt 55.5pt 50pt 57.75pt; }
* { box-sizing: border-box; }
html { background: #e8e8e8; }
body {
width: 612pt; margin: 24px auto; padding: 50pt 55.5pt 50pt 57.75pt;
background: white; color: #111; font: 10pt/1.2 Lato, Arial, sans-serif;
-webkit-print-color-adjust: exact; print-color-adjust: exact;
}
header { display: grid; grid-template-columns: 166.5pt 1fr; gap: 18pt;
min-height: 124pt; break-inside: avoid; }
h1, h2, h3, h5, .contact-name { font-family: Raleway, Arial, sans-serif; }
h1 { font-size: 24pt; line-height: 1.16; margin: 0 0 5pt; }
.subtitle { font-size: 16pt; font-weight: bold; line-height: 1.2;
color: #38761d; margin: 0; }
.subtitle > span { display: block; }
.gradient-word { white-space: nowrap; }
.contact { border-top: 3pt solid #000; padding-top: 9pt; }
.contact-name { font-size: 12pt; font-weight: bold; margin: 0 0 3pt; }
.contact p { margin: 0 0 7pt; }
.contact-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 9pt 10pt; margin-top: 10pt; }
.contact-grid a { grid-column: span 2; display: block; min-width: 0;
border-left: 2pt solid #d6e7cb; padding-left: 7pt; font-size: 9pt;
line-height: 1.3; }
.contact-grid a.direct { grid-column: span 3; }
.contact-label { display: block; color: #72796d; font-size: 7pt;
letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; }
.contact-value { display: inline-block; }
a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; }
section { position: relative; margin: 0 0 18pt 184.5pt; }
.section-start { position: relative; border-top: 3pt solid #000;
padding-top: 10pt; break-inside: avoid; break-after: avoid; }
h2 { position: absolute; top: -3pt; left: -184.5pt; width: 166.5pt;
font-size: 12pt; line-height: 1.2; margin: 0; }
h2::before { content: ''; display: block; width: 12pt;
border-top: 1.5pt solid #111; margin-bottom: 12pt; }
h3 { font-size: 12pt; line-height: 1.2; margin: 16pt 0 4pt; }
.section-start > h3 { margin-top: 0; }
h4 { color: #666; font-size: 10pt; margin: 8pt 0 4pt; }
h5, h6 { font-size: 11pt; margin: 12pt 0 4pt; }
h3, h4, h5, h6 { break-after: avoid; }
p { margin: 0 0 6pt; orphans: 3; widows: 3; }
p.dates { color: #666; font-size: 9pt; text-transform: uppercase;
margin-bottom: 8pt; break-after: avoid; }
p.dates em { font-style: normal; }
ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; }
li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; }
li > p { margin-bottom: 2pt; }
.references { list-style: none; padding: 0; }
.references li { margin-bottom: 6pt; break-inside: avoid; }
table { width: 100%; border-collapse: collapse; font-size: 9pt; }
th, td { text-align: left; vertical-align: top; padding: 4pt;
border-bottom: 1px solid #ddd; overflow-wrap: anywhere; }
tr { break-inside: avoid; }
img { max-width: 100%; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
@media print {
html { background: white; }
body { width: auto; margin: 0; padding: 0; }
}
@page { size: Letter; margin: 40pt 43pt; }
body { padding: 40pt 43pt; font-size: 10.5pt; line-height: 1.22; }
header { display: block; min-height: 0; margin-bottom: 12pt; }
h1 { font-size: 23pt; margin-bottom: 3pt; }
.subtitle { font-size: 12pt; margin-bottom: 6pt; }
.subtitle > span { display: inline-block; margin-right: 10pt; }
.contact { border: 0; padding: 0; }
.contact-name { display: none; }
.contact p { margin-bottom: 4pt; }
.contact-grid { display: flex; flex-wrap: wrap; gap: 3pt 12pt; margin-top: 0; }
.contact-grid a { border: 0; padding: 0; font-size: 9.5pt; }
.contact-label { display: none; }
section { position: static; margin: 0 0 11pt; }
.section-start { position: static; border: 0; padding: 0; }
h2 { position: static; width: auto; font-size: 11pt; text-transform: uppercase;
border-bottom: 1pt solid #333; padding-bottom: 3pt; margin: 0 0 6pt; }
h2::before { display: none; }
h3 { font-size: 11pt; margin: 10pt 0 2pt; }
h4 { font-size: 10.5pt; margin: 6pt 0 3pt; }
h5, h6 { font-size: 10.5pt; margin: 6pt 0 2pt; }
p { margin-bottom: 5pt; }
p.dates { font-size: 9pt; margin-bottom: 4pt; }
ul, ol { padding-left: 15pt; margin: 3pt 0 7pt; }
li { margin-bottom: 3pt; break-inside: avoid; }
@media print { body { padding: 0; } }
</style></head><body><header><div><h1>Alexander Herlan</h1>
<p class="subtitle"><span><span class="gradient-word"><span style="color:#286414">S</span><span style="color:#2c6818">e</span><span style="color:#316c1b">n</span><span style="color:#35701f">i</span><span style="color:#397423">o</span><span style="color:#3d7826">r</span></span> <span class="gradient-word"><span style="color:#46802e">S</span><span style="color:#4a8432">o</span><span style="color:#4e8835">f</span><span style="color:#538c39">t</span><span style="color:#57903d">w</span><span style="color:#5b9340">a</span><span style="color:#5f9744">r</span><span style="color:#649b48">e</span></span> <span class="gradient-word"><span style="color:#6ca34f">E</span><span style="color:#70a753">n</span><span style="color:#75ab57">g</span><span style="color:#79af5a">i</span><span style="color:#7db35e">n</span><span style="color:#81b762">e</span><span style="color:#86bb65">e</span><span style="color:#8abf69">r</span></span></span><span><span class="gradient-word"><span style="color:#286414">F</span><span style="color:#2d6919">u</span><span style="color:#336e1d">l</span><span style="color:#387322">l</span><span style="color:#3e7827">-</span><span style="color:#437d2c">S</span><span style="color:#498230">t</span><span style="color:#4e8735">a</span><span style="color:#548c3a">c</span><span style="color:#59923e">k</span></span> <span class="gradient-word"><span style="color:#649c48">&amp;</span></span> <span class="gradient-word"><span style="color:#6fa651">D</span><span style="color:#74ab56">e</span><span style="color:#7ab05b">v</span><span style="color:#7fb560">O</span><span style="color:#85ba64">p</span><span style="color:#8abf69">s</span></span></span></p></div><div class="contact"><p class="contact-name">Alexander Herlan</p><p>Albuquerque, NM</p>
<nav class="contact-grid" aria-label="Contact and social links"><a href="tel:+18134028692" class="direct"><span class="contact-label">Phone</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">8</span><span style="color:#316c1c">1</span><span style="color:#3a7523">3</span><span style="color:#437d2b">-</span><span style="color:#4c8533">4</span><span style="color:#558d3b">0</span><span style="color:#5d9642">2</span><span style="color:#669e4a">-</span><span style="color:#6fa652">8</span><span style="color:#78ae5a">6</span><span style="color:#81b761">9</span><span style="color:#8abf69">2</span></span></span></a><a href="mailto:alexwherlan@gmail.com" class="direct"><span class="contact-label">Email</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2d6918">l</span><span style="color:#326d1c">e</span><span style="color:#377221">x</span><span style="color:#3c7625">w</span><span style="color:#407b29">h</span><span style="color:#457f2e">e</span><span style="color:#4a8432">r</span><span style="color:#4f8836">l</span><span style="color:#548d3a">a</span><span style="color:#59923e">n</span><span style="color:#5e9643">@</span><span style="color:#639b47">g</span><span style="color:#689f4b">m</span><span style="color:#6da450">a</span><span style="color:#72a854">i</span><span style="color:#76ad58">l</span><span style="color:#7bb15c">.</span><span style="color:#80b660">c</span><span style="color:#85ba65">o</span><span style="color:#8abf69">m</span></span></span></a><a href="https://alex.herlan.dev"><span class="contact-label">Website</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2f6a1a">l</span><span style="color:#367120">e</span><span style="color:#3d7826">x</span><span style="color:#447e2c">.</span><span style="color:#4b8432">h</span><span style="color:#528b38">e</span><span style="color:#59923e">r</span><span style="color:#609845">l</span><span style="color:#679e4b">a</span><span style="color:#6ea551">n</span><span style="color:#75ac57">.</span><span style="color:#7cb25d">d</span><span style="color:#83b863">e</span><span style="color:#8abf69">v</span></span></span></a><a href="https://linkedin.com/in/alexander-herlan"><span class="contact-label">Profile</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">L</span><span style="color:#367120">i</span><span style="color:#447e2c">n</span><span style="color:#528b38">k</span><span style="color:#609845">e</span><span style="color:#6ea551">d</span><span style="color:#7cb25d">I</span><span style="color:#8abf69">n</span></span></span></a><a href="https://github.com/AlexanderHerlan"><span class="contact-label">Code</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">G</span><span style="color:#3c7625">i</span><span style="color:#4f8836">t</span><span style="color:#639b47">H</span><span style="color:#76ad58">u</span><span style="color:#8abf69">b</span></span></span></a></nav></div></header><main><section><div class="section-start"><h2>Summary</h2>
<p>Senior software engineer building Python and JavaScript applications, REST APIs, and cloud infrastructure. Experience modernizing real estate platforms, automating membership workflows, and deploying Android machine learning applications. Combines full-stack development with database engineering and DevOps.</p>
</div></section><section><div class="section-start"><h2>Work Experience</h2>
<h3>Independent Software Developer / Freelancer</h3>
</div><p class="dates"><em>June 2024 - Present</em></p>
<ul>
<li>Translate client requirements into web and mobile applications, directing architecture, implementation, cloud deployment, and ongoing support for Upwork engagements and agency partnerships.</li>
</ul>
<h4>Selected Projects</h4>
<h5><a href="https://equityfundingsource.com">Equity Funding Source</a></h5>
<p class="dates"><em>April 2026 - July 2026</em></p>
<ul>
<li>Developed a Preact and Bun mortgage platform connecting borrower applications, lender collaboration, administrative oversight, and secure document handling in one system.</li>
<li>Deployed serverless application logic and relational data on Cloudflare Workers and D1, with Durable Objects enabling real-time messaging and R2 storing loan documents.</li>
</ul>
<h5><a href="https://iipm.ie">IIPM.ie</a></h5>
<p class="dates"><em>April 2025 - March 2026</em></p>
<ul>
<li>Expanded WordPress landing pages into a PHP and PostgreSQL platform handling membership applications, qualification requirements, annual payments, and monthly course-progress reviews.</li>
<li>Automated previously manual program-timeline calculations, approved-leave handling, and PDF certificate issuance; consolidated membership, payment, and course-progress data into administrative dashboards.</li>
</ul>
<h5><a href="https://heroeyez.com">SafeSchoolz</a></h5>
<p class="dates"><em>June 2024 - June 2025</em></p>
<ul>
<li>Built 2 Android applications in Java and Kotlin: Media Pipe detects firearms, while Aegis coordinates incident alerts with the .NET-based HeroEyez portal.</li>
<li>Trained and tested a TensorFlow Lite detection model on 10,000+ firearm images, selecting it over YOLO to improve accuracy within mobile hardware constraints.</li>
<li>Integrated 60-second evidence clips, screenshots, and Twilio calls into the incident-alert workflow; completed deployment in June 2025 before the broader commercial rollout paused.</li>
</ul>
<h3>Covius, LLC / Senior Software Engineer</h3>
<p class="dates"><em>January 2022 - April 2024 | Pompano Beach, FL</em></p>
<ul>
<li>Redesigned RealtyBid.com frontend and backend components with the engineering team, exposing real-time auction status through REST APIs and asynchronous updates.</li>
<li>Delivered responsive Angular and RxJS interfaces across desktop and mobile browsers, incorporating QA and business feedback through iterative development sprints.</li>
<li>Modernized a legacy database for the redesigned auction platform and created internal tools enabling website administration and customer support.</li>
</ul>
<h3>SEAD Software / Software Engineer</h3>
<p class="dates"><em>April 2021 - July 2022 | Delray Beach, FL</em></p>
<ul>
<li>Automated laboratory document recognition and categorization with Python and the Google Cloud Vision API, converting physical records into digitally classified documents.</li>
<li>Designed a Twilio messaging application that automatically responded to customer interactions and generated leads for law firms.</li>
<li>Established Azure DevOps development pipelines and trained staff on their use, coordinating delivery across client projects backed by AWS infrastructure and a shared Git repository.</li>
</ul>
<h3>Clarity Diagnostics &amp; Lab Solutions / Director of IT</h3>
<p class="dates"><em>September 2020 - January 2022 | Boca Raton, FL</em></p>
<ul>
<li>Directed laboratory and diagnostics manufacturing IT operations through expansion to nationwide clients, including local and state governments.</li>
<li>Secured laboratory access with a badge system and enforced email security standards in Google Workspace and Microsoft 365; assisted medical equipment quality assurance.</li>
<li>Supervised IT staff and coordinated software quality control, deployment, and user training for SEAD Software while maintaining client-facing websites.</li>
</ul>
<h3>MyTap, aka Which Craft / Lead Developer</h3>
<p class="dates"><em>January 2016 - April 2020 | Albuquerque, NM</em></p>
<ul>
<li>Engineered a Python Scrapy pipeline and natural language processing logic that transformed online beer reviews into flavor profiles for a recommendation engine.</li>
<li>Implemented a Django and PostgreSQL backend serving beer recommendations through a responsive mobile web application developed with a design team.</li>
</ul>
<h3>TriCore Reference Laboratories / Production Support Specialist</h3>
<p class="dates"><em>April 2013 - January 2017 | Albuquerque, NM</em></p>
<ul>
<li>Monitored the production environment as the sole overnight specialist, troubleshooting and escalating incidents for systems supported by 60 staff during the day.</li>
<li>Resolved urgent hospital access and Sunquest issues, checked patient-record transfers between medical systems, and trained help desk staff on troubleshooting procedures.</li>
</ul>
</section><section><div class="section-start"><h2>Technical Skills</h2>
<ul>
<li><strong>Languages:</strong> Python, JavaScript, TypeScript, PHP, Go, Java, Kotlin, C, C++, HTML, CSS, Sass.</li>
<li><strong>Frameworks and APIs:</strong> Django, Flask, Angular, RxJS, Preact, Node.js, Bun, WordPress, REST APIs, Twilio, Scrapy.</li>
<li><strong>Databases:</strong> PostgreSQL, Microsoft SQL Server, MySQL, MongoDB, CouchDB, Redis.</li>
<li><strong>Cloud and DevOps:</strong> AWS, Azure DevOps, Cloudflare Workers, D1, Durable Objects, R2, Docker, Kubernetes, Linux, Git, Jira.</li>
<li><strong>Machine Learning and Mobile:</strong> TensorFlow Lite, Google Cloud Vision API, natural language processing, Android.</li>
</ul>
</div></section><section><div class="section-start"><h2>Education</h2>
<h3>University of New Mexico</h3>
</div><p>Programming studies in C++, advanced Visual C++, and Visual Basic.</p>
<h3>Central New Mexico Community College (aka TVI)</h3>
<p>Coursework in Adobe Photoshop through advanced level and introductory Lightwave 3D.</p></section></main></body></html>
Binary file not shown.
+164
View File
@@ -0,0 +1,164 @@
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="source-sha256" content="673ed0b4d9c6fc1a060461cf806131148347712ccbfff09f287348a514bd3784"><meta name="resume-layout" content="ats"><title>Alexander Herlan | Resume</title><style>
@page { size: Letter; margin: 50pt 55.5pt 50pt 57.75pt; }
* { box-sizing: border-box; }
html { background: #e8e8e8; }
body {
width: 612pt; margin: 24px auto; padding: 50pt 55.5pt 50pt 57.75pt;
background: white; color: #111; font: 10pt/1.2 Lato, Arial, sans-serif;
-webkit-print-color-adjust: exact; print-color-adjust: exact;
}
header { display: grid; grid-template-columns: 166.5pt 1fr; gap: 18pt;
min-height: 124pt; break-inside: avoid; }
h1, h2, h3, h5, .contact-name { font-family: Raleway, Arial, sans-serif; }
h1 { font-size: 24pt; line-height: 1.16; margin: 0 0 5pt; }
.subtitle { font-size: 16pt; font-weight: bold; line-height: 1.2;
color: #38761d; margin: 0; }
.subtitle > span { display: block; }
.gradient-word { white-space: nowrap; }
.contact { border-top: 3pt solid #000; padding-top: 9pt; }
.contact-name { font-size: 12pt; font-weight: bold; margin: 0 0 3pt; }
.contact p { margin: 0 0 7pt; }
.contact-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 9pt 10pt; margin-top: 10pt; }
.contact-grid a { grid-column: span 2; display: block; min-width: 0;
border-left: 2pt solid #d6e7cb; padding-left: 7pt; font-size: 9pt;
line-height: 1.3; }
.contact-grid a.direct { grid-column: span 3; }
.contact-label { display: block; color: #72796d; font-size: 7pt;
letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; }
.contact-value { display: inline-block; }
a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; }
section { position: relative; margin: 0 0 18pt 184.5pt; }
.section-start { position: relative; border-top: 3pt solid #000;
padding-top: 10pt; break-inside: avoid; break-after: avoid; }
h2 { position: absolute; top: -3pt; left: -184.5pt; width: 166.5pt;
font-size: 12pt; line-height: 1.2; margin: 0; }
h2::before { content: ''; display: block; width: 12pt;
border-top: 1.5pt solid #111; margin-bottom: 12pt; }
h3 { font-size: 12pt; line-height: 1.2; margin: 16pt 0 4pt; }
.section-start > h3 { margin-top: 0; }
h4 { color: #666; font-size: 10pt; margin: 8pt 0 4pt; }
h5, h6 { font-size: 11pt; margin: 12pt 0 4pt; }
h3, h4, h5, h6 { break-after: avoid; }
p { margin: 0 0 6pt; orphans: 3; widows: 3; }
p.dates { color: #666; font-size: 9pt; text-transform: uppercase;
margin-bottom: 8pt; break-after: avoid; }
p.dates em { font-style: normal; }
ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; }
li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; }
li > p { margin-bottom: 2pt; }
.references { list-style: none; padding: 0; }
.references li { margin-bottom: 6pt; break-inside: avoid; }
table { width: 100%; border-collapse: collapse; font-size: 9pt; }
th, td { text-align: left; vertical-align: top; padding: 4pt;
border-bottom: 1px solid #ddd; overflow-wrap: anywhere; }
tr { break-inside: avoid; }
img { max-width: 100%; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
@media print {
html { background: white; }
body { width: auto; margin: 0; padding: 0; }
}
@page { size: Letter; margin: 40pt 43pt; }
body { padding: 40pt 43pt; font-size: 10.5pt; line-height: 1.22; }
header { display: block; min-height: 0; margin-bottom: 12pt; }
h1 { font-size: 23pt; margin-bottom: 3pt; }
.subtitle { font-size: 12pt; margin-bottom: 6pt; }
.subtitle > span { display: inline-block; margin-right: 10pt; }
.contact { border: 0; padding: 0; }
.contact-name { display: none; }
.contact p { margin-bottom: 4pt; }
.contact-grid { display: flex; flex-wrap: wrap; gap: 3pt 12pt; margin-top: 0; }
.contact-grid a { border: 0; padding: 0; font-size: 9.5pt; }
.contact-label { display: none; }
section { position: static; margin: 0 0 11pt; }
.section-start { position: static; border: 0; padding: 0; }
h2 { position: static; width: auto; font-size: 11pt; text-transform: uppercase;
border-bottom: 1pt solid #333; padding-bottom: 3pt; margin: 0 0 6pt; }
h2::before { display: none; }
h3 { font-size: 11pt; margin: 10pt 0 2pt; }
h4 { font-size: 10.5pt; margin: 6pt 0 3pt; }
h5, h6 { font-size: 10.5pt; margin: 6pt 0 2pt; }
p { margin-bottom: 5pt; }
p.dates { font-size: 9pt; margin-bottom: 4pt; }
ul, ol { padding-left: 15pt; margin: 3pt 0 7pt; }
li { margin-bottom: 3pt; break-inside: avoid; }
@media print { body { padding: 0; } }
</style></head><body><header><div><h1>Alexander Herlan</h1>
<p class="subtitle"><span><span class="gradient-word"><span style="color:#286414">S</span><span style="color:#2c6818">e</span><span style="color:#316c1b">n</span><span style="color:#35701f">i</span><span style="color:#397423">o</span><span style="color:#3d7826">r</span></span> <span class="gradient-word"><span style="color:#46802e">S</span><span style="color:#4a8432">o</span><span style="color:#4e8835">f</span><span style="color:#538c39">t</span><span style="color:#57903d">w</span><span style="color:#5b9340">a</span><span style="color:#5f9744">r</span><span style="color:#649b48">e</span></span> <span class="gradient-word"><span style="color:#6ca34f">E</span><span style="color:#70a753">n</span><span style="color:#75ab57">g</span><span style="color:#79af5a">i</span><span style="color:#7db35e">n</span><span style="color:#81b762">e</span><span style="color:#86bb65">e</span><span style="color:#8abf69">r</span></span></span><span><span class="gradient-word"><span style="color:#286414">F</span><span style="color:#2d6919">u</span><span style="color:#336e1d">l</span><span style="color:#387322">l</span><span style="color:#3e7827">-</span><span style="color:#437d2c">S</span><span style="color:#498230">t</span><span style="color:#4e8735">a</span><span style="color:#548c3a">c</span><span style="color:#59923e">k</span></span> <span class="gradient-word"><span style="color:#649c48">&amp;</span></span> <span class="gradient-word"><span style="color:#6fa651">D</span><span style="color:#74ab56">e</span><span style="color:#7ab05b">v</span><span style="color:#7fb560">O</span><span style="color:#85ba64">p</span><span style="color:#8abf69">s</span></span></span></p></div><div class="contact"><p class="contact-name">Alexander Herlan</p><p>Albuquerque, NM</p>
<nav class="contact-grid" aria-label="Contact and social links"><a href="tel:+18134028692" class="direct"><span class="contact-label">Phone</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">8</span><span style="color:#316c1c">1</span><span style="color:#3a7523">3</span><span style="color:#437d2b">-</span><span style="color:#4c8533">4</span><span style="color:#558d3b">0</span><span style="color:#5d9642">2</span><span style="color:#669e4a">-</span><span style="color:#6fa652">8</span><span style="color:#78ae5a">6</span><span style="color:#81b761">9</span><span style="color:#8abf69">2</span></span></span></a><a href="mailto:alexwherlan@gmail.com" class="direct"><span class="contact-label">Email</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2d6918">l</span><span style="color:#326d1c">e</span><span style="color:#377221">x</span><span style="color:#3c7625">w</span><span style="color:#407b29">h</span><span style="color:#457f2e">e</span><span style="color:#4a8432">r</span><span style="color:#4f8836">l</span><span style="color:#548d3a">a</span><span style="color:#59923e">n</span><span style="color:#5e9643">@</span><span style="color:#639b47">g</span><span style="color:#689f4b">m</span><span style="color:#6da450">a</span><span style="color:#72a854">i</span><span style="color:#76ad58">l</span><span style="color:#7bb15c">.</span><span style="color:#80b660">c</span><span style="color:#85ba65">o</span><span style="color:#8abf69">m</span></span></span></a><a href="https://alex.herlan.dev"><span class="contact-label">Website</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2f6a1a">l</span><span style="color:#367120">e</span><span style="color:#3d7826">x</span><span style="color:#447e2c">.</span><span style="color:#4b8432">h</span><span style="color:#528b38">e</span><span style="color:#59923e">r</span><span style="color:#609845">l</span><span style="color:#679e4b">a</span><span style="color:#6ea551">n</span><span style="color:#75ac57">.</span><span style="color:#7cb25d">d</span><span style="color:#83b863">e</span><span style="color:#8abf69">v</span></span></span></a><a href="https://linkedin.com/in/alexander-herlan"><span class="contact-label">Profile</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">L</span><span style="color:#367120">i</span><span style="color:#447e2c">n</span><span style="color:#528b38">k</span><span style="color:#609845">e</span><span style="color:#6ea551">d</span><span style="color:#7cb25d">I</span><span style="color:#8abf69">n</span></span></span></a><a href="https://github.com/AlexanderHerlan"><span class="contact-label">Code</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">G</span><span style="color:#3c7625">i</span><span style="color:#4f8836">t</span><span style="color:#639b47">H</span><span style="color:#76ad58">u</span><span style="color:#8abf69">b</span></span></span></a></nav></div></header><main><section><div class="section-start"><h2>Summary</h2>
<p>Senior software engineer building Python and JavaScript applications, REST APIs, and cloud infrastructure. Experience modernizing real estate platforms, automating membership workflows, and deploying Android machine learning applications. Combines full-stack development with database engineering and DevOps.</p>
</div></section><section><div class="section-start"><h2>Work Experience</h2>
<h3>Independent Software Developer / Freelancer</h3>
</div><p class="dates"><em>June 2024 - Present</em></p>
<ul>
<li>Delivered 3 selected client projects spanning mortgage lending, membership management, and Android safety applications, covering architecture, implementation, cloud deployment, and support.</li>
</ul>
<h4>Selected Projects</h4>
<h5><a href="https://equityfundingsource.com">Equity Funding Source</a></h5>
<p class="dates"><em>April 2026 - July 2026</em></p>
<ul>
<li>Developed a Preact and Bun mortgage platform supporting 3 user groups: borrowers, lenders, and administrators, with application workflows, collaboration, and secure document handling.</li>
<li>Deployed serverless application logic and relational data on Cloudflare Workers and D1, with Durable Objects enabling real-time messaging and R2 storing loan documents.</li>
</ul>
<h5><a href="https://iipm.ie">IIPM.ie</a></h5>
<p class="dates"><em>April 2025 - March 2026</em></p>
<ul>
<li>Expanded WordPress landing pages into a PHP and PostgreSQL platform supporting 2 membership types, individual and organizational, with annual payments and monthly progress reviews.</li>
<li>Automated 3 previously manual workflows: program-timeline calculations, approved-leave handling, and PDF certificate issuance; added dashboards for membership, qualifications, payments, onboarding, and course progress.</li>
</ul>
<h5><a href="https://heroeyez.com">SafeSchoolz</a></h5>
<p class="dates"><em>June 2024 - June 2025</em></p>
<ul>
<li>Built 2 Android applications in Java and Kotlin: Media Pipe detects firearms, while Aegis coordinates incident alerts with the .NET-based HeroEyez portal.</li>
<li>Trained and tested a TensorFlow Lite detection model on 10,000+ firearm images, selecting it over YOLO to improve accuracy within mobile hardware constraints.</li>
<li>Integrated 60-second evidence clips, screenshots, and Twilio calls into the incident-alert workflow; completed deployment in June 2025 before the broader commercial rollout paused.</li>
</ul>
<h3>Covius, LLC / Senior Software Engineer</h3>
<p class="dates"><em>January 2022 - April 2024 | Pompano Beach, FL</em></p>
<ul>
<li>Redesigned RealtyBid.com frontend and backend components with the engineering team, exposing real-time auction status through REST APIs and asynchronous updates.</li>
<li>Delivered responsive Angular and RxJS interfaces across desktop and mobile browsers, incorporating QA and business feedback through iterative development sprints.</li>
<li>Modernized a legacy database for the redesigned auction platform and created internal tools enabling website administration and customer support.</li>
</ul>
<h3>SEAD Software / Software Engineer</h3>
<p class="dates"><em>April 2021 - July 2022 | Delray Beach, FL</em></p>
<ul>
<li>Automated laboratory document recognition and categorization with Python and the Google Cloud Vision API, converting physical records into digitally classified documents.</li>
<li>Designed a Twilio messaging application that automatically responded to customer interactions and generated leads for law firms.</li>
<li>Established Azure DevOps development pipelines and trained staff on their use, coordinating delivery across client projects backed by AWS infrastructure and a shared Git repository.</li>
</ul>
<h3>Clarity Diagnostics &amp; Lab Solutions / Director of IT</h3>
<p class="dates"><em>September 2020 - January 2022 | Boca Raton, FL</em></p>
<ul>
<li>Directed laboratory and diagnostics manufacturing IT operations through expansion to nationwide clients, including local and state governments.</li>
<li>Secured laboratory access with a badge system and enforced email security standards in Google Workspace and Microsoft 365; assisted medical equipment quality assurance.</li>
<li>Supervised IT staff and coordinated software quality control, deployment, and user training for SEAD Software while maintaining client-facing websites.</li>
</ul>
<h3>MyTap, aka Which Craft / Lead Developer</h3>
<p class="dates"><em>January 2016 - April 2020 | Albuquerque, NM</em></p>
<ul>
<li>Engineered a Python Scrapy pipeline and natural language processing logic that transformed online beer reviews into flavor profiles for a recommendation engine.</li>
<li>Implemented a Django and PostgreSQL backend serving beer recommendations through a responsive mobile web application developed with a design team.</li>
</ul>
<h3>TriCore Reference Laboratories / Production Support Specialist</h3>
<p class="dates"><em>April 2013 - January 2017 | Albuquerque, NM</em></p>
<ul>
<li>Monitored the production environment as the sole overnight specialist, troubleshooting and escalating incidents for systems supported by 60 staff during the day.</li>
<li>Resolved urgent hospital access and Sunquest issues, checked patient-record transfers between medical systems, and trained help desk staff on troubleshooting procedures.</li>
</ul>
</section><section><div class="section-start"><h2>Technical Skills</h2>
<ul>
<li><strong>Languages:</strong> Python, JavaScript, TypeScript, PHP, Go, Java, Kotlin, C, C++, HTML, CSS, Sass.</li>
<li><strong>Frameworks and APIs:</strong> Django, Flask, Angular, RxJS, Preact, Node.js, Bun, WordPress, REST APIs, Twilio, Scrapy.</li>
<li><strong>Databases:</strong> PostgreSQL, Microsoft SQL Server, MySQL, MongoDB, CouchDB, Redis.</li>
<li><strong>Cloud and DevOps:</strong> AWS, Azure DevOps, Cloudflare Workers, D1, Durable Objects, R2, Docker, Kubernetes, Linux, Git, Jira.</li>
<li><strong>Machine Learning and Mobile:</strong> TensorFlow Lite, Google Cloud Vision API, natural language processing, Android.</li>
</ul>
</div></section><section><div class="section-start"><h2>Education</h2>
<h3>University of New Mexico</h3>
</div><p>Programming studies in C++, advanced Visual C++, and Visual Basic.</p>
<h3>Central New Mexico Community College (aka TVI)</h3>
<p>Coursework in Adobe Photoshop through advanced level and introductory Lightwave 3D.</p></section></main></body></html>
Binary file not shown.
+139
View File
@@ -0,0 +1,139 @@
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="source-sha256" content="14f6231ce12875968e8b2e7c2004c35aed2812136341709588414f865233e6e7"><meta name="resume-layout" content="original"><title>Alexander Herlan | Resume</title><style>
@page { size: Letter; margin: 50pt 55.5pt 50pt 57.75pt; }
* { box-sizing: border-box; }
html { background: #e8e8e8; }
body {
width: 612pt; margin: 24px auto; padding: 50pt 55.5pt 50pt 57.75pt;
background: white; color: #111; font: 10pt/1.2 Lato, Arial, sans-serif;
-webkit-print-color-adjust: exact; print-color-adjust: exact;
}
header { display: grid; grid-template-columns: 166.5pt 1fr; gap: 18pt;
min-height: 124pt; break-inside: avoid; }
h1, h2, h3, h5, .contact-name { font-family: Raleway, Arial, sans-serif; }
h1 { font-size: 24pt; line-height: 1.16; margin: 0 0 5pt; }
.subtitle { font-size: 16pt; font-weight: bold; line-height: 1.2;
color: #38761d; margin: 0; }
.subtitle > span { display: block; }
.gradient-word { white-space: nowrap; }
.contact { border-top: 3pt solid #000; padding-top: 9pt; }
.contact-name { font-size: 12pt; font-weight: bold; margin: 0 0 3pt; }
.contact p { margin: 0 0 7pt; }
.contact-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 9pt 10pt; margin-top: 10pt; }
.contact-grid a { grid-column: span 2; display: block; min-width: 0;
border-left: 2pt solid #d6e7cb; padding-left: 7pt; font-size: 9pt;
line-height: 1.3; }
.contact-grid a.direct { grid-column: span 3; }
.contact-label { display: block; color: #72796d; font-size: 7pt;
letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; }
.contact-value { display: inline-block; }
a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; }
section { margin: 0 0 18pt 184.5pt; }
.section-start { display: grid; grid-template-columns: 166.5pt minmax(0, 1fr);
column-gap: 18pt; margin-left: -184.5pt; break-inside: avoid; break-after: avoid; }
.section-start > h2 + * { border-top: 3pt solid #000; padding-top: 10pt; }
h2 { width: 166.5pt;
font-size: 12pt; line-height: 1.2; margin: 0; }
h2::before { content: ''; display: block; width: 12pt;
border-top: 1.5pt solid #111; margin-bottom: 12pt; }
h3 { font-size: 12pt; line-height: 1.2; margin: 16pt 0 4pt; }
.section-start > h3 { margin-top: 0; }
h4 { color: #666; font-size: 10pt; margin: 8pt 0 4pt; }
h5, h6 { font-size: 11pt; margin: 12pt 0 4pt; }
h3, h4, h5, h6 { break-after: avoid; }
p { margin: 0 0 6pt; orphans: 3; widows: 3; }
p.dates { color: #666; font-size: 9pt; text-transform: uppercase;
margin-bottom: 8pt; break-after: avoid; }
p.dates em { font-style: normal; }
ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; }
li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; break-inside: avoid; }
li > p { margin-bottom: 2pt; }
.references { list-style: none; padding: 0; }
.references li { margin-bottom: 6pt; break-inside: avoid; }
table { width: 100%; border-collapse: collapse; font-size: 9pt; }
th, td { text-align: left; vertical-align: top; padding: 4pt;
border-bottom: 1px solid #ddd; overflow-wrap: anywhere; }
tr { break-inside: avoid; }
img { max-width: 100%; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
@media print {
html { background: white; }
body { width: auto; margin: 0; padding: 0; }
}
</style></head><body><header><div><h1>Alexander Herlan</h1>
<p class="subtitle"><span><span class="gradient-word"><span style="color:#286414">S</span><span style="color:#2c6818">e</span><span style="color:#316c1b">n</span><span style="color:#35701f">i</span><span style="color:#397423">o</span><span style="color:#3d7826">r</span></span> <span class="gradient-word"><span style="color:#46802e">S</span><span style="color:#4a8432">o</span><span style="color:#4e8835">f</span><span style="color:#538c39">t</span><span style="color:#57903d">w</span><span style="color:#5b9340">a</span><span style="color:#5f9744">r</span><span style="color:#649b48">e</span></span> <span class="gradient-word"><span style="color:#6ca34f">E</span><span style="color:#70a753">n</span><span style="color:#75ab57">g</span><span style="color:#79af5a">i</span><span style="color:#7db35e">n</span><span style="color:#81b762">e</span><span style="color:#86bb65">e</span><span style="color:#8abf69">r</span></span></span><span><span class="gradient-word"><span style="color:#286414">F</span><span style="color:#2d6919">u</span><span style="color:#336e1d">l</span><span style="color:#387322">l</span><span style="color:#3e7827">-</span><span style="color:#437d2c">S</span><span style="color:#498230">t</span><span style="color:#4e8735">a</span><span style="color:#548c3a">c</span><span style="color:#59923e">k</span></span> <span class="gradient-word"><span style="color:#649c48">&amp;</span></span> <span class="gradient-word"><span style="color:#6fa651">D</span><span style="color:#74ab56">e</span><span style="color:#7ab05b">v</span><span style="color:#7fb560">O</span><span style="color:#85ba64">p</span><span style="color:#8abf69">s</span></span></span></p></div><div class="contact"><p class="contact-name">Alexander Herlan</p><p>Albuquerque, NM</p>
<nav class="contact-grid" aria-label="Contact and social links"><a href="tel:+18134028692" class="direct"><span class="contact-label">Phone</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">8</span><span style="color:#316c1c">1</span><span style="color:#3a7523">3</span><span style="color:#437d2b">-</span><span style="color:#4c8533">4</span><span style="color:#558d3b">0</span><span style="color:#5d9642">2</span><span style="color:#669e4a">-</span><span style="color:#6fa652">8</span><span style="color:#78ae5a">6</span><span style="color:#81b761">9</span><span style="color:#8abf69">2</span></span></span></a><a href="mailto:alexwherlan@gmail.com" class="direct"><span class="contact-label">Email</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2d6918">l</span><span style="color:#326d1c">e</span><span style="color:#377221">x</span><span style="color:#3c7625">w</span><span style="color:#407b29">h</span><span style="color:#457f2e">e</span><span style="color:#4a8432">r</span><span style="color:#4f8836">l</span><span style="color:#548d3a">a</span><span style="color:#59923e">n</span><span style="color:#5e9643">@</span><span style="color:#639b47">g</span><span style="color:#689f4b">m</span><span style="color:#6da450">a</span><span style="color:#72a854">i</span><span style="color:#76ad58">l</span><span style="color:#7bb15c">.</span><span style="color:#80b660">c</span><span style="color:#85ba65">o</span><span style="color:#8abf69">m</span></span></span></a><a href="https://alex.herlan.dev"><span class="contact-label">Website</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">a</span><span style="color:#2f6a1a">l</span><span style="color:#367120">e</span><span style="color:#3d7826">x</span><span style="color:#447e2c">.</span><span style="color:#4b8432">h</span><span style="color:#528b38">e</span><span style="color:#59923e">r</span><span style="color:#609845">l</span><span style="color:#679e4b">a</span><span style="color:#6ea551">n</span><span style="color:#75ac57">.</span><span style="color:#7cb25d">d</span><span style="color:#83b863">e</span><span style="color:#8abf69">v</span></span></span></a><a href="https://linkedin.com/in/alexander-herlan"><span class="contact-label">Profile</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">L</span><span style="color:#367120">i</span><span style="color:#447e2c">n</span><span style="color:#528b38">k</span><span style="color:#609845">e</span><span style="color:#6ea551">d</span><span style="color:#7cb25d">I</span><span style="color:#8abf69">n</span></span></span></a><a href="https://github.com/AlexanderHerlan"><span class="contact-label">Code</span><span class="contact-value"><span class="gradient-word"><span style="color:#286414">G</span><span style="color:#3c7625">i</span><span style="color:#4f8836">t</span><span style="color:#639b47">H</span><span style="color:#76ad58">u</span><span style="color:#8abf69">b</span></span></span></a></nav></div></header><main><section><div class="section-start"><h2>Summary</h2>
<p>Senior software engineer building Python and JavaScript applications, REST APIs, and cloud infrastructure. Experience modernizing real estate platforms, automating membership workflows, and deploying Android machine learning applications. Combines full-stack development with database engineering and DevOps.</p>
</div></section><section><div class="section-start"><h2>Work Experience</h2>
<h3>Independent Software Developer / Freelancer</h3>
</div><p class="dates"><em>June 2024 - Present</em></p>
<ul>
<li>Delivered 3 selected client projects spanning mortgage lending, membership management, and Android safety applications, covering architecture, implementation, cloud deployment, and support.</li>
</ul>
<h4>Selected Projects</h4>
<h5><a href="https://equityfundingsource.com">Equity Funding Source</a></h5>
<p class="dates"><em>April 2026 - July 2026</em></p>
<ul>
<li>Developed a Preact and Bun mortgage platform supporting 3 user groups: borrowers, lenders, and administrators, with application workflows, collaboration, and secure document handling.</li>
<li>Deployed serverless application logic and relational data on Cloudflare Workers and D1, with Durable Objects enabling real-time messaging and R2 storing loan documents.</li>
</ul>
<h5><a href="https://iipm.ie">IIPM.ie</a></h5>
<p class="dates"><em>April 2025 - March 2026</em></p>
<ul>
<li>Expanded WordPress landing pages into a PHP and PostgreSQL platform supporting 2 membership types, individual and organizational, with annual payments and monthly progress reviews.</li>
<li>Automated 3 previously manual workflows: program-timeline calculations, approved-leave handling, and PDF certificate issuance; added dashboards for membership, qualifications, payments, onboarding, and course progress.</li>
</ul>
<h5><a href="https://heroeyez.com">SafeSchoolz</a></h5>
<p class="dates"><em>June 2024 - June 2025</em></p>
<ul>
<li>Built 2 Android applications in Java and Kotlin: Media Pipe detects firearms, while Aegis coordinates incident alerts with the .NET-based HeroEyez portal.</li>
<li>Trained and tested a TensorFlow Lite detection model on 10,000+ firearm images, selecting it over YOLO to improve accuracy within mobile hardware constraints.</li>
<li>Integrated 60-second evidence clips, screenshots, and Twilio calls into the incident-alert workflow; completed deployment in June 2025 before the broader commercial rollout paused.</li>
</ul>
<h3>Covius, LLC / Senior Software Engineer</h3>
<p class="dates"><em>January 2022 - April 2024 | Pompano Beach, FL</em></p>
<ul>
<li>Redesigned RealtyBid.com frontend and backend components with the engineering team, exposing real-time auction status through REST APIs and asynchronous updates.</li>
<li>Delivered responsive Angular and RxJS interfaces across desktop and mobile browsers, incorporating QA and business feedback through iterative development sprints.</li>
<li>Modernized a legacy database for the redesigned auction platform and created internal tools enabling website administration and customer support.</li>
</ul>
<h3>SEAD Software / Software Engineer</h3>
<p class="dates"><em>April 2021 - July 2022 | Delray Beach, FL</em></p>
<ul>
<li>Automated laboratory document recognition and categorization with Python and the Google Cloud Vision API, converting physical records into digitally classified documents.</li>
<li>Designed a Twilio messaging application that automatically responded to customer interactions and generated leads for law firms.</li>
<li>Established Azure DevOps development pipelines and instructed staff on their use, coordinating delivery across client projects backed by AWS infrastructure and a shared Git repository.</li>
</ul>
<h3>Clarity Diagnostics &amp; Lab Solutions / Director of IT</h3>
<p class="dates"><em>September 2020 - January 2022 | Boca Raton, FL</em></p>
<ul>
<li>Directed laboratory and diagnostics manufacturing IT operations through expansion to nationwide clients, including local and state governments.</li>
<li>Secured laboratory access with a badge system and enforced email security standards in Google Workspace and Microsoft 365; assisted medical equipment quality assurance.</li>
<li>Supervised IT staff and coordinated software quality control, deployment, and user training for SEAD Software while maintaining client-facing websites.</li>
</ul>
<h3>MyTap, aka Which Craft / Lead Developer</h3>
<p class="dates"><em>January 2016 - April 2020 | Albuquerque, NM</em></p>
<ul>
<li>Engineered a Python Scrapy pipeline and natural language processing logic that transformed online beer reviews into flavor profiles for a recommendation engine.</li>
<li>Implemented a Django and PostgreSQL backend serving beer recommendations through a responsive mobile web application developed with a design team.</li>
</ul>
<h3>TriCore Reference Laboratories / Production Support Specialist</h3>
<p class="dates"><em>April 2013 - January 2017 | Albuquerque, NM</em></p>
<ul>
<li>Monitored the production environment as the sole overnight specialist, troubleshooting and escalating incidents for systems supported by 60 staff during the day.</li>
<li>Resolved urgent hospital access and Sunquest issues, checked patient-record transfers between medical systems, and coached help desk staff on troubleshooting procedures.</li>
</ul>
</section><section><div class="section-start"><h2>Technical Skills</h2>
<ul>
<li><strong>Languages:</strong> Python, JavaScript, TypeScript, PHP, Go, Java, Kotlin, C, C++, HTML, CSS, Sass.</li>
<li><strong>Frameworks and APIs:</strong> Django, Flask, Angular, RxJS, Preact, Node.js, Bun, WordPress, REST APIs, Twilio, Scrapy.</li>
<li><strong>Databases:</strong> PostgreSQL, Microsoft SQL Server, MySQL, MongoDB, CouchDB, Redis.</li>
<li><strong>Cloud and DevOps:</strong> AWS, Azure DevOps, Cloudflare Workers, D1, Durable Objects, R2, Docker, Kubernetes, Linux, Git, Jira.</li>
<li><strong>Machine Learning and Mobile:</strong> TensorFlow Lite, Google Cloud Vision API, natural language processing, Android.</li>
</ul>
</div></section><section><div class="section-start"><h2>Education</h2>
<h3>University of New Mexico</h3>
</div><p>Programming studies in C++, advanced Visual C++, and Visual Basic.</p>
<h3>Central New Mexico Community College (aka TVI)</h3>
<p>Coursework in Adobe Photoshop through advanced level and introductory Lightwave 3D.</p></section></main></body></html>
Binary file not shown.
+47 -11
View File
@@ -57,10 +57,11 @@ h1 { font-size: 24pt; line-height: 1.16; margin: 0 0 5pt; }
letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; } letter-spacing: .8pt; text-transform: uppercase; margin-bottom: 2pt; }
.contact-value { display: inline-block; } .contact-value { display: inline-block; }
a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; } a { color: #38761d; text-decoration: none; overflow-wrap: anywhere; }
section { position: relative; margin: 0 0 18pt 184.5pt; } section { margin: 0 0 18pt 184.5pt; }
.section-start { position: relative; border-top: 3pt solid #000; .section-start { display: grid; grid-template-columns: 166.5pt minmax(0, 1fr);
padding-top: 10pt; break-inside: avoid; break-after: avoid; } column-gap: 18pt; margin-left: -184.5pt; break-inside: avoid; break-after: avoid; }
h2 { position: absolute; top: -3pt; left: -184.5pt; width: 166.5pt; .section-start > h2 + * { border-top: 3pt solid #000; padding-top: 10pt; }
h2 { width: 166.5pt;
font-size: 12pt; line-height: 1.2; margin: 0; } font-size: 12pt; line-height: 1.2; margin: 0; }
h2::before { content: ''; display: block; width: 12pt; h2::before { content: ''; display: block; width: 12pt;
border-top: 1.5pt solid #111; margin-bottom: 12pt; } border-top: 1.5pt solid #111; margin-bottom: 12pt; }
@@ -74,7 +75,7 @@ p.dates { color: #666; font-size: 9pt; text-transform: uppercase;
margin-bottom: 8pt; break-after: avoid; } margin-bottom: 8pt; break-after: avoid; }
p.dates em { font-style: normal; } p.dates em { font-style: normal; }
ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; } ul, ol { margin: 4pt 0 8pt; padding-left: 35pt; }
li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; } li { padding-left: 0; margin-bottom: 2pt; orphans: 2; widows: 2; break-inside: avoid; }
li > p { margin-bottom: 2pt; } li > p { margin-bottom: 2pt; }
.references { list-style: none; padding: 0; } .references { list-style: none; padding: 0; }
.references li { margin-bottom: 6pt; break-inside: avoid; } .references li { margin-bottom: 6pt; break-inside: avoid; }
@@ -90,6 +91,35 @@ pre { white-space: pre-wrap; overflow-wrap: anywhere; }
} }
""" """
ATS_CSS = """
@page { size: Letter; margin: 40pt 43pt; }
body { padding: 40pt 43pt; font-size: 10.5pt; line-height: 1.22; }
header { display: block; min-height: 0; margin-bottom: 12pt; }
h1 { font-size: 23pt; margin-bottom: 3pt; }
.subtitle { font-size: 12pt; margin-bottom: 6pt; }
.subtitle > span { display: inline-block; margin-right: 10pt; }
.contact { border: 0; padding: 0; }
.contact-name { display: none; }
.contact p { margin-bottom: 4pt; }
.contact-grid { display: flex; flex-wrap: wrap; gap: 3pt 12pt; margin-top: 0; }
.contact-grid a { border: 0; padding: 0; font-size: 9.5pt; }
.contact-label { display: none; }
section { position: static; margin: 0 0 11pt; }
.section-start { display: block; margin-left: 0; border: 0; padding: 0; }
.section-start > h2 + * { border: 0; padding-top: 0; }
h2 { position: static; width: auto; font-size: 11pt; text-transform: uppercase;
border-bottom: 1pt solid #333; padding-bottom: 3pt; margin: 0 0 6pt; }
h2::before { display: none; }
h3 { font-size: 11pt; margin: 10pt 0 2pt; }
h4 { font-size: 10.5pt; margin: 6pt 0 3pt; }
h5, h6 { font-size: 10.5pt; margin: 6pt 0 2pt; }
p { margin-bottom: 5pt; }
p.dates { font-size: 9pt; margin-bottom: 4pt; }
ul, ol { padding-left: 15pt; margin: 3pt 0 7pt; }
li { margin-bottom: 3pt; break-inside: avoid; }
@media print { body { padding: 0; } }
"""
def serialize(element): def serialize(element):
return ET.tostring(element, encoding="unicode", method="html") return ET.tostring(element, encoding="unicode", method="html")
@@ -115,10 +145,13 @@ def gradient_text(text: str) -> str:
return "".join(result) return "".join(result)
def build_html(source: str) -> str: def build_html(source: str, layout: str = "original") -> str:
"""Keep Markdown order and inline formatting in the reference's two columns.""" """Render Markdown in normal reading order or the original two-column layout."""
import markdown import markdown
if layout not in ("ats", "original"):
raise ValueError("Layout must be ats or original.")
try: try:
document = ET.fromstring( document = ET.fromstring(
"<div>" + markdown.markdown(source, extensions=["extra"], output_format="xhtml") + "</div>" "<div>" + markdown.markdown(source, extensions=["extra"], output_format="xhtml") + "</div>"
@@ -228,15 +261,16 @@ def build_html(source: str) -> str:
'<!doctype html>\n<html lang="en"><head><meta charset="utf-8">' '<!doctype html>\n<html lang="en"><head><meta charset="utf-8">'
'<meta name="viewport" content="width=device-width, initial-scale=1">' '<meta name="viewport" content="width=device-width, initial-scale=1">'
f'<meta name="source-sha256" content="{hashlib.sha256(source.encode("utf-8")).hexdigest()}">' f'<meta name="source-sha256" content="{hashlib.sha256(source.encode("utf-8")).hexdigest()}">'
f"<title>{escape(name)} | Resume</title><style>{CSS}</style></head>" f'<meta name="resume-layout" content="{layout}">'
f"<title>{escape(name)} | Resume</title><style>{CSS}{ATS_CSS if layout == 'ats' else ''}</style></head>"
+ "<body>" + header + "<main>" + "".join(rendered) + "</main></body></html>\n" + "<body>" + header + "<main>" + "".join(rendered) + "</main></body></html>\n"
) )
def generate(source: Path, output: Path, version: str | None, browser: str): def generate(source: Path, output: Path, version: str | None, browser: str, layout: str = "original"):
from playwright.sync_api import sync_playwright from playwright.sync_api import sync_playwright
html = build_html(source.read_text(encoding="utf-8-sig")) html = build_html(source.read_text(encoding="utf-8-sig"), layout)
output.mkdir(parents=True, exist_ok=True) output.mkdir(parents=True, exist_ok=True)
if version is None: if version is None:
number = 1 number = 1
@@ -283,9 +317,11 @@ def main():
parser.add_argument("--output-dir", type=Path, default=ROOT / "resumes") parser.add_argument("--output-dir", type=Path, default=ROOT / "resumes")
parser.add_argument("--version", help="Version label; defaults to the next available v1, v2, ...") parser.add_argument("--version", help="Version label; defaults to the next available v1, v2, ...")
parser.add_argument("--browser", choices=["chromium", "msedge", "chrome"], default="chromium") parser.add_argument("--browser", choices=["chromium", "msedge", "chrome"], default="chromium")
parser.add_argument("--layout", choices=["ats", "original"], default="original",
help="Original sidebar design (default) or single-column application layout")
args = parser.parse_args() args = parser.parse_args()
try: try:
paths = generate(args.source.resolve(), args.output_dir.resolve(), args.version, args.browser) paths = generate(args.source.resolve(), args.output_dir.resolve(), args.version, args.browser, args.layout)
except ImportError as exc: except ImportError as exc:
parser.exit(1, f"Missing dependency: {exc}. Install Markdown==3.10.3 and playwright==1.62.0.\n") parser.exit(1, f"Missing dependency: {exc}. Install Markdown==3.10.3 and playwright==1.62.0.\n")
except (ValueError, OSError) as exc: except (ValueError, OSError) as exc: