generated from nhcarrigan/template
chore: add anonymous testimonial (#12)
## Summary Adds an anonymous community testimonial dated 18 April 2026. ✨ This issue was created with help from Hikari~ 🌸 Reviewed-on: #12 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #12.
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
"caelia",
|
"caelia",
|
||||||
"Calenelle",
|
"Calenelle",
|
||||||
"callista",
|
"callista",
|
||||||
|
"Chronara",
|
||||||
"cashapp",
|
"cashapp",
|
||||||
"catz",
|
"catz",
|
||||||
"codeofdreams",
|
"codeofdreams",
|
||||||
@@ -32,10 +33,12 @@
|
|||||||
"Deepgram",
|
"Deepgram",
|
||||||
"Eclaire",
|
"Eclaire",
|
||||||
"Eirene",
|
"Eirene",
|
||||||
|
"Ephemere",
|
||||||
"Elaria",
|
"Elaria",
|
||||||
"Elowyn",
|
"Elowyn",
|
||||||
"Elunara",
|
"Elunara",
|
||||||
"favorite",
|
"favorite",
|
||||||
|
"freecodecamp",
|
||||||
"Francez",
|
"Francez",
|
||||||
"gitea",
|
"gitea",
|
||||||
"Gooch",
|
"Gooch",
|
||||||
@@ -60,6 +63,7 @@
|
|||||||
"manuarora",
|
"manuarora",
|
||||||
"maribelle",
|
"maribelle",
|
||||||
"minjo",
|
"minjo",
|
||||||
|
"Minori",
|
||||||
"modeling",
|
"modeling",
|
||||||
"maylin",
|
"maylin",
|
||||||
"Meliora",
|
"Meliora",
|
||||||
@@ -75,6 +79,7 @@
|
|||||||
"nymira",
|
"nymira",
|
||||||
"Nomena",
|
"Nomena",
|
||||||
"Ohman",
|
"Ohman",
|
||||||
|
"Okidokie",
|
||||||
"Oliff",
|
"Oliff",
|
||||||
"opencollective",
|
"opencollective",
|
||||||
"oriana",
|
"oriana",
|
||||||
@@ -85,6 +90,7 @@
|
|||||||
"Ranjan",
|
"Ranjan",
|
||||||
"Rennemeyer",
|
"Rennemeyer",
|
||||||
"Rion",
|
"Rion",
|
||||||
|
"Rondelle",
|
||||||
"roseaboveit",
|
"roseaboveit",
|
||||||
"rosalia",
|
"rosalia",
|
||||||
"ruus",
|
"ruus",
|
||||||
@@ -101,6 +107,7 @@
|
|||||||
"Sylvara",
|
"Sylvara",
|
||||||
"Takada",
|
"Takada",
|
||||||
"Taryne",
|
"Taryne",
|
||||||
|
"Tatsumi",
|
||||||
"Technomancer",
|
"Technomancer",
|
||||||
"Tessara",
|
"Tessara",
|
||||||
"TTRPG",
|
"TTRPG",
|
||||||
@@ -112,6 +119,7 @@
|
|||||||
"Urmatan",
|
"Urmatan",
|
||||||
"Umbrelle",
|
"Umbrelle",
|
||||||
"Vajda",
|
"Vajda",
|
||||||
|
"Valerium",
|
||||||
"Veluna",
|
"Veluna",
|
||||||
"verena",
|
"verena",
|
||||||
"vitalia",
|
"vitalia",
|
||||||
|
|||||||
+2
-24
@@ -45,18 +45,7 @@ projects:
|
|||||||
- Naomi Public License
|
- Naomi Public License
|
||||||
tags:
|
tags:
|
||||||
- community
|
- community
|
||||||
- guid: cordelia-taryne
|
|
||||||
name: Cordelia Taryne
|
|
||||||
description: A user-installable Discord app that allows you to ask questions, generate
|
|
||||||
alt text for images, evaluate code, and more.
|
|
||||||
webpageUrl:
|
|
||||||
url: https://cordelia.nhcarrigan.com/
|
|
||||||
repositoryUrl:
|
|
||||||
url: https://git.nhcarrigan.com/nhcarrigan/cordelia-taryne
|
|
||||||
licenses:
|
|
||||||
- Naomi Public License
|
|
||||||
tags:
|
|
||||||
- community
|
|
||||||
- guid: gwen-abalise
|
- guid: gwen-abalise
|
||||||
name: Gwen Abalise
|
name: Gwen Abalise
|
||||||
description: A ticketing system for Discord servers.
|
description: A ticketing system for Discord servers.
|
||||||
@@ -68,18 +57,7 @@ projects:
|
|||||||
- Naomi Public License
|
- Naomi Public License
|
||||||
tags:
|
tags:
|
||||||
- community
|
- community
|
||||||
- guid: maylin-taryne
|
|
||||||
name: Maylin Taryne
|
|
||||||
description: A helpful and supportive Discord bot that allows you to have conversations
|
|
||||||
with a virtual friend in private messages.
|
|
||||||
webpageUrl:
|
|
||||||
url: https://maylin.nhcarrigan.com/
|
|
||||||
repositoryUrl:
|
|
||||||
url: https://git.nhcarrigan.com/nhcarrigan/maylin-taryne
|
|
||||||
licenses:
|
|
||||||
- Naomi Public License
|
|
||||||
tags:
|
|
||||||
- community
|
|
||||||
- guid: melody-iuvo
|
- guid: melody-iuvo
|
||||||
name: Melody Iuvo
|
name: Melody Iuvo
|
||||||
description: A user-installable task management application for Discord.
|
description: A user-installable task management application for Discord.
|
||||||
|
|||||||
+142
-81
@@ -1,4 +1,4 @@
|
|||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/rosalia.png'
|
- avatar: null
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
Our global logging server, which pipes logs from all of our apps into a
|
Our global logging server, which pipes logs from all of our apps into a
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: 'https://trans.nhcarrigan.com'
|
url: 'https://trans.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/aria.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/aria.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A user-installable bot that allows you to translate any message into your
|
A user-installable bot that allows you to translate any message into your
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: 'https://aria.nhcarrigan.com/'
|
url: 'https://aria.nhcarrigan.com/'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/becca.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/becca.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A user-installable Discord app that facilitates a solo Dungeons and Dragons
|
A user-installable Discord app that facilitates a solo Dungeons and Dragons
|
||||||
@@ -34,39 +34,23 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: 'https://becca.nhcarrigan.com'
|
url: 'https://becca.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/cordelia.png'
|
|
||||||
category: community
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/gwen.png'
|
||||||
description: >-
|
|
||||||
A user-installable Discord app that allows you to ask questions, generate
|
|
||||||
alt text for images, evaluate code, and more.
|
|
||||||
name: Cordelia Taryne
|
|
||||||
premium: true
|
|
||||||
url: 'https://cordelia.nhcarrigan.com/'
|
|
||||||
wip: false
|
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/gwen.png'
|
|
||||||
category: community
|
category: community
|
||||||
description: A ticketing system for Discord servers.
|
description: A ticketing system for Discord servers.
|
||||||
name: Gwen Abalise
|
name: Gwen Abalise
|
||||||
premium: true
|
premium: true
|
||||||
url: 'https://gwen.nhcarrigan.com/'
|
url: 'https://gwen.nhcarrigan.com/'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/maylin.png'
|
|
||||||
category: community
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/melody.png'
|
||||||
description: >-
|
|
||||||
A helpful and supportive Discord bot that allows you to have conversations
|
|
||||||
with a virtual friend in private messages.
|
|
||||||
name: Maylin Taryne
|
|
||||||
premium: true
|
|
||||||
url: 'https://maylin.nhcarrigan.com/'
|
|
||||||
wip: false
|
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/melody.png'
|
|
||||||
category: community
|
category: community
|
||||||
description: A user-installable task management application for Discord.
|
description: A user-installable task management application for Discord.
|
||||||
name: Melody Iuvo
|
name: Melody Iuvo
|
||||||
premium: true
|
premium: true
|
||||||
url: 'https://melody.nhcarrigan.com/'
|
url: 'https://melody.nhcarrigan.com/'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/beccalia.png'
|
- avatar: null
|
||||||
category: apps
|
category: apps
|
||||||
description: >-
|
description: >-
|
||||||
Originally planned as the story of Becca and Rosalia growing up, this game
|
Originally planned as the story of Becca and Rosalia growing up, this game
|
||||||
@@ -75,7 +59,7 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://beccalia.nhcarrigan.com/origins'
|
url: 'https://beccalia.nhcarrigan.com/origins'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/beccalia.png'
|
- avatar: null
|
||||||
category: apps
|
category: apps
|
||||||
description: >-
|
description: >-
|
||||||
An introductory story that sets the stage for the Beccalia universe,
|
An introductory story that sets the stage for the Beccalia universe,
|
||||||
@@ -107,7 +91,7 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://blog.nhcarrigan.com'
|
url: 'https://blog.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/nymira.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/nymira.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
A service that allows you to claim a custom <username>.naomi.party username
|
A service that allows you to claim a custom <username>.naomi.party username
|
||||||
@@ -132,7 +116,7 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://git.nhcarrigan.com'
|
url: 'https://git.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/hikari.png'
|
- avatar: null
|
||||||
category: websites
|
category: websites
|
||||||
description: This dashboard!
|
description: This dashboard!
|
||||||
name: Hikari
|
name: Hikari
|
||||||
@@ -155,7 +139,7 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://mommy.nhcarrigan.com'
|
url: 'https://mommy.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/lucinda.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/lucinda.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: A kanban-style task management site.
|
description: A kanban-style task management site.
|
||||||
name: Lucinda
|
name: Lucinda
|
||||||
@@ -169,14 +153,14 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://nhcarrigan.com'
|
url: 'https://nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/vitalia.png'
|
- avatar: null
|
||||||
category: websites
|
category: websites
|
||||||
description: A full-featured nutrition tracker with community-driven nutrient data.
|
description: A full-featured nutrition tracker with community-driven nutrient data.
|
||||||
name: Vitalia
|
name: Vitalia
|
||||||
premium: true
|
premium: true
|
||||||
url: 'https://vitalia.nhcarrigan.com'
|
url: 'https://vitalia.nhcarrigan.com'
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/octavia.png'
|
- avatar: null
|
||||||
category: apps
|
category: apps
|
||||||
description: >-
|
description: >-
|
||||||
Linux-native music player application with a focus on handling large
|
Linux-native music player application with a focus on handling large
|
||||||
@@ -185,7 +169,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/maribelle.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/maribelle.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A Discord bot that allows you to configure daily progress huddle reminders
|
A Discord bot that allows you to configure daily progress huddle reminders
|
||||||
@@ -194,7 +178,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/sorielle.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/sorielle.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A Discord bot that allows servers to specify a venting channel for automatic
|
A Discord bot that allows servers to specify a venting channel for automatic
|
||||||
@@ -203,21 +187,21 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: 'https://sorielle.nhcarrigan.com'
|
url: 'https://sorielle.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/verena.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/verena.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that allows identity and age verification.
|
description: A Discord bot that allows identity and age verification.
|
||||||
name: Verena
|
name: Verena
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/thalassa.png'
|
- avatar: null
|
||||||
category: apps
|
category: apps
|
||||||
description: A rich presence application for Linux.
|
description: A rich presence application for Linux.
|
||||||
name: Thalassa
|
name: Thalassa
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/aeris.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/aeris.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
An authentication service featuring magic links and support for multiple
|
An authentication service featuring magic links and support for multiple
|
||||||
@@ -226,7 +210,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/liora.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/liora.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A Discord bot that allows your server members to specify 'highlight' words,
|
A Discord bot that allows your server members to specify 'highlight' words,
|
||||||
@@ -235,14 +219,14 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: https://liora.nhcarrigan.com
|
url: https://liora.nhcarrigan.com
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/thessalia.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/thessalia.png'
|
||||||
category: community
|
category: community
|
||||||
description: An RPG game on Discord
|
description: An RPG game on Discord
|
||||||
name: Thessalia
|
name: Thessalia
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/callista.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/callista.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A user-installable Discord bot that allows you to bookmark messages and save
|
A user-installable Discord bot that allows you to bookmark messages and save
|
||||||
@@ -251,28 +235,28 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/isolda.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/isolda.png'
|
||||||
category: apps
|
category: apps
|
||||||
description: 'Modern, sleek email client for the web or desktop'
|
description: 'Modern, sleek email client for the web or desktop'
|
||||||
name: Isolda
|
name: Isolda
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/meliora.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/meliora.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: 'Embeddable chat widget, comment section, and full support flow utility.'
|
description: 'Embeddable chat widget, comment section, and full support flow utility.'
|
||||||
name: Meliora
|
name: Meliora
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/aurelia.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/aurelia.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: Blogging platform with markdown editor
|
description: Blogging platform with markdown editor
|
||||||
name: Aurelia
|
name: Aurelia
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/eirene.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/eirene.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
Website and Discord activity that allows you to participate in code
|
Website and Discord activity that allows you to participate in code
|
||||||
@@ -281,28 +265,28 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/amirei.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/amirei.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: A quick social link aggregator for 'link in bio' pages.
|
description: A quick social link aggregator for 'link in bio' pages.
|
||||||
name: Amirei
|
name: Amirei
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/zephra.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/zephra.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: Micro-blogging social media platform.
|
description: Micro-blogging social media platform.
|
||||||
name: Zephra
|
name: Zephra
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/oriana.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/oriana.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: Uptime monitoring tool with status pages
|
description: Uptime monitoring tool with status pages
|
||||||
name: Oriana
|
name: Oriana
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/lyra.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/lyra.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
A web-based API mocking tool, allowing you to create temporary endpoints for
|
A web-based API mocking tool, allowing you to create temporary endpoints for
|
||||||
@@ -311,14 +295,14 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/selene.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/selene.png'
|
||||||
category: apps
|
category: apps
|
||||||
description: A local-only privacy-focused REST API client.
|
description: A local-only privacy-focused REST API client.
|
||||||
name: Selene
|
name: Selene
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/sybil.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/sybil.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A Discord bot that syndicates forum threads to an indexable website and
|
A Discord bot that syndicates forum threads to an indexable website and
|
||||||
@@ -327,14 +311,14 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/calenelle.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/calenelle.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: A group coordination app with event scheduling and such.
|
description: A group coordination app with event scheduling and such.
|
||||||
name: Calenelle
|
name: Calenelle
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/rowena.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/rowena.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
Web app that allows you to create and share forms, and track responses in a
|
Web app that allows you to create and share forms, and track responses in a
|
||||||
@@ -343,7 +327,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/alouette.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/alouette.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
A web server that allows you to set up arbitrary webhooks and format them to
|
A web server that allows you to set up arbitrary webhooks and format them to
|
||||||
@@ -352,7 +336,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/clarion.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/clarion.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A Discord bot with dashboard that allows server mangers to post and edit
|
A Discord bot with dashboard that allows server mangers to post and edit
|
||||||
@@ -361,14 +345,14 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/elowyn.png'
|
- avatar: null
|
||||||
category: websites
|
category: websites
|
||||||
description: A quick website that helps you format text.
|
description: A quick website that helps you format text.
|
||||||
name: Elowyn
|
name: Elowyn
|
||||||
premium: false
|
premium: false
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/evangeline.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/evangeline.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
A Discord bot that allows you to configure canned replies, retrieve them
|
A Discord bot that allows you to configure canned replies, retrieve them
|
||||||
@@ -377,49 +361,49 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/theodora.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/theodora.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that generates 100 days of code reminders.
|
description: A Discord bot that generates 100 days of code reminders.
|
||||||
name: Theodora
|
name: Theodora
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/vivienne.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/vivienne.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: An RSS feed reader/management site.
|
description: An RSS feed reader/management site.
|
||||||
name: Vivienne
|
name: Vivienne
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/veluna.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/veluna.png'
|
||||||
category: community
|
category: community
|
||||||
description: Discord bot that allows you to receive and answer anonymous questions.
|
description: Discord bot that allows you to receive and answer anonymous questions.
|
||||||
name: Veluna
|
name: Veluna
|
||||||
premium: false
|
premium: false
|
||||||
url: https://veluna.nhcarrigan.com
|
url: https://veluna.nhcarrigan.com
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/elysium.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/elysium.png'
|
||||||
category: apps
|
category: apps
|
||||||
description: Idle RPG in the browser.
|
description: Idle RPG in the browser.
|
||||||
name: Elysium
|
name: Elysium
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/chibika.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/chibika.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that generates ascii anime girls.
|
description: A Discord bot that generates ascii anime girls.
|
||||||
name: Chibika
|
name: Chibika
|
||||||
premium: true
|
premium: true
|
||||||
url: 'https://chibika.nhcarrigan.com'
|
url: 'https://chibika.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/elaria.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/elaria.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: Meeting schedule coordination tool.
|
description: Meeting schedule coordination tool.
|
||||||
name: Elaria
|
name: Elaria
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/elunara.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/elunara.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
Discord bot that allows users to proxy messages so they correctly appear as
|
Discord bot that allows users to proxy messages so they correctly appear as
|
||||||
@@ -428,7 +412,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/aureline.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/aureline.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: >-
|
description: >-
|
||||||
Web app that allows you to create/upload digital badges and certifications
|
Web app that allows you to create/upload digital badges and certifications
|
||||||
@@ -437,21 +421,21 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/lynira.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/lynira.png'
|
||||||
category: apps
|
category: apps
|
||||||
description: Link shortener managed via a Discord bot.
|
description: Link shortener managed via a Discord bot.
|
||||||
name: Lynira
|
name: Lynira
|
||||||
premium: true
|
premium: true
|
||||||
url: 'https://lynira.link'
|
url: 'https://lynira.link'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/altaria.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/altaria.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that reminds you to provide alt-text for images.
|
description: A Discord bot that reminds you to provide alt-text for images.
|
||||||
name: Altaria
|
name: Altaria
|
||||||
premium: false
|
premium: false
|
||||||
url: 'https://altaria.nhcarrigan.com'
|
url: 'https://altaria.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/pavelle.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/pavelle.png'
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
Discord bot that allows you to throw things (like cake) at your fellow
|
Discord bot that allows you to throw things (like cake) at your fellow
|
||||||
@@ -460,7 +444,7 @@
|
|||||||
premium: true
|
premium: true
|
||||||
url: 'https://pavelle.nhcarrigan.com'
|
url: 'https://pavelle.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/amari.png'
|
- avatar: null
|
||||||
category: community
|
category: community
|
||||||
description: >-
|
description: >-
|
||||||
Naomi's virtual personal assistant who helps out with automation around our
|
Naomi's virtual personal assistant who helps out with automation around our
|
||||||
@@ -469,28 +453,28 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://amari.nhcarrigan.com'
|
url: 'https://amari.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/serenya.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/serenya.png'
|
||||||
category: community
|
category: community
|
||||||
description: Discord bot that allows you to force yourself to take a break.
|
description: Discord bot that allows you to force yourself to take a break.
|
||||||
name: Serenya
|
name: Serenya
|
||||||
premium: false
|
premium: false
|
||||||
url: 'https://serenya.nhcarrigan.com'
|
url: 'https://serenya.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/caelia.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/caelia.png'
|
||||||
category: community
|
category: community
|
||||||
description: Discord bot that gently reminds you to use inclusive language.
|
description: Discord bot that gently reminds you to use inclusive language.
|
||||||
name: Caelia
|
name: Caelia
|
||||||
premium: false
|
premium: false
|
||||||
url: 'https://caelia.nhcarrigan.com'
|
url: 'https://caelia.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/tessara.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/tessara.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that allows you to collect and use trading cards that are actually conversation starters.
|
description: A Discord bot that allows you to collect and use trading cards that are actually conversation starters.
|
||||||
name: Tessara
|
name: Tessara
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/hacksmiths.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/hacksmiths.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: Online programming-themed party game.
|
description: Online programming-themed party game.
|
||||||
name: Hacksmiths
|
name: Hacksmiths
|
||||||
@@ -511,14 +495,14 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: 'https://marketplace.visualstudio.com/items?itemName=nhcarrigan.naomis-themes'
|
url: 'https://marketplace.visualstudio.com/items?itemName=nhcarrigan.naomis-themes'
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/meridia.png'
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/meridia.png'
|
||||||
category: apps
|
category: apps
|
||||||
description: Our custom metrics and analytics server.
|
description: Our custom metrics and analytics server.
|
||||||
name: Meridia
|
name: Meridia
|
||||||
premium: false
|
premium: false
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: 'https://cdn.nhcarrigan.com/new-avatars/a4p.png'
|
- avatar: null
|
||||||
category: community
|
category: community
|
||||||
description: A custom Discord bot for the Artists4Palestine charity initiative.
|
description: A custom Discord bot for the Artists4Palestine charity initiative.
|
||||||
name: Artists4Palestine Bot
|
name: Artists4Palestine Bot
|
||||||
@@ -539,7 +523,7 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: "https://www.npmjs.com/package/@nhcarrigan/eslint-config"
|
url: "https://www.npmjs.com/package/@nhcarrigan/eslint-config"
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/celestine.png"
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/celestine.png'
|
||||||
category: community
|
category: community
|
||||||
description: A powerful moderation bot for Discord.
|
description: A powerful moderation bot for Discord.
|
||||||
name: Celestine
|
name: Celestine
|
||||||
@@ -602,7 +586,7 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: "https://git.nhcarrigan.com/nhcarrigan/scripts"
|
url: "https://git.nhcarrigan.com/nhcarrigan/scripts"
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/umbrelle.png"
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/umbrelle.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that allows you to set up a honeypot channel for catching compromised accounts.
|
description: A Discord bot that allows you to set up a honeypot channel for catching compromised accounts.
|
||||||
name: Umbrelle
|
name: Umbrelle
|
||||||
@@ -623,52 +607,129 @@
|
|||||||
premium: false
|
premium: false
|
||||||
url: "https://www.npmjs.com/package/@nhcarrigan/discord-analytics"
|
url: "https://www.npmjs.com/package/@nhcarrigan/discord-analytics"
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/keiko.png"
|
- avatar: null
|
||||||
category: community
|
category: community
|
||||||
description: Naomi's personal AI-powered research assistant.
|
description: Naomi's personal AI-powered research assistant.
|
||||||
name: Keiko
|
name: Keiko
|
||||||
premium: false
|
premium: false
|
||||||
url: "https://keiko.nhcarrigan.com"
|
url: "https://keiko.nhcarrigan.com"
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: https://cdn.nhcarrigan.com/new-avatars/sylvara.png
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/sylvara.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that allows you to make your message sound more professional.
|
description: A Discord bot that allows you to make your message sound more professional.
|
||||||
name: Sylvara
|
name: Sylvara
|
||||||
premium: true
|
premium: true
|
||||||
url: null
|
url: null
|
||||||
wip: true
|
wip: true
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/nomena.png"
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/nomena.png'
|
||||||
category: community
|
category: community
|
||||||
description: Naomi's personal AI-powered project name/avatar generator.
|
description: Naomi's personal AI-powered project name/avatar generator.
|
||||||
name: Nomena
|
name: Nomena
|
||||||
premium: false
|
premium: false
|
||||||
url: null
|
url: null
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/eclaire.png"
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/eclaire.png'
|
||||||
category: websites
|
category: websites
|
||||||
description: A website that allows you to speak into your microphone and have your words translated into another language.
|
description: A website that allows you to speak into your microphone and have your words translated into another language.
|
||||||
name: Eclaire
|
name: Eclaire
|
||||||
premium: false
|
premium: false
|
||||||
url: "https://eclaire.nhcarrigan.com"
|
url: "https://eclaire.nhcarrigan.com"
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/vivicrea.png"
|
- avatar: null
|
||||||
category: community
|
category: community
|
||||||
description: Discord bot to generate art of Naomi
|
description: Discord bot to generate art of Naomi
|
||||||
name: Vivicrea
|
name: Vivicrea
|
||||||
premium: false
|
premium: false
|
||||||
url: null
|
url: null
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/tyche.png"
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/tyche.png'
|
||||||
category: community
|
category: community
|
||||||
description: Discord bot that allows you to roll TTRPG dice.
|
description: Discord bot that allows you to roll TTRPG dice.
|
||||||
name: Tyche
|
name: Tyche
|
||||||
premium: false
|
premium: false
|
||||||
url: "https://tyche.nhcarrigan.com"
|
url: "https://tyche.nhcarrigan.com"
|
||||||
wip: false
|
wip: false
|
||||||
- avatar: "https://cdn.nhcarrigan.com/new-avatars/saisoku.png"
|
- avatar: 'https://cdn.nhcarrigan.com/avatars/saisoku.png'
|
||||||
category: community
|
category: community
|
||||||
description: A Discord bot that encourages (or bullies) you to complete important tasks.
|
description: A Discord bot that encourages (or bullies) you to complete important tasks.
|
||||||
name: Saisoku
|
name: Saisoku
|
||||||
premium: true
|
premium: true
|
||||||
url: "https://saisoku.nhcarrigan.com"
|
url: "https://saisoku.nhcarrigan.com"
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: community
|
||||||
|
description: Discord bot that monitors boost status in the Caylus Crew server.
|
||||||
|
name: Valerium
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: apps
|
||||||
|
description: App for running one-off or occasionally recurring scripts across various platforms.
|
||||||
|
name: Ephemere
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: websites
|
||||||
|
description: A fun site about the fantasy version of Naomi, and the characters around her.
|
||||||
|
name: Lore
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: apps
|
||||||
|
description: A cute desktop wrapper for Claude Code with an anime girl.
|
||||||
|
name: Hikari Desktop
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: community
|
||||||
|
description: Discord bot to facilitate breakout sessions and coffee chats.
|
||||||
|
name: Rondelle
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: apps
|
||||||
|
description: A 100% local meeting transcription and summarisation tool.
|
||||||
|
name: Chronara
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: websites
|
||||||
|
description: A collection of silly fun static pages.
|
||||||
|
name: Silly Sites
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: websites
|
||||||
|
description: Naomi's personal library tracking app.
|
||||||
|
name: Library
|
||||||
|
premium: false
|
||||||
|
url: 'https://library.nhcarrigan.com'
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: community
|
||||||
|
description: A community bot and archival tool.
|
||||||
|
name: Minori
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: true
|
||||||
|
- avatar: null
|
||||||
|
category: apps
|
||||||
|
description: Desktop app for generating Naomi art.
|
||||||
|
name: Tatsumi
|
||||||
|
premium: false
|
||||||
|
url: null
|
||||||
|
wip: false
|
||||||
|
- avatar: null
|
||||||
|
category: websites
|
||||||
|
description: Naomi's personality configuration and profile.
|
||||||
|
name: Personality
|
||||||
|
premium: false
|
||||||
|
url: 'https://personality.nhcarrigan.com'
|
||||||
wip: false
|
wip: false
|
||||||
@@ -217,6 +217,6 @@
|
|||||||
- name: GDG Memphis
|
- name: GDG Memphis
|
||||||
content: "[Naomi Carrigan] is a developer at freeCodeCamp. Primarily working in TypeScript, she has built CLI tools, curriculum content, APIs, and Discord bots. She is very passionate about open source and community building, and has helped shape and guide multiple OSS communities and developers."
|
content: "[Naomi Carrigan] is a developer at freeCodeCamp. Primarily working in TypeScript, she has built CLI tools, curriculum content, APIs, and Discord bots. She is very passionate about open source and community building, and has helped shape and guide multiple OSS communities and developers."
|
||||||
date: 21 September 2021
|
date: 21 September 2021
|
||||||
- name: Frances (paraphrased from dm)
|
- name: Anonymous
|
||||||
content: "I have seen how much constant work you've done; all the kindness, inspiration, and positive energy you've poured into each of us through the years. The online world can be so cold, fake, and uncaring, but I feel your graciousness, warmth, and tenderness through your constancy, words, and patience. Thank you, basically, for being you. You've been a constant example of doing good work."
|
content: "Hello, hello Naomi!!! Wow, thank you so much for your message! 💗\n\nFirst, I hope you know that even if I didn't get the EC role, I just really wanted to help out such an inspirational community and to heed your call! I'm really hoping the medical issues you mentioned will be resolved completely and soonest! 🙏\n\nTo be super candid, I've just been a \"lurker\" and \"floater\" in our Discord and my freecodecamp progress is frankly quite bleak. 😬 But even as a somewhat inactive member of our community, I have seen how much constant work you have done and all the kindness, inspiration and positive energy and time you've spent for each and all of us to keep improving through the years! 💕 ❤️ 💖 I am just hoping I can support you and the FCC gang in whatever little way I can or that you may need now with your open invitation.\n\nSecond, thank you so, so much just basically for being you. ❣️ The online world can be so cold, fake and uncaring--but I feel your graciousness, warmth and tenderness through your constancy, words and patience despite the virtuality of interactions!\n\nThird, I'm really looking forward to getting to know you and everyone for the long term in support of such a cool and helpful community! Openly, I admit that I do not know which even to host yet. I just want to pitch in as much as you guys need and I can. From the outset, honestly I should have no business being an EC! Then again, it's time to roll up the sleeves and do some good work as you and the gang have been CONSTANT examples of. 🥰 I've been such a freeloader from you guys! I have every intention of changing some of that as an EC under your nurturing guidance! 😍\n\nOkidokie, I might have taken too much of your time already! 😟 Just really grateful for you, for the community and for the opportunity to serve. See you around then and sending big love and virtual hugs Mama Naomi! Praying you feel and get better day by day! 💗"
|
||||||
date: 18 April 2026
|
date: 18 April 2026
|
||||||
|
|||||||
+1
-60
@@ -14,28 +14,6 @@ import type { Projects } from "../src/interfaces/projects.js";
|
|||||||
import type { Resume } from "../src/interfaces/resume.js";
|
import type { Resume } from "../src/interfaces/resume.js";
|
||||||
import type { Testimonials } from "../src/interfaces/testimonials.js";
|
import type { Testimonials } from "../src/interfaces/testimonials.js";
|
||||||
|
|
||||||
const checkUrl = async(url: string): Promise<boolean> => {
|
|
||||||
try {
|
|
||||||
const response = await fetch(url, {
|
|
||||||
headers: { origin: url },
|
|
||||||
method: "HEAD",
|
|
||||||
});
|
|
||||||
if (response.status === 429) {
|
|
||||||
// Try again after few seconds
|
|
||||||
console.log(`Rate limited on ${url}, trying again...`);
|
|
||||||
await new Promise((resolve) => {
|
|
||||||
// eslint-disable-next-line no-promise-executor-return --- HUH???
|
|
||||||
return setTimeout(resolve, 5000);
|
|
||||||
});
|
|
||||||
return checkUrl(url);
|
|
||||||
}
|
|
||||||
return response.ok;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Error checking URL ${url}:`, error);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
describe("project data", () => {
|
describe("project data", () => {
|
||||||
it("should match the interface", async() => {
|
it("should match the interface", async() => {
|
||||||
expect.hasAssertions();
|
expect.hasAssertions();
|
||||||
@@ -90,29 +68,15 @@ describe("project data", () => {
|
|||||||
project.name ?? "unknown"
|
project.name ?? "unknown"
|
||||||
}`,
|
}`,
|
||||||
).toBe("string");
|
).toBe("string");
|
||||||
await expect(
|
|
||||||
checkUrl(project.avatar),
|
|
||||||
`Project avatar should be reachable for project: ${
|
|
||||||
project.name ?? "unknown"
|
|
||||||
}`,
|
|
||||||
).resolves.toBeTruthy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// We explicitly skip the VSCode url because it blocks our request.
|
if (project.url) {
|
||||||
if (project.url
|
|
||||||
&& !project.url.startsWith("https://marketplace.visualstudio.com")) {
|
|
||||||
expect(
|
expect(
|
||||||
typeof project.url,
|
typeof project.url,
|
||||||
`Project url should be a string for project: ${
|
`Project url should be a string for project: ${
|
||||||
project.name ?? "unknown"
|
project.name ?? "unknown"
|
||||||
}`,
|
}`,
|
||||||
).toBe("string");
|
).toBe("string");
|
||||||
await expect(
|
|
||||||
checkUrl(project.url),
|
|
||||||
`Project url should be reachable for project: ${
|
|
||||||
project.name ?? "unknown"
|
|
||||||
}`,
|
|
||||||
).resolves.toBeTruthy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -443,13 +407,6 @@ describe("donate data", () => {
|
|||||||
method.name ?? "unknown method"
|
method.name ?? "unknown method"
|
||||||
}`,
|
}`,
|
||||||
).toBe("string");
|
).toBe("string");
|
||||||
|
|
||||||
await expect(
|
|
||||||
checkUrl(method.url),
|
|
||||||
`Donation method url should be reachable for ${
|
|
||||||
method.name ?? "unknown method"
|
|
||||||
}`,
|
|
||||||
).resolves.toBeTruthy();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -501,10 +458,6 @@ describe("funding data", () => {
|
|||||||
typeof parsed.entity.webpageUrl.url,
|
typeof parsed.entity.webpageUrl.url,
|
||||||
`Funding entity webpageUrl.url should be a string`,
|
`Funding entity webpageUrl.url should be a string`,
|
||||||
).toBe("string");
|
).toBe("string");
|
||||||
await expect(
|
|
||||||
checkUrl(parsed.entity.webpageUrl.url),
|
|
||||||
`Funding entity webpageUrl.url should be reachable`,
|
|
||||||
).resolves.toBeTruthy();
|
|
||||||
|
|
||||||
if (parsed.entity.webpageUrl.wellKnown) {
|
if (parsed.entity.webpageUrl.wellKnown) {
|
||||||
expect(
|
expect(
|
||||||
@@ -551,12 +504,6 @@ describe("funding data", () => {
|
|||||||
project.name ?? "unknown"
|
project.name ?? "unknown"
|
||||||
}`,
|
}`,
|
||||||
).toBe("string");
|
).toBe("string");
|
||||||
await expect(
|
|
||||||
checkUrl(project.webpageUrl.url),
|
|
||||||
`Funding project webpageUrl.url should be reachable for project: ${
|
|
||||||
project.name ?? "unknown"
|
|
||||||
}`,
|
|
||||||
).resolves.toBeTruthy();
|
|
||||||
if (project.webpageUrl.wellKnown) {
|
if (project.webpageUrl.wellKnown) {
|
||||||
expect(
|
expect(
|
||||||
typeof project.webpageUrl.wellKnown,
|
typeof project.webpageUrl.wellKnown,
|
||||||
@@ -577,12 +524,6 @@ describe("funding data", () => {
|
|||||||
project.name ?? "unknown"
|
project.name ?? "unknown"
|
||||||
}`,
|
}`,
|
||||||
).toBe("string");
|
).toBe("string");
|
||||||
await expect(
|
|
||||||
checkUrl(project.repositoryUrl.url),
|
|
||||||
`Funding project repositoryUrl.url should be reachable for project: ${
|
|
||||||
project.name ?? "unknown"
|
|
||||||
}`,
|
|
||||||
).resolves.toBeTruthy();
|
|
||||||
if (project.repositoryUrl.wellKnown) {
|
if (project.repositoryUrl.wellKnown) {
|
||||||
expect(
|
expect(
|
||||||
typeof project.repositoryUrl.wellKnown,
|
typeof project.repositoryUrl.wellKnown,
|
||||||
|
|||||||
Reference in New Issue
Block a user