Draft links page
This commit is contained in:
parent
db0ec6f797
commit
7f8132d33e
4 changed files with 322 additions and 0 deletions
|
@ -18,6 +18,7 @@ export function BasePage(props: BaseProps) {
|
|||
<a href="/updates.html">Updates</a>
|
||||
<a href="/words.html">Words</a>
|
||||
<a href="/projects.html">Projects</a>
|
||||
<a href="/links.html">Links</a>
|
||||
</nav>
|
||||
</header>
|
||||
{props.children}
|
||||
|
|
277
content/links.jsonc
Normal file
277
content/links.jsonc
Normal file
|
@ -0,0 +1,277 @@
|
|||
{
|
||||
"links": [
|
||||
{
|
||||
"title": "Type",
|
||||
"url": "https://exple.tive.org/blarg/2024/11/12/type/",
|
||||
"description": "A scathing critique of The Elements of Typographic Style",
|
||||
"tags": ["review", "typography"],
|
||||
"read": "2025-01-05",
|
||||
},
|
||||
{
|
||||
"title": "A Webring List",
|
||||
"tags": ["webrings", "collections"],
|
||||
"description": "A comprehensive collection of Webrings collected by Ray Thomas",
|
||||
"url": "https://brisray.com/web/webring-list.htm",
|
||||
"author": "Ray Thomas",
|
||||
},
|
||||
{
|
||||
"title": "Webring History",
|
||||
"tags": ["webrings", "history"],
|
||||
"description": "A brief history of Webrings",
|
||||
"url": "https://brisray.com/web/webring-history.htm",
|
||||
"author": "Ray Thomas",
|
||||
},
|
||||
{
|
||||
"title": "The Only Way to Beat Algorithms is to Retrain Your Audience",
|
||||
"url": "https://kiriska.com/blog/2019/the-only-way-to-beat-algorithms-is-to-retrain-your-audience/",
|
||||
"tags": ["articles", "distributed web"],
|
||||
"read": "2025-01-06",
|
||||
"author": "Kiri",
|
||||
},
|
||||
{
|
||||
"title": "Power shifts in a multiple system",
|
||||
"url": "https://sarahkreece.com/2013/12/23/power-shifts-in-a-multiple-system/",
|
||||
"tags": ["articles", "multiplicity"],
|
||||
"read": "2025-01-06",
|
||||
"author": "Sarah K Reece",
|
||||
},
|
||||
{
|
||||
"title": "What’s Wrong With … Exceptions",
|
||||
"url": "https://blog.pdark.de/2007/06/29/whats-wrong-with-exceptions/",
|
||||
"tags": ["articles", "programming", "exceptions"],
|
||||
"read": "2025-01-06",
|
||||
"author": "Philmann Dark",
|
||||
},
|
||||
{
|
||||
"title": "Never Rewrite From Scratch",
|
||||
"url": "https://blog.pdark.de/2024/04/24/never-rewrite-from-scratch/",
|
||||
"tags": ["articles", "programming", "refactoring"],
|
||||
"read": "2025-01-06",
|
||||
"author": "Philmann Dark",
|
||||
},
|
||||
{
|
||||
"title": "A Dragon's Tale",
|
||||
"url": "https://www.philmann-dark.de/dragon.html",
|
||||
"tags": ["short story", "dragons"],
|
||||
"read": "2025-01-05",
|
||||
"author": "Philmann Dark",
|
||||
},
|
||||
{
|
||||
"title": "How I Learned to Stop Worrying and Love GC",
|
||||
"url": "https://world-playground-deceit.net/blog/2024/11/how-i-learned-to-stop-worrying-and-love-gc.html",
|
||||
"tags": ["articles", "programming", "garbage collection"],
|
||||
"read": "2025-01-06",
|
||||
},
|
||||
{
|
||||
"title": "Memory Management Reference",
|
||||
"url": "https://www.memorymanagement.org/",
|
||||
"tags": ["links", "programming", "memory management"],
|
||||
},
|
||||
{
|
||||
"title": "In-group and out-group",
|
||||
"url": "https://en.wikipedia.org/wiki/In-group_and_out-group",
|
||||
"description": "Psychological phenomena describing people's strong bias towards their group and against people outside it.",
|
||||
"tags": ["articles", "psychology", "moderation"],
|
||||
"read": "2025-01-09",
|
||||
},
|
||||
{
|
||||
"title": "User Expertise Stagnates at Low Levels",
|
||||
"url": "https://www.nngroup.com/articles/stagnating-expertise/",
|
||||
"tags": ["design", "ux"],
|
||||
"read": "2025-01-10",
|
||||
"author": "Jakob Nielsen",
|
||||
},
|
||||
{
|
||||
"title": "The New Internet",
|
||||
"url": "https://tailscale.com/blog/new-internet",
|
||||
"tags": ["articles", "tailscale", "connectivity"],
|
||||
"read": "2025-01-10",
|
||||
"author": "Avery Pennarun",
|
||||
},
|
||||
{
|
||||
"title": "The Free Web",
|
||||
"url": "https://thehistoryoftheweb.com/the-free-web/",
|
||||
"tags": ["articles", "internet", "culture"],
|
||||
"read": "2025-01-10",
|
||||
"author": "Jay Hoffmann",
|
||||
},
|
||||
{
|
||||
"title": "Bad Shape",
|
||||
"url": "https://www.wrecka.ge/bad-shape/",
|
||||
"tags": ["articles", "big social media", "moderation"],
|
||||
"read": "2025-01-10",
|
||||
"author": "Erin Kissane",
|
||||
},
|
||||
{
|
||||
"title": "An Abridged History of Safari Showstoppers",
|
||||
"url": "https://webventures.rejh.nl/blog/2024/history-of-safari-show-stoppers/",
|
||||
"tags": ["articles", "webdev", "safari"],
|
||||
},
|
||||
{
|
||||
"title": "The Really Dark Truth About Bots",
|
||||
"url": "https://www.youtube.com/watch?v=GZ5XN_mJE8Y",
|
||||
"tags": ["video", "social media bots", "political discourse", "disinformation"],
|
||||
"description": "A dive into the troll farms and systematic disinformation campaigns targeting political discourse.",
|
||||
"read": "2025-01-12",
|
||||
},
|
||||
{
|
||||
"title": "From Gongkai to Open Source",
|
||||
"url": "https://www.bunniestudios.com/blog/2014/from-gongkai-to-open-source/",
|
||||
"tags": ["article", "hardware", "chinese culture", "reverse engineering"],
|
||||
"description": "Writeup on the reverse engineering efforts that went into making Fernvalue, an open source development platform for the Mediatek MT6260",
|
||||
"read": "2025-01-12",
|
||||
},
|
||||
{
|
||||
"title": "On \"Safe\" C++",
|
||||
"url": "https://izzys.casa/2024/11/on-safe-cxx/",
|
||||
"tags": ["article", "programming", "c++", "programming community"],
|
||||
"description": "Unhinged rant on the C++ committee and community at large.",
|
||||
"read": "2025-01-19",
|
||||
"author": "Izzy Muerte",
|
||||
},
|
||||
{
|
||||
"title": "The seven programming ur-languages",
|
||||
"url": "https://madhadron.com/programming/seven_ur_languages.html",
|
||||
"tags": ["article", "programming", "learning programming", "language design"],
|
||||
"description": "A description of 7 root languages in programming that inspired most of the structure in all programming languages",
|
||||
"read": "2025-01-20",
|
||||
"author": "madhadron",
|
||||
},
|
||||
{
|
||||
"title": "Our conventions are not inevitable",
|
||||
"url": "https://madhadron.com/programming/conventions.html",
|
||||
"tags": ["article", "programming", "conventions"],
|
||||
"description": "Thoughts on programming conventions being largely inertia rather than fundamental.",
|
||||
"read": "2025-01-20",
|
||||
"author": "madhadron",
|
||||
},
|
||||
{
|
||||
"title": "Proof of Thought",
|
||||
"url": "https://erik.wiffin.com/posts/proof-of-thought/",
|
||||
"tags": ["article", "organisations", "reporting"],
|
||||
"description": "An interesting take on reports not meant to be read by anyone still being useful.",
|
||||
"read": "2025-01-20",
|
||||
"author": "Erik Wiffin",
|
||||
},
|
||||
{
|
||||
"title": "On short URLs",
|
||||
"url": "https://qntm.org/urls",
|
||||
"tags": ["article", "websites", "short urls"],
|
||||
"description": "qntm's reasoning for why use short URLs.",
|
||||
"read": "2025-01-20",
|
||||
"author": "qntm",
|
||||
},
|
||||
{
|
||||
"title": "Short URLs: why and how",
|
||||
"url": "https://sive.rs/su",
|
||||
"tags": ["article", "websites", "short urls"],
|
||||
"description": "Derek Sivers' reasoning for why use short URLs.",
|
||||
"read": "2025-01-20",
|
||||
"author": "Derke Sivers",
|
||||
},
|
||||
{
|
||||
"title": "The Tyranny of the Marginal User",
|
||||
"url": "https://nothinghuman.substack.com/p/the-tyranny-of-the-marginal-user",
|
||||
"tags": ["article", "online services", "enshittification", "online dating"],
|
||||
"description": "How focusing on the marginal user caused OKCupid to go downhill",
|
||||
"read": "2025-01-21",
|
||||
"author": "Ivan Vendrov",
|
||||
},
|
||||
{
|
||||
"title": "The Website Obesity Crisis",
|
||||
"url": "https://idlewords.com/talks/website_obesity.htm",
|
||||
"tags": ["article", "webdev", "bloat"],
|
||||
"description": "Observations on bloat of websites and the future of the web.",
|
||||
"read": "2025-01-23",
|
||||
"author": "Maciej Cegłowski",
|
||||
},
|
||||
{
|
||||
"title": "The Small Website Discoverability Crisis",
|
||||
"url": "https://www.marginalia.nu/log/19-website-discoverability-crisis/",
|
||||
"tags": ["article", "small web", "discoverability", "bookmarks", "links"],
|
||||
"description": "Victor argues a solution to the small web discoverability problem lies in sharing bookmarks.",
|
||||
"read": "2025-01-24",
|
||||
"author": "Viktor Lofgren",
|
||||
},
|
||||
{
|
||||
"title": "Fan is A Tool-Using Animal",
|
||||
"url": "https://idlewords.com/talks/fan_is_a_tool_using_animal.htm",
|
||||
"tags": ["article", "fandom", "collaboration"],
|
||||
"description": "Talk about spontaneous collaboration and culture in the fandom.",
|
||||
"read": "2025-01-24",
|
||||
"author": "Maciej Cegłowski",
|
||||
},
|
||||
{
|
||||
"title": "Every site needs a Links Page / Why linking matters",
|
||||
"url": "https://thoughts.melonking.net/thoughts/every-site-needs-a-links-page-why-linking-matters",
|
||||
"tags": ["article", "small web", "links"],
|
||||
"description": "Why websites should link to other websites.",
|
||||
"read": "2025-01-24",
|
||||
"author": "Melon",
|
||||
},
|
||||
{
|
||||
"title": "",
|
||||
"url": "",
|
||||
"tags": ["article", "", ""],
|
||||
"description": "",
|
||||
"read": "",
|
||||
"author": "",
|
||||
},
|
||||
],
|
||||
"to_read": [
|
||||
"https://bitbashing.io/gc-for-systems-programmers.html",
|
||||
],
|
||||
"authors": {
|
||||
"Ray Thomas": {
|
||||
"urls": ["https://brisray.com/"],
|
||||
},
|
||||
"Kiri": {
|
||||
"urls": ["https://kiriska.com/"],
|
||||
},
|
||||
"Sarah K Reece": {
|
||||
"urls": ["https://sarahkreece.com/"],
|
||||
},
|
||||
"Philmann Dark": {
|
||||
"urls": ["https://blog.pdark.de/about/"],
|
||||
},
|
||||
"Jakob Nielsen": {
|
||||
"urls": ["https://www.nngroup.com/articles/author/jakob-nielsen/"],
|
||||
},
|
||||
"Jay Hoffmann": {
|
||||
"urls": ["https://x.com/jay_hoffmann"],
|
||||
},
|
||||
"Erin Kissane": {
|
||||
"urls": ["https://www.wrecka.ge/author/erin/"],
|
||||
},
|
||||
"Izzy Muerte": {
|
||||
"urls": ["https://izzy.casa/"],
|
||||
},
|
||||
"madhadron": {
|
||||
"urls": ["https://madhadron.com/"],
|
||||
},
|
||||
"Erik Wiffin": {
|
||||
"urls": ["https://erik.wiffin.com/"],
|
||||
},
|
||||
"qntm": {
|
||||
"urls": ["https://qntm.org/"],
|
||||
},
|
||||
"Derke Sivers": {
|
||||
"urls": ["https://sive.rs/"],
|
||||
},
|
||||
"Ivan Vendrov": {
|
||||
"urls": ["https://substack.com/@ivanvendrov"],
|
||||
},
|
||||
"Maciej Cegłowski": {
|
||||
"urls": ["https://idlewords.com/"],
|
||||
},
|
||||
"Viktor Lofgren": {
|
||||
"urls": ["https://www.marginalia.nu/"],
|
||||
},
|
||||
"Melon": {
|
||||
"urls": ["https://melonland.net/", "https://melonking.net/"],
|
||||
},
|
||||
"": {
|
||||
"urls": [""],
|
||||
},
|
||||
}
|
||||
}
|
42
content/links.tsx
Normal file
42
content/links.tsx
Normal file
|
@ -0,0 +1,42 @@
|
|||
import { readFileSync } from "node:fs";
|
||||
import { BasePage } from "./bases.js";
|
||||
import type { Page } from "./types.js";
|
||||
|
||||
interface LinkData {
|
||||
title: string,
|
||||
url: string,
|
||||
tags: string[],
|
||||
description?: string,
|
||||
read?: string,
|
||||
author?: string,
|
||||
}
|
||||
interface Data {
|
||||
links: LinkData[];
|
||||
to_read: string[],
|
||||
authors: Record<string, {
|
||||
urls: string[],
|
||||
}>;
|
||||
}
|
||||
function Link(props: { link: LinkData }) {
|
||||
const link = props.link;
|
||||
return <>
|
||||
<a href={link.url}>{link.title}</a>
|
||||
{" "}
|
||||
{link.tags.join(", ")}
|
||||
</>
|
||||
}
|
||||
const data: Data = eval(`(${readFileSync("content/links.jsonc", "utf8")})`);
|
||||
data.links.pop(); // Remove template at the end
|
||||
const title = "Links!";
|
||||
export const links: Page = {
|
||||
title,
|
||||
ref: "/links.html",
|
||||
content: <BasePage title={title}>
|
||||
<main>
|
||||
<h1>{title}</h1>
|
||||
<ul>
|
||||
{ data.links.map(link => <li><Link link={link} /></li>)}
|
||||
</ul>
|
||||
</main>
|
||||
</BasePage>
|
||||
}
|
|
@ -3,6 +3,7 @@ import { index } from "./index.js";
|
|||
import { updates, updatesIndex } from "./updates.js";
|
||||
import { words, wordsIndex } from "./words.js";
|
||||
import { projects, projectsIndex } from "./projects.js";
|
||||
import { links } from "./links.js";
|
||||
|
||||
export const pages: Page[] = [
|
||||
index,
|
||||
|
@ -12,4 +13,5 @@ export const pages: Page[] = [
|
|||
...words,
|
||||
projectsIndex,
|
||||
...projects,
|
||||
links,
|
||||
];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue