From 81fbf654977bc20d2aa20717d727077e3dd3c3a8 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Fri, 5 Jun 2026 15:34:30 +0530 Subject: [PATCH 01/28] feat(data): add canonical soveng alumni list --- src/data/sovengAlumni.js | 5 + src/data/sovengAlumni.json | 736 +++++++++++++++++++++++++++++++++++++ src/lib/sovengAlumni.ts | 33 ++ 3 files changed, 774 insertions(+) create mode 100644 src/data/sovengAlumni.js create mode 100644 src/data/sovengAlumni.json create mode 100644 src/lib/sovengAlumni.ts diff --git a/src/data/sovengAlumni.js b/src/data/sovengAlumni.js new file mode 100644 index 0000000..797cc90 --- /dev/null +++ b/src/data/sovengAlumni.js @@ -0,0 +1,5 @@ +import sovEngAlumniData from './sovengAlumni.json'; + +const sovEngAlumni = sovEngAlumniData; + +export default sovEngAlumni; diff --git a/src/data/sovengAlumni.json b/src/data/sovengAlumni.json new file mode 100644 index 0000000..c2e3788 --- /dev/null +++ b/src/data/sovengAlumni.json @@ -0,0 +1,736 @@ +[ + { + "pubkey": "e3fc673fc5f99cc554d0ff47756795647d25cb6e6658f912d114ae6429d35d35", + "npub": "npub1u07xw079lxwv24xslarh2eu4v37jtjmwvev0jyk3zjhxg2wnt56seyez97", + "name": "a1denvalu3", + "nip05Verified": false, + "picture": "https://m.primal.net/JfYR.jpg" + }, + { + "pubkey": "404d9570c9ae6efb2ba75607b7db64a4ac8eea14992f57c2ec6bf51fe4d42fe7", + "npub": "npub1gpxe2uxf4eh0k2a82crm0kmy5jkga6s5nyh40shvd063lex59lnsrx434r", + "name": "Ace", + "displayName": "Ace", + "nip05Verified": false + }, + { + "pubkey": "990c8f060750cfae3d1c9c03099f87e7216bea1c5fbcbe7f00fcb99f0c7edeae", + "npub": "npub1nyxg7ps82r86u0gunspsn8u8uuskh6sut77tulcqljue7rr7m6hquzh9ph", + "name": "Alan", + "displayName": "Alan", + "nip05Verified": false, + "picture": "https://images.saymedia-content.com/.image/t_share/MTc2NDYyMTcxMDg4Mjk5OTk0/the-endangered-snow-leopard.jpg" + }, + { + "pubkey": "d76726da1b64e8679d8b6e66facf551ba96f2612de5a171fac818ee85ce3e5fe", + "npub": "npub16anjdksmvn5x08vtden04n64rw5k7fsjmedpw8avsx8wsh8ruhlq076pfx", + "name": "Alex Lewin", + "displayName": "Alex Lewin", + "nip05": "alex@pleb.fm", + "nip05Verified": true, + "picture": "https://pbs.twimg.com/profile_images/1640416793159163904/5Jzp5M6e_400x400.jpg" + }, + { + "pubkey": "056f33245ca4cc4fa3c1d6e557dd8eae714889f3c3423cbd6fbf09f3c0e200d2", + "npub": "npub1q4hnxfzu5nxylg7p6mj40hvw4ec53z0ncdpre0t0huyl8s8zqrfquvz7zr", + "name": "AlexXie", + "displayName": "Alex Xie", + "nip05Verified": false, + "picture": "https://cdn.nostrcheck.me/edd8500b4d86fee6e6a824b96b9c727a0e06ee7be4603eb868fd8ad0b1a1ada7.webp" + }, + { + "pubkey": "efe5d120df0cc290fa748727fb45ac487caad346d4f2293ab069e8f01fc51981", + "npub": "npub1aljazgxlpnpfp7n5sunlk3dvfp72456x6nezjw4sd850q879rxqsthg9jp", + "name": "aljaz", + "displayName": "aljaz", + "nip05": "aljaz@nostr.si", + "nip05Verified": true, + "picture": "https://m.primal.net/HRBw.jpg" + }, + { + "pubkey": "5b705e6cb602425c019202dd070a0c009b040ac19960eeef2d8a8fab25c1efe5", + "npub": "npub1tdc9um9kqfp9cqvjqtwswzsvqzdsgzkpn9swamed3286kfwpaljsrr8r0y", + "name": "andreloja", + "displayName": "André Loja", + "nip05": "andreloja@freemadeira.org", + "nip05Verified": true, + "picture": "https://nostr.build/i/nostr.build_e243727155be56487475c10a44ba24647cc2b7c5820bf0cd0fe138f2edc7da6a.jpg" + }, + { + "pubkey": "b158557dddf53d5b98e7fb7597a294f67c7cb6accdcc9aea9f6a5ab50fae01ee", + "npub": "npub1k9v92lwa7574hx88ld6e0g557e78ed4vehxf465ldfdt2rawq8hq4jvecm", + "name": "arinc9", + "nip05Verified": false + }, + { + "pubkey": "bbb5dda0e15567979f0543407bdc2033d6f0bbb30f72512a981cfdb2f09e2747", + "npub": "npub1hw6amg8p24ne08c9gdq8hhpqx0t0pwanpae9z25crn7m9uy7yarse465gr", + "name": "Arjen", + "displayName": "Arjen", + "nip05Verified": false, + "picture": "https://image.nostr.build/e1286eafbb786715182cc2a432b44fae5de7107ec95c6c9498969943422fa5df.png" + }, + { + "pubkey": "9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437", + "npub": "npub1nmr6w7qk0ta36vxysv77jv3d5rqghfc6d8sez8240rf3gja4vsmsd2yha8", + "name": "balas", + "nip05": "_@balas.pt", + "nip05Verified": true, + "picture": "https://i.nostr.build/WX5nCEZIwqiSkRPb.jpg" + }, + { + "pubkey": "e1ff3bfdd4e40315959b08b4fcc8245eaa514637e1d4ec2ae166b743341be1af", + "npub": "npub1u8lnhlw5usp3t9vmpz60ejpyt649z33hu82wc2hpv6m5xdqmuxhs46turz", + "name": "benthecarman", + "displayName": "benthecarman", + "nip05": "_@benthecarman.com", + "nip05Verified": true, + "picture": "https://pfp.nostr.build/11670ef3e4b85e22e85a6558a7e7ea6eda960fc72f1a211042173609dce4be4e.jpg" + }, + { + "pubkey": "50d94fc2d8580c682b071a542f8b1e31a200b0508bab95a33bef0855df281d63", + "npub": "npub12rv5lskctqxxs2c8rf2zlzc7xx3qpvzs3w4etgemauy9thegr43sf485vg", + "name": "calle 💯", + "displayName": "calle 💯", + "nip05": "calle@cashu.me", + "nip05Verified": true, + "picture": "https://avatars.githubusercontent.com/u/93376500" + }, + { + "pubkey": "d36e8083fa7b36daee646cb8b3f99feaa3d89e5a396508741f003e21ac0b6bec", + "npub": "npub16dhgpql60vmd4mnydjut87vla23a38j689jssaqlqqlzrtqtd0kqex0nkq", + "name": "calvadev", + "displayName": "calvadev⚡️", + "nip05": "calvadev@calva.dev", + "nip05Verified": true, + "picture": "https://pfp.nostr.build/bfadf697f0fff255ce69f36697c0800556e62bc7f4d4bd6976e23bb5fcb215ea.jpg" + }, + { + "pubkey": "ec79b568bdea63ca6091f5b84b0c639c10a0919e175fa09a4de3154f82906f25", + "npub": "npub1a3um269aaf3u5cy37kuykrrrnsg2pyv7za06pxjduv25lq5sdujs2qmdj6", + "name": "Chiefmonkey", + "nip05": "chiefmonkey@primal.net", + "nip05Verified": true, + "picture": "https://blossom.primal.net/67a5609f18a247a5bdf579737b629076340905f4289e501d8cbf924605407424.png" + }, + { + "pubkey": "5fef2136ff8584533376e2798febf192eb320647051aa6e29e572e22d664c916", + "npub": "npub1tlhjzdhlskz9xvmkufucl6l3jt4nypj8q5d2dc572uhz94nyeytq02tuyu", + "name": "covah", + "displayName": "disgruntledStudent", + "nip05Verified": false, + "picture": "https://m.primal.net/LAPO.jpg" + }, + { + "pubkey": "a008def15796fba9a0d6fab04e8fd57089285d9fd505da5a83fe8aad57a3564d", + "npub": "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr", + "name": "DanConwayDev", + "displayName": "DanConwayDev", + "nip05": "_@danconwaydev.com", + "nip05Verified": true, + "picture": "https://pfp.nostr.build/437c14b92bc305f2d7bdfd2653757a13712fa83de21db44770bbe1e3ebec6bbc.jpg" + }, + { + "pubkey": "04dcaf2552801937d1c20b69adf89646f21b53c17906271d22c7be9bcadb96c0", + "npub": "npub1qnw27f2jsqvn05wzpd56m7ykgmepk57p0yrzw8fzc7lfhjkmjmqqmd9r6h", + "name": "DhananjayPurohit", + "displayName": "Dhananjay Purohit", + "nip05Verified": false, + "picture": "https://blossom.primal.net/3e8426497c922a8d2b86fd1644b98296517eb9975fe5aa00a87ed3e7afb929fe.jpg" + }, + { + "pubkey": "1f830dd875130b134fbf3f27a69eecd8613a499748a71b5a271a719febae14ed", + "npub": "npub1r7psmkr4zv93xnal8un6d8hvmpsn5jvhfzn3kk38rfcel6awznks7znspg", + "name": "dimi", + "displayName": "Dimi", + "nip05Verified": false, + "picture": "https://image.nostr.build/3d4bc423f02cdb9b14e0f2cb218681c8b109182f67c9de02089655489e96332a.png" + }, + { + "pubkey": "da18e9860040f3bf493876fc16b1a912ae5a6f6fa8d5159c3de2b8233a0d9851", + "npub": "npub1mgvwnpsqgrem7jfcwm7pdvdfz2h95mm04r23t8pau2uzxwsdnpgs0gpdjc", + "name": "Dustin", + "displayName": "Dustin Dannenhauer", + "nip05": "dustind@dtdannen.github.io", + "nip05Verified": true, + "picture": "https://dtdannen.github.io/profile_pic_newer.jpg" + }, + { + "pubkey": "6b1b8dac34ffc61d464dfeef00e4a84a604e172ef6391fb629293d6f1666148c", + "npub": "npub1dvdcmtp5llrp63jdlmhspe9gffsyu9ew7cu3ld3f9y7k79nxzjxqf4d4rm", + "name": "dvdc", + "displayName": "David Caseria", + "nip05": "dvdc@sovereign.app", + "nip05Verified": false, + "picture": "https://m.primal.net/HkRO.jpg" + }, + { + "pubkey": "167e7fe01a76b6bec9d2a9b196b18c72e150e985fbeb46ee651869e7b4032785", + "npub": "npub1zel8lcq6w6mtajwj4xcedvvvwts4p6v9l045dmn9rp570dqry7zsyll0dt", + "name": "dzdidi", + "displayName": "dzdidi", + "nip05Verified": false, + "picture": "https://pbs.twimg.com/profile_images/1585282118585925634/HbG2Ylu5.jpg" + }, + { + "pubkey": "ddf03aca85ade039e6742d5bef3df352df199d0d31e22b9858e7eda85cb3bbbe", + "npub": "npub1mhcr4j594hsrnen594d7700n2t03n8gdx83zhxzculk6sh9nhwlq7uc226", + "name": "Egge", + "nip05": "egge@npub.cash", + "nip05Verified": true, + "picture": "https://image.nostr.build/3097c9da617f9da288249ce5b7ef7bfc4f7bab16e05653962c49567c3dddf53e.jpg" + }, + { + "pubkey": "408f636bd26fcc5f29889033b447cb2411f60ab1b8a5fc8cb3842dab758fdeb5", + "npub": "npub1gz8kx67jdlx972vgjqemg37tysglvz43hzjler9nssk6kav0m66sv7xjkt", + "name": "elnosh", + "displayName": "elnosh", + "nip05": "elnosh@getalby.com", + "nip05Verified": true, + "picture": "https://image.nostr.build/be34eff64786887c484ed9d82c4a16a41c940f9bc2eb02fe9fe5b906a9ea5534.jpg" + }, + { + "pubkey": "f4d1866e8599563c52ceeedf11c28b8567e465c6e9a91df92add535d57f02ab0", + "npub": "npub17ngcvm59n9trc5kwam03rs5ts4n7gewxax53m7f2m4f464ls92cqr5qjta", + "name": "En", + "displayName": "En", + "nip05": "enes@nostrdev.com", + "nip05Verified": true, + "picture": "https://cdn.nostrcheck.me/6e24af77db17d8f891e1967d2eb61877f18e4186980fa16958875a45b3f1350b/ac04a56816165e043d8f8ea6af0af8581d3f14191115052b42efbd36f7c08113.webp" + }, + { + "pubkey": "96f652249b0946e1575d78a8bc7450123c8e64f1c56f6b2f93bc23fb249ed85a", + "npub": "npub1jmm9yfymp9rwz46a0z5tcazszg7gue83c4hkktunhs3lkfy7mpdqx6zden", + "name": "eugene", + "displayName": "eugene", + "nip05": "eugene23@iris.to", + "nip05Verified": true, + "picture": "https://media.tate.org.uk/art/images/work/P/P07/P07142_10.jpg" + }, + { + "pubkey": "e47d738ee8d9525a34aff86caea5c7bd57ea593a71d9b4754211650347ab1078", + "npub": "npub1u37h8rhgm9f95d90lpk2afw8h4t75kf6w8vmga2zz9jsx3atzpuqlmw8vy", + "name": "Evan", + "displayName": "Evan", + "nip05": "evan@routstr.com", + "nip05Verified": true, + "picture": "https://m.primal.net/QAjZ.jpg" + }, + { + "pubkey": "d04ecf33a303a59852fdb681ed8b412201ba85d8d2199aec73cb62681d62aa90", + "npub": "npub16p8v7varqwjes5hak6q7mz6pygqm4pwc6gve4mrned3xs8tz42gq7kfhdw", + "name": "Five", + "displayName": "Five", + "nip05Verified": false, + "picture": "https://nostr.build/i/nostr.build_544c76d01261e8ab387b69261ba0e62e63858188beef76d2f3999822176655f2.png" + }, + { + "pubkey": "b7c6f6915cfa9a62fff6a1f02604de88c23c6c6c6d1b8f62c7cc10749f307e81", + "npub": "npub1klr0dy2ul2dx9llk58czvpx73rprcmrvd5dc7ck8esg8f8es06qs427gxc", + "name": "florian", + "displayName": "florian", + "nip05": "florian@slidestr.net", + "nip05Verified": true, + "picture": "https://image.nostr.build/0ebb55ed4d269015f2c6fb7119e8ff8686110cad690443894b31287866758a5e.jpg" + }, + { + "pubkey": "5d3ab876c206a37ad3b094e20bfc3941df3fa21a15ac8ea76d6918473789669a", + "npub": "npub1t5atsakzq63h45asjn3qhlpeg80nlgs6zkkgafmddyvywdufv6dqxfahcl", + "name": "Francis Mars", + "displayName": "Francis Mars", + "nip05": "francismars@chainduel.net", + "nip05Verified": false, + "picture": "https://pbs.twimg.com/profile_images/1996248129771831296/uoVAZfPW_400x400.jpg" + }, + { + "pubkey": "726a1e261cc6474674e8285e3951b3bb139be9a773d1acf49dc868db861a1c11", + "npub": "npub1wf4pufsucer5va8g9p0rj5dnhvfeh6d8w0g6eayaep5dhps6rsgs43dgh9", + "name": "franzap", + "displayName": "franzap", + "nip05": "fran@zapstore.dev", + "nip05Verified": true, + "picture": "https://nostr.build/i/nostr.build_1732d9a6cd9614c6c4ac3b8f0ee4a8242e9da448e2aacb82e7681d9d0bc36568.jpg" + }, + { + "pubkey": "fa3c984d5536ebe21bc41f8df5390e9394ec4dfa6f4cb664607e8ed5a1d6694f", + "npub": "npub1lg7fsn24xm47yx7yr7xl2wgwjw2wcn06daxtverq068dtgwkd98sf6ge63", + "name": "Gaius I. Vicesimus Primus Superior", + "displayName": "Gaius I. Vicesimus Primus Superior", + "nip05": "Gaius_Bitcoinus_Superior@primal.net", + "nip05Verified": false, + "picture": "https://npub1lg7fsn24xm47yx7yr7xl2wgwjw2wcn06daxtverq068dtgwkd98sf6ge63.blossom.band/37d34012dfbdcaeae838484582e831e256bf88a1ce7bc6444c83f4c7fd2d93b7.jpg" + }, + { + "pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93", + "npub": "npub1dergggklka99wwrs92yz8wdjs952h2ux2ha2ed598ngwu9w7a6fsh9xzpc", + "name": "Gigi", + "displayName": "Gigi", + "nip05": "dergigi.com", + "nip05Verified": true, + "picture": "https://dergigi.com/assets/images/avatars/09.png" + }, + { + "pubkey": "d91191e30e00444b942c0e82cad470b32af171764c2275bee0bd99377efd4075", + "npub": "npub1mygerccwqpzyh9pvp6pv44rskv40zutkfs38t0hqhkvnwlhagp6s3psn5p", + "name": "gsovereignty", + "displayName": "gsovereignty", + "nip05": "gsovereignty@nostrovia.org", + "nip05Verified": true, + "picture": "https://nostr.build/i/nostr.build_029831470fc213b50dca90bd35ae0fea4e2a2540388bb1d459ab73d1c1a51f5c.jpg" + }, + { + "pubkey": "40b9c85fffeafc1cadf8c30a4e5c88660ff6e4971a0dc723d5ab674b5e61b451", + "npub": "npub1gzuushllat7pet0ccv9yuhygvc8ldeyhrgxuwg744dn5khnpk3gs3ea5ds", + "name": "Gzuuus", + "displayName": "Gzuuus", + "nip05": "gzuuus@contextvm.org", + "nip05Verified": true, + "picture": "https://pfp.nostr.build/3e72dab77cfcb2339a30a832c891064e38d70ad652cb58306516e34e78e84325.png" + }, + { + "pubkey": "24480686b56234a240fd9827209b584847f3d4f9657f0d9a97aec5320a264acb", + "npub": "npub1y3yqdp44vg62ys8anqnjpx6cfprl848ev4lsmx5h4mznyz3xft9sen050h", + "name": "hvmelo", + "displayName": "卄乇几尺讠Ɋㄩ乇", + "nip05Verified": false, + "picture": "https://image.nostr.build/e46840a201179aa85982ca05df4c400df2bf9540a39135207d866b610498df17.jpg" + }, + { + "pubkey": "266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5", + "npub": "npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr", + "name": "hzrd149", + "nip05": "_@hzrd149.com", + "nip05Verified": true, + "picture": "https://cdn.hzrd149.com/5ed3fe5df09a74e8c126831eac999364f9eb7624e2b86d521521b8021de20bdc.png" + }, + { + "pubkey": "0eef96197f5c6be3859b6817e6a5736685856c416e29a2925bd5a15b2a57c8b1", + "npub": "npub1pmhevxtlt3478pvmdqt7dftnv6zc2mzpdc569yjm6ks4k2jhezcs53uksr", + "name": "Ian", + "displayName": "Ian", + "nip05": "ian@nextblock.city", + "nip05Verified": false, + "picture": "https://image.nostr.build/c9c2e526b8e2fbbaea37b201d39c381a16adda905bfdb38fc0648b5997494cc4.jpg" + }, + { + "pubkey": "2bbace553efebf58dd55912169f92c1123eb6121d7ba092f6c50104afc31acef", + "npub": "npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k", + "name": "jcorgan", + "displayName": "Johnathan Corgan", + "nip05Verified": false, + "picture": "https://image.nostr.build/58f5a81649be72e99c7f270ddac38e030ce145eb474ae680c72f48b57d73251d.jpg" + }, + { + "pubkey": "53a91e3a64d1f658e983ac1e4f9e0c697f8f33e01d8debe439f4c1a92113f592", + "npub": "npub12w53uwny68m936vr4s0yl8svd9lc7vlqrkx7hepe7nq6jggn7kfq92rrm3", + "name": "Joel 🇨🇭", + "displayName": "Joel 🇨🇭", + "nip05": "joel@joelstuedle.ch", + "nip05Verified": true, + "picture": "https://i.postimg.cc/Zn1XTR32/goldener-punkt.jpg" + }, + { + "pubkey": "1634b87b5fcfd4a6c4ff2f2de17450ccce46f9abe0b02a71876c596ec165bfed", + "npub": "npub1zc6ts76lel22d38l9uk7zazsen8yd7dtuzcz5uv8d3vkast9hlks4725sl", + "name": "k0sh", + "nip05": "kosh@getalby.com", + "nip05Verified": true, + "picture": "https://m.primal.net/PPfe.png" + }, + { + "pubkey": "4e177978f3a0f3e6e083674e546d8813c5a429941f6c3d521736764649ce6c84", + "npub": "npub1fcthj78n5re7dcyrva89gmvgz0z6g2v5rakr65shxemyvjwwdjzqcpeavj", + "name": "karliatto", + "displayName": "karliatto", + "nip05": "karliatto@karliatto.com", + "nip05Verified": true, + "picture": "https://avatars.githubusercontent.com/u/5362163?v=4" + }, + { + "pubkey": "6eef2e68c399c8f2efbf70d831c2b618d7a84bdfd21734a81e6d7d3d817f6850", + "npub": "npub1dmhju6xrn8y09malwrvrrs4krrt6sj7l6gtnf2q7d47nmqtldpgqgctgtm", + "name": "lauri", + "displayName": "lauri", + "nip05Verified": false, + "picture": "https://npub1dmhju6xrn8y09malwrvrrs4krrt6sj7l6gtnf2q7d47nmqtldpgqgctgtm.blossom.band/c1488097b9acb0698cbbf4cf92c33d7c746ff900872131d8e36d11b32cce2da1.png" + }, + { + "pubkey": "6fb266012c3008303e54ae55140b46957e9978098401dda34f4d921a275bf8bb", + "npub": "npub1d7exvqfvxqyrq0j54e23gz6xj4lfj7qfssqamg60fkfp5f6mlzaskklrf3", + "name": "Leito", + "displayName": "Leito", + "nip05": "leo@vlt.ge", + "nip05Verified": true, + "picture": "https://cdn.hzrd149.com/64f844ac93b2b8e4b26e17604939d1a9af210a1ed9e16369352635d5708026cd.jpeg" + }, + { + "pubkey": "c88f94f0a391b9aaa1ffefd645253b1a968b0a422a876ea48920a95d45c33f47", + "npub": "npub1ez8efu9rjxu64g0lalty2ffmr2tgkzjz92rkafyfyz5463wr8ars8zls5t", + "name": "leonardo", + "displayName": "Leonardo", + "nip05Verified": false, + "picture": "https://pbs.twimg.com/profile_images/1637623131614466048/Ew3ceh2B_400x400.png" + }, + { + "pubkey": "cfd7df62799a22e384a4ab5da8c4026c875b119d0f47c2716b20cdac9cc1f1a6", + "npub": "npub1elta7cneng3w8p9y4dw633qzdjr4kyvaparuyuttyrx6e8xp7xnq32cume", + "name": "Lez", + "nip05": "lez@nostr.hu", + "nip05Verified": true, + "picture": "https://nostr.hu/kobuki.jpg" + }, + { + "pubkey": "d15baf16eae236584647abb51da7c0f72f7375ca0c5af754fe175a4df90b2bf0", + "npub": "npub169d679h2ugm9s3j84w63mf7q7uhhxaw2p3d0w487zadym7gt90cqdqn6cc", + "name": "Manuel ₿", + "displayName": "Manuel ₿", + "nip05Verified": false, + "picture": "https://pbs.twimg.com/profile_images/1589784136859934722/nxgcBt6x.jpg" + }, + { + "pubkey": "5082984480f3b27891840a2037512739149678efc2ac981ca8cd016d02304efd", + "npub": "npub12zpfs3yq7we83yvypgsrw5f88y2fv780c2kfs89ge5qk6q3sfm7spks880", + "name": "marc", + "displayName": "M Ʌ R C", + "nip05Verified": false, + "picture": "https://nostr.build/i/p/5490p.png" + }, + { + "pubkey": "38e9814f87cd751506aef5d7dbf081de14ad307c6984526ab0ceaf96f6349373", + "npub": "npub18r5cznu8e4632p4w7htahuypmc226vrudxz9y64se6heda35jdescaeqct", + "name": "MathJud", + "nip05Verified": false, + "picture": "https://avatars.githubusercontent.com/u/1871891" + }, + { + "pubkey": "b7ed68b062de6b4a12e51fd5285c1e1e0ed0e5128cda93ab11b4150b55ed32fc", + "npub": "npub1klkk3vrzme455yh9rl2jshq7rc8dpegj3ndf82c3ks2sk40dxt7qulx3vt", + "name": "Max", + "displayName": "Max", + "nip05": "max@towardsliberty.com", + "nip05Verified": true, + "picture": "https://image.nostr.build/08e549edff9a20737d72a74d6dd9bcd6f7f5189ef825626afdce3de9062afcb7.jpg" + }, + { + "pubkey": "a9434ee165ed01b286becfc2771ef1705d3537d051b387288898cc00d5c885be", + "npub": "npub149p5act9a5qm9p47elp8w8h3wpwn2d7s2xecw2ygnrxqp4wgsklq9g722q", + "name": "Niel Liesmons", + "displayName": "Niel Liesmons", + "nip05Verified": false, + "picture": "https://image.nostr.build/bf7e965bf6ddba341ef07a866aa9562e7323e9e5639cd699ecb187078c9192e9.jpg" + }, + { + "pubkey": "27487c9600b16b24a1bfb0519cfe4a5d1ad84959e3cce5d6d7a99d48660a1f78", + "npub": "npub1yay8e9sqk94jfgdlkpgeelj2t5ddsj2eu0xwt4kh4xw5ses2rauqnstrdv", + "name": "Nostr Dev Team", + "displayName": "Nostr Dev Team", + "nip05": "_@nostrdev.com", + "nip05Verified": true, + "picture": "https://image.nostr.build/adf94e1a8a2c1208821ef40caba13c62fb8695798a94fa5351aea435230d2523.jpg" + }, + { + "pubkey": "02a11d1545114ab63c29958093c91b9f88618e56fee037b9d2fabcff32f62ea9", + "npub": "npub1q2s36929z99tv0pfjkqf8jgmn7yxrrjklmsr0wwjl2707vhk965sp7dx3u", + "name": "nourspace", + "displayName": "Nour", + "nip05": "_@nour.space", + "nip05Verified": true, + "picture": "https://i.nostr.build/L78n.webp" + }, + { + "pubkey": "1af12235ca57fbd7936eeafe35b1eafa39a06a191550c86a2dd1741e2c44c881", + "npub": "npub1rtcjydw22laa0ymwatlrtv02lgu6q6sez4gvs63d696putzyezqs65qqsd", + "name": "npub1rtcjydw22laa0ymwatlrtv02lgu6q6sez4gvs63d696putzyezqs65qqsd", + "nip05Verified": false + }, + { + "pubkey": "9839f160d893daae661c84168e07f46f0e1e9746feb8439a6d76738b4ad32eaa", + "npub": "npub1nqulzcxcj0d2uesusstgupl5du8pa96xl6uy8xndweeckjkn964qjs23sn", + "name": "nQuiz", + "displayName": "nQuiz", + "nip05": "nquiz@nostrplebs.com", + "nip05Verified": true, + "picture": "https://nostr.build/i/a830ffe4f5a8774167578dc142edff984fbf2ada80e0af73e144c3f7f19343ae.jpg" + }, + { + "pubkey": "d02a3b54e6433fc7c2608e99ef9b4aed9039644446da9822d20b5b9890964f2f", + "npub": "npub16q4rk48xgvlu0snq36v7lx62akgrjezygmdfsgkjpdde3yykfuhscgxcms", + "name": "oleksky", + "displayName": "oleksky", + "nip05Verified": false, + "picture": "https://blossom.primal.net/9b5e0df1376203e556050dea380935211e4952b17b0eeb388298bb1b99a35c51.jpg" + }, + { + "pubkey": "df173277182f3155d37b330211ba1de4a81500c02d195e964f91be774ec96708", + "npub": "npub1mutnyacc9uc4t5mmxvpprwsauj5p2qxq95v4a9j0jxl8wnkfvuyque23vg", + "name": "OpenSecret", + "displayName": "OpenSecret", + "nip05": "OpenSecret@primal.net", + "nip05Verified": true, + "picture": "https://m.primal.net/PSXU.png" + }, + { + "pubkey": "453a656903a031395d450f318211a6ec54cd79049a851f92cd6702c65ff5f5bd", + "npub": "npub1g5ax26gr5qcnjh29puccyydxa32v67gyn2z3lykdvupvvhl47k7spf8ypc", + "name": "Otto", + "displayName": "Otto", + "nip05": "otto@nostrdev.com", + "nip05Verified": true, + "picture": "https://image.nostr.build/a799ebb879bb8c721736b63f7975d6a00e4a91afa07667f8b8007eaefd2e5292.jpg" + }, + { + "pubkey": "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", + "npub": "npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft", + "name": "PABLOF7z", + "displayName": "PABLOF7z", + "nip05": "_@f7z.io", + "nip05Verified": true, + "picture": "https://m.primal.net/KwlG.jpg" + }, + { + "pubkey": "0d6c8388dcb049b8dd4fc8d3d8c3bb93de3da90ba828e4f09c8ad0f346488a33", + "npub": "npub1p4kg8zxukpym3h20erfa3samj00rm2gt4q5wfuyu3tg0x3jg3gesvncxf8", + "name": "Paul", + "displayName": "Paul", + "nip05": "futurepaul@paul.lol", + "nip05Verified": true, + "picture": "https://paul.lol/waffle_animated.gif" + }, + { + "pubkey": "8cd2d0f8310f7009e94f50231870756cb39ba68f37506044910e2f71482b1788", + "npub": "npub13nfdp7p3pacqn6202q33sur4djeehf50xagxq3y3pchhzjptz7yqenvn7c", + "name": "Pedro 🧨", + "displayName": "Pedro 🧨", + "nip05": "_@pedromvpg.com", + "nip05Verified": false, + "picture": "https://blossom.primal.net/fcb540fe2b667a0d32feb52a2ce38645c43693c9276bd114ce4512ce5db89416.jpg" + }, + { + "pubkey": "94215f42a96335c87fcb9e881a0bbb62b9a795519e109cf5f9d2ef617681f622", + "npub": "npub1jss47s4fvv6usl7tn6yp5zamv2u60923ncgfea0e6thkza5p7c3q0afmzy", + "name": "PeteWinn", + "displayName": "Pete Winn", + "nip05": "pw@primal.net", + "nip05Verified": true, + "picture": "https://pbs.twimg.com/profile_images/1655801903710871552/-_Loy9pw_400x400.jpg" + }, + { + "pubkey": "4ad6fa2d16e2a9b576c863b4cf7404a70d4dc320c0c447d10ad6ff58993eacc8", + "npub": "npub1ftt05tgku25m2akgvw6v7aqy5ux5mseqcrzy05g26ml43xf74nyqsredsh", + "name": "redshift", + "displayName": "redshift", + "nip05": "redshift@routstr.com", + "nip05Verified": true, + "picture": "https://image.nostr.build/75b59a54f0cfdc2df0e78e7fbed0be2af122ad2b001eb21eb0d1e6bdf63175f2.jpg" + }, + { + "pubkey": "cd169bd8fbd5179e2a8d498ffc31d3ae0e40825ff2b8a85ea359c4455a107ca8", + "npub": "npub1e5tfhk8m65teu25dfx8lcvwn4c8ypqjl72u2sh4rt8zy2kss0j5qct7mh9", + "name": "René Aaron", + "nip05": "reneaaron@getalby.com", + "nip05Verified": true, + "picture": "https://secure.gravatar.com/avatar/07e22939e7672b38c56615068c4c715f?size=200&default=mm&rating=g" + }, + { + "pubkey": "9c5d5e2e0a1d603047ad070ab184b48b53fc4dde0867e52fadadd760c3167636", + "npub": "npub1n3w4uts2r4srq3adqu9trp953dflcnw7ppn72tad4htkpsckwcmqjef6um", + "name": "robos", + "displayName": "robos", + "nip05": "_@bushbashjapan.fyi", + "nip05Verified": true, + "picture": "https://i.imgur.com/fI7uFEb.png" + }, + { + "pubkey": "e771af0b05c8e95fcdf6feb3500544d2fb1ccd384788e9f490bb3ee28e8ed66f", + "npub": "npub1uac67zc9er54ln0kl6e4qp2y6ta3enfcg7ywnayshvlw9r5w6ehsqq99rx", + "name": "sandwich", + "displayName": "sandwich", + "nip05": "_@sandwich.farm", + "nip05Verified": true, + "picture": "https://image.nostr.build/8bb39c413276b2d8509bc34aa926b05f46b968913f2a15236d50e6579314b1ae.jpg" + }, + { + "pubkey": "12ee03d11684a125dd87be879c28190415be3f3b1eca6b4ed743bd74ffd880e6", + "npub": "npub1zthq85gksjsjthv8h6rec2qeqs2mu0emrm9xknkhgw7hfl7csrnq6wxm56", + "name": "SatsAndSports", + "displayName": "SatsAndSports", + "nip05Verified": false, + "picture": "https://blossom.primal.net/f697b3eeb618dcf6cc5d15f6399ee59e57665e9e345f2d8ffe1f3fdf07b0928f.jpg" + }, + { + "pubkey": "3aa5817273c3b2f94f491840e0472f049d0f10009e23de63006166bca9b36ea3", + "npub": "npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf", + "name": "Schlaus Kwab", + "displayName": "Schlaus Kwab", + "nip05": "wavefunc.live", + "nip05Verified": true, + "picture": "https://image.nostr.build/68bd8d4a911573d65b90291ad36cb23a1b76b439a7deebbc59724a0487d4a3ae.jpg" + }, + { + "pubkey": "1bbd7fdf68eaf5c19446c3aaf63b39dd4a8e33548bc96f6bd239a4124d8f229e", + "npub": "npub1rw7hlhmgat6ur9zxcw40vweem49guv6530yk767j8xjpynv0y20q6qsl3w", + "name": "sebas", + "displayName": "sebas", + "nip05": "_@sebdev.io", + "nip05Verified": false, + "picture": "https://cdn.sebdev.io/c402f0974e2f6ebe96efee967c64c3ebfd4366e2f284f4d8650371af7787fdb0" + }, + { + "pubkey": "a136247d8caf7e30bf403d32006faeca0c9d1cec7a16075e4142c2fed6cade60", + "npub": "npub15ymzglvv4alrp06q85eqqmawegxf688v0gtqwhjpgtp0a4k2mesqshkwwx", + "name": "Shadrach", + "displayName": "Shadrach", + "nip05": "shadrach@nostrplebs.com", + "nip05Verified": true, + "picture": "https://nostr.build/i/fe58f6343aad6f92d469257cea58ce05a8375db379cb12e3823265d1424cc650.jpg" + }, + { + "pubkey": "3a06add309fd8419ea4d4e475e9c0dff5909c635d9769bf0728232f3a0683a84", + "npub": "npub18gr2m5cflkzpn6jdfer4a8qdlavsn334m9mfhurjsge08grg82zq6hu9su", + "name": "shroominic", + "displayName": "shroominic", + "nip05": "shroominic@routstr.com", + "nip05Verified": true, + "picture": "https://image.nostr.build/e54b7f51e004ac04a9e658bac14bb71eb53cdabb4fd8f9f199a9ae13f5cd69d6.jpg" + }, + { + "pubkey": "4523be58d395b1b196a9b8c82b038b6895cb02b683d0c253a955068dba1facd0", + "npub": "npub1g53mukxnjkcmr94fhryzkqutdz2ukq4ks0gvy5af25rgmwsl4ngq43drvk", + "name": "Sirius", + "displayName": "Sirius", + "nip05Verified": false, + "picture": "https://cdn.nostr.build/i/8274ce86cc4477b80c8cad5ff4dfebe55f1223b3e35dfc10a1e19a67f29a8f8f.jpg" + }, + { + "pubkey": "d8a2c33f2e2ff3a9d4ff2a5593f3d5a59e9167fa5ded063d0e49891776611e0c", + "npub": "npub1mz3vx0ew9le6n48l9f2e8u745k0fzel6thksv0gwfxy3wanprcxq79mymx", + "name": "starbuilder", + "displayName": "StarBuilder", + "nip05": "starbuilder@current.fyi", + "nip05Verified": false, + "picture": "https://i.current.fyi/npub1current/profile/starbuilder.png" + }, + { + "pubkey": "ff27d01cb1e56fb58580306c7ba76bb037bf211c5b573c56e4e70ca858755af0", + "npub": "npub1lunaq893u4hmtpvqxpk8hfmtkqmm7ggutdtnc4hyuux2skr4ttcqr827lj", + "name": "Stuart Bowman", + "displayName": "Stuart Bowman", + "nip05": "_@satellite.earth", + "nip05Verified": false, + "picture": "https://cdn.satellite.earth/f7f4f08cdc582b8b2611ae6837b50ee323cb714d4978935cf7dc3f72431f3efb.jpg" + }, + { + "pubkey": "c8383d81dd24406745b68409be40d6721c301029464067fcc50a25ddf9139549", + "npub": "npub1equrmqway3qxw3dkssymusxkwgwrqypfgeqx0lx9pgjam7gnj4ysaqhkj6", + "name": "Sync", + "displayName": "Sync", + "nip05": "sync@nostr.boutique", + "nip05Verified": true, + "picture": "https://pfp.nostr.build/637221b41f21e6d5126cb44e6172cf8600cb1fc1953461de03d80ce983845953.gif" + }, + { + "pubkey": "04918dfc36c93e7db6cc0d60f37e1522f1c36b64d3f4b424c532d7c595febbc5", + "npub": "npub1qjgcmlpkeyl8mdkvp4s0xls4ytcux6my606tgfx9xttut907h0zs76lgjw", + "name": "thesimplekid", + "displayName": "thesimplekid", + "nip05": "thesimplekid@cashu.me", + "nip05Verified": true, + "picture": "https://avatars.githubusercontent.com/u/8606367?v=4" + }, + { + "pubkey": "f53b9d91a8cd177fb4a1cf081a1b6d58759a381ef120a7c5a18c0e70cae80983", + "npub": "npub175aemydge5thld9peuyp5xmdtp6e5wq77ys203dp3s88pjhgpxpsvgkemm", + "name": "Thomas", + "displayName": "Thomas", + "nip05": "Fucking@primal.net", + "nip05Verified": true, + "picture": "https://m.primal.net/KPzs.jpg" + }, + { + "pubkey": "06b7819d7f1c7f5472118266ed7bca8785dceae09e36ea3a4af665c6d1d8327c", + "npub": "npub1q6mcr8tlr3l4gus3sfnw6772s7zae6hqncmw5wj27ejud5wcxf7q0nx7d5", + "name": "Tim Bouma", + "displayName": "Tim Bouma", + "nip05": "trbouma@getsafebox.app", + "nip05Verified": true, + "picture": "https://raw.githubusercontent.com/trbouma/assets/main/profile_pic_crop.png" + }, + { + "pubkey": "1096f6be0a4d7f0ecc2df4ed2c8683f143efc81eeba3ece6daadd2fca74c7ecc", + "npub": "npub1zzt0d0s2f4lsanpd7nkjep5r79p7ljq7aw37eek64hf0ef6v0mxqgwljrv", + "name": "TollGate", + "displayName": "TollGate", + "nip05Verified": false, + "picture": "https://raw.githubusercontent.com/OpenTollGate/tollgate/refs/heads/main/images/TollGate_icon-White.png" + }, + { + "pubkey": "2f5759825226f1d57ef1652ba66114b2f938f7f5c50dc505708e5d8b31e4f3c9", + "npub": "npub19at4nqjjymca2lh3v546vcg5ktun3al4c5xu2pts3ewckv0y70ys0gupzr", + "name": "Tom", + "displayName": "Tom", + "nip05": "tom@tomdwyer.uk", + "nip05Verified": false, + "picture": "https://image.nostr.build/b5768f539a6b748f80e18af66f073733b2149ebd5d1f4d110eab5cb492fe1fb7.jpg" + }, + { + "pubkey": "d83b5ef189df7e884627294b752969547814c3cfe38995cf207c040e03bbe7a4", + "npub": "npub1mqa4auvfmalgs338999h22tf23upfs70uwyetneq0szquqamu7jqkhlfa7", + "name": "TugaJoe", + "displayName": "TugaJoe", + "nip05": "joe@pleb.world", + "nip05Verified": false, + "picture": "https://image.nostr.build/3aabbcfd8e1bedbf44d88876b6273aeead39ef6adff6aefe80830630a9288d75.jpg" + }, + { + "pubkey": "3b3a42d34cf0a1402d18d536c9d2ac2eb1c6019a9153be57084c8165d192e325", + "npub": "npub18vay956v7zs5qtgc65mvn54v96cuvqv6j9fmu4cgfjqkt5vjuvjsc47nzf", + "name": "victor", + "displayName": "Victor Stabile", + "nip05": "victorstabile.com", + "nip05Verified": false, + "picture": "https://blossom.primal.net/4ec8075d7bfd927f391929d5d8cc392f8f967ab0a8e8a5ad81b32f13b4fce69d.jpg" + }, + { + "pubkey": "d3052ca3e3d523b1ec80671eb1bba0517a2f522e195778dc83dd03a8d84a170e", + "npub": "npub16vzjeglr653mrmyqvu0trwaq29az753wr9th3hyrm5p63kz2zu8qzumhgd", + "name": "vnprc", + "displayName": "vnprc", + "nip05": "vnprc@trianglebitdevs.org", + "nip05Verified": true, + "picture": "https://pfp.nostr.build/f61e3a04df4dcc10a00283ad5879043ac1a0e78199238f7509a910f4efb5c8ba.png" + }, + { + "pubkey": "d60bdad03468f5f8c85b1b10db977e310a5aafab33750dfadb37488b02bfc8d7", + "npub": "npub16c9a45p5dr6l3jzmrvgdh9m7xy994tatxd6sm7kmxaygkq4lertsfnacfm", + "name": "yo", + "displayName": "yo", + "nip05Verified": false, + "picture": "https://blossom.primal.net/5d18b4bc5a21b1dd6ea0c0d879bb346bdf4e7523d583f237a6d4d3002f7c27a5.jpg" + }, + { + "pubkey": "17717ad4d20e2a425cda0a2195624a0a4a73c4f6975f16b1593fc87fa46f2d58", + "npub": "npub1zach44xjpc4yyhx6pgse2cj2pf98838kja03dv2e8ly8lfr094vqvm5dy5", + "name": "zach", + "displayName": "Zach", + "nip05": "zach@troop.is", + "nip05Verified": true, + "picture": "https://flockstr.s3.amazonaws.com/event/KWBj4AzufuBT_JymMCmdX" + }, + { + "pubkey": "7b849efa5604b58d50c419637b9873847dbf957081d526136c3a49b7357cd617", + "npub": "npub10wzfa7jkqj6c65xyr93hhxrns37ml9tss82jvymv8fymwdtu6cts3h6pvr", + "name": "Zaza", + "displayName": "Zaza", + "nip05": "zazawowow@primal.net", + "nip05Verified": true, + "picture": "https://blossom.primal.net/acfeeb16f61ee6bbb226256367d8cedc7a136a60a10bfd685cbd308893b46514.png" + }, + { + "pubkey": "fd38f135ef675eac5e93d5b2a738c41777c250188031caf1dcf07b1687a1fe49", + "npub": "npub1l5u0zd00va02ch5n6ke2wwxyzamuy5qcsqcu4uwu7pa3dpapleysf7aap5", + "name": "ziggie", + "displayName": "ziggie", + "nip05Verified": false, + "picture": "https://images.ziggie1984.win/images/avatar_nostr.png" + } +] diff --git a/src/lib/sovengAlumni.ts b/src/lib/sovengAlumni.ts new file mode 100644 index 0000000..815980e --- /dev/null +++ b/src/lib/sovengAlumni.ts @@ -0,0 +1,33 @@ +import sovEngAlumniData from '@/data/sovengAlumni.js'; + +export interface SovEngAlumniProfile { + pubkey: string; + npub: `npub1${string}`; + name: string; + displayName?: string; + nip05?: string; + nip05Verified: boolean; + picture?: string; +} + +export const allSovEngAlumni = [...(sovEngAlumniData as SovEngAlumniProfile[])].sort( + (left, right) => left.name.localeCompare(right.name, undefined, { sensitivity: 'base' }) || left.npub.localeCompare(right.npub) +); + +const alumniByNpub = new Map(allSovEngAlumni.map((profile) => [profile.npub, profile])); + +export function getSovEngAlumni(): SovEngAlumniProfile[] { + return [...allSovEngAlumni]; +} + +export function getSovEngAlumniByNpub(npub: string): SovEngAlumniProfile | undefined { + return alumniByNpub.get(npub as `npub1${string}`); +} + +export function getSovEngAlumniDisplayName(profile: SovEngAlumniProfile): string { + return profile.displayName || profile.name || profile.npub; +} + +export function getNostrProfileHref(npub: string): string { + return `https://njump.me/${npub}`; +} From 9af61f44172bb5e82de8c7a96faae889d66b4999 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Fri, 5 Jun 2026 15:42:37 +0530 Subject: [PATCH 02/28] feat(data): add canonical media appearances --- src/data/mediaAppearances.js | 5 +++ src/data/mediaAppearances.json | 76 ++++++++++++++++++++++++++++++++++ src/lib/mediaAppearances.ts | 51 +++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 src/data/mediaAppearances.js create mode 100644 src/data/mediaAppearances.json create mode 100644 src/lib/mediaAppearances.ts diff --git a/src/data/mediaAppearances.js b/src/data/mediaAppearances.js new file mode 100644 index 0000000..7b7ce90 --- /dev/null +++ b/src/data/mediaAppearances.js @@ -0,0 +1,5 @@ +import mediaAppearancesData from './mediaAppearances.json'; + +const mediaAppearances = mediaAppearancesData; + +export default mediaAppearances; diff --git a/src/data/mediaAppearances.json b/src/data/mediaAppearances.json new file mode 100644 index 0000000..fbe54b3 --- /dev/null +++ b/src/data/mediaAppearances.json @@ -0,0 +1,76 @@ +[ + { + "id": "open-markets-7-yo-hoho-sovereign-engineering", + "title": "#7 Yo hoho 🏴‍☠️ Sovereign Engineering", + "source": "Open Markets Podcast", + "platform": "Fountain", + "url": "https://fountain.fm/episode/BGS8MezCVgY9Tb6xwkkn", + "publishedAt": "2026-05-31T17:21:08.455Z", + "durationSeconds": 6850, + "featured": true, + "description": "Yo joins Open Markets to talk Nostr marketplace development, gamma markets, on-chain zaps, and the build culture around Sovereign Engineering.", + "alumniNpubs": ["npub16c9a45p5dr6l3jzmrvgdh9m7xy994tatxd6sm7kmxaygkq4lertsfnacfm", "npub1equrmqway3qxw3dkssymusxkwgwrqypfgeqx0lx9pgjam7gnj4ysaqhkj6"], + "projectNames": ["Shopstr", "Plebeian Market"], + "tags": ["Nostr marketplaces", "Sovereign Engineering", "Open Markets", "Zaps"] + }, + { + "id": "nodesignal-e280-sovereign-engineering-show-talk-build", + "title": "Nodesignal-Talk - E280 - Sovereign Engineering – Show-Talk-Build", + "source": "Nodesignal - Deine Bitcoin-Frequenz", + "platform": "Fountain", + "url": "https://fountain.fm/episode/R2ewR5SPX2LjAzU5uESs", + "publishedAt": "2026-05-08T12:15:39.000Z", + "durationSeconds": 4708, + "featured": true, + "description": "Max, Egge, and Thomas discuss six weeks of building on Madeira, demo-day pressure, AI-assisted project work, and how Friday demos became real Bitcoin and Nostr tools.", + "alumniNpubs": [ + "npub1klkk3vrzme455yh9rl2jshq7rc8dpegj3ndf82c3ks2sk40dxt7qulx3vt", + "npub1mhcr4j594hsrnen594d7700n2t03n8gdx83zhxzculk6sh9nhwlq7uc226", + "npub175aemydge5thld9peuyp5xmdtp6e5wq77ys203dp3s88pjhgpxpsvgkemm" + ], + "projectNames": ["FIPs"], + "tags": ["Sovereign Engineering", "Madeira", "Bitcoin", "Nostr", "FIPS"] + }, + { + "id": "open-markets-5-what-the-fips", + "title": "#5 What The Fips", + "source": "Open Markets Podcast", + "platform": "Fountain", + "url": "https://fountain.fm/episode/eaQOAVu8jhFQUhqu3XTu", + "publishedAt": "2026-05-05T16:38:55.496Z", + "durationSeconds": 5204, + "featured": false, + "description": "Open Markets follows up on FIPS as a network for decentralizing internet connectivity, strengthening local community resilience, and building protocol-first markets.", + "alumniNpubs": ["npub1hw6amg8p24ne08c9gdq8hhpqx0t0pwanpae9z25crn7m9uy7yarse465gr", "npub1equrmqway3qxw3dkssymusxkwgwrqypfgeqx0lx9pgjam7gnj4ysaqhkj6"], + "projectNames": ["FIPs", "Learn FIPS"], + "tags": ["FIPS", "Mesh networking", "Open Markets", "Local resilience"] + }, + { + "id": "citadel-dispatch-cd193-fips-fixing-the-internet", + "title": "CD193: FIPS - FIXING THE INTERNET", + "source": "Citadel Dispatch", + "platform": "Fountain", + "url": "https://fountain.fm/episode/2luFagFMSN3J2IX7m4wj", + "publishedAt": "2026-03-06T23:46:50.000Z", + "durationSeconds": 3468, + "featured": true, + "description": "FIPS as an open-source mesh networking project for middleman-free internet: cryptographic node identity, encrypted traffic, peer discovery, community meshes, and sats-aware routing.", + "alumniNpubs": ["npub1hw6amg8p24ne08c9gdq8hhpqx0t0pwanpae9z25crn7m9uy7yarse465gr", "npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k"], + "projectNames": ["FIPs", "Learn FIPS", "Tollgate"], + "tags": ["FIPS", "Mesh networking", "Infrastructure", "Nostr", "Tollgate"] + }, + { + "id": "good-stuff-22-bitcoin-nostr-sovereign-engineering-gigi", + "title": "Good Stuff 22 - Bitcoin, Nostr & Sovereign Engineering with Gigi", + "source": "The Good Stuff", + "platform": "YouTube", + "url": "https://www.youtube.com/watch?v=aKN1y7SxnJg", + "publishedAt": "2025-09-11T10:10:50-07:00", + "durationSeconds": 5798, + "featured": false, + "description": "Gigi and Pete walk through Bitcoin circular economies, eCash payment systems, Nostr's permissionless internet vision, AI, and the Sovereign Engineering context in Madeira.", + "alumniNpubs": ["npub1dergggklka99wwrs92yz8wdjs952h2ux2ha2ed598ngwu9w7a6fsh9xzpc"], + "projectNames": [], + "tags": ["Bitcoin", "Nostr", "eCash", "AI", "Madeira"] + } +] diff --git a/src/lib/mediaAppearances.ts b/src/lib/mediaAppearances.ts new file mode 100644 index 0000000..6180911 --- /dev/null +++ b/src/lib/mediaAppearances.ts @@ -0,0 +1,51 @@ +import mediaAppearancesData from '@/data/mediaAppearances.js'; + +export interface MediaAppearance { + id: string; + title: string; + source: string; + platform: 'Fountain' | 'YouTube'; + url: string; + publishedAt: string; + durationSeconds: number; + featured: boolean; + description: string; + alumniNpubs: `npub1${string}`[]; + projectNames: string[]; + tags: string[]; +} + +export const allMediaAppearances = [...(mediaAppearancesData as MediaAppearance[])].sort( + (left, right) => Date.parse(right.publishedAt) - Date.parse(left.publishedAt) +); + +export function getMediaAppearances(): MediaAppearance[] { + return [...allMediaAppearances]; +} + +export function getFeaturedMediaAppearances(): MediaAppearance[] { + return allMediaAppearances.filter((appearance) => appearance.featured); +} + +export function getArchiveMediaAppearances(): MediaAppearance[] { + return allMediaAppearances.filter((appearance) => !appearance.featured); +} + +export function formatMediaAppearanceDate(publishedAt: string): string { + return new Intl.DateTimeFormat('en', { + day: '2-digit', + month: 'short', + year: 'numeric', + }).format(new Date(publishedAt)); +} + +export function formatDuration(totalSeconds: number): string { + const hours = Math.floor(totalSeconds / 3600); + const minutes = Math.floor((totalSeconds % 3600) / 60); + + if (hours > 0) { + return `${hours}h ${minutes.toString().padStart(2, '0')}m`; + } + + return `${minutes}m`; +} From ebe447fc298aa33f4ae52232fa5e7b236c3d8ec3 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 00:07:03 +0530 Subject: [PATCH 03/28] feat(media): add appearances page --- src/config/menu.json | 8 + src/data/mediaAppearances.json | 12 +- src/lib/mediaAppearances.ts | 3 + src/lib/utils/menuItems.ts | 6 +- src/pages/media.astro | 203 +++++++++++++++++ src/styles/media.css | 386 +++++++++++++++++++++++++++++++++ 6 files changed, 614 insertions(+), 4 deletions(-) create mode 100644 src/pages/media.astro create mode 100644 src/styles/media.css diff --git a/src/config/menu.json b/src/config/menu.json index b5ae6e8..94e71c4 100755 --- a/src/config/menu.json +++ b/src/config/menu.json @@ -36,6 +36,10 @@ }, { "name": "Media", + "url": "/media" + }, + { + "name": "Gallery", "url": "https://slidestr.net/p/npub1s0veng2gvfwr62acrxhnqexq76sj6ldg3a5t935jy8e6w3shr5vsnwrmq5" }, { @@ -86,6 +90,10 @@ "name": "Contest", "url": "/contest" }, + { + "name": "Media", + "url": "/media" + }, { "name": "Alumni", "url": "https://following.space/d/sier9e7ih6k2?p=83d999a148625c3d2bb819af3064c0f6a12d7da88f68b2c69221f3a746171d19" diff --git a/src/data/mediaAppearances.json b/src/data/mediaAppearances.json index fbe54b3..668cdd7 100644 --- a/src/data/mediaAppearances.json +++ b/src/data/mediaAppearances.json @@ -5,6 +5,8 @@ "source": "Open Markets Podcast", "platform": "Fountain", "url": "https://fountain.fm/episode/BGS8MezCVgY9Tb6xwkkn", + "imageUrl": "https://feeds.fountain.fm/iKaquCnTj0q5Bg2VfGRD/files/COVER_ART---DEFAULT---daa55dcc-fb94-4e52-9a89-fbc59e2cc32c.jpg", + "imageAlt": "Open Markets Podcast cover art", "publishedAt": "2026-05-31T17:21:08.455Z", "durationSeconds": 6850, "featured": true, @@ -19,9 +21,11 @@ "source": "Nodesignal - Deine Bitcoin-Frequenz", "platform": "Fountain", "url": "https://fountain.fm/episode/R2ewR5SPX2LjAzU5uESs", + "imageUrl": "https://assets.podhome.fm/24263e26-0aa8-432a-467a-08dc1370a35c/639135932038097050_episode_d6b6f344-ea22-4cc0-8b97-4e1392475e7d.jpg", + "imageAlt": "Nodesignal episode cover art", "publishedAt": "2026-05-08T12:15:39.000Z", "durationSeconds": 4708, - "featured": true, + "featured": false, "description": "Max, Egge, and Thomas discuss six weeks of building on Madeira, demo-day pressure, AI-assisted project work, and how Friday demos became real Bitcoin and Nostr tools.", "alumniNpubs": [ "npub1klkk3vrzme455yh9rl2jshq7rc8dpegj3ndf82c3ks2sk40dxt7qulx3vt", @@ -37,6 +41,8 @@ "source": "Open Markets Podcast", "platform": "Fountain", "url": "https://fountain.fm/episode/eaQOAVu8jhFQUhqu3XTu", + "imageUrl": "https://feeds.fountain.fm/iKaquCnTj0q5Bg2VfGRD/files/COVER_ART---DEFAULT---daa55dcc-fb94-4e52-9a89-fbc59e2cc32c.jpg", + "imageAlt": "Open Markets Podcast cover art", "publishedAt": "2026-05-05T16:38:55.496Z", "durationSeconds": 5204, "featured": false, @@ -51,6 +57,8 @@ "source": "Citadel Dispatch", "platform": "Fountain", "url": "https://fountain.fm/episode/2luFagFMSN3J2IX7m4wj", + "imageUrl": "https://assets.podhome.fm/8029725b-0319-44b9-4793-08dc404e83a4/638475670208679180CITADELDISPATCH.jpeg", + "imageAlt": "Citadel Dispatch cover art", "publishedAt": "2026-03-06T23:46:50.000Z", "durationSeconds": 3468, "featured": true, @@ -65,6 +73,8 @@ "source": "The Good Stuff", "platform": "YouTube", "url": "https://www.youtube.com/watch?v=aKN1y7SxnJg", + "imageUrl": "https://i.ytimg.com/vi/aKN1y7SxnJg/maxresdefault.jpg", + "imageAlt": "The Good Stuff video thumbnail", "publishedAt": "2025-09-11T10:10:50-07:00", "durationSeconds": 5798, "featured": false, diff --git a/src/lib/mediaAppearances.ts b/src/lib/mediaAppearances.ts index 6180911..bc3ce70 100644 --- a/src/lib/mediaAppearances.ts +++ b/src/lib/mediaAppearances.ts @@ -6,6 +6,8 @@ export interface MediaAppearance { source: string; platform: 'Fountain' | 'YouTube'; url: string; + imageUrl: string; + imageAlt: string; publishedAt: string; durationSeconds: number; featured: boolean; @@ -35,6 +37,7 @@ export function formatMediaAppearanceDate(publishedAt: string): string { return new Intl.DateTimeFormat('en', { day: '2-digit', month: 'short', + timeZone: 'UTC', year: 'numeric', }).format(new Date(publishedAt)); } diff --git a/src/lib/utils/menuItems.ts b/src/lib/utils/menuItems.ts index df08954..6adcdbb 100644 --- a/src/lib/utils/menuItems.ts +++ b/src/lib/utils/menuItems.ts @@ -23,9 +23,9 @@ export function getAllMenuItems(menu: Menu): MenuItem[] { } export function getFooterMenuItems(menu: Menu): MenuItem[] { - // Get all items from the "More" dropdown but exclude Media, Videos, and Policy - // since Media and Videos are already covered by social media buttons + // Get all items from the "More" dropdown but exclude Gallery, Videos, and Policy + // since Gallery and Videos are already covered by social media buttons // and Policy should only appear in the main menu const allItems = getAllMenuItems(menu); - return allItems.filter((item) => item.name !== 'Media' && item.name !== 'Videos' && item.name !== 'Policy'); + return allItems.filter((item) => item.name !== 'Gallery' && item.name !== 'Videos' && item.name !== 'Policy'); } diff --git a/src/pages/media.astro b/src/pages/media.astro new file mode 100644 index 0000000..9fb25d1 --- /dev/null +++ b/src/pages/media.astro @@ -0,0 +1,203 @@ +--- +import Base from '@/layouts/Base.astro'; +import { + formatDuration, + formatMediaAppearanceDate, + getArchiveMediaAppearances, + getFeaturedMediaAppearances, + type MediaAppearance, +} from '@/lib/mediaAppearances'; +import { getNostrProfileHref, getSovEngAlumniByNpub, getSovEngAlumniDisplayName } from '@/lib/sovengAlumni'; +import { getProjectArchiveHref, getProjectByName, type ShowcaseProject } from '@/lib/showcase'; +import '@/styles/projects.css'; +import '@/styles/media.css'; + +type ResolvedAppearance = MediaAppearance & { + dateLabel: string; + durationLabel: string; + alumni: { + name: string; + npub: string; + href: string; + }[]; + projects: { + name: string; + cohort: string; + href: string; + }[]; +}; + +function resolveProject(name: string): ShowcaseProject | undefined { + return getProjectByName(name); +} + +function resolveAppearance(appearance: MediaAppearance): ResolvedAppearance { + return { + ...appearance, + dateLabel: formatMediaAppearanceDate(appearance.publishedAt), + durationLabel: formatDuration(appearance.durationSeconds), + alumni: appearance.alumniNpubs + .map((npub) => getSovEngAlumniByNpub(npub)) + .filter((profile): profile is NonNullable => Boolean(profile)) + .map((profile) => ({ + name: getSovEngAlumniDisplayName(profile), + npub: profile.npub, + href: getNostrProfileHref(profile.npub), + })), + projects: appearance.projectNames + .map(resolveProject) + .filter((project): project is ShowcaseProject => Boolean(project)) + .map((project) => ({ + name: project.name, + cohort: project.cohort, + href: getProjectArchiveHref(project), + })), + }; +} + +const featuredAppearances = getFeaturedMediaAppearances().map(resolveAppearance); +const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); +--- + + +
+
+
+
+
+

Podcast appearances

+

SovEng In The Wild

+

+ Conversations where Sovereign Engineering alumni, hosts, and projects get tested in public: FIPS, Nostr markets, + eCash, AI, Madeira, and the Friday-demo habit of turning half-formed prototypes into real tools. +

+ +
+
+
+
+ + + +
+
+
+
+

Other conversations

+
+

+ Dates, alumni npubs, source links, and project tags stay as reusable data for future pages. +

+
+ +
    + { + archiveAppearances.map((appearance) => ( +
  1. + + {appearance.imageAlt} + +
    + {appearance.dateLabel} + {appearance.durationLabel} +
    +
    +

    + {appearance.source} + {appearance.platform} +

    +

    {appearance.title}

    +

    {appearance.description}

    +
    + {appearance.alumni.map((profile) => ( + + {profile.name} + + ))} +
    +
    +
    +
    + {appearance.tags.map((tag) => ( + {tag} + ))} +
    + + {appearance.platform === 'YouTube' ? 'Watch' : 'Listen'} + +
    +
  2. + )) + } +
+
+
+
+ diff --git a/src/styles/media.css b/src/styles/media.css new file mode 100644 index 0000000..d61a05c --- /dev/null +++ b/src/styles/media.css @@ -0,0 +1,386 @@ +.media-page #featured, +.media-page #other-conversations { + scroll-margin-top: 8rem; +} + +.media-hero { + position: relative; + overflow: hidden; + border-bottom: 1px solid rgb(255 255 255 / 8%); +} + +.media-hero::before { + content: ''; + position: absolute; + inset: 0; + background: + radial-gradient(circle at 14% 12%, color-mix(in srgb, var(--color-primary) 20%, transparent), transparent 28rem), + linear-gradient(180deg, rgb(255 255 255 / 4%), transparent 38%); + pointer-events: none; +} + +.media-hero-grid { + position: relative; + display: grid; + max-width: 54rem; + gap: 2rem; +} + +.media-hero-title { + max-width: 13ch; + font-size: clamp(3.75rem, 11vw, 8.4rem); + line-height: 0.86; + letter-spacing: -0.05em; +} + +.media-hero-lede { + max-width: 42rem; + color: rgb(255 255 255 / 72%); +} + +.media-hero-actions { + display: flex; + flex-wrap: wrap; + gap: 0.875rem; + align-items: center; + margin-top: 2rem; +} + +.media-section-heading { + margin-bottom: 2rem; +} + +.media-section-heading--split { + display: grid; + gap: 1rem; + align-items: end; +} + +@media (min-width: 768px) { + .media-section-heading--split { + grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.5fr); + } +} + +.media-section-note { + margin: 0; + color: rgb(255 255 255 / 58%); +} + +.media-feature-grid { + display: grid; + gap: 2rem; +} + +@media (min-width: 768px) { + .media-feature-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +.media-feature-card { + position: relative; + display: flex; + min-height: 100%; + flex-direction: column; + padding-top: 0; + overflow: visible; + border: 0; + background: transparent; +} + +.media-archive-row::before { + content: ''; + position: absolute; + inset: 0 auto 0 0; + width: 2px; + background: linear-gradient(180deg, var(--color-primary), transparent 72%); + opacity: 0.85; +} + +.media-cover-link { + display: block; + aspect-ratio: 16 / 9; + overflow: hidden; + background: #050505; + color: inherit; + text-decoration: none; +} + +.media-cover-image, +.media-archive-cover img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +.media-cover-link:hover .media-cover-image, +.media-archive-cover:hover img { + opacity: 0.9; +} + +.media-feature-card .media-card-topline { + margin-top: 1rem; +} + +.media-card-topline { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + align-items: center; + justify-content: space-between; + margin: 0; + font-family: var(--font-primary); + font-size: 0.68rem; + letter-spacing: 0.16em; + text-transform: uppercase; + color: rgb(255 255 255 / 58%); +} + +.media-card-title { + margin: 1rem 0 0; + font-size: clamp(1.75rem, 3vw, 2.75rem); + line-height: 1.04; + letter-spacing: -0.035em; + color: #fff; + text-transform: none; +} + +.media-card-description { + margin: 1rem 0 0; + color: rgb(255 255 255 / 68%); + line-height: 1.55; +} + +.media-meta-row { + display: flex; + flex-wrap: wrap; + gap: 0.55rem; + margin-top: 1rem; + font-family: var(--font-primary); + font-size: 0.72rem; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgb(255 255 255 / 62%); +} + +.media-meta-row span { + border: 1px solid rgb(255 255 255 / 10%); + padding: 0.32rem 0.5rem; + background: rgb(0 0 0 / 28%); +} + +.media-chip-group { + display: flex; + flex-wrap: wrap; + gap: 0.45rem; + margin-top: 1rem; +} + +.media-chip, +.media-project-link, +.media-tag-row span { + display: inline-flex; + align-items: center; + width: fit-content; + text-decoration: none; +} + +.media-chip { + padding: 0.64rem 0.78rem; + border: 1px solid color-mix(in srgb, var(--color-primary) 45%, transparent); + color: var(--color-primary); + background: transparent; + font-family: var(--font-secondary); + font-size: 0.95rem; + letter-spacing: 0.03em; + line-height: 1; +} + +.media-chip--alumni::before { + content: 'npub'; + margin-right: 0.4rem; + font-family: var(--font-primary); + font-size: 0.58rem; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgb(255 255 255 / 62%); +} + +.media-chip--alumni::after { + content: '↗'; + margin-left: 0.45rem; + font-family: var(--font-primary); +} + +.media-chip:hover, +.media-project-link:hover, +.media-card-cta:hover { + border-color: color-mix(in srgb, var(--color-primary) 58%, transparent); + color: #fff; +} + +.media-project-row { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-top: 1rem; +} + +.media-project-link { + gap: 0.45rem; + padding: 0.42rem 0.6rem; + border: 1px solid rgb(255 255 255 / 12%); + color: #fff; + background: rgb(255 255 255 / 3%); + font-family: var(--font-secondary); + line-height: 1; +} + +.media-project-link small { + font-family: var(--font-primary); + font-size: 0.62rem; + letter-spacing: 0.14em; + color: rgb(255 255 255 / 45%); +} + +.media-tag-row { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin-top: 1rem; +} + +.media-tag-row span { + padding: 0.28rem 0.48rem; + border: 1px solid rgb(255 255 255 / 9%); + color: rgb(255 255 255 / 58%); + font-family: var(--font-primary); + font-size: 0.72rem; +} + +.media-card-cta { + display: inline-flex; + align-items: center; + justify-content: center; + width: fit-content; + margin-top: auto; + padding: 0.7rem 0.9rem; + border: 1px solid color-mix(in srgb, var(--color-primary) 45%, transparent); + color: var(--color-primary); + font-family: var(--font-secondary); + letter-spacing: 0.04em; + text-decoration: none; +} + +.media-card-cta::after { + content: '↗'; + margin-left: 0.45rem; + font-family: var(--font-primary); +} + +.media-card-cta--small { + padding: 0.55rem 0.7rem; + font-size: 0.95rem; +} + +.media-feature-card .media-card-cta { + margin-top: 1.25rem; +} + +.media-archive-list { + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + list-style: none; + border-top: 1px solid rgb(255 255 255 / 8%); +} + +.media-archive-row { + position: relative; + display: grid; + grid-template-columns: 4.75rem minmax(0, 1fr); + gap: 1rem; + padding: 1.25rem 0 1.25rem 1rem; + border-bottom: 1px solid rgb(255 255 255 / 8%); +} + +.media-archive-cover { + grid-row: span 3; + display: block; + aspect-ratio: 1; + overflow: hidden; + background: #050505; +} + +@media (min-width: 900px) { + .media-archive-row { + grid-template-columns: 5.5rem 8.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); + align-items: start; + padding: 1.35rem 0.5rem 1.35rem 1rem; + } + + .media-archive-cover { + grid-row: auto; + } + + .media-archive-row:hover { + background: rgb(255 255 255 / 2%); + } +} + +.media-archive-date span, +.media-archive-date small { + display: block; +} + +.media-archive-date span { + font-family: var(--font-secondary); + font-size: 1.05rem; + color: #fff; +} + +.media-archive-date small { + margin-top: 0.25rem; + font-family: var(--font-primary); + font-size: 0.72rem; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgb(255 255 255 / 45%); +} + +.media-archive-title { + margin: 0.45rem 0 0; + font-size: clamp(1.45rem, 3vw, 2.3rem); + line-height: 1; + letter-spacing: -0.025em; + text-transform: none; + color: #fff; +} + +.media-archive-description { + max-width: 46rem; + margin: 0.7rem 0 0; + color: rgb(255 255 255 / 63%); + line-height: 1.5; +} + +.media-archive-side { + display: flex; + flex-direction: column; + gap: 1rem; + align-items: flex-start; +} + +@media (min-width: 900px) { + .media-archive-side { + align-items: flex-end; + } + + .media-archive-side .media-tag-row { + justify-content: flex-end; + margin-top: 0; + } +} From c904e85fe823df047b5d0955c3589fe0db4eb491 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 00:29:54 +0530 Subject: [PATCH 04/28] fix(media): refine appearances page styling --- src/pages/media.astro | 33 ++++++-------- src/styles/media.css | 102 +++++++++++++++--------------------------- 2 files changed, 48 insertions(+), 87 deletions(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index 9fb25d1..75c427b 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -57,6 +57,7 @@ function resolveAppearance(appearance: MediaAppearance): ResolvedAppearance { const featuredAppearances = getFeaturedMediaAppearances().map(resolveAppearance); const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); +const mediaSeparatorImage = '/images/contest/separator-ship.png'; --- -
- Highlighted conversations - Other conversations -
@@ -103,7 +100,9 @@ const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); {appearance.source} {appearance.platform} -

{appearance.title}

+

+ {appearance.title} +

{appearance.description}

@@ -135,26 +134,21 @@ const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); {tag} ))}
- - - {appearance.platform === 'YouTube' ? 'Watch conversation' : 'Listen on Fountain'} - )) } + +
-
-
-

Other conversations

-
-

- Dates, alumni npubs, source links, and project tags stay as reusable data for future pages. -

+
+

Other conversations

    @@ -173,7 +167,9 @@ const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); {appearance.source} {appearance.platform}

    -

    {appearance.title}

    +

    + {appearance.title} +

    {appearance.description}

    {appearance.alumni.map((profile) => ( @@ -189,9 +185,6 @@ const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); {tag} ))}
    - - {appearance.platform === 'YouTube' ? 'Watch' : 'Listen'} -
)) diff --git a/src/styles/media.css b/src/styles/media.css index d61a05c..acd0455 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -27,10 +27,11 @@ } .media-hero-title { - max-width: 13ch; - font-size: clamp(3.75rem, 11vw, 8.4rem); - line-height: 0.86; - letter-spacing: -0.05em; + max-width: none; + font-size: clamp(1.5rem, 8vw, 5.35rem); + line-height: 0.9; + letter-spacing: -0.035em; + white-space: nowrap; } .media-hero-lede { @@ -38,35 +39,10 @@ color: rgb(255 255 255 / 72%); } -.media-hero-actions { - display: flex; - flex-wrap: wrap; - gap: 0.875rem; - align-items: center; - margin-top: 2rem; -} - .media-section-heading { margin-bottom: 2rem; } -.media-section-heading--split { - display: grid; - gap: 1rem; - align-items: end; -} - -@media (min-width: 768px) { - .media-section-heading--split { - grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.5fr); - } -} - -.media-section-note { - margin: 0; - color: rgb(255 255 255 / 58%); -} - .media-feature-grid { display: grid; gap: 2rem; @@ -112,7 +88,7 @@ display: block; width: 100%; height: 100%; - object-fit: cover; + object-fit: contain; } .media-cover-link:hover .media-cover-image, @@ -147,6 +123,26 @@ text-transform: none; } +.media-title-link { + color: inherit; + text-decoration: none; + transition: color 150ms ease; +} + +.media-title-link::after { + content: '↗'; + display: inline-block; + margin-left: 0.35rem; + font-family: var(--font-primary); + font-size: 0.55em; + line-height: 1; + vertical-align: 0.24em; +} + +.media-title-link:hover { + color: var(--color-primary); +} + .media-card-description { margin: 1rem 0 0; color: rgb(255 255 255 / 68%); @@ -198,16 +194,6 @@ line-height: 1; } -.media-chip--alumni::before { - content: 'npub'; - margin-right: 0.4rem; - font-family: var(--font-primary); - font-size: 0.58rem; - letter-spacing: 0.12em; - text-transform: uppercase; - color: rgb(255 255 255 / 62%); -} - .media-chip--alumni::after { content: '↗'; margin-left: 0.45rem; @@ -215,8 +201,7 @@ } .media-chip:hover, -.media-project-link:hover, -.media-card-cta:hover { +.media-project-link:hover { border-color: color-mix(in srgb, var(--color-primary) 58%, transparent); color: #fff; } @@ -260,33 +245,16 @@ font-size: 0.72rem; } -.media-card-cta { - display: inline-flex; - align-items: center; - justify-content: center; - width: fit-content; - margin-top: auto; - padding: 0.7rem 0.9rem; - border: 1px solid color-mix(in srgb, var(--color-primary) 45%, transparent); - color: var(--color-primary); - font-family: var(--font-secondary); - letter-spacing: 0.04em; - text-decoration: none; -} - -.media-card-cta::after { - content: '↗'; - margin-left: 0.45rem; - font-family: var(--font-primary); -} - -.media-card-cta--small { - padding: 0.55rem 0.7rem; - font-size: 0.95rem; +.media-separator { + margin: 4rem 0 0; } -.media-feature-card .media-card-cta { - margin-top: 1.25rem; +.media-separator img { + display: block; + width: min(100%, 32rem); + height: auto; + margin: 0 auto; + opacity: 0.92; } .media-archive-list { From bb6225c95bf72ef43a18768817eaeb0d528dea69 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:25:37 +0530 Subject: [PATCH 05/28] fix(media): correct appearance details --- src/data/mediaAppearances.json | 4 ++-- src/pages/media.astro | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/data/mediaAppearances.json b/src/data/mediaAppearances.json index 668cdd7..682a42a 100644 --- a/src/data/mediaAppearances.json +++ b/src/data/mediaAppearances.json @@ -63,7 +63,7 @@ "durationSeconds": 3468, "featured": true, "description": "FIPS as an open-source mesh networking project for middleman-free internet: cryptographic node identity, encrypted traffic, peer discovery, community meshes, and sats-aware routing.", - "alumniNpubs": ["npub1hw6amg8p24ne08c9gdq8hhpqx0t0pwanpae9z25crn7m9uy7yarse465gr", "npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k"], + "alumniNpubs": ["npub1hw6amg8p24ne08c9gdq8hhpqx0t0pwanpae9z25crn7m9uy7yarse465gr"], "projectNames": ["FIPs", "Learn FIPS", "Tollgate"], "tags": ["FIPS", "Mesh networking", "Infrastructure", "Nostr", "Tollgate"] }, @@ -79,7 +79,7 @@ "durationSeconds": 5798, "featured": false, "description": "Gigi and Pete walk through Bitcoin circular economies, eCash payment systems, Nostr's permissionless internet vision, AI, and the Sovereign Engineering context in Madeira.", - "alumniNpubs": ["npub1dergggklka99wwrs92yz8wdjs952h2ux2ha2ed598ngwu9w7a6fsh9xzpc"], + "alumniNpubs": ["npub1dergggklka99wwrs92yz8wdjs952h2ux2ha2ed598ngwu9w7a6fsh9xzpc", "npub1jss47s4fvv6usl7tn6yp5zamv2u60923ncgfea0e6thkza5p7c3q0afmzy"], "projectNames": [], "tags": ["Bitcoin", "Nostr", "eCash", "AI", "Madeira"] } diff --git a/src/pages/media.astro b/src/pages/media.astro index 75c427b..a9b31a5 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -63,7 +63,7 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; @@ -72,7 +72,7 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png';
-

Podcast appearances

+

Media appearances

SovEng In The Wild

Conversations where Sovereign Engineering alumni, hosts, and projects get tested in public: FIPS, Nostr markets, @@ -138,10 +138,6 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; )) }

- -
@@ -190,6 +186,10 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; )) } + + From bf6aaaf8493f8a48102d2995b8d797d15eaa267d Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:37:00 +0530 Subject: [PATCH 06/28] fix(media): add featured cover gradient --- src/styles/media.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/styles/media.css b/src/styles/media.css index acd0455..1c631a5 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -83,6 +83,15 @@ text-decoration: none; } +.media-feature-card .media-cover-link { + background: linear-gradient( + to top, + color-mix(in srgb, var(--color-primary) 42%, #050505) 0%, + color-mix(in srgb, var(--color-primary) 16%, #050505) 42%, + #050505 100% + ); +} + .media-cover-image, .media-archive-cover img { display: block; From 622555df57e8024762664253471a78c89c61c97d Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:44:55 +0530 Subject: [PATCH 07/28] fix(media): soften featured cover gradient --- src/styles/media.css | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/styles/media.css b/src/styles/media.css index 1c631a5..85e0fc5 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -84,12 +84,20 @@ } .media-feature-card .media-cover-link { - background: linear-gradient( - to top, - color-mix(in srgb, var(--color-primary) 42%, #050505) 0%, - color-mix(in srgb, var(--color-primary) 16%, #050505) 42%, - #050505 100% - ); + background: + radial-gradient(circle at 18% 82%, rgb(255 255 255 / 9%) 0 0.75px, transparent 1px), + radial-gradient(circle at 76% 22%, rgb(0 0 0 / 35%) 0 0.8px, transparent 1px), + linear-gradient( + to top, + color-mix(in srgb, var(--color-primary) 22%, #050505) 0%, + color-mix(in srgb, var(--color-primary) 9%, #050505) 26%, + #050505 52%, + #050505 100% + ); + background-size: + 4px 4px, + 7px 7px, + auto; } .media-cover-image, From 0eda89a82a5a76827d48828373857e7bb08dbfb0 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:48:31 +0530 Subject: [PATCH 08/28] fix(media): make cover wash red spray --- src/styles/media.css | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/styles/media.css b/src/styles/media.css index 85e0fc5..cca0f88 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -75,6 +75,7 @@ } .media-cover-link { + position: relative; display: block; aspect-ratio: 16 / 9; overflow: hidden; @@ -84,20 +85,29 @@ } .media-feature-card .media-cover-link { + background: #050505; +} + +.media-feature-card .media-cover-link::before { + content: ''; + position: absolute; + inset: 48% 0 0; background: - radial-gradient(circle at 18% 82%, rgb(255 255 255 / 9%) 0 0.75px, transparent 1px), - radial-gradient(circle at 76% 22%, rgb(0 0 0 / 35%) 0 0.8px, transparent 1px), - linear-gradient( - to top, - color-mix(in srgb, var(--color-primary) 22%, #050505) 0%, - color-mix(in srgb, var(--color-primary) 9%, #050505) 26%, - #050505 52%, - #050505 100% - ); + radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 38%, transparent) 0 0.7px, transparent 1.35px), + radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 24%, transparent) 0 0.55px, transparent 1.15px), + radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 30%, transparent) 0 0.65px, transparent 1.25px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 20%, transparent) 0%, transparent 60%); + background-position: + 0 0, + 19px 11px, + 37px 23px, + center; background-size: - 4px 4px, - 7px 7px, + 67px 53px, + 103px 79px, + 139px 97px, auto; + pointer-events: none; } .media-cover-image, @@ -108,6 +118,11 @@ object-fit: contain; } +.media-cover-image { + position: relative; + z-index: 1; +} + .media-cover-link:hover .media-cover-image, .media-archive-cover:hover img { opacity: 0.9; From df5adf82624f614c810cfd8320bfc134ac569075 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:57:54 +0530 Subject: [PATCH 09/28] fix(media): tune cover spray and archive metadata --- src/pages/media.astro | 14 ++++---- src/styles/media.css | 82 +++++++++++++++++++++++++++++++++---------- 2 files changed, 71 insertions(+), 25 deletions(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index a9b31a5..0e55005 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -151,12 +151,14 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; { archiveAppearances.map((appearance) => (
  • - - {appearance.imageAlt} - -
    - {appearance.dateLabel} - {appearance.durationLabel} +
    + + {appearance.imageAlt} + +
    + {appearance.dateLabel} + {appearance.durationLabel} +

    diff --git a/src/styles/media.css b/src/styles/media.css index cca0f88..fb65a85 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -79,33 +79,33 @@ display: block; aspect-ratio: 16 / 9; overflow: hidden; - background: #050505; + background: #000; color: inherit; text-decoration: none; } .media-feature-card .media-cover-link { - background: #050505; + background: #000; } .media-feature-card .media-cover-link::before { content: ''; position: absolute; - inset: 48% 0 0; + inset: 42% 0 0; background: - radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 38%, transparent) 0 0.7px, transparent 1.35px), - radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 24%, transparent) 0 0.55px, transparent 1.15px), - radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 30%, transparent) 0 0.65px, transparent 1.25px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 20%, transparent) 0%, transparent 60%); + radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0 0.8px, transparent 1.4px), + radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 34%, transparent) 0 0.65px, transparent 1.2px), + radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 40%, transparent) 0 0.75px, transparent 1.3px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 30%, transparent) 0%, transparent 62%); background-position: 0 0, 19px 11px, 37px 23px, center; background-size: - 67px 53px, - 103px 79px, - 139px 97px, + 61px 47px, + 89px 71px, + 127px 91px, auto; pointer-events: none; } @@ -118,7 +118,8 @@ object-fit: contain; } -.media-cover-image { +.media-cover-image, +.media-archive-cover img { position: relative; z-index: 1; } @@ -307,22 +308,60 @@ border-bottom: 1px solid rgb(255 255 255 / 8%); } +.media-archive-media { + grid-row: 1 / span 2; + display: flex; + flex-direction: column; + gap: 0.55rem; + align-self: start; +} + +.media-archive-main { + min-width: 0; +} + +.media-archive-side { + grid-column: 2; +} + .media-archive-cover { - grid-row: span 3; + position: relative; display: block; aspect-ratio: 1; overflow: hidden; - background: #050505; + background: #000; +} + +.media-archive-cover::before { + content: ''; + position: absolute; + inset: 42% 0 0; + background: + radial-gradient(circle at 16% 70%, color-mix(in srgb, var(--color-primary) 38%, transparent) 0 0.65px, transparent 1.25px), + radial-gradient(circle at 76% 40%, color-mix(in srgb, var(--color-primary) 26%, transparent) 0 0.55px, transparent 1.1px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 24%, transparent) 0%, transparent 64%); + background-position: + 0 0, + 21px 13px, + center; + background-size: + 53px 43px, + 83px 67px, + auto; + pointer-events: none; } @media (min-width: 900px) { .media-archive-row { - grid-template-columns: 5.5rem 8.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); + grid-template-columns: 5.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); align-items: start; padding: 1.35rem 0.5rem 1.35rem 1rem; } - .media-archive-cover { + .media-archive-media, + .media-archive-main, + .media-archive-side { + grid-column: auto; grid-row: auto; } @@ -331,6 +370,10 @@ } } +.media-archive-date { + text-align: left; +} + .media-archive-date span, .media-archive-date small { display: block; @@ -338,15 +381,16 @@ .media-archive-date span { font-family: var(--font-secondary); - font-size: 1.05rem; + font-size: 0.86rem; + line-height: 1.05; color: #fff; } .media-archive-date small { - margin-top: 0.25rem; + margin-top: 0.18rem; font-family: var(--font-primary); - font-size: 0.72rem; - letter-spacing: 0.12em; + font-size: 0.64rem; + letter-spacing: 0.1em; text-transform: uppercase; color: rgb(255 255 255 / 45%); } From be7c55bd13491e81912baae07e80626f0e683c9e Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 15:09:11 +0530 Subject: [PATCH 10/28] fix(media): intensify archive image treatment --- src/styles/media.css | 99 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 16 deletions(-) diff --git a/src/styles/media.css b/src/styles/media.css index fb65a85..683752c 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -79,24 +79,30 @@ display: block; aspect-ratio: 16 / 9; overflow: hidden; - background: #000; + background: + radial-gradient(ellipse at 0% 72%, color-mix(in srgb, var(--color-primary) 34%, transparent) 0%, transparent 48%), + radial-gradient(ellipse at 100% 62%, color-mix(in srgb, var(--color-primary) 40%, transparent) 0%, transparent 50%), + radial-gradient(ellipse at 50% 110%, color-mix(in srgb, var(--color-primary) 52%, transparent) 0%, transparent 58%), #000; color: inherit; text-decoration: none; } .media-feature-card .media-cover-link { - background: #000; + background: + radial-gradient(ellipse at 0% 72%, color-mix(in srgb, var(--color-primary) 36%, transparent) 0%, transparent 50%), + radial-gradient(ellipse at 100% 60%, color-mix(in srgb, var(--color-primary) 44%, transparent) 0%, transparent 52%), + radial-gradient(ellipse at 50% 112%, color-mix(in srgb, var(--color-primary) 58%, transparent) 0%, transparent 60%), #000; } .media-feature-card .media-cover-link::before { content: ''; position: absolute; - inset: 42% 0 0; + inset: 30% 0 0; background: - radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0 0.8px, transparent 1.4px), - radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 34%, transparent) 0 0.65px, transparent 1.2px), - radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 40%, transparent) 0 0.75px, transparent 1.3px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 30%, transparent) 0%, transparent 62%); + radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 68%, transparent) 0 0.9px, transparent 1.55px), + radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 52%, transparent) 0 0.75px, transparent 1.35px), + radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 58%, transparent) 0 0.85px, transparent 1.45px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 50%, transparent) 0%, transparent 64%); background-position: 0 0, 19px 11px, @@ -110,6 +116,24 @@ pointer-events: none; } +.media-cover-link::after, +.media-archive-cover::after { + content: ''; + position: absolute; + inset: 0; + z-index: 2; + background: + linear-gradient( + 90deg, + color-mix(in srgb, var(--color-primary) 26%, transparent), + transparent 18%, + transparent 78%, + color-mix(in srgb, var(--color-primary) 34%, transparent) + ), + linear-gradient(180deg, transparent 46%, color-mix(in srgb, var(--color-primary) 28%, transparent)); + pointer-events: none; +} + .media-cover-image, .media-archive-cover img { display: block; @@ -291,21 +315,57 @@ } .media-archive-list { + position: relative; display: flex; flex-direction: column; margin: 0; padding: 0; list-style: none; - border-top: 1px solid rgb(255 255 255 / 8%); + border-top: 0; +} + +.media-archive-list::before { + content: ''; + position: absolute; + top: 0; + right: 0; + left: 0; + height: 1px; + background: linear-gradient( + 90deg, + transparent, + color-mix(in srgb, var(--color-primary) 28%, transparent) 18%, + color-mix(in srgb, var(--color-primary) 72%, transparent) 50%, + color-mix(in srgb, var(--color-primary) 28%, transparent) 82%, + transparent + ); } .media-archive-row { position: relative; display: grid; - grid-template-columns: 4.75rem minmax(0, 1fr); + grid-template-columns: 5.75rem minmax(0, 1fr); gap: 1rem; padding: 1.25rem 0 1.25rem 1rem; - border-bottom: 1px solid rgb(255 255 255 / 8%); + border-bottom: 0; +} + +.media-archive-row::after { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 1px; + background: linear-gradient( + 90deg, + transparent, + color-mix(in srgb, var(--color-primary) 28%, transparent) 18%, + color-mix(in srgb, var(--color-primary) 76%, transparent) 50%, + color-mix(in srgb, var(--color-primary) 28%, transparent) 82%, + transparent + ); + pointer-events: none; } .media-archive-media { @@ -325,21 +385,28 @@ } .media-archive-cover { + --media-archive-image-pad: 0.38rem; + position: relative; display: block; aspect-ratio: 1; + box-sizing: border-box; overflow: hidden; - background: #000; + padding: 0 calc(var(--media-archive-image-pad) * 2) var(--media-archive-image-pad) var(--media-archive-image-pad); + background: + radial-gradient(ellipse at 0% 72%, color-mix(in srgb, var(--color-primary) 36%, transparent) 0%, transparent 48%), + radial-gradient(ellipse at 100% 62%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0%, transparent 50%), + radial-gradient(ellipse at 50% 112%, color-mix(in srgb, var(--color-primary) 58%, transparent) 0%, transparent 58%), #000; } .media-archive-cover::before { content: ''; position: absolute; - inset: 42% 0 0; + inset: 28% 0 0; background: - radial-gradient(circle at 16% 70%, color-mix(in srgb, var(--color-primary) 38%, transparent) 0 0.65px, transparent 1.25px), - radial-gradient(circle at 76% 40%, color-mix(in srgb, var(--color-primary) 26%, transparent) 0 0.55px, transparent 1.1px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 24%, transparent) 0%, transparent 64%); + radial-gradient(circle at 16% 70%, color-mix(in srgb, var(--color-primary) 62%, transparent) 0 0.8px, transparent 1.35px), + radial-gradient(circle at 76% 40%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0 0.7px, transparent 1.25px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0%, transparent 66%); background-position: 0 0, 21px 13px, @@ -353,7 +420,7 @@ @media (min-width: 900px) { .media-archive-row { - grid-template-columns: 5.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); + grid-template-columns: 6.55rem minmax(0, 1fr) minmax(14rem, 0.34fr); align-items: start; padding: 1.35rem 0.5rem 1.35rem 1rem; } From 86c21b9c15674bfebdd6efc73e402a0b5ab42102 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 15:14:16 +0530 Subject: [PATCH 11/28] Revert "fix(media): intensify archive image treatment" This reverts commit be7c55bd13491e81912baae07e80626f0e683c9e. --- src/styles/media.css | 99 +++++++------------------------------------- 1 file changed, 16 insertions(+), 83 deletions(-) diff --git a/src/styles/media.css b/src/styles/media.css index 683752c..fb65a85 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -79,30 +79,24 @@ display: block; aspect-ratio: 16 / 9; overflow: hidden; - background: - radial-gradient(ellipse at 0% 72%, color-mix(in srgb, var(--color-primary) 34%, transparent) 0%, transparent 48%), - radial-gradient(ellipse at 100% 62%, color-mix(in srgb, var(--color-primary) 40%, transparent) 0%, transparent 50%), - radial-gradient(ellipse at 50% 110%, color-mix(in srgb, var(--color-primary) 52%, transparent) 0%, transparent 58%), #000; + background: #000; color: inherit; text-decoration: none; } .media-feature-card .media-cover-link { - background: - radial-gradient(ellipse at 0% 72%, color-mix(in srgb, var(--color-primary) 36%, transparent) 0%, transparent 50%), - radial-gradient(ellipse at 100% 60%, color-mix(in srgb, var(--color-primary) 44%, transparent) 0%, transparent 52%), - radial-gradient(ellipse at 50% 112%, color-mix(in srgb, var(--color-primary) 58%, transparent) 0%, transparent 60%), #000; + background: #000; } .media-feature-card .media-cover-link::before { content: ''; position: absolute; - inset: 30% 0 0; + inset: 42% 0 0; background: - radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 68%, transparent) 0 0.9px, transparent 1.55px), - radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 52%, transparent) 0 0.75px, transparent 1.35px), - radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 58%, transparent) 0 0.85px, transparent 1.45px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 50%, transparent) 0%, transparent 64%); + radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0 0.8px, transparent 1.4px), + radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 34%, transparent) 0 0.65px, transparent 1.2px), + radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 40%, transparent) 0 0.75px, transparent 1.3px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 30%, transparent) 0%, transparent 62%); background-position: 0 0, 19px 11px, @@ -116,24 +110,6 @@ pointer-events: none; } -.media-cover-link::after, -.media-archive-cover::after { - content: ''; - position: absolute; - inset: 0; - z-index: 2; - background: - linear-gradient( - 90deg, - color-mix(in srgb, var(--color-primary) 26%, transparent), - transparent 18%, - transparent 78%, - color-mix(in srgb, var(--color-primary) 34%, transparent) - ), - linear-gradient(180deg, transparent 46%, color-mix(in srgb, var(--color-primary) 28%, transparent)); - pointer-events: none; -} - .media-cover-image, .media-archive-cover img { display: block; @@ -315,57 +291,21 @@ } .media-archive-list { - position: relative; display: flex; flex-direction: column; margin: 0; padding: 0; list-style: none; - border-top: 0; -} - -.media-archive-list::before { - content: ''; - position: absolute; - top: 0; - right: 0; - left: 0; - height: 1px; - background: linear-gradient( - 90deg, - transparent, - color-mix(in srgb, var(--color-primary) 28%, transparent) 18%, - color-mix(in srgb, var(--color-primary) 72%, transparent) 50%, - color-mix(in srgb, var(--color-primary) 28%, transparent) 82%, - transparent - ); + border-top: 1px solid rgb(255 255 255 / 8%); } .media-archive-row { position: relative; display: grid; - grid-template-columns: 5.75rem minmax(0, 1fr); + grid-template-columns: 4.75rem minmax(0, 1fr); gap: 1rem; padding: 1.25rem 0 1.25rem 1rem; - border-bottom: 0; -} - -.media-archive-row::after { - content: ''; - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 1px; - background: linear-gradient( - 90deg, - transparent, - color-mix(in srgb, var(--color-primary) 28%, transparent) 18%, - color-mix(in srgb, var(--color-primary) 76%, transparent) 50%, - color-mix(in srgb, var(--color-primary) 28%, transparent) 82%, - transparent - ); - pointer-events: none; + border-bottom: 1px solid rgb(255 255 255 / 8%); } .media-archive-media { @@ -385,28 +325,21 @@ } .media-archive-cover { - --media-archive-image-pad: 0.38rem; - position: relative; display: block; aspect-ratio: 1; - box-sizing: border-box; overflow: hidden; - padding: 0 calc(var(--media-archive-image-pad) * 2) var(--media-archive-image-pad) var(--media-archive-image-pad); - background: - radial-gradient(ellipse at 0% 72%, color-mix(in srgb, var(--color-primary) 36%, transparent) 0%, transparent 48%), - radial-gradient(ellipse at 100% 62%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0%, transparent 50%), - radial-gradient(ellipse at 50% 112%, color-mix(in srgb, var(--color-primary) 58%, transparent) 0%, transparent 58%), #000; + background: #000; } .media-archive-cover::before { content: ''; position: absolute; - inset: 28% 0 0; + inset: 42% 0 0; background: - radial-gradient(circle at 16% 70%, color-mix(in srgb, var(--color-primary) 62%, transparent) 0 0.8px, transparent 1.35px), - radial-gradient(circle at 76% 40%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0 0.7px, transparent 1.25px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0%, transparent 66%); + radial-gradient(circle at 16% 70%, color-mix(in srgb, var(--color-primary) 38%, transparent) 0 0.65px, transparent 1.25px), + radial-gradient(circle at 76% 40%, color-mix(in srgb, var(--color-primary) 26%, transparent) 0 0.55px, transparent 1.1px), + radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 24%, transparent) 0%, transparent 64%); background-position: 0 0, 21px 13px, @@ -420,7 +353,7 @@ @media (min-width: 900px) { .media-archive-row { - grid-template-columns: 6.55rem minmax(0, 1fr) minmax(14rem, 0.34fr); + grid-template-columns: 5.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); align-items: start; padding: 1.35rem 0.5rem 1.35rem 1rem; } From 2c655d8af08d285a1a2b462c7c4773513d1bea68 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 15:36:55 +0530 Subject: [PATCH 12/28] fix(media): restore archive metadata column --- src/pages/media.astro | 14 ++++++-------- src/styles/media.css | 25 +++++++------------------ 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index 0e55005..a9b31a5 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -151,14 +151,12 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; { archiveAppearances.map((appearance) => (

  • -
    - - {appearance.imageAlt} - -
    - {appearance.dateLabel} - {appearance.durationLabel} -
    + + {appearance.imageAlt} + +
    + {appearance.dateLabel} + {appearance.durationLabel}

    diff --git a/src/styles/media.css b/src/styles/media.css index fb65a85..45ef5da 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -308,14 +308,6 @@ border-bottom: 1px solid rgb(255 255 255 / 8%); } -.media-archive-media { - grid-row: 1 / span 2; - display: flex; - flex-direction: column; - gap: 0.55rem; - align-self: start; -} - .media-archive-main { min-width: 0; } @@ -327,6 +319,7 @@ .media-archive-cover { position: relative; display: block; + grid-row: span 3; aspect-ratio: 1; overflow: hidden; background: #000; @@ -353,15 +346,12 @@ @media (min-width: 900px) { .media-archive-row { - grid-template-columns: 5.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); + grid-template-columns: 5.5rem 8.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); align-items: start; padding: 1.35rem 0.5rem 1.35rem 1rem; } - .media-archive-media, - .media-archive-main, - .media-archive-side { - grid-column: auto; + .media-archive-cover { grid-row: auto; } @@ -381,16 +371,15 @@ .media-archive-date span { font-family: var(--font-secondary); - font-size: 0.86rem; - line-height: 1.05; + font-size: 1.05rem; color: #fff; } .media-archive-date small { - margin-top: 0.18rem; + margin-top: 0.25rem; font-family: var(--font-primary); - font-size: 0.64rem; - letter-spacing: 0.1em; + font-size: 0.72rem; + letter-spacing: 0.12em; text-transform: uppercase; color: rgb(255 255 255 / 45%); } From 01e1fe0f390dcedc790c517354ae0f006394e902 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 15:55:04 +0530 Subject: [PATCH 13/28] Revert "fix(media): restore archive metadata column" This reverts commit 2c655d8af08d285a1a2b462c7c4773513d1bea68. --- src/pages/media.astro | 14 ++++++++------ src/styles/media.css | 25 ++++++++++++++++++------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index a9b31a5..0e55005 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -151,12 +151,14 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; { archiveAppearances.map((appearance) => (

  • - - {appearance.imageAlt} - -
    - {appearance.dateLabel} - {appearance.durationLabel} +
    + + {appearance.imageAlt} + +
    + {appearance.dateLabel} + {appearance.durationLabel} +

    diff --git a/src/styles/media.css b/src/styles/media.css index 45ef5da..fb65a85 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -308,6 +308,14 @@ border-bottom: 1px solid rgb(255 255 255 / 8%); } +.media-archive-media { + grid-row: 1 / span 2; + display: flex; + flex-direction: column; + gap: 0.55rem; + align-self: start; +} + .media-archive-main { min-width: 0; } @@ -319,7 +327,6 @@ .media-archive-cover { position: relative; display: block; - grid-row: span 3; aspect-ratio: 1; overflow: hidden; background: #000; @@ -346,12 +353,15 @@ @media (min-width: 900px) { .media-archive-row { - grid-template-columns: 5.5rem 8.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); + grid-template-columns: 5.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); align-items: start; padding: 1.35rem 0.5rem 1.35rem 1rem; } - .media-archive-cover { + .media-archive-media, + .media-archive-main, + .media-archive-side { + grid-column: auto; grid-row: auto; } @@ -371,15 +381,16 @@ .media-archive-date span { font-family: var(--font-secondary); - font-size: 1.05rem; + font-size: 0.86rem; + line-height: 1.05; color: #fff; } .media-archive-date small { - margin-top: 0.25rem; + margin-top: 0.18rem; font-family: var(--font-primary); - font-size: 0.72rem; - letter-spacing: 0.12em; + font-size: 0.64rem; + letter-spacing: 0.1em; text-transform: uppercase; color: rgb(255 255 255 / 45%); } From 37c2ead054384bf38746a933cf8f9fecf6c34130 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 16:03:51 +0530 Subject: [PATCH 14/28] fix(media): restore archive date column --- src/pages/media.astro | 14 ++++++-------- src/styles/media.css | 33 +++++++-------------------------- 2 files changed, 13 insertions(+), 34 deletions(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index 0e55005..a9b31a5 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -151,14 +151,12 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; { archiveAppearances.map((appearance) => (

  • -
    - - {appearance.imageAlt} - -
    - {appearance.dateLabel} - {appearance.durationLabel} -
    + + {appearance.imageAlt} + +
    + {appearance.dateLabel} + {appearance.durationLabel}

    diff --git a/src/styles/media.css b/src/styles/media.css index fb65a85..14a77c2 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -308,25 +308,14 @@ border-bottom: 1px solid rgb(255 255 255 / 8%); } -.media-archive-media { - grid-row: 1 / span 2; - display: flex; - flex-direction: column; - gap: 0.55rem; - align-self: start; -} - .media-archive-main { min-width: 0; } -.media-archive-side { - grid-column: 2; -} - .media-archive-cover { position: relative; display: block; + grid-row: span 3; aspect-ratio: 1; overflow: hidden; background: #000; @@ -353,15 +342,12 @@ @media (min-width: 900px) { .media-archive-row { - grid-template-columns: 5.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); + grid-template-columns: 5.5rem 8.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); align-items: start; padding: 1.35rem 0.5rem 1.35rem 1rem; } - .media-archive-media, - .media-archive-main, - .media-archive-side { - grid-column: auto; + .media-archive-cover { grid-row: auto; } @@ -370,10 +356,6 @@ } } -.media-archive-date { - text-align: left; -} - .media-archive-date span, .media-archive-date small { display: block; @@ -381,16 +363,15 @@ .media-archive-date span { font-family: var(--font-secondary); - font-size: 0.86rem; - line-height: 1.05; + font-size: 1.05rem; color: #fff; } .media-archive-date small { - margin-top: 0.18rem; + margin-top: 0.25rem; font-family: var(--font-primary); - font-size: 0.64rem; - letter-spacing: 0.1em; + font-size: 0.72rem; + letter-spacing: 0.12em; text-transform: uppercase; color: rgb(255 255 255 / 45%); } From 4ae65ddbf47516117c237d0259fe90da8415f092 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 16:44:02 +0530 Subject: [PATCH 15/28] fix(media): simplify hero lede --- src/pages/media.astro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index a9b31a5..cb0179e 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -75,8 +75,8 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png';

    Media appearances

    SovEng In The Wild

    - Conversations where Sovereign Engineering alumni, hosts, and projects get tested in public: FIPS, Nostr markets, - eCash, AI, Madeira, and the Friday-demo habit of turning half-formed prototypes into real tools. + A running archive of podcast appearances and conversations featuring Sovereign Engineering alumni, collaborators, + and projects — the people, ideas, and tools moving through our orbit.

    From ef6ce09cac7e8685727372735b51125a80d46df3 Mon Sep 17 00:00:00 2001 From: jo <36855907+jodobear@users.noreply.github.com> Date: Sat, 6 Jun 2026 16:46:13 +0530 Subject: [PATCH 16/28] fix(media): adjust hero punctuation --- src/pages/media.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/media.astro b/src/pages/media.astro index cb0179e..46fc6de 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -76,7 +76,7 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png';

    SovEng In The Wild

    A running archive of podcast appearances and conversations featuring Sovereign Engineering alumni, collaborators, - and projects — the people, ideas, and tools moving through our orbit. + and projects: the people, ideas, and tools moving through our orbit.

    From ccbf134b38363ddde948e771ddf05e8ffdf835c5 Mon Sep 17 00:00:00 2001 From: Gigi Date: Thu, 11 Jun 2026 12:58:21 +0200 Subject: [PATCH 17/28] style(media): strip appearances page back to minimal row layout --- .../components/MediaAppearanceBody.astro | 53 +++ src/pages/media.astro | 81 +--- src/styles/media.css | 387 +++++------------- 3 files changed, 160 insertions(+), 361 deletions(-) create mode 100644 src/layouts/components/MediaAppearanceBody.astro diff --git a/src/layouts/components/MediaAppearanceBody.astro b/src/layouts/components/MediaAppearanceBody.astro new file mode 100644 index 0000000..5a46619 --- /dev/null +++ b/src/layouts/components/MediaAppearanceBody.astro @@ -0,0 +1,53 @@ +--- +interface LinkedEntity { + name: string; + href: string; +} + +interface Props { + appearance: { + url: string; + title: string; + source: string; + dateLabel: string; + durationLabel: string; + description: string; + alumni: LinkedEntity[]; + projects: LinkedEntity[]; + }; + variant?: 'feature' | 'archive'; +} + +const { appearance, variant = 'feature' } = Astro.props; +const hasAlumni = appearance.alumni.length > 0; +const hasProjects = appearance.projects.length > 0; +--- + +

    + {appearance.source} · {appearance.dateLabel} + · {appearance.durationLabel} +

    +

    + {appearance.title} +

    +

    + {appearance.description} +

    +{ + (hasAlumni || hasProjects) && ( +

    + {hasAlumni && ( + <> + With{' '} + {appearance.alumni.map((profile, index) => ( + <>{index > 0 && ', '}{profile.name} + ))} + + )} + {hasAlumni && hasProjects && · } + {appearance.projects.map((project, index) => ( + <>{index > 0 && ', '}{project.name} + ))} +

    + ) +} diff --git a/src/pages/media.astro b/src/pages/media.astro index 46fc6de..6c246f1 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -1,5 +1,6 @@ --- import Base from '@/layouts/Base.astro'; +import MediaAppearanceBody from '@/components/MediaAppearanceBody.astro'; import { formatDuration, formatMediaAppearanceDate, @@ -22,15 +23,10 @@ type ResolvedAppearance = MediaAppearance & { }[]; projects: { name: string; - cohort: string; href: string; }[]; }; -function resolveProject(name: string): ShowcaseProject | undefined { - return getProjectByName(name); -} - function resolveAppearance(appearance: MediaAppearance): ResolvedAppearance { return { ...appearance, @@ -45,11 +41,10 @@ function resolveAppearance(appearance: MediaAppearance): ResolvedAppearance { href: getNostrProfileHref(profile.npub), })), projects: appearance.projectNames - .map(resolveProject) + .map((name) => getProjectByName(name)) .filter((project): project is ShowcaseProject => Boolean(project)) .map((project) => ({ name: project.name, - cohort: project.cohort, href: getProjectArchiveHref(project), })), }; @@ -89,50 +84,15 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png';

    Highlighted conversations

    -
    +
    { featuredAppearances.map((appearance) => (
    - - {appearance.imageAlt} + + {appearance.imageAlt} -
    - {appearance.source} - {appearance.platform} -
    -

    - {appearance.title} -

    -

    {appearance.description}

    - -
    - {appearance.dateLabel} - {appearance.durationLabel} -
    - -
    - {appearance.alumni.map((profile) => ( - - {profile.name} - - ))} -
    - - {appearance.projects.length > 0 && ( -
    - {appearance.projects.map((project) => ( - - {project.name} - {project.cohort} - - ))} -
    - )} - -
    - {appearance.tags.map((tag) => ( - {tag} - ))} +
    +
    )) @@ -154,33 +114,8 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; {appearance.imageAlt} -
    - {appearance.dateLabel} - {appearance.durationLabel} -
    -

    - {appearance.source} - {appearance.platform} -

    -

    - {appearance.title} -

    -

    {appearance.description}

    -
    - {appearance.alumni.map((profile) => ( - - {profile.name} - - ))} -
    -
    -
    -
    - {appearance.tags.map((tag) => ( - {tag} - ))} -
    +
  • )) diff --git a/src/styles/media.css b/src/styles/media.css index 14a77c2..c3be1cf 100644 --- a/src/styles/media.css +++ b/src/styles/media.css @@ -4,23 +4,10 @@ } .media-hero { - position: relative; - overflow: hidden; border-bottom: 1px solid rgb(255 255 255 / 8%); } -.media-hero::before { - content: ''; - position: absolute; - inset: 0; - background: - radial-gradient(circle at 14% 12%, color-mix(in srgb, var(--color-primary) 20%, transparent), transparent 28rem), - linear-gradient(180deg, rgb(255 255 255 / 4%), transparent 38%); - pointer-events: none; -} - .media-hero-grid { - position: relative; display: grid; max-width: 54rem; gap: 2rem; @@ -43,117 +30,17 @@ margin-bottom: 2rem; } -.media-feature-grid { - display: grid; - gap: 2rem; -} - -@media (min-width: 768px) { - .media-feature-grid { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } -} - -.media-feature-card { - position: relative; - display: flex; - min-height: 100%; - flex-direction: column; - padding-top: 0; - overflow: visible; - border: 0; - background: transparent; -} - -.media-archive-row::before { - content: ''; - position: absolute; - inset: 0 auto 0 0; - width: 2px; - background: linear-gradient(180deg, var(--color-primary), transparent 72%); - opacity: 0.85; -} - -.media-cover-link { - position: relative; - display: block; - aspect-ratio: 16 / 9; - overflow: hidden; - background: #000; - color: inherit; - text-decoration: none; -} - -.media-feature-card .media-cover-link { - background: #000; -} - -.media-feature-card .media-cover-link::before { - content: ''; - position: absolute; - inset: 42% 0 0; - background: - radial-gradient(circle at 14% 70%, color-mix(in srgb, var(--color-primary) 48%, transparent) 0 0.8px, transparent 1.4px), - radial-gradient(circle at 78% 42%, color-mix(in srgb, var(--color-primary) 34%, transparent) 0 0.65px, transparent 1.2px), - radial-gradient(circle at 46% 88%, color-mix(in srgb, var(--color-primary) 40%, transparent) 0 0.75px, transparent 1.3px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 30%, transparent) 0%, transparent 62%); - background-position: - 0 0, - 19px 11px, - 37px 23px, - center; - background-size: - 61px 47px, - 89px 71px, - 127px 91px, - auto; - pointer-events: none; -} - -.media-cover-image, -.media-archive-cover img { - display: block; - width: 100%; - height: 100%; - object-fit: contain; -} - -.media-cover-image, -.media-archive-cover img { - position: relative; - z-index: 1; -} - -.media-cover-link:hover .media-cover-image, -.media-archive-cover:hover img { - opacity: 0.9; -} - -.media-feature-card .media-card-topline { - margin-top: 1rem; -} - -.media-card-topline { - display: flex; - flex-wrap: wrap; - gap: 0.5rem; - align-items: center; - justify-content: space-between; +.media-meta { margin: 0; font-family: var(--font-primary); - font-size: 0.68rem; - letter-spacing: 0.16em; + font-size: 0.6875rem; + letter-spacing: 0.18em; text-transform: uppercase; - color: rgb(255 255 255 / 58%); + color: rgb(255 255 255 / 40%); } -.media-card-title { - margin: 1rem 0 0; - font-size: clamp(1.75rem, 3vw, 2.75rem); - line-height: 1.04; - letter-spacing: -0.035em; - color: #fff; - text-transform: none; +.media-meta-sep { + color: rgb(255 255 255 / 25%); } .media-title-link { @@ -162,6 +49,10 @@ transition: color 150ms ease; } +.media-title-link:hover { + color: var(--color-primary); +} + .media-title-link::after { content: '↗'; display: inline-block; @@ -170,126 +61,97 @@ font-size: 0.55em; line-height: 1; vertical-align: 0.24em; + color: rgb(255 255 255 / 32%); + transition: color 150ms ease; } -.media-title-link:hover { +.media-title-link:hover::after { color: var(--color-primary); } -.media-card-description { - margin: 1rem 0 0; - color: rgb(255 255 255 / 68%); - line-height: 1.55; -} - -.media-meta-row { - display: flex; - flex-wrap: wrap; - gap: 0.55rem; - margin-top: 1rem; - font-family: var(--font-primary); - font-size: 0.72rem; - letter-spacing: 0.12em; - text-transform: uppercase; - color: rgb(255 255 255 / 62%); -} - -.media-meta-row span { - border: 1px solid rgb(255 255 255 / 10%); - padding: 0.32rem 0.5rem; - background: rgb(0 0 0 / 28%); -} - -.media-chip-group { - display: flex; - flex-wrap: wrap; - gap: 0.45rem; - margin-top: 1rem; +.media-people { + margin: 0.75rem 0 0; + font-size: 0.9375rem; + line-height: 1.5; + color: rgb(255 255 255 / 45%); } -.media-chip, -.media-project-link, -.media-tag-row span { - display: inline-flex; - align-items: center; - width: fit-content; +.media-people a { + color: rgb(255 255 255 / 70%); text-decoration: none; + transition: color 150ms ease; } -.media-chip { - padding: 0.64rem 0.78rem; - border: 1px solid color-mix(in srgb, var(--color-primary) 45%, transparent); +.media-people a:hover { color: var(--color-primary); - background: transparent; - font-family: var(--font-secondary); - font-size: 0.95rem; - letter-spacing: 0.03em; - line-height: 1; } -.media-chip--alumni::after { - content: '↗'; - margin-left: 0.45rem; - font-family: var(--font-primary); -} +/* Featured conversations */ -.media-chip:hover, -.media-project-link:hover { - border-color: color-mix(in srgb, var(--color-primary) 58%, transparent); - color: #fff; +.media-feature-list { + display: flex; + flex-direction: column; + gap: 3rem; } -.media-project-row { +.media-feature-card { display: flex; - flex-wrap: wrap; - gap: 0.5rem; - margin-top: 1rem; + flex-direction: column; + gap: 1.25rem; } -.media-project-link { - gap: 0.45rem; - padding: 0.42rem 0.6rem; - border: 1px solid rgb(255 255 255 / 12%); - color: #fff; - background: rgb(255 255 255 / 3%); - font-family: var(--font-secondary); - line-height: 1; +@media (min-width: 640px) { + .media-feature-card { + flex-direction: row; + gap: 2rem; + } } -.media-project-link small { - font-family: var(--font-primary); - font-size: 0.62rem; - letter-spacing: 0.14em; - color: rgb(255 255 255 / 45%); +.media-feature-cover { + display: block; + flex-shrink: 0; + width: 11rem; + aspect-ratio: 1; + overflow: hidden; + background: #0a0a0a; } -.media-tag-row { - display: flex; - flex-wrap: wrap; - gap: 0.4rem; - margin-top: 1rem; +.media-feature-cover img, +.media-archive-cover img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: opacity 150ms ease; } -.media-tag-row span { - padding: 0.28rem 0.48rem; - border: 1px solid rgb(255 255 255 / 9%); - color: rgb(255 255 255 / 58%); - font-family: var(--font-primary); - font-size: 0.72rem; +.media-feature-cover:hover img, +.media-archive-cover:hover img { + opacity: 0.85; } -.media-separator { - margin: 4rem 0 0; +.media-feature-body { + min-width: 0; } -.media-separator img { - display: block; - width: min(100%, 32rem); - height: auto; - margin: 0 auto; - opacity: 0.92; +.media-feature-title { + margin: 0.6rem 0 0; + font-size: clamp(1.5rem, 2.5vw, 2.25rem); + line-height: 1.1; + text-transform: none; + color: #fff; } +.media-feature-desc { + margin: 0.75rem 0 0; + max-width: 46rem; + font-size: 0.9375rem; + line-height: 1.55; + color: rgb(255 255 255 / 60%); +} + +/* Archive rows */ + .media-archive-list { display: flex; flex-direction: column; @@ -300,55 +162,16 @@ } .media-archive-row { - position: relative; display: grid; - grid-template-columns: 4.75rem minmax(0, 1fr); - gap: 1rem; - padding: 1.25rem 0 1.25rem 1rem; + grid-template-columns: 3.5rem minmax(0, 1fr); + gap: 1.25rem; + padding: 1.5rem 0; border-bottom: 1px solid rgb(255 255 255 / 8%); } -.media-archive-main { - min-width: 0; -} - -.media-archive-cover { - position: relative; - display: block; - grid-row: span 3; - aspect-ratio: 1; - overflow: hidden; - background: #000; -} - -.media-archive-cover::before { - content: ''; - position: absolute; - inset: 42% 0 0; - background: - radial-gradient(circle at 16% 70%, color-mix(in srgb, var(--color-primary) 38%, transparent) 0 0.65px, transparent 1.25px), - radial-gradient(circle at 76% 40%, color-mix(in srgb, var(--color-primary) 26%, transparent) 0 0.55px, transparent 1.1px), - radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--color-primary) 24%, transparent) 0%, transparent 64%); - background-position: - 0 0, - 21px 13px, - center; - background-size: - 53px 43px, - 83px 67px, - auto; - pointer-events: none; -} - -@media (min-width: 900px) { +@media (min-width: 768px) { .media-archive-row { - grid-template-columns: 5.5rem 8.5rem minmax(0, 1fr) minmax(14rem, 0.34fr); - align-items: start; - padding: 1.35rem 0.5rem 1.35rem 1rem; - } - - .media-archive-cover { - grid-row: auto; + padding: 1.5rem 0.25rem; } .media-archive-row:hover { @@ -356,56 +179,44 @@ } } -.media-archive-date span, -.media-archive-date small { +.media-archive-cover { display: block; + width: 3.5rem; + aspect-ratio: 1; + overflow: hidden; + background: #0a0a0a; } -.media-archive-date span { - font-family: var(--font-secondary); - font-size: 1.05rem; - color: #fff; -} - -.media-archive-date small { - margin-top: 0.25rem; - font-family: var(--font-primary); - font-size: 0.72rem; - letter-spacing: 0.12em; - text-transform: uppercase; - color: rgb(255 255 255 / 45%); +.media-archive-main { + min-width: 0; } .media-archive-title { - margin: 0.45rem 0 0; - font-size: clamp(1.45rem, 3vw, 2.3rem); - line-height: 1; - letter-spacing: -0.025em; + margin: 0.5rem 0 0; + font-size: 1.5rem; + line-height: 1.15; text-transform: none; color: #fff; } -.media-archive-description { +.media-archive-desc { + margin: 0.6rem 0 0; max-width: 46rem; - margin: 0.7rem 0 0; - color: rgb(255 255 255 / 63%); + font-size: 0.9375rem; line-height: 1.5; + color: rgb(255 255 255 / 50%); } -.media-archive-side { - display: flex; - flex-direction: column; - gap: 1rem; - align-items: flex-start; -} +/* Separator */ -@media (min-width: 900px) { - .media-archive-side { - align-items: flex-end; - } +.media-separator { + margin: 4rem 0 0; +} - .media-archive-side .media-tag-row { - justify-content: flex-end; - margin-top: 0; - } +.media-separator img { + display: block; + width: min(100%, 32rem); + height: auto; + margin: 0 auto; + opacity: 0.92; } From e417635ed9b3a17812fd628fe38efc6a45b0fe6a Mon Sep 17 00:00:00 2001 From: Gigi Date: Thu, 11 Jun 2026 13:33:20 +0200 Subject: [PATCH 18/28] style(media): merge sections into one list, larger type --- .../components/MediaAppearanceBody.astro | 11 +- src/pages/media.astro | 47 +--- src/styles/media.css | 209 +++++++----------- 3 files changed, 89 insertions(+), 178 deletions(-) diff --git a/src/layouts/components/MediaAppearanceBody.astro b/src/layouts/components/MediaAppearanceBody.astro index 5a46619..a3bc8bb 100644 --- a/src/layouts/components/MediaAppearanceBody.astro +++ b/src/layouts/components/MediaAppearanceBody.astro @@ -15,10 +15,9 @@ interface Props { alumni: LinkedEntity[]; projects: LinkedEntity[]; }; - variant?: 'feature' | 'archive'; } -const { appearance, variant = 'feature' } = Astro.props; +const { appearance } = Astro.props; const hasAlumni = appearance.alumni.length > 0; const hasProjects = appearance.projects.length > 0; --- @@ -27,12 +26,10 @@ const hasProjects = appearance.projects.length > 0; {appearance.source} · {appearance.dateLabel} · {appearance.durationLabel}

    -

    +

    {appearance.title} -

    -

    - {appearance.description} -

    + +

    {appearance.description}

    { (hasAlumni || hasProjects) && (

    diff --git a/src/pages/media.astro b/src/pages/media.astro index 6c246f1..c929bf9 100644 --- a/src/pages/media.astro +++ b/src/pages/media.astro @@ -4,8 +4,7 @@ import MediaAppearanceBody from '@/components/MediaAppearanceBody.astro'; import { formatDuration, formatMediaAppearanceDate, - getArchiveMediaAppearances, - getFeaturedMediaAppearances, + getMediaAppearances, type MediaAppearance, } from '@/lib/mediaAppearances'; import { getNostrProfileHref, getSovEngAlumniByNpub, getSovEngAlumniDisplayName } from '@/lib/sovengAlumni'; @@ -50,8 +49,7 @@ function resolveAppearance(appearance: MediaAppearance): ResolvedAppearance { }; } -const featuredAppearances = getFeaturedMediaAppearances().map(resolveAppearance); -const archiveAppearances = getArchiveMediaAppearances().map(resolveAppearance); +const appearances = getMediaAppearances().map(resolveAppearance); const mediaSeparatorImage = '/images/contest/separator-ship.png'; --- @@ -78,44 +76,17 @@ const mediaSeparatorImage = '/images/contest/separator-ship.png'; -