chore: add new socials (#38)

### Explanation

_No response_

### Issue

_No response_

### Attestations

- [ ] I have read and agree to the [Code of Conduct](https://docs.nhcarrigan.com/community/coc/)
- [ ] I have read and agree to the [Community Guidelines](https://docs.nhcarrigan.com/community/guide/).
- [ ] My contribution complies with the [Contributor Covenant](https://docs.nhcarrigan.com/dev/covenant/).

### Dependencies

- [ ] I have pinned the dependencies to a specific patch version.

### Style

- [ ] I have run the linter and resolved any errors.
- [ ] My pull request uses an appropriate title, matching the conventional commit standards.
- [ ] My scope of feat/fix/chore/etc. correctly matches the nature of changes in my pull request.

### Tests

- [ ] My contribution adds new code, and I have added tests to cover it.
- [ ] My contribution modifies existing code, and I have updated the tests to reflect these changes.
- [ ] All new and existing tests pass locally with my changes.
- [ ] Code coverage remains at or above the configured threshold.

### Documentation

_No response_

### Versioning

_No response_

Reviewed-on: https://codeberg.org/nhcarrigan/portfolio/pulls/38
Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com>
Co-committed-by: Naomi Carrigan <commits@nhcarrigan.com>
This commit is contained in:
Naomi Carrigan 2024-11-04 22:43:07 +00:00 committed by Naomi the Technomancer
parent cfbe6ebfea
commit 960d8dec81
5 changed files with 369 additions and 2 deletions

View File

@ -19,6 +19,7 @@ import {
faNpm,
faPatreon,
faPaypal,
faProductHunt,
faReddit,
faSignalMessenger,
faSlack,
@ -32,9 +33,9 @@ import {
faWhatsapp,
faWordpress,
faYoutube,
faSnapchat,
faXTwitter,
} from "@fortawesome/free-brands-svg-icons";
import { faSnapchat } from "@fortawesome/free-brands-svg-icons/faSnapchat";
import { faXTwitter } from "@fortawesome/free-brands-svg-icons/faXTwitter";
import {
faAtom,
faBriefcase,
@ -50,6 +51,7 @@ import { Coursera } from "../icons/Coursera";
import { Fiverr } from "../icons/Fiverr";
import { Gather } from "../icons/Gather";
import { Gog } from "../icons/Gog";
import { Gumroad } from "../icons/Gumroad";
import { Kofi } from "../icons/KoFi";
import { Matrix } from "../icons/Matrix";
import { Peerlist } from "../icons/Peerlist";
@ -59,6 +61,7 @@ import { RetroAchievements } from "../icons/RetroAchievements";
import { Saylor } from "../icons/Saylor";
import { TeeSpring } from "../icons/TeeSpring";
import { Throne } from "../icons/Throne";
import { Topmate } from "../icons/Topmate";
import { TreeNation } from "../icons/TreeNation";
import { Udemy } from "../icons/Udemy";
import { VRoid } from "../icons/VRoid";
@ -557,6 +560,30 @@ const Socials: Array<{
label: "RetroAchievements",
link: "https://retroachievements.org/user/naomilgbt",
},
{
alt: "ProductHunt Logo",
background: "#da552f",
color: "#FFFFFF",
icon: faProductHunt,
label: "ProductHunt",
link: "https://www.producthunt.com/@naomi_lgbt",
},
{
alt: "Topmate Logo",
background: "#e44332",
color: "#FFFFFF",
icon: Topmate,
label: "Topmate",
link: "https://topmate.io/nhcarrigan",
},
{
alt: "Gumroad Logo",
background: "#fe90e7",
color: "#000000",
icon: Gumroad,
label: "Gumroad",
link: "https://nhcarrigan.gumroad.com",
},
];
export { HireMe, Donate, Socials };

212
src/icons/Gumroad.ts Normal file
View File

@ -0,0 +1,212 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Gumroad logo.
*/
export const Gumroad: IconDefinition = {
icon: [
806,
807,
[],
"U+E002",
`M 364.00,13.21
C 364.00,13.21 407.00,13.21 407.00,13.21
407.00,13.21 430.00,14.84 430.00,14.84
470.27,19.14 502.77,27.65 540.00,43.72
576.05,59.28 613.12,82.48 642.00,109.08
675.08,139.56 703.05,173.90 723.74,214.00
738.19,241.99 750.78,274.21 757.58,305.00
784.23,425.71 753.19,550.83 669.83,643.00
639.15,676.93 601.80,705.56 561.00,726.24
516.61,748.75 475.34,760.23 426.00,765.17
426.00,765.17 402.00,767.00 402.00,767.00
402.00,767.00 376.00,767.00 376.00,767.00
376.00,767.00 366.00,766.09 366.00,766.09
330.81,763.68 296.20,757.84 263.00,745.42
204.49,723.54 155.94,692.99 113.09,647.00
65.89,596.34 30.94,528.28 18.61,460.00
15.57,443.12 13.03,422.08 13.00,405.00
13.00,405.00 12.02,391.00 12.02,391.00
12.02,391.00 13.00,367.00 13.00,367.00
13.00,367.00 14.84,347.00 14.84,347.00
18.92,308.86 29.28,269.90 45.31,235.00
88.37,141.20 166.12,67.87 264.00,33.86
287.93,25.55 309.94,20.14 335.00,16.43
335.00,16.43 364.00,13.21 364.00,13.21 Z
M 487.00,15.00
C 487.00,15.00 488.00,15.00 488.00,15.00
488.00,15.00 487.00,16.00 487.00,16.00
487.00,16.00 487.00,15.00 487.00,15.00 Z
M 279.00,16.00
C 279.00,16.00 280.00,16.00 280.00,16.00
280.00,16.00 279.00,17.00 279.00,17.00
279.00,17.00 279.00,16.00 279.00,16.00 Z
M 515.00,21.00
C 515.00,21.00 516.00,21.00 516.00,21.00
516.00,21.00 515.00,22.00 515.00,22.00
515.00,22.00 515.00,21.00 515.00,21.00 Z
M 259.00,25.00
C 259.00,25.00 260.00,25.00 260.00,25.00
260.00,25.00 259.00,26.00 259.00,26.00
259.00,26.00 259.00,25.00 259.00,25.00 Z
M 193.00,53.00
C 193.00,53.00 194.00,53.00 194.00,53.00
194.00,53.00 193.00,54.00 193.00,54.00
193.00,54.00 193.00,53.00 193.00,53.00 Z
M 642.00,93.00
C 642.00,93.00 643.00,93.00 643.00,93.00
643.00,93.00 642.00,94.00 642.00,94.00
642.00,94.00 642.00,93.00 642.00,93.00 Z
M 682.00,133.00
C 682.00,133.00 683.00,133.00 683.00,133.00
683.00,133.00 682.00,134.00 682.00,134.00
682.00,134.00 682.00,133.00 682.00,133.00 Z
M 591.00,314.00
C 591.00,314.00 589.71,302.00 589.71,302.00
588.99,296.11 587.42,289.73 585.85,284.00
578.82,258.31 565.04,234.46 546.91,215.00
519.65,185.73 479.11,167.16 440.00,160.59
430.57,159.00 419.52,157.05 410.00,157.00
410.00,157.00 389.00,156.00 389.00,156.00
389.00,156.00 374.00,157.00 374.00,157.00
328.27,157.53 280.79,174.27 245.00,202.67
204.83,234.54 180.07,285.67 173.29,336.00
170.87,353.96 170.79,371.90 171.00,390.00
171.10,397.99 173.12,413.92 174.58,422.00
182.77,467.44 200.62,508.93 235.00,540.91
259.89,564.06 294.39,579.29 328.00,583.71
341.20,585.45 354.70,585.15 368.00,585.00
395.65,584.67 429.52,572.90 451.00,555.54
475.68,535.59 490.57,509.76 500.49,480.00
500.49,480.00 505.79,460.00 505.79,460.00
505.79,460.00 508.00,449.00 508.00,449.00
508.00,449.00 508.00,576.00 508.00,576.00
508.00,576.00 603.00,576.00 603.00,576.00
603.00,576.00 603.00,366.00 603.00,366.00
603.00,366.00 387.00,366.00 387.00,366.00
387.00,374.75 386.09,401.28 388.00,408.00
388.00,408.00 423.00,407.00 423.00,407.00
423.00,407.00 490.00,407.00 490.00,407.00
481.72,435.57 476.08,457.30 454.58,479.83
425.65,510.14 379.12,514.70 342.00,497.69
325.65,490.20 311.69,478.08 300.67,464.00
282.46,440.74 273.94,411.05 271.91,382.00
271.91,382.00 271.00,370.00 271.00,370.00
271.00,370.00 274.46,338.00 274.46,338.00
282.81,293.71 310.68,253.08 355.00,239.03
401.17,224.39 455.83,241.98 476.27,288.00
479.83,296.01 482.60,305.22 483.00,314.00
483.00,314.00 591.00,314.00 591.00,314.00 Z
M 51.00,201.00
C 51.00,201.00 52.00,201.00 52.00,201.00
52.00,201.00 51.00,202.00 51.00,202.00
51.00,202.00 51.00,201.00 51.00,201.00 Z
M 42.00,213.00
C 42.00,213.00 43.00,213.00 43.00,213.00
43.00,213.00 42.00,214.00 42.00,214.00
42.00,214.00 42.00,213.00 42.00,213.00 Z
M 39.00,219.00
C 39.00,219.00 40.00,219.00 40.00,219.00
40.00,219.00 39.00,220.00 39.00,220.00
39.00,220.00 39.00,219.00 39.00,219.00 Z
M 36.00,225.00
C 36.00,225.00 37.00,225.00 37.00,225.00
37.00,225.00 36.00,226.00 36.00,226.00
36.00,226.00 36.00,225.00 36.00,225.00 Z
M 756.00,229.00
C 756.00,229.00 757.00,229.00 757.00,229.00
757.00,229.00 756.00,230.00 756.00,230.00
756.00,230.00 756.00,229.00 756.00,229.00 Z
M 771.00,259.00
C 771.00,259.00 772.00,259.00 772.00,259.00
772.00,259.00 771.00,260.00 771.00,260.00
771.00,260.00 771.00,259.00 771.00,259.00 Z
M 17.00,283.00
C 17.00,283.00 18.00,283.00 18.00,283.00
18.00,283.00 17.00,284.00 17.00,284.00
17.00,284.00 17.00,283.00 17.00,283.00 Z
M 783.00,289.00
C 783.00,289.00 784.00,289.00 784.00,289.00
784.00,289.00 783.00,290.00 783.00,290.00
783.00,290.00 783.00,289.00 783.00,289.00 Z
M 2.00,346.00
C 2.00,346.00 3.00,346.00 3.00,346.00
3.00,346.00 2.00,347.00 2.00,347.00
2.00,347.00 2.00,346.00 2.00,346.00 Z
M 5.00,454.00
C 5.00,454.00 6.00,454.00 6.00,454.00
6.00,454.00 5.00,455.00 5.00,455.00
5.00,455.00 5.00,454.00 5.00,454.00 Z
M 24.00,517.00
C 24.00,517.00 25.00,517.00 25.00,517.00
25.00,517.00 24.00,518.00 24.00,518.00
24.00,518.00 24.00,517.00 24.00,517.00 Z
M 689.00,539.00
C 689.97,545.46 701.63,554.40 707.00,558.00
704.77,551.47 694.61,543.33 689.00,539.00 Z
M 33.00,547.00
C 33.00,547.00 34.00,547.00 34.00,547.00
34.00,547.00 33.00,548.00 33.00,548.00
33.00,548.00 33.00,547.00 33.00,547.00 Z
M 48.00,577.00
C 48.00,577.00 49.00,577.00 49.00,577.00
49.00,577.00 48.00,578.00 48.00,578.00
48.00,578.00 48.00,577.00 48.00,577.00 Z
M 749.00,618.00
C 749.00,618.00 750.00,618.00 750.00,618.00
750.00,618.00 749.00,619.00 749.00,619.00
749.00,619.00 749.00,618.00 749.00,618.00 Z
M 79.00,625.00
C 79.00,625.00 80.00,625.00 80.00,625.00
80.00,625.00 79.00,626.00 79.00,626.00
79.00,626.00 79.00,625.00 79.00,625.00 Z
M 107.00,658.00
C 107.00,658.00 108.00,658.00 108.00,658.00
108.00,658.00 107.00,659.00 107.00,659.00
107.00,659.00 107.00,658.00 107.00,658.00 Z
M 721.00,658.00
C 721.00,658.00 722.00,658.00 722.00,658.00
722.00,658.00 721.00,659.00 721.00,659.00
721.00,659.00 721.00,658.00 721.00,658.00 Z
M 113.00,664.00
C 113.00,664.00 114.00,664.00 114.00,664.00
114.00,664.00 113.00,665.00 113.00,665.00
113.00,665.00 113.00,664.00 113.00,664.00 Z
M 588.00,766.00
C 588.00,766.00 589.00,766.00 589.00,766.00
589.00,766.00 588.00,767.00 588.00,767.00
588.00,767.00 588.00,766.00 588.00,766.00 Z
M 562.00,778.00
C 562.00,778.00 563.00,778.00 563.00,778.00
563.00,778.00 562.00,779.00 562.00,779.00
562.00,779.00 562.00,778.00 562.00,778.00 Z
M 559.00,779.00
C 559.00,779.00 560.00,779.00 560.00,779.00
560.00,779.00 559.00,780.00 559.00,780.00
559.00,780.00 559.00,779.00 559.00,779.00 Z
M 276.00,781.00
C 276.00,781.00 277.00,781.00 277.00,781.00
277.00,781.00 276.00,782.00 276.00,782.00
276.00,782.00 276.00,781.00 276.00,781.00 Z
M 543.00,785.00
C 543.00,785.00 544.00,785.00 544.00,785.00
544.00,785.00 543.00,786.00 543.00,786.00
543.00,786.00 543.00,785.00 543.00,785.00 Z
M 344.00,800.00
C 344.00,800.00 345.00,800.00 345.00,800.00
345.00,800.00 344.00,801.00 344.00,801.00
344.00,801.00 344.00,800.00 344.00,800.00 Z
M 467.00,803.00
C 467.00,803.00 468.00,803.00 468.00,803.00
468.00,803.00 467.00,804.00 467.00,804.00
467.00,804.00 467.00,803.00 467.00,803.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

52
src/icons/Topmate.ts Normal file
View File

@ -0,0 +1,52 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Topmate.io logo.
*/
export const Topmate: IconDefinition = {
icon: [
502,
503,
[],
"U+E002",
`M 240.00,0.42
C 256.32,-1.56 286.52,2.28 303.00,5.60
400.40,25.19 477.58,103.88 497.00,201.00
497.00,201.00 501.17,232.00 501.17,232.00
501.17,232.00 502.00,241.00 502.00,241.00
502.35,270.85 499.89,297.30 490.98,326.00
467.36,401.97 409.93,461.62 335.00,488.31
310.99,496.86 285.45,501.71 260.00,502.00
260.00,502.00 251.00,502.66 251.00,502.66
251.00,502.66 242.00,502.00 242.00,502.00
242.00,502.00 234.00,502.00 234.00,502.00
211.79,501.74 178.65,493.13 158.00,484.80
126.34,472.03 97.19,453.16 73.01,428.99
-2.96,353.01 -20.43,237.27 25.32,141.00
55.16,78.19 112.06,31.52 178.00,11.02
194.55,5.88 209.86,3.32 227.00,1.28
227.00,1.28 240.00,0.42 240.00,0.42 Z
M 376.00,177.00
C 368.26,163.21 357.11,149.88 345.00,139.75
284.88,89.46 195.07,94.22 142.17,153.00
130.81,165.62 121.94,180.30 115.60,196.00
110.16,209.48 105.17,229.47 105.00,244.00
105.00,244.00 105.00,255.00 105.00,255.00
105.01,263.83 107.03,276.36 109.13,285.00
119.96,329.56 149.30,364.60 191.00,383.69
237.19,404.84 292.51,398.62 334.00,369.98
344.45,362.76 364.10,345.47 369.00,334.00
369.00,334.00 295.00,281.71 295.00,281.71
295.00,281.71 251.00,250.00 251.00,250.00
251.00,250.00 297.00,223.60 297.00,223.60
297.00,223.60 376.00,177.00 376.00,177.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -0,0 +1,38 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Gumroad } from "../../src/icons/Gumroad";
describe("gumroad icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Gumroad.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Gumroad.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Gumroad.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Gumroad.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Gumroad.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -0,0 +1,38 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Topmate } from "../../src/icons/Topmate";
describe("topmate icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Topmate.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Topmate.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Topmate.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Topmate.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Topmate.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});