generated from nhcarrigan/template
chore: clean up a bunch of stuff that moved to static pages #3
@ -1,119 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /about page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const About = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-5xl">{`About Naomi`}</h1>
|
||||
<section>
|
||||
<p className="mb-2">
|
||||
{`Passionate technologist dedicated to building inclusive tech
|
||||
communities and empowering individuals to break into the field. With
|
||||
a rich background in community management, software engineering, and
|
||||
developer experience, I strive to create accessible pathways for
|
||||
diverse talent.`}
|
||||
</p>
|
||||
|
||||
<p className="mb-2">{`My expertise spans:`}</p>
|
||||
<ul className="w-4/5 m-auto">
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
<strong>{`Inclusive Community Building:`}</strong>
|
||||
{` Cultivated
|
||||
welcoming communities of 20,000 to 300K+ members across Discord,
|
||||
Slack, and GitHub, with a focus on supporting underrepresented
|
||||
groups in tech.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
<strong>{`Empowering Education:`}</strong>
|
||||
{` Contributed to and
|
||||
maintained open-source curricula used by millions of aspiring
|
||||
developers globally, focusing on accessibility and engaging
|
||||
learning experiences.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
<strong>{`Software Engineering for Inclusivity:`}</strong>
|
||||
{` Developed
|
||||
sophisticated bots and tools that not only streamline moderation
|
||||
and boost engagement but also promote safe, inclusive spaces for
|
||||
all community members.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
<strong>{`Developer Experience (DX):`}</strong>
|
||||
{` Led initiatives to
|
||||
improve documentation, SDK support, and overall developer
|
||||
satisfaction, with an emphasis on making resources accessible to
|
||||
newcomers in the field.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
<strong>{`Mentorship and Advocacy:`}</strong>
|
||||
{` Implemented programs to
|
||||
support aspiring developers, particularly those from
|
||||
under-represented backgrounds, in their journey into tech careers.`}
|
||||
</li>
|
||||
</ul>
|
||||
<p className="mb-2">
|
||||
{`Key achievements include redesigning freeCodeCamp's Responsive
|
||||
Web Design curriculum for greater accessibility, developing
|
||||
AI-powered community management tools that foster inclusive
|
||||
interactions, and creating engagement systems that significantly
|
||||
increased participation from diverse user groups.`}
|
||||
</p>
|
||||
|
||||
<p className="mb-2">
|
||||
{`I'm driven by the belief that technology should be a field open
|
||||
to all. My approach combines technical expertise with a deep
|
||||
commitment to diversity, equity, and inclusion, resulting in
|
||||
solutions that not only drive engagement and innovation but also
|
||||
break down barriers to entry in tech.`}
|
||||
</p>
|
||||
|
||||
<p className="mb-2">
|
||||
{`Seeking opportunities to lead transformative projects that expand
|
||||
access to tech education, foster inclusive community growth, and
|
||||
empower individuals from all backgrounds to thrive in the tech
|
||||
industry. Let's connect to discuss how I can best support your
|
||||
organisation!`}
|
||||
</p>
|
||||
|
||||
<p className="mb-2">
|
||||
{`Want to get to know Naomi better? Check out her `}
|
||||
<a
|
||||
className="underline"
|
||||
href="https://loan.nhcarrigan.com"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
{`Life of a Naomi game`}
|
||||
</a>
|
||||
{`!`}
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default About;
|
@ -1,46 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { Certification } from "../../components/cert";
|
||||
import { Rule } from "../../components/rule";
|
||||
import { Certifications } from "../../config/Certifications";
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /certs page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const Certs = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-[95%] text-center
|
||||
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-5xl">{`Certs`}</h1>
|
||||
<section>
|
||||
<p className="mb-2">
|
||||
{`This page lists the professional certifications Naomi has obtained
|
||||
throughout her time as a developer.`}
|
||||
</p>
|
||||
<Rule />
|
||||
<div className="grid sm:grid-cols-2 lg:grid-cols-3 grid-cols-1 gap-y-5">
|
||||
{Certifications.toSorted(
|
||||
(a, b) => {
|
||||
return b.date.getTime() - a.date.getTime();
|
||||
},
|
||||
).map((cert) => {
|
||||
return <Certification
|
||||
date={cert.date}
|
||||
fileName={cert.fileName}
|
||||
issuer={cert.issuer}
|
||||
key={cert.name}
|
||||
name={cert.name}
|
||||
/>;
|
||||
})}
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default Certs;
|
@ -1,222 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /manifesto page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const Manifesto = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-3xl">{`The Lion, The Witch, The Audacity of This Bitch`}</h1>
|
||||
<p className="text-2xl italic">{`Naomi's Transfemme Manifesto`}</p>
|
||||
<p>
|
||||
{`In a world of binaries and boundaries, we emerge - glorious, glistening,
|
||||
and unapologetically ourselves. We are the lionesses who refused to be
|
||||
tamed, the witches who brew potions of self-love, and the audacious
|
||||
beings who dared to rewrite the rules of gender. This is our manifesto,
|
||||
our spell-book, our battle cry.`}
|
||||
</p>
|
||||
|
||||
<h2 className="text-2xl">{`I. We Are the Lions`}</h2>
|
||||
<ol>
|
||||
<li>
|
||||
{`Our manes are diverse: short, long, neon, natural - each strand a
|
||||
testament to our journey.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We prowl through life with grace, strength, and an occasional stumble
|
||||
(because even lionesses trip sometimes, darling).`}
|
||||
</li>
|
||||
<li>
|
||||
{`Our roars echo through boardrooms, classrooms, and everywhere we have
|
||||
been told to stay silent.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We fiercely protect our pride - our chosen family, our allies, our
|
||||
community.`}
|
||||
</li>
|
||||
<li>
|
||||
{`Like lions, we bask in the sun of our authenticity, soaking up the
|
||||
warmth of self-acceptance.`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`II. We Are the Witches`}</h2>
|
||||
<ol>
|
||||
<li>
|
||||
{`Our spellbook is filled with incantations of self-affirmation and
|
||||
hexes against transphobia.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We stir cauldrons of change, mixing potions of progress and elixirs of
|
||||
equality.`}
|
||||
</li>
|
||||
<li>
|
||||
{`Our wands (be they makeup brushes, pens, or literal wands) cast spells
|
||||
of transformation.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We commune with the spirits of our trans ancestors, drawing strength
|
||||
from their legacy.`}
|
||||
</li>
|
||||
<li>
|
||||
{`In our coven, every body is sacred, every identity valid, every
|
||||
expression magical.`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`III. We Have the Audacity`}</h2>
|
||||
<ol>
|
||||
<li>
|
||||
{`We have the audacity to exist loudly in a world that wishes us to be
|
||||
quiet.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We dare to love our bodies, curves, edges, and all, defying those who
|
||||
say we should not.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We boldly claim our place in women's spaces, sports, and
|
||||
narratives.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We redefine beauty standards with every strut, sashay, and hair flip.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We have the gall to demand respect, rights, and recognition - and
|
||||
honey, we look fabulous doing it.`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`IV. Our Decrees`}</h2>
|
||||
<ol>
|
||||
<li>
|
||||
{`We decree that gender is a playground, not a prison. Swing on the
|
||||
monkey bars of masculinity, slide down the curves of femininity, or
|
||||
build sandcastles of androgyny.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We proclaim that our bodies are our own, to modify or maintain as we
|
||||
see fit. Your opinion on our transitions is like our facial hair -
|
||||
unwanted and about to be removed.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We declare our right to safe spaces, medical care, and public
|
||||
restrooms without fear or judgment.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We assert our humanity in the face of legislation that tries to erase
|
||||
us. Our existence is not up for debate.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We affirm our right to joy, love, and celebration. Our lives are not
|
||||
just about struggle - we're here to thrive, baby!`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`V. Our Commitments`}</h2>
|
||||
<ol>
|
||||
<li>
|
||||
{`We vow to lift as we climb, ensuring no trans sibling is left behind.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We pledge to celebrate the diversity within our community - every
|
||||
shade, shape, and expression of transness.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We promise to continue educating, even when it's exhausting, because
|
||||
knowledge is the enemy of ignorance.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We commit to loving ourselves fiercely, even on days when the world
|
||||
makes it hard.`}
|
||||
</li>
|
||||
<li>
|
||||
{`We dedicate ourselves to creating art, music, literature, and memes
|
||||
that tell our stories and make our voices heard.`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`VI. The Transfemme Toolbox`}</h2>
|
||||
<ol>
|
||||
<li>{`Eyeliner sharp enough to wing and to slay our enemies.`}</li>
|
||||
<li>
|
||||
{`A vocabulary expansive enough to articulate our identities and to
|
||||
eloquently tell transphobes where to go.`}
|
||||
</li>
|
||||
<li>
|
||||
{`Heels high enough to reach new heights (and flats comfortable enough
|
||||
for when the revolution requires running).`}
|
||||
</li>
|
||||
<li>
|
||||
{`A chosen name that feels like home and a dead name composted for
|
||||
future growth.`}
|
||||
</li>
|
||||
<li>
|
||||
{`A support network of fellow lions, witches, and audacious bitches to
|
||||
remind us we're not alone.`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`VII. Our Vision of the Future`}</h2>
|
||||
<p>{`In our ideal world:`}</p>
|
||||
<ol>
|
||||
<li>
|
||||
{`Gender reveal parties are replaced by "I'll reveal my gender when I'm
|
||||
good and ready" parties.`}
|
||||
</li>
|
||||
<li>
|
||||
{`The only time we're asked about our genitals is by our doctors or
|
||||
consensual partners.`}
|
||||
</li>
|
||||
<li>{`Trans joy is as commonplace as cis assumptions once were.`}</li>
|
||||
<li>
|
||||
{`Our stories are told by us, not about us, in media, literature, and
|
||||
history books.`}
|
||||
</li>
|
||||
<li>
|
||||
{`The audacity of our existence is celebrated, not merely tolerated.`}
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 className="text-2xl">{`The Tea is Served`}</h2>
|
||||
<p>
|
||||
{`So here we stand, in all our lionhearted, witchy, audacious glory. We've
|
||||
stirred the pot, we've cast our spells, we've roared our truths. The
|
||||
teacup of tradition lays shattered at our feet, and darling, the brew
|
||||
we're serving now is a potent blend of authenticity, resistance, and
|
||||
fierce, uncompromising love.`}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{`To those who support us: we see you, we appreciate you, we invite you to
|
||||
roar alongside us. To those who don't understand us: we invite you to
|
||||
listen, to learn, and to expand your world. To those who oppose us: your
|
||||
time is up, your reign is over, the future is gloriously,
|
||||
unapologetically trans.`}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{`Remember, we didn't come this far, break this many barriers, and perfect
|
||||
our contouring skills just to be anything less than the majestic,
|
||||
magical, audacious bitches we are.`}
|
||||
</p>
|
||||
|
||||
<p className="text-2xl">
|
||||
{`The lion has spoken. The witch has cast her spell. This bitch is here to
|
||||
stay.`}
|
||||
</p>
|
||||
|
||||
<p className="text-3xl">
|
||||
{`Long live the transfemme revolution! 🦁✨👑💄🏳️⚧️`}
|
||||
</p>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default Manifesto;
|
@ -1,173 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import Image from "next/image";
|
||||
import { Rule } from "../../components/rule";
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /manual page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const Manual = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-5xl">{`Naomi's User Manual`}</h1>
|
||||
<p className="text-3xl">{`Model T42-P9000`}</p>
|
||||
<section>
|
||||
<p className="mb-2">
|
||||
{`Hiya! This page is meant to give you a run-down of what working with
|
||||
me is like. It's like a li'l insight into the way I best
|
||||
interact with people and perform on a team.`}
|
||||
</p>
|
||||
<Image
|
||||
alt="If you knew I was so unstable, why'd you hire me?"
|
||||
className="m-auto"
|
||||
height={500}
|
||||
src="https://cdn.nhcarrigan.com/hire.jpeg"
|
||||
width={500}
|
||||
/>
|
||||
<Rule />
|
||||
</section>
|
||||
<section>
|
||||
<h2 className="text-3xl">{`My Values`}</h2>
|
||||
<p className="mb-2">
|
||||
{`I tend to be very firm in my values, to the degree that I shy away
|
||||
from organisations or projects which do not align with my ethics.`}
|
||||
</p>
|
||||
<ul className="w-4/5 m-auto">
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`First and foremost, do not pass judgement. I will not begrudge you
|
||||
for your religious beliefs, political alignments, or any other
|
||||
aspects of your life. And I expect the same courtesy in return.
|
||||
You do not have to accept who I am, or support my choices, but we
|
||||
need to maintain a respectful and cordial professional
|
||||
relationship. Expressing hateful, mean-spirited, or vitriolic
|
||||
comments does not foster such an environment, and my tolerance for
|
||||
such is nil.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`Second, we shall do no harm. I very strongly believe that
|
||||
technology is meant to advance our society, not regress it.
|
||||
Software should not be used to automate people's careers
|
||||
away, or replace creative works with pale imitations, or
|
||||
harass/target someone, or restrict access to information.`}
|
||||
</li>
|
||||
</ul>
|
||||
<Rule />
|
||||
</section>
|
||||
<section>
|
||||
<h2 className="text-3xl">{`Environment`}</h2>
|
||||
<p className="mb-2">
|
||||
{`I have found that I best thrive and produce the greatest works in
|
||||
specific environments.`}
|
||||
</p>
|
||||
<ul className="w-4/5 m-auto">
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`Ideas should be freely discussed, challenged, and evaluated. I am
|
||||
not a "yes girl" to blindly follow orders. If I hear a
|
||||
plan that I think misses the mark, I will absolutely voice my
|
||||
concerns. And I welcome the same scrutiny in return. Discussion
|
||||
needs to be constructive and fruitful - if we're going around
|
||||
in circles, it's time to table it and sleep on our thoughts.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`We are not our ideas, however. "This is bad and you should
|
||||
feel bad" helps no one. "I'm not sure that is the
|
||||
best approach, can we consider doing this instead?" keeps the
|
||||
conversation focused on the right things and moving forward.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`ADHD means my productivity is highly fluctuating. There are days
|
||||
where I can sit and bang out a week of work in 16 hours, and there
|
||||
are days where I stare mindlessly at the screen and then realise
|
||||
the sun has set already. Flexibility in both schedule and
|
||||
deadlines is very important to me.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`Likewise, insomnia can rear its ugly head and absolutely wreck my
|
||||
sleep schedule without any warning. Asynchronous comms are always
|
||||
preferred over meetings, but if a meeting must happen the
|
||||
afternoon hours are the best. Too early and I'll likely fail
|
||||
to wake up. Too late and I might be incoherent.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`If given something like a Trello or a Monday board, I will 100%
|
||||
make it pretty and load every single task ever on there. I'm
|
||||
a sucker for organising workloads and the easiest way for me to be
|
||||
transparent about the work I'm doing is to just let you look
|
||||
at a task board. If you say "what did you do yesterday"
|
||||
I will not remember this for I have slept since then.`}
|
||||
</li>
|
||||
</ul>
|
||||
<Rule />
|
||||
</section>
|
||||
<section>
|
||||
<h2 className="text-3xl">{`Communication`}</h2>
|
||||
<p>
|
||||
{`As with many people, there are certain approaches to communication
|
||||
that are more effective for me.`}
|
||||
</p>
|
||||
<ul className="w-4/5 m-auto">
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`Don't just say "hello" in my DMs or ping me without
|
||||
context. You'll pull me out of a workflow to wait for the
|
||||
rest of the message. Send it all at once, or save the ping for the
|
||||
last part.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`I have generalised anxiety disorder. Please for the love of all
|
||||
things, do NOT say "we need to talk" or "do you
|
||||
have time to meet". I will 100% sit there right up until the
|
||||
meeting starts stressing about getting fired and not actually
|
||||
getting any work done. If you need to call me out, just rip the
|
||||
bandage off and come out of the gate with it.`}
|
||||
</li>
|
||||
<li
|
||||
className="mb-2 relative before:content-['🩵']
|
||||
before:absolute before:left-[-1em]"
|
||||
>
|
||||
{`I dunno if you noticed the tone changed in this document about a
|
||||
million times. That's pretty much Naomi in a nutshell.
|
||||
I'll go from collected and eloquent to manic and sending
|
||||
messages faster than Discord can process. I try my hardest to stay
|
||||
professional, but ADHD makes that very hard. I'll swear
|
||||
sometimes, I'll say totally off-the-wall things. But I really
|
||||
do try!`}
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default Manual;
|
54
src/app/naomi/page.tsx
Normal file
54
src/app/naomi/page.tsx
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import Image from "next/image";
|
||||
import React, { type JSX } from "react";
|
||||
import { NaomiNavItems } from "../../config/NavItems";
|
||||
|
||||
/**
|
||||
* Renders Naomi's landing page component.
|
||||
* @returns A JSX element.
|
||||
*/
|
||||
const Naomi = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-4xl mb-2">{`Naomi Carrigan`}</h1>
|
||||
<Image
|
||||
alt="Naomi Carrigan"
|
||||
className="rounded-full m-auto"
|
||||
height={200}
|
||||
src="https://cdn.nhcarrigan.com/profile.png"
|
||||
width={200}
|
||||
/>
|
||||
<p className="text-2xl">{`Software Engineer | Community Manager | Technomancer`}</p>
|
||||
<p className="mb-4">
|
||||
{`Hiya! I'm Naomi. I'm a developer, and I build inclusive spaces on the internet!`}
|
||||
</p>
|
||||
<ul>
|
||||
{NaomiNavItems.map((item, index) => {
|
||||
return (
|
||||
<li className="mb-4" key={item.href}>
|
||||
<a
|
||||
href={item.href}
|
||||
rel={item.href.startsWith("http")
|
||||
? "noreferrer"
|
||||
: ""}
|
||||
target={item.href.startsWith("http")
|
||||
? "_blank"
|
||||
: "_self"}
|
||||
>
|
||||
{index % 2 === 1
|
||||
? "🩷"
|
||||
: "🩵"} {item.text}{" "}
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default Naomi;
|
106
src/app/page.tsx
106
src/app/page.tsx
@ -3,51 +3,10 @@
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { faUpRightFromSquare } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import Image from "next/image";
|
||||
import React, { type JSX } from "react";
|
||||
import { NavItems } from "../config/NavItems";
|
||||
|
||||
const generateRandomColor = (): string => {
|
||||
return `#${Math.floor(Math.random() * 16_777_215).
|
||||
toString(16).
|
||||
padStart(6, "0")}`;
|
||||
};
|
||||
|
||||
const getLuminance = (hexColor: string): number => {
|
||||
const r = Number.parseInt(hexColor.slice(1, 3), 16);
|
||||
const g = Number.parseInt(hexColor.slice(3, 5), 16);
|
||||
const b = Number.parseInt(hexColor.slice(5, 7), 16);
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
||||
const a: [number, number, number] = [ r, g, b ].map((v) => {
|
||||
const w = v / 255;
|
||||
return w <= 0.039_28
|
||||
? w / 12.92
|
||||
: Math.pow((w + 0.055) / 1.055, 2.4);
|
||||
}) as [number, number, number];
|
||||
|
||||
const rl = a[0] * 0.2126;
|
||||
const gl = a[1] * 0.7152;
|
||||
const bl = a[2] * 0.0722;
|
||||
return rl + gl + bl;
|
||||
};
|
||||
|
||||
const generateColorPair = (): { background: string; color: string } => {
|
||||
const backgroundColor = generateRandomColor();
|
||||
const backgroundLuminance = getLuminance(backgroundColor);
|
||||
const textColor
|
||||
= backgroundLuminance > 0.5
|
||||
? "#00000099"
|
||||
: "#FFFFFF99";
|
||||
|
||||
return {
|
||||
background: backgroundColor,
|
||||
color: textColor,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the main React component.
|
||||
* @returns A JSX element.
|
||||
@ -55,46 +14,41 @@ const generateColorPair = (): { background: string; color: string } => {
|
||||
const Home = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-4xl mb-2">{`Naomi Carrigan`}</h1>
|
||||
<h1 className="text-4xl mb-2">{`NHCarrigan`}</h1>
|
||||
<Image
|
||||
alt="Naomi Carrigan"
|
||||
alt="NHCarrigan"
|
||||
className="rounded-full m-auto"
|
||||
height={200}
|
||||
src="https://cdn.nhcarrigan.com/profile.png"
|
||||
src="https://cdn.nhcarrigan.com/logo.png"
|
||||
width={200}
|
||||
/>
|
||||
<p className="text-2xl">{`Software Engineer | Community Manager | VTuber`}</p>
|
||||
{NavItems.map((item, index) => {
|
||||
const { background, color } = generateColorPair();
|
||||
return (
|
||||
<a
|
||||
className="flex max-w-[300px] w-[95%] m-auto justify-between
|
||||
items-center border-solid border-2 rounded-3xl h-14 p-8 my-4"
|
||||
href={item.href}
|
||||
key={item.href}
|
||||
rel={item.href.startsWith("http")
|
||||
? "noreferrer"
|
||||
: ""}
|
||||
style={{
|
||||
background: background,
|
||||
borderColor: color,
|
||||
color: color,
|
||||
}}
|
||||
target={item.href.startsWith("http")
|
||||
? "_blank"
|
||||
: "_self"}
|
||||
>
|
||||
{index % 2 === 1
|
||||
? "🩷"
|
||||
: "🩵"} {item.text}{" "}
|
||||
{item.href.startsWith("http")
|
||||
? <FontAwesomeIcon
|
||||
aria-label="External link"
|
||||
icon={faUpRightFromSquare} />
|
||||
: null}
|
||||
</a>
|
||||
);
|
||||
})}
|
||||
<p className="text-2xl">{`Software Engineering and Community Management Consulting Firm`}</p>
|
||||
<p className="mb-4">
|
||||
{`Welcome to the landing page for our organisation! Use the links below to navigate.
|
||||
If you are looking for information about Naomi `}
|
||||
<a className="underline" href="/naomi">{`see her landing page`}</a>{`.`}
|
||||
</p>
|
||||
<ul>
|
||||
{NavItems.map((item, index) => {
|
||||
return (
|
||||
<li className="mb-4" key={item.href}>
|
||||
<a
|
||||
href={item.href}
|
||||
rel={item.href.startsWith("http")
|
||||
? "noreferrer"
|
||||
: ""}
|
||||
target={item.href.startsWith("http")
|
||||
? "_blank"
|
||||
: "_self"}
|
||||
>
|
||||
{index % 2 === 1
|
||||
? "🩷"
|
||||
: "🩵"} {item.text}{" "}
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
@ -1,32 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { Project } from "../../components/project";
|
||||
import { Projects } from "../../config/Projects";
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /projects page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const ProjectPage = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-5xl">{`Our Projects`}</h1>
|
||||
<p className="text-2xl">{`These are all of the projects we are currently maintaining.`}</p>
|
||||
<section>
|
||||
{Projects.toSorted((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
}).map((project) => {
|
||||
return (
|
||||
<Project key={project.name} {...project} />
|
||||
);
|
||||
})}
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default ProjectPage;
|
@ -1,48 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { Review } from "../../components/review";
|
||||
import { Rule } from "../../components/rule";
|
||||
import { Testimonials } from "../../config/Testimonials";
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /reviews page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const Reviews = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-[95%] text-center max-w-4xl
|
||||
m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-5xl">{`Client Reviews`}</h1>
|
||||
<section>
|
||||
<p className="mb-2">
|
||||
{`We think we're pretty great to work with, but don't take
|
||||
our word for it. Here's what our clients have to say.`}
|
||||
</p>
|
||||
<Rule />
|
||||
<ol className="relative border-s border-[--primary] w-4/5 m-auto">
|
||||
{Testimonials.toSorted(
|
||||
(a, b) => {
|
||||
return b.date.getTime() - a.date.getTime();
|
||||
},
|
||||
).map((review) => {
|
||||
return <Review
|
||||
content={review.content}
|
||||
date={review.date}
|
||||
key={review.date.toISOString()}
|
||||
name={review.name}
|
||||
sourceIcon={review.sourceIcon}
|
||||
sourceName={review.sourceName}
|
||||
sourceUrl={review.sourceUrl}
|
||||
/>;
|
||||
})}
|
||||
</ol>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default Reviews;
|
@ -1,104 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { faCalendar, faTasks } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { Job } from "../../components/job";
|
||||
import { Rule } from "../../components/rule";
|
||||
import { Jobs } from "../../config/Jobs";
|
||||
import { Volunteer } from "../../icons/Volunteer";
|
||||
import type { JSX } from "react";
|
||||
|
||||
/**
|
||||
* Renders the /work page.
|
||||
* @returns A React Component.
|
||||
*/
|
||||
const Work = (): JSX.Element => {
|
||||
return (
|
||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
||||
<h1 className="text-5xl">{`Our Work`}</h1>
|
||||
<p>
|
||||
{`We run a software engineering and community management firm known as
|
||||
NHCarrigan.`}
|
||||
</p>
|
||||
<Rule />
|
||||
<section>
|
||||
<h2 className="text-3xl">{`Legend`}</h2>
|
||||
<p>
|
||||
{`Our work is listed here in reverse chronological order. The symbols
|
||||
and colours have a specific meaning:`}
|
||||
</p>
|
||||
<table className="m-auto w-1/2">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{`Symbol`}</th>
|
||||
<th>{`Meaning`}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<FontAwesomeIcon className="h-14" icon={faCalendar} />
|
||||
</td>
|
||||
<td>{`Fixed-Rate Contract (hourly/salary)`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<FontAwesomeIcon className="h-14" icon={faTasks} />
|
||||
</td>
|
||||
<td>{`Project-based Contract`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<FontAwesomeIcon className="h-14" icon={Volunteer} />
|
||||
</td>
|
||||
<td>{`Pro-bono Contract`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p className="h-14 w-14 border-[--current]
|
||||
border-double border-4"></p>
|
||||
</td>
|
||||
<td className="text-[--current]">{`Current Contract`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p className="h-14 w-14 border-[--former]
|
||||
border-dashed border-2"></p>
|
||||
</td>
|
||||
<td className="text-[--former]">{`Former Contract`}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<Rule />
|
||||
</section>
|
||||
<section>
|
||||
<h2 className="text-3xl">{`Timeline`}</h2>
|
||||
<ol className="relative border-s border-[--primary] w-4/5 m-auto">
|
||||
{Jobs.toSorted((a, b) => {
|
||||
return b.start.getTime() - a.start.getTime();
|
||||
}).map(
|
||||
(job) => {
|
||||
return <Job
|
||||
company={job.company}
|
||||
description={job.description}
|
||||
end={job.end}
|
||||
key={`${job.title} - ${job.company}`}
|
||||
link={job.link}
|
||||
logo={job.logo}
|
||||
start={job.start}
|
||||
title={job.title}
|
||||
type={job.type}
|
||||
/>;
|
||||
}
|
||||
,
|
||||
)}
|
||||
</ol>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export default Work;
|
@ -1,112 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
"use client";
|
||||
import {
|
||||
faCalendar,
|
||||
faQuestionCircle,
|
||||
faTasks,
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { type JSX, useCallback, useState } from "react";
|
||||
import { Volunteer } from "../icons/Volunteer";
|
||||
|
||||
interface JobProperties {
|
||||
readonly title: string;
|
||||
readonly company: string;
|
||||
readonly start: Date;
|
||||
readonly end: Date | null;
|
||||
readonly link: string;
|
||||
readonly type: "volunteer" | "fixed" | "project" | "hypothetical";
|
||||
readonly description: string;
|
||||
readonly logo: string;
|
||||
}
|
||||
|
||||
const IconMap = {
|
||||
fixed: faCalendar,
|
||||
hypothetical: faQuestionCircle,
|
||||
project: faTasks,
|
||||
volunteer: Volunteer,
|
||||
};
|
||||
|
||||
const getColor
|
||||
= (type: JobProperties["type"], end: JobProperties["end"]): string => {
|
||||
if (type === "hypothetical") {
|
||||
return "text-[--primary]";
|
||||
}
|
||||
if (end) {
|
||||
return "text-[--former]";
|
||||
}
|
||||
return "text-[--current]";
|
||||
};
|
||||
|
||||
const getBorder
|
||||
= (type: JobProperties["type"], end: JobProperties["end"]): string => {
|
||||
if (type === "hypothetical") {
|
||||
return "border-[--primary]";
|
||||
}
|
||||
if (end) {
|
||||
return "border-[--former]";
|
||||
}
|
||||
return "border-[--current]";
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the view for a job.
|
||||
* @param properties - The job to render.
|
||||
* @returns A JSX element.
|
||||
*/
|
||||
export const Job = (properties: JobProperties): JSX.Element => {
|
||||
const { title, company, start, end, type, description } = properties;
|
||||
const [ showDescription, setShowDescription ] = useState(false);
|
||||
const toggleDescription = useCallback((): void => {
|
||||
setShowDescription(!showDescription);
|
||||
}, [ showDescription ]);
|
||||
const color = getColor(type, end);
|
||||
const border = getBorder(type, end);
|
||||
const borderStyle = end
|
||||
? "border-dashed border-2"
|
||||
: "border-double border-4";
|
||||
return (
|
||||
<li className={`mb-10 ms-6 ${color}`}>
|
||||
<span
|
||||
className={`absolute flex items-center justify-center w-6 h-6 bg-[--background] rounded-full -start-3 ${color}`}
|
||||
>
|
||||
<FontAwesomeIcon className="text-3xl" icon={IconMap[type]} />
|
||||
</span>
|
||||
<h3 className={`flex items-center mb-1 text-lg font-semibold`}>
|
||||
{`${title} for ${company}`}
|
||||
</h3>
|
||||
<time className="block mb-2 text-sm font-normal leading-none">
|
||||
{start.toLocaleDateString("en-US", {
|
||||
month: "long",
|
||||
year: "numeric",
|
||||
})}{" - "}
|
||||
{end
|
||||
? end.toLocaleDateString("en-US", {
|
||||
month: "long",
|
||||
year: "numeric",
|
||||
})
|
||||
: "Present"}
|
||||
</time>
|
||||
{showDescription
|
||||
? <div
|
||||
className="mb-4 text-base font-normal"
|
||||
// eslint-disable-next-line react/no-danger
|
||||
dangerouslySetInnerHTML={{ __html: description }}
|
||||
></div>
|
||||
: null}
|
||||
<button
|
||||
className={`inline-flex items-center px-4 py-2 text-sm font-medium ${borderStyle} ${border}`}
|
||||
onClick={toggleDescription}
|
||||
type="button"
|
||||
>
|
||||
{showDescription
|
||||
? "Hide Details"
|
||||
: "Show Details"}
|
||||
</button>
|
||||
</li>
|
||||
);
|
||||
};
|
@ -1,112 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/**
|
||||
* List of certifications to render.
|
||||
*/
|
||||
export const Certifications: Array<{
|
||||
name: string;
|
||||
fileName: string;
|
||||
issuer: string;
|
||||
date: Date;
|
||||
}> = [
|
||||
{
|
||||
date: new Date("April 17 2020"),
|
||||
fileName: "responsive-web-design.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Responsive Web Design",
|
||||
},
|
||||
{
|
||||
date: new Date("April 24, 2020"),
|
||||
fileName: "javascript.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "JavaScript Algorithms and Data Structures",
|
||||
},
|
||||
{
|
||||
date: new Date("April 28, 2020"),
|
||||
fileName: "front-end-libs.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Front End Libraries",
|
||||
},
|
||||
{
|
||||
date: new Date("May 19, 2020"),
|
||||
fileName: "infosec.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Information Security and Quality Assurance",
|
||||
},
|
||||
{
|
||||
date: new Date("May 25, 2020"),
|
||||
fileName: "legacy-full-stack.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Full Stack Developer",
|
||||
},
|
||||
{
|
||||
date: new Date("May 25, 2020"),
|
||||
fileName: "data-visualisation.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Data Visualisation",
|
||||
},
|
||||
{
|
||||
date: new Date("May 8 2020"),
|
||||
fileName: "back-end-dev.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Back End Development and APIs",
|
||||
},
|
||||
{
|
||||
date: new Date("July 3 2020"),
|
||||
fileName: "quality-assurance.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Quality Assurance",
|
||||
},
|
||||
{
|
||||
date: new Date("August 14 2020"),
|
||||
fileName: "legacy-front-end.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Legacy Front End",
|
||||
},
|
||||
{
|
||||
date: new Date("July 3, 2020"),
|
||||
fileName: "scientific-computing.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Scientific Computing with Python",
|
||||
},
|
||||
{
|
||||
date: new Date("May 9 2024"),
|
||||
fileName: "mongo-nodejs.jpg",
|
||||
issuer: "MongoDB",
|
||||
name: "Node.js Developer",
|
||||
},
|
||||
{
|
||||
date: new Date("May 9 2024"),
|
||||
fileName: "mongo-self-admin.jpg",
|
||||
issuer: "MongoDB",
|
||||
name: "Self-Managed Database Admin",
|
||||
},
|
||||
{
|
||||
date: new Date("May 9 2024"),
|
||||
fileName: "mongo-data-model.jpg",
|
||||
issuer: "MongoDB",
|
||||
name: "Data Modelling",
|
||||
},
|
||||
{
|
||||
date: new Date("May 9 2024"),
|
||||
fileName: "mongo-atlas-admin.jpg",
|
||||
issuer: "MongoDB",
|
||||
name: "Atlas Database Admin",
|
||||
},
|
||||
{
|
||||
date: new Date("May 9 2024"),
|
||||
fileName: "ecommerce-retail.jpg",
|
||||
issuer: "MongoDB",
|
||||
name: "E-Commerce Modernisation and Personalisation",
|
||||
},
|
||||
{
|
||||
date: new Date("November 12, 2024"),
|
||||
fileName: "c-sharp.png",
|
||||
issuer: "freeCodeCamp",
|
||||
name: "Foundational C# with Microsoft",
|
||||
},
|
||||
];
|
@ -1,777 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/**
|
||||
* List of professional work to render.
|
||||
*/
|
||||
export const Jobs: Array<{
|
||||
title: string;
|
||||
company: string;
|
||||
|
||||
/**
|
||||
* Set ALL dates to the 5th. These are not exact days, but intended to avoid month discrepancies
|
||||
* when dealing with timezones.
|
||||
*/
|
||||
start: Date;
|
||||
|
||||
/**
|
||||
* Set ALL dates to the 5th. These are not exact days, but intended to avoid month discrepancies
|
||||
* when dealing with timezones.
|
||||
*/
|
||||
end: Date | null;
|
||||
link: string;
|
||||
type: "volunteer" | "fixed" | "project" | "hypothetical";
|
||||
description: string;
|
||||
|
||||
/**
|
||||
* File name of logo.
|
||||
*/
|
||||
logo: string;
|
||||
}> = [
|
||||
{
|
||||
company: "Your Company!",
|
||||
description: `You could be our next client! Hit the "Contact" link and use the "Hire Us" button to get in touch!`,
|
||||
end: null,
|
||||
link: "https://topmate.io/nhcarrigan/913920",
|
||||
logo: "future.jpeg",
|
||||
start: new Date(Date.now()),
|
||||
title: "Consultant",
|
||||
type: "hypothetical",
|
||||
},
|
||||
{
|
||||
company: "nhcarrigan",
|
||||
description:
|
||||
"Began my journey learning to code, starting from the top of the freeCodeCamp curriculum.",
|
||||
end: null,
|
||||
link: "https://naomi.lgbt",
|
||||
logo: "nhcarrigan.jpeg",
|
||||
start: new Date("April 5 2020"),
|
||||
title: "Started Journey",
|
||||
type: "hypothetical",
|
||||
},
|
||||
{
|
||||
company: "Artists For Palestine",
|
||||
description: `As a Development Lead at Art 4 Palestine, I developed a bot that efficiently manages integrations between Airtable forms, Trello boards, and Discord, streamlining workflow and improving productivity. The bot also pulls news articles from reputable sources and cross-posts them into the server, keeping the community informed with reliable updates.
|
||||
|
||||
Additionally, I guided and mentored other developers in the design and coding of the website, ensuring high-quality output and consistent alignment with project goals. My contributions have been instrumental in supporting the organization's initiatives and fostering collaboration within the development team.`,
|
||||
end: null,
|
||||
link: "https://art4palestine.org",
|
||||
logo: "a4p.jpeg",
|
||||
start: new Date("November 5 2023"),
|
||||
title: "Development Lead",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "AngelRose",
|
||||
description: `As a Discord Moderator at AngelRose, I played a key role in maintaining a safe, respectful, and engaging environment for community members. I monitored conversations, enforcing community guidelines to prevent disruptive behavior and protect users. Additionally, I addressed and resolved conflicts, providing support and guidance to members to promote a positive experience. My contributions helped uphold the integrity of the community and foster an inclusive and welcoming space for all participants.`,
|
||||
end: null,
|
||||
link: "https://discord.gg/kYpjgEB",
|
||||
logo: "angel.png",
|
||||
start: new Date("September 5 2023"),
|
||||
title: "Community Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Deepgram",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a Discord Bot Developer, I spearheaded the creation and implementation of an advanced bot designed to revolutionize community management and user interactions. My primary focus involved developing a comprehensive suite of features to streamline communication, enhance user engagement, and provide valuable insights into community health.</p>
|
||||
|
||||
<p>Leveraging AI capabilities, I integrated intelligent automation to address user queries efficiently and maintain an organized community structure. Additionally, I implemented cross-platform integration features to ensure seamless information flow between Discord, GitHub, and ProductBoard, fostering a cohesive ecosystem for community management.</p>
|
||||
|
||||
<p>Through this multifaceted approach, I significantly improved community interactions, user satisfaction, and the overall efficiency of community management processes.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵']">Message Management and Organization:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed functionality to relocate messages from standard channels to forum channels</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented a scheduled messaging system to guide users towards appropriate channels</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">AI-Powered Assistance:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Integrated AI capabilities for automatic question answering in forum channels</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Designed feature for marking responses as correct answers</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Community Engagement Tools:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed daily and weekly aggregations of unanswered questions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented a reminder system for inactive questions after seven days</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created cross-posting functionality to GitHub discussion board for answered questions</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Metrics and Analytics:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed tracking system for community health indicators including unanswered, answered, and closed questions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created a dashboard for easy monitoring of community engagement</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Cross-Platform Integration:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented feature to post feedback messages to ProductBoard</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Designed system for cross-posting between Discord and GitHub</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("June 5 2024"),
|
||||
link: "https://deepgram.com",
|
||||
logo: "deepgram.jpeg",
|
||||
start: new Date("July 5 2023"),
|
||||
title: "Community Bot Engineer",
|
||||
type: "project",
|
||||
},
|
||||
{
|
||||
company: "BigBadBeaver Productions",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a Twitch Bot Developer, I spearheaded the creation and deployment of "PrivateTwigs," a custom chat bot designed to revolutionize stream management and viewer engagement. My role involved engineering sophisticated features, implementing data analysis tools, and creating user-friendly interfaces to empower streamers with valuable insights and enhanced interaction capabilities.</p>
|
||||
|
||||
<p>By developing a comprehensive logging system and custom redemption rewards, I significantly improved the streaming experience for both content creators and viewers. My work directly contributed to increased viewer engagement and provided streamers with powerful tools to manage and grow their channels effectively.</p>
|
||||
|
||||
<p>Through close collaboration with streamers and careful attention to Twitch's guidelines, I ensured that PrivateTwigs not only met but exceeded user expectations while maintaining full compliance with platform regulations.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">PrivateTwigs Bot Development:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Engineered and deployed a custom Twitch chat bot, enhancing stream management and viewer engagement</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed comprehensive logging functionality for all chat messages and stream events</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented data analysis tools to derive strategic insights from stream data</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created a user-friendly interface for streamers to access and utilize collected data</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Custom Redemption Rewards System:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Designed and implemented a custom redemption rewards system within the bot</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Enabled unique viewer interactions, increasing overall stream engagement</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed a flexible framework allowing streamers to easily create and modify rewards</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Integrated reward system with Twitch's API to ensure seamless operation</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Performance Optimization and Compliance:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Optimized bot performance to handle high-traffic streams without latency</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Ensured compliance with Twitch's terms of service and API guidelines</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Continuous Improvement and Collaboration:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated with streamers to gather feedback and iteratively improve bot features</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Regularly updated and refined bot functionality based on user needs and platform changes</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("January 5 2024"),
|
||||
link: "https://linktr.ee/bigbadbeaver",
|
||||
logo: "beaver.png",
|
||||
start: new Date("May 5 2023"),
|
||||
title: "Twitch Integration Engineer",
|
||||
type: "project",
|
||||
},
|
||||
{
|
||||
company: "Sema Software",
|
||||
description: `<div class="pl-4">
|
||||
<p>As an Open Source Community Manager, I successfully spearheaded the growth of our Discord community from 300 to 1,000 members, achieving a remarkable 233% increase. My role involved implementing strategic engagement initiatives, creating an inclusive environment, and leading multiple open source projects that significantly enhanced developer productivity and community engagement.</p>
|
||||
|
||||
<p>By developing standardized tools and resources, such as project templates and skills assessment bots, I streamlined processes and improved consistency across the organization. My work on the Developer Skills Matrix ecosystem, including the creation of dedicated bots and websites, facilitated self-assessment and skill development among community members.</p>
|
||||
|
||||
<p>Through the engineering of specialized Discord bots and the cultivation of a vibrant community atmosphere, I increased the visibility of open source opportunities and drove higher levels of member participation and retention. My efforts in cross-functional collaboration ensured that community initiatives aligned with broader business objectives, contributing to both user growth and product adoption.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Community Growth and Engagement:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Spearheaded growth of Discord community from 300 to 1,000 members, representing a 233% increase</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented strategic engagement initiatives and created an inclusive environment</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Cultivated a vibrant, engaging community atmosphere, resulting in increased member participation and retention</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Open Source Initiatives Leadership:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Led multiple open source initiatives, enhancing developer productivity and community engagement</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed and implemented a standardized base template for new projects, streamlining project initiation and improving consistency</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Engineered a Discord bot to query and showcase projects from the Open Source Welcoming Committee, increasing visibility of opportunities</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Developer Skills Matrix Ecosystem Management:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Created and maintained a Discord bot for self-assessments</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed a dedicated website for the Skills Matrix</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented a Slack bot to extend accessibility across platforms</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Strategic Alignment and Collaboration:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated cross-functionally to align community initiatives with overall business objectives</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Drove both user growth and product adoption through strategic community management</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("September 5 2022"),
|
||||
link: "https://www.semasoftware.com",
|
||||
logo: "sema.jpeg",
|
||||
start: new Date("May 5 2022"),
|
||||
title: "Community Manager and Open-Source Engineer",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "4C",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a Discord Community Growth Manager, I successfully orchestrated the exponential growth of our Discord community, expanding it from 1,100 to 3,350 members – a remarkable 205% increase. My role encompassed implementing strategic engagement initiatives, developing community events, and creating a safe, inclusive environment that fostered active participation and meaningful interactions among members.</p>
|
||||
|
||||
<p>By implementing a comprehensive onboarding process and establishing clear community guidelines, I ensured new members were effectively integrated and all participants felt welcome and secure. My data-driven approach, involving the analysis of community metrics and user feedback, allowed for continuous improvement of engagement strategies and overall member satisfaction.</p>
|
||||
|
||||
<p>Through close collaboration with cross-functional teams, I aligned community initiatives with broader business objectives, ensuring that our thriving Discord community contributed significantly to our organization's goals. My proactive conflict resolution and attentive addressing of member concerns maintained a positive community atmosphere, crucial for sustained growth and engagement.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Community Growth and Engagement:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Orchestrated exponential growth of Discord community from 1,100 to 3,350 members, representing a 205% increase</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented strategic engagement initiatives to foster an active and thriving community space</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed and executed community events, driving participation and member retention</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created and moderated discussion channels to encourage meaningful interactions</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Community Management and Moderation:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented a comprehensive onboarding process for new members, enhancing their integration into the community</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Established and enforced community guidelines, ensuring a safe and inclusive environment for all members</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Managed conflict resolution and addressed member concerns, maintaining a positive community atmosphere</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Data-Driven Strategy and Collaboration:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Analysed community metrics and user feedback to continually improve engagement strategies and member satisfaction</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated with cross-functional teams to align community initiatives with broader business objectives</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("November 5 2022"),
|
||||
link: "https://discord.com/invite/ns5x8bTz25",
|
||||
logo: "4c.png",
|
||||
start: new Date("May 5 2022"),
|
||||
title: "Community Manager",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "TweetShift",
|
||||
description: `<div class="pl-4">
|
||||
<p>As the Community Manager, I successfully managed and supported a vast user community spanning over 230,000 Discord servers, demonstrating my ability to operate effectively at scale. My role encompassed providing comprehensive support, implementing and enforcing community guidelines, and fostering high levels of engagement across this extensive user base.</p>
|
||||
|
||||
<p>By delivering high-quality support and creating robust self-service resources, I ensured optimal bot functionality and maintained high levels of user satisfaction. My proactive approach to community management, including the development and execution of strategies to prevent and mitigate issues, contributed to maintaining a safe and inclusive environment for all members.</p>
|
||||
|
||||
<p>Through organizing community events, creating informative content, and recognizing active contributors, I fostered a vibrant and engaged community. My work directly contributed to the growth, stability, and positive culture of this large-scale Discord ecosystem.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Large-Scale Community Management:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Managed and supported a vast user community spanning over 230,000 Discord servers</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Demonstrated ability to operate effectively at scale, maintaining high standards across a large user base</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Comprehensive User Support:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Provided high-quality support to users, ensuring optimal bot functionality and user satisfaction</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Responded to user inquiries and troubleshooting requests in a timely and effective manner</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created and maintained user guides and FAQs to empower self-service problem-solving</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated with the development team to relay user feedback and suggest improvements</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Community Guidelines and Moderation:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented and enforced community guidelines to maintain a safe and inclusive environment</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Moderated discussions and user-generated content across multiple channels</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Resolved conflicts and addressed user concerns promptly and professionally</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed and executed strategies to prevent and mitigate potential community issues</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Community Engagement Initiatives:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Organized and facilitated community events and discussions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created and curated content to keep users informed about updates and best practices</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Recognized and rewarded active and helpful community members</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("May 5 2023"),
|
||||
link: "https://tweetshift.com",
|
||||
logo: "tweetshift.png",
|
||||
start: new Date("January 5 2022"),
|
||||
title: "Community Manager",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "Rythm",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a Discord Community Manager specializing in bot development, I spearheaded the creation and implementation of advanced management tools for a thriving community of over 300,000 members. My primary focus involved developing a comprehensive suite of bots and systems to streamline moderation, enhance user engagement, and provide valuable insights into community health and staff performance.</p>
|
||||
|
||||
<p>Leveraging my expertise in Discord bot development, I implemented robust automoderation systems, designed engaging economy features, and created powerful analytics tools. My work significantly improved community interactions, user satisfaction, and the overall efficiency of community management processes.</p>
|
||||
|
||||
<p>Through this multifaceted approach, I fostered a more engaging, secure, and well-managed community environment, contributing to its substantial growth and user retention.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Comprehensive Moderation Bot:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented robust automoderation system with customizable rules</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed extensive moderation history tracking and individual case management</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created evidence logging system and staff-only note functionality</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Integrated FAQ response system for efficient community support</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Economy and Engagement Bot:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Designed leveling system to reward long-term activity</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented role-based rewards and currency system</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created customisable user profiles and badge earning mechanism</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed specialised reward purchasing system</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Staff Management and Analytics Tools:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Built staff incentive bot for recognising exceptional contributions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed staff analytics bot tracking performance metrics (commands used, messages sent, modmail threads closed)</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented leadership tools for volunteer moderator management</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Community Engagement Tools:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Created analytics bot for monitoring user engagement</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed music-themed trivia bot for community entertainment</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Built cross-platform social media bot for Twitter-Discord-Slack integration</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("November 5, 2024"),
|
||||
link: "https://rythm.fm",
|
||||
logo: "rythm.jpeg",
|
||||
start: new Date("April 5 2022"),
|
||||
title: "Senior Integrations Engineer",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "Streamcord",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a Community Manager, I played a pivotal role in nurturing and expanding a vibrant community of over 50,000 members. My responsibilities encompassed a wide range of areas, including community engagement, technical support, human resources management, and bot operations. I was instrumental in fostering a thriving ecosystem around the Streamcord bot, which is utilized by over 1 million communities.</p>
|
||||
|
||||
<p>My multifaceted approach involved implementing innovative engagement strategies, contributing to technical infrastructure, spearheading human resources initiatives, and ensuring seamless bot operations. Through these efforts, I significantly enhanced member retention, activity levels, and overall user satisfaction.</p>
|
||||
|
||||
<p>By bridging the gap between the user community and the development team, I facilitated continuous improvement of the Streamcord bot and associated services, directly contributing to its widespread adoption and success.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Community Management and Growth:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Managed and nurtured a thriving community of 50,000+ members</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Provided comprehensive support for the Streamcord bot, utilized by over 1 million communities</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented engagement strategies, including staff streams and game nights, to foster community interaction</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Led a complete community overhaul, significantly boosting member retention and activity</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Technical Infrastructure and Development:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Supported the development process for the Streamcord bot</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Maintained and updated documentation to ensure clarity and accessibility</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated on the development and maintenance of the dashboard site</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Human Resources Initiatives:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Conducted interviews and managed the onboarding process for new staff members</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed and delivered comprehensive training programs for team members</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented and conducted quarterly staff evaluations to ensure team performance and growth</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Bot Operations and User Support:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Addressed user queries and troubleshooting requests promptly</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated with the development team to implement user feedback and feature requests</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Monitored bot performance across millions of communities to maintain high uptime and user satisfaction</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("December 5 2024"),
|
||||
link: "https://streamcord.io",
|
||||
logo: "streamcord.jpeg",
|
||||
start: new Date("August 5 2021"),
|
||||
title: "Community Manager and Infrastructure Engineer",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "Battlesnake",
|
||||
description: `As a Community Moderator at Battlesnake, I played a vital role in ensuring a safe and welcoming environment for players. My focus was on promoting a positive experience for all members, allowing them to enjoy the game and interact with one another respectfully.
|
||||
|
||||
Additionally, I contributed to driving engagement for the Summer League 2021 and the Caster House system, fostering enthusiasm and participation in these events. My efforts helped create an inclusive and vibrant community for Battlesnake enthusiasts.`,
|
||||
end: new Date("November 5 2022"),
|
||||
link: "https://play.battlesnake.com",
|
||||
logo: "battlesnake.jpeg",
|
||||
start: new Date("June 5 2021"),
|
||||
title: "Community Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Caylus Crew",
|
||||
description: `As the Discord Administrator and Platform Engineering Manager at Caylus Crew, I developed custom bots that enhanced the community experience and streamlined operations. One such bot posted daily messages wishing happy birthday to members, fostering a sense of connection and camaraderie. I also created a bot to manage sponsor perks, ensuring efficient and accurate distribution of benefits to eligible members.
|
||||
|
||||
In addition to technical contributions, I coached and trained moderators, providing quarterly staff reviews to support their professional growth and improve performance. My work played a pivotal role in maintaining a vibrant, well-managed community and ensuring an exceptional experience for all participants.`,
|
||||
end: null,
|
||||
link: "https://discord.gg/infinite",
|
||||
logo: "caylus.png",
|
||||
start: new Date("June 5 2021"),
|
||||
title: "Discord Administrator and Platform Engineering Manager",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Xcentric Collective",
|
||||
description: `As an Integrations Engineer at Xcentric Collective, I developed a custom Discord bot that incorporated a unique Matchmaking Rating (MMR) system to calculate Rocket League proficiency. This system enabled users to track and monitor their skill levels accurately.
|
||||
|
||||
The bot also featured the ability to define teams and find matches with opponents of similar skill levels, facilitating balanced and fair gameplay. Additionally, the bot allowed users to schedule matches seamlessly, providing a streamlined and efficient experience for the community. My work enhanced the overall gaming experience and engagement within the Xcentric Collective community. As an Integrations Engineer at Xcentric Collective, I developed a custom Discord bot that incorporated a unique Matchmaking Rating (MMR) system to calculate Rocket League proficiency. This system enabled users to track and monitor their skill levels accurately. The bot also featured the ability to define teams and find matches with opponents of similar skill levels, facilitating balanced and fair gameplay. Additionally, the bot allowed users to schedule matches seamlessly, providing a streamlined and efficient experience for the community. My work enhanced the overall gaming experience and engagement within the Xcentric Collective community.`,
|
||||
end: new Date("July 5 2023"),
|
||||
link: "http://discord.gg/U3jQVYNbJt",
|
||||
logo: "xcentric.jpg",
|
||||
start: new Date("April 5 2021"),
|
||||
title: "Integrations Engineer",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "DigitalOcean",
|
||||
description: `As a Hacktoberfest Community Moderator at DigitalOcean, I supported the community by building a custom bot to ensure repository links were correctly included in promotional channel messages, streamlining interactions, and providing automated responses for frequently asked questions. This contributed to a smoother experience for participants and enhanced community engagement.
|
||||
|
||||
In addition to managing the bot, I answered queries and guided developers in their open-source contributions, helping them navigate the Hacktoberfest event and maximize their impact. By maintaining a safe and welcoming community space, I fostered an inclusive environment for developers of all skill levels to collaborate and grow. My efforts played a crucial role in the success of the event and the satisfaction of its participants.`,
|
||||
end: new Date("November 5 2024"),
|
||||
link: "https://hacktoberfest.com",
|
||||
logo: "digitalocean.jpeg",
|
||||
start: new Date("April 5 2021"),
|
||||
title: "Hacktoberfest Community Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "EddieHub",
|
||||
description: `As a Discord Administrator for EddieHub, I played a key role in moderating the community and fostering an open and inclusive environment. My focus was on upholding community guidelines and ensuring a positive experience for all members.
|
||||
|
||||
I provided support and encouragement to members on their development path, offering guidance and resources to help them grow and succeed. Additionally, I planned and managed community events and initiatives, creating opportunities for members to engage, learn, and collaborate.
|
||||
|
||||
My efforts contributed to the vibrancy and success of the EddieHub community, helping to create a welcoming space for developers to thrive.`,
|
||||
end: new Date("May 5 2023"),
|
||||
link: "https://www.eddiehub.org",
|
||||
logo: "eddiehub.jpeg",
|
||||
start: new Date("January 5 2021"),
|
||||
title: "Discord Administrator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Commit Your Code",
|
||||
description: `As the Discord Administrator and Lead Integrations Engineer at Commit Your Code, I played a key role in fostering a supportive and friendly community environment by moderating interactions and ensuring a positive space for members. I provided guidance to individuals on their development path, offering support as they prepared for their first job or encountered coding challenges.
|
||||
|
||||
To enhance community security, I built a robust verification system that significantly reduced the number of compromised accounts, safeguarding members' data and promoting a safe space for collaboration. My contributions have been instrumental in supporting members' growth and maintaining a secure, welcoming atmosphere within the community.`,
|
||||
end: null,
|
||||
link: "https://discord.gg/StwJYeq",
|
||||
logo: "cyc.jpeg",
|
||||
start: new Date("December 5 2020"),
|
||||
title: "Discord Administrator and Lead Integrations Engineer",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "freeCodeCamp",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a Community Manager at freeCodeCamp, I played a crucial role in maintaining and enhancing an open-source curriculum used by millions of developers worldwide. My responsibilities encompassed curriculum development, technical solution implementation, community management across multiple platforms, and contributing to the overall growth of the freeCodeCamp ecosystem.</p>
|
||||
|
||||
<p>By leading curriculum redesigns, developing technical solutions, and fostering vibrant online communities, I significantly improved user engagement, accessibility, and the overall learning experience for developers at all levels. My work directly contributed to the expansion and success of freeCodeCamp's mission to provide free coding education to anyone, anywhere.</p>
|
||||
|
||||
<p>Through collaborative efforts with a global team of contributors and strategic alignment with organizational goals, I helped shape freeCodeCamp's direction and impact in the world of coding education.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Curriculum Development and Enhancement:
|
||||
<ul class="pl-4 mt-2 list-none">
|
||||
<li class="mb-2 relative before:content-['🩷']">Led complete redesign of Responsive Web Design curriculum, improving accessibility and user engagement</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated with global team of contributors to ensure curriculum relevance and quality</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented user feedback to continuously improve learning materials</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Technical Solutions Development:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Built and deployed a moderation bot for Discord, significantly improving community safety and functionality</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Created an efficient tool for distributing weekly email newsletter to millions of subscribers</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Optimized community management processes across Discord, Forum, and Reddit platforms</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Community Management and Engagement:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Provided guidance and support to users on their web development journey</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented engagement strategies resulting in increased user participation and retention</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Fostered a welcoming and inclusive environment for learners of all levels</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Strategic Growth and Representation:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Collaborated with leadership to align community initiatives with organizational goals</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Analyzed user data and feedback to inform strategic decisions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Represented freeCodeCamp in external events and collaborations</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: null,
|
||||
link: "https://freecodecamp.org",
|
||||
logo: "fcc.jpeg",
|
||||
start: new Date("December 5, 2020"),
|
||||
title: "Educational Developer and Community Manager",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "Virtual Insanity",
|
||||
description: `As a Discord Moderator for Virtual Insanity, an adult-only community, I was instrumental in cultivating a secure, respectful, and interactive atmosphere for our diverse members. My responsibilities encompassed vigilant monitoring of discussions, ensuring compliance with established guidelines to deter any disruptive conduct, and safeguarding our users. Alongside conflict resolution, I provided empathetic support and guidance, fostering a harmonious environment conducive to positive interactions. Moreover, I actively assisted in verifying identification documents, reinforcing our commitment to maintaining a safe and authentic community experience. Through these efforts, I contributed to upholding the community's integrity and nurturing an inclusive space for all participants to thrive.`,
|
||||
end: null,
|
||||
link: "https://discord.com/invite/GDYNGnrGUs",
|
||||
logo: "troopy.png",
|
||||
start: new Date("May 5 2024"),
|
||||
title: "Discord Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Azuliah (VTuber)",
|
||||
description: `As a Discord Administrator and Integrations Engineer at Azuliah, I established custom integrations to streamline moderation efforts and enhance community management. These integrations supported the moderation team in maintaining a safe and welcoming space for all members.
|
||||
|
||||
In addition to technical contributions, I trained the owner and moderation team on best practices for running a successful community. My guidance included techniques for efficient moderation, conflict resolution, and fostering positive interactions among members. Through my efforts, I played a key role in ensuring the community's smooth operation and promoting a vibrant, supportive environment.`,
|
||||
end: new Date("April 5 2024"),
|
||||
link: "https://discord.com/invite/XNSy8PMvyy",
|
||||
logo: "azuliah.jpg",
|
||||
start: new Date("December 5 2023"),
|
||||
title: "Discord Administrator and Integrations Engineer",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Rion Kuroko (VTuber)",
|
||||
description: `As a Discord Moderator for Rion Kuroko, I constructed the server almost entirely from scratch to tailor it to the specific needs of the community. This involved designing and implementing structures, channels, and rules that supported a smooth and organized environment.
|
||||
|
||||
I also provided guidance to the owner on the technical aspects of Discord moderation, sharing best practices and offering solutions to effectively manage the server. My efforts played a key role in establishing a functional, user-friendly community space and empowering the owner with the knowledge needed to maintain and grow the server.`,
|
||||
end: new Date("Jan 5 2024"),
|
||||
link: "https://discord.com",
|
||||
logo: "rion.jpg",
|
||||
start: new Date("Nov 5 2023"),
|
||||
title: "Discord Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Rythm",
|
||||
description: `As a Senior Discord Moderator for Rythm, I played a dual role in overseeing community moderation and mentoring the moderation team. My responsibilities included tracking weekly staff activity to monitor performance and identify areas for improvement, ensuring the team remained effective and engaged.
|
||||
|
||||
Additionally, I guided and supported moderators, helping them develop their skills and excel in their roles. By identifying opportunities to enhance staff activity, I contributed to the overall health and vibrancy of the community. My efforts were instrumental in maintaining a positive, safe, and well-managed space for all members.`,
|
||||
end: new Date("July 5 2022"),
|
||||
link: "https://discord.com/invite/rythm",
|
||||
logo: "rythm.jpeg",
|
||||
start: new Date("Feb 5 2022"),
|
||||
title: "Senior Discord Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "TweetShift",
|
||||
description: `As Technical Support Staff for TweetShift, I responded promptly to user queries, addressing issues and bugs within the bot to ensure a smooth user experience. I provided clear guidance on how to use the bot's features effectively, helping users maximize its capabilities.
|
||||
|
||||
My role involved troubleshooting technical challenges and offering solutions to enhance user satisfaction. By delivering efficient support and sharing helpful tips, I contributed to the overall success and reliability of the bot for the TweetShift community.`,
|
||||
end: new Date("Jan 5 2022"),
|
||||
link: "https://discord.com/invite/zdfQhjc",
|
||||
logo: "tweetshift.png",
|
||||
start: new Date("Oct 5 2021"),
|
||||
title: "Technical Support Staff",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Rythm",
|
||||
description: `As a Discord Moderator for Rythm, I played a central role in maintaining a safe, respectful, and welcoming environment for community members. I monitored conversations to ensure compliance with community guidelines and addressed any disruptive behavior promptly.
|
||||
|
||||
My efforts helped foster a positive and inclusive space for all members, contributing to the overall health and vibrancy of the Rythm community.`,
|
||||
end: new Date("Feb 5 2022"),
|
||||
link: "https://discord.com/invite/rythm",
|
||||
logo: "rythm.jpeg",
|
||||
start: new Date("Sept 5 2021"),
|
||||
title: "Discord Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Streamcord",
|
||||
description: `As Technical Support Staff for Streamcord, I provided essential support to users by triaging and debugging issues related to the Streamcord Discord bot. My role involved investigating and resolving technical challenges to ensure a seamless user experience.
|
||||
|
||||
Acting as a liaison between users and developers, I facilitated clear communication and reported user feedback to the development team for continuous improvement. Additionally, I moderated and engaged with the community, fostering a positive and inclusive environment for all participants. My efforts contributed to the overall success and satisfaction of the Streamcord community.`,
|
||||
end: new Date("Aug 5 2021"),
|
||||
link: "https://discord.com/invite/streamcord",
|
||||
logo: "streamcord.jpeg",
|
||||
start: new Date("Mar 5 2021"),
|
||||
title: "Technical Support Staff",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "freeCodeCamp",
|
||||
description: `As a Community Moderator for freeCodeCamp, I provided vital support to users (campers) as they navigated the freeCodeCamp curriculum. My role included assisting users in debugging their code and answering questions, ensuring they received the guidance they needed to progress in their learning journey.
|
||||
|
||||
I engaged with and moderated the community on the forum and Discord server, fostering a positive, supportive, and inclusive environment for all members. Additionally, I assisted with issue triage and pull request review on GitHub, contributing to the ongoing improvement and development of freeCodeCamp's open-source projects. My efforts played a key role in maintaining the quality of the community and empowering users to achieve their learning goals.`,
|
||||
end: new Date("Dec 5 2020"),
|
||||
link: "https://discord.com/invite/freecodecamp-org-official-fi-fo-692816967895220344",
|
||||
logo: "fcc.jpeg",
|
||||
start: new Date("Jun 5 2020"),
|
||||
title: "Community Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "FruitPursuits",
|
||||
description: `As a Discord Moderator for FruitPursuits, I provide crucial support to members, ensuring they have a seamless experience within our community. I troubleshoot technical issues, enforce community guidelines, and foster engagement among members. Collaborating with fellow moderators, I contribute to the ongoing improvement of our Discord server, empowering users to fully enjoy their fruit-loving journey.`,
|
||||
end: null,
|
||||
link: "https://discord.gg/xcy2fRsC5K",
|
||||
logo: "fruit.png",
|
||||
start: new Date("March 5 2024"),
|
||||
title: "Community Moderator",
|
||||
type: "volunteer",
|
||||
},
|
||||
{
|
||||
company: "Deepgram",
|
||||
description: `
|
||||
<div class="pl-4">
|
||||
<p>As a DX Consultant at Deepgram, I spearhead efforts to enhance community engagement and streamline developer experiences. Leveraging my expertise, I optimize community management workflows on platforms like Slack, GitHub Discussions, and Discord. My primary focus involves acting as a Community Manager, where I strive to answer approximately 60% of community inquiries, foster engagement, and ensure valuable feedback reaches the Product Board for consideration.</p>
|
||||
|
||||
<p>In parallel, I lead DX initiatives, delivering minor documentation improvements, documenting new product features, and integrating new solutions. My proficiency extends to SDK support (JS, Python), where I deliver enhancements and develop new applications as needed. Additionally, I provide high-priority support for demo applications.</p>
|
||||
|
||||
<p>Through my multifaceted approach, I drive tangible improvements in community interactions and developer experiences, contributing to Deepgram's growth and user satisfaction.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Community Management:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Provide community support across Slack, GitHub Discussions, and Discord</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Address approximately 60% of community inquiries, ensuring prompt and accurate responses</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Foster community engagement through proactive interactions and targeted initiatives</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Facilitate feedback flow to Product Board, driving user-centric product improvements</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Developer Experience (DX) Initiatives:
|
||||
<ul class=" pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Spearhead documentation improvements, enhancing clarity and accessibility</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Integrate innovative solutions to streamline developer workflows</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Deliver high-priority support for demo applications, showcasing product capabilities</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">SDK Support and Development:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Provide expert support for JavaScript and Python SDKs</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implement enhancements to existing SDKs based on developer feedback and emerging needs</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Develop new applications leveraging Deepgram's SDKs to demonstrate best practices</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵']">Workflow Optimization:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Streamline community management processes across multiple platforms</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implement efficient systems for tracking and addressing developer inquiries</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Optimize feedback collection and integration into product development cycle</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: null,
|
||||
link: "https://deepgram.com",
|
||||
logo: "deepgram.jpeg",
|
||||
start: new Date("June 5 2024"),
|
||||
title: "Developer Experience Consultant",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "Safeway",
|
||||
description: `<div class="pl-4">
|
||||
<p>As the Service Operations Manager at Safeway, I played a pivotal role in overseeing the store's day-to-day operations and maintaining exceptional service standards. My responsibilities encompassed a wide range of critical functions, from personnel management and training to ensuring compliance with safety regulations and company policies.</p>
|
||||
|
||||
<p>By focusing on hiring, onboarding, and mentoring both new associates and management personnel, I fostered a skilled and motivated workforce capable of delivering high-quality service. My implementation of comprehensive safety programs and strict adherence to OSHA regulations created a secure environment for both employees and customers.</p>
|
||||
|
||||
<p>Through diligent auditing of financial records and assistance with payroll processing, I contributed to the store's financial accuracy and operational efficiency. My collaborative approach to problem-solving and commitment to enforcing company standards helped maintain a positive work environment and uphold Safeway's reputation for excellence in service.</p>
|
||||
|
||||
<p>Key responsibilities and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Personnel Management and Development:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Hired, onboarded, and trained new associates to maintain a skilled workforce</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Guided and mentored new PICs and department managers, ensuring their preparedness for leadership roles</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Addressed associate concerns and collaboratively developed solutions to maintain a positive work environment</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Safety and Compliance:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Maintained compliance with OSHA safety regulations across all store operations</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Implemented a comprehensive safety program within the store to ensure employee and customer well-being</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Enforced company policies and procedures, addressing violations appropriately</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Financial Management and Auditing:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Audited weekly bookkeeping records for cash shortages and discrepancies, ensuring financial accuracy</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Assisted with processing weekly payroll and timekeeping as needed</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Operational Excellence:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Oversaw day-to-day store operations to maintain exceptional service standards</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Upheld high service expectations and promoted a positive work environment</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Contributed to the efficient management of store operations through various initiatives</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("5 April 2020"),
|
||||
link: "https://www.safeway.com",
|
||||
logo: "safeway.png",
|
||||
start: new Date("5 August 2009"),
|
||||
title: "Service Operations Manager",
|
||||
type: "fixed",
|
||||
},
|
||||
{
|
||||
company: "Vancouver School of Arts and Academics",
|
||||
description: `<div class="pl-4">
|
||||
<p>As a student at the Vancouver School of Arts and Academics, I immersed myself in a diverse and enriching artistic environment, with a primary focus on music and a secondary emphasis on theatre. This multidisciplinary approach allowed me to develop a broad range of skills across various art forms, fostering my creativity and artistic expression.</p>
|
||||
|
||||
<p>My dedication to music, particularly in band, saw me master multiple instruments including the clarinet, piano, bassoon, and saxophone. This comprehensive musical education enhanced my understanding of different musical styles and techniques, as well as my ability to collaborate within an ensemble setting.</p>
|
||||
|
||||
<p>In theatre, I honed my skills both as an actor and as a theatre technician, gaining a well-rounded understanding of stage production. Additionally, I explored other artistic disciplines such as dance, visual arts, filmography, and literature, further broadening my creative horizons and interdisciplinary approach to the arts.</p>
|
||||
|
||||
<p>Key areas of focus and achievements include:</p>
|
||||
<ul class="list-none">
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Music:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Participated actively in the school band program</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed proficiency in multiple instruments: clarinet, piano, bassoon, and saxophone</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Gained experience in ensemble playing and musical collaboration</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Theatre:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Performed as an actor in various school productions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Gained technical theatre experience, working behind the scenes on productions</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Developed a comprehensive understanding of stage production processes</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2 relative before:content-['🩵'] ml-[-1rem]">Interdisciplinary Arts Exploration:
|
||||
<ul class="pl-4 mt-2">
|
||||
<li class="mb-2 relative before:content-['🩷']">Explored dance, enhancing physical expression and movement skills</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Engaged in visual arts projects, developing artistic techniques and creative vision</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Participated in filmography studies, gaining insight into visual storytelling</li>
|
||||
<li class="mb-2 relative before:content-['🩷']">Studied literature, enhancing writing and analytical skills</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`,
|
||||
end: new Date("5 June 2009"),
|
||||
link: "https://arts.vansd.org/",
|
||||
logo: "vsaa.png",
|
||||
start: new Date("5 September 2001"),
|
||||
title: "Student",
|
||||
type: "volunteer",
|
||||
},
|
||||
];
|
@ -15,5 +15,5 @@ export const Koikatsu = [
|
||||
"CharaStudio-2025-02-16-13-30-06-Render.png",
|
||||
"CharaStudio-2025-02-16-13-30-29-Render.png",
|
||||
"CharaStudio-2025-02-16-13-30-57-Render.png",
|
||||
"CharaStudio-2025-02-16-13-31-46-Render.png"
|
||||
];
|
||||
"CharaStudio-2025-02-16-13-31-46-Render.png",
|
||||
];
|
||||
|
@ -8,26 +8,31 @@
|
||||
* Navigation items to render on home page and
|
||||
* on main navbar.
|
||||
*/
|
||||
export const NavItems = [
|
||||
{ href: "/about", text: "About Naomi" },
|
||||
{ href: "/manual", text: "User Manual" },
|
||||
{ href: "/work", text: "Employment History" },
|
||||
const NavItems = [
|
||||
{ href: "https://docs.nhcarrigan.com/about/mission/", text: "Our Mission" },
|
||||
{ href: "https://contact.nhcarrigan.com", text: "Contact Us" },
|
||||
{ href: "/certs", text: "Certifications" },
|
||||
{ href: "/reviews", text: "Reviews" },
|
||||
{ href: "/games", text: "Game Screenshots" },
|
||||
{ href: "/art", text: "Art of Naomi" },
|
||||
{ href: "/manifesto", text: "Transfemme Manifesto" },
|
||||
{ href: "/tech", text: "Technologies" },
|
||||
{ href: "https://donate.nhcarrigan.com", text: "Donate" },
|
||||
{ href: "/tech", text: "Technologies We Use" },
|
||||
{ href: "https://git.nhcarrigan.com", text: "Contribute to our Projects" },
|
||||
{ href: "/koikatsu", text: "Koikatsu Scenes" },
|
||||
{ href: "/ref", text: "Reference Sheet" },
|
||||
{ href: "/projects", text: "Our Projects" },
|
||||
{ href: "https://games.nhcarrigan.com", text: "Game Dev" },
|
||||
{ href: "https://merch.nhcarrigan.link", text: "Merchandise" },
|
||||
{ href: "https://docs.nhcarrigan.com", text: "Documentation" },
|
||||
{ href: "https://forum.nhcarrigan.com", text: "Support" },
|
||||
{ href: "/legacy", text: "Characters" },
|
||||
{ href: "https://chat.nhcarrigan.com", text: "Support" },
|
||||
{ href: "https://forms.nhcarrigan.com/commission", text: "Hire Us" },
|
||||
].sort((a, b) => {
|
||||
return a.text.localeCompare(b.text);
|
||||
});
|
||||
|
||||
const NaomiNavItems = [
|
||||
{ href: "/legacy", text: "Characters" },
|
||||
{ href: "/ref", text: "Reference Sheet" },
|
||||
{ href: "/koikatsu", text: "Koikatsu Scenes" },
|
||||
{ href: "/games", text: "Game Screenshots" },
|
||||
{ href: "/art", text: "Art of Naomi" },
|
||||
{ href: "https://resume.nhcarrigan.com", text: "Resume" },
|
||||
{ href: "https://blog.nhcarrigan.com", text: "Blog" },
|
||||
{ href: "https://testimonials.nhcarrigan.com", text: "Testimonials" },
|
||||
].sort((a, b) => {
|
||||
return a.text.localeCompare(b.text);
|
||||
});
|
||||
|
||||
export { NavItems, NaomiNavItems };
|
||||
|
@ -1,232 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/**
|
||||
* List of projects to render.
|
||||
*/
|
||||
export const Projects: Array<{
|
||||
name: string;
|
||||
url: string;
|
||||
source?: string;
|
||||
description: string;
|
||||
type: "Website" | "Bot" | "API" | "Game";
|
||||
}> = [
|
||||
{
|
||||
description: "A tool to monitor the email complaints of the freeCodeCamp newsletter.",
|
||||
name: "Email Monitor",
|
||||
source: "https://github.com/freecodecamp/email-complaint-monitoring",
|
||||
type: "API",
|
||||
url: "https://complaint.freecodecamp.org/",
|
||||
},
|
||||
{
|
||||
description: "Our self-hosted LibreTranslate instance.",
|
||||
name: "Translation API",
|
||||
source: "https://github.com/LibreTranslate/LibreTranslate",
|
||||
type: "API",
|
||||
url: "https://trans.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "API to authenticate our Slack translation bot.",
|
||||
name: "Translation Slack Auth",
|
||||
type: "API",
|
||||
url: "https://trans-slack.nhcarrigan.com/slack/install",
|
||||
},
|
||||
{
|
||||
description: "AI bot in our Discord which generates alt text.",
|
||||
name: "AltGenerator",
|
||||
source: "https://codeberg.org/nhcarrigan/alt-generator",
|
||||
type: "Bot",
|
||||
url: "https://alt.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A bot and API to allow submitting anonymous questions for Naomi to answer.",
|
||||
name: "Anon Bot",
|
||||
source: "https://codeberg.org/nhcarrigan/anon-bot",
|
||||
type: "Bot",
|
||||
url: "https://anon.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A bot to track art requests and latest news updates for the Art 4 Palestine charity.",
|
||||
name: "Art4Palestine Bot",
|
||||
source: "https://codeberg.org/nhcarrigan/a4p-bot",
|
||||
type: "Bot",
|
||||
url: "https://afp.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A bot to remove special booster colour roles when someone stops boosting.",
|
||||
name: "Boost Monitor",
|
||||
source: "https://codeberg.org/nhcarrigan/boost-monitor",
|
||||
type: "Bot",
|
||||
url: "https://oogie.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Custom moderation utility for freeCodeCamp.",
|
||||
name: "CamperChan",
|
||||
source: "github.com/freeCodeCamp/camperchan/",
|
||||
type: "Bot",
|
||||
url: "https://camperchan.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "AI-powered bot in our Discord community which can evaluate code snippets.",
|
||||
name: "Code Evaluator",
|
||||
source: "https://codeberg.org/nhcarrigan/code-evaluator",
|
||||
type: "Bot",
|
||||
url: "https://eval.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Community syndication and automation tool that bridges Github discussions and Discord threads into an internal Slack channel.",
|
||||
name: "Deepgram Bot",
|
||||
type: "Bot",
|
||||
url: "https://deepgram-discord-bot.fly.dev/",
|
||||
},
|
||||
{
|
||||
description: "AI bot designed to answer queries by providing actual sources.",
|
||||
name: "Librarian",
|
||||
source: "https://codeberg.org/nhcarrigan/librarian",
|
||||
type: "Bot",
|
||||
url: "https://lib.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Python bot to detect links in the promote-your-stream channel for Streamcord.",
|
||||
name: "Link Detector",
|
||||
source: "https://codeberg.org/nhcarrigan/link-detector",
|
||||
type: "Bot",
|
||||
url: "https://linkdetector.nhcarrigan.com/health",
|
||||
},
|
||||
{
|
||||
description: "Our paid general-purpose moderation bot for Discord.",
|
||||
name: "Moderation Bot",
|
||||
source: "https://codeberg.org/nhcarrigan/mod-bot",
|
||||
type: "Bot",
|
||||
url: "https://hooks.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A general-purpose AI bot for our Discord community.",
|
||||
name: "NaomiAI",
|
||||
source: "https://codeberg.org/nhcarrigan/anthropic-bot",
|
||||
type: "Bot",
|
||||
url: "https://naomiai.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A bot that bridges discussions between Discord, Slack, Matrix, and IRC.",
|
||||
name: "Social Media Bridge",
|
||||
source: "https://codeberg.org/nhcarrigan/social-media-bridge",
|
||||
type: "Bot",
|
||||
url: "https://bridge.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A kanban-style task management bot for Discord, installed directly to your user account.",
|
||||
name: "Task Bot",
|
||||
source: "https://codeberg.org/nhcarrigan/user-task-bot",
|
||||
type: "Bot",
|
||||
url: "https://tasks.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A Zelda RP bot for my friend Ruu.",
|
||||
name: "Tingle Bot",
|
||||
source: "https://codeberg.org/nhcarrigan/tingle-bot",
|
||||
type: "Bot",
|
||||
url: "https://ruubot.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A bot for Slack and Discord to translate user messages.",
|
||||
name: "Translation Bot",
|
||||
source: "https://codeberg.org/nhcarrigan/translation-bot",
|
||||
type: "Bot",
|
||||
url: "https://trans-bot.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Our first game, an introduction to our original characters Becca and Rosalia",
|
||||
name: "Beccalia: Prologue",
|
||||
type: "Game",
|
||||
url: "https://beccalia.nhcarrigan.com/prologue",
|
||||
},
|
||||
{
|
||||
description: "A cancelled game that explores Becca and Rosalia's origin stories.",
|
||||
name: "Beccalia: Origins",
|
||||
type: "Game",
|
||||
url: "https://beccalia.nhcarrigan.com/origins",
|
||||
},
|
||||
{
|
||||
description: "A short game built for a weekend game jam our friend hosted.",
|
||||
name: "Ruu's Goblin Quest",
|
||||
type: "Game",
|
||||
url: "https://goblin.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Our self-hosted Plausible analytics.",
|
||||
name: "Analytics",
|
||||
source: "https://github.com/plausible/analytics/",
|
||||
type: "Website",
|
||||
url: "https://analytics.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A quick landing page for our Beccalia games.",
|
||||
name: "Beccalia Landing",
|
||||
type: "Website",
|
||||
url: "https://beccalia.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "A manual username service to provide free custom handles to Bluesky users.",
|
||||
name: "BlueSky Username Service",
|
||||
type: "Website",
|
||||
url: "https://naomi.party/",
|
||||
},
|
||||
{
|
||||
description: "Community marketing site for Deepgram.",
|
||||
name: "Deepgram Community",
|
||||
type: "Website",
|
||||
url: "https://community.deepgram.com/",
|
||||
},
|
||||
{
|
||||
description: "Personal site for my sister.",
|
||||
name: "Denna",
|
||||
source: "https://codeberg.org/nhcarrigan/denna",
|
||||
type: "Website",
|
||||
url: "https://denna.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Our primary documentation platform.",
|
||||
name: "Documentation",
|
||||
source: "https://codeberg.org/nhcarrigan/docs",
|
||||
type: "Website",
|
||||
url: "https://docs.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "The core freeCodeCamp curriculum.",
|
||||
name: "freeCodeCamp",
|
||||
source: "https://github.com/freecodecamp/freecodecamp",
|
||||
type: "Website",
|
||||
url: "https://www.freecodecamp.org/",
|
||||
},
|
||||
{
|
||||
description: "A small server to handle link redirections.",
|
||||
name: "Link Redirection Service",
|
||||
type: "Website",
|
||||
url: "https://nhcarrigan.link/",
|
||||
},
|
||||
{
|
||||
description: "Personal website for my partner Kaitlyn.",
|
||||
name: "Kaitlyn",
|
||||
source: "https://codeberg.org/nhcarrigan/kaitlyn",
|
||||
type: "Website",
|
||||
url: "https://kaitlyn.nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "This website you're looking at right now!",
|
||||
name: "Portfolio",
|
||||
source: "https://codeberg.org/nhcarrigan/portfolio",
|
||||
type: "Website",
|
||||
url: "https://nhcarrigan.com/",
|
||||
},
|
||||
{
|
||||
description: "Portfolio site for my friend Starfazers.",
|
||||
name: "Starfazers",
|
||||
source: "https://codeberg.org/nhcarrigan/starfazers",
|
||||
type: "Website",
|
||||
url: "https://starfazers.nhcarrigan.com/",
|
||||
},
|
||||
];
|
@ -1,90 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { faLinkedin } from "@fortawesome/free-brands-svg-icons";
|
||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
||||
|
||||
/**
|
||||
* List of reviews to render.
|
||||
*/
|
||||
export const Testimonials: Array<{
|
||||
name: string;
|
||||
date: Date;
|
||||
content: string;
|
||||
sourceIcon: IconDefinition;
|
||||
sourceUrl: string;
|
||||
sourceName: string;
|
||||
}> = [
|
||||
{
|
||||
content:
|
||||
"Naomi has done a fantastic job in creating Becca Bot, which is an integral part in managing the EddieHub Discord Community. As founder of EddieHub, Naomi is super helpful to all Community members and an excellent moderator, from our text channels to audio calls and live streams. Naomi demonstrates an excellent technical knowledge and is always keen to share this with the community.",
|
||||
date: new Date("June 30, 2023"),
|
||||
name: "Eddie Jaoude",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content:
|
||||
"If you need a problem solver, look at Naomi. Naomi is a fantastic part of the online tech community by teaching and offering help to beginners on their journeys into tech. She has created some great solutions and is a consistent learner. Naomi has led initiatives using Javascript and front-end technologies to produce finished products within a volunteer position. Highly recommend Naomi to any team.",
|
||||
date: new Date("July 6 2023"),
|
||||
name: "Danny Thompson",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content:
|
||||
"Naomi is an absolute trailblazer, and is an amazing person to work with! Naomi is humorous and also has an amazing attitude to work with. Her ability to solve complex problems efficiently astounds me. Not only does she demonstrate outstanding technical knowledge, but also does an amazing job at elucidating her needs as an engineer. She is a very warm person and quite easy to work with. Naomi is immensely perceptive and very calculated with what she does. Naomi would make an excellent addition to any company that is lucky enough to hire her!",
|
||||
date: new Date("May 2 2024"),
|
||||
name: "Francez Urmatan",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content:
|
||||
"I've worked alongside Naomi on a number of projects, and it is always a blessing to have her on the team. She is knowledgable, reliable, and always willing to jump in with creative and efficient engineering solutions to complex workflow problems. Naomi is also such a patient teacher, effectively explaining how things work and enabling others to become more independent. I always look forward to working with Naomi, and recommend you work with her if you have the opportunity!",
|
||||
date: new Date("May 14 2024"),
|
||||
name: "Katey Berry",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content:
|
||||
"She is a dedicated programmer and spends most of her time either making bots, or coding. She has an excellent work ethic and goes until she is satisfied with the end product.",
|
||||
date: new Date("May 30, 2024"),
|
||||
name: "Kaitlyn Nichols",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content:
|
||||
"Naomi is an incredibly dynamic and resourceful professional, always ready with a multitude of solutions for any challenge. Her problem-solving skills are like watching a masterful sequence unfold, earning her the well-deserved nickname 'the technomancer.' Naomi's strong educational background is evident in her clear and concise explanations, making complex concepts easily understandable. She excels in communication, ensuring that everyone feels valued and integral to the team. Naomi is truly the glue that holds any team together. Adding her to your team will be a decision you won't regret.",
|
||||
date: new Date("July 15, 2024"),
|
||||
name: "Alix Takada Sharp",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content: "Naomi's erudition on just about every development topic under the sun, expediency at completing massive technical undertakings solo, and undeniable passion for the work she does is an ever-present joy and boon for any organization lucky enough to work with her. As an example, Naomi composed an extensive and accessible DB comprising all available traits and behaviors of our Users, whipped up an extremely user-friendly API that our team of end-users could utilize seamlessly, and regularly developed additional clever dataflows for very particular asks. Every aspect of this work was done impeccably and frictionlessly, and that's just one of the dozens of projects she developed with our team during the time I worked alongside her. As brilliant as Naomi is, she's also humble, hilarious, and an all-around aspirational figure to all people looking to find true passion for themselves alongside professional success. I strive to be more like her, and I know I'm not alone in that.",
|
||||
date: new Date("September 27, 2024"),
|
||||
name: "Chris Ohman",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
{
|
||||
content: "Naomi always had the knowledge and information for nearly every question I ever had. It was such an honor to work with her, and anyone would be lucky to have the chance for her to work with you or your team.",
|
||||
date: new Date("October 28 2024"),
|
||||
name: "Alexis Madsen",
|
||||
sourceIcon: faLinkedin,
|
||||
sourceName: "LinkedIn",
|
||||
sourceUrl: "https://www.linkedin.com/in/naomi-lgbt/details/recommendations/",
|
||||
},
|
||||
];
|
@ -57,7 +57,7 @@ const VRoid = [
|
||||
name: "Sweater Dress",
|
||||
},
|
||||
{
|
||||
file: "witch",
|
||||
file: "witch.vrm",
|
||||
name: "Arcane Witch",
|
||||
},
|
||||
];
|
||||
|
@ -1,29 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { Certifications } from "../../src/config/Certifications";
|
||||
|
||||
describe("certification objects", () => {
|
||||
it("should have unique names", () => {
|
||||
expect.assertions(1);
|
||||
const set = new Set(
|
||||
Certifications.map((c) => {
|
||||
return c.name;
|
||||
}),
|
||||
);
|
||||
expect(set, "are not unique").toHaveLength(Certifications.length);
|
||||
});
|
||||
|
||||
it("should have unique file names", () => {
|
||||
expect.assertions(1);
|
||||
const set = new Set(
|
||||
Certifications.map((c) => {
|
||||
return c.fileName;
|
||||
}),
|
||||
);
|
||||
expect(set, "are not unique").toHaveLength(Certifications.length);
|
||||
});
|
||||
});
|
@ -1,33 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { Jobs } from "../../src/config/Jobs";
|
||||
|
||||
describe("jobs objects", () => {
|
||||
it("should have correct start dates", () => {
|
||||
expect.hasAssertions();
|
||||
for (const job of Jobs.slice(1)) {
|
||||
expect(job.start.getDate(), `${job.title} has bad start`).toBe(5);
|
||||
}
|
||||
});
|
||||
|
||||
it("should have correct end dates", () => {
|
||||
expect.hasAssertions();
|
||||
for (const job of Jobs.slice(1)) {
|
||||
if (!job.end) {
|
||||
continue;
|
||||
}
|
||||
expect(job.end.getDate(), `${job.title} has bad end`).toBe(5);
|
||||
}
|
||||
});
|
||||
|
||||
it("should have no future start dates", () => {
|
||||
expect.hasAssertions();
|
||||
expect(Jobs.filter((job) => {
|
||||
return job.start > new Date();
|
||||
}), "have future start dates").toHaveLength(0);
|
||||
});
|
||||
});
|
@ -4,20 +4,21 @@
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { NavItems } from "../../src/config/NavItems";
|
||||
import { NaomiNavItems, NavItems } from "../../src/config/NavItems";
|
||||
|
||||
describe("nav items", () => {
|
||||
it("should be unique", () => {
|
||||
expect.assertions(2);
|
||||
const concat = [ ...NavItems, ...NaomiNavItems ];
|
||||
const href = new Set(
|
||||
NavItems.map((n) => {
|
||||
concat.map((n) => {
|
||||
return n.href;
|
||||
}),
|
||||
);
|
||||
const text = new Set(NavItems.map((n) => {
|
||||
const text = new Set(concat.map((n) => {
|
||||
return n.text;
|
||||
}));
|
||||
expect(href, "links are not unique").toHaveLength(NavItems.length);
|
||||
expect(text, "names are not unique").toHaveLength(NavItems.length);
|
||||
expect(href, "links are not unique").toHaveLength(concat.length);
|
||||
expect(text, "names are not unique").toHaveLength(concat.length);
|
||||
});
|
||||
});
|
||||
|
@ -1,29 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { Projects } from "../../src/config/Projects";
|
||||
|
||||
describe("project objects", () => {
|
||||
it("should have unique names", () => {
|
||||
expect.assertions(1);
|
||||
const set = new Set(
|
||||
Projects.map((a) => {
|
||||
return a.name;
|
||||
}),
|
||||
);
|
||||
expect(set, "are not unique").toHaveLength(Projects.length);
|
||||
});
|
||||
|
||||
it("should have unique URLs", () => {
|
||||
expect.assertions(1);
|
||||
const set = new Set(
|
||||
Projects.map((a) => {
|
||||
return a.url;
|
||||
}),
|
||||
);
|
||||
expect(set, "are not unique").toHaveLength(Projects.length);
|
||||
});
|
||||
});
|
@ -1,26 +0,0 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { Testimonials } from "../../src/config/Testimonials";
|
||||
|
||||
describe("testimonial objects", () => {
|
||||
it("should have unique names", () => {
|
||||
expect.assertions(1);
|
||||
const set = new Set(
|
||||
Testimonials.map((t) => {
|
||||
return t.name;
|
||||
}),
|
||||
);
|
||||
expect(set, "are not unique").toHaveLength(Testimonials.length);
|
||||
});
|
||||
|
||||
it("should have no future dates", () => {
|
||||
expect.assertions(1);
|
||||
expect(Testimonials.filter((t) => {
|
||||
return new Date(t.date) > new Date();
|
||||
}), "have future dates").toHaveLength(0);
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user