diff --git a/public/images/bookmarks/a-beautiful-mind.jpg b/public/images/bookmarks/a-beautiful-mind.jpg deleted file mode 100644 index 8e85fce..0000000 Binary files a/public/images/bookmarks/a-beautiful-mind.jpg and /dev/null differ diff --git a/public/images/bookmarks/attack-on-titan.jpg b/public/images/bookmarks/attack-on-titan.jpg deleted file mode 100644 index fcd1de4..0000000 Binary files a/public/images/bookmarks/attack-on-titan.jpg and /dev/null differ diff --git a/public/images/bookmarks/blue-eye-samurai.jpg b/public/images/bookmarks/blue-eye-samurai.jpg deleted file mode 100644 index f5d6974..0000000 Binary files a/public/images/bookmarks/blue-eye-samurai.jpg and /dev/null differ diff --git a/public/images/bookmarks/bumblebee.jpg b/public/images/bookmarks/bumblebee.jpg deleted file mode 100644 index 3775fd6..0000000 Binary files a/public/images/bookmarks/bumblebee.jpg and /dev/null differ diff --git a/public/images/bookmarks/chainsaw-man-the-movie-reze-arc.jpg b/public/images/bookmarks/chainsaw-man-the-movie-reze-arc.jpg deleted file mode 100644 index b7968d4..0000000 Binary files a/public/images/bookmarks/chainsaw-man-the-movie-reze-arc.jpg and /dev/null differ diff --git a/public/images/bookmarks/clean-code.jpg b/public/images/bookmarks/clean-code.jpg deleted file mode 100644 index 7889e2f..0000000 Binary files a/public/images/bookmarks/clean-code.jpg and /dev/null differ diff --git a/public/images/bookmarks/death-note.jpg b/public/images/bookmarks/death-note.jpg deleted file mode 100644 index 9079408..0000000 Binary files a/public/images/bookmarks/death-note.jpg and /dev/null differ diff --git a/public/images/bookmarks/demon-slayer.jpg b/public/images/bookmarks/demon-slayer.jpg deleted file mode 100644 index 2e885af..0000000 Binary files a/public/images/bookmarks/demon-slayer.jpg and /dev/null differ diff --git a/public/images/bookmarks/designing-data-intensive-applications.jpg b/public/images/bookmarks/designing-data-intensive-applications.jpg deleted file mode 100644 index a1a4f43..0000000 Binary files a/public/images/bookmarks/designing-data-intensive-applications.jpg and /dev/null differ diff --git a/public/images/bookmarks/drishyam-2.jpg b/public/images/bookmarks/drishyam-2.jpg deleted file mode 100644 index 85b7aab..0000000 Binary files a/public/images/bookmarks/drishyam-2.jpg and /dev/null differ diff --git a/public/images/bookmarks/drishyam.jpg b/public/images/bookmarks/drishyam.jpg deleted file mode 100644 index 0559cf9..0000000 Binary files a/public/images/bookmarks/drishyam.jpg and /dev/null differ diff --git a/public/images/bookmarks/einstein-and-eddington.jpg b/public/images/bookmarks/einstein-and-eddington.jpg deleted file mode 100644 index 8cee469..0000000 Binary files a/public/images/bookmarks/einstein-and-eddington.jpg and /dev/null differ diff --git a/public/images/bookmarks/erin-brockovich.jpg b/public/images/bookmarks/erin-brockovich.jpg deleted file mode 100644 index 9edbb41..0000000 Binary files a/public/images/bookmarks/erin-brockovich.jpg and /dev/null differ diff --git a/public/images/bookmarks/forrest-gump.jpg b/public/images/bookmarks/forrest-gump.jpg deleted file mode 100644 index 75ba6df..0000000 Binary files a/public/images/bookmarks/forrest-gump.jpg and /dev/null differ diff --git a/public/images/bookmarks/green-book.jpg b/public/images/bookmarks/green-book.jpg deleted file mode 100644 index 1ae4af4..0000000 Binary files a/public/images/bookmarks/green-book.jpg and /dev/null differ diff --git a/public/images/bookmarks/hachi-a-dog-s-tale.jpg b/public/images/bookmarks/hachi-a-dog-s-tale.jpg deleted file mode 100644 index 35a47ae..0000000 Binary files a/public/images/bookmarks/hachi-a-dog-s-tale.jpg and /dev/null differ diff --git a/public/images/bookmarks/interstellar.jpg b/public/images/bookmarks/interstellar.jpg deleted file mode 100644 index 273654e..0000000 Binary files a/public/images/bookmarks/interstellar.jpg and /dev/null differ diff --git a/public/images/bookmarks/joker.jpg b/public/images/bookmarks/joker.jpg deleted file mode 100644 index c431c24..0000000 Binary files a/public/images/bookmarks/joker.jpg and /dev/null differ diff --git a/public/images/bookmarks/l-on-the-professional.jpg b/public/images/bookmarks/l-on-the-professional.jpg deleted file mode 100644 index d67753f..0000000 Binary files a/public/images/bookmarks/l-on-the-professional.jpg and /dev/null differ diff --git a/public/images/bookmarks/masters-of-the-air.jpg b/public/images/bookmarks/masters-of-the-air.jpg deleted file mode 100644 index 7b78418..0000000 Binary files a/public/images/bookmarks/masters-of-the-air.jpg and /dev/null differ diff --git a/public/images/bookmarks/midnight-diner.jpg b/public/images/bookmarks/midnight-diner.jpg deleted file mode 100644 index d8a6e22..0000000 Binary files a/public/images/bookmarks/midnight-diner.jpg and /dev/null differ diff --git a/public/images/bookmarks/mr-robot.jpg b/public/images/bookmarks/mr-robot.jpg deleted file mode 100644 index 57d9f9c..0000000 Binary files a/public/images/bookmarks/mr-robot.jpg and /dev/null differ diff --git a/public/images/bookmarks/my-love-from-the-star.jpg b/public/images/bookmarks/my-love-from-the-star.jpg deleted file mode 100644 index d52cf39..0000000 Binary files a/public/images/bookmarks/my-love-from-the-star.jpg and /dev/null differ diff --git a/public/images/bookmarks/now-you-see-me.jpg b/public/images/bookmarks/now-you-see-me.jpg deleted file mode 100644 index 9872aca..0000000 Binary files a/public/images/bookmarks/now-you-see-me.jpg and /dev/null differ diff --git a/public/images/bookmarks/nuremberg.jpg b/public/images/bookmarks/nuremberg.jpg deleted file mode 100644 index 351850e..0000000 Binary files a/public/images/bookmarks/nuremberg.jpg and /dev/null differ diff --git a/public/images/bookmarks/one-punch-man.jpg b/public/images/bookmarks/one-punch-man.jpg deleted file mode 100644 index bede690..0000000 Binary files a/public/images/bookmarks/one-punch-man.jpg and /dev/null differ diff --git a/public/images/bookmarks/oppenheimer.jpg b/public/images/bookmarks/oppenheimer.jpg deleted file mode 100644 index 72d9db1..0000000 Binary files a/public/images/bookmarks/oppenheimer.jpg and /dev/null differ diff --git a/public/images/bookmarks/orb-on-the-movements-of-the-earth.jpg b/public/images/bookmarks/orb-on-the-movements-of-the-earth.jpg deleted file mode 100644 index 0cae381..0000000 Binary files a/public/images/bookmarks/orb-on-the-movements-of-the-earth.jpg and /dev/null differ diff --git a/public/images/bookmarks/panchayat.jpg b/public/images/bookmarks/panchayat.jpg deleted file mode 100644 index 08ef283..0000000 Binary files a/public/images/bookmarks/panchayat.jpg and /dev/null differ diff --git a/public/images/bookmarks/sakamoto-days.jpg b/public/images/bookmarks/sakamoto-days.jpg deleted file mode 100644 index 9b75881..0000000 Binary files a/public/images/bookmarks/sakamoto-days.jpg and /dev/null differ diff --git a/public/images/bookmarks/schindlers-list.jpg b/public/images/bookmarks/schindlers-list.jpg deleted file mode 100644 index 04797de..0000000 Binary files a/public/images/bookmarks/schindlers-list.jpg and /dev/null differ diff --git a/public/images/bookmarks/silicon-valley.jpg b/public/images/bookmarks/silicon-valley.jpg deleted file mode 100644 index 6408037..0000000 Binary files a/public/images/bookmarks/silicon-valley.jpg and /dev/null differ diff --git a/public/images/bookmarks/solo-leveling.jpg b/public/images/bookmarks/solo-leveling.jpg deleted file mode 100644 index 1ccf883..0000000 Binary files a/public/images/bookmarks/solo-leveling.jpg and /dev/null differ diff --git a/public/images/bookmarks/special-26.jpg b/public/images/bookmarks/special-26.jpg deleted file mode 100644 index 859b29c..0000000 Binary files a/public/images/bookmarks/special-26.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-aviator.jpg b/public/images/bookmarks/the-aviator.jpg deleted file mode 100644 index 8a3b46c..0000000 Binary files a/public/images/bookmarks/the-aviator.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-fast-and-the-furious.jpg b/public/images/bookmarks/the-fast-and-the-furious.jpg deleted file mode 100644 index 1d4891e..0000000 Binary files a/public/images/bookmarks/the-fast-and-the-furious.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-grand-budapest-hotel.jpg b/public/images/bookmarks/the-grand-budapest-hotel.jpg deleted file mode 100644 index 53a46b7..0000000 Binary files a/public/images/bookmarks/the-grand-budapest-hotel.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-green-mile.jpg b/public/images/bookmarks/the-green-mile.jpg deleted file mode 100644 index accc58e..0000000 Binary files a/public/images/bookmarks/the-green-mile.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-ministry-of-ungentlemanly-warfare.jpg b/public/images/bookmarks/the-ministry-of-ungentlemanly-warfare.jpg deleted file mode 100644 index 7707096..0000000 Binary files a/public/images/bookmarks/the-ministry-of-ungentlemanly-warfare.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-pragmatic-programmer.jpg b/public/images/bookmarks/the-pragmatic-programmer.jpg deleted file mode 100644 index 98edd60..0000000 Binary files a/public/images/bookmarks/the-pragmatic-programmer.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-raid-2.jpg b/public/images/bookmarks/the-raid-2.jpg deleted file mode 100644 index dca1aed..0000000 Binary files a/public/images/bookmarks/the-raid-2.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-raid.jpg b/public/images/bookmarks/the-raid.jpg deleted file mode 100644 index ea335d4..0000000 Binary files a/public/images/bookmarks/the-raid.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-shawshank-redemption.jpg b/public/images/bookmarks/the-shawshank-redemption.jpg deleted file mode 100644 index 2805cd1..0000000 Binary files a/public/images/bookmarks/the-shawshank-redemption.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-social-network.jpg b/public/images/bookmarks/the-social-network.jpg deleted file mode 100644 index aa4558d..0000000 Binary files a/public/images/bookmarks/the-social-network.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-terminator.jpg b/public/images/bookmarks/the-terminator.jpg deleted file mode 100644 index 36b02af..0000000 Binary files a/public/images/bookmarks/the-terminator.jpg and /dev/null differ diff --git a/public/images/bookmarks/the-truman-show.jpg b/public/images/bookmarks/the-truman-show.jpg deleted file mode 100644 index bfa9908..0000000 Binary files a/public/images/bookmarks/the-truman-show.jpg and /dev/null differ diff --git a/public/images/bookmarks/wall-e.jpg b/public/images/bookmarks/wall-e.jpg deleted file mode 100644 index b8832bc..0000000 Binary files a/public/images/bookmarks/wall-e.jpg and /dev/null differ diff --git a/public/images/bookmarks/when-life-gives-you-tangerines.jpg b/public/images/bookmarks/when-life-gives-you-tangerines.jpg deleted file mode 100644 index 008ff7b..0000000 Binary files a/public/images/bookmarks/when-life-gives-you-tangerines.jpg and /dev/null differ diff --git a/public/images/bookmarks/x-men-first-class.jpg b/public/images/bookmarks/x-men-first-class.jpg deleted file mode 100644 index a545545..0000000 Binary files a/public/images/bookmarks/x-men-first-class.jpg and /dev/null differ diff --git a/scripts/fetch-bookmark-images.mjs b/scripts/fetch-bookmark-images.mjs deleted file mode 100755 index 15ef760..0000000 --- a/scripts/fetch-bookmark-images.mjs +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env node -import fs from "fs"; -import https from "https"; -import http from "http"; -import path from "path"; -import { fileURLToPath } from "url"; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const root = path.resolve(__dirname, ".."); -const jsonPath = path.join(root, "src/data/bookmarks.json"); -const imgDir = path.join(root, "public/images/bookmarks"); - -fs.mkdirSync(imgDir, { recursive: true }); - -function slugify(title) { - return title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); -} - -function httpGet(url, options = {}) { - return new Promise((resolve, reject) => { - const proto = url.startsWith("https") ? https : http; - proto.get(url, options, resolve).on("error", reject); - }); -} - -function download(url, dest, redirects = 5) { - return new Promise((resolve, reject) => { - if (redirects <= 0) return reject(new Error("Too many redirects")); - const proto = url.startsWith("https") ? https : http; - proto - .get(url, { headers: { "User-Agent": "Mozilla/5.0" } }, (res) => { - if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { - const next = new URL(res.headers.location, url).href; - download(next, dest, redirects - 1).then(resolve).catch(reject); - return; - } - if (res.statusCode !== 200) { - reject(new Error(`HTTP ${res.statusCode}`)); - return; - } - const ct = res.headers["content-type"] || ""; - const ext = ct.includes("png") ? ".png" : ct.includes("webp") ? ".webp" : ".jpg"; - const finalDest = dest + ext; - const ws = fs.createWriteStream(finalDest); - res.pipe(ws); - ws.on("finish", () => { - ws.close(); - resolve("/images/bookmarks/" + path.basename(finalDest)); - }); - ws.on("error", reject); - }) - .on("error", reject); - }); -} - -async function fetchPosterFromOMDB(title, year) { - const query = encodeURIComponent(title); - const url = `https://www.omdbapi.com/?t=${query}&y=${year}&apikey=trilogy`; - try { - const res = await httpGet(url); - let body = ""; - for await (const chunk of res) body += chunk; - const data = JSON.parse(body); - if (data.Poster && data.Poster !== "N/A") return data.Poster; - } catch {} - return null; -} - -function delay(ms) { - return new Promise((r) => setTimeout(r, ms)); -} - -async function main() { - const data = JSON.parse(fs.readFileSync(jsonPath, "utf8")); - let fetched = 0; - let skipped = 0; - let failed = 0; - - for (const item of data) { - const slug = slugify(item.title); - const existing = fs.readdirSync(imgDir).find((f) => f.startsWith(slug + ".")); - if (existing) { - item.image = "/images/bookmarks/" + existing; - skipped++; - continue; - } - - if (item.image && item.image.startsWith("/images/")) { - skipped++; - continue; - } - - let imageUrl = item.image; - if (!imageUrl || imageUrl.startsWith("http")) { - const omdbUrl = await fetchPosterFromOMDB(item.title, item.year); - if (omdbUrl) imageUrl = omdbUrl; - await delay(200); - } - - if (!imageUrl) { - console.error(` SKIP ${item.title}: no image URL found`); - failed++; - continue; - } - - try { - const localPath = await download(imageUrl, path.join(imgDir, slug)); - console.log(` OK ${item.title} -> ${localPath}`); - item.image = localPath; - fetched++; - } catch (e) { - const omdbUrl = await fetchPosterFromOMDB(item.title, item.year); - if (omdbUrl) { - try { - const localPath = await download(omdbUrl, path.join(imgDir, slug)); - console.log(` OK ${item.title} -> ${localPath} (via OMDB fallback)`); - item.image = localPath; - fetched++; - continue; - } catch {} - } - console.error(` FAIL ${item.title}: ${e.message}`); - failed++; - } - } - - fs.writeFileSync(jsonPath, JSON.stringify(data, null, 2) + "\n"); - console.log(`\nDone. Fetched: ${fetched}, Skipped: ${skipped}, Failed: ${failed}`); -} - -main(); diff --git a/src/components/Nav.astro b/src/components/Nav.astro index f533853..a72e8fd 100644 --- a/src/components/Nav.astro +++ b/src/components/Nav.astro @@ -5,7 +5,6 @@ const navLinks: { href: string; label: string; external?: boolean }[] = [ { href: "/resume", label: "Resume" }, { href: "/events", label: "Events" }, { href: "/contributions", label: "Contributions" }, - { href: "/bookmarks", label: "Bookmarks" }, { href: "/meeting", label: "Meet" }, ]; diff --git a/src/data/bookmarks.json b/src/data/bookmarks.json deleted file mode 100644 index edf475e..0000000 --- a/src/data/bookmarks.json +++ /dev/null @@ -1,390 +0,0 @@ -[ - { - "title": "The Pragmatic Programmer", - "author": "David Thomas, Andrew Hunt", - "type": "book", - "year": 2019, - "url": "https://www.goodreads.com/book/show/4099.The_Pragmatic_Programmer", - "image": "/images/bookmarks/the-pragmatic-programmer.jpg" - }, - { - "title": "Designing Data-Intensive Applications", - "author": "Martin Kleppmann", - "type": "book", - "year": 2017, - "url": "https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications", - "image": "/images/bookmarks/designing-data-intensive-applications.jpg" - }, - { - "title": "Clean Code", - "author": "Robert C. Martin", - "type": "book", - "year": 2008, - "url": "https://www.goodreads.com/book/show/3735293-clean-code", - "image": "/images/bookmarks/clean-code.jpg" - }, - { - "title": "The Shawshank Redemption", - "author": "Frank Darabont", - "type": "movie", - "year": 1994, - "url": "https://www.imdb.com/title/tt0111161/", - "image": "/images/bookmarks/the-shawshank-redemption.jpg" - }, - { - "title": "Schindler's List", - "author": "Steven Spielberg", - "type": "movie", - "year": 1993, - "url": "https://www.imdb.com/title/tt0108052/", - "image": "/images/bookmarks/schindlers-list.jpg" - }, - { - "title": "Forrest Gump", - "author": "Robert Zemeckis", - "type": "movie", - "year": 1994, - "url": "https://www.imdb.com/title/tt0109830/", - "image": "/images/bookmarks/forrest-gump.jpg" - }, - { - "title": "The Green Mile", - "author": "Frank Darabont", - "type": "movie", - "year": 1999, - "url": "https://www.imdb.com/title/tt0120689/", - "image": "/images/bookmarks/the-green-mile.jpg" - }, - { - "title": "Interstellar", - "author": "Christopher Nolan", - "type": "movie", - "year": 2014, - "url": "https://www.imdb.com/title/tt0816692/", - "image": "/images/bookmarks/interstellar.jpg" - }, - { - "title": "Oppenheimer", - "author": "Christopher Nolan", - "type": "movie", - "year": 2023, - "url": "https://www.imdb.com/title/tt15398776/", - "image": "/images/bookmarks/oppenheimer.jpg" - }, - { - "title": "The Social Network", - "author": "David Fincher", - "type": "movie", - "year": 2010, - "url": "https://www.imdb.com/title/tt1285016/", - "image": "/images/bookmarks/the-social-network.jpg" - }, - { - "title": "A Beautiful Mind", - "author": "Ron Howard", - "type": "movie", - "year": 2001, - "url": "https://www.imdb.com/title/tt0268978/", - "image": "/images/bookmarks/a-beautiful-mind.jpg" - }, - { - "title": "The Truman Show", - "author": "Peter Weir", - "type": "movie", - "year": 1998, - "url": "https://www.imdb.com/title/tt0120382/", - "image": "/images/bookmarks/the-truman-show.jpg" - }, - { - "title": "The Grand Budapest Hotel", - "author": "Wes Anderson", - "type": "movie", - "year": 2014, - "url": "https://www.imdb.com/title/tt2278388/", - "image": "/images/bookmarks/the-grand-budapest-hotel.jpg" - }, - { - "title": "Joker", - "author": "Todd Phillips", - "type": "movie", - "year": 2019, - "url": "https://www.imdb.com/title/tt7286456/", - "image": "/images/bookmarks/joker.jpg" - }, - { - "title": "WALL-E", - "author": "Andrew Stanton", - "type": "movie", - "year": 2008, - "url": "https://www.imdb.com/title/tt0910970/", - "image": "/images/bookmarks/wall-e.jpg" - }, - { - "title": "The Aviator", - "author": "Martin Scorsese", - "type": "movie", - "year": 2004, - "url": "https://www.imdb.com/title/tt0338751/", - "image": "/images/bookmarks/the-aviator.jpg" - }, - { - "title": "Erin Brockovich", - "author": "Steven Soderbergh", - "type": "movie", - "year": 2000, - "url": "https://www.imdb.com/title/tt0195685/", - "image": "/images/bookmarks/erin-brockovich.jpg" - }, - { - "title": "Green Book", - "author": "Peter Farrelly", - "type": "movie", - "year": 2018, - "url": "https://www.imdb.com/title/tt6966692/", - "image": "/images/bookmarks/green-book.jpg" - }, - { - "title": "Hachi: A Dog's Tale", - "author": "Lasse Hallström", - "type": "movie", - "year": 2009, - "url": "https://www.imdb.com/title/tt1028532/", - "image": "/images/bookmarks/hachi-a-dog-s-tale.jpg" - }, - { - "title": "Léon: The Professional", - "author": "Luc Besson", - "type": "movie", - "year": 1994, - "url": "https://www.imdb.com/title/tt0110413/", - "image": "/images/bookmarks/l-on-the-professional.jpg" - }, - { - "title": "The Terminator", - "author": "James Cameron", - "type": "movie", - "year": 1984, - "url": "https://www.imdb.com/title/tt0088247/", - "image": "/images/bookmarks/the-terminator.jpg" - }, - { - "title": "X-Men: First Class", - "author": "Matthew Vaughn", - "type": "movie", - "year": 2011, - "url": "https://www.imdb.com/title/tt1270798/", - "image": "/images/bookmarks/x-men-first-class.jpg" - }, - { - "title": "Now You See Me", - "author": "Louis Leterrier", - "type": "movie", - "year": 2013, - "url": "https://www.imdb.com/title/tt1670345/", - "image": "/images/bookmarks/now-you-see-me.jpg" - }, - { - "title": "Special 26", - "author": "Neeraj Pandey", - "type": "movie", - "year": 2013, - "url": "https://www.imdb.com/title/tt2377938/", - "image": "/images/bookmarks/special-26.jpg" - }, - { - "title": "Drishyam", - "author": "Nishikant Kamat", - "type": "movie", - "year": 2015, - "url": "https://www.imdb.com/title/tt4430212/", - "image": "/images/bookmarks/drishyam.jpg" - }, - { - "title": "Drishyam 2", - "author": "Abhishek Pathak", - "type": "movie", - "year": 2022, - "url": "https://www.imdb.com/title/tt15501640/", - "image": "/images/bookmarks/drishyam-2.jpg" - }, - { - "title": "Bumblebee", - "author": "Travis Knight", - "type": "movie", - "year": 2018, - "url": "https://www.imdb.com/title/tt4701182/", - "image": "/images/bookmarks/bumblebee.jpg" - }, - { - "title": "The Ministry of Ungentlemanly Warfare", - "author": "Guy Ritchie", - "type": "movie", - "year": 2024, - "url": "https://www.imdb.com/title/tt14128670/", - "image": "/images/bookmarks/the-ministry-of-ungentlemanly-warfare.jpg" - }, - { - "title": "The Raid", - "author": "Gareth Evans", - "type": "movie", - "year": 2011, - "url": "https://www.imdb.com/title/tt1899353/", - "image": "/images/bookmarks/the-raid.jpg" - }, - { - "title": "The Raid 2", - "author": "Gareth Evans", - "type": "movie", - "year": 2014, - "url": "https://www.imdb.com/title/tt2265171/", - "image": "/images/bookmarks/the-raid-2.jpg" - }, - { - "title": "Einstein and Eddington", - "author": "Philip Martin", - "type": "movie", - "year": 2008, - "url": "https://www.imdb.com/title/tt0995036/", - "image": "/images/bookmarks/einstein-and-eddington.jpg" - }, - { - "title": "Nuremberg", - "author": "Yves Simoneau", - "type": "movie", - "year": 2000, - "url": "https://www.imdb.com/title/tt0208629/", - "image": "/images/bookmarks/nuremberg.jpg" - }, - { - "title": "The Fast and the Furious", - "author": "Rob Cohen", - "type": "movie", - "year": 2001, - "url": "https://www.imdb.com/title/tt0232500/", - "image": "/images/bookmarks/the-fast-and-the-furious.jpg" - }, - { - "title": "Chainsaw Man the Movie: Reze Arc", - "author": "MAPPA", - "type": "anime", - "year": 2025, - "image": "/images/bookmarks/chainsaw-man-the-movie-reze-arc.jpg" - }, - { - "title": "Mr. Robot", - "author": "Sam Esmail", - "type": "show", - "year": 2015, - "url": "https://www.imdb.com/title/tt4158110/", - "image": "/images/bookmarks/mr-robot.jpg" - }, - { - "title": "Silicon Valley", - "author": "Mike Judge", - "type": "show", - "year": 2014, - "url": "https://www.imdb.com/title/tt2575988/", - "image": "/images/bookmarks/silicon-valley.jpg" - }, - { - "title": "Masters of the Air", - "author": "John Shiban, John Orloff", - "type": "show", - "year": 2024, - "url": "https://www.imdb.com/title/tt2640044/", - "image": "/images/bookmarks/masters-of-the-air.jpg" - }, - { - "title": "Blue Eye Samurai", - "author": "Amber Noizumi, Michael Green", - "type": "anime", - "year": 2023, - "url": "https://www.imdb.com/title/tt13309742/", - "image": "/images/bookmarks/blue-eye-samurai.jpg" - }, - { - "title": "My Love from the Star", - "author": "Jang Tae-yoo", - "type": "show", - "year": 2013, - "url": "https://www.imdb.com/title/tt3199438/", - "image": "/images/bookmarks/my-love-from-the-star.jpg" - }, - { - "title": "When Life Gives You Tangerines", - "author": "Im Hyun-wook", - "type": "show", - "year": 2025, - "image": "/images/bookmarks/when-life-gives-you-tangerines.jpg" - }, - { - "title": "Midnight Diner", - "author": "Joji Matsuoka", - "type": "show", - "year": 2009, - "url": "https://www.imdb.com/title/tt5765544/", - "image": "/images/bookmarks/midnight-diner.jpg" - }, - { - "title": "Panchayat", - "author": "Deepak Kumar Mishra", - "type": "show", - "year": 2020, - "url": "https://www.imdb.com/title/tt11247028/", - "image": "/images/bookmarks/panchayat.jpg" - }, - { - "title": "Attack on Titan", - "author": "Hajime Isayama", - "type": "anime", - "year": 2013, - "url": "https://www.imdb.com/title/tt2560140/", - "image": "/images/bookmarks/attack-on-titan.jpg" - }, - { - "title": "Death Note", - "author": "Tsugumi Ohba, Takeshi Obata", - "type": "anime", - "year": 2006, - "url": "https://www.imdb.com/title/tt0877057/", - "image": "/images/bookmarks/death-note.jpg" - }, - { - "title": "Demon Slayer", - "author": "Koyoharu Gotouge", - "type": "anime", - "year": 2019, - "url": "https://www.imdb.com/title/tt9335498/", - "image": "/images/bookmarks/demon-slayer.jpg" - }, - { - "title": "Solo Leveling", - "author": "Chugong", - "type": "anime", - "year": 2024, - "url": "https://www.imdb.com/title/tt21209876/", - "image": "/images/bookmarks/solo-leveling.jpg" - }, - { - "title": "Sakamoto Days", - "author": "Yuto Suzuki", - "type": "anime", - "year": 2025, - "image": "/images/bookmarks/sakamoto-days.jpg" - }, - { - "title": "One Punch Man", - "author": "ONE", - "type": "anime", - "year": 2015, - "url": "https://www.imdb.com/title/tt4508902/", - "image": "/images/bookmarks/one-punch-man.jpg" - }, - { - "title": "Orb: On the Movements of the Earth", - "author": "Uoto", - "type": "anime", - "year": 2024, - "image": "/images/bookmarks/orb-on-the-movements-of-the-earth.jpg" - } -] diff --git a/src/data/contributions.json b/src/data/contributions.json index ef595e3..313d791 100644 --- a/src/data/contributions.json +++ b/src/data/contributions.json @@ -1,4 +1,70 @@ [ + { + "project": "GNU C Library", + "projectUrl": "https://sourceware.org/glibc/", + "platform": "sourceware", + "type": "code", + "kind": "patch", + "title": "intl: Remove pre-C99 fallbacks from plural-exp.c", + "url": "https://sourceware.org/cgit/glibc/commit/?id=5ce8201bf5c38e84d0c65e51d9acdd743e69d483", + "date": "2026-05-05", + "status": "merged" + }, + { + "project": "GNU C Library", + "projectUrl": "https://sourceware.org/glibc/", + "platform": "sourceware", + "type": "code", + "kind": "patch", + "title": "intl: Remove PRI_MACROS_BROKEN from loadmsgcat.c", + "url": "https://sourceware.org/cgit/glibc/commit/?id=9985b162d86b636b8ca55ce1ff0744dc58717498", + "date": "2026-05-05", + "status": "merged" + }, + { + "project": "GNU C Library", + "projectUrl": "https://sourceware.org/glibc/", + "platform": "sourceware", + "type": "code", + "kind": "patch", + "title": "intl: Remove IN_LIBGLOCALE dead code", + "url": "https://sourceware.org/cgit/glibc/commit/?id=6f837cdeddb2b2e4e9260b659a9e69e1e4c9f79a", + "date": "2026-05-05", + "status": "merged" + }, + { + "project": "GNU C Library", + "projectUrl": "https://sourceware.org/glibc/", + "platform": "sourceware", + "type": "code", + "kind": "patch", + "title": "intl: Fix memory leak in _nl_find_domain on allocation failure", + "url": "https://sourceware.org/cgit/glibc/commit/?id=bb91c88af78e9f862728623b60fb68d3610a4b79", + "date": "2026-05-05", + "status": "merged" + }, + { + "project": "GNU C Library", + "projectUrl": "https://sourceware.org/glibc/", + "platform": "sourceware", + "type": "code", + "kind": "patch", + "title": "intl: Add tests for plural expression hardening", + "url": "https://sourceware.org/cgit/glibc/commit/?id=ba305d8268530a20eb537b9880e744c6eed233f9", + "date": "2026-05-04", + "status": "merged" + }, + { + "project": "GNU C Library", + "projectUrl": "https://sourceware.org/glibc/", + "platform": "sourceware", + "type": "code", + "kind": "patch", + "title": "intl: Import plural expression hardening from GNU gettext", + "url": "https://sourceware.org/cgit/glibc/commit/?id=e7f5359db75ac4713b8c45bd4213264c0a26bc06", + "date": "2026-05-04", + "status": "merged" + }, { "project": "Linux Kernel", "projectUrl": "https://kernel.org/", diff --git a/src/pages/bookmarks.astro b/src/pages/bookmarks.astro deleted file mode 100644 index 647ada9..0000000 --- a/src/pages/bookmarks.astro +++ /dev/null @@ -1,327 +0,0 @@ ---- -import BaseLayout from "@/layouts/BaseLayout.astro"; -import bookmarksData from "@/data/bookmarks.json"; - -interface Bookmark { - title: string; - author: string; - type: "book" | "movie" | "show" | "anime"; - year: number; - url?: string; - image?: string; - note?: string; - favorite?: boolean; -} - -const bookmarks = (bookmarksData as Bookmark[]).sort((a, b) => b.year - a.year); - -const typeLabels: Record = { - book: "Books", - movie: "Movies", - show: "Shows", - anime: "Anime", -}; - -const types = ["book", "movie", "show", "anime"] as const; - -const bookCount = bookmarks.filter((b) => b.type === "book").length; -const movieCount = bookmarks.filter((b) => b.type === "movie").length; -const showCount = bookmarks.filter((b) => b.type === "show").length; -const animeCount = bookmarks.filter((b) => b.type === "anime").length; ---- - - -
-
-

Bookmarks

-

- Books, movies, shows, and anime I think are worth your time. Starred entries are personal favorites. -

-
- -
- - - - - -
- - -
-
- - - -