Compare commits

..

7 Commits
v1.0.0 ... main

Author SHA1 Message Date
Colin 87328de610
Force CI update
ci/woodpecker/push/woodpecker Pipeline was successful Details
2025-12-11 14:16:00 -05:00
Colin 32636fa0cb
Auto-update generated PDFs
ci/woodpecker/push/woodpecker Pipeline failed Details
2025-12-11 14:14:02 -05:00
Colin cfaa727b88
Trigger CI pipeline 2025-12-11 14:11:56 -05:00
Colin 6d2c7dc5f1
Auto-update generated PDFs
ci/woodpecker/push/woodpecker Pipeline was successful Details
2025-12-11 13:19:49 -05:00
Colin b60d3a89ca
Increase PDF generation timeout and use networkidle2 2025-12-11 13:18:16 -05:00
Colin 51ac30cbc4
Auto-update generated PDFs 2025-12-11 13:18:16 -05:00
Colin f27f505281
Add PostHog analytics script to header 2025-12-11 13:18:16 -05:00
26 changed files with 68 additions and 53 deletions

View File

@ -118,8 +118,8 @@ async function generatePdf(browser, htmlFile) {
try {
// Navigate to the page and wait for content to load
await page.goto(url, {
waitUntil: 'networkidle0',
timeout: 30000
waitUntil: 'networkidle2',
timeout: 60000
});
// Wait for includes.js to finish loading header and footer
@ -146,7 +146,7 @@ async function generatePdf(browser, htmlFile) {
return true;
}, {
timeout: 15000,
timeout: 30000,
polling: 100 // Check every 100ms
});
} catch (waitError) {
@ -192,8 +192,8 @@ async function generatePdf(browser, htmlFile) {
// Re-navigate to the page if it was closed
try {
await page.goto(url, {
waitUntil: 'networkidle0',
timeout: 30000
waitUntil: 'networkidle2',
timeout: 60000
});
await page.waitForTimeout(1000);
} catch (navError) {

View File

@ -2,40 +2,58 @@
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "//metrics.nixc.us/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '3']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//metrics.nixc.us/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '3']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<div class="theme-switch">
<button id="themeToggle" aria-label="Theme mode: Auto" role="switch" aria-checked="false"
title="Toggle between light, dark, and auto theme modes" tabindex="0">🌓</button>
</div>
<!-- PostHog -->
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog && window.posthog.__loaded)||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init zr Wr fi Br Gr ci Nr Hr capture Ui calculateEventProperties Kr register register_once register_for_session unregister unregister_for_session Zr getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty Xr Jr createPersonProfile Qr jr ts opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing get_explicit_consent_status is_capturing clear_opt_in_out_capturing Vr debug O Yr getPageViewId captureTraceFeedback captureTraceMetric Or".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
<nav class="main-nav">
<ul>
<li><a href="/" id="nav-portfolio">Portfolio</a></li>
<li class="dropdown">
<a href="/resumes/business-development.html" id="nav-resumes">Resumes</a>
<div class="dropdown-content">
<a href="/resumes/business-development.html" id="nav-businessdev">Business Development</a>
<a href="/resumes/devsecops.html" id="nav-devsecops">DevSecOps</a>
<a href="/resumes/team-leadership.html" id="nav-teamleadership">Team Leadership</a>
<a href="/resumes/tool-building.html" id="nav-toolbuilding">Tool Building</a>
</div>
</li>
<li class="dropdown">
<a href="/stories/" id="nav-stories">Stories</a>
<div class="dropdown-content">
posthog.init('phc_3WDvcJlYYXlBVYL8vC1raT0gMfjkMuCyOpXdmgjK0CK', {
api_host: 'https://eu.i.posthog.com',
defaults: '2025-11-30',
person_profiles: 'identified_only', // or 'always' to create profiles for anonymous users as well
})
</script>
<!-- End PostHog Code -->
<div class="theme-switch">
<button
id="themeToggle"
aria-label="Theme mode: Auto"
role="switch"
aria-checked="false"
title="Toggle between light, dark, and auto theme modes"
tabindex="0"
>🌓</button>
</div>
<nav class="main-nav">
<ul>
<li><a href="/" id="nav-portfolio">Portfolio</a></li>
<li class="dropdown">
<a href="/resumes/business-development.html" id="nav-resumes">Resumes</a>
<div class="dropdown-content">
<a href="/resumes/business-development.html" id="nav-businessdev">Business Development</a>
<a href="/resumes/devsecops.html" id="nav-devsecops">DevSecOps</a>
<a href="/resumes/team-leadership.html" id="nav-teamleadership">Team Leadership</a>
<a href="/resumes/tool-building.html" id="nav-toolbuilding">Tool Building</a>
</div>
</li>
<li class="dropdown">
<a href="/stories/" id="nav-stories">Stories</a>
<div class="dropdown-content">
<a href="/stories/airport-dns.html" id="nav-airportdns" class="nav-story-tbd">Airport Dns</a>
<a href="/stories/app-development.html" id="nav-appdevelopment" class="nav-story-written">App Development</a>
<a href="/stories/athion-turnaround.html" id="nav-athionturnaround" class="nav-story-written">Athion Turnaround</a>
@ -53,21 +71,18 @@
<a href="/stories/wordpress-security.html" id="nav-wordpresssecurity" class="nav-story-tbd">Wordpress Security</a>
<a href="/stories/youtube-game-dev.html" id="nav-youtubegamedev" class="nav-story-written">Youtube Game Dev</a>
</div>
</li>
<li class="dropdown">
<a href="/one-pager-tools/csv-tool.html" id="nav-tools">Tools</a>
<div class="dropdown-content">
<a href="/one-pager-tools/csv-tool.html" id="nav-csv">CSV Tool</a>
<a href="/one-pager-tools/utm-tool.html" id="nav-utm">UTM Builder</a>
<a href="https://md.colinknapp.com" id="nav-markdown" target="_blank" rel="noopener noreferrer">Markdown
Tool</a>
<a href="https://nix.colinknapp.com" id="nav-nix" target="_blank" rel="noopener noreferrer">NixOS
Validator</a>
<a href="https://qr.colinknapp.com" id="nav-qrcode" target="_blank" rel="noopener noreferrer">QR Code
Tool</a>
</div>
</li>
<li><a href="https://meet.colinknapp.com" id="nav-meet" target="_blank" rel="noopener noreferrer"
title="No-account web meetings without software">Meet</a></li>
</ul>
</nav>
</li>
<li class="dropdown">
<a href="/one-pager-tools/csv-tool.html" id="nav-tools">Tools</a>
<div class="dropdown-content">
<a href="/one-pager-tools/csv-tool.html" id="nav-csv">CSV Tool</a>
<a href="/one-pager-tools/utm-tool.html" id="nav-utm">UTM Builder</a>
<a href="https://md.colinknapp.com" id="nav-markdown" target="_blank" rel="noopener noreferrer">Markdown Tool</a>
<a href="https://nix.colinknapp.com" id="nav-nix" target="_blank" rel="noopener noreferrer">NixOS Validator</a>
<a href="https://qr.colinknapp.com" id="nav-qrcode" target="_blank" rel="noopener noreferrer">QR Code Tool</a>
</div>
</li>
<li><a href="https://meet.colinknapp.com" id="nav-meet" target="_blank" rel="noopener noreferrer" title="No-account web meetings without software">Meet</a></li>
</ul>
</nav>

Binary file not shown.

Binary file not shown.