generated from nhcarrigan/template
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
cb26a2a130
|
|||
|
8fc023306f
|
@@ -0,0 +1,35 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Lint and Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Dependency Pin Check
|
||||
uses: naomi-lgbt/dependency-pin-check@main
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Lint
|
||||
run: pnpm lint
|
||||
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules/
|
||||
dist/
|
||||
prod/
|
||||
.astro/
|
||||
@@ -0,0 +1,5 @@
|
||||
import { defineConfig } from "astro/config";
|
||||
|
||||
export default defineConfig({
|
||||
output: "static",
|
||||
});
|
||||
@@ -0,0 +1,8 @@
|
||||
import nhcarrigan from "@nhcarrigan/eslint-config";
|
||||
|
||||
export default [
|
||||
...nhcarrigan,
|
||||
{
|
||||
ignores: [".astro/", "dist/", "prod/", "node_modules/", "src/env.d.ts"],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "personality",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "astro build",
|
||||
"dev": "astro dev",
|
||||
"lint": "eslint src --max-warnings 0",
|
||||
"preview": "astro preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"astro": "6.1.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nhcarrigan/eslint-config": "5.2.0",
|
||||
"@nhcarrigan/typescript-config": "4.0.0",
|
||||
"eslint": "9.39.4",
|
||||
"typescript": "6.0.3"
|
||||
}
|
||||
}
|
||||
Generated
+6399
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,155 @@
|
||||
/**
|
||||
* Natal chart placement data.
|
||||
* @file
|
||||
* @copyright Naomi Carrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/* eslint-disable stylistic/max-len -- Meaning strings are intentionally long */
|
||||
|
||||
type PlacementGroup = "personal" | "social" | "generational" | "points";
|
||||
|
||||
interface Placement {
|
||||
description: string;
|
||||
group: PlacementGroup;
|
||||
house: number | null;
|
||||
meaning: string | null;
|
||||
name: string;
|
||||
sign: string | null;
|
||||
}
|
||||
|
||||
const groupLabels: Record<PlacementGroup, string> = {
|
||||
generational: "Generational Planets",
|
||||
personal: "Personal Planets",
|
||||
points: "Points & Angles",
|
||||
social: "Social Planets",
|
||||
};
|
||||
|
||||
const placements: Array<Placement> = [
|
||||
{
|
||||
description: "Core identity, ego, and life force.",
|
||||
group: "personal",
|
||||
house: 12,
|
||||
meaning: "My emotional depth and nurturing nature run deeper than most people see - the 12th house keeps my core self private and inward. I feel most like myself in solitude or intimate settings, and my Cancer warmth tends to emerge quietly rather than being put on display.",
|
||||
name: "Sun",
|
||||
sign: "Cancer",
|
||||
},
|
||||
{
|
||||
description: "Emotions, instincts, and subconscious.",
|
||||
group: "personal",
|
||||
house: 3,
|
||||
meaning: "I process emotions through communication - talking, writing, and connecting with others helps me find my emotional footing. I crave fairness and balance in my relationships and find peace through honest conversation. Words are how I feel safe.",
|
||||
name: "Moon",
|
||||
sign: "Libra",
|
||||
},
|
||||
{
|
||||
description: "Communication, thinking, and learning style.",
|
||||
group: "personal",
|
||||
house: 1,
|
||||
meaning: "My communication style is bold, expressive, and unmistakably me - it's front and centre in how I present myself to the world. I speak with confidence and passion, and storytelling comes naturally. My voice is one of the first things people notice about me.",
|
||||
name: "Mercury",
|
||||
sign: "Leo",
|
||||
},
|
||||
{
|
||||
description: "Love, beauty, values, and attraction.",
|
||||
group: "personal",
|
||||
house: 1,
|
||||
meaning: "I show love through care, attention to detail, and acts of service - and I need to feel genuinely useful to feel loved in return. I'm discerning about who I open up to, but when I do, I give everything. Being told I'm doing well matters more to me than grand gestures.",
|
||||
name: "Venus",
|
||||
sign: "Virgo",
|
||||
},
|
||||
{
|
||||
description: "Drive, ambition, and how you take action.",
|
||||
group: "personal",
|
||||
house: 1,
|
||||
meaning: "I pursue goals with precision and methodical energy - I don't just charge ahead, I plan and refine. My drive is a core part of how I show up in the world, and I hold myself to exacting standards. I take action when I believe it's right, not just when it's easy.",
|
||||
name: "Mars",
|
||||
sign: "Virgo",
|
||||
},
|
||||
{
|
||||
description: "Growth, expansion, luck, and philosophy.",
|
||||
group: "social",
|
||||
house: 1,
|
||||
meaning: "My growth and good fortune come through authentic self-expression and generous leadership. I expand by being unapologetically myself and bringing others along with me. My warmth and presence create opportunities - people are naturally drawn into my orbit.",
|
||||
name: "Jupiter",
|
||||
sign: "Leo",
|
||||
},
|
||||
{
|
||||
description: "Discipline, responsibility, and long-term lessons.",
|
||||
group: "social",
|
||||
house: 6,
|
||||
meaning: "My life lessons are woven through my work and health - Saturn here asks me to build discipline and new structures around both. I'm learning to balance innovation with sustainability, and to take my health as seriously as I take my responsibilities to others.",
|
||||
name: "Saturn",
|
||||
sign: "Aquarius",
|
||||
},
|
||||
{
|
||||
description: "Rebellion, innovation, and sudden change.",
|
||||
group: "generational",
|
||||
house: 5,
|
||||
meaning: "My generation is rewriting what achievement and success look like - and in my 5th house, that energy shows up in how I create and express myself. My approach to play, creativity, and romance tends to break from convention in ways that feel natural to me even when they surprise others.",
|
||||
name: "Uranus",
|
||||
sign: "Capricorn",
|
||||
},
|
||||
{
|
||||
description: "Dreams, intuition, and spiritual connection.",
|
||||
group: "generational",
|
||||
house: 5,
|
||||
meaning: "I bring a spiritual and idealistic lens to my creative work and self-expression - there's meaning woven into the things I build and the communities I tend. Neptune here blends my Wiccan spirituality with my creativity, giving my work an almost devotional quality.",
|
||||
name: "Neptune",
|
||||
sign: "Capricorn",
|
||||
},
|
||||
{
|
||||
description: "Transformation, power, and deep change.",
|
||||
group: "generational",
|
||||
house: 4,
|
||||
meaning: "My foundations have been deeply transformed - this placement often marks a painful reshaping of family and home. I've had to rebuild my sense of belonging on my own terms, and through that process I've developed a bedrock strength that very few people truly understand.",
|
||||
name: "Pluto",
|
||||
sign: "Scorpio",
|
||||
},
|
||||
{
|
||||
description: "Outward personality and first impressions.",
|
||||
group: "points",
|
||||
house: null,
|
||||
meaning: "My first impression is warm, magnetic, and quietly commanding - people notice me. Leo Rising means I project confidence and generosity even when I don't feel it, which creates an interesting tension with my more private Cancer Sun. I appear bold to the world whilst holding my deepest self close.",
|
||||
name: "Rising (Ascendant)",
|
||||
sign: "Leo",
|
||||
},
|
||||
{
|
||||
description: "Karmic direction and soul's purpose.",
|
||||
group: "points",
|
||||
house: 6,
|
||||
meaning: "My soul's growth path this lifetime runs through disciplined, meaningful work and taking responsibility for my own wellbeing. I'm growing toward building something lasting - structures, communities, systems that endure. My health and daily routines are part of that journey too.",
|
||||
name: "North Node",
|
||||
sign: "Capricorn",
|
||||
},
|
||||
{
|
||||
description: "Public image and career path.",
|
||||
group: "points",
|
||||
house: null,
|
||||
meaning: "My professional legacy is built on permanence, quality, and lasting value - I'm here to create things that endure. Taurus MC brings a reputation for reliability and for work that genuinely matters to people's lives. 'Permanence in a Transient World' isn't just a tagline; it's written in my chart.",
|
||||
name: "Midheaven (MC)",
|
||||
sign: "Taurus",
|
||||
},
|
||||
];
|
||||
|
||||
const groups: Array<PlacementGroup> = [
|
||||
"personal",
|
||||
"social",
|
||||
"generational",
|
||||
"points",
|
||||
];
|
||||
|
||||
/**
|
||||
* Filters placements by group.
|
||||
* @param group - The group to filter by.
|
||||
* @returns The placements in the given group.
|
||||
*/
|
||||
const placementsByGroup = (group: PlacementGroup): Array<Placement> => {
|
||||
return placements.filter((placement) => {
|
||||
return placement.group === group;
|
||||
});
|
||||
};
|
||||
|
||||
export type { PlacementGroup, Placement };
|
||||
export { groupLabels, groups, placements, placementsByGroup };
|
||||
+300
@@ -0,0 +1,300 @@
|
||||
/**
|
||||
* DBT exercise data from dialecticalbehaviortherapy.com.
|
||||
* @file
|
||||
* @copyright Naomi Carrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/* eslint-disable @typescript-eslint/naming-convention -- Module keys use hyphens by design */
|
||||
|
||||
type DBTModule =
|
||||
| "mindfulness"
|
||||
| "distress-tolerance"
|
||||
| "emotion-regulation"
|
||||
| "interpersonal-effectiveness";
|
||||
|
||||
interface DBTExercise {
|
||||
completed: boolean;
|
||||
module: DBTModule;
|
||||
name: string;
|
||||
reflection: string | null;
|
||||
}
|
||||
|
||||
const moduleLabels: Record<DBTModule, string> = {
|
||||
"distress-tolerance": "Distress Tolerance",
|
||||
"emotion-regulation": "Emotion Regulation",
|
||||
"interpersonal-effectiveness": "Interpersonal Effectiveness",
|
||||
"mindfulness": "Mindfulness",
|
||||
};
|
||||
|
||||
const moduleColors: Record<DBTModule, string> = {
|
||||
"distress-tolerance": "#8A6BAE",
|
||||
"emotion-regulation": "#A8577E",
|
||||
"interpersonal-effectiveness": "#5A8A7A",
|
||||
"mindfulness": "#6B8AAE",
|
||||
};
|
||||
|
||||
const exercises: Array<DBTExercise> = [
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Observing",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Mental Body Scan",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Internal vs. External Events",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Describe Your Emotions",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Mental Noting",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Thought Defusion",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Mindful Breathing",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Wise Mind",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Negative Judgments",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "mindfulness",
|
||||
name: "Letting Go of Judgments",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Cost Benefit Analysis",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Recognizing Emotional Crisis",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Distracting Activities",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "RESISTT Technique",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Grounding",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Willingness vs Willfulness",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Radical Acceptance",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Self Soothing",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "Actions Based on Values",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "distress-tolerance",
|
||||
name: "TIPP",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Recognizing Your Emotions",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Being Effective",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Emotions & Physical Vulnerability",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Emotions & Cognitive Vulnerability",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Self Validation",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Myths About Emotions",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Emotion Exposure",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Balancing Emotional Urges",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Problem Solving",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "emotion-regulation",
|
||||
name: "Coping Ahead",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Communication Styles",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Skills of Assertiveness (Part 1)",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Skills of Assertiveness (Part 2)",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Assertiveness Scripts and Interpersonal Rights",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Listening and Validation",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Barriers to Interpersonal Effectiveness",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Trust in Relationships",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Interpersonal Boundaries",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Modulating Intensity",
|
||||
reflection: null,
|
||||
},
|
||||
{
|
||||
completed: false,
|
||||
module: "interpersonal-effectiveness",
|
||||
name: "Resistance and Conflict",
|
||||
reflection: null,
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Filters exercises by module.
|
||||
* @param module - The module to filter by.
|
||||
* @returns The exercises in the given module.
|
||||
*/
|
||||
const exercisesByModule = (module: DBTModule): Array<DBTExercise> => {
|
||||
return exercises.filter((exercise) => {
|
||||
return exercise.module === module;
|
||||
});
|
||||
};
|
||||
|
||||
const modules: Array<DBTModule> = [
|
||||
"mindfulness",
|
||||
"distress-tolerance",
|
||||
"emotion-regulation",
|
||||
"interpersonal-effectiveness",
|
||||
];
|
||||
|
||||
export type { DBTModule, DBTExercise };
|
||||
export { exercises, exercisesByModule, moduleColors, moduleLabels, modules };
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Personality test result data.
|
||||
* @file
|
||||
* @copyright Naomi Carrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/* eslint-disable stylistic/max-len -- Result strings are intentionally long */
|
||||
|
||||
interface PersonalityTest {
|
||||
details: string | null;
|
||||
id: string;
|
||||
name: string;
|
||||
result: string | null;
|
||||
url: string;
|
||||
}
|
||||
|
||||
const personalityTests: Array<PersonalityTest> = [
|
||||
{
|
||||
details: "71% Introverted · 78% Intuitive · 94% Feeling · 51% Prospecting · 99% Turbulent",
|
||||
id: "mbti",
|
||||
name: "Myers-Briggs Type Indicator (MBTI)",
|
||||
result: "INFP-T (Mediator)",
|
||||
url: "https://www.16personalities.com/",
|
||||
},
|
||||
{
|
||||
details: "Neuroticism facets — Anxiety: 15, Anger: 14, Depression: 13, Self-Consciousness: 19, Immoderation: 17, Vulnerability: 17 · Extraversion facets — Friendliness: 14, Gregariousness: 5, Assertiveness: 16, Activity Level: 14, Excitement-Seeking: 12, Cheerfulness: 14 · Openness facets — Imagination: 19, Artistic Interests: 20, Emotionality: 19, Adventurousness: 9, Intellect: 19, Liberalism: 19 · Agreeableness facets — Trust: 17, Morality: 20, Altruism: 20, Cooperation: 19, Modesty: 18, Sympathy: 20 · Conscientiousness facets — Self-Efficacy: 19, Orderliness: 7, Dutifulness: 19, Achievement-Striving: 20, Self-Discipline: 12, Cautiousness: 7",
|
||||
id: "big-five",
|
||||
name: "Big Five / OCEAN",
|
||||
result: "Neuroticism: 95 · Extraversion: 75 · Openness: 105 · Agreeableness: 114 · Conscientiousness: 84",
|
||||
url: "https://bigfive-test.com/",
|
||||
},
|
||||
{
|
||||
details: "Motivated by the desire to be independent and to take charge of themselves and others. Assertive, passionate, and vigorous.",
|
||||
id: "enneagram",
|
||||
name: "Enneagram",
|
||||
result: "Type 8 — The Challenger",
|
||||
url: "https://www.truity.com/test/enneagram-personality-test",
|
||||
},
|
||||
{
|
||||
details: "Words of Affirmation: 37% · Quality Time: ~23% · Physical Touch: ~18% · Acts of Service: ~13% · Receiving Gifts: ~9% (remaining four estimated from bar chart)",
|
||||
id: "love-languages",
|
||||
name: "Love Languages",
|
||||
result: "Words of Affirmation (37%)",
|
||||
url: "https://5lovelanguages.com/quizzes/love-language",
|
||||
},
|
||||
{
|
||||
details: "Romantic: Anxious-Preoccupied (Anxiety: 57/High · Avoidance: 22/Low) · Mother caregiver: Dismissive-Avoidant (Avoidance: 4.5/Medium · Anxiety: 3.7/Medium) · Father caregiver: Fearful-Avoidant (Avoidance: 7.0/Very High · Anxiety: 6.7/Very High) · At work: Anxious-Preoccupied (Avoidance: 3.3/Medium · Anxiety: 5.0/High) · Self-Esteem: Low (Self-Liking: Low · Self-Competence: Medium) · Emotion Regulation: Medium (Strategies: High · Clarity: Low · Goals: High · Impulse: Low · Nonacceptance: Medium)",
|
||||
id: "attachment",
|
||||
name: "Attachment Style",
|
||||
result: "Anxious-Preoccupied",
|
||||
url: "https://www.attachmentproject.com/attachment-style-quiz/",
|
||||
},
|
||||
{
|
||||
details: "Rigger: 94% · Sadist: 84% · Master/Mistress: 80% · Dominant: 73% · Experimentalist: 72% · Non-monogamist: 67% · Rope bunny: 65% · Primal (Hunter): 60% · Owner: 54% · Brat tamer: 44% · Vanilla: 43% · Degrader: 40% · Switch: 38% · Primal (Prey): 29% · Exhibitionist: 24% · Submissive: 22% · Slave: 15% · Pet: 13% · Voyeur: 13% · Daddy/Mommy: 13% · Ageplayer: 0% · Little: 0%",
|
||||
id: "bdsm",
|
||||
name: "BDSM Test",
|
||||
result: "Rigger (94%)",
|
||||
url: "https://bdsmtest.org/",
|
||||
},
|
||||
{
|
||||
details: "Lawful Good: 25 · Neutral Good: 25 · Chaotic Good: 30 · Lawful Neutral: 19 · True Neutral: 19 · Chaotic Neutral: 24 · Lawful Evil: 7 · Neutral Evil: 7 · Chaotic Evil: 12 · Law/Chaos: Law 7 / Neutral 7 / Chaos 12 · Good/Evil: Good 18 / Neutral 12 / Evil 0",
|
||||
id: "dnd-alignment",
|
||||
name: "D&D Alignment",
|
||||
result: "Chaotic Good",
|
||||
url: "https://easydamus.com/alignmenttest.html",
|
||||
},
|
||||
{
|
||||
details: null,
|
||||
id: "moral-foundations",
|
||||
name: "Moral Foundations",
|
||||
result: null,
|
||||
url: "https://moralfoundations.org/",
|
||||
},
|
||||
{
|
||||
details: "Economic Left/Right: -8.63 · Social Libertarian/Authoritarian: -8.46",
|
||||
id: "political-compass",
|
||||
name: "Political Compass",
|
||||
result: "Libertarian Left (-8.63, -8.46)",
|
||||
url: "https://www.politicalcompass.org/",
|
||||
},
|
||||
{
|
||||
details: "Scores on 1–5 scale · Machiavellianism: 1.7 (1st percentile) · Narcissism: 2.2 (31st percentile) · Psychopathy: 2.0 (22nd percentile)",
|
||||
id: "dark-triad",
|
||||
name: "Dark Triad",
|
||||
result: "Machiavellianism: 1.7 · Narcissism: 2.2 · Psychopathy: 2.0",
|
||||
url: "https://openpsychometrics.org/tests/SD3/",
|
||||
},
|
||||
{
|
||||
details: "1. Honesty · 2. Kindness · 3. Creativity · 4. Curiosity · 5. Love · 6. Love of Learning · 7. Social Intelligence · 8. Leadership · 9. Judgment · 10. Humility · 11. Bravery · 12. Fairness · 13. Forgiveness · 14. Zest · 15. Humor · 16. Perspective · 17. Teamwork · 18. Gratitude · 19. Appreciation of Beauty & Excellence · 20. Hope · 21. Spirituality · 22. Perseverance · 23. Self-Regulation · 24. Prudence",
|
||||
id: "via-character-strengths",
|
||||
name: "VIA Character Strengths",
|
||||
result: "Honesty · Kindness · Creativity · Curiosity · Love",
|
||||
url: "https://www.viacharacter.org/survey/account/register",
|
||||
},
|
||||
];
|
||||
|
||||
export type { PersonalityTest };
|
||||
export { personalityTests };
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Playroom template data.
|
||||
* @file
|
||||
* @copyright Naomi Carrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
interface PlayroomTemplate {
|
||||
blankAlt: string;
|
||||
blankUrl: string;
|
||||
completedAlt: string;
|
||||
completedUrl: string;
|
||||
description: string | null;
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
const playroomTemplates: Array<PlayroomTemplate> = [
|
||||
{
|
||||
blankAlt: "A 3×3 alignment chart meme applying the D&D lawful/neutral/chaotic and top/switch/bottom axes to bedroom dynamics. The nine categories and their descriptors are: Lawful Top — knows what they want, big strap/dick energy, will cook food after; Neutral Top — spouse material, wines and dines you, will get to it as soon as you're home; Chaotic Top — way into dirty talk, keyboard smasher, wants to order pizza after; Lawful Switch — sex toy hoarder, \"making you cum is my job\", secretly wants to bottom all the time; True Switch — kinkier than you, low-key horny 24/7, aftercare monarch; Chaotic Switch — brat 24/7, always flirty, might fall asleep during sex; Lawful Bottom — desperate to please, will call you daddy/mommy, will cook food after, naked; Neutral Bottom — just happy to be topped, very soft, will take nap after; Chaotic Bottom — goblin, makes jokes during sex, demands candy after.",
|
||||
blankUrl: "https://cdn.nhcarrigan.com/personality/playroom/alignment-chart-top-switch-bottom-blank.png",
|
||||
completedAlt: "A 3×3 alignment chart meme applying the D&D lawful/neutral/chaotic and top/switch/bottom axes to bedroom dynamics. Several items are highlighted in pink. Lawful Top — knows what they want ✦highlighted, big strap/dick energy, will cook food after; Neutral Top — spouse material ✦highlighted, wines and dines you ✦highlighted, will fuck you as soon as you get home ✦highlighted; Chaotic Top — way into dirty talk, keyboard smasher, wants to order pizza after ✦highlighted; Lawful Switch — sex toy hoarder ✦highlighted, \"making you cum is my job\" ✦highlighted, secretly wants to bottom all the time; True Switch — kinkier than you, low-key horny 24/7, aftercare monarch; Chaotic Switch — brat 24/7, always flirty ✦highlighted, might fall asleep during sex; Lawful Bottom — desperate to please, will call you daddy/mommy, will cook food after naked; Neutral Bottom — just happy to be topped, very soft, will take nap after; Chaotic Bottom — goblin, makes jokes during sex, demands candy after.",
|
||||
completedUrl: "https://cdn.nhcarrigan.com/personality/playroom/alignment-chart-top-switch-bottom-naomi.png",
|
||||
description: "The classic top/switch/bottom alignment chart - which traits hit a little too close to home~",
|
||||
id: "alignment-chart-top-switch-bottom",
|
||||
name: "Top/Switch/Bottom Alignment Chart",
|
||||
},
|
||||
];
|
||||
|
||||
export type { PlayroomTemplate };
|
||||
export { playroomTemplates };
|
||||
@@ -0,0 +1,715 @@
|
||||
/**
|
||||
* Values card sort data.
|
||||
* @file
|
||||
* @copyright Naomi Carrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
/* eslint-disable max-lines -- Data file requires many entries */
|
||||
/* eslint-disable stylistic/max-len -- Reflection strings are intentionally long */
|
||||
/* eslint-disable @typescript-eslint/naming-convention -- Rating keys use hyphens by design */
|
||||
|
||||
type Rating =
|
||||
| "very-important"
|
||||
| "important"
|
||||
| "neutral"
|
||||
| "unimportant"
|
||||
| "very-unimportant";
|
||||
|
||||
interface Value {
|
||||
description: string;
|
||||
name: string;
|
||||
number: number;
|
||||
rating: Rating;
|
||||
reflection: string;
|
||||
}
|
||||
|
||||
const ratingLabels: Record<Rating, string> = {
|
||||
"important": "⭐ Important",
|
||||
"neutral": "➖ Neutral",
|
||||
"unimportant": "👎 Unimportant",
|
||||
"very-important": "⭐⭐ Very Important",
|
||||
"very-unimportant": "👎👎 Very Unimportant",
|
||||
};
|
||||
|
||||
const values: Array<Value> = [
|
||||
{
|
||||
description: "to be accepted as I am",
|
||||
name: "Acceptance",
|
||||
number: 1,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I spent so long hiding parts of myself - the schizophrenia, being trans, the big messy emotions. Being accepted *as I am*, not as the sanitised version of me? That's everything haha~",
|
||||
},
|
||||
{
|
||||
description: "to be accurate in my opinions and beliefs",
|
||||
name: "Accuracy",
|
||||
number: 2,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I don't hate being wrong - I hate giving wrong information to other people lol. If I'm gonna say things I want them to be grounded in something *real*. Spreading misinformation feels gross - and in community work, accuracy genuinely matters~",
|
||||
},
|
||||
{
|
||||
description: "to have important accomplishments",
|
||||
name: "Achievement",
|
||||
number: 3,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I taught myself to code from scratch during a pandemic and turned it into a career. I have a company, a community, a life I *built*. I need to be able to look back and see things I actually did~",
|
||||
},
|
||||
{
|
||||
description: "to have new and exciting experiences",
|
||||
name: "Adventure",
|
||||
number: 4,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I love new experiences but I need a solid foundation first lol. Adventure is great when it comes from a place of stability, not chaos.",
|
||||
},
|
||||
{
|
||||
description: "to be physically attractive",
|
||||
name: "Attractiveness",
|
||||
number: 5,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"It's nice I guess? But it's just not something that drives me. I care a lot more about other things haha.",
|
||||
},
|
||||
{
|
||||
description: "to be in charge of and responsible for others",
|
||||
name: "Authority",
|
||||
number: 6,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I run communities and a company so I kinda have to care about this lol. It's not about power for me though - it's about being in a position where I can actually *do* things and protect people.",
|
||||
},
|
||||
{
|
||||
description: "to be self-determined and independent",
|
||||
name: "Autonomy",
|
||||
number: 7,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I spent too much of my life bound to others' will with no autonomy of my own. Making my own choices, living my own life on my own terms - this is *deep* for me, and something I protect fiercely~",
|
||||
},
|
||||
{
|
||||
description: "to appreciate beauty around me",
|
||||
name: "Beauty",
|
||||
number: 8,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I appreciate beautiful things - music, code, design. But when it comes to *people* being beautiful... I really don't care lol. \"Oh she's cute\" is about it for me haha~",
|
||||
},
|
||||
{
|
||||
description: "to take care of others",
|
||||
name: "Caring",
|
||||
number: 9,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"This is just who I am. I can't turn it off haha. I see someone struggling and I *have* to help. It's exhausting sometimes but I wouldn't change it~",
|
||||
},
|
||||
{
|
||||
description: "to take on difficult tasks and problems",
|
||||
name: "Challenge",
|
||||
number: 10,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"I love the *reward* of finishing something hard - that feeling is great! But I don't seek out struggle for its own sake and competition is just... not my thing lol. The challenge itself isn't the point~",
|
||||
},
|
||||
{
|
||||
description: "to have a life full of change and variety",
|
||||
name: "Change",
|
||||
number: 11,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"I've always struggled with change, like a lot - it's something I've genuinely fought against my whole life. My brain needs anchors. I need *stability* so I can do good work and feel safe~",
|
||||
},
|
||||
{
|
||||
description: "to have a pleasant and comfortable life",
|
||||
name: "Comfort",
|
||||
number: 12,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I deal with enough discomfort from my body and brain on a daily basis lol. And this is genuinely the first time in my life I've *had* a comfortable life - I know now how much it matters~",
|
||||
},
|
||||
{
|
||||
description: "to make enduring, meaningful commitments",
|
||||
name: "Commitment",
|
||||
number: 13,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"One of my biggest fears is abandonment. So when I commit to something - or someone - I mean it *completely*. And I need the same back. Half-hearted commitments are worse than none~",
|
||||
},
|
||||
{
|
||||
description: "to feel and act on concern for others",
|
||||
name: "Compassion",
|
||||
number: 14,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Other people's pain *lands* on me. I feel it. I can't just observe suffering and do nothing - it physically doesn't work that way for me haha.",
|
||||
},
|
||||
{
|
||||
description: "to make a lasting contribution in the world",
|
||||
name: "Contribution",
|
||||
number: 15,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I want to make a difference but I think I express this more through caring and service than through \"leaving a legacy\" specifically. The impact matters more than the permanence.",
|
||||
},
|
||||
{
|
||||
description: "to work collaboratively with others",
|
||||
name: "Cooperation",
|
||||
number: 16,
|
||||
rating: "neutral",
|
||||
reflection:
|
||||
"I can work collaboratively or independently and I'm honestly fine either way. Context-dependent for me lol.",
|
||||
},
|
||||
{
|
||||
description: "to be considerate and polite toward others",
|
||||
name: "Courtesy",
|
||||
number: 17,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Basic human decency!! It costs nothing to be kind and it makes *such* a difference. I have very little patience for unnecessary rudeness~",
|
||||
},
|
||||
{
|
||||
description: "to have new and original ideas",
|
||||
name: "Creativity",
|
||||
number: 18,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I enjoy being creative but it's not a core need for me the way connection or honesty is. Nice to have, not can't-live-without.",
|
||||
},
|
||||
{
|
||||
description: "to be reliable and trustworthy",
|
||||
name: "Dependability",
|
||||
number: 19,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"If I say I'll do something, I do it. My word means something to me. I want people to be able to count on me - and I need people I can count on in return~",
|
||||
},
|
||||
{
|
||||
description: "to carry out my duties and obligations",
|
||||
name: "Duty",
|
||||
number: 20,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I take my obligations seriously even when it's hard. My community, my team, my mentees depend on me. I *show up*. That matters to me~",
|
||||
},
|
||||
{
|
||||
description: "to live in harmony with the environment",
|
||||
name: "Ecology",
|
||||
number: 21,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I do very much care about the environment - it's just not an issue I *champion* the way I do with inclusivity. It matters, I just express it differently~",
|
||||
},
|
||||
{
|
||||
description: "to have a life full of thrills and stimulation",
|
||||
name: "Excitement",
|
||||
number: 22,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I love thrilling stuff! But I need it balanced with stability lol. Excitement is great, constant stimulation is exhausting. Important but not *core*.",
|
||||
},
|
||||
{
|
||||
description: "to be loyal and true in relationships",
|
||||
name: "Faithfulness",
|
||||
number: 23,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Loyalty is *everything* to me. I've been abandoned before and it broke me. Being faithful - staying, showing up, not running - is how I love and how I need to be loved.",
|
||||
},
|
||||
{
|
||||
description: "to be known and recognised",
|
||||
name: "Fame",
|
||||
number: 24,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"Okay I won't lie, being recognised for my work feels good haha. Not in an ego way, more like... validation that what I'm doing *matters*. Important but not vital.",
|
||||
},
|
||||
{
|
||||
description: "to have a happy, loving family",
|
||||
name: "Family",
|
||||
number: 25,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"My sister and my adoptive family. My cats and dogs. The communities I've built. Chosen or biological, family is *everything* to me~",
|
||||
},
|
||||
{
|
||||
description: "to be physically fit and strong",
|
||||
name: "Fitness",
|
||||
number: 26,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"My body is complicated and dealing with it is already exhausting lol. Chasing physical fitness just isn't where my energy goes - I have bigger fish to fry~",
|
||||
},
|
||||
{
|
||||
description: "to adjust to new circumstances easily",
|
||||
name: "Flexibility",
|
||||
number: 27,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I need to be able to adapt, especially with my health being unpredictable. Important practically but not a *deep value* the way others are.",
|
||||
},
|
||||
{
|
||||
description: "to be forgiving of others",
|
||||
name: "Forgiveness",
|
||||
number: 28,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Holding onto anger takes energy I don't have. I'm a big believer in Assume Good Faith and Hanlon's Razor - most people aren't malicious, they're just messy. And I've needed forgiveness myself, so I can't ask for grace if I'm not willing to give it~",
|
||||
},
|
||||
{
|
||||
description: "to have close, supportive friends",
|
||||
name: "Friendship",
|
||||
number: 29,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Deep friendships - people who *know* me and stay anyway - are one of the things that makes life worth living~",
|
||||
},
|
||||
{
|
||||
description: "to play and have fun",
|
||||
name: "Fun",
|
||||
number: 30,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I work SO hard. The fun stuff - gaming, laughing, doing something just because it's *delightful* - that's not frivolous, it's necessary. I protect my fun time.",
|
||||
},
|
||||
{
|
||||
description: "to give what I have to others",
|
||||
name: "Generosity",
|
||||
number: 31,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I give a lot - my time, energy, knowledge. Sometimes to a fault haha. But I genuinely want people to have what they need and I'll give it if I can~",
|
||||
},
|
||||
{
|
||||
description: "to act in a manner that is true to who I am",
|
||||
name: "Genuineness",
|
||||
number: 32,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"This is *hard* for me honestly - I sometimes lose myself in other people. But being real, not performing, being actually me - that matters enormously. Still working on it~",
|
||||
},
|
||||
{
|
||||
description: "to seek and obey the will of God",
|
||||
name: "God's Will",
|
||||
number: 33,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"I'm Wiccan and my goddess is the Moon Goddess - but that's not how my faith works lol. There's no \"seek and obey her will\" - it's a relationship, not a commandment~",
|
||||
},
|
||||
{
|
||||
description: "to keep changing and growing",
|
||||
name: "Growth",
|
||||
number: 34,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Stagnation genuinely scares me more than change does. I want to always be *better* - at my work, at loving people, at understanding myself. Standing still feels like dying.",
|
||||
},
|
||||
{
|
||||
description: "to be physically well and healthy",
|
||||
name: "Health",
|
||||
number: 35,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I care about my health but my relationship with it is complicated lol. I have a lot of conditions and managing them is already a full-time job. It matters but it's not the *centre* of my values.",
|
||||
},
|
||||
{
|
||||
description: "to be helpful to others",
|
||||
name: "Helpfulness",
|
||||
number: 36,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"This is basically my whole personality haha. Being useful to people, solving their problems, making things easier for them - it gives my life meaning~",
|
||||
},
|
||||
{
|
||||
description: "to be honest and truthful",
|
||||
name: "Honesty",
|
||||
number: 37,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I can't *stand* dishonesty - in others or in myself. Even when honesty is uncomfortable it's always better than the alternative. Non-negotiable for me.",
|
||||
},
|
||||
{
|
||||
description: "to maintain a positive and optimistic outlook",
|
||||
name: "Hope",
|
||||
number: 38,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"With everything I deal with mentally... hope isn't a luxury, it's a *survival tool*. If I stop believing things can get better, I'm done. I choose hope deliberately~",
|
||||
},
|
||||
{
|
||||
description: "to be modest and unassuming",
|
||||
name: "Humility",
|
||||
number: 39,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I try to stay humble - I don't think I'm better than anyone else and I want to stay that way. Important but it doesn't define me the way some others do.",
|
||||
},
|
||||
{
|
||||
description: "to see the humorous side of myself and the world",
|
||||
name: "Humor",
|
||||
number: 40,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"Life is genuinely more bearable when you can laugh lol. I love humour but it's not a *core driver* for me.",
|
||||
},
|
||||
{
|
||||
description: "to be free from dependence on others",
|
||||
name: "Independence",
|
||||
number: 41,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I've had periods of my life where I *couldn't* be independent. Having autonomy now feels precious and I protect it fiercely.",
|
||||
},
|
||||
{
|
||||
description: "to work hard and well at my life tasks",
|
||||
name: "Industry",
|
||||
number: 42,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"I work hard but I don't value *hard work for its own sake* lol. I work because things matter, not because I think suffering through effort is virtuous~",
|
||||
},
|
||||
{
|
||||
description: "to experience personal peace",
|
||||
name: "Inner Peace",
|
||||
number: 43,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"My brain is *loud* lol. Genuinely loud. Finding actual quiet peace is rare and incredibly valuable when it happens. Something I'm always working toward~",
|
||||
},
|
||||
{
|
||||
description: "to share my innermost experiences with others",
|
||||
name: "Intimacy",
|
||||
number: 44,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I need deep connection - to be really *known* by the people close to me. Surface relationships feel hollow. I want to share the messy inner stuff and have someone still be there.",
|
||||
},
|
||||
{
|
||||
description: "to promote fair and equal treatment for all",
|
||||
name: "Justice",
|
||||
number: 45,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I'm trans. I've seen what happens when systems don't treat people fairly. Justice isn't abstract to me - it's *personal*. I'll fight for it~",
|
||||
},
|
||||
{
|
||||
description: "to learn and contribute valuable knowledge",
|
||||
name: "Knowledge",
|
||||
number: 46,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I *love* learning so much lol. Six years across three university programmes just because I wanted to know things. I'll never stop. Sharing what I know is even better~",
|
||||
},
|
||||
{
|
||||
description: "to take time to relax and enjoy",
|
||||
name: "Leisure",
|
||||
number: 47,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"Rest is important, especially with my health. But leisure as a *value* rather than a necessity? Important, not essential.",
|
||||
},
|
||||
{
|
||||
description: "to be loved by those close to me",
|
||||
name: "Loved",
|
||||
number: 48,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"This is a deep need honestly. I need to *feel* loved - told, shown, demonstrated. After everything with my father... being loved and *knowing* it matters enormously.",
|
||||
},
|
||||
{
|
||||
description: "to give love to others",
|
||||
name: "Loving",
|
||||
number: 49,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Giving love is almost easier for me than receiving it lol. I pour into the people I care about constantly. It's one of the most natural things about me~",
|
||||
},
|
||||
{
|
||||
description: "to be competent in my everyday activities",
|
||||
name: "Mastery",
|
||||
number: 50,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I like being good at things but I don't need to be the *best* at everything. Competence matters to me more than mastery per se.",
|
||||
},
|
||||
{
|
||||
description: "to live conscious and mindful of the present moment",
|
||||
name: "Mindfulness",
|
||||
number: 51,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"With ADHD my brain just doesn't *work* that way lol. Living present and mindful sounds lovely in theory but it's just not really my thing in practice.",
|
||||
},
|
||||
{
|
||||
description: "to avoid excesses and find a middle ground",
|
||||
name: "Moderation",
|
||||
number: 52,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"Lmfao no. I do everything at full intensity. Moderation is not really in my vocabulary haha. I'd rather manage my extremes than try to be moderate~",
|
||||
},
|
||||
{
|
||||
description: "to have one close, loving relationship",
|
||||
name: "Monogamy",
|
||||
number: 53,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"I'm poly lol. One relationship was never really the framework for me~",
|
||||
},
|
||||
{
|
||||
description: "to question and challenge authority and norms",
|
||||
name: "Non-Conformity",
|
||||
number: 54,
|
||||
rating: "neutral",
|
||||
reflection:
|
||||
"I don't conform just to conform *or* rebel just to rebel lol. I do what I think is right regardless. The conforming/non-conforming axis just isn't how I think about it.",
|
||||
},
|
||||
{
|
||||
description: "to take care of and nurture others",
|
||||
name: "Nurturance",
|
||||
number: 55,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Taking care of others, making them feel safe and loved - this is deeply *me*. I'm the person who checks if you've eaten, who sends the supportive message at 2am~",
|
||||
},
|
||||
{
|
||||
description: "to be open to new experiences, ideas, and options",
|
||||
name: "Openness",
|
||||
number: 56,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"New ideas, new perspectives, new options - yes please. I *hate* feeling closed off or stuck. Being open is how I keep growing.",
|
||||
},
|
||||
{
|
||||
description: "to have a life that is well-ordered and organised",
|
||||
name: "Order",
|
||||
number: 57,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I function better when things are organised but I don't have the energy to maintain perfect order everywhere lol. Important as a tool, not as a core value.",
|
||||
},
|
||||
{
|
||||
description: "to have deep feelings about ideas, activities, or people",
|
||||
name: "Passion",
|
||||
number: 58,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"I *have* a lot of passion - that's just a fact haha. But I don't think it's something I need to aspire to or value as a trait - it's already there whether I want it or not lol. Being passionate isn't a goal, it's just how I'm wired~",
|
||||
},
|
||||
{
|
||||
description: "to feel good",
|
||||
name: "Pleasure",
|
||||
number: 59,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"Feeling good is nice! But it's not something I *chase* or build my life around. Nice when it happens~",
|
||||
},
|
||||
{
|
||||
description: "to be well-liked by many people",
|
||||
name: "Popularity",
|
||||
number: 60,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I don't actually seek broad popularity haha. What I want is to be memorable and meaningful to the few people I'm actually close to - their affirmation is what matters~",
|
||||
},
|
||||
{
|
||||
description: "to have control over others",
|
||||
name: "Power",
|
||||
number: 61,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"Hard no lol. Zero interest in controlling other people. Authority for practical purposes is different - *power* as a goal is just not me~",
|
||||
},
|
||||
{
|
||||
description: "to have meaning and direction in my life",
|
||||
name: "Purpose",
|
||||
number: 62,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Without purpose I spiral. I need to feel like what I'm doing *matters* - to me, to other people, somehow. It's what gets me out of bed~",
|
||||
},
|
||||
{
|
||||
description: "to be guided by reason and logic",
|
||||
name: "Rationality",
|
||||
number: 63,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"My emotions are *intense* - like a lot lol. So having rationality as an anchor matters. When my brain is being chaotic, being able to reason through things keeps me grounded.",
|
||||
},
|
||||
{
|
||||
description: "to see and act realistically and practically",
|
||||
name: "Realism",
|
||||
number: 64,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I have big feelings and big dreams but I need to stay *grounded*. Magical thinking is fun until it leads you off a cliff haha. I want to see things clearly even when it's harder.",
|
||||
},
|
||||
{
|
||||
description: "to make and carry out responsible decisions",
|
||||
name: "Responsibility",
|
||||
number: 65,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"Okay so. I *am* responsible in practice because I have spent years engineering systems and reminders and structures to *make* myself responsible lol. Left to my own devices? I would not do the things. It's scaffolding, not a value~",
|
||||
},
|
||||
{
|
||||
description: "to take risks and chances",
|
||||
name: "Risk",
|
||||
number: 66,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"Stability is everything to me and risk threatens that. I'm not a risk-taker - I'd rather have something solid than chase uncertain rewards lol.",
|
||||
},
|
||||
{
|
||||
description: "to have intense, exciting love in my life",
|
||||
name: "Romance",
|
||||
number: 67,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I love *love* haha. Intense, deep, real love. The kind that feels like finding home. I don't do half-measures with this stuff~",
|
||||
},
|
||||
{
|
||||
description: "to be safe and secure",
|
||||
name: "Safety",
|
||||
number: 68,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Safety isn't just physical for me - it's emotional, mental. I spent time not feeling safe in my own head. Having security in my life and relationships is *non-negotiable*.",
|
||||
},
|
||||
{
|
||||
description: "to accept myself as I am",
|
||||
name: "Self-Acceptance",
|
||||
number: 69,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Honestly the hardest one on this list lol. Accepting *myself* - the chaos, the mental health stuff, the intensity - is ongoing work. But I know it matters enormously~",
|
||||
},
|
||||
{
|
||||
description: "to be disciplined in my own actions",
|
||||
name: "Self-Control",
|
||||
number: 70,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"With ADHD and BPD... lol. I try but I'm not gonna beat myself up about not being perfectly controlled. I'd rather manage myself with compassion than chase self-control as a virtue~",
|
||||
},
|
||||
{
|
||||
description: "to feel good about myself",
|
||||
name: "Self-Esteem",
|
||||
number: 71,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I want to feel good about myself but it's complicated lol. It's important but it's not a goal I can just *decide* to have - it's more of a byproduct of doing things that matter.",
|
||||
},
|
||||
{
|
||||
description: "to have a deep and honest understanding of myself",
|
||||
name: "Self-Knowledge",
|
||||
number: 72,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I do a LOT of therapy and reflection lol. Understanding *why* I am the way I am - the patterns, the fears, the BPD stuff - is how I take care of myself. Genuinely so curious about myself~",
|
||||
},
|
||||
{
|
||||
description: "to be of service to others",
|
||||
name: "Service",
|
||||
number: 73,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I built a career on this. Being of service to others isn't just what I *do* - it's who I am~",
|
||||
},
|
||||
{
|
||||
description: "to have an active and satisfying sex life",
|
||||
name: "Sexuality",
|
||||
number: 74,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"I crave *intimacy* deeply - that's why intimacy is very important to me. But sexual intimacy specifically is a different thing. The connection matters enormously, the sex part... not so much lol.",
|
||||
},
|
||||
{
|
||||
description: "to live life simply, with minimal needs",
|
||||
name: "Simplicity",
|
||||
number: 75,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"My life, work, and brain are all deeply complex lol. Simplicity is nice in theory but it's just not realistic for how I live and what I do~",
|
||||
},
|
||||
{
|
||||
description: "to have time and space where I can be apart from others",
|
||||
name: "Solitude",
|
||||
number: 76,
|
||||
rating: "unimportant",
|
||||
reflection:
|
||||
"I need people. Being alone too long genuinely makes me worse, not better lol. I recharge through connection, not solitude.",
|
||||
},
|
||||
{
|
||||
description: "to grow and mature spiritually",
|
||||
name: "Spirituality",
|
||||
number: 77,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"Just not part of my framework. Spiritual growth as a concept doesn't really resonate with me haha.",
|
||||
},
|
||||
{
|
||||
description: "to have a life that stays fairly consistent",
|
||||
name: "Stability",
|
||||
number: 78,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"Stability is what lets me function. Predictability, consistency, things I can count on - these aren't boring to me, they're *healing*. My brain needs anchors~",
|
||||
},
|
||||
{
|
||||
description: "to accept and respect those who differ from me",
|
||||
name: "Tolerance",
|
||||
number: 79,
|
||||
rating: "neutral",
|
||||
reflection:
|
||||
"I already *am* accepting and welcoming of people who are different - that's just baseline for me, not an aspiration lol. But I am very intolerant of intolerance. So \"tolerance\" as a blanket value doesn't quite capture how I actually operate~",
|
||||
},
|
||||
{
|
||||
description: "to follow respected patterns of the past",
|
||||
name: "Tradition",
|
||||
number: 80,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"Tradition for its own sake means nothing to me lol. I care about what *works* and what's right, not about doing things because they've always been done that way~",
|
||||
},
|
||||
{
|
||||
description: "to live a morally pure and excellent life",
|
||||
name: "Virtue",
|
||||
number: 81,
|
||||
rating: "important",
|
||||
reflection:
|
||||
"I want to be a good person and live with integrity. But \"morally pure\" feels like a bit much lol - I'm messy and human and I think that's okay. Important with nuance.",
|
||||
},
|
||||
{
|
||||
description: "to have plenty of money",
|
||||
name: "Wealth",
|
||||
number: 82,
|
||||
rating: "very-unimportant",
|
||||
reflection:
|
||||
"I want enough to live comfortably and buy a house someday, but I'm not chasing money lol. Wealth for its own sake is just not a value of mine~",
|
||||
},
|
||||
{
|
||||
description: "to work to promote peace in the world",
|
||||
name: "World Peace",
|
||||
number: 83,
|
||||
rating: "very-important",
|
||||
reflection:
|
||||
"I know it's idealistic haha but I genuinely believe in a better world. I try to contribute to it every day through my work, my community, the choices I make~",
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Filters the values array by rating.
|
||||
* @param rating - The rating to filter by.
|
||||
* @returns The values matching the given rating.
|
||||
*/
|
||||
const valuesByRating = (rating: Rating): Array<Value> => {
|
||||
return values.filter((v) => {
|
||||
return v.rating === rating;
|
||||
});
|
||||
};
|
||||
|
||||
export type { Rating, Value };
|
||||
export { ratingLabels, values, valuesByRating };
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
/// <reference types="astro/client" />
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
interface Props {
|
||||
title: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
const { title, description = "Naomi Carrigan's personality and values." } =
|
||||
Astro.props;
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content={description} />
|
||||
<title>{title} | Naomi's Personality</title>
|
||||
<script
|
||||
src="https://cdn.nhcarrigan.com/headers/index.js"
|
||||
async
|
||||
defer
|
||||
></script>
|
||||
</head>
|
||||
<body>
|
||||
<slot />
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,170 @@
|
||||
---
|
||||
import Base from "../layouts/Base.astro";
|
||||
import {
|
||||
groupLabels,
|
||||
groups,
|
||||
placementsByGroup,
|
||||
} from "../data/astrology";
|
||||
|
||||
const groupColors = {
|
||||
generational: "#5A6A7A",
|
||||
personal: "#A8577E",
|
||||
points: "#8A7AAE",
|
||||
social: "#8A6BAE",
|
||||
};
|
||||
---
|
||||
|
||||
<Base
|
||||
title="Natal Chart"
|
||||
description="Naomi Carrigan's astrological natal chart placements."
|
||||
>
|
||||
<main>
|
||||
<div class="page-header">
|
||||
<h1>Natal Chart</h1>
|
||||
<a href="/" class="back-link">← Back</a>
|
||||
</div>
|
||||
<p class="intro">
|
||||
My astrological birth chart placements. I'm Wiccan and my relationship
|
||||
with astrology is personal rather than predictive — these placements are
|
||||
part of how I understand myself, not a rulebook.
|
||||
</p>
|
||||
|
||||
{
|
||||
groups.map((group) => {
|
||||
const groupPlacements = placementsByGroup(group);
|
||||
return (
|
||||
<section class="group-section">
|
||||
<h2
|
||||
class="group-heading"
|
||||
style={`color: ${groupColors[group]}; border-color: ${groupColors[group]}`}
|
||||
>
|
||||
{groupLabels[group]}
|
||||
</h2>
|
||||
<div class="placements-grid">
|
||||
{groupPlacements.map((placement) => (
|
||||
<div
|
||||
class="placement-card"
|
||||
style={`border-top-color: ${groupColors[group]}`}
|
||||
>
|
||||
<div class="placement-header">
|
||||
<span class="placement-name">{placement.name}</span>
|
||||
{placement.sign ? (
|
||||
<span
|
||||
class="placement-sign"
|
||||
style={`color: ${groupColors[group]}`}
|
||||
>
|
||||
{placement.sign}
|
||||
{placement.house !== null &&
|
||||
` · House ${placement.house}`}
|
||||
</span>
|
||||
) : (
|
||||
<span class="placement-pending">Coming soon~</span>
|
||||
)}
|
||||
</div>
|
||||
<p class="placement-description">{placement.description}</p>
|
||||
{placement.meaning && (
|
||||
<p class="placement-meaning">{placement.meaning}</p>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
})
|
||||
}
|
||||
</main>
|
||||
</Base>
|
||||
|
||||
<style>
|
||||
.page-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.7;
|
||||
opacity: 0.85;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.group-section {
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.group-heading {
|
||||
font-size: 1.4rem;
|
||||
border-bottom: 2px solid;
|
||||
padding-bottom: 0.5rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.placements-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.placement-card {
|
||||
padding: 1.1rem;
|
||||
background: var(--background);
|
||||
border: 1px solid var(--border);
|
||||
border-top: 3px solid;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.placement-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: space-between;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.placement-name {
|
||||
font-weight: bold;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.placement-sign {
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.placement-pending {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.45;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.placement-description {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.65;
|
||||
line-height: 1.5;
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.placement-meaning {
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,180 @@
|
||||
---
|
||||
import Base from "../layouts/Base.astro";
|
||||
import {
|
||||
exercisesByModule,
|
||||
moduleColors,
|
||||
moduleLabels,
|
||||
modules,
|
||||
} from "../data/dbt";
|
||||
---
|
||||
|
||||
<Base
|
||||
title="DBT Exercises"
|
||||
description="Naomi Carrigan's DBT exercise progress and reflections."
|
||||
>
|
||||
<main>
|
||||
<div class="page-header">
|
||||
<h1>DBT Exercises</h1>
|
||||
<a href="/" class="back-link">← Back</a>
|
||||
</div>
|
||||
<p class="intro">
|
||||
Working through DBT exercises from <a
|
||||
href="https://dialecticalbehaviortherapy.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">dialecticalbehaviortherapy.com</a
|
||||
>. Each module covers a core skill area, with reflections added as I
|
||||
complete them.
|
||||
</p>
|
||||
|
||||
{
|
||||
modules.map((module) => {
|
||||
const moduleExercises = exercisesByModule(module);
|
||||
const completedCount = moduleExercises.filter(
|
||||
(e) => e.completed,
|
||||
).length;
|
||||
return (
|
||||
<section class="module-section">
|
||||
<div
|
||||
class="module-heading"
|
||||
style={`border-color: ${moduleColors[module]}`}
|
||||
>
|
||||
<h2 style={`color: ${moduleColors[module]}`}>
|
||||
{moduleLabels[module]}
|
||||
</h2>
|
||||
<span class="module-progress">
|
||||
{completedCount}/{moduleExercises.length}
|
||||
</span>
|
||||
</div>
|
||||
<div class="exercises-grid">
|
||||
{moduleExercises.map((exercise) => (
|
||||
<div
|
||||
class:list={["exercise-card", { completed: exercise.completed }]}
|
||||
style={`border-top-color: ${moduleColors[module]}`}
|
||||
>
|
||||
<div class="exercise-header">
|
||||
<span class="exercise-status">
|
||||
{exercise.completed ? "✅" : "⬜"}
|
||||
</span>
|
||||
<h3 class="exercise-name">{exercise.name}</h3>
|
||||
</div>
|
||||
{exercise.reflection && (
|
||||
<p class="exercise-reflection">{exercise.reflection}</p>
|
||||
)}
|
||||
{!exercise.reflection && exercise.completed && (
|
||||
<p class="no-reflection">No reflection added yet.</p>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
})
|
||||
}
|
||||
</main>
|
||||
</Base>
|
||||
|
||||
<style>
|
||||
.page-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.7;
|
||||
opacity: 0.85;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.intro a {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.module-section {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.module-heading {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border-bottom: 2px solid;
|
||||
padding-bottom: 0.5rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.module-heading h2 {
|
||||
font-size: 1.5rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.module-progress {
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.exercises-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.exercise-card {
|
||||
padding: 1.1rem;
|
||||
background: var(--background);
|
||||
border: 1px solid var(--border);
|
||||
border-top: 3px solid;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.exercise-card.completed {
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.exercise-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
}
|
||||
|
||||
.exercise-status {
|
||||
font-size: 1rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.exercise-name {
|
||||
font-size: 1rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.exercise-reflection {
|
||||
font-size: 0.88rem;
|
||||
line-height: 1.6;
|
||||
opacity: 0.8;
|
||||
margin: 0.75rem 0 0;
|
||||
}
|
||||
|
||||
.no-reflection {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.45;
|
||||
font-style: italic;
|
||||
margin: 0.75rem 0 0;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,113 @@
|
||||
---
|
||||
import Base from "../layouts/Base.astro";
|
||||
---
|
||||
|
||||
<Base title="Home" description="Naomi Carrigan's personality and values hub.">
|
||||
<main>
|
||||
<h1>Naomi Carrigan</h1>
|
||||
<p>
|
||||
Welcome to my personality hub! Here you'll find a window into who I am -
|
||||
my values, how I'm wired, and what makes me tick.
|
||||
</p>
|
||||
|
||||
<div class="card-grid">
|
||||
<a href="/values" class="nav-card">
|
||||
<h2>💜 Values</h2>
|
||||
<p>
|
||||
My personal values card sort from therapy - what matters most to me
|
||||
and why, in my own words.
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a href="/personality" class="nav-card">
|
||||
<h2>✨ Personality Tests</h2>
|
||||
<p>
|
||||
Results from MBTI, Big Five, Enneagram, love languages, and more.
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a href="/astrology" class="nav-card">
|
||||
<h2>🌙 Natal Chart</h2>
|
||||
<p>
|
||||
My astrological birth chart placements and what they mean to me.
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a href="/dbt" class="nav-card">
|
||||
<h2>🧠 DBT Exercises</h2>
|
||||
<p>
|
||||
Progress and reflections from working through DBT skill modules.
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a href="/playroom" class="nav-card">
|
||||
<h2>🎴 The Playroom</h2>
|
||||
<p>
|
||||
Alignment charts, bingo cards, and social media games - grab the
|
||||
blank and fill it out~
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a href="https://manual.nhcarrigan.com" class="nav-card">
|
||||
<h2>📖 User Manual</h2>
|
||||
<p>
|
||||
How I work, how to communicate with me, and what to expect from me.
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</main>
|
||||
</Base>
|
||||
|
||||
<style>
|
||||
main {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
main > p {
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 2.5rem;
|
||||
color: var(--foreground);
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
.card-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.nav-card {
|
||||
display: block;
|
||||
padding: 2rem;
|
||||
background: var(--background);
|
||||
border: 2px solid var(--border);
|
||||
border-radius: 12px;
|
||||
text-decoration: none;
|
||||
color: var(--foreground);
|
||||
transition:
|
||||
border-color 0.2s,
|
||||
transform 0.2s;
|
||||
}
|
||||
|
||||
.nav-card:hover {
|
||||
border-color: var(--accent);
|
||||
transform: translateY(-3px);
|
||||
}
|
||||
|
||||
.nav-card h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.75rem;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.nav-card p {
|
||||
opacity: 0.8;
|
||||
line-height: 1.6;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
import Base from "../layouts/Base.astro";
|
||||
import { personalityTests } from "../data/personality";
|
||||
---
|
||||
|
||||
<Base
|
||||
title="Personality Tests"
|
||||
description="Naomi Carrigan's personality test results."
|
||||
>
|
||||
<main>
|
||||
<div class="page-header">
|
||||
<h1>Personality Tests</h1>
|
||||
<a href="/" class="back-link">← Back</a>
|
||||
</div>
|
||||
<p class="intro">
|
||||
Results from various personality tests I've taken. Take them with a grain
|
||||
of salt - they're fun snapshots, not definitions!
|
||||
</p>
|
||||
|
||||
<div class="tests-grid">
|
||||
{
|
||||
personalityTests.map((test) => (
|
||||
<div class="test-card">
|
||||
<h2 class="test-name">{test.name}</h2>
|
||||
{test.result ? (
|
||||
<div class="test-result">
|
||||
<p class="result-value">{test.result}</p>
|
||||
{test.details && (
|
||||
<p class="result-details">{test.details}</p>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
<p class="pending">Results coming soon~</p>
|
||||
)}
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</main>
|
||||
</Base>
|
||||
|
||||
<style>
|
||||
.page-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.7;
|
||||
opacity: 0.85;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.tests-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
.test-card {
|
||||
padding: 1.5rem;
|
||||
background: var(--background);
|
||||
border: 2px solid var(--border);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.test-name {
|
||||
font-size: 1.1rem;
|
||||
margin: 0 0 1rem;
|
||||
color: var(--accent);
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.result-value {
|
||||
font-size: 1.4rem;
|
||||
font-weight: bold;
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.result-details {
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.6;
|
||||
opacity: 0.8;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.pending {
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.5;
|
||||
font-style: italic;
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,151 @@
|
||||
---
|
||||
import Base from "../layouts/Base.astro";
|
||||
import { playroomTemplates } from "../data/playroom";
|
||||
---
|
||||
|
||||
<Base
|
||||
title="The Playroom"
|
||||
description="Naomi Carrigan's filled-out social media templates and games."
|
||||
>
|
||||
<main>
|
||||
<div class="page-header">
|
||||
<h1>🎴 The Playroom</h1>
|
||||
<a href="/" class="back-link">← Back</a>
|
||||
</div>
|
||||
<p class="intro">
|
||||
Alignment charts, bingo cards, and all kinds of social media games - my
|
||||
completed results live here. Grab the blank template, fill it out, and
|
||||
make it yours~
|
||||
</p>
|
||||
|
||||
{
|
||||
playroomTemplates.length === 0 ? (
|
||||
<p class="empty">Nothing here yet - check back soon!</p>
|
||||
) : (
|
||||
<div class="templates-grid">
|
||||
{playroomTemplates.map((template) => (
|
||||
<div class="template-card">
|
||||
<h2 class="template-name">{template.name}</h2>
|
||||
{template.description && (
|
||||
<p class="template-description">{template.description}</p>
|
||||
)}
|
||||
<div class="images">
|
||||
<div class="image-block">
|
||||
<p class="image-label">My result</p>
|
||||
<img
|
||||
src={template.completedUrl}
|
||||
alt={template.completedAlt}
|
||||
class="template-image"
|
||||
loading="lazy"
|
||||
/>
|
||||
</div>
|
||||
<div class="image-block">
|
||||
<p class="image-label">Grab the blank~</p>
|
||||
<img
|
||||
src={template.blankUrl}
|
||||
alt={template.blankAlt}
|
||||
class="template-image"
|
||||
loading="lazy"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</main>
|
||||
</Base>
|
||||
|
||||
<style>
|
||||
.page-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.7;
|
||||
opacity: 0.85;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.empty {
|
||||
font-size: 1rem;
|
||||
opacity: 0.5;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
margin-top: 4rem;
|
||||
}
|
||||
|
||||
.templates-grid {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2.5rem;
|
||||
}
|
||||
|
||||
.template-card {
|
||||
padding: 1.5rem;
|
||||
background: var(--background);
|
||||
border: 2px solid var(--border);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.template-name {
|
||||
font-size: 1.3rem;
|
||||
margin: 0 0 0.5rem;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.template-description {
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.6;
|
||||
opacity: 0.8;
|
||||
margin: 0 0 1.25rem;
|
||||
}
|
||||
|
||||
.images {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.image-block {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.image-label {
|
||||
font-size: 0.85rem;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
opacity: 0.6;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.template-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 6px;
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,202 @@
|
||||
---
|
||||
import Base from "../layouts/Base.astro";
|
||||
import {
|
||||
values,
|
||||
valuesByRating,
|
||||
ratingLabels,
|
||||
type Rating,
|
||||
} from "../data/values";
|
||||
|
||||
const ratings: Rating[] = [
|
||||
"very-important",
|
||||
"important",
|
||||
"neutral",
|
||||
"unimportant",
|
||||
"very-unimportant",
|
||||
];
|
||||
|
||||
const ratingColors: Record<Rating, string> = {
|
||||
"very-important": "#A8577E",
|
||||
important: "#8A6BAE",
|
||||
neutral: "#C0C0C0",
|
||||
unimportant: "#7A8A9A",
|
||||
"very-unimportant": "#5A6A7A",
|
||||
};
|
||||
---
|
||||
|
||||
<Base
|
||||
title="Values"
|
||||
description="Naomi Carrigan's personal values card sort from therapy."
|
||||
>
|
||||
<main>
|
||||
<div class="page-header">
|
||||
<h1>My Values</h1>
|
||||
<a href="/" class="back-link">← Back</a>
|
||||
</div>
|
||||
<p class="intro">
|
||||
These are the results of my values card sort from therapy - 83 values,
|
||||
ranked and reflected on in my own words. This is a pretty honest window
|
||||
into what matters to me and why.
|
||||
</p>
|
||||
|
||||
<div class="summary">
|
||||
{
|
||||
ratings.map((rating) => (
|
||||
<div
|
||||
class="summary-item"
|
||||
style={`border-color: ${ratingColors[rating]}`}
|
||||
>
|
||||
<span class="summary-label">{ratingLabels[rating]}</span>
|
||||
<span class="summary-count">{valuesByRating(rating).length}</span>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
|
||||
{
|
||||
ratings.map((rating) => (
|
||||
<section class="rating-section">
|
||||
<h2
|
||||
class="rating-heading"
|
||||
style={`color: ${ratingColors[rating]}; border-color: ${ratingColors[rating]}`}
|
||||
>
|
||||
{ratingLabels[rating]}
|
||||
</h2>
|
||||
<div class="values-grid">
|
||||
{valuesByRating(rating).map((value) => (
|
||||
<div
|
||||
class="value-card"
|
||||
style={`border-top-color: ${ratingColors[rating]}`}
|
||||
>
|
||||
<div class="value-header">
|
||||
<span class="value-number">{value.number}.</span>
|
||||
<h3 class="value-name">{value.name}</h3>
|
||||
</div>
|
||||
<p class="value-description">{value.description}</p>
|
||||
<p class="value-reflection">{value.reflection}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
))
|
||||
}
|
||||
</main>
|
||||
</Base>
|
||||
|
||||
<style>
|
||||
.page-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 1.05rem;
|
||||
line-height: 1.7;
|
||||
opacity: 0.85;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.summary {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.summary-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0.75rem 1.25rem;
|
||||
border: 2px solid;
|
||||
border-radius: 8px;
|
||||
background: var(--background);
|
||||
flex: 1;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.summary-label {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.8;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.summary-count {
|
||||
font-size: 1.75rem;
|
||||
font-weight: bold;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.rating-section {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.rating-heading {
|
||||
font-size: 1.5rem;
|
||||
border-bottom: 2px solid;
|
||||
padding-bottom: 0.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.values-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.value-card {
|
||||
padding: 1.25rem;
|
||||
background: var(--background);
|
||||
border: 1px solid var(--border);
|
||||
border-top: 3px solid;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.value-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
|
||||
.value-number {
|
||||
font-size: 0.8rem;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.value-name {
|
||||
font-size: 1.1rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.value-description {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.6;
|
||||
font-style: italic;
|
||||
margin: 0.25rem 0 0.75rem;
|
||||
}
|
||||
|
||||
.value-reflection {
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.6;
|
||||
opacity: 0.85;
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "@nhcarrigan/typescript-config",
|
||||
"compilerOptions": {
|
||||
"outDir": "./prod",
|
||||
"rootDir": "."
|
||||
},
|
||||
"exclude": ["test/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user