openvibers/afresume Commits

FC album: every public FCMenu video, 16 in upload order (Why Don't You Meet That Rate? is unlisted now and left out; eight new, back to Stower Stories); the hero badge, its label and the intro count come from the track list

OP OpenVibers committed 24 Sept 2026 · f51ac26c6e · 3 files, +72 −13


Changes

ddiff --git a/src/components/Album.astro b/src/components/Album.astro
iindex f7662c3..99fdb9c 100644
---- a/src/components/Album.astro
++++ b/src/components/Album.astro
@@@ -7,6 +7,9 @@ import album from "../data/fc-album.json";
const first = album.tracks[0];
const rest = album.tracks.slice(1).map((t) => t.id).join(",");
const thumb = (id: string) => `https://i.ytimg.com/vi/${id}/hqdefault.jpg`;
++const WORDS = ["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty"];
++const count = album.tracks.length;
++const countWord = WORDS[count] ?? String(count);
---
<script is:inline>
(function () {
@@@ -24,7 +27,7 @@ const thumb = (id: string) => `https://i.ytimg.com/vi/${id}/hqdefault.jpg`;
<div class="album__head">
<div class="eyebrow"><i class="fa-solid fa-hat-cowboy" aria-hidden="true"></i> You found the hat link</div>
<h2 class="sec-title album__title" id="album-title">{album.title.split(":")[0]}: <em>the album</em></h2>
-- <p class="sec-lead album__lead">Nine parody music videos about life on the floor: rates, andons, scanners, AR and everything in between. Turn it up, then keep scrolling for the grown-up part of the site.</p>
++ <p class="sec-lead album__lead">{countWord} parody music videos about life on the floor: rates, andons, scanners, AR and everything in between. Turn it up, then keep scrolling for the grown-up part of the site.</p>
</div>
<div class="album__grid">
ddiff --git a/src/components/Hero.astro b/src/components/Hero.astro
iindex 137ce71..a84db93 100644
---- a/src/components/Hero.astro
++++ b/src/components/Hero.astro
@@@ -3,6 +3,7 @@ import profile from "../data/profile.json";
const name = "Alex Frison";
const words = name.split(" ");
const offsets = words.map((_, i) => words.slice(0, i).join(" ").length + (i ? 1 : 0));
++import fcAlbum from "../data/fc-album.json";
---
<section class="hero" id="top" aria-labelledby="hero-title">
<canvas class="hero__aurora" id="aurora" aria-hidden="true"></canvas>
@@@ -42,10 +43,10 @@ const offsets = words.map((_, i) => words.slice(0, i).join(" ").length + (i ? 1
<a href={profile.resumePdf} class="btn" data-magnetic data-resume-link><i class="fa-solid fa-file-pdf"></i> Resume PDF</a>
<a href="#contact" class="btn btn--ghost" data-magnetic><i class="fa-solid fa-paper-plane"></i> Get in touch</a>
<!-- Only on the FC album visit (?pae2, from the hat): jump straight to the music. -->
-- <a href="#album" class="btn hero__album" data-magnetic aria-label="Jump to the FC album, 9 songs">
++ <a href="#album" class="btn hero__album" data-magnetic aria-label={`Jump to the FC album, ${fcAlbum.tracks.length} songs`}>
<span class="hero__eq" aria-hidden="true"><i></i><i></i><i></i><i></i></span>
<span>The FC album</span>
-- <span class="hero__album-badge" aria-hidden="true">9 songs</span>
++ <span class="hero__album-badge" aria-hidden="true">{fcAlbum.tracks.length} songs</span>
<span class="btn__arrow hero__album-arrow" aria-hidden="true">↓</span>
</a>
</div>
ddiff --git a/src/data/fc-album.json b/src/data/fc-album.json
iindex 3bff193..eaf1ccc 100644
---- a/src/data/fc-album.json
++++ b/src/data/fc-album.json
@@@ -1,16 +1,71 @@
{
"title": "FC Menu: the album",
"channel": "https://www.youtube.com/@FCMenus",
-- "note": "Nine parody music videos about life on the FC floor. Tracks are in upload order (YouTube channel FCMenu, 2026-02-25).",
++ "note": "Parody music videos about life on the FC floor: every public video on YouTube channel FCMenu, in upload order (checked 2026-09-24; unlisted ones are left out).",
"tracks": [
-- { "id": "bcy49ryROYc", "title": "Why Don't You Meet That Rate?" },
-- { "id": "yLqqn52E6Sg", "title": "No Andons 🚫" },
-- { "id": "bkb_R8Od-oY", "title": "AR Cowboy 🤠" },
-- { "id": "qlH84N6ICQg", "title": "Picked Out" },
-- { "id": "vJnBnp_CQoQ", "title": "Scan Queen" },
-- { "id": "U1TxsWHrqIQ", "title": "FC RESEARCH!" },
-- { "id": "B6paEKdtji8", "title": "FCircles" },
-- { "id": "d06aJCXpHP8", "title": "Ain't No Path For The Wicked" },
-- { "id": "g_JQvqILVNU", "title": "\"A Lot\" - 21 FCs" }
++ {
++ "id": "AnW7aG98vUY",
++ "title": "Stower Stories - Warehouse Warriors"
++ },
++ {
++ "id": "rfWyRbDzfDE",
++ "title": "Working So Well"
++ },
++ {
++ "id": "yLqqn52E6Sg",
++ "title": "No Andons 🚫"
++ },
++ {
++ "id": "bkb_R8Od-oY",
++ "title": "AR Cowboy 🤠"
++ },
++ {
++ "id": "qlH84N6ICQg",
++ "title": "Picked Out"
++ },
++ {
++ "id": "WUnJOuhXZCk",
++ "title": "Bin Flower"
++ },
++ {
++ "id": "6WIwVr0XT5A",
++ "title": "Welcome To PAE2"
++ },
++ {
++ "id": "pTXkEbRv4rM",
++ "title": "Just Two AFMs"
++ },
++ {
++ "id": "zThAD6T46Mo",
++ "title": "Pick to Tote"
++ },
++ {
++ "id": "aQycbtK7ZS4",
++ "title": "Drives Staying Alive"
++ },
++ {
++ "id": "vJnBnp_CQoQ",
++ "title": "Scan Queen"
++ },
++ {
++ "id": "U1TxsWHrqIQ",
++ "title": "FC RESEARCH!"
++ },
++ {
++ "id": "B6paEKdtji8",
++ "title": "FCircles"
++ },
++ {
++ "id": "1WIc8C-0Blk",
++ "title": "Say It Ain't So"
++ },
++ {
++ "id": "d06aJCXpHP8",
++ "title": "Ain't No Path For The Wicked"
++ },
++ {
++ "id": "g_JQvqILVNU",
++ "title": "\"A Lot\" - 21 FCs"
++ }
]
}