openvibers/afresume Commits

Update Amazon role to past, fix Steam Deck scrolling, remove cut2 portrait

OP OpenVibers committed 17 May 2026 · cdc3b23e31 · 7 files, +17 −29


Changes

ddiff --git a/src/components/Hero.astro b/src/components/Hero.astro
iindex ea7b53e..abe72b9 100644
---- a/src/components/Hero.astro
++++ b/src/components/Hero.astro
@@@ -25,9 +25,10 @@
<span class="hero__rotator" aria-live="polite"><i class="fa-solid fa-chart-line"></i> Data Analyst</span>
</p>
<p class="hero__lead">
-- Systems architect and data analyst with a decade of shipping — from
-- SOX-compliance tooling and autonomous AI agents at Amazon to a
-- 15-microservice open-source creator platform, engineered solo.
++ Data analyst and systems architect with 10+ years of shipping — from
++ SOX-compliance tooling and autonomous AI agents at Amazon ICQA to a
++ solo-built 15-microservice open-source creator platform.
++ Open to new roles.
</p>
<div class="hero__cta">
<a href="/#work" class="btn btn--primary"><i class="fa-solid fa-eye"></i> View Work</a>
@@@ -52,7 +53,6 @@
<div class="hero__portrait-frame">
<div class="hero__portrait-placeholder" role="img" aria-label="Portrait of Alex Frison">
<img src="/assets/img/alex-cut1.png" alt="Alex Frison" class="hero__portrait-img hero__portrait-img--a" id="portrait-a">
-- <img src="/assets/img/alex-cut2.png" alt="Alex Frison" class="hero__portrait-img hero__portrait-img--b" id="portrait-b" aria-hidden="true" loading="lazy">
</div>
</div>
</div>
@@@ -162,7 +162,6 @@
transition: opacity 0.8s ease;
}
.hero__portrait-img--a { opacity: 1; }
-- .hero__portrait-img--b { opacity: 0; }
@media (prefers-reduced-motion: reduce) {
.hero__portrait-img { transition: none; }
}
@@@ -277,19 +276,7 @@
}, { passive: true });
}
-- // Portrait crossfader — both images already in DOM so no load blink
-- const imgA = document.getElementById("portrait-a") as HTMLImageElement | null;
-- const imgB = document.getElementById("portrait-b") as HTMLImageElement | null;
-- if (imgA && imgB && !window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
-- let aActive = true;
-- setInterval(() => {
-- aActive = !aActive;
-- imgA.style.opacity = aActive ? "1" : "0";
-- imgB.style.opacity = aActive ? "0" : "1";
-- imgA.setAttribute("aria-hidden", aActive ? "false" : "true");
-- imgB.setAttribute("aria-hidden", aActive ? "true" : "false");
-- }, 15000);
-- }
++
// tsparticles light rain/snow
const ps = document.createElement("script");
ddiff --git a/src/components/Marquee.astro b/src/components/Marquee.astro
iindex 977d478..907f375 100644
---- a/src/components/Marquee.astro
++++ b/src/components/Marquee.astro
@@@ -28,7 +28,9 @@ const tech = [
letter-spacing: 0.04em;
}
.marquee__track span { white-space: nowrap; }
-- .marquee:hover .marquee__track { animation-play-state: paused; }
++ @media (hover: hover) {
++ .marquee:hover .marquee__track { animation-play-state: paused; }
++ }
@keyframes scroll {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
ddiff --git a/src/components/ProjectCarousel.astro b/src/components/ProjectCarousel.astro
iindex a50c608..8785cee 100644
---- a/src/components/ProjectCarousel.astro
++++ b/src/components/ProjectCarousel.astro
@@@ -121,7 +121,10 @@ const featured = all.sort((a, b) => a.data.order - b.data.order);
spaceBetween: 18,
centeredSlides: false,
loop: true,
-- autoplay: { delay: 5000, disableOnInteraction: false, pauseOnMouseEnter: true },
++ grabCursor: true,
++ simulateTouch: true,
++ touchStartPreventDefault: false,
++ autoplay: { delay: 5000, disableOnInteraction: false, pauseOnMouseEnter: false },
pagination: { el: ".swiper-pagination", clickable: true },
navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev" },
keyboard: { enabled: true },
ddiff --git a/src/content/experience/01-amazon-data-analyst.json b/src/content/experience/01-amazon-data-analyst.json
iindex 9330e9a..8ac756a 100644
---- a/src/content/experience/01-amazon-data-analyst.json
++++ b/src/content/experience/01-amazon-data-analyst.json
@@@ -2,7 +2,7 @@
"company": "Amazon",
"role": "Data Analyst — ICQA",
"start": "2024",
-- "end": "Present",
++ "end": "2025",
"location": "PAE2 · Arlington, WA",
"bullets": [
"Own SOX-compliance IRDR (Inventory Discrepancy Research Report) workflows — hand-researched 1,000+ inventory mismatches and built the data systems that support Sarbanes-Oxley audit requirements.",
ddiff --git a/src/content/experience/04-openvibe.json b/src/content/experience/04-openvibe.json
iindex ebf83aa..82d4622 100644
---- a/src/content/experience/04-openvibe.json
++++ b/src/content/experience/04-openvibe.json
@@@ -2,7 +2,7 @@
"company": "Hobo Network · OpenVibe",
"role": "Founder · Systems Architect · Principal Engineer",
"start": "2022",
-- "end": "Present",
++ "end": "2025",
"bullets": [
"Sole architect and engineer on OpenVibe — a 15-microservice open-source platform kernel: distributed event bus, OIDC/OAuth2 identity provider, capability contract registry, media object store, live-streaming ingest and restream, real-time chat, billing ledger, AI/search backbone, and realtime infrastructure. Self-hosted alternative to Twitch + YouTube + Patreon + Discord. 16 phases documented; 11+ fully implemented with cutover runbook and migration tooling complete.",
"Built and operated HoboStreamer from scratch — a full live-streaming platform with WebRTC SFU, HLS, multi-destination RTMP restream (OBS → Twitch/YouTube/Kick simultaneously), auto-recorded VODs, clip detection, real-time chat with custom emotes, voice channels, stream analytics, comprehensive moderation tools, and an integrated browser game for viewers. Fully open source.",
ddiff --git a/src/layouts/Base.astro b/src/layouts/Base.astro
iindex ce6927a..98b6148 100644
---- a/src/layouts/Base.astro
++++ b/src/layouts/Base.astro
@@@ -50,11 +50,7 @@ const pageUrl = canonical ?? new URL(Astro.url.pathname, Astro.site).toString();
"telephone": "+14253673997",
"image": "https://alexfrison.net/assets/img/alex-cut1.png",
"jobTitle": "Data Analyst · Software Engineer",
-- "description": "Seattle-area data analyst and full-stack software engineer with 10+ years shipping web platforms, autonomous analytics agents, and creator infrastructure. Currently open to new roles.",
-- "worksFor": {
-- "@type": "Organization",
-- "name": "Amazon"
-- },
++ "description": "Seattle-area data analyst and full-stack software engineer with 10+ years shipping web platforms, autonomous analytics agents, and creator infrastructure. Open to new roles.",
"knowsAbout": [
"Data Analysis", "SQL", "Python", "TypeScript", "Node.js",
"Machine Learning", "Autonomous Agents", "Streaming Platforms",
ddiff --git a/src/pages/index.astro b/src/pages/index.astro
iindex 342041f..bf78575 100644
---- a/src/pages/index.astro
++++ b/src/pages/index.astro
@@@ -38,8 +38,8 @@ import ContactBlock from "../components/ContactBlock.astro";
<li><strong><i class="fa-solid fa-location-dot"></i> Based</strong>Seattle / Arlington, WA</li>
<li><strong><i class="fa-solid fa-briefcase"></i> Open to</strong>Hybrid · Remote · On-site PNW</li>
<li><strong><i class="fa-solid fa-building-columns"></i> Founder</strong>GameServerStats, LLC</li>
-- <li><strong><i class="fa-solid fa-laptop-code"></i> Currently</strong>Amazon Data Analyst (ICQA)</li>
-- <li><strong><i class="fa-solid fa-hammer"></i> Building</strong>OpenVibe — open-source creator platform</li>
++ <li><strong><i class="fa-solid fa-laptop-code"></i> Last role</strong>Amazon · Data Analyst (ICQA)</li>
++ <li><strong><i class="fa-solid fa-magnifying-glass"></i> Seeking</strong>Analyst · Engineer · Builder roles</li>
</ul>
</aside>
</div>