From 954b572e2f28d38c578cbc1b91f09cf8731f4d44 Mon Sep 17 00:00:00 2001 From: Naomi Carrigan Date: Fri, 31 Oct 2025 19:22:17 -0700 Subject: [PATCH] chore: add missing projects --- data/projects.yml | 65 ++++++++++++++++++++++++++++++++++++++++++- test/projects.spec.ts | 40 ++++++++++++++++++-------- 2 files changed, 92 insertions(+), 13 deletions(-) diff --git a/data/projects.yml b/data/projects.yml index d68f05f..c4b7f2f 100644 --- a/data/projects.yml +++ b/data/projects.yml @@ -587,4 +587,67 @@ name: "Naomi's Adventure I: An Isekai Story" premium: true url: null - wip: true \ No newline at end of file + wip: true +- avatar: null + category: apps + description: A local script for capturing and transcribing meeting notes. + name: Meeting Minutes + premium: false + url: "https://git.nhcarrigan.com/nhcarrigan/meeting-minutes" + wip: false +- avatar: null + category: apps + description: A collection of various scripts we have found useful. + name: Scripts + premium: false + url: "https://git.nhcarrigan.com/nhcarrigan/scripts" + wip: false +- avatar: "https://cdn.nhcarrigan.com/new-avatars/umbrelle.png" + category: community + description: A Discord bot that allows you to set up a honeypot channel for catching compromised accounts. + name: Umbrelle + premium: false + url: "https://umbrelle.nhcarrigan.com" + wip: false +- avatar: null + category: apps + description: A script that compiles all of freeCodeCamp's review modules into a single file. + name: freeCodeCamp Review Generator + premium: false + url: "https://cdn.nhcarrigan.com/fcc-review-pages.pdf" + wip: false +- avatar: null + category: apps + description: An NPM package that schedules a CRON to collect Discord bot analytics (number of installs/users). + name: Discord Analytics + premium: false + url: "https://www.npmjs.com/package/@nhcarrigan/discord-analytics" + wip: false +- avatar: "https://cdn.nhcarrigan.com/new-avatars/keiko.png" + category: community + description: Naomi's personal AI-powered research assistant. + name: Keiko + premium: false + url: "https://keiko.nhcarrigan.com" + wip: false +- avatar: https://cdn.nhcarrigan.com/new-avatars/sylvara.png + category: community + description: A Discord bot that allows you to make your message sound more professional. + name: Sylvara + premium: true + url: null + wip: true +- avatar: "https://cdn.nhcarrigan.com/new-avatars/nomena.png" + category: community + description: Naomi's personal AI-powered project name/avatar generator. + name: Nomena + premium: false + url: null + wip: false +- avatar: "https://cdn.nhcarrigan.com/new-avatars/eclaire.png" + category: websites + description: A website that allows you to speak into your microphone and have your words translated into another language. + name: Eclaire + premium: false + url: "https://eclaire.nhcarrigan.com" + wip: false \ No newline at end of file diff --git a/test/projects.spec.ts b/test/projects.spec.ts index 6201b9d..eb0d69a 100644 --- a/test/projects.spec.ts +++ b/test/projects.spec.ts @@ -110,25 +110,39 @@ const getRepositories = async(): Promise> => { "nhcarrigan-games", ]; for (const org of orgs) { - const response = await fetch(`https://git.nhcarrigan.com/api/v1/orgs/${org}/repos`); + const response = await fetch(`https://git.nhcarrigan.com/api/v1/orgs/${org}/repos?limit=50`); const data = await response.json(); repos.push(...data); + if (data.length === 50) { + let page = 2; + while (true) { + const responseInner = await fetch(`https://git.nhcarrigan.com/api/v1/orgs/${org}/repos?limit=50&page=${page}`); + const dataInner = await responseInner.json(); + repos.push(...dataInner); + if (dataInner.length < 50) { + break; + } + page = page + 1; + } + } } return repos; }; const repoNameMap = { - "a4p-bot": "Artists4Palestine Bot", - "beccalia-origins": "Beccalia: Origins", - "beccalia-prologue": "Beccalia: Prologue", - "blog": "Naomi's Blog", - "docs": "NHCarrigan Documentation", - "eslint-config": "ESLint Config", - "life-of-a-naomi": "Life of a Naomi", - "naomis-adventure-1": "Naomi's Adventure I: An Isekai Story", - "ruu-goblin-quest": "Ruu's Goblin Quest", - "typescript-config": "TypeScript Config", - "vscode-themes": "Naomi's VSCode Themes", + "a4p-bot": "Artists4Palestine Bot", + "beccalia-origins": "Beccalia: Origins", + "beccalia-prologue": "Beccalia: Prologue", + "blog": "Naomi's Blog", + "data": "Data API", + "docs": "NHCarrigan Documentation", + "eslint-config": "ESLint Config", + "fcc-review-generator": "freeCodeCamp Review Generator", + "life-of-a-naomi": "Life of a Naomi", + "naomis-adventure-1": "Naomi's Adventure I: An Isekai Story", + "ruu-goblin-quest": "Ruu's Goblin Quest", + "typescript-config": "TypeScript Config", + "vscode-themes": "Naomi's VSCode Themes", }; const excludedRepos = new Set([ @@ -139,6 +153,8 @@ const excludedRepos = new Set([ "nginx-configs", ".profile", ".gitea", + "womp-womp", + "sakura", ]); const convertKebabCaseToTitleCase = (string_: string): string => {