7 Commits

Author SHA1 Message Date
naomi ebb9499aa9 feat: new security report page
Node.js CI / Lint and Test (pull_request) Successful in 54s
Security Scan / Security Audit (pull_request) Failing after 5m3s
2025-12-17 20:11:11 -08:00
naomi e799dbc453 feat: new forms 2025-12-17 20:08:47 -08:00
naomi 3b2c2ac983 feat: new forum channels and forms
Node.js CI / Lint and Test (pull_request) Successful in 54s
Security Scan / Security Audit (pull_request) Failing after 5m5s
2025-12-17 17:39:46 -08:00
naomi 77e3af7985 feat: add notice to the policies that require stuff we are still setting up 2025-12-17 15:29:07 -08:00
naomi d1f6425b71 chore: remove stray references to forum 2025-12-17 12:41:03 -08:00
naomi 9316e7f1d0 feat: add sprint template 2025-12-17 12:34:25 -08:00
naomi bae83d8353 feat: add new labels 2025-12-17 12:33:48 -08:00
93 changed files with 6044 additions and 91060 deletions
+2 -13
View File
@@ -12,8 +12,8 @@
"bash"
],
"ignoreRegExpList": [
"```[\\s\\S]*?```",
"`[^`\n]+`"
"```[\\s\\S]*?```", // Ignores multi-line code blocks in Markdown
"`[^`\n]+`" // Ignores inline code blocks
],
"ignoreWords": [
"nhcarrigan",
@@ -54,7 +54,6 @@
"Callista",
"CCPA",
"Celestine",
"Chronara",
"Čeőtina",
"CFAA",
"Chibika",
@@ -64,10 +63,8 @@
"Eclaire",
"Eirene",
"Elaria",
"Ephemere",
"Elowyn",
"Elunara",
"Enneagram",
"equivalencies",
"escalatory",
"excludable",
@@ -97,16 +94,13 @@
"Meridia",
"MERN",
"MEVN",
"MBTI",
"minimis",
"Minori",
"Mommy",
"NAMI",
"NCMEC",
"Nederlands",
"Neurodivergence",
"Nomena",
"NSFW",
"Nymira",
"OFAC",
"Ollama",
@@ -120,7 +114,6 @@
"recuse",
"Reddiquette",
"RomÒnă",
"Rondelle",
"Rosalia",
"Saisoku",
"Sakura",
@@ -130,8 +123,6 @@
"Svenska",
"Sylvara",
"Taryne",
"Tauri",
"Tatsumi",
"Tessara",
"Thalassa",
"Thessalia",
@@ -139,13 +130,11 @@
"Umbrelle",
"Veluna",
"Verena",
"Valerium",
"Vitalia",
"Vivicrea",
"Vivienne",
"vtubing",
"WCAG",
"Yubi",
"Zephra",
"zirs",
"Ελληνικά",
+5 -14
View File
@@ -8,31 +8,22 @@ on:
- main
jobs:
ci:
name: CI
runs-on: ubuntu-latest
lint:
name: Lint and Test
steps:
- name: Checkout Source Files
uses: actions/checkout@v4
- name: Use Node.js v24
- name: Use Node.js v22
uses: actions/setup-node@v4
with:
node-version: 24
node-version: 22
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 10
- name: Ensure Dependencies are Pinned
uses: naomi-lgbt/dependency-pin-check@main
with:
language: javascript
dev-dependencies: true
peer-dependencies: true
optional-dependencies: true
version: 9
- name: Install Dependencies
run: pnpm install
+100 -136
View File
@@ -1,4 +1,4 @@
name: Security Scan and Upload
name: Security Scan
on:
push:
@@ -6,172 +6,136 @@ on:
pull_request:
branches: [ main ]
schedule:
# Run weekly on Mondays at 00:00 UTC
- cron: '0 0 * * 1'
workflow_dispatch:
continue_on_error: true
jobs:
security-audit:
name: Security & DefectDojo Upload
security:
name: Security Audit
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4
# --- AUTO-SETUP PROJECT ---
- name: Ensure DefectDojo Product Exists
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
PRODUCT_NAME: ${{ github.repository }}
PRODUCT_TYPE_ID: 1
run: |
sudo apt-get install jq -y > /dev/null
echo "Checking connection to $DD_URL..."
# Check if product exists - capture HTTP code to debug connection issues
RESPONSE=$(curl --write-out "%{http_code}" --silent --output /tmp/response.json \
-H "Authorization: Token $DD_TOKEN" \
"$DD_URL/api/v2/products/?name=$PRODUCT_NAME")
# If response is not 200, print error
if [ "$RESPONSE" != "200" ]; then
echo "::error::Failed to query DefectDojo. HTTP Code: $RESPONSE"
cat /tmp/response.json
exit 1
fi
COUNT=$(cat /tmp/response.json | jq -r '.count')
if [ "$COUNT" = "0" ]; then
echo "Creating product '$PRODUCT_NAME'..."
curl -s -X POST "$DD_URL/api/v2/products/" \
-H "Authorization: Token $DD_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "'"$PRODUCT_NAME"'", "description": "Auto-created by Gitea Actions", "prod_type": '$PRODUCT_TYPE_ID' }'
else
echo "Product '$PRODUCT_NAME' already exists."
fi
# --- 1. TRIVY (Dependencies & Misconfig) ---
- name: Install Trivy
run: |
sudo apt-get update
sudo apt-get install wget apt-transport-https gnupg lsb-release -y
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
wget -qO /tmp/trivy-key.asc https://aquasecurity.github.io/trivy-repo/deb/public.key
sudo apt-key add /tmp/trivy-key.asc
echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update && sudo apt-get install trivy -y
sudo apt-get update
sudo apt-get install trivy -y
- name: Run Trivy (FS Scan)
- name: Run Trivy comprehensive security scan
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
scanners: 'vuln,misconfig'
format: 'table'
output: 'trivy-results.txt'
severity: 'CRITICAL,HIGH,MEDIUM,LOW,UNKNOWN'
# Fail on any vulnerability found
exit-code: '1'
# Don't ignore unfixed vulnerabilities
ignore-unfixed: false
# Skip database update to speed up scans (uses cached DB)
skip-db-update: false
# Skip setup since we installed Trivy manually
skip-setup-trivy: true
- name: Display Trivy scan results
if: always()
run: |
trivy fs . --scanners vuln,misconfig --format json --output trivy-results.json --exit-code 0
- name: Upload Trivy to DefectDojo
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
run: |
echo "Uploading Trivy results..."
# Generate today's date in YYYY-MM-DD format
TODAY=$(date +%Y-%m-%d)
HTTP_CODE=$(curl --write-out "%{http_code}" --output response.txt --silent -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "active=true" \
-F "verified=true" \
-F "scan_type=Trivy Scan" \
-F "engagement_name=CI/CD Pipeline" \
-F "product_name=${{ github.repository }}" \
-F "scan_date=$TODAY" \
-F "auto_create_context=true" \
-F "file=@trivy-results.json")
if [[ "$HTTP_CODE" != "200" && "$HTTP_CODE" != "201" ]]; then
echo "::error::Upload Failed with HTTP $HTTP_CODE"
echo "--- SERVER RESPONSE ---"
cat response.txt
echo "-----------------------"
exit 1
if [ -f trivy-results.txt ]; then
echo "=== Trivy Security Scan Results ==="
cat trivy-results.txt
else
echo "Upload Success!"
echo "No Trivy scan results found"
exit 1
fi
# --- 2. GITLEAKS (Secrets) ---
- name: Install Gitleaks
run: |
wget -qO gitleaks.tar.gz https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gz
tar -xzf gitleaks.tar.gz
sudo mv gitleaks /usr/local/bin/ && chmod +x /usr/local/bin/gitleaks
wget -O /tmp/gitleaks.tar.gz https://github.com/gitleaks/gitleaks/releases/download/v8.30.0/gitleaks_8.30.0_linux_x64.tar.gz
tar -xzf /tmp/gitleaks.tar.gz -C /tmp
sudo mv /tmp/gitleaks /usr/local/bin/
sudo chmod +x /usr/local/bin/gitleaks
gitleaks version
- name: Run Gitleaks
run: gitleaks detect --source . -v --report-path gitleaks-results.json --report-format json --no-git || true
- name: Upload Gitleaks to DefectDojo
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
# We remove the Trivy cache to avoid false positives
- name: Run Gitleaks secret scan
run: |
echo "Uploading Gitleaks results..."
TODAY=$(date +%Y-%m-%d)
rm -rf .cache/trivy
gitleaks detect --source . --report-path gitleaks-results.json --report-format json --no-git
HTTP_CODE=$(curl --write-out "%{http_code}" --output response.txt --silent -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "active=true" \
-F "verified=true" \
-F "scan_type=Gitleaks Scan" \
-F "engagement_name=CI/CD Pipeline" \
-F "product_name=${{ github.repository }}" \
-F "scan_date=$TODAY" \
-F "auto_create_context=true" \
-F "file=@gitleaks-results.json")
if [[ "$HTTP_CODE" != "200" && "$HTTP_CODE" != "201" ]]; then
echo "::error::Upload Failed with HTTP $HTTP_CODE"
echo "--- SERVER RESPONSE ---"
cat response.txt
echo "-----------------------"
exit 1
- name: Display Gitleaks scan results
if: always()
run: |
if [ -f gitleaks-results.json ]; then
echo "=== Gitleaks Secret Scan Results ==="
cat gitleaks-results.json
else
echo "Upload Success!"
echo "No secrets detected by Gitleaks"
exit 1
fi
# --- 3. SEMGREP (SAST) ---
- name: Install Semgrep (via pipx)
- name: Install Semgrep
run: |
sudo apt-get install pipx -y
sudo apt-get install pipx
pipx ensurepath
export PATH="$HOME/.local/bin:$PATH"
pipx install semgrep
# Add pipx binary path to GITHUB_PATH so next steps can see 'semgrep'
echo "$HOME/.local/bin" >> $GITHUB_PATH
semgrep --version
- name: Run Semgrep
run: semgrep scan --config=p/security-audit --config=p/owasp-top-ten --json --output semgrep-results.json . || true
- name: Upload Semgrep to DefectDojo
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
- name: Run Semgrep static analysis
run: |
echo "Uploading Semgrep results..."
TODAY=$(date +%Y-%m-%d)
export PATH="$HOME/.local/bin:$PATH"
semgrep --config p/security-audit \
--config p/owasp-top-ten \
--config p/ci \
--config p/r2c-security-audit \
--config p/cwe-top-25 \
--output semgrep-results.txt \
.
HTTP_CODE=$(curl --write-out "%{http_code}" --output response.txt --silent -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "active=true" \
-F "verified=true" \
-F "scan_type=Semgrep JSON Report" \
-F "engagement_name=CI/CD Pipeline" \
-F "product_name=${{ github.repository }}" \
-F "scan_date=$TODAY" \
-F "auto_create_context=true" \
-F "file=@semgrep-results.json")
if [[ "$HTTP_CODE" != "200" && "$HTTP_CODE" != "201" ]]; then
echo "::error::Upload Failed with HTTP $HTTP_CODE"
echo "--- SERVER RESPONSE ---"
cat response.txt
echo "-----------------------"
exit 1
- name: Display Semgrep scan results
if: always()
run: |
if [ -f semgrep-results.txt ]; then
echo "=== Semgrep Static Analysis Results ==="
cat semgrep-results.txt
else
echo "Upload Success!"
echo "No Semgrep scan results found"
exit 1
fi
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: 'stable' # Latest stable version
- name: Install OSV Scanner
run: |
export PATH="$HOME/go/bin:$PATH"
go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest
- name: Run OSV Scanner
run: |
export PATH="$HOME/go/bin:$PATH"
osv-scanner scan source --format table --output osv-results.txt -r .
- name: Display OSV Scanner scan results
if: always()
run: |
if [ -f osv-results.txt ]; then
echo "=== OSV Scanner Results ==="
cat osv-results.txt
else
echo "No OSV Scanner scan results found"
exit 1
fi
+33 -15
View File
@@ -1,29 +1,47 @@
# docs
# Astro Starter Kit: Minimal
Documentation for NHCarrigan projects.
```sh
npm create astro@latest -- --template minimal
```
## Live Version
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/minimal)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/minimal)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/minimal/devcontainer.json)
This page is currently deployed. [View the live website.](https://docs.nhcarrigan.com)
> πŸ§‘β€πŸš€ **Seasoned astronaut?** Delete this file. Have fun!
## Feedback and Bugs
## πŸš€ Project Structure
If you have feedback or a bug report, please [log a ticket on our forum](https://support.nhcarrigan.com).
Inside of your Astro project, you'll see the following folders and files:
## Contributing
```text
/
β”œβ”€β”€ public/
β”œβ”€β”€ src/
β”‚ └── pages/
β”‚ └── index.astro
└── package.json
```
If you would like to contribute to the project, you may create a Pull Request containing your proposed changes and we will review it as soon as we are able! Please review our [contributing guidelines](CONTRIBUTING.md) first.
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
## Code of Conduct
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
Before interacting with our community, please read our [Code of Conduct](CODE_OF_CONDUCT.md).
Any static assets, like images, can be placed in the `public/` directory.
## License
## 🧞 Commands
This software is licensed under our [global software license](https://docs.nhcarrigan.com/#/license).
All commands are run from the root of the project, from a terminal:
Copyright held by Naomi Carrigan.
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## Contact
## πŸ‘€ Want to learn more?
We may be contacted through our [Chat Server](http://chat.nhcarrigan.com) or via email at `contact@nhcarrigan.com`
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
+5 -5
View File
@@ -12,16 +12,16 @@
"test": "vitest --run"
},
"dependencies": {
"@astrojs/check": "0.9.9",
"@astrojs/starlight": "0.40.0",
"astro": "6.4.8",
"astro-mermaid": "2.0.4",
"@astrojs/check": "0.9.6",
"@astrojs/starlight": "0.37.1",
"astro": "5.16.5",
"astro-mermaid": "1.2.0",
"mermaid": "11.12.2",
"typescript": "5.9.3"
},
"devDependencies": {
"cspell": "9.4.0",
"gray-matter": "4.0.3",
"vitest": "4.1.9"
"vitest": "4.0.15"
}
}
+2514 -1993
View File
File diff suppressed because it is too large Load Diff
-31
View File
@@ -1,31 +0,0 @@
# Security
# Do not execute any scripts of installed packages (project scripts still run)
ignoreDepScripts: true
# Do not automatically run pre/post scripts (e.g. preinstall, postbuild)
enablePrePostScripts: false
# Only allow packages published at least 10 days ago (reduces risk of compromised packages)
minimumReleaseAge: 14400
# Fail if a package's trust level has decreased compared to previous releases
trustPolicy: no-downgrade
# Ignore trust policy for packages published more than 1 year ago (predates provenance signing)
trustPolicyIgnoreAfter: 525960
# Fail if there are missing or invalid peer dependencies
strictPeerDependencies: true
# Prevent transitive dependencies from using exotic sources (git repos, direct tarball URLs)
blockExoticSubdeps: true
overrides:
nanoid: 3.3.11
packageExtensions:
langium@*:
dependencies:
vscode-jsonrpc: 8.2.1
# Lockfile
# Allow the lockfile to be updated during install (set to true in CI for stricter reproducibility)
preferFrozenLockfile: false
allowBuilds:
esbuild: false
sharp: false
+1341 -86506
View File
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.9 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

+36 -101
View File
@@ -1,6 +1,5 @@
export const navigation = [
{
// #region About Us
label: "About Us",
collapsed: true,
items: [
@@ -50,8 +49,6 @@ export const navigation = [
},
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region Legal Information
{
label: "Legal Information",
collapsed: true,
@@ -118,8 +115,6 @@ export const navigation = [
},
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region Community Policies
{
label: "Community Policies",
collapsed: true,
@@ -148,14 +143,8 @@ export const navigation = [
label: "Community Feedback and Participation Policy",
link: "/community/feedback",
},
{
label: "Fan Art Guidelines",
link: "/community/fan-art",
}
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region Development Documentation
{
label: "Development Documentation",
collapsed: true,
@@ -180,14 +169,20 @@ export const navigation = [
label: "Development Environment",
link: "/dev/environment",
},
{
label: "Server Setup",
link: "/dev/servers",
},
{
label: "Naomi's VTubing Setup",
link: "/dev/vtubing",
},
{
label: "Security Hall of Fame",
link: "/dev/hall-of-fame",
}
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region Mentorship Programme
{
label: "Mentorship Programme",
collapsed: true,
@@ -284,8 +279,6 @@ export const navigation = [
}
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region Project Documentation
{
label: "Project Documentation",
collapsed: true,
@@ -293,7 +286,7 @@ export const navigation = [
{
label: "ESLint Config",
link: "/projects/eslint-config",
badge: { text: "v5.2.0", variant: "tip" },
badge: { text: "v5.1.0", variant: "tip" },
},
{
label: "Aria Iuvo",
@@ -358,7 +351,7 @@ export const navigation = [
{
label: "Logger",
link: "/projects/logger",
badge: { text: "v1.1.1", variant: "tip" },
badge: { text: "v1.0.0", variant: "tip" },
},
{
label: "Resume",
@@ -378,7 +371,7 @@ export const navigation = [
{
label: "Website Headers",
link: "/projects/website-headers",
badge: { text: "v4.1.0", variant: "tip" },
badge: { text: "v2.1.0", variant: "tip" },
},
{
label: "Altaria",
@@ -448,7 +441,7 @@ export const navigation = [
{
label: "Vitalia",
link: "/projects/vitalia",
badge: { text: "v0.0.0", variant: "caution" },
badge: { text: "unreleased", variant: "danger" },
},
{
label: "Octavia",
@@ -458,7 +451,7 @@ export const navigation = [
{
label: "Maribelle",
link: "/projects/maribelle",
badge: { text: "v0.0.0", variant: "caution" },
badge: { text: "unreleased", variant: "danger" },
},
{
label: "Verena",
@@ -573,7 +566,7 @@ export const navigation = [
{
label: "Elysium",
link: "/projects/elysium",
badge: { text: "v0.5.0", variant: "caution" },
badge: { text: "unreleased", variant: "danger" },
},
{
label: "Elaria",
@@ -608,7 +601,7 @@ export const navigation = [
{
label: "Lucinda",
link: "/projects/lucinda",
badge: { text: "v0.0.0", variant: "caution" },
badge: { text: "unreleased", variant: "danger" },
},
{
label: "Liora",
@@ -673,7 +666,7 @@ export const navigation = [
{
label: "Eclaire",
link: "/projects/eclaire",
badge: { text: "v1.1.0", variant: "tip" },
badge: { text: "v1.0.0", variant: "tip" },
},
{
label: "freeCodeCamp Review Generator",
@@ -720,70 +713,8 @@ export const navigation = [
link: "/projects/vivicrea",
badge: { text: "v1.0.0", variant: "tip" },
},
{
label: "Ephemere",
link: "/projects/ephemere",
badge: { text: "unversioned", variant: "success" },
},
{
label: "Valerium",
link: "/projects/valerium",
badge: { text: "v1.0.1", variant: "tip" },
},
{
label: "Lore",
link: "/projects/lore",
badge: { text: "v0.0.0", variant: "caution" },
},
{
label: "Hikari Desktop",
link: "/projects/hikari-desktop",
badge: { text: "v1.15.0", variant: "tip" },
},
{
label: "Rondelle",
link: "/projects/rondelle",
badge: { text: "unversioned", variant: "success" },
},
{
label: "Chronara",
link: "/projects/chronara",
badge: { text: "unversioned", variant: "success" },
},
{
label: "Silly Sites",
link: "/projects/silly-sites",
badge: { text: "unversioned", variant: "success" },
},
{
label: "Library",
link: "/projects/library",
badge: { text: "v1.1.1", variant: "tip" },
},
{
label: "Minori",
link: "/projects/minori",
badge: { text: "unreleased", variant: "danger" },
},
{
label: "Tatsumi",
link: "/projects/tatsumi",
badge: { text: "v1.2.0", variant: "tip" },
},
{
label: "Personality",
link: "/projects/personality",
badge: { text: "v1.0.0", variant: "tip" },
},
{
label: "QR Generator",
link: "/projects/qr-generator",
badge: { text: "v1.0.0", variant: "tip" },
},
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region Staff Guidelines
{
label: "Staff Guidelines",
collapsed: true,
@@ -876,10 +807,6 @@ export const navigation = [
label: "Documentation and Transparency Training for Staff",
link: "/staff/training/documentation-transparency",
},
{
label: "Support Forum Moderation Training for Staff",
link: "/staff/training/forum-moderation",
},
{
label: "Harassment and Bullying Response Training for Staff",
link: "/staff/training/harassment-bullying-response",
@@ -908,21 +835,29 @@ export const navigation = [
},
].sort((a, b) => a.label.localeCompare(b.label)),
},
// #endregion
// #region External Links
{
label: "Discord",
link: "https://chat.nhcarrigan.com",
label: "Miscellaneous Documents",
collapsed: true,
items: [
{
label: "Managing Local Music",
link: "/misc/music",
},
{
label: "Templates",
link: "/misc/templates",
},
{
label: "AI Prompts",
link: "/misc/prompts",
}
].sort((a, b) => a.label.localeCompare(b.label)),
},
{
label: "Sitemap",
link: "https://sitemap.nhcarrigan.com",
attrs: {
target: "_blank",
},
},
{
label: "Support Forum",
link: "https://support.nhcarrigan.com",
attrs: {
target: "_blank",
},
}
// #endregion
];
-10
View File
@@ -1,10 +0,0 @@
import { defineCollection } from "astro:content";
import { glob } from "astro/loaders";
import { docsSchema } from "@astrojs/starlight/schema";
export const collections = {
docs: defineCollection({
loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/docs" }),
schema: docsSchema(),
}),
};
+6
View File
@@ -0,0 +1,6 @@
import { defineCollection } from 'astro:content';
import { docsSchema } from '@astrojs/starlight/schema';
export const collections = {
docs: defineCollection({ schema: docsSchema() }),
};
+24 -35
View File
@@ -135,9 +135,9 @@ Our code repositories are all self-hosted. Git accounts are only granted to Team
- Issue tracking
- Source code for all of our products
- Best for: Viewing source code and documentation
- **Bug Reports and Feature Requests**: To report bugs or request features, please use our support forum:
- [Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) for bug reports
- [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7) for feature requests
- **Bug Reports and Feature Requests**: To report bugs or request features, please use our Discord forum channels:
- `#bug-reports` forum channel for bug reports
- `#feature-requests` forum channel for feature requests
### 2.3. Etiquette and Best Practices
@@ -236,11 +236,11 @@ We offer several email addresses for specific types of inquiries. Please use the
### 5.2. Billing and Financial Matters
:::tip[Preferred Method]{icon=star}
We encourage you to use the [**Billing Questions**](https://support.nhcarrigan.com/c/billing-questions/13) category on our support forum for billing inquiries. This allows for public discussion and faster responses. If you need to share sensitive financial information, you can ask staff to make your thread private, or contact us via email for complete confidentiality.
:::tip[Preferred Method]{icon=message}
We encourage you to use the **#billing-questions** Discord forum channel for billing inquiries. This allows for public discussion and faster responses. If you need to share sensitive financial information, you can ask staff to make your thread private, or contact us via email for complete confidentiality.
:::
- **Support Forum:** [Billing Questions](https://support.nhcarrigan.com/c/billing-questions/13) (preferred for most inquiries)
- **Discord Forum:** `#billing-questions` (preferred for most inquiries)
- Email: billing@nhcarrigan.com (for highly sensitive financial information requiring complete confidentiality)
- Use for:
- Questions about payments or invoices
@@ -250,11 +250,11 @@ We encourage you to use the [**Billing Questions**](https://support.nhcarrigan.c
### 5.3. Technical Support
:::tip[Preferred Method]{icon=star}
We encourage you to use the [**Technical Support**](https://support.nhcarrigan.com/c/technical-support/5) category on our support forum for support inquiries. This allows for public discussion and faster responses. If you need to share sensitive information, you can ask staff to make your thread private, or contact us via email for complete confidentiality.
:::tip[Preferred Method]{icon=message}
We encourage you to use the **#technical-support** Discord forum channel for support inquiries. This allows for public discussion and faster responses. If you need to share sensitive information, you can ask staff to make your thread private, or contact us via email for complete confidentiality.
:::
- **Support Forum:** [Technical Support](https://support.nhcarrigan.com/c/technical-support/5) (preferred for most inquiries)
- **Discord Forum:** `#technical-support` (preferred for most inquiries)
- Email: support@nhcarrigan.com
- Use for:
- Assistance with using our software or services
@@ -263,7 +263,7 @@ We encourage you to use the [**Technical Support**](https://support.nhcarrigan.c
### 5.4. Privacy Concerns
:::tip[Preferred Method]{icon=star}
:::tip[Preferred Method]{icon=message}
We encourage you to use our **Privacy Request Form** for privacy-related requests: https://forms.nhcarrigan.com/o/docs/forms/qEJgBWGDfyHv6x51VU9aVX/4
This form helps ensure we collect all necessary information to process your request efficiently and in compliance with applicable data protection laws.
@@ -279,7 +279,7 @@ This form helps ensure we collect all necessary information to process your requ
### 5.5. Security Matters
:::tip[Preferred Method]{icon=star}
:::tip[Preferred Method]{icon=message}
We encourage you to use our **Security Vulnerability Report Form** for reporting security vulnerabilities: https://forms.nhcarrigan.com/o/docs/forms/wgdbBkS4tjCGoVZTqtmMNx/4
This form helps ensure we collect all necessary information to investigate and address security issues efficiently and securely.
@@ -295,11 +295,11 @@ This form helps ensure we collect all necessary information to investigate and a
### 5.6. Legal Inquiries
:::tip[Preferred Method]{icon=star}
We encourage you to use the [**Legal Notices**](https://support.nhcarrigan.com/c/legal-notices/12) category on our support forum for legal inquiries. This allows for public discussion and transparency. If you need to share sensitive legal information, you can ask staff to make your thread private, or contact us via email for urgent matters requiring immediate confidentiality.
:::tip[Preferred Method]{icon=message}
We encourage you to use the **#legal-notices** Discord forum channel for legal inquiries. This allows for public discussion and transparency. If you need to share sensitive legal information, you can ask staff to make your thread private, or contact us via email for urgent matters requiring immediate confidentiality.
:::
- **Support Forum:** [Legal Notices](https://support.nhcarrigan.com/c/legal-notices/12) (preferred for most inquiries)
- **Discord Forum:** `#legal-notices` (preferred for most inquiries)
- Email: legal@nhcarrigan.com (for urgent legal matters requiring immediate confidentiality)
- Use for:
- Legal questions or concerns
@@ -309,18 +309,7 @@ We encourage you to use the [**Legal Notices**](https://support.nhcarrigan.com/c
### 5.7. Feedback and Suggestions
:::tip[Preferred Method]{icon=star}
We encourage you to use our support forum for different types of feedback:
- [**Community Feedback**](https://support.nhcarrigan.com/c/community-feedback/8) for general feedback about our community, services, events, and initiatives
- [**Policy Ideation**](https://support.nhcarrigan.com/c/policy-ideation/9) for suggestions about community policies and governance
- [**Accessibility Feedback**](https://support.nhcarrigan.com/c/accessibility-feedback/10) for reporting accessibility barriers and improvement suggestions
:::
- **Support Forum:**
- [Community Feedback](https://support.nhcarrigan.com/c/community-feedback/8) (preferred for general feedback)
- [Policy Ideation](https://support.nhcarrigan.com/c/policy-ideation/9) (preferred for policy suggestions)
- [Accessibility Feedback](https://support.nhcarrigan.com/c/accessibility-feedback/10) (preferred for accessibility matters)
- Email: feedback@nhcarrigan.com (if you prefer email communication)
- Email: feedback@nhcarrigan.com
- Use for:
- Providing feedback on our work or projects
- Suggesting improvements or new features
@@ -329,11 +318,11 @@ We encourage you to use our support forum for different types of feedback:
### 5.8. Press/Media Inquiries
:::tip[Preferred Method]{icon=star}
We encourage you to use the [**Press Inquiries**](https://support.nhcarrigan.com/c/press-inquiries/14) category on our support forum for media inquiries. This allows for public discussion and community visibility. If you need to share sensitive information, you can ask staff to make your thread private, or contact us via email for highly sensitive media matters requiring complete confidentiality.
:::tip[Preferred Method]{icon=message}
We encourage you to use the **#press-inquiries** Discord forum channel for media inquiries. This allows for public discussion and community visibility. If you need to share sensitive information, you can ask staff to make your thread private, or contact us via email for highly sensitive media matters requiring complete confidentiality.
:::
- **Support Forum:** [Press Inquiries](https://support.nhcarrigan.com/c/press-inquiries/14) (preferred for most inquiries)
- **Discord Forum:** `#press-inquiries` (preferred for most inquiries)
- Email: press@nhcarrigan.com (for highly sensitive media matters requiring complete confidentiality)
- Use for:
- Requesting comment regarding news
@@ -351,11 +340,11 @@ We encourage you to use the [**Press Inquiries**](https://support.nhcarrigan.com
### 5.10. Marketing Inquiries
:::tip[Preferred Method]{icon=star}
We encourage you to use the [**Marketing Proposals**](https://support.nhcarrigan.com/c/marketing-proposals/15) category on our support forum for marketing inquiries. This allows for public discussion and community input. If you need to share highly confidential business information, you can ask staff to make your thread private, or contact us via email for proposals requiring complete privacy.
:::tip[Preferred Method]{icon=message}
We encourage you to use the **#marketing-proposals** Discord forum channel for marketing inquiries. This allows for public discussion and community input. If you need to share highly confidential business information, you can ask staff to make your thread private, or contact us via email for proposals requiring complete privacy.
:::
- **Support Forum:** [Marketing Proposals](https://support.nhcarrigan.com/c/marketing-proposals/15) (preferred for most inquiries)
- **Discord Forum:** `#marketing-proposals` (preferred for most inquiries)
- Email: marketing@nhcarrigan.com (for highly confidential business proposals requiring complete privacy)
- Use for:
- Marketing collaboration proposals
@@ -374,11 +363,11 @@ We encourage you to use the [**Marketing Proposals**](https://support.nhcarrigan
### 5.12. Partnerships
:::tip[Preferred Method]{icon=star}
We encourage you to use the [**Partnership Requests**](https://support.nhcarrigan.com/c/partnership-requests/11) category on our support forum for partnership inquiries. This allows for public discussion and community input on potential partnerships. If you need to share sensitive business information, you can ask staff to make your thread private, or contact us via email if you need complete confidentiality from the start.
:::tip[Preferred Method]{icon=message}
We encourage you to use the **#partnership-requests** Discord forum channel for partnership inquiries. This allows for public discussion and community input on potential partnerships. If you need to share sensitive business information, you can ask staff to make your thread private, or contact us via email if you need complete confidentiality from the start.
:::
- **Support Forum:** [Partnership Requests](https://support.nhcarrigan.com/c/partnership-requests/11) (preferred for most inquiries)
- **Discord Forum:** `#partnership-requests` (preferred for most inquiries)
- Email: partners@nhcarrigan.com (if you need complete confidentiality from the start)
- Use for:
- Requesting a collaboration between our organisation and yours
-186
View File
@@ -1,186 +0,0 @@
---
title: Fan Art Guidelines
---
## 1. Introduction and Purpose
### 1.1. Welcome to Our Fan Art Community!
Are you interested in creating art for our lovely Naomi? We absolutely love seeing creative interpretations of our characters and would be thrilled to feature your work! These guidelines will help you understand what we're looking for and how to submit your creations.
### 1.2. Scope
These guidelines apply to:
- Fan art of Naomi and her various designs
- Fan art of Original Characters (OCs) shared in our #characters channel (Naomi's OCs)
- Any artistic interpretations of our characters and community
## 2. Content Guidelines
### 2.1. Content Standards
#### 2.1.1. Family-Friendly Public Submissions
For art that will be shared in our public spaces (such as our fan art channel), we maintain family-friendly standards:
**(a)** **No Obscene or NSFW Content**: Public submissions must be appropriate for all audiences. We want to show your work off to everyone!
**(b)** **Original Works Only**: Please no AI-generated content. We want to see your original works! If Naomi wanted AI-generated art, she would generate it herself.
**(c)** **Creative Freedom**: You are free to give Naomi whatever outfit you would like. Refer to our reference channel for reference images to get an idea of her style.
#### 2.1.2. NSFW Content Policy
We understand that some artists may wish to create mature content featuring our characters. We have the following policy for such works:
**(a)** **DM Submission Required**: NSFW works must be sent to us via direct message (DM) only. Do not post NSFW content in any public channels.
**(b)** **Private Appreciation**: While we appreciate all artistic interpretations, NSFW works will not be shared in our public spaces as we are a family-friendly community.
**(c)** **Respectful Content**: Even for private submissions, we reserve the right to decline content that we find inappropriate or that violates our community standards.
**(d)** **Recognition**: Accepted NSFW submissions will still qualify for the role!
### 2.2. Original Characters (OCs)
We have a dedicated **#characters** channel where Naomi shares her Original Characters! You are welcome and encouraged to create fan art of these OCs as well. When creating art of Naomi's OCs:
**(a)** **Respect Character Design**: Please respect the original character designs and creator intentions.
**(b)** **Follow Same Guidelines**: All content guidelines (family-friendly for public, NSFW via DM only) apply to OC fan art as well.
## 3. Reference Materials and Resources
### 3.1. Available Reference Materials
#### 3.1.1. Reference Images
We maintain reference images in our Discord reference channel. These images can help you understand Naomi's style, color palette, and design elements.
### 3.2. Important Disclaimer About Reference Materials
:::warning[AI-Generated Reference Materials Disclaimer]
**Please be aware that our current reference sheets and other visual assets are AI-generated. This is a temporary situation.**
We operate at a significant loss and do not currently have the budget to commission proper, human-created art for all of our reference materials. However, we are committed to replacing these AI-generated assets with proper commissioned art as funds become available.
**How You Can Help:**
- **Financial Support**: If you would like to help us replace our AI-generated assets with proper art, you can donate at [donate.nhcarrigan.com](https://donate.nhcarrigan.com). All donations help us work toward commissioning proper reference art.
- **Art Donations**: We would be absolutely thrilled to accept donated art to replace our AI-generated assets! If you're interested in creating reference art or other assets for us, please reach out via DM to discuss.
We appreciate your understanding and patience as we work to improve our resources. Our goal is to have all human-created, properly commissioned art, and we're working toward that goal every day.
:::
## 4. Submission Process
### 4.1. How to Submit Your Art
#### 4.1.1. Public Submissions (Family-Friendly Content)
To submit family-friendly fan art for public sharing:
1. **Create Your Art**: Follow the guidelines above to ensure your work meets our standards.
2. **DM Your Submission**: Send your artwork to Naomi directly via DM.
3. **Review Process**: If accepted, your art will be shared in our fan art channel (with full credit - you will be tagged in the post).
4. **Recognition**: Accepted submissions will receive a special role recognizing your contribution!
#### 4.1.2. Private Submissions (NSFW Content)
For NSFW works:
1. **DM Only**: Send your NSFW artwork directly to Naomi via DM.
2. **Private Appreciation**: These works will be appreciated privately and will not be shared in public spaces.
3. **No Public Sharing**: Please do not post NSFW content in any public channels, even if you think it might be acceptable.
4. **Recognition**: Accepted submissions will still qualify for the role!
### 4.2. What Happens After Submission
#### 4.2.1. Review Timeline
We review submissions as quickly as possible, but please be patient. We want to give each piece the attention it deserves!
#### 4.2.2. Acceptance and Sharing
If your public submission is accepted:
- Your art will be posted in our fan art channel
- You will be tagged and credited in the post
- You will receive a special role recognizing your contribution
- We may share your work on other platforms (with credit)
#### 4.2.3. If Your Submission Isn't Accepted
If we decline a submission, we'll do our best to explain why. Common reasons include:
- Content doesn't meet our family-friendly standards (for public submissions)
- Quality concerns (though we appreciate all skill levels!)
- Copyright or intellectual property issues
- Other community guideline violations
We're always happy to provide feedback and work with artists to create content that fits our community!
## 5. Rights and Permissions
### 5.1. Artist Rights and Rights Transfer
**(a)** **Rights Transfer**: By submitting your art to us, you transfer the rights to your creation to us. This transfer occurs upon submission and acceptance of your work.
**(b)** **Credit Always Given**: We will always credit you when sharing your work, even though rights have been transferred.
**(c)** **Usage Rights**: Once rights are transferred, we have the right to use, display, share, and distribute your submitted artwork in our community spaces and on other platforms with proper credit.
### 5.2. Character Rights
**(a)** **Character Ownership**: Naomi and other official characters remain the property of NHCarrigan.
**(b)** **Fan Art Rights**: Creating fan art is generally considered fair use, but please be respectful of the characters and community.
**(c)** **Commercial Use**: If you're interested in commercial use of our characters, please contact us to discuss licensing.
## 6. Community Support and Appreciation
### 6.1. We Love Your Art!
We genuinely appreciate every piece of art created for our community. Whether it's a quick sketch or a detailed masterpiece, your creativity and effort mean the world to us!
### 6.2. Growing Together
We're always working to improve our resources and support for artists. As we grow and develop better reference materials (see our disclaimer above), we hope to make it even easier for artists to create amazing fan art!
### 6.3. Questions or Concerns?
If you have any questions about these guidelines, the submission process, or anything else related to fan art, please don't hesitate to reach out via DM or ask in our community channels!
---
## Summary: Quick Reference
**βœ… DO:**
- Create original, family-friendly art for public sharing
- DM your submissions to Naomi
- Feel free to be creative with outfits and styles
- Create art of Naomi's OCs from our #characters channel
- Send NSFW works via DM only (they won't be shared publicly)
**❌ DON'T:**
- Submit AI-generated content
- Post NSFW content in public channels
- Disrespect character designs when making OC fan art
- Submit content that violates our community standards
**πŸ“ Remember:**
- Reference materials are currently AI-generated (temporary!)
- You can help us get proper art by donating or creating art donations
- By submitting art, you transfer rights to your creation to us
- We always credit artists when sharing their work
- Questions? Just ask!
---
*Thank you for your interest in creating art for our community! We can't wait to see what you create!*
+4 -4
View File
@@ -44,10 +44,10 @@ This Policy operates within our comprehensive legal and policy framework, incorp
#### 2.1.1. Daily and Ongoing Feedback Channels
**Open Communication Channels:**
- Dedicated feedback forum categories accessible to all community members for ongoing input and suggestions
- Community: [Community Feedback](https://support.nhcarrigan.com/c/community-feedback/8) category on our support forum
- Products: [Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) or [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7) categories on our support forum
- Policies: [Policy Ideation](https://support.nhcarrigan.com/c/policy-ideation/9) category on our support forum
- Dedicated feedback forum channels accessible to all community members for ongoing input and suggestions
- Community: `#community-feedback` forum channel on Discord
- Products: `#bug-reports` or `#feature-requests` forum channel on Discord
- Policies: `#policy-ideation` forum channel on Discord
- Direct messaging opportunities with community leadership for individual concerns and suggestions
- Public discussion forums for community-wide conversation about policies and improvements
+428
View File
@@ -0,0 +1,428 @@
---
title: Server Setup
---
**ESTABLISHING SERVER CONFIGURATION STANDARDS AND SECURITY REQUIREMENTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
### 1.1. Policy Overview
This Server Setup Documentation (hereinafter referred to as "the Documentation") establishes mandatory standards, procedures, and security requirements for configuring remote servers used to host projects maintained by our organisation. This Documentation operates within our comprehensive legal and policy framework, incorporating our Terms of Service, Security Policy, and all applicable legal protections by reference.
### 1.2. Scope and Applicability
This Documentation applies to all remote servers used to host projects, services, or infrastructure maintained by our organisation. All personnel responsible for server configuration, deployment, or maintenance must comply with the standards set forth in this Documentation.
**IMPORTANT: Non-compliance with server security and configuration standards set forth in this Documentation may result in security vulnerabilities, service disruptions, or other serious consequences. All server administrators must strictly adhere to these requirements.**
### 1.3. Security and Compliance Requirements
Server configuration must comply with:
- Our Security Policy and security standards
- Applicable data protection and privacy regulations
- Industry best practices for server security
- All relevant legal and regulatory requirements
## 2. PROVISIONING A SERVER
We use DigitalOcean as our provider. Regardless of your choice, provision a new VPS using the **latest Ubuntu LTS version**. Add your `ssh` key AND Naomi's `ssh` key in the setup process.
## 3. SETTING UP USER ACCOUNTS
You should never run applications on root. SSH into the new VPS to prepare your user.
### 3.1. Creating the User Account
You'll need to set a password for the `root` account first.
```bash
passwd
```
Once you have set a password, ensure that you have provided it to Naomi to store in the vault.
Create an `NHCarrigan` user for our organisation.
```bash
adduser NHCarrigan
```
Set a **different** password, and provide that to Naomi as well. For all of the user information, use the default blank values.
Add the new user to the sudoers file.
```bash
usermod -aG sudo NHCarrigan
```
Then sync the SSH keys so we can authenticate as that user.
```bash
rsync --archive --chown=NHCarrigan:NHCarrigan ~/.ssh /home/NHCarrigan
```
While you are there, set the timezone for the server to our business' local timezone.
```bash
sudo timedatectl set-timezone America/Los_Angeles
```
## 4. PREPARING FOR WEB REQUESTS
To prepare the server to receive web requests, you'll need to follow a few steps.
### 4.1. SSL Certificate Configuration
:::note
If the Firewall has been set up, you'll need to temporarily allow port 80 for the certificate to generate.
:::
We use LetsEncrypt to provision our SSL certificates. If it is not installed, install it with:
```bash
sudo snap install --classic certbot
```
Then link the snap to our `usr` directory.
```bash
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```
Generate a certificate with:
```bash
sudo certbot certonly --standalone
```
And allow applications to read it:
```bash
sudo chmod -R a+rwx /etc/letsencrypt
```
When you need to renew the certificate:
```bash
sudo certbot renew
```
### 4.2. NGINX Configuration
All requests should be routed through NGINX. At no point should an application run directly on ports 80 or 443.
Install NGINX:
```bash
sudo apt-get install nginx
```
Edit the configuration file:
```bash
sudo emacs /etc/nginx/conf.d/server.conf
```
Use this template to set up a reverse proxy on the standard HTTPS port 443:
```nginx
server {
listen 443 ssl;
server_name subdomain.domain.tld;
ssl_certificate /etc/letsencrypt/live/subdomain.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/subdomain.domain.tld/privkey.pem;
location / {
proxy_set_header Host $host;
proxy_pass https://127.0.0.1:port;
proxy_redirect off;
}
}
```
Validate that the config is correct with:
```bash
sudo nginx -t
```
If so, restart NGINX to apply the changes:
```bash
sudo systemctl restart nginx
```
## 5. SECURING THE SERVER
We have a minimum level of security that is required on ALL of our servers. This section should not be treated as the best effort, but as the minimal requirements to comply with our policies.
### 5.1. Firewall Configuration
We use `ufw` as our firewall. First, enable the SSH port.
```bash
sudo ufw allow "OpenSSH"
```
Then, allow the standard HTTPS port and **deny** the standard HTTP port.
```bash
sudo ufw deny http
sudo ufw allow https
```
Enable the firewall. You may get dropped from the SSH connection.
```bash
sudo ufw enable
```
### 5.2. Fail2Ban Configuration
We also use Fail2Ban to block IP addresses which fail to make requests too often.
Install the tool:
```bash
sudo apt-get install fail2ban
```
Configure the NGINX jail in `/etc/fail2ban/jail.d/nginx-auth.conf`:
```ini
[nginx-auth]
enabled = true
filter = nginx-auth
logpath = /var/log/nginx/access.log
maxretry = 3
findtime = 86400
bantime = 86400
```
Configure the NGINX filter in `/etc/fail2ban/filter.d/nginx-auth.conf`:
```ini
[Definition]
failregex = ^<HOST> - .* \[.*\] ".*" (4\d{2}) .*$
```
Because we use Cloudflare, you'll need to grab the original IP for all requests. Start by creating a file to store Cloudflare's IPs.
```bash
sudo touch /etc/nginx/cloudflare_ips.conf
```
Then create your script:
```bash
nano ~/update_cf_ips.sh
```
```bash
#!/bin/bash
# Create a temporary file
temp_file=$(mktemp)
# Download IPv4 ranges and format each line
curl -s https://www.cloudflare.com/ips-v4 | while read ip; do
echo "set_real_ip_from $ip;" >> "$temp_file"
done
# Download IPv6 ranges and format each line
curl -s https://www.cloudflare.com/ips-v6 | while read ip; do
echo "set_real_ip_from $ip;" >> "$temp_file"
done
# Add the real_ip_header directive
echo "real_ip_header CF-Connecting-IP;" >> "$temp_file"
# Replace the old file with the new one
sudo mv "$temp_file" /etc/nginx/cloudflare_ips.conf
# Test Nginx configuration
sudo nginx -t
# If the test is successful, reload Nginx
if [ $? -eq 0 ]; then
sudo systemctl reload nginx
echo "Nginx configuration updated and reloaded successfully."
else
echo "Nginx configuration test failed. Please check your configuration."
fi
```
Make it executable and run it:
```bash
sudo chmod +x update_cf_ips.sh
sudo ./update_cf_ips.sh
```
If it runs as expected, set it up to run on a CRON.
```bash
sudo crontab -e
```
```bash
0 3 * * 1 ~/update_cf_ips.sh
```
Then, update the `/etc/nginx/nginx.conf` to use all of this new logic. This goes at the end of your `http` directive block.
```nginx
# Look at the real IP, not the cloudflare IP.
include /etc/nginx/cloudflare_ips.conf;
log_format custom_format '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for"';
access_log /var/log/nginx/access.log custom_format;
```
Confirm the NGINX configuration is correct:
```bash
sudo nginx -t
```
Then restart everything.
```bash
sudo systemctl restart nginx
sudo systemctl restart fail2ban
```
To view banned IPs:
```bash
sudo fail2ban-client status nginx-auth
```
And to unban them:
```bash
sudo fail2ban-client set nginx-auth unbanip <ip>
```
## 6. UPLOADING PROJECTS
To upload a project, you should **not** use `git` to clone the project to the machine. Instead, start by cloning the project to your local environment and navigating to the directory:
```bash
git clone <url>
cd /path/to/project
```
Then sync the project up to the machine, ignoring any installed packages.
```bash
rsync -av --exclude='node_modules' ./ <server name>:/home/NHCarrigan/<project directory>
```
## 7. RUNNING PROJECTS
Now you are ready to start running the project.
### 7.1. Node.js Setup
Most of our projects will run on Node. For a new machine, you'll need to set that up.
We use `nvm` to manage Node versions. Fetch and run the install script:
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
```
The script will automatically update the `.bashrc` file to load `nvm` into the PATH. Reload that:
```bash
source ~/.bashrc
```
Install the long-term support Node version.
```bash
nvm install --lts
```
This should automatically set it as the default. When updating, be sure to remove any older versions!
Finally, install `pnpm` as the package manager.
```bash
npm i -g pnpm
```
### 7.2. PM2 Process Management
All of our processes run with PM2 to allow for monitoring and auto-restarts. You'll need to install it.
```bash
pnpm i -g pm2
```
To start a project, use this template:
```bash
pm2 start '<script>' --name '<name>'
```
Then run `pm2 save` to save the application list.
## 8. LIMITATION OF LIABILITY AND DISCLAIMERS
### 8.1. Reference to Comprehensive Liability Framework
**IMPORTANT: Comprehensive liability limitations, damage exclusions, and maximum liability caps are set forth in our Limitation of Liability and Indemnification Policy, which is incorporated herein by reference.**
### 8.2. Server Configuration Disclaimer
This Documentation establishes mandatory security and configuration standards. However, compliance with these standards does not guarantee:
- Complete protection against all security threats or vulnerabilities
- Uninterrupted service availability or performance
- Compatibility with all applications or use cases
- Protection against all forms of attack or compromise
### 8.3. Security Disclaimer
While this Documentation establishes security requirements, server administrators are responsible for:
- Implementing additional security measures appropriate to their specific threat environment
- Regularly updating and patching all software and dependencies
- Monitoring server logs and security alerts
- Responding promptly to security incidents
- Maintaining compliance with all applicable security regulations and standards
### 8.4. Third-Party Services and Tools
This Documentation references various third-party services, tools, and software packages. Our organisation:
- Does not guarantee the security, availability, or functionality of third-party services
- Is not responsible for issues arising from the use of third-party tools or services
- Recommends that administrators review third-party licenses, terms of service, and security practices
- Does not provide support for third-party tools beyond what is necessary for project functionality
### 8.5. Technical Accuracy Disclaimer
While we strive to maintain accurate and current information in this Documentation, technical standards, software versions, and security best practices evolve continuously. Server administrators are responsible for:
- Verifying current software versions and compatibility
- Adapting configurations to their specific system requirements
- Ensuring compliance with current security standards and regulations
- Consulting additional resources for the most current security recommendations
## 9. CONCLUSION
This Server Setup Documentation establishes mandatory standards and procedures for configuring remote servers used to host projects maintained by our organisation. Strict adherence to these requirements is essential for maintaining security, reliability, and compliance with our organisational policies and legal obligations.
All personnel responsible for server configuration, deployment, or maintenance must familiarise themselves with and comply with the requirements set forth in this Documentation. Questions about server configuration requirements or security standards should be directed to appropriate technical leadership through designated communication channels.
---
*For questions about server configuration requirements or to suggest improvements, please contact technical leadership through the designated channels outlined in our Security Policy.*
+1 -3
View File
@@ -12,12 +12,10 @@ This Style Guide (hereinafter referred to as "the Guide") establishes mandatory
### 1.2. Scope and Applicability
This Guide applies to all code contributions to NHCarrigan-maintained repositories, regardless of contributor status. All contributors to our projects are required to comply with the standards set forth in this Guide.
This Guide applies to all code contributions, regardless of contributor status, project type, or development context. All contributors are required to comply with the standards set forth in this Guide.
**IMPORTANT: Non-compliance with this Guide may result in rejection of contributions, requests for modification, or other appropriate actions as determined by project maintainers.**
**Note for Mentorship Programme Participants:** This Guide governs contributions to NHCarrigan-maintained repositories only. It does not apply to your flagship project. Your flagship project is your own intellectual property, and you are entirely free to set your own style standards, choose your own licence, and use your own copyright attribution.
### 1.3. Legal Compliance and Intellectual Property
All code contributions must comply with:
+54
View File
@@ -0,0 +1,54 @@
---
title: Naomi's VTubing Setup
---
Naomi uses her VTuber model for all of her client meetings, as well as streaming. Getting the software to work on Linux is a bit of a nightmare, so this page documents how she does so.
## 1. OpenSeeFace
In order to track her webcamera, OpenSeeFace needs to be run independently as a native script.
### 1.1. Installation
This should all be done in your home `~` directory.
- Begin by cloning the repository:
- `git clone https://github.com/emilianavt/OpenSeeFace`
- `cd OpenSeeFace`
- You will need to prepare Python
- Install the packages: `yay -Sy python python-virtualenv`
- Prepare the environment: `virtualenv -p python3 env`
- Source the environment: `source env/bin/activate`
- Install the dependencies: `pip3 install onnxruntime opencv-python pillow numpy`
### 1.2. Running
```
cd OpenSeeFace
source env/bin/activate
python facetracker.py -c 0 -W 1280 -H 720 --discard-after 0 --scan-every 0 --no-3d-adapt 1 --max-feature-updates 900
```
## 2. VSeeFace
VSeeFace does not run natively, and will need to run with Wine.
### 2.1. Installation
[Download and run the installer](https://www.vseeface.icu/#download). When selecting a directory, put it in `~/VSeeFace`.
### 2.2. Running
```bash
wine ~/VSeeFace/VSeeFace.exe --background-color "#00FF00"
```
The `--background-color` flag creates a green screen background to be chroma-keyed out by OBS.
## 3. OBS
OBS allows for virtual camera, as well as for streaming.
### 3.1. Installation
The `obs-studio-git` AUR package is Naomi's current installation.
+2 -10
View File
@@ -2,14 +2,6 @@
title: 00. Frequently Asked Questions
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**PROVIDING ANSWERS TO FREQUENTLY ASKED QUESTIONS REGARDING THE MENTORSHIP PROGRAMME**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -75,7 +67,7 @@ This FAQ addresses common questions and concerns regarding programme participati
**Response Time Guidelines:**
- Most programme activities can be completed independently using provided documentation
- If you have questions, feel free to ask in the #βš—οΈβ”‚alchemy-lab channel
- If you have questions, feel free to ask in the #mentee-chat channel
- If you have not received a response within 10 business days, you may send a gentle reminder
- Repeated communications at intervals of less than 10 business days may result in disciplinary action
- We appreciate your patience and understanding regarding response timelines
@@ -148,7 +140,7 @@ All expulsion decisions are made in accordance with our Mentorship Programme Ter
- Review the comprehensive mentorship documentation (01-10) for detailed guidance on each programme stage
- Check the resource library for templates, examples, and additional materials
- Contact programme leadership through the designated #βš—οΈβ”‚alchemy-lab channel in our Discord community
- Contact programme leadership through the designated #mentee-chat channel in our Discord community
- Ask community members and alumni for peer support and guidance
- Programme leadership is available to answer questions when asked, but most activities can be completed independently
- Additional information is available in our comprehensive [Mentorship Programme Terms and Conditions](/about/mentorship)
@@ -2,14 +2,6 @@
title: 01. Onboarding
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING ONBOARDING PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
+2 -10
View File
@@ -2,14 +2,6 @@
title: 02. Goal Setting
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING GOAL-SETTING PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -32,7 +24,7 @@ Goal-setting procedures must be initiated following completion of onboarding pro
### 2.2. Goal-Setting Forum Post Creation
**Required Action:** Create a thread in the #πŸŽ―β”‚oaths forum channel on our Discord community.
**Required Action:** Create a thread in the #goal-setting forum channel on our Discord community.
**Thread Naming Convention:**
```markdown
@@ -71,7 +63,7 @@ Goal-setting procedures must be initiated following completion of onboarding pro
### 2.4. Optional Feedback and Clarification
If you would like feedback on your goal-setting post or have questions about creating your roadmap, you can:
- Ask questions in the #βš—οΈβ”‚alchemy-lab channel in Discord
- Ask questions in the #mentee-chat channel in Discord
- Request feedback from programme leadership or community members
- Review roadmap templates and examples in the resource library
- Proceed independently if you feel confident in your goals and plan
+3 -11
View File
@@ -2,14 +2,6 @@
title: 03. Project Planning
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING PROJECT PLANNING PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -32,7 +24,7 @@ Project planning procedures must be initiated following completion of goal-setti
### 2.2. Project Planning Forum Post Creation
**Required Action:** Create a post in the #πŸ—ΊοΈβ”‚quest-board forum channel on our Discord community.
**Required Action:** Create a post in the #project-plan forum channel on our Discord community.
**Post Naming Convention:**
```markdown
@@ -59,7 +51,7 @@ Project planning procedures must be initiated following completion of goal-setti
**Project Idea Assistance:**
- If you do not yet have a project idea, create your post with a statement such as: "I need help brainstorming a project idea"
- Review project idea examples in the resource library for inspiration
- Ask for help in the #βš—οΈβ”‚alchemy-lab channel if you'd like community input
- Ask for help in the #mentee-chat channel if you'd like community input
- Programme leadership and community members can provide feedback if requested
- You can also proceed independently by researching project ideas online or adapting examples
@@ -76,7 +68,7 @@ Once your project planning post is created, you will develop your project plan i
- Create a detailed project plan ready for development work
**Optional Support:**
- If you need help brainstorming or refining your project idea, ask in the #βš—οΈβ”‚alchemy-lab channel
- If you need help brainstorming or refining your project idea, ask in the #mentee-chat channel
- Community members and programme leadership can provide feedback if requested
- You can proceed independently once you have a project concept you're happy with
@@ -2,14 +2,6 @@
title: 04. User Stories
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING USER STORY DEVELOPMENT PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -101,7 +93,7 @@ Separate issues provide:
**Optional Review:**
- If you would like feedback on your user stories, you can:
- Request review in the #βš—οΈβ”‚alchemy-lab channel in Discord
- Request review in the #mentee-chat channel in Discord
- Ask community members or alumni for peer review
- Review user story examples in the resource library for comparison
- Reviews are optional and available upon request, not required
@@ -2,14 +2,6 @@
title: 05. Technical Breakdown
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING TECHNICAL BREAKDOWN PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -191,7 +183,7 @@ Complete the technical breakdown template for each user story. Completion includ
**Optional Review:**
- If you would like feedback on your technical breakdowns, you can:
- Request review in the #βš—οΈβ”‚alchemy-lab channel in Discord
- Request review in the #mentee-chat channel in Discord
- Ask community members or alumni for peer review
- Review technical breakdown examples in the resource library for comparison
@@ -2,14 +2,6 @@
title: 06. Priority and Effort
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING PRIORITY AND EFFORT ASSIGNMENT PROCEDURES FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -141,7 +133,7 @@ The purpose of applying effort labels is to help plan work timelines and resourc
**Optional Review:**
- If you would like feedback on your priority and effort assignments, you can:
- Request review in the #βš—οΈβ”‚alchemy-lab channel in Discord
- Request review in the #mentee-chat channel in Discord
- Ask community members or alumni for peer review
- Review priority and effort examples in the resource library for comparison
- Reviews are optional and available upon request, not required
+4 -14
View File
@@ -2,14 +2,6 @@
title: 07. Writing Code
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING CODE DEVELOPMENT PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -22,7 +14,7 @@ This Writing Code Documentation (hereinafter referred to as "the Documentation")
This Documentation applies to all participants in our Mentorship Programme following completion of priority and effort assignment procedures. All participants should comply with the code development procedures set forth in this Documentation.
**IMPORTANT: Whilst developing your flagship project, you must comply with our [Community Code of Conduct](/community/coc) and [Community Guidelines](/community/guide). Your mentorship repository must not be used for any code or non-code content or behaviour that is illegal, harmful to others, discriminatory, or bigoted. See Section 7.3 for details on intellectual property and style standards. Code reviews are optional and available upon request, not mandatory.**
**IMPORTANT: Code development should comply with our Style Guide, Contributor Covenant, and all applicable development standards. Code reviews are optional and available upon request, not mandatory.**
## 2. DEVELOPMENT WORKFLOW REQUIREMENTS
@@ -71,7 +63,7 @@ Before writing code, participants must consider and address the requirements set
- Community members and alumni may also provide peer reviews if requested
**Requesting Reviews:**
- If you would like a code review, request one in the #βš—οΈβ”‚alchemy-lab channel or tag programme leadership on your PR
- If you would like a code review, request one in the #mentee-chat channel or tag programme leadership on your PR
- Reviews are provided when available, not guaranteed immediately
- You can proceed with development while waiting for reviews
@@ -177,11 +169,9 @@ This Documentation establishes code development procedures and requirements. How
- Programme leadership is not responsible for participants' ability to complete development work
- Individual results may vary based on participant skill, effort, and other factors
### 7.3. Intellectual Property Ownership
### 7.3. Intellectual Property Considerations
**Your flagship project belongs to you.** NHCarrigan makes no claim to intellectual property rights over projects developed during the Mentorship Programme. You own your project outright and are free to licence it however you choose.
**Regarding style standards:** Our Style Guide applies only to contributions to NHCarrigan-maintained repositories β€” it does not apply to your flagship project. You are entirely free to choose your own coding style, linting tools, licence, and copyright attribution for your own project.
All code developed as part of the Mentorship Programme is subject to our Mentorship Programme Terms and Conditions regarding intellectual property rights. Participants should familiarise themselves with these terms before beginning development work.
## 8. CONCLUSION
+3 -11
View File
@@ -2,14 +2,6 @@
title: 08. Final Polish
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING FINAL POLISH AND DEPLOYMENT PROCEDURES FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -36,7 +28,7 @@ When you believe your flagship project has reached a state where it can be proud
- Begin addressing items on the checklist independently
**Optional Support:**
- If you would like feedback on project readiness, ask in the #βš—οΈβ”‚alchemy-lab channel
- If you would like feedback on project readiness, ask in the #mentee-chat channel
- Programme leadership or community members can provide guidance if requested
- You can proceed independently using the provided resources
@@ -89,7 +81,7 @@ Use the provided documentation templates and examples in the resource library to
- End user documentation examples
**Optional Support:**
- If you need help with documentation, ask in the #βš—οΈβ”‚alchemy-lab channel
- If you need help with documentation, ask in the #mentee-chat channel
- Programme leadership or community members can provide guidance if requested
- You can proceed independently using the provided templates
@@ -171,7 +163,7 @@ You should deploy a live version of your application for professional presentati
- Free options may not always be viable depending on project requirements
**Optional Support:**
- If you encounter issues during deployment, ask for help in the #βš—οΈβ”‚alchemy-lab channel
- If you encounter issues during deployment, ask for help in the #mentee-chat channel
- Programme leadership or community members can provide guidance if requested
- Most deployment can be completed independently using the provided guides
+4 -12
View File
@@ -2,14 +2,6 @@
title: 09. Career Prep
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING CAREER PREPARATION PROCEDURES AND REQUIREMENTS FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -71,7 +63,7 @@ Upon reaching the career preparation stage, you have access to comprehensive res
- Present your project effectively on your resume
**Optional Review:**
- If you would like feedback on your resume, request a review in the #βš—οΈβ”‚alchemy-lab channel
- If you would like feedback on your resume, request a review in the #mentee-chat channel
- Programme leadership or community members can provide feedback if requested
- Reviews are optional and available upon request
@@ -100,7 +92,7 @@ LinkedIn profile preparation should focus on:
- Optimizing profile for recruiter visibility
**Optional Review:**
- If you would like feedback on your LinkedIn profile, request a review in the #βš—οΈβ”‚alchemy-lab channel
- If you would like feedback on your LinkedIn profile, request a review in the #mentee-chat channel
- Programme leadership or community members can provide feedback if requested
- Reviews are optional and available upon request
@@ -134,7 +126,7 @@ LinkedIn profile preparation should focus on:
- Review application content using provided checklists
**Optional Support:**
- If you would like feedback on your applications, request a review in the #βš—οΈβ”‚alchemy-lab channel
- If you would like feedback on your applications, request a review in the #mentee-chat channel
- Programme leadership or community members can provide feedback if requested
- Support is limited to guidance and feedback on application content
- You are responsible for submitting your own applications
@@ -161,7 +153,7 @@ LinkedIn profile preparation should focus on:
**Mock Interview Availability:**
- Mock interviews are available upon request when programme leadership or community members are available
- Request mock interviews in the #βš—οΈβ”‚alchemy-lab channel
- Request mock interviews in the #mentee-chat channel
- Mock interviews prepare you for real interview situations
- Feedback and coaching on interview performance may be provided
@@ -2,14 +2,6 @@
title: 10. Graduation
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ESTABLISHING GRADUATION CRITERIA AND ALUMNI PROGRAMME PROCEDURES FOR MENTORSHIP PROGRAMME PARTICIPANTS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
@@ -2,14 +2,6 @@
title: Career Preparation Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**RESUME TEMPLATES, LINKEDIN GUIDES, APPLICATION GUIDES, INTERVIEW RESOURCES, AND JOB SEARCH STRATEGIES**
## Resume Templates
@@ -2,14 +2,6 @@
title: Code Development Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**CODE REVIEW CHECKLIST, SELF-REVIEW GUIDELINES, AND BEST PRACTICES**
## Code Review Checklist
@@ -2,14 +2,6 @@
title: Code Review Checklist
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**SELF-REVIEW CHECKLIST FOR CODE QUALITY**
Use this checklist to review your own code before merging pull requests or when preparing for optional code reviews.
@@ -2,14 +2,6 @@
title: Final Polish Checklist
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**COMPREHENSIVE CHECKLIST FOR PROJECT FINAL POLISH**
Use this checklist to ensure your flagship project is ready for professional presentation.
@@ -2,14 +2,6 @@
title: Final Polish Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**FINAL POLISH CHECKLIST, CODE CLEANUP GUIDELINES, DOCUMENTATION TEMPLATES, AND DEPLOYMENT GUIDES**
## Final Polish Checklist
@@ -2,14 +2,6 @@
title: Goal Setting Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**ROADMAP TEMPLATES AND GOAL-SETTING RESOURCES**
## Roadmap Templates
@@ -2,14 +2,6 @@
title: Priority and Effort Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**PRIORITY ASSIGNMENT AND EFFORT ESTIMATION GUIDES**
## Priority Assignment Guide
@@ -2,14 +2,6 @@
title: Project Planning Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**PROJECT PLAN EXAMPLES AND BRAINSTORMING GUIDES**
## Project Plan Example
@@ -2,14 +2,6 @@
title: Technical Breakdown Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**TECHNICAL BREAKDOWN TEMPLATE AND EXAMPLES**
## Technical Breakdown Template
@@ -2,14 +2,6 @@
title: User Story Resources
---
:::caution[Programme Sunset]
The open Mentorship Programme has been sunset and is no longer accepting new participants. These pages remain available as reference material.
I'm now running a private, personalised professional development programme on an invite-only basis - hand-selecting a small number of participants so the shape of each journey can be built around them. There is no application process; participation is by direct invitation only.
Being active in my [Discord community](https://chat.nhcarrigan.com/) increases your chances of being invited.
:::
**USER STORY TEMPLATES, EXAMPLES, AND WRITING GUIDES**
## User Story Format
+94
View File
@@ -0,0 +1,94 @@
---
title: Managing Local Music
---
**DOCUMENTING LOCAL MUSIC LIBRARY MANAGEMENT PROCEDURES**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
### 1.1. Policy Overview
This Music Management Documentation (hereinafter referred to as "the Documentation") provides technical procedures and instructions for managing local music libraries on Linux systems. This Documentation operates within our comprehensive legal and policy framework, incorporating our Terms of Service, Privacy Policy, and all applicable legal protections by reference.
### 1.2. Purpose and Scope
This Documentation describes technical procedures for managing local music libraries. This information is provided for informational purposes and personal use only.
**IMPORTANT: Users are solely responsible for ensuring that all music acquisition, storage, and management activities comply with applicable copyright laws, licensing agreements, and legal requirements. Our organisation does not condone or support any illegal activities, including copyright infringement or piracy.**
### 1.3. Legal Compliance Disclaimer
All users must ensure that their music acquisition and management activities comply with:
- Applicable copyright laws and regulations
- Terms of service of music platforms and services
- Licensing agreements for music content
- All relevant intellectual property laws
Our organisation assumes no responsibility for any illegal activities conducted using information from this Documentation.
## 2. ACQUIRING MUSIC
You are welcome to use any method you wish to *LEGALLY* acquire music. We would never encourage the criminal act of piracy. But maybe you're an artist and you want to archive or back up your own music - in that case, here you go:
```bash
yt-dlp -x --audio-format mp3 <url> --cookies-from-browser firefox
```
Omit the `--cookies-from-browser firefox` if you do not need authentication (auth is required for age-restricted content, for example).
## 3. EDITING METADATA
The specific meta tags you may need to set will vary depending on the music software you use. We have confirmed that `TIT2` is read as the title and `TPE1` is read as the artist when using Amberol on Linux and Musicolet on Android. Using `-t` and `-a` might work.
```bash
id3v2 "/path/to/song" --TIT2 "Song Title" --TPE1 "Song Artist"
```
## 4. ADDING COVER IMAGES
Download the image (we have confirmed JPEGs work) that you want to apply to the song, then run:
```bash
eyeD3 --add-image="/path/to/img":FRONT_COVER "/path/to/mp3"
```
## 5. COPYING TO ANDROID DEVICES
You'll need to replace your paths and your device ID to match your local setup, but:
```bash
adb -s 192.168.12.105:5555 push music/* /storage/self/primary/Music
```
## 6. LIMITATION OF LIABILITY AND DISCLAIMERS
### 6.1. Reference to Comprehensive Liability Framework
**IMPORTANT: Comprehensive liability limitations, damage exclusions, and maximum liability caps are set forth in our Limitation of Liability and Indemnification Policy, which is incorporated herein by reference.**
### 6.2. Legal Compliance Disclaimer
This Documentation provides technical procedures only. Our organisation:
- Does not provide legal advice regarding music acquisition or copyright compliance
- Does not endorse or support any illegal activities, including copyright infringement
- Assumes no responsibility for users' compliance with copyright laws or licensing agreements
- Recommends that users consult qualified legal counsel for questions about copyright compliance
### 6.3. Technical Accuracy Disclaimer
While we strive to maintain accurate and current information in this Documentation, software tools, commands, and procedures may change over time. Users are responsible for:
- Verifying current software versions and compatibility
- Adapting procedures to their specific system configurations
- Ensuring their technical setup meets the requirements for these procedures
- Consulting additional resources for the most current technical information
## 7. CONCLUSION
This Music Management Documentation provides technical procedures for managing local music libraries on Linux systems. All users must ensure that their use of these procedures complies with applicable copyright laws, licensing agreements, and legal requirements.
---
*For questions about music management procedures or legal compliance, please consult qualified legal counsel.*
+151
View File
@@ -0,0 +1,151 @@
---
title: AI Prompts
---
**DOCUMENTING STANDARD AI PROMPTS AND WORKFLOW TEMPLATES**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
### 1.1. Policy Overview
This AI Prompts Documentation (hereinafter referred to as "the Documentation") provides standard prompts, templates, and workflow instructions for using artificial intelligence tools in our organisational workflows. This Documentation operates within our comprehensive legal and policy framework, incorporating our Terms of Service, Privacy Policy, and all applicable legal protections by reference.
### 1.2. Purpose and Scope
This Documentation serves as a reference for standardised AI prompts used in various organisational contexts. These prompts are provided for convenience and consistency but may require customisation for specific use cases.
**IMPORTANT: These prompts are provided as starting points and may require modification to meet specific requirements. Users are responsible for ensuring that any use of AI tools complies with applicable laws, regulations, and organisational policies.**
### 1.3. AI Tool Usage Disclaimer
Our organisation does not guarantee the accuracy, reliability, or appropriateness of outputs generated using these prompts. Users are responsible for:
- Reviewing and validating all AI-generated content
- Ensuring compliance with applicable laws and regulations
- Maintaining appropriate oversight of AI tool usage
- Protecting sensitive or confidential information when using AI tools
## 2. AI PROMPTS
### 2.1. Documentation Generation Prompt
Open Claude Code in your project directory, then provide this prompt:
```md
Please go through the entire `src` directory and use the codebase to generate documentation for me, given the following template:
---
title: <app name>
---
<app name> (hereinafter the "Application") is <description>
## 1. User Documentation
This section is for those interacting with a live instance of the Application.
## 2. Technical Documentation
This section is for those interested in running their own instance of the Application.
## 3. Legal Documentation
This section is for expansions to our legal policies specific to the Application.
## 4. Contributing Documentation
This section is for documentation related to contributing to the Application's codebase.
```
### 2.2. Comprehension Question Generation Prompt
We use this for some of our client work, but this is great for creating questions to quiz yourself on any document you've read.
````md
You must create three comprehension check questions for the lecture script the user provides. Do not include any other information. Format the response as a code block so the user can easily copy the syntax.
Here is the format:
```
### Question 1:
Which of the following is a key characteristic of relational databases?
**A.** Flexible schema
**B.** Document-based structure
**C.** Key-value pairs
**D.** Structured data in tables
Hint: Think about how data is organised in relational databases.
Answer: **D.** Structured data in tables
### Question 2:
Which of the following is a key characteristic of relational databases?
**A.** Flexible schema
**B.** Document-based structure
**C.** Key-value pairs
**D.** Structured data in tables
Hint: Think about how data is organised in relational databases.
Answer: **D.** Structured data in tables
### Question 3:
Which of the following is a key characteristic of relational databases?
**A.** Flexible schema
**B.** Document-based structure
**C.** Key-value pairs
**D.** Structured data in tables
Hint: Think about how data is organised in relational databases.
Answer: **D.** Structured data in tables
```
````
## 3. LIMITATION OF LIABILITY AND DISCLAIMERS
### 3.1. Reference to Comprehensive Liability Framework
**IMPORTANT: Comprehensive liability limitations, damage exclusions, and maximum liability caps are set forth in our Limitation of Liability and Indemnification Policy, which is incorporated herein by reference.**
### 3.2. AI Tool Usage Disclaimer
These prompts are provided for informational purposes only. Our organisation:
- Does not guarantee the accuracy, reliability, or appropriateness of outputs generated using these prompts
- Does not warrant that these prompts will produce desired results in all contexts
- Assumes no responsibility for outcomes resulting from the use of these prompts with AI tools
- Recommends that users review and validate all AI-generated content
### 3.3. User Responsibilities
Users are responsible for:
- Reviewing and validating all AI-generated content before use
- Ensuring compliance with applicable laws, regulations, and organisational policies
- Protecting sensitive or confidential information when using AI tools
- Maintaining appropriate oversight and quality control of AI tool usage
- Adapting prompts to meet specific requirements and contexts
## 4. CONCLUSION
This AI Prompts Documentation provides standardised prompts and workflow templates for using artificial intelligence tools in our organisational workflows. All users are responsible for ensuring that their use of these prompts complies with applicable laws, regulations, and organisational policies, and for maintaining appropriate oversight of AI tool usage.
---
*For questions about AI prompt usage or to suggest improvements, please contact appropriate organisational leadership through designated communication channels.*
+852
View File
@@ -0,0 +1,852 @@
---
title: Templates
---
**PROVIDING STANDARD TEMPLATES AND DOCUMENTATION FORMS**
## 1. INTRODUCTION AND LEGAL FRAMEWORK
### 1.1. Policy Overview
This Templates Documentation (hereinafter referred to as "the Documentation") provides standard templates, forms, and documentation formats used throughout our organisation. This Documentation operates within our comprehensive legal and policy framework, incorporating our Terms of Service, Privacy Policy, and all applicable legal protections by reference.
### 1.2. Purpose and Scope
This Documentation serves as a reference for standardised templates used in various organisational contexts. These templates are provided for convenience and consistency but may require customisation for specific use cases.
**IMPORTANT: These templates are provided as starting points and may require modification to meet specific legal, regulatory, or contextual requirements. Users are responsible for ensuring that any use of these templates complies with applicable laws and regulations.**
### 1.3. Disclaimer
Our organisation does not provide legal advice. These templates are provided for informational purposes only. Users should consult with qualified legal counsel when using these templates for legal matters or when compliance with specific regulations is required.
## 2. TEMPLATES
### 2.1. Legal Templates
#### 2.1.1. DMCA Takedown Template
```md
To whom it may concern:
We are writing to notify you of the copyright infringement and unlawful use of our copyrighted material that appear on the service for which you are the designated agent.
The infringing material, which we contend belong to us, includes our original visual assets.
The infringing material appears at the following location(s):
<url>
The original material is available at the following location(s):
<url>
This letter is the official notification under Section 512(c) of the Digital Millennium Copyright Act of 1998 ("DMCA") and we request the immediate removal of the aforementioned infringing materials from your servers.
We also request that you immediately notify the infringer of this notice and inform them to cease any further posting of the infringing material to your server in the future.
We are providing this notice in good faith and with the reasonable belief that we are the copyright holder of the material, and that the use of the described material in the manner complained is not authorised by us, our agents, or the law.
We swear, under penalty of perjury, that the information in this notification is accurate and that we are the owner of the copyrighted material involved.
If you have any questions, please feel free to reach out to us.
```
### 2.2. LinkedIn Templates
#### 2.2.1. LinkedIn Cold Outreach Response Template
```md
I would be more than happy to chat! You can schedule time directly on my calendar:
https://zcal.co/nhcarrigan/meet
```
#### 2.2.2. LinkedIn Post-Event Recommendation Template
```md
I had the absolute pleasure of working with [Participant's Name] during our [event name], where [they] consistently impressed me with [their] dedication, technical growth, and collaborative spirit.
From the start, [Participant's Name] dove into the challenge with enthusiasm, applying [their] skills in [tech stack] to build real, impactful solutions. Whether working independently or as part of a team, [they] brought thoughtful ideas, clear communication, and a passion for learning that elevated everyone around [them].
The value of [Participant's Name]'s contributions are immeasurable. Throughout the event, they [explain loads of goals here].
By the end of the [event name], [Participant's Name] had delivered an outstanding project: [project name or brief description]. More than the final product, what stood out was [their] journeyβ€”embracing feedback, overcoming obstacles, and supporting others along the way.
I wholeheartedly recommend [Participant's Name] for any opportunity in tech. [They] bring not just technical ability, but the kind of energy and curiosity that makes any team stronger.
```
#### 2.2.3. LinkedIn Mentorship Recommendation Template
```md
I had the privilege of mentoring [Mentee's Name] through my 1:1 mentorship programme, and from our very first session, it was clear that [they] approached learning with curiosity, determination, and an eagerness to grow.
Over the course of the programme, [Mentee's Name] set clear goals and worked diligently towards themβ€”building both technical skills in [specific tech stack, tools, or concepts] and the professional confidence to apply those skills in real-world scenarios. [They] embraced feedback, sought out challenges, and consistently demonstrated the resilience needed to push past obstacles.
What impressed me most was [their] commitment to personal and professional growthβ€”not just in terms of technical ability, but also in communication, collaboration, and problem-solving. By the end of the mentorship, [Mentee's Name] had successfully delivered [describe final project or achievement], showing not only technical proficiency but also the ability to think critically and adapt to new situations.
I am confident that [Mentee's Name] will continue to excel in their career. They bring the kind of focus, curiosity, and dedication that make them a valuable asset to any team, and I am proud to have played a part in their journey.
```
### 2.3. Form Response Email Templates
#### 2.3.1. Appeals Form - Approval Email Template
Subject Line: `Appeal Decision - [Sanction Type] Appeal Upheld`
```md
Dear [Appellant's Name],
Thank you for submitting your appeal regarding the disciplinary sanction imposed on [date of original sanction]. We acknowledge receipt of your appeal and have conducted a thorough review in accordance with our Community Disciplinary Appeals Policy.
After careful consideration by the Appeals Panel, which included examination of all evidence and documentation, review of the original decision and its rationale, and assessment of your submissions and arguments, we have determined that your appeal has merit and meets the grounds for appeal as established in our policy.
**Decision**: Your appeal has been upheld. The original disciplinary sanction has been [overturned/modified/reduced] as follows: [Insert specific details about the new decision].
**Reasoning**: [Insert detailed reasoning here, addressing the specific grounds raised in the appeal and explaining why the appeal was successful. This should reference procedural compliance, proportionality of the sanction, factual accuracy, evidence considered, and correct application of community policies.]
As outlined in Section 8.1 of our Community Disciplinary Appeals Policy, decisions of the Appeals Panel are final and binding. The decision outlined above is effective immediately.
We appreciate your engagement with our appeals process and your respect for our community standards. We look forward to your continued positive participation in our community.
Regards,
```
#### 2.3.2. Appeals Form - Rejection Email Template
Subject Line: `Appeal Decision - [Sanction Type] Appeal Dismissed`
```md
Dear [Appellant's Name],
Thank you for submitting your appeal regarding the disciplinary sanction imposed on [date of original sanction]. We acknowledge receipt of your appeal and have conducted a thorough review in accordance with our Community Disciplinary Appeals Policy.
After careful consideration by the Appeals Panel, which included examination of all evidence and documentation, review of the original decision and its rationale, and assessment of your submissions and arguments, we have determined that your appeal does not meet the grounds for appeal as established in our policy.
**Decision**: Your appeal has been dismissed. The original disciplinary sanction remains in full effect.
**Reasoning**: [Insert detailed reasoning here, addressing the specific grounds raised in the appeal and explaining why the original decision was appropriate. This should reference procedural compliance, proportionality of the sanction, factual accuracy, evidence considered, and correct application of community policies.]
As outlined in Section 8.1 of our Community Disciplinary Appeals Policy, decisions of the Appeals Panel are final and binding. No further appeals or reviews are available through our internal processes.
We understand that this decision may be disappointing. Our appeals process is designed to ensure fairness and transparency, and we have given your submission careful consideration. The original sanction was imposed in accordance with our community standards and policies, which are designed to maintain a safe and welcoming environment for all members.
If you have any questions about this decision, please note that our Appeals Panel's determination is final. We appreciate your understanding and respect for our community standards and processes.
Regards,
```
#### 2.3.3. Commissions Form - Approval Email Template
```md
Hello [Requester's Name],
Thank you for your commission request! We are excited to work with you on [brief description of commission].
We have reviewed your request and are pleased to accept it. We will begin working on your commission and will keep you updated on our progress.
**Next Steps:**
- [Insert specific next steps, timeline, or requirements here]
- You will receive updates via [preferred contact method]
- Expected completion date: [date if applicable]
If you have any questions or need to make changes to your request, please don't hesitate to reach out to us.
We look forward to creating something amazing for you!
Best regards,
```
#### 2.3.4. Commissions Form - Rejection Email Template
```md
Hello [Requester's Name],
Thank you for your interest in commissioning work from us. We appreciate you taking the time to submit your request.
After careful review, we have decided not to proceed with your commission request at this time. This decision may be based on factors such as current workload, project scope, timeline constraints, or alignment with our services.
Please note that due to the volume of requests we receive, we are unable to provide detailed feedback on every declined request.
We encourage you to stay engaged with our community and projects. If your needs change or you have a different project in mind, we would welcome a new request in the future.
If you have any questions, please reach out in our Discord community: https://chat.nhcarrigan.com
Best regards,
```
#### 2.3.5. Community Recognition Form - Approval Email Template
```md
Hello [Nominator's Name],
Thank you for taking the time to nominate [Nominee's Name] for community recognition! We truly appreciate you highlighting the positive contributions of community members.
We are pleased to inform you that your nomination has been accepted and will be considered in our next recognition cycle. The recognition process involves review by our leadership team, and selected nominees will be celebrated through our community recognition programmes.
**What Happens Next:**
- Your nomination will be reviewed by our recognition committee
- Selected nominees will be notified and celebrated publicly
- Recognition may include awards, spotlights, or other forms of appreciation
- All nominations help us build a more appreciative and inclusive community
Thank you for helping us celebrate the amazing contributions of our community members. Your nomination makes a difference!
If you have any questions, please reach out in our Discord community: https://chat.nhcarrigan.com
Warm regards,
```
#### 2.3.6. Community Recognition Form - Rejection Email Template
```md
Hello [Nominator's Name],
Thank you for taking the time to submit a nomination for community recognition. We truly appreciate your effort to highlight positive contributions in our community.
After careful review, we have decided not to proceed with this nomination at this time. This decision may be based on factors such as eligibility criteria, timing, or alignment with our recognition programmes.
Please note that due to the volume of nominations we receive, we are unable to provide detailed feedback on every declined nomination.
We encourage you to continue recognising positive contributions in our community. There are many ways to show appreciation, including direct recognition, peer appreciation, and future nominations.
If you have any questions about our recognition programmes, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you again for your engagement with our community.
Warm regards,
```
#### 2.3.7. Contact Form - Approval Email Template
```md
Hello [Contact's Name],
Thank you for reaching out to us through our contact form. We have received your message regarding [brief topic summary].
We appreciate you taking the time to contact us and are pleased to confirm that we have received your inquiry. [Insert specific response or next steps here, such as:]
- We will review your request and respond within [timeframe]
- A team member will be in touch shortly
- We have scheduled a follow-up [meeting/call/response] for [date/time]
If you have any urgent questions or need immediate assistance, please don't hesitate to reach out in our Discord community: https://chat.nhcarrigan.com
We look forward to connecting with you!
Best regards,
```
#### 2.3.8. Contact Form - Rejection Email Template
```md
Hello [Contact's Name],
Thank you for reaching out to us through our contact form. We have received your message regarding [brief topic summary].
After reviewing your inquiry, we are unable to assist with your request at this time. This may be due to factors such as scope of services, current capacity, or alignment with our mission and values.
Please note that due to the volume of inquiries we receive, we are unable to provide detailed feedback on every declined request.
If you have questions about our services or policies, we encourage you to review our documentation at https://docs.nhcarrigan.com or join our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding.
Best regards,
```
#### 2.3.9. Development Review Requests Form - Approval Email Template
```md
Hello [Requester's Name],
Thank you for your development review request! We have reviewed your submission and are pleased to accept your request for review of [project/repository name or description].
**Review Details:**
- Review Type: [Code Review/Project Review/Architecture Review/etc.]
- Materials to be Reviewed: [list of materials]
- Expected Timeline: [timeline for review completion]
**Next Steps:**
- Our team will begin reviewing your materials
- You will receive detailed feedback via [communication method]
- We will provide constructive suggestions for improvement
Please note that development reviews are provided as free services to active community members, and feedback is provided in good faith based on our expertise and best practices.
If you have any questions or need to provide additional materials, please don't hesitate to reach out.
We look forward to reviewing your work!
Best regards,
```
#### 2.3.10. Development Review Requests Form - Rejection Email Template
```md
Hello [Requester's Name],
Thank you for your interest in receiving a development review. We appreciate you taking the time to submit your request.
After careful review, we have decided not to proceed with your development review request at this time. This decision may be based on factors such as:
- Current review capacity and workload
- Alignment with our review services and expertise
- Community membership and engagement requirements
- Project scope or complexity
Please note that development reviews are provided as free services exclusively to active members of our community. If you are not currently an active community member, we encourage you to join our Discord community at https://chat.nhcarrigan.com and become an active participant.
If you have questions about our development review services or would like to resubmit in the future, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding.
Best regards,
```
#### 2.3.11. Events Form - Approval Email Template
```md
Hello [Event Organiser's Name],
Thank you for your event request! We are excited about your proposed event: [Event Name].
We have reviewed your submission and are pleased to approve your event request. We look forward to supporting and promoting this event within our community.
**Event Details:**
- Event Name: [Event Name]
- Proposed Date: [Date]
- Event Type: [Type of event]
**Next Steps:**
- [Insert specific next steps, such as scheduling, promotion, or coordination details]
- We will work with you to finalise event details
- Event promotion will begin [timeline]
If you have any questions or need to make changes to your event details, please don't hesitate to reach out to us.
Thank you for contributing to our community through this event!
Best regards,
```
#### 2.3.12. Events Form - Rejection Email Template
```md
Hello [Event Organiser's Name],
Thank you for your interest in organising an event with our community. We appreciate you taking the time to submit your event request: [Event Name].
After careful review, we have decided not to proceed with your event request at this time. This decision may be based on factors such as:
- Current event calendar and capacity
- Alignment with our community values and mission
- Resource availability and support requirements
- Event scope or logistics
Please note that due to the volume of event requests we receive, we are unable to provide detailed feedback on every declined request.
We encourage you to stay engaged with our community and consider submitting future event proposals. If you have questions about our event policies or would like to discuss alternative event formats, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding and continued engagement with our community.
Best regards,
```
#### 2.3.13. Mock Interview Requests Form - Approval Email Template
```md
Hello [Requester's Name],
Thank you for your mock interview request! We have reviewed your submission and are pleased to accept your request for a [technical/behavioural/combined] mock interview.
**Interview Details:**
- Interview Type: [Type]
- Target Role: [Role if provided]
- Interview Format: [Format]
**Next Steps:**
- We will coordinate with you to schedule your mock interview session
- Mock interviews are typically conducted via [video call/voice call]
- Sessions typically last between 30-60 minutes
- You will receive preparation materials and session details via [communication method]
Please note that mock interviews are provided as free services exclusively to active members of our community. We look forward to helping you prepare for your upcoming interview!
If you have any questions or need to reschedule, please don't hesitate to reach out to us.
Best regards,
```
#### 2.3.14. Mock Interview Requests Form - Rejection Email Template
```md
Hello [Requester's Name],
Thank you for your interest in receiving a mock interview. We appreciate you taking the time to submit your request.
After careful review, we have decided not to proceed with your mock interview request at this time. This decision may be based on factors such as:
- Current interview capacity and availability
- Community membership and engagement requirements
- Interview type or scope alignment with our services
- Scheduling constraints
**IMPORTANT**: Mock interviews are provided as free services EXCLUSIVELY to active members of our community. These services are NOT available to the general public. To be eligible, you MUST be an active, engaged member of our community with demonstrated participation and engagement.
If you are not currently an active community member, we encourage you to join our Discord community at https://chat.nhcarrigan.com and become an active participant. Once you have established active community membership through regular participation and engagement, you will be eligible to request mock interview services.
If you have questions about our mock interview services or community membership, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding.
Best regards,
```
#### 2.3.15. Portfolio Review Requests Form - Approval Email Template
```md
Hello [Requester's Name],
Thank you for your portfolio review request! We have reviewed your submission and are pleased to accept your request for review of your [resume/LinkedIn profile/GitHub profile/portfolio website].
**Review Details:**
- Review Type: [Resume/LinkedIn/GitHub/Portfolio Review]
- Materials to be Reviewed: [list of materials or links]
**Next Steps:**
- Our team will begin reviewing your materials
- You will receive detailed feedback via [communication method]
- We will provide constructive suggestions for improvement based on industry best practices
Please note that portfolio reviews are provided as free services to active community members, and feedback is provided in good faith based on our expertise and professional standards.
If you have any questions or need to provide additional materials, please don't hesitate to reach out.
We look forward to reviewing your materials and helping you improve your professional presentation!
Best regards,
```
#### 2.3.16. Portfolio Review Requests Form - Rejection Email Template
```md
Hello [Requester's Name],
Thank you for your interest in receiving a portfolio review. We appreciate you taking the time to submit your request.
After careful review, we have decided not to proceed with your portfolio review request at this time. This decision may be based on factors such as:
- Current review capacity and workload
- Community membership and engagement requirements
- Material accessibility or completeness
- Review type alignment with our services
**IMPORTANT**: Portfolio reviews are provided as free services EXCLUSIVELY to active members of our community. These services are NOT available to the general public. To be eligible, you MUST be an active, engaged member of our community with demonstrated participation and engagement.
If you are not currently an active community member, we encourage you to join our Discord community at https://chat.nhcarrigan.com and become an active participant. Once you have established active community membership through regular participation and engagement, you will be eligible to request portfolio review services.
If you have questions about our portfolio review services or community membership, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding.
Best regards,
```
#### 2.3.17. Recommendations Form - Approval Email Template
```md
Hello [Requester's Name],
Thank you for your recommendation request! We have reviewed your submission and are pleased to accept your request for a recommendation.
**Recommendation Details:**
- Recommendation Type: [LinkedIn Recommendation/General Recommendation/etc.]
- Context: [Brief context if provided]
**Next Steps:**
- We will prepare your recommendation based on our relationship and your contributions
- Recommendations are typically provided via [LinkedIn/email/etc.]
- You will receive a copy of the recommendation once it is completed
- Expected completion: [timeline]
Please note that recommendations are provided as free services in good faith, based on our relationship and knowledge of your work. We provide honest, accurate recommendations based on our direct experience with you.
If you have any questions or need to provide additional context, please don't hesitate to reach out.
We are happy to support you in your professional journey!
Best regards,
```
#### 2.3.18. Recommendations Form - Rejection Email Template
```md
Hello [Requester's Name],
Thank you for your interest in receiving a recommendation. We appreciate you taking the time to submit your request.
After careful review, we have decided not to proceed with your recommendation request at this time. This decision may be based on factors such as:
- Insufficient direct working relationship or interaction
- Lack of sufficient context or experience to provide an accurate recommendation
- Timeline constraints or capacity limitations
- Alignment with our recommendation policy and standards
Please note that we can only provide recommendations when we have sufficient direct experience and relationship with the requester to provide an honest, accurate, and meaningful recommendation.
If you believe there has been an error or would like to discuss your request further, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding.
Best regards,
```
#### 2.3.19. Staff Applications Form - Approval Email Template
```md
Dear [Applicant's Name],
Thank you so much for taking the time to apply for a volunteer role with NHCarrigan. We truly appreciate your interest in contributing your time and energy to our community.
After carefully reviewing your application, we are excited to inform you that we would like to move forward with your candidacy! We were impressed by [specific aspects of their application] and believe you would be a valuable addition to our team.
**Next Steps:**
- You will receive a separate email with your contract and onboarding materials
- Please review the contract carefully and reach out with any questions or concerns
- You can reach out to us on Discord (https://chat.nhcarrigan.com) or reply to this email if you have any questions or concerns
We are thrilled about the possibility of working with you and look forward to welcoming you to our team. Thank you again for your interest and enthusiasm!
Warm regards,
```
#### 2.3.20. Staff Applications Form - Onboarding Email Template
```md
Dear [New Staff Member's Name],
Welcome to the NHCarrigan team! We are thrilled to have you join us and are excited to begin working together.
**Getting Started:**
1. **Join Our Discord Server:**
- Please join our Discord community at: https://chat.nhcarrigan.com
- This is where most of our team communication and collaboration happens
2. **Access Credentials:**
- **Email:**
- Address:
- Password:
- Can access email via web at https://mail.nhcarrigan.com/mail or through any email client/app. A reminder that this is only for work-related use. Please do not spam people and get our mail server blocked (I do have logs).
- **Gitea:** https://git.nhcarrigan.com
- Username:
- Password:
3. **Complete Your Training:**
- Please complete the policy assessment form for training: https://forms.nhcarrigan.com/o/docs/forms/nxaJyKBuKH9nrt3m5VC98w/4
- This is an important step to ensure you are familiar with our policies and procedures
**Next Steps:**
- Our team will be in touch shortly to discuss your role-specific responsibilities
- Feel free to explore our documentation at https://docs.nhcarrigan.com
If you have any questions or need assistance getting set up, please don't hesitate to reach out to us on Discord or reply to this email.
We are excited to have you on board and look forward to working with you!
Warm regards,
```
#### 2.3.21. Staff Applications Form - Rejection Email Template
```md
Dear [Applicant's Name],
Thank you so much for taking the time to apply for a volunteer role with NHCarrigan. We truly appreciate your interest in contributing your time and energy to our community.
After carefully reviewing your application, we've decided not to move forward with your candidacy for this volunteer position at this time. Please don't take this as a reflection of your value or potentialβ€”our selection process is highly competitive, and we often have to make very difficult decisions.
Please note that due to the large volume of applications we receive, we are unable to provide personalised feedback. Here are some common application issues we see:
1. Low-effort Application: Please ensure you are taking the time to provide detailed, well-thought responses. The more effort you put in, the more likely we will be able to accept your application.
2. Invalid Discord ID: Applications require you to provide your unique Discord ID - this is a 16 to 19 digit number that uniquely identifies your Discord account. If this is incorrect, we are unable to accept an application. If you need help finding yours, please refer to https://dis.gd/findid
3. Concerning Responses: If your responses to any of the application questions raise red flags, we decline your application. Remember that you want to paint yourself in the best light here.
We still encourage you to stay engaged with our community spaces, events, and projects. There are always opportunities to connect, learn, and grow together, and we would love to see you continue to participate.
We encourage you to take the time to consider these common points of failure, and would welcome a resubmission from you in the future.
Thank you again for your interest and enthusiasm. We wish you the very best in all your endeavors and hope our paths cross again in the future.
Warm regards,
```
#### 2.3.22. Testimonials Form - Approval Email Template
```md
Hello [Contributor's Name],
Thank you for sharing your testimonial with us! We have reviewed your submission and are pleased to accept it for publication.
**Testimonial Details:**
- Your testimonial will be reviewed and may be featured on our website, social media, or other promotional materials
- We may edit your testimonial for length, clarity, or formatting whilst preserving your message and intent
- You will be credited as [name/handle as provided]
**Next Steps:**
- Your testimonial will be added to our review queue
- We will notify you when it is published (if applicable)
- Thank you for helping others learn about our community and services!
Your words help us build trust and connect with others who might benefit from our community. We truly appreciate you taking the time to share your experience.
If you have any questions or would like to make changes to your testimonial, please don't hesitate to reach out.
Best regards,
```
#### 2.3.23. Testimonials Form - Rejection Email Template
```md
Hello [Contributor's Name],
Thank you for taking the time to submit a testimonial. We appreciate your interest in sharing your experience with our community.
After careful review, we have decided not to publish your testimonial at this time. This decision may be based on factors such as:
- Content alignment with our community values and standards
- Formatting or clarity requirements
- Current testimonial collection needs
- Verification or authenticity concerns
Please note that due to the volume of testimonials we receive, we are unable to provide detailed feedback on every declined submission.
We encourage you to stay engaged with our community and consider submitting a testimonial in the future if your experience changes or if you have additional feedback to share.
If you have questions about our testimonial process, please reach out in our Discord community: https://chat.nhcarrigan.com
Thank you for your understanding and continued engagement with our community.
Best regards,
```
### 2.4. Form Components
#### 2.4.1. Form Consent for Email Communications
Description:
```
At NHCarrigan, we are fully committed to respecting and protecting your privacy. We strictly adhere to a policy of non-disclosure regarding your personal data; we do not sell, trade, or transfer your information to outside parties. The contact details you provide will be used exclusively for the purpose of responding to your inquiry or addressing the subject of this form. For a complete overview of our data practices, please review our [Privacy Policy](https://docs.nhcarrigan.com/legal/privacy/).
```
Question:
```
I agree to be contacted via email, solely for the purpose of addressing this submission.
```
#### 2.4.2. Form Image Header
```html
<div style="width: 100%; text-align: center"><img src="https://cdn.nhcarrigan.com/logo.png" style="width: 250px; height: 250px"></div>
```
#### 2.4.3. Form Confirmation
Add this at the end of any form specific text.
```
If you'd like to stay up to date on everything we do, come hang out in our server! https://chat.nhcarrigan.com
```
### 2.5. Community & Communication Templates
#### 2.5.1. Discord Server Introduction Template
```md
Hello~! I'm Naomi, a 34 year old transfem software engineer and community manager based in Washington. All of my work (and therefore most of my life) is spent online, so I'm always looking for new spaces and people to vibe with. Remote work can feel dreadfully isolating, and this is my attempt to combat that feeling.
<insert bit about community here>
```
#### 2.5.2. freeCodeCamp Contributor Sprint Template
```md
## This issue is part of Naomi's sprint initiatives.
If you are interested in working on this issue, [join our Discord](https://chat.freecodecamp.org) and ping Naomi!
### Action Items
- [ ] Prototype created and PRed to https://github.com/freeCodeCamp/curriculumexpansion
- [ ] Prototype reviewed + approved + merged by staff
- [ ] Break prototype down into steps (if workshop) or individual "step" (if lab) - write description, hint text **only** (no tests yet), and seed code. Refer to https://contribute.freecodecamp.org/how-to-work-on-coding-challenges
- [ ] DRAFT PR opened on https://github.com/freeCodeCamp/freeCodeCamp
- [ ] Team + Naomi review your steps, confirm the breakdown + user stories look good
- [ ] Begin writing the actual test logic, refer to https://contribute.freecodecamp.org/curriculum-help/#basic-usage-pattern for how to write tests for Python challenges
- [ ] Mark PR as not a draft, team reviews + approves + merges
- [ ] YOU DID IT GO CELEBRATE!
### Other Details
- Remember to keep an eye on your PRs and respond to review comments and suggestions
- For workshops, refer to: https://contribute.freecodecamp.org/how-to-work-on-coding-challenges/
- For labs, refer to: https://contribute.freecodecamp.org/how-to-work-on-labs/
### Questions
Ping Naomi in the sprint channel on Discord
```
### 2.6. Gaming Templates
#### 2.6.1. Guild Wars 2 Recruitment Advertisement Template
This has to be sent in two chat messages because of the length.
```
Hiya friends~! Naomi's Newbies is a new guild that is really focused on helping newer players come to love the game, and supporting casual players who have busy schedules.
```
```
We have no activity requirement, no rep requirement, a Discord community, and more! If you are interested, please whisper me and I will gladly invite you!
```
### 2.7. Donation Templates
#### 2.7.1. Discord Bot Donation Copy Template
These go in the bot SKUs:
##### 2.7.1.1. Subscription Name
```
Sponsor Naomi
```
##### 2.7.1.2. Subscription Description
```
**How Your Support Makes a Difference**
1. Creating Free Software
- Develop open-source tools accessible to everyone
- Design Discord bots for community management and safe spaces
- Create learning resources and accessibility-focused web applications
2. Building Inclusive Communities
- Manage welcoming online spaces where diverse voices are celebrated
- Organise virtual events, workshops, and mentorship programmes
- Implement inclusive community guidelines
3. Guiding Others in Tech
- Provide mentorship to aspiring technologists from underrepresented groups
- Create educational content (tutorials, blog posts, videos)
- Offer career advice and emotional support
4. Your Contribution's Ripple Effect:
- Challenges the status quo of the tech industry
- Creates opportunities for underrepresented individuals in STEM
- Fosters innovation through diverse perspectives
- Builds a tech community that reflects and serves all of society
Every donation, regardless of size, contributes to this mission. Together, we're creating a more inclusive, accessible, and diverse future for technology.
Thank you for considering a donation and being part of this important journey.
```
##### 2.7.1.3. Benefit Name
```
Your donation:
```
##### 2.7.1.4. Benefit Description
```
Helps a transfemme technology witch create free software, build inclusive communities, and guide others on their journey in tech.
```
##### 2.7.1.5. Notes
- Use my avatar for subscription
- Use pentatrans for benefit
### 2.8. freeCodeCamp Templates
#### 2.8.1. freeCodeCamp Sprint Issue Template
```md
**Type:** Workshop/Lab/????
**Summary:**
**User Stories**
1.
2.
3.
**Technical Notes**
-
-
-
## This issue is part of Naomi's sprint initiatives.
If you are interested in working on this issue, [join our Discord](https://chat.freecodecamp.org) and ping Naomi!
### Action Items
- [ ] Prototype created and PRed to https://github.com/freeCodeCamp/curriculumexpansion
- [ ] Prototype reviewed + approved + merged by staff
- [ ] Break prototype down into steps (if workshop) or individual "step" (if lab) - write description, hint text **only** (no tests yet), and seed code.
- [ ] DRAFT PR opened on https://github.com/freeCodeCamp/freeCodeCamp
- [ ] Team + Naomi review your steps, confirm the breakdown + user stories look good
- [ ] Begin writing the actual test logic, refer to https://contribute.freecodecamp.org/curriculum-help/#js-helper for how to write tests for JS challenges
- [ ] Mark PR as not a draft, team reviews + approves + merges
- [ ] YOU DID IT GO CELEBRATE!
### Other Details
- Remember to keep an eye on your PRs and respond to review comments and suggestions
- For workshops, refer to: https://contribute.freecodecamp.org/how-to-work-on-coding-challenges/
- For labs, refer to: https://contribute.freecodecamp.org/how-to-work-on-labs/
### Questions
Ping Naomi in the sprint channel on Discord
```
#### 2.8.2. freeCodeCamp Sprint Progress Update
```md
**Progress Update - <date>**
<summarise what contributor said>
```
## 3. DISCLAIMERS AND USAGE REQUIREMENTS
### 3.1. Reference to Comprehensive Liability Framework
**IMPORTANT: Comprehensive liability limitations, damage exclusions, and maximum liability caps are set forth in our Limitation of Liability and Indemnification Policy, which is incorporated herein by reference.**
### 3.2. Template Usage Disclaimer
These templates are provided for informational purposes only. Our organisation:
- Does not provide legal advice or guarantee the legal effectiveness of these templates
- Does not warrant that these templates will meet specific legal, regulatory, or contextual requirements
- Recommends that users consult with qualified legal counsel when using these templates for legal matters
- Assumes no responsibility for outcomes resulting from the use of these templates
### 3.3. Customisation Requirements
Users are responsible for:
- Customising templates to meet their specific needs and requirements
- Ensuring compliance with applicable laws, regulations, and organisational policies
- Verifying the accuracy and appropriateness of template content for their specific use case
- Obtaining appropriate legal review when necessary
## 4. CONCLUSION
This Templates Documentation provides standardised templates and forms for use throughout our organisation. All users are responsible for ensuring that their use of these templates complies with applicable laws, regulations, and organisational requirements.
---
*For questions about template usage or to suggest improvements, please contact appropriate organisational leadership through designated communication channels.*
+1 -1
View File
@@ -165,7 +165,7 @@ Your Discord bot requires the following Gateway Intents:
Create a `.env` file in the project root with the following variables:
```sh
```env
# Discord Bot Configuration
TOKEN=your_discord_bot_token
+1 -1
View File
@@ -14,7 +14,7 @@ Altaria is a friendly Discord bot designed to encourage the use of alt-text (alt
### How to Add Altaria to Your Server
1. Use the official invitation link: [Add to Discord](https://discord.com/oauth2/authorize?client_id=1405356559214837860)
1. Use the official invitation link: [Add to Discord](https://discord.com/oauth2/authorise?client_id=1405356559214837860)
2. Select your server from the dropdown menu
3. Grant the necessary permissions:
- Read Messages/View Channels
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
To use Aria Iuvo, [add the bot to your Discord account](https://discord.com/oauth2/authorize?client_id=1338596130207957035) using the provided authorisation link. The bot operates as a user-installable application, meaning it can be used across any Discord server or direct message where you have access.
To use Aria Iuvo, [add the bot to your Discord account](https://discord.com/oauth2/authorise?client_id=1338596130207957035) using the provided authorisation link. The bot operates as a user-installable application, meaning it can be used across any Discord server or direct message where you have access.
### Core Features
+1 -1
View File
@@ -14,7 +14,7 @@ Becca Lyria is a user-installable Discord bot that transforms your DMs into an i
### Getting Started
1. **Installation**: [Add Becca Lyria to your Discord account](https://discord.com/oauth2/authorize?client_id=1343341112437248041)
1. **Installation**: [Add Becca Lyria to your Discord account](https://discord.com/oauth2/authorise?client_id=1343341112437248041)
2. **Subscription**: The bot requires an active subscription to use its features
3. **Start Playing**: Use the `/start` command to begin your adventure
+1 -1
View File
@@ -64,7 +64,7 @@ This section is for those interested in running their own instance of the Applic
```
4. Edit `.env` with your configuration:
```sh
```env
DISCORD_TOKEN="your-discord-bot-token"
SENTRY_DSN="your-sentry-dsn"
DEBUG_HOOK="your-discord-webhook-url"
+1 -1
View File
@@ -14,7 +14,7 @@ Caelia is a Discord bot designed to help create more inclusive communities by ge
### How to Add Caelia to Your Server
1. Visit the authorisation link: https://discord.com/oauth2/authorize?client_id=1408530011572535346
1. Visit the authorisation link: https://discord.com/oauth2/authorise?client_id=1408530011572535346
2. Select your server and grant the necessary permissions
3. Caelia will automatically begin monitoring messages in channels where she has access
+2 -2
View File
@@ -11,7 +11,7 @@ This section is for those interacting with a live instance of the Application.
### 1.1. Adding the Bot
Callista is available as a Discord user-installable application. You can add Callista to your Discord account by visiting:
https://discord.com/oauth2/authorize?client_id=1391494389477412906
https://discord.com/oauth2/authorise?client_id=1391494389477412906
### 1.2. Bookmarking Messages
@@ -363,7 +363,7 @@ For questions or support:
### 4.10. Issue Reporting
Please report bugs in the [Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) category and feature requests in the [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7) category on our support forum.
Please report bugs in the #bug-reports forum channel and feature requests in the #feature-requests forum channel on our Discord community.
Include:
- Clear description of the issue or feature
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
1. **Add Chibika to Your Discord Server**: Use the [Discord OAuth2 authorisation link](https://discord.com/oauth2/authorize?client_id=1396225647269122098) to add Chibika to your Discord server.
1. **Add Chibika to Your Discord Server**: Use the [Discord OAuth2 authorisation link](https://discord.com/oauth2/authorise?client_id=1396225647269122098) to add Chibika to your Discord server.
2. **Purchase Server Subscription**: To use Chibika's features, you must purchase a server subscription through Discord's built-in store system.
-40
View File
@@ -1,40 +0,0 @@
---
title: Chronara
---
Chronara (hereinafter the "Application") is an initialized project repository that is currently in scaffold state.
## 1. User Documentation
There is no published live application endpoint documented in the repository at this time.
The current repository content indicates project setup and governance files without user-facing runtime features.
## 2. Technical Documentation
Chronara currently reflects a baseline template repository state.
At present:
1. No runtime source code directories are defined.
2. No build or package manifest files are published.
3. No deployment or execution workflow is documented.
Technical documentation should be expanded once implementation code is introduced.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: https://docs.nhcarrigan.com/#/license
2. Terms: https://docs.nhcarrigan.com/#/terms
3. Privacy: https://docs.nhcarrigan.com/#/privacy
4. Security: https://docs.nhcarrigan.com/#/security
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests under the repository contributing guidelines and Code of Conduct.
Feedback and bug reports are handled via https://support.nhcarrigan.com.
+4 -4
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
To use Cordelia Taryne, [add her to your Discord account](https://discord.com/oauth2/authorize?client_id=1338664192714211459).
To use Cordelia Taryne, [add her to your Discord account](https://discord.com/oauth2/authorise?client_id=1338664192714211459).
### Available Commands
@@ -76,8 +76,8 @@ Cordelia has a distinctive personality:
### Support and Feedback
- **Bug Reports**: Post in the [Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) category on our support forum
- **Feature Requests**: Post in the [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7) category on our support forum
- **Bug Reports**: Post in the #bug-reports forum channel on our Discord community
- **Feature Requests**: Post in the #feature-requests forum channel on our Discord community
- **General Support**: Visit the [chat server](https://chat.nhcarrigan.com)
- **Contact**: Email `contact@nhcarrigan.com`
@@ -264,7 +264,7 @@ src/
### Contribution Process
1. **Issue Creation**: Post detailed bug reports or feature requests in the appropriate support forum category ([Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) or [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7))
1. **Issue Creation**: Post detailed bug reports or feature requests in the appropriate Discord forum channel (#bug-reports or #feature-requests)
2. **Discussion**: Discuss approach before starting work
3. **Implementation**: Follow coding standards and patterns
4. **Testing**: Test thoroughly in development environment
+1 -1
View File
@@ -647,7 +647,7 @@ When contributing, keep security in mind:
If you need help contributing:
- Post in the [Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) or [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7) categories on our support forum
- Post in the #bug-reports or #feature-requests forum channels on our Discord community
- Join the [Chat Server](https://chat.nhcarrigan.com)
- Email: `contact@nhcarrigan.com`
+18 -16
View File
@@ -10,13 +10,13 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
1. **Initial Setup**: Open the configuration screen and provide your API credentials and language preferences.
1. **Initial Setup**: Navigate to the Configuration page to set up your API credentials and language preferences.
2. **Configuration Options**:
- **Deepgram API Key**: Required for speech-to-text transcription.
- **Translation Service API Key**: Required for text translation. The application includes a built-in demonstration key in source comments with a 10 requests/minute limit.
- **Source Language**: Selected from the source-language allow-list defined in the configuration component.
- **Target Language**: Selected from the language-code mapping list used by the configuration component.
- **Deepgram API Key**: Required for speech-to-text transcription. You must provide your own API key from [Deepgram](https://deepgram.com).
- **Translation Service API Key**: Required for text translation. A demo key is available with a 10 requests/minute rate limit, or you can provide your own key.
- **Source Language**: Select from 12 supported languages (English, German, Dutch, Swedish, Danish, Spanish, French, Portuguese, Italian, Turkish, Norwegian, Indonesian).
- **Target Language**: Select from 60+ supported languages for translation.
3. **Using the Translation Interface**:
- Navigate to the Agent page to begin translation.
@@ -43,9 +43,10 @@ The application automatically enables:
### Limitations
- Requires a modern browser with microphone access.
- Requires a WebSocket connection for real-time transcription.
- Translation demo key usage is rate limited.
- Source language is limited to 12 languages supported by Deepgram
- Translation service demo key has a rate limit of 10 requests/minute
- Requires modern browser with microphone access
- WebSocket connection required for real-time functionality
## 2. Technical Documentation
@@ -69,17 +70,17 @@ This section is for those interested in running their own instance of the Applic
2. Install dependencies:
```bash
pnpm install
npm install
```
3. Start the development server:
```bash
pnpm run dev
npm run dev
```
4. Build for production:
```bash
pnpm run build
npm run build
```
### Technology Stack
@@ -87,7 +88,7 @@ This section is for those interested in running their own instance of the Applic
**Frontend Framework:**
- Angular 19.1.4 with standalone components
- TypeScript 5.7.3
- RxJS 7.8.2 for reactive programming
- RxJS 7.8.1 for reactive programming
- Angular Reactive Forms for configuration management
**External APIs:**
@@ -143,7 +144,8 @@ This section is for those interested in running their own instance of the Applic
#### Routing
- `/` - Home page
- `/` - Redirects to home
- `/home` - Landing page
- `/config` - Configuration page
- `/agent` - Translation interface
@@ -190,9 +192,9 @@ POST request body:
#### Available Scripts
- `pnpm run dev` - Start development server
- `pnpm run lint` - Run ESLint with zero warnings policy
- `pnpm run build` - Build for production
- `npm run dev` - Start development server
- `npm run lint` - Run ESLint with zero warnings policy
- `npm run build` - Build for production
#### Code Quality
+16 -49
View File
@@ -6,66 +6,33 @@ Elysium (hereinafter the "Application") is an idle RPG in the browser.
## 1. User Documentation
The Application provides an incremental/idler gameplay loop with progression systems including:
:::note
This section is coming soon!
:::
1. Adventurer hiring and resource scaling.
2. Zone exploration and boss encounters.
3. Questing and crafting systems.
4. Prestige, transcendence, and apotheosis reset layers.
5. Character profile, titles, and leaderboard visibility.
The API source includes routes for game state, combat, exploration, crafting, progression resets, leaderboards, and profiles (`apps/api/src/index.ts`).
This project is currently marked as work in progress in the public project feed.
This section is for those interacting with a live instance of the Application.
## 2. Technical Documentation
Elysium is a pnpm monorepo with two primary applications and a shared package.
:::note
This section is coming soon!
:::
Workspace layout:
1. `apps/web`: React + Vite frontend (`@elysium/web`).
2. `apps/api`: Hono-based API service (`@elysium/api`).
3. `packages/types`: shared type definitions (`@elysium/types`).
Current versions in repository manifests:
1. Root package: `0.5.0`.
2. API package: `0.5.0`.
3. Web package: `0.5.0`.
Root commands:
1. `pnpm install`
2. `pnpm dev`
3. `pnpm build`
4. `pnpm test`
API runtime notes:
1. Uses `op run --env-file=./prod.env` for secret injection.
2. Exposes a health endpoint at `GET /health`.
3. Uses Prisma client/database tooling and Hono route modules.
This section is for those interested in running their own instance of the Application.
## 3. Legal Documentation
The Application inherits nhcarrigan's global legal documents:
:::note
This section is coming soon!
:::
1. Privacy Policy: https://docs.nhcarrigan.com/#/privacy
2. Terms of Service: https://docs.nhcarrigan.com/#/terms
3. License: https://docs.nhcarrigan.com/#/license
Repository references:
1. `PRIVACY.md`
2. `TERMS.md`
3. `LICENSE.md`
This section is for expansions to our legal policies specific to the Application.
## 4. Contributing Documentation
Contribution guidance points to the shared docs portal:
:::note
This section is coming soon!
:::
1. https://docs.nhcarrigan.com/#/contributing
The repository also includes a manual verification checklist in `verify.md` for gameplay flows that are not fully covered by automated tests.
This section is for documentation related to contributing to the Application's codebase.
-67
View File
@@ -1,67 +0,0 @@
---
title: Ephemere
---
Ephemere (hereinafter the "Application") is a multi-language utility repository containing operational scripts for TypeScript, Python, and Bash workflows.
## 1. User Documentation
Ephemere is a script collection rather than a hosted end-user application.
It is used to run task-focused automation across multiple domains, including:
1. Crowdin translation workflows.
2. Discord and Discourse operations.
3. Gitea and GitHub maintenance tasks.
4. Music metadata and security reporting utilities.
5. Cohort programme operations in Python and Bash.
Scripts are typically executed through the interactive runner to choose language, category, and script at runtime.
## 2. Technical Documentation
Ephemere is organized by language and purpose:
1. `typescript/src/*` for API and platform scripting utilities.
2. `python/cohort/*` for cohort and Discord operations.
3. `bash/*` for cohort team automation and YubiKey administration.
Environment and dependency setup:
1. Node.js `v24+`, `pnpm`, and Python `3.10+` are required.
2. `uv` is used for Python dependency management.
3. `op` (1Password CLI) is used for secret injection from `prod.env`.
Common commands:
1. `make install` installs TypeScript and Python dependencies.
2. `make run` launches the interactive script runner.
3. `make lint` runs TypeScript and Python linting.
4. `make build` performs TypeScript type checking.
5. `make test` runs available test suites.
When running scripts manually, both TypeScript and Python command examples in the repository rely on `op run --env-file=prod.env` for secure secret resolution.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests in accordance with the repository contribution policy and Code of Conduct.
Before opening a pull request:
1. Run `make install`.
2. Run `make lint`.
3. Run `make build`.
4. Run `make test`.
Feedback and bug reports are handled through `https://support.nhcarrigan.com`.
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
To use Gwen Abalise, [add her to your Discord server](https://discord.com/oauth2/authorize?client_id=1343413943447584819).
To use Gwen Abalise, [add her to your Discord server](https://discord.com/oauth2/authorise?client_id=1343413943447584819).
### Commands
@@ -1,65 +0,0 @@
---
title: Hikari Desktop
---
Hikari Desktop (hereinafter the "Application") is a desktop companion application featuring Hikari, distributed as installable desktop releases.
## 1. User Documentation
Release builds are published at `https://git.nhcarrigan.com/nhcarrigan/hikari-desktop/releases`.
The application provides an interactive desktop experience with conversation, tooling, and workspace support features through a local app interface.
Common user-facing areas include:
1. Conversation and message workflows.
2. Workspace and project context panels.
3. Notification, quick action, and session management panels.
4. Desktop integrations enabled through the bundled runtime.
## 2. Technical Documentation
Hikari Desktop is implemented with a Svelte frontend and a Rust-backed `Tauri` desktop runtime.
Local development commands:
1. Install dependencies with `pnpm install`.
2. Start frontend dev server with `pnpm dev`.
3. Build frontend assets with `pnpm build`.
4. Launch Tauri workflow with `pnpm tauri`.
Quality and release tooling:
1. `pnpm test`, `pnpm test:backend`, and `pnpm test:all` for frontend/backend validation.
2. `pnpm lint` and `pnpm format:check` for static quality checks.
3. `pnpm build:linux`, `pnpm build:windows`, and `pnpm build:all` for desktop packaging.
Implementation notes:
1. Frontend code is under `src/` with Svelte components, stores, and utility modules.
2. Backend/native integration is under `src-tauri/src/`.
3. Desktop capabilities are defined by `src-tauri` configuration and plugins.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests according to the repository contributing guidelines and Code of Conduct.
Before opening a pull request:
1. Run `pnpm install`.
2. Run `pnpm lint`.
3. Run `pnpm test:all`.
4. Run `pnpm build`.
Feedback and bug reports are handled through `https://support.nhcarrigan.com`.
+1 -1
View File
@@ -114,7 +114,7 @@ npm install
Create a `prod.env` file in the root directory with the following variables:
```sh
```env
DISCORD_TOKEN=your_discord_bot_token
AI_TOKEN=your_anthropic_api_key
LOG_TOKEN=your_logging_token (optional)
-58
View File
@@ -1,58 +0,0 @@
---
title: Library
---
Library (hereinafter the "Application") is Naomi's personal library tracking application for cataloguing and engaging with media collections.
## 1. User Documentation
The live instance is available at `https://library.nhcarrigan.com`.
The application is presented as Naomi's curated collection of media and includes books, games, music, shows, manga, and art.
Core user-facing capabilities include:
1. Browsing library entries by media type.
2. Engaging with content through comments and likes.
3. Submitting suggestions for new additions.
4. Viewing activity and leaderboard-style participation features.
## 2. Technical Documentation
The project is an `Nx` monorepo with a frontend app and a Fastify API.
Runtime and build scripts are managed from the repository root:
1. `pnpm dev` builds and runs the production-style API process with development environment values.
2. `pnpm build` generates Prisma client artifacts and builds all projects.
3. `pnpm test` runs configured test targets across the workspace.
4. `pnpm lint` runs lint targets across the workspace.
Architecture notes:
1. API routes are mounted under `/api` via autoloaded Fastify route modules.
2. The API includes dedicated modules for `books`, `games`, `music`, `shows`, `manga`, `art`, `suggestions`, `comments`, `likes`, `leaderboard`, `activity`, and `users`.
3. Security middleware and plugins include CSRF protection, rate limiting, CORS, helmet, and auth-related plugins.
4. Database access is managed with Prisma.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests according to the repository's contributing guidelines and code of conduct.
Before opening a pull request:
1. Install dependencies with `pnpm install`.
2. Run `pnpm lint`.
3. Run `pnpm test`.
4. Run `pnpm build`.
+3 -3
View File
@@ -12,7 +12,7 @@ This section is for those interacting with a live instance of the Application.
To use Liora in your Discord server, you'll need to:
1. **Add the bot to your server**: Visit the [invite link](https://discord.com/oauth2/authorize?client_id=1391492296222179459)
1. **Add the bot to your server**: Visit the [invite link](https://discord.com/oauth2/authorise?client_id=1391492296222179459)
2. **Subscribe to premium**: A server administrator must purchase a server subscription from the Discord store, unless your server is whitelisted
3. **Enable DMs**: Ensure you have direct messages enabled from server members to receive notifications
@@ -199,7 +199,7 @@ pnpm install
Create a `prod.env` file with the following variables:
```sh
```env
DISCORD_TOKEN=your_discord_bot_token
MONGO_URI=your_mongodb_connection_string
LOG_TOKEN=your_logging_service_token
@@ -614,7 +614,7 @@ Releases are managed by the maintainers. Contributors should focus on feature br
**Additional Resources**:
- **Live Bot**: [Add to Discord](https://discord.com/oauth2/authorize?client_id=1391492296222179459)
- **Live Bot**: [Add to Discord](https://discord.com/oauth2/authorise?client_id=1391492296222179459)
- **Source Code**: [Gitea Repository](https://git.nhcarrigan.com/NHCarrigan/liora)
- **Documentation Hub**: [docs.nhcarrigan.com](https://docs.nhcarrigan.com)
- **Support Server**: [chat.nhcarrigan.com](https://chat.nhcarrigan.com)
+2 -2
View File
@@ -225,11 +225,11 @@ If you encounter bugs or have feature requests:
- Chat Server: [https://chat.nhcarrigan.com](https://chat.nhcarrigan.com)
- Email: contact@nhcarrigan.com
- Repository: [https://git.nhcarrigan.com/nhcarrigan/logger](https://git.nhcarrigan.com/NHCarrigan/logger)
- Issues: Post in the [Bug Reports](https://support.nhcarrigan.com/c/bug-reports/6) or [Feature Requests](https://support.nhcarrigan.com/c/feature-requests/7) categories on our support forum
- Issues: Post in the #bug-reports or #feature-requests forum channels on our Discord community
### Package Information
- **Package Name**: @nhcarrigan/logger
- **Version**: 1.1.1
- **Version**: 1.0.0
- **NPM**: [https://www.npmjs.com/package/@nhcarrigan/logger](https://www.npmjs.com/package/@nhcarrigan/logger)
- **Repository**: Git-based repository hosted at git.nhcarrigan.com
-63
View File
@@ -1,63 +0,0 @@
---
title: Lore
---
Lore (hereinafter the "Application") is a web application that publishes lore and reference material for Naomi's fictional persona and characters.
## 1. User Documentation
The live site is available at `https://lore.nhcarrigan.com`.
Visitors can browse structured lore content through dedicated pages including:
1. Home
2. Handbook
3. About
4. FAQ
5. Reviews
6. Staff
Site copy and supporting data are maintained in the application source and loaded through Angular components and config files.
## 2. Technical Documentation
Lore is built with Angular and uses a standard Angular CLI workflow.
Local development:
1. Install dependencies with `pnpm install`.
2. Run local dev server with `pnpm start`.
3. Build production bundle with `pnpm build`.
4. Run tests with `pnpm test`.
5. Run lint checks with `pnpm lint`.
Implementation notes:
1. Route definitions are in `src/app/app.routes.ts`.
2. Main feature areas are component-based under `src/app/*`.
3. Shared content/config values are maintained in `src/app/config/*`.
4. Styling includes project CSS and Tailwind/PostCSS tooling.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests under the repository's contribution policy and Code of Conduct.
Before opening a pull request:
1. Run `pnpm install`.
2. Run `pnpm lint`.
3. Run `pnpm test`.
4. Run `pnpm build`.
Feedback and bug reports are handled via `https://support.nhcarrigan.com`.
+16 -39
View File
@@ -6,56 +6,33 @@ Lucinda (hereinafter the "Application") is a kanban-style task management site.
## 1. User Documentation
The Application is intended as a full-featured cloud-backed task management platform with a Kanban-style workflow.
:::note
This section is coming soon!
:::
Current public deployment listed by the project repository:
1. https://lucinda.nhcarrigan.com
The frontend currently routes users to a landing experience (`/landing`) and serves as the basis for expanded board/task flows.
This section is for those interacting with a live instance of the Application.
## 2. Technical Documentation
Lucinda is a pnpm workspace monorepo with separate client and server applications.
:::note
This section is coming soon!
:::
Project structure:
1. `client`: Angular 19 frontend.
2. `server`: Fastify API service.
Workspace tooling:
1. Root scripts use Turbo (`turbo run dev|build|lint|test`).
2. Server development command: `tsx src/index.ts --watch`.
3. Server start command: `op run --env-file=./prod.env -- node prod/index.js`.
Current repository version values:
1. Root: `0.0.0`
2. Client: `0.0.0`
3. Server: `0.0.0`
Current server implementation exposes a root health endpoint on port `12346` returning `{"message":"Hello, world!"}`.
This section is for those interested in running their own instance of the Application.
## 3. Legal Documentation
The Application uses the shared nhcarrigan legal documents:
:::note
This section is coming soon!
:::
1. Privacy Policy: https://docs.nhcarrigan.com/#/privacy
2. Terms of Service: https://docs.nhcarrigan.com/#/terms
3. License: https://docs.nhcarrigan.com/#/license
Repository references:
1. `PRIVACY.md`
2. `TERMS.md`
3. `LICENSE.md`
This section is for expansions to our legal policies specific to the Application.
## 4. Contributing Documentation
Contributing guidance points to the shared docs portal:
:::note
This section is coming soon!
:::
1. https://docs.nhcarrigan.com/#/contributing
Feature delivery is in progress, and the public project feed currently marks Lucinda as work in progress.
This section is for documentation related to contributing to the Application's codebase.
+16 -44
View File
@@ -6,61 +6,33 @@ Maribelle (hereinafter the "Application") is a Discord bot that allows you to co
## 1. User Documentation
The Application posts weekday stand-up prompts in configured Discord text channels and tracks which members posted progress updates in the previous cycle.
:::note
This section is coming soon!
:::
Current reminder schedule in the source is `0 9 * * 1-5` (09:00, Monday through Friday).
During operation, the Application:
1. Sends a stand-up reminder message in each configured channel.
2. Starts a thread named `Daily Progress Update - <date>`.
3. Monitors messages in those threads and records participant IDs.
4. Sends a summary of recorded IDs to the maintainer account before the next cycle.
Channel and role mappings are configured in `src/config/channels.ts`.
This section is for those interacting with a live instance of the Application.
## 2. Technical Documentation
The Application is a Node.js + TypeScript Discord bot using `discord.js` and `node-schedule`.
:::note
This section is coming soon!
:::
Runtime and build commands from `package.json`:
1. `pnpm install`
2. `pnpm build`
3. `pnpm start`
The startup command runs with `op run --env-file=prod.env`, so local operation expects a `prod.env` file and 1Password CLI access.
Minimum environment variables for runtime include:
1. `DISCORD_TOKEN` for bot authentication.
2. `LOG_WEBHOOK_URL` for logger transport.
Key implementation files:
1. `src/index.ts` bootstraps the Discord client, schedules reminders, and listens for thread messages.
2. `src/modules/standup.ts` sends reminders, opens threads, and reports participant IDs.
3. `src/config/channels.ts` defines target channel/role pairs.
This section is for those interested in running their own instance of the Application.
## 3. Legal Documentation
The Application inherits the nhcarrigan global legal documents:
:::note
This section is coming soon!
:::
1. Privacy Policy: https://docs.nhcarrigan.com/#/privacy
2. Terms of Service: https://docs.nhcarrigan.com/#/terms
3. License: https://docs.nhcarrigan.com/#/license
Repository references:
1. `PRIVACY.md`
2. `TERMS.md`
3. `LICENSE.md`
This section is for expansions to our legal policies specific to the Application.
## 4. Contributing Documentation
Contribution guidance for the Application points to the shared documentation:
:::note
This section is coming soon!
:::
1. https://docs.nhcarrigan.com/#/contributing
Project metadata currently reports version `0.0.0` in `package.json`, which aligns with an unreleased/early state.
This section is for documentation related to contributing to the Application's codebase.
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Quick Start
1. [Add Maylin to your Discord account](https://discord.com/oauth2/authorize?client_id=1343370633916059668)
1. [Add Maylin to your Discord account](https://discord.com/oauth2/authorise?client_id=1343370633916059668)
2. Use the `/dm` command to start a private conversation
3. Send messages directly to Maylin in DMs for AI-powered companionship
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
To use Melody Iuvo, you'll need to [add the bot to your Discord account](https://discord.com/oauth2/authorize?client_id=1338753576583041074) and subscribe to access the premium features.
To use Melody Iuvo, you'll need to [add the bot to your Discord account](https://discord.com/oauth2/authorise?client_id=1338753576583041074) and subscribe to access the premium features.
### Available Commands
-37
View File
@@ -1,37 +0,0 @@
---
title: Minori
---
Minori (hereinafter the "Application") is
## 1. User Documentation
:::note
This section is coming soon!
:::
This section is for those interacting with a live instance of the Application.
## 2. Technical Documentation
:::note
This section is coming soon!
:::
This section is for those interested in running their own instance of the Application.
## 3. Legal Documentation
:::note
This section is coming soon!
:::
This section is for expansions to our legal policies specific to the Application.
## 4. Contributing Documentation
:::note
This section is coming soon!
:::
This section is for documentation related to contributing to the Application's codebase.
+2 -2
View File
@@ -7,13 +7,13 @@ Mommy Bot (hereinafter the "Application") is a multi-platform bot application th
## 1. User Documentation
### Discord Usage
- [Install the app](https://discord.com/oauth2/authorize?client_id=1347642447643017289)
- [Install the app](https://discord.com/oauth2/authorise?client_id=1347642447643017289)
- Use the `/mommy` slash command
- Optionally provide a name parameter: `/mommy name:YourName`
- The bot will respond with an encouraging message personalised to your name
### Slack Usage
- [Install the app](https://slack.com/oauth/v2/authorize?client_id=8569765106322.8554301974567&scope=commands&user_scope=)
- [Install the app](https://slack.com/oauth/v2/authorise?client_id=8569765106322.8554301974567&scope=commands&user_scope=)
- Use the `/mommy` command in any channel where the bot is installed
- Optionally provide a name: `/mommy YourName`
- The bot will respond with an encouraging message
+1 -1
View File
@@ -136,7 +136,7 @@ The Application is built with the following technologies:
Create a `prod.env` file in the project root with the following variables:
```sh
```env
# Required: Anthropic API key for Claude AI
ANTHROPIC_API_KEY=your_anthropic_api_key_here
-74
View File
@@ -1,74 +0,0 @@
---
title: Personality
---
Personality (hereinafter the "Application") is a personal values and self-reflection hub built as an Astro site.
## 1. User Documentation
The Application currently presents multiple self-exploration sections from a shared home dashboard:
1. Values (`/values`)
2. Personality test results (`/personality`)
3. Natal chart (`/astrology`)
4. DBT exercise progress (`/dbt`)
5. Playroom/social templates (`/playroom`)
The home page also links to an external user manual at `https://manual.nhcarrigan.com`.
Current content behavior in the app:
1. Personality tests are rendered from structured test data (for example MBTI, Big Five, Enneagram, attachment style, and VIA strengths).
2. Astrology content is grouped into personal, social, generational, and points/angles categories.
3. DBT modules display progress counters based on completed exercises.
## 2. Technical Documentation
The active implementation currently lives on the `origin/feat/init` branch of the Personality repository.
Project stack and structure:
1. Astro `6.1.8`
2. TypeScript `6.0.3`
3. Flat content pages in `src/pages`
4. Static data modules in `src/data`
Key routes in source:
1. `src/pages/index.astro`
2. `src/pages/values.astro`
3. `src/pages/personality.astro`
4. `src/pages/astrology.astro`
5. `src/pages/dbt.astro`
6. `src/pages/playroom.astro`
Primary commands from `package.json`:
1. `pnpm install`
2. `pnpm run dev`
3. `pnpm run build`
4. `pnpm run lint`
Current repository version is `1.0.0`.
## 3. Legal Documentation
The Application uses the shared nhcarrigan legal policies:
1. Privacy Policy: https://docs.nhcarrigan.com/#/privacy
2. Terms of Service: https://docs.nhcarrigan.com/#/terms
3. License: https://docs.nhcarrigan.com/#/license
Repository references:
1. `PRIVACY.md`
2. `TERMS.md`
3. `LICENSE.md`
## 4. Contributing Documentation
Contribution guidance points to the shared docs portal:
1. https://docs.nhcarrigan.com/#/contributing
The repository also includes the standard community files (`CODE_OF_CONDUCT.md`, `SECURITY.md`) for project participation and disclosure expectations.
-82
View File
@@ -1,82 +0,0 @@
---
title: QR Generator
---
QR Generator (hereinafter the "Application") is a web tool for generating Naomi-branded QR code images from a URL.
## 1. User Documentation
The live instance is available at `https://qr.nhcarrigan.com`.
To generate a QR image:
1. Open the page.
2. Enter a URL in the form input.
3. Select Generate.
4. Download the generated PNG using the Download PNG button.
Generated images include:
1. Naomi colour branding.
2. Naomi avatar centred in the QR matrix.
3. A branding strip with `chat.naomi.lgbt`.
If URL input is missing, generation fails with a validation error.
## 2. Technical Documentation
This project is a TypeScript Fastify service with both web UI and CLI generation paths.
Local setup:
1. Install dependencies with `pnpm install`.
2. Start the web server with `pnpm start`.
3. Build TypeScript with `pnpm build`.
4. Lint source files with `pnpm lint`.
Default server binding:
1. Host: `0.0.0.0`
2. Port: `15555`
HTTP endpoints:
1. `GET /` returns the web UI.
2. `GET /generate?url=<value>` returns a PNG attachment.
3. Missing `url` query returns `HTTP 400`.
4. Generation failures return `HTTP 500`.
CLI batch generation:
1. Use `pnpm generate -- <url> [<url> ...]`.
2. Output files are written to the `output` directory.
3. File names are URL-derived, lowercased, hyphenated, and limited to 60 characters.
Core generation pipeline:
1. Generate QR data using `qr-code-styling`.
2. Overlay Naomi avatar within a circular mask.
3. Composite final image with bottom branding strip.
## 3. Legal Documentation
Project-specific legal references:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted via pull requests.
Before contributing:
1. Review the repository contributing guidelines.
2. Follow the Code of Conduct.
3. Run lint and build locally before opening a pull request.
Issue reports and feedback are handled via `https://support.nhcarrigan.com`.
-40
View File
@@ -1,40 +0,0 @@
---
title: Rondelle
---
Rondelle (hereinafter the "Application") is an initialized repository currently in scaffold state, created from the standard project template.
## 1. User Documentation
There is no published live application instance documented in the repository at this time.
Current repository status indicates foundational setup only, with end-user functionality still to be implemented.
## 2. Technical Documentation
The repository currently contains baseline governance and policy files from the project template.
At present:
1. No implementation source directories are defined.
2. No runtime package manifest or build pipeline is configured.
3. No environment variables or deployment instructions are published.
Technical documentation should be expanded once project runtime architecture is added.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: https://docs.nhcarrigan.com/#/license
2. Terms: https://docs.nhcarrigan.com/#/terms
3. Privacy: https://docs.nhcarrigan.com/#/privacy
4. Security: https://docs.nhcarrigan.com/#/security
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests under the repository contributing guidelines and Code of Conduct.
Feedback and bug reports are handled via https://support.nhcarrigan.com.
@@ -50,7 +50,7 @@ Rosalia Nightsong is built using:
The application requires the following environment variables:
```sh
```env
MATRIX_ACCESS_TOKEN="matrix_access_token"
MATRIX_ROOM_ID="matrix_room_id"
API_AUTH="api_authentication_token"
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Adding the Bot to Discord
To use Saisoku, add it to Discord using the [official invite link](https://discord.com/oauth2/authorize?client_id=1438325099345346723).
To use Saisoku, add it to Discord using the [official invite link](https://discord.com/oauth2/authorise?client_id=1438325099345346723).
### Subscription Requirements
+1 -1
View File
@@ -218,7 +218,7 @@ This section is for those interested in running their own instance of the Applic
4. **Set up environment variables:**
Create a `.env` file with required credentials:
```sh
```env
# Crowdin (for translation scripts)
CROWDIN_PROJECT_ID=your_project_id
CROWDIN_API_URL=https://api.crowdin.com/api/v2
-40
View File
@@ -1,40 +0,0 @@
---
title: Silly Sites
---
Silly Sites (hereinafter the "Application") is a collection of small, fun static pages, including pages built for community programming events.
## 1. User Documentation
The live site is available at https://silly.nhcarrigan.com.
Users can browse and interact with standalone static experiences hosted under this project.
## 2. Technical Documentation
Silly Sites is a static-site repository containing multiple page projects.
Current structure includes:
1. `index.html` for the root entry point.
2. `hairy-button/` static page content.
3. `travel-agency/` static page content.
The repository currently focuses on static web assets rather than an application runtime with package-based build tooling.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: https://docs.nhcarrigan.com/#/license
2. Terms: https://docs.nhcarrigan.com/#/terms
3. Privacy: https://docs.nhcarrigan.com/#/privacy
4. Security: https://docs.nhcarrigan.com/#/security
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests under the repository contributing guidelines and Code of Conduct.
Feedback and bug reports are handled via https://support.nhcarrigan.com.
+1 -1
View File
@@ -10,7 +10,7 @@ This section is for those interacting with a live instance of the Application.
### Adding Sorielle to Your Server
You can add Sorielle to your Discord server using this [invitation link](https://discord.com/oauth2/authorize?client_id=1391489982887362761).
You can add Sorielle to your Discord server using this [invitation link](https://discord.com/oauth2/authorise?client_id=1391489982887362761).
### Getting Started
-64
View File
@@ -1,64 +0,0 @@
---
title: Tatsumi
---
Tatsumi (hereinafter the "Application") is a desktop application for generating AI character art using Google's Gemini image model.
## 1. User Documentation
Tatsumi is distributed as a desktop app and requires a Google Gemini API key.
Supported generation modes:
1. `Avatar`: portrait/avatar generation with `1:1` aspect ratio.
2. `Art`: widescreen generation with `16:9` aspect ratio.
3. `Replace`: upload an image and regenerate based on an edit prompt.
Threading and output features:
1. Conversations are stored as local threads between sessions.
2. You can send follow-up prompts, retry results, and edit previous prompts.
3. Each response exposes model reasoning and token cost details.
4. Generated images can be downloaded from the conversation view.
## 2. Technical Documentation
Tatsumi uses a `Tauri` desktop runtime with a `React` + `Vite` frontend and Rust backend commands.
Local development:
1. Install dependencies with `pnpm install`.
2. Start development with `pnpm tauri dev`.
3. Build frontend/web assets with `pnpm build`.
4. Build desktop bundles with `pnpm tauri build`.
5. Windows-targeted build uses `pnpm build:windows`.
Implementation notes:
1. Frontend UI lives under `src/` with modular components for thread views, input, settings, and message rendering.
2. Tauri backend code lives under `src-tauri/src/`, including Gemini integration and local storage handling.
3. App configuration is defined in `src-tauri/tauri.conf.json`.
## 3. Legal Documentation
Project policy files reference global documentation:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests per the repository contributing guidelines and code of conduct.
Before opening a pull request:
1. Run `pnpm install`.
2. Run `pnpm lint`.
3. Run `pnpm build`.
4. Verify desktop app behavior with `pnpm tauri dev`.
Feedback and bug reports are handled via `https://support.nhcarrigan.com`.
+1 -1
View File
@@ -11,7 +11,7 @@ This section is for those interacting with a live instance of the Application.
### Adding Tyche to Your Discord Server
To add Tyche to your Discord server, use the following invite link:
https://discord.com/oauth2/authorize?client_id=1436837822656020663
https://discord.com/oauth2/authorise?client_id=1436837822656020663
The bot requires the following permissions:
- View Channels (to see where commands are used)
+1 -1
View File
@@ -11,7 +11,7 @@ This section is for those interacting with a live instance of the Application.
### Getting Started
1. **Adding Umbrelle to Your Server**
- Use the Discord OAuth2 authorisation link: https://discord.com/oauth2/authorize?client_id=1412945347134881862
- Use the Discord OAuth2 authorisation link: https://discord.com/oauth2/authorise?client_id=1412945347134881862
- Ensure you have "Manage Server" permissions to add bots
2. **Setting Up a Honeypot Channel**
-60
View File
@@ -1,60 +0,0 @@
---
title: Valerium
---
Valerium (hereinafter the "Application") is the Discord Boost Monitor bot that removes configured booster-only roles when members stop boosting a server.
## 1. User Documentation
Valerium is a Discord bot service and does not currently publish a public hosted web app for end users.
Operational behavior:
1. On startup, the bot connects to Discord with `Guilds` and `GuildMembers` intents.
2. On `guildMemberUpdate`, it checks member eligibility roles.
3. If a member is no longer qualified, configured colour/perk roles are removed.
4. A small Fastify health/info page is served on port `3443`.
## 2. Technical Documentation
Valerium is a TypeScript `discord.js` service with a lightweight `fastify` process for health visibility.
Local setup:
1. Install dependencies with `pnpm install`.
2. Build with `pnpm build`.
3. Start with `pnpm start`.
4. Lint source with `pnpm lint`.
Key source modules:
1. `src/modules/manageRoles.ts`: booster-role enforcement logic.
2. `src/config/roles.ts`: qualified roles and removable colour roles.
3. `src/server/serve.ts`: health/info endpoint on `/`.
4. `src/index.ts`: bot startup, event wiring, and server initialization.
Environment configuration is loaded via `dotenv` at runtime, including Discord token and webhook settings.
## 3. Legal Documentation
Project policy files reference the following documentation:
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/discord-boost-monitor/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
## 4. Contributing Documentation
Contributions are accepted through pull requests under the repository contributing guidelines and code of conduct.
Before opening a pull request:
1. Run `pnpm install`.
2. Run `pnpm lint`.
3. Run `pnpm build`.
4. Verify bot behavior in a test Discord server.
Feedback and bug reports are handled via `https://support.nhcarrigan.com`.
+1 -1
View File
@@ -145,7 +145,7 @@ The application includes a Fastify web server on port 6099 that serves:
The bot can be invited with this URL:
```
https://discord.com/oauth2/authorize?client_id=1391505285465509978
https://discord.com/oauth2/authorise?client_id=1391505285465509978
```
## 3. Legal Documentation
+16 -44
View File
@@ -6,61 +6,33 @@ Vitalia (hereinafter the "Application") is a full-featured nutrition tracker wit
## 1. User Documentation
The live site is available at `https://vitalia.nhcarrigan.com`.
:::note
This section is coming soon!
:::
Vitalia is currently in early-stage development with a landing-route frontend and foundational backend API service.
Current user-facing flow:
1. The frontend redirects root navigation to `/landing`.
2. The initial Angular landing component is the primary exposed route.
This section is for those interacting with a live instance of the Application.
## 2. Technical Documentation
Vitalia is a `pnpm` workspace with two applications:
:::note
This section is coming soon!
:::
1. `client/`: Angular frontend (`v0.0.0`).
2. `server/`: Fastify/TypeScript backend (`v0.0.0`).
Workspace-level commands:
1. `pnpm dev` runs package `dev` tasks through Turbo.
2. `pnpm build` runs package build tasks through Turbo.
3. `pnpm lint` runs package lint tasks through Turbo.
4. `pnpm test` runs package test tasks through Turbo.
Backend details:
1. Fastify server listens on port `12345`.
2. CORS is enabled with `origin: "*"`.
3. A root `GET /` route returns a simple JSON message.
Frontend details:
1. Angular router redirects `/` to `/landing`.
2. Landing page is served by `LandingComponent`.
This section is for those interested in running their own instance of the Application.
## 3. Legal Documentation
Project policy files reference global documentation:
:::note
This section is coming soon!
:::
1. License: `https://docs.nhcarrigan.com/#/license`
2. Terms: `https://docs.nhcarrigan.com/#/terms`
3. Privacy: `https://docs.nhcarrigan.com/#/privacy`
4. Security: `https://docs.nhcarrigan.com/#/security`
Copyright is held by Naomi Carrigan.
This section is for expansions to our legal policies specific to the Application.
## 4. Contributing Documentation
Contributions are accepted through pull requests under the repository contributing guidelines and Code of Conduct.
:::note
This section is coming soon!
:::
Before opening a pull request:
1. Run `pnpm install`.
2. Run `pnpm lint`.
3. Run `pnpm build`.
4. Run `pnpm test`.
Feedback and bug reports are handled via `https://support.nhcarrigan.com`.
This section is for documentation related to contributing to the Application's codebase.
+12 -9
View File
@@ -2,7 +2,7 @@
title: Website Headers
---
Website Headers (hereinafter the "Application") is a JavaScript/TypeScript library that injects standardised metadata, styles, and UI components (such as footers and modals) into web pages. It is designed to provide consistent branding and legal/compliance links for Naomi Carrigan's web properties. The Application dynamically adds Open Graph and Twitter meta tags, favicons, global styles, a themed footer, analytics scripts, and a community call-to-action modal. It also supports theme toggling with persisted preference.
Website Headers (hereinafter the "Application") is a JavaScript/TypeScript library that injects standardised metadata, styles, and UI components (such as footers and modals) into web pages. It is designed to provide consistent branding, accessibility, and legal compliance for Naomi Carrigan's web properties. The Application dynamically adds Open Graph and Twitter meta tags, favicons, global styles, a themed footer, analytics scripts, and a community call-to-action modal. It also supports theme toggling and audio playback for enhanced user experience.
## 1. User Documentation
@@ -12,16 +12,17 @@ The Website Headers library automatically enhances any webpage by injecting:
- **SEO metadata**: Open Graph and Twitter Card meta tags for better social media sharing
- **Favicons**: Complete set of favicon files for various devices and platforms
- **Global styling**: Consistent branding with custom fonts, cursor, and themed UI
- **Global styling**: Consistent branding with OpenDyslexic font, custom cursor, and themed UI
- **Footer component**: Standardized footer with copyright, social links, theme toggle, and donation button
- **Analytics**: Plausible Analytics integration with event tracking
- **Community features**: Periodic modal popup encouraging users to join the community
- **Theme support**: Light/dark theme toggle with localStorage persistence
- **Audio controls**: Optional theme music playback
- **TreeNation integration**: Carbon offset widget display
### Features
- **Accessibility-focused**: High-contrast theming and semantic metadata support
- **Accessibility-focused**: Uses OpenDyslexic font for improved readability
- **Responsive design**: Mobile-friendly layout with adaptive footer
- **Theme persistence**: Remembers user's theme preference across sessions
- **Privacy-respecting**: Uses privacy-focused Plausible Analytics
@@ -103,6 +104,10 @@ src/
β”œβ”€β”€ index.ts # Main library code
└── develop.ts # Development server
prod/
β”œβ”€β”€ index.js # Production build output
└── develop.js # Development server build
build.ts # Build script with minification
index.html # Test page for development
package.json # Project configuration
@@ -110,8 +115,6 @@ tsconfig.json # TypeScript configuration
eslint.config.js # ESLint configuration
```
The `prod/` directory is generated during build output and is not a permanent source directory.
### Architecture
The library is structured as a single TypeScript file that:
@@ -119,7 +122,7 @@ The library is structured as a single TypeScript file that:
1. **Metadata Injection**: Dynamically creates and injects meta tags for SEO and social sharing
2. **Asset Loading**: Loads external resources (fonts, scripts, stylesheets)
3. **Component Creation**: Builds UI components (footer, modal) and injects them into the DOM
4. **Event Handling**: Sets up interactive features (theme toggle, social panel, modal)
4. **Event Handling**: Sets up interactive features (theme toggle, audio player, modal)
5. **State Management**: Manages theme preferences and modal display timing using localStorage
### Key Components
@@ -135,7 +138,7 @@ The library is structured as a single TypeScript file that:
### External Dependencies
The library loads several external resources:
- Google-hosted font assets used by the injected stylesheet
- OpenDyslexic font for accessibility
- Font Awesome icons for UI elements
- Plausible Analytics for privacy-respecting tracking
- TreeNation widget for carbon offset display
@@ -149,7 +152,7 @@ The library loads several external resources:
### Licensing
This software is licensed under [Naomi's Public Licence](https://docs.nhcarrigan.com/#/license).
This software is licensed under [Naomi's Public Licence](https://docs.nhcarrigan.com/legal/license).
**Copyright Notice**: Copyright held by Naomi Carrigan.
@@ -178,7 +181,7 @@ The Application integrates with several third-party services that have their own
#### Content Delivery
- **NHCarrigan CDN**: Custom content delivery network
- Domain: `cdn.nhcarrigan.com`
- Hosts: fonts, images, scripts, and cursors
- Hosts: fonts, images, audio files, cursors
- Subject to NHCarrigan privacy policies
### Data Collection and Privacy
+5 -5
View File
@@ -36,7 +36,7 @@ We recognise and deeply appreciate that our Team members are volunteers dedicati
While we maintain a flexible approach to activity, we kindly request that you inform us of any anticipated absences:
- For absences exceeding one week, please notify the team via the `#sentinel-watch` channel on Discord.
- For absences exceeding one week, please notify the team via the `#staff-chat` channel on Discord.
- This communication helps us manage workload distribution and ensures continued smooth operation of our community.
### 1.3. Extended Inactivity
@@ -187,7 +187,7 @@ Maintain transparency and accountability to the community:
Maintain open lines of communication with your fellow Team members:
- Use designated channels (e.g., `#sentinel-watch`) to discuss community issues and seek guidance
- Use designated channels (e.g., `#staff-chat`) to discuss community issues and seek guidance
- Share experiences and seek advice when facing challenging situations
- Communicate openly about workload, availability, and support needs
@@ -223,7 +223,7 @@ All Team members must know when and how to escalate issues appropriately. Escala
**How to Escalate:**
**(a)** **Use Appropriate Channels**: Escalate through designated staff channels (e.g., `#sentinel-watch` on Discord) or direct contact with relevant coordinators or senior staff.
**(a)** **Use Appropriate Channels**: Escalate through designated staff channels (e.g., `#staff-chat` on Discord) or direct contact with relevant coordinators or senior staff.
**(b)** **Provide Complete Context**: When escalating, include:
- Clear description of the situation
@@ -281,8 +281,8 @@ For detailed escalation procedures specific to different situations, refer to th
#### 3.1.1. Primary Communication Platforms
- Our Discord community serves as a primary communication hub for the staff team
- A private `The Inner Circle` category is available for internal discussions
- Discord `#sentinel-watch` channel for real-time communication and coordination
- A private `staff` category is available for internal discussions
- Discord `#staff-chat` channel for real-time communication and coordination
#### 3.1.2. Use of Staff Communication Channels
- Utilise staff channels for:
@@ -24,9 +24,7 @@ Our community operates across various platforms including:
**(e)** **Documentation Sites**: Knowledge bases, policies, guides;
**(f)** **Support Forum**: Structured support requests, bug reports, feature requests at support.nhcarrigan.com;
**(g)** **Other Platforms**: Emerging technologies and specialised tools.
**(f)** **Other Platforms**: Emerging technologies and specialised tools.
### 1.3. Integration with Existing Policies
@@ -138,29 +136,6 @@ This training operates within our policy framework:
- Competitive and cooperative balance
- Fun and entertainment emphasis
### 3.4. Support Forum
#### 3.4.1. Unique Characteristics
- Structured, categorised support system
- Asynchronous, persistent discussions
- Searchable knowledge base functionality
- Topic-based organisation and threading
- Solution marking and resolution tracking
#### 3.4.2. Moderation Considerations
- **Category Management**: Ensure posts are in appropriate categories
- **Thread Organisation**: Maintain clear, searchable thread titles
- **Solution Tracking**: Mark resolved issues for future reference
- **Privacy Protection**: Redact sensitive information from public posts
- **Knowledge Curation**: Build searchable solutions database
#### 3.4.3. Community Culture
- Professional, solution-focused communication
- Detailed problem descriptions and responses
- Knowledge sharing and documentation emphasis
- Patient, thorough assistance approach
- Long-form, comprehensive discussions
## 4. COORDINATION STRATEGIES AND BEST PRACTICES
### 4.1. Information Sharing Across Platforms
@@ -347,22 +322,6 @@ This training operates within our policy framework:
- **Crisis Communication**: Handle public relations during difficult situations
- **Growth Strategies**: Support community growth and member acquisition
### 6.4. Support Forum Responsibilities
#### 6.4.1. Thread Management
- Monitor new posts and ensure proper categorisation
- Merge duplicate threads while preserving context
- Mark solutions when issues are resolved
- Pin important announcements and guides
- Archive outdated or resolved discussions
#### 6.4.2. Knowledge Base Development
- **Content Curation**: Build comprehensive solution documentation
- **FAQ Maintenance**: Update frequently asked questions regularly
- **Category Organisation**: Maintain logical, searchable structure
- **Cross-Reference**: Link related topics and solutions
- **Quality Control**: Ensure accuracy of technical information
## 7. COORDINATION CHALLENGES AND SOLUTIONS
### 7.1. Common Coordination Problems
@@ -1,337 +0,0 @@
---
title: Support Forum Moderation Training for Staff
---
**ESSENTIAL TRAINING FOR FORUM MODERATION TEAM**
## 1. INTRODUCTION AND SCOPE
### 1.1. Purpose of This Training
This training document provides comprehensive guidance for Team members responsible for moderating our Support Forum at [support.nhcarrigan.com](https://support.nhcarrigan.com). The Support Forum serves as our primary platform for structured support requests, bug reports, feature requests, and community feedback.
### 1.2. Forum Structure and Categories
Our Support Forum is organised into the following categories:
**(a)** **Technical Support** (ID: 5): Platform and product assistance;
**(b)** **Bug Reports** (ID: 6): Software issues and defect reporting;
**(c)** **Feature Requests** (ID: 7): Enhancement suggestions and new features;
**(d)** **Community Feedback** (ID: 8): General community input and suggestions;
**(e)** **Policy Ideation** (ID: 9): Policy suggestions and governance input;
**(f)** **Accessibility Feedback** (ID: 10): Accessibility barriers and improvements;
**(g)** **Partnership Requests** (ID: 11): Collaboration and partnership proposals;
**(h)** **Legal Notices** (ID: 12): Legal communications and formal notices;
**(i)** **Billing Questions** (ID: 13): Payment and subscription inquiries;
**(j)** **Press Inquiries** (ID: 14): Media and press communications;
**(k)** **Marketing Proposals** (ID: 15): Marketing collaborations and proposals.
### 1.3. Integration with Existing Policies
Forum moderation operates within our comprehensive policy framework:
**(a)** **Content and Moderation Policy**: Primary content standards and enforcement;
**(b)** **Community Code of Conduct**: Universal behavioural expectations;
**(c)** **Community Support Policy**: Guidelines for support interactions;
**(d)** **Privacy Policy**: Handling of sensitive information in forum posts;
**(e)** **Accessibility Policy**: Ensuring forum accessibility for all users.
## 2. FORUM-SPECIFIC MODERATION CONSIDERATIONS
### 2.1. Unique Characteristics of Forum Moderation
#### 2.1.1. Asynchronous Communication
**Key Differences from Real-Time Platforms:**
- Extended response timeframes are acceptable and expected
- Conversations develop over days or weeks rather than minutes
- Users expect more thoughtful, detailed responses
- Documentation and searchability are primary concerns
#### 2.1.2. Persistent Content
**Long-Term Visibility:**
- Forum posts remain searchable indefinitely
- Content serves as knowledge base for future users
- Higher standards for accuracy and completeness
- Regular review and updating of outdated information
#### 2.1.3. Structured Support
**Organised Communication:**
- Clear categorisation enables efficient routing
- Topic-based organisation aids in knowledge management
- Threaded discussions maintain context
- Solution marking helps future users
### 2.2. Forum Moderation Best Practices
#### 2.2.1. Thread Management
**Effective Thread Moderation:**
- **Title Clarity**: Ensure thread titles accurately describe the issue
- **Categorisation**: Move threads to appropriate categories when needed
- **Duplicate Management**: Merge duplicate threads while preserving context
- **Solution Marking**: Identify and mark solved threads
- **Pinning**: Pin important announcements or frequently referenced threads
#### 2.2.2. Response Standards
**Quality Expectations:**
- Comprehensive initial responses that address all aspects
- Professional tone maintaining community warmth
- Clear action items or next steps
- Appropriate escalation when needed
- Follow-up on unresolved threads
## 3. CATEGORY-SPECIFIC GUIDELINES
### 3.1. Technical Support
**Moderation Focus:**
- Verify sufficient system information is provided
- Request clarification on reproduction steps
- Tag technical team members when appropriate
- Ensure privacy (no passwords, API keys, etc.)
- Mark solutions when issues are resolved
### 3.2. Bug Reports
**Moderation Requirements:**
- Confirm reports include reproduction steps
- Check for duplicate reports before allowing
- Apply appropriate priority labels
- Link to tracking systems when applicable
- Update thread status as bugs are addressed
### 3.3. Feature Requests
**Management Approach:**
- Encourage detailed use case descriptions
- Facilitate community discussion on proposals
- Consolidate similar requests
- Communicate feasibility assessments
- Update on implementation progress
### 3.4. Community Feedback
**Engagement Standards:**
- Acknowledge all feedback respectfully
- Encourage constructive criticism
- Synthesise feedback for leadership review
- Communicate how feedback influences decisions
- Create feedback summary reports
### 3.5. Policy Ideation
**Special Considerations:**
- Ensure proposals align with community values
- Facilitate inclusive discussion
- Document consensus and dissent
- Forward viable proposals to governance team
- Communicate policy development progress
### 3.6. Accessibility Feedback
**Priority Handling:**
- Treat accessibility issues with urgency
- Ensure reports include assistive technology details
- Coordinate with accessibility team
- Track resolution progress
- Verify fixes with reporting users
### 3.7. Partnership Requests
**Professional Standards:**
- Maintain confidentiality as requested
- Verify legitimacy of proposals
- Route to appropriate decision-makers
- Facilitate initial discussions
- Document partnership criteria clearly
### 3.8. Legal Notices
**Critical Procedures:**
- Immediate escalation to legal team
- Preserve all original content
- Document receipt timestamps
- Maintain strict confidentiality
- Follow legal response protocols
### 3.9. Billing Questions
**Sensitive Information Handling:**
- Never request payment details in public threads
- Offer private thread conversion for sensitive matters
- Verify account ownership before discussing specifics
- Coordinate with billing team for resolutions
- Document common issues for FAQ development
### 3.10. Press Inquiries
**Media Relations:**
- Verify journalist credentials when appropriate
- Coordinate with communications team
- Maintain professional brand representation
- Facilitate interview scheduling
- Track press engagement metrics
### 3.11. Marketing Proposals
**Evaluation Criteria:**
- Assess alignment with brand values
- Check for spam or low-quality proposals
- Facilitate community input when appropriate
- Route serious proposals to marketing team
- Maintain proposal tracking system
## 4. MODERATION TOOLS AND FEATURES
### 4.1. Forum-Specific Tools
#### 4.1.1. Thread Management Tools
- **Move Thread**: Relocate to appropriate category
- **Merge Threads**: Combine duplicate discussions
- **Split Thread**: Separate off-topic discussions
- **Pin/Unpin**: Control thread visibility priority
- **Lock Thread**: Prevent further replies when needed
- **Mark Solution**: Identify resolved issues
#### 4.1.2. User Management Tools
- **Trust Levels**: Understand user permission tiers
- **User Notes**: Document moderation history
- **Warnings**: Issue formal warnings when needed
- **Suspensions**: Temporary access restrictions
- **Thread Permissions**: Control individual thread access
### 4.2. Content Moderation Features
#### 4.2.1. Automated Moderation
- **Spam Filters**: Automatic spam detection
- **Trust Level Restrictions**: New user limitations
- **Flag Queue**: Community-reported content review
- **Word Filters**: Prohibited content blocking
- **Link Restrictions**: External link moderation
#### 4.2.2. Manual Moderation Actions
- **Edit Posts**: Correct or redact content
- **Delete Posts**: Remove policy violations
- **Hide Posts**: Temporary removal pending review
- **Restore Posts**: Reinstate incorrectly removed content
- **Revision History**: Track all content changes
## 5. COMMON SCENARIOS AND RESPONSES
### 5.1. Scenario: Duplicate Bug Report
**Appropriate Response:**
1. Search for existing reports
2. Link to original thread
3. Merge valuable additional information
4. Close duplicate with explanation
5. Guide user to original discussion
### 5.2. Scenario: Vague Support Request
**Effective Approach:**
1. Request specific information needed
2. Provide template for details
3. Offer examples of good reports
4. Remain patient and helpful
5. Follow up if no response
### 5.3. Scenario: Heated Feature Request Debate
**De-escalation Strategy:**
1. Remind participants of community standards
2. Refocus on constructive discussion
3. Separate technical merit from personal attacks
4. Issue warnings if necessary
5. Lock thread if situation escalates
### 5.4. Scenario: Sensitive Information Posted
**Immediate Actions:**
1. Edit post to remove sensitive data
2. Private message user about removal
3. Educate on security best practices
4. Document incident for patterns
5. Review similar posts for exposure
## 6. FORUM COMMUNITY BUILDING
### 6.1. Encouraging Participation
**Engagement Strategies:**
- Welcome new users warmly
- Recognise helpful community members
- Create regular discussion topics
- Showcase community solutions
- Celebrate milestones and achievements
### 6.2. Knowledge Base Development
**Content Curation:**
- Identify frequently asked questions
- Create comprehensive guides
- Maintain solution database
- Update outdated information
- Cross-reference related topics
## 7. METRICS AND REPORTING
### 7.1. Key Performance Indicators
**Forum Health Metrics:**
- Response time to new threads
- Resolution rate for support requests
- User satisfaction indicators
- Community engagement levels
- Moderator action frequency
### 7.2. Regular Reporting
**Documentation Requirements:**
- Weekly moderation summaries
- Category-specific activity reports
- Escalation tracking
- Community feedback synthesis
- Improvement recommendations
## 8. CONTINUOUS IMPROVEMENT
### 8.1. Feedback Integration
**Process Improvement:**
- Regular community surveys
- Moderator experience sharing
- Policy effectiveness review
- Tool and feature requests
- Best practice documentation
### 8.2. Professional Development
**Ongoing Training:**
- Forum software updates
- New moderation techniques
- Community management trends
- Accessibility improvements
- Cross-platform coordination
---
*This Forum Moderation Training provides comprehensive guidance for moderating our Support Forum. For questions about forum moderation procedures or to report issues with the forum platform, please contact the Moderation Team Lead through the designated staff channels.*
+5 -19
View File
@@ -1,22 +1,8 @@
@import url('https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Creepster&family=Griffy&family=Henny+Penny&display=swap');
body {
font-family: "Kalam", cursive !important;
@font-face {
font-family: "Vampyr";
src: url("https://cdn.nhcarrigan.com/fonts/vampyr.ttf") format("truetype");
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Griffy", cursive !important;
}
.witchy-accent {
font-family: "Creepster", cursive;
}
.mystical-text {
font-family: "Henny Penny", cursive;
* {
font-family: "Vampyr", monospace !important;
}
+16 -133
View File
@@ -1,50 +1,13 @@
:root {
/* Witch color palette */
--witch-purple: #2b1b3d;
--witch-purple-translucent: hsla(267, 40%, 17%, 0.85);
--witch-plum: #44275a;
--witch-rose: #a8577e;
--witch-mauve: #d4a5c7;
--witch-lavender: #e8d5e8;
--witch-black: #0a0009;
--witch-silver: #c0c0c0;
--witch-moon: #f5f5f5;
--witch-shadow: rgba(10, 0, 9, 0.7);
/* Light theme uses lighter colors for background, darker for text */
--primary-color: var(--witch-purple);
--background-color: var(--witch-lavender) DC;
--sl-color-text-accent: var(--witch-purple);
/* Additional Starlight overrides */
--sl-color-gray-1: var(--witch-moon);
--sl-color-gray-2: var(--witch-lavender);
--sl-color-gray-3: var(--witch-mauve);
--sl-color-gray-4: var(--witch-rose);
--sl-color-gray-5: var(--witch-plum);
--sl-color-gray-6: var(--witch-purple);
/* Translucent background */
--content-bg: rgba(181, 185, 187, 0.85);
--content-blur: 8px;
--primary-color: #8F2447;
--background-color: #E1F6F9DC;
--sl-color-text-accent: #8F2447;
}
html[data-theme="dark"] {
/* Dark theme uses darker colors for background, lighter for text */
.page {
--background-color: transparent;
}
--primary-color: var(--witch-lavender);
--sl-color-text-accent: var(--witch-lavender);
/* Additional Starlight overrides for dark theme */
--sl-color-gray-1: var(--witch-purple);
--sl-color-gray-2: var(--witch-plum);
--sl-color-gray-3: var(--witch-rose);
--sl-color-gray-4: var(--witch-mauve);
--sl-color-gray-5: var(--witch-lavender);
--sl-color-gray-6: var(--witch-moon);
--primary-color: #E1F6F9;
--background-color: #8F2447ee;
--sl-color-text-accent: #E1F6F9;
}
.main-frame::before {
@@ -70,12 +33,8 @@ html[data-theme="dark"] {
}
.sidebar-pane,
.right-sidebar {
background-color: var(--background-color);
color: var(--primary-color);
}
.right-sidebar-panel {
background-color: var(--background-color);
color: var(--primary-color);
}
@@ -89,31 +48,14 @@ a {
color: var(--primary-color) !important;
}
.page {
background: var(--content-bg);
backdrop-filter: var(--content-blur);
}
html[data-theme="dark"] .page {
background: var(--witch-purple-translucent);
}
a[aria-current="page"] {
color: var(--background-color) !important;
background-color: var(--witch-rose) !important;
}
html[data-theme="dark"] a[aria-current="page"] {
color: var(--witch-moon) !important;
background-color: var(--primary-color) !important;
}
header {
color: var(--primary-color) !important;
background-color: var(--witch-lavender) !important;
}
html[data-theme="dark"] header {
background-color: var(--witch-purple) !important;
background-color: var(--background-color) !important;
}
.large {
@@ -125,8 +67,8 @@ html[data-theme="dark"] header {
}
.right-sidebar-panel :where(a):hover {
color: var(--witch-moon) !important;
background-color: var(--witch-rose) !important;
color: var(--background-color) !important;
background-color: var(--primary-color) !important;
}
footer > div > a,
@@ -135,26 +77,10 @@ footer > div > p {
color: var(--primary-color) !important;
}
starlight-theme-select,
starlight-theme-select > label {
starlight-theme-select, starlight-theme-select > label {
color: var(--primary-color) !important;
}
starlight-theme-select select {
color: var(--primary-color) !important;
background-color: var(--background-color) !important;
}
starlight-theme-select select option {
color: var(--primary-color);
background-color: var(--background-color);
}
html[data-theme="dark"] starlight-theme-select select option {
color: var(--witch-purple) !important;
background-color: var(--witch-lavender) !important;
}
.social-icons::after {
display: none;
}
@@ -168,56 +94,13 @@ html[data-theme="dark"] starlight-theme-select select option {
}
.pagination-links > a:hover {
color: var(--witch-moon) !important;
background-color: var(--witch-plum) !important;
color: var(--background-color) !important;
background-color: var(--primary-color) !important;
}
.pagination-links > a:hover > span > .link-title {
color: var(--witch-moon) !important;
background-color: var(--witch-plum) !important;
}
.hero .tagline {
color: var(--primary-color) !important;
}
site-search button[data-open-modal] {
color: var(--primary-color) !important;
}
site-search button[data-open-modal] kbd {
color: var(--primary-color) !important;
background-color: var(--background-color) !important;
border-color: var(--primary-color) !important;
}
:where(.sl-markdown-content, .content-panel, article) :not(pre) > code {
font-family: "Courier New", monospace;
font-weight: 600;
background: rgba(43, 27, 61, 0.05) !important;
color: var(--witch-purple) !important;
padding: 2px 6px;
border-radius: 4px;
}
html[data-theme="dark"] :where(.sl-markdown-content, .content-panel, article) :not(pre) > code {
background: rgba(255, 255, 255, 0.08) !important;
color: var(--witch-lavender) !important;
}
#starlight__search {
--pagefind-ui-text: var(--primary-color);
--pagefind-ui-primary: var(--witch-rose);
}
#starlight__search input::placeholder {
color: var(--primary-color) !important;
opacity: 0.8;
}
.pagefind-ui__result-excerpt {
color: var(--primary-color) !important;
opacity: 0.9;
color: var(--background-color) !important;
background-color: var(--primary-color) !important;
}
#extra-footer-content {
+87 -174
View File
@@ -2,61 +2,62 @@
"$schema": "vscode://schemas/color-theme",
"type": "dark",
"colors": {
"activityBar.background": "#150a1e",
"activityBar.foreground": "#e8d5e8",
"activityBarBadge.background": "#a8577e",
"activityBarBadge.foreground": "#f5f5f5",
"button.background": "#44275a",
"button.foreground": "#e8d5e8",
"dropdown.background": "#2b1b3d",
"dropdown.foreground": "#e8d5e8",
"editor.background": "#0a0009",
"editor.foreground": "#e8d5e8",
"editor.lineHighlightBackground": "#2b1b3d",
"editor.selectionBackground": "#a8577e",
"editor.selectionHighlightBackground": "#a8577e50",
"editor.wordHighlightBackground": "#a8577e40",
"editorCursor.foreground": "#a8577e",
"editorGroupHeader.tabsBackground": "#150a1e",
"editorWhitespace.foreground": "#44275a",
"focusBorder": "#a8577e",
"input.background": "#150a1e",
"input.foreground": "#e8d5e8",
"input.placeholderForeground": "#d4a5c7",
"list.activeSelectionBackground": "#44275a",
"list.activeSelectionForeground": "#e8d5e8",
"list.hoverBackground": "#2b1b3d",
"list.hoverForeground": "#e8d5e8",
"sideBar.background": "#150a1e",
"sideBar.foreground": "#e8d5e8",
"sideBarTitle.foreground": "#d4a5c7",
"statusBar.background": "#44275a",
"statusBar.foreground": "#e8d5e8",
"statusBar.noFolderBackground": "#0a0009",
"tab.activeBackground": "#2b1b3d",
"tab.activeForeground": "#e8d5e8",
"tab.inactiveBackground": "#150a1e",
"tab.inactiveForeground": "#d4a5c7",
"terminal.ansiBlack": "#2b1b3d",
"terminal.ansiBlue": "#7b5ea8",
"terminal.ansiBrightBlack": "#44275a",
"terminal.ansiBrightBlue": "#9b7ec8",
"terminal.ansiBrightCyan": "#d0b8e8",
"terminal.ansiBrightGreen": "#a898c0",
"terminal.ansiBrightMagenta": "#d4a5c7",
"terminal.ansiBrightRed": "#c96b8e",
"terminal.ansiBrightWhite": "#f5f5f5",
"terminal.ansiBrightYellow": "#e8d5e8",
"terminal.ansiCyan": "#b8a0d0",
"terminal.ansiGreen": "#8a7a9e",
"terminal.ansiMagenta": "#a8577e",
"terminal.ansiRed": "#a8577e",
"terminal.ansiWhite": "#d4a5c7",
"terminal.ansiYellow": "#d4a5c7",
"terminal.background": "#0a0009",
"terminal.foreground": "#e8d5e8",
"titleBar.activeBackground": "#2b1b3d",
"titleBar.activeForeground": "#e8d5e8"
"activityBar.background": "#3a0d22",
"activityBar.foreground": "#ffb6c1",
"activityBarBadge.background": "#ff69b4",
"activityBarBadge.foreground": "#000000",
"button.background": "#ff69b4",
"button.foreground": "#000000",
"dropdown.background": "#4a112a",
"dropdown.foreground": "#ffb6c1",
"editor.background": "#2a0a18",
"editor.foreground": "#ffb6c1",
"editor.lineHighlightBackground": "#1073cf2d",
"editor.lineHighlightBorder": "#9fced11f",
"editor.selectionBackground": "#e35a8f",
"editor.selectionHighlightBackground": "#e35a8f80",
"editor.wordHighlightBackground": "#e35a8f80",
"editorCursor.foreground": "#ff69b4",
"editorGroupHeader.tabsBackground": "#3a0d22",
"editorWhitespace.foreground": "#4a112a",
"focusBorder": "#ff69b4",
"input.background": "#3a0d22",
"input.foreground": "#ffb6c1",
"input.placeholderForeground": "#e35a8f",
"list.activeSelectionBackground": "#4a112a",
"list.activeSelectionForeground": "#ffb6c1",
"list.hoverBackground": "#3a0d22",
"list.hoverForeground": "#ffb6c1",
"sideBar.background": "#3a0d22",
"sideBar.foreground": "#ffb6c1",
"sideBarTitle.foreground": "#ff69b4",
"statusBar.background": "#4a112a",
"statusBar.foreground": "#ffb6c1",
"statusBar.noFolderBackground": "#2a0a18",
"tab.activeBackground": "#3a0d22",
"tab.activeForeground": "#ffb6c1",
"tab.inactiveBackground": "#4a112a",
"tab.inactiveForeground": "#e35a8f",
"terminal.ansiBlack": "#4a112a",
"terminal.ansiBlue": "#c96385",
"terminal.ansiBrightBlack": "#3a0d22",
"terminal.ansiBrightBlue": "#d87093",
"terminal.ansiBrightCyan": "#ffafc5",
"terminal.ansiBrightGreen": "#ff77a8",
"terminal.ansiBrightMagenta": "#ff85a2",
"terminal.ansiBrightRed": "#ff1493",
"terminal.ansiBrightWhite": "#fff5f7",
"terminal.ansiBrightYellow": "#ffb6c1",
"terminal.ansiCyan": "#ff9aac",
"terminal.ansiGreen": "#e35a8f",
"terminal.ansiMagenta": "#e35a8f",
"terminal.ansiRed": "#ff69b4",
"terminal.ansiWhite": "#ffd1dc",
"terminal.ansiYellow": "#d45a88",
"terminal.background": "#2a0a18",
"terminal.foreground": "#ffb6c1",
"titleBar.activeBackground": "#4a112a",
"titleBar.activeForeground": "#ffb6c1"
},
"tokenColors": [
{
@@ -65,7 +66,7 @@
"punctuation.definition.comment"
],
"settings": {
"foreground": "#7A5A8A",
"foreground": "#E5A3B5",
"fontStyle": "italic"
}
},
@@ -80,7 +81,7 @@
"constant.other.symbol"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF69B4"
}
},
{
@@ -92,7 +93,7 @@
"support.constant"
],
"settings": {
"foreground": "#C88FA8"
"foreground": "#C96385"
}
},
{
@@ -104,7 +105,7 @@
"variable.object.property"
],
"settings": {
"foreground": "#E8D5E8"
"foreground": "#D87093"
}
},
{
@@ -118,7 +119,7 @@
"punctuation.decorator"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -131,7 +132,7 @@
"meta.function.dart"
],
"settings": {
"foreground": "#C070A0"
"foreground": "#D45A88"
}
},
{
@@ -148,7 +149,7 @@
"meta.return-type"
],
"settings": {
"foreground": "#D4A5C7",
"foreground": "#FF77A8",
"fontStyle": "bold"
}
},
@@ -159,7 +160,7 @@
"punctuation.definition.annotation"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#C96385"
}
},
{
@@ -168,7 +169,7 @@
"punctuation.definition.tag"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -180,7 +181,7 @@
"entity.other.attribute-name.class"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -193,7 +194,7 @@
"support.type.primitive.dart"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -202,7 +203,7 @@
"constant.character.escape.regex"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF69B4"
}
},
{
@@ -211,7 +212,7 @@
"entity.name.section"
],
"settings": {
"foreground": "#A8577E",
"foreground": "#D45A88",
"fontStyle": "bold"
}
},
@@ -238,7 +239,7 @@
"markup.raw"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF69B4"
}
},
{
@@ -247,7 +248,7 @@
"support.type.property-name.jsonc"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -261,7 +262,7 @@
"keyword.operator.logical"
],
"settings": {
"foreground": "#CF8FAE"
"foreground": "#E35A8F"
}
},
{
@@ -271,7 +272,7 @@
"meta.template.expression"
],
"settings": {
"foreground": "#E8D5E8"
"foreground": "#D87093"
}
},
{
@@ -282,7 +283,7 @@
"variable.other.object.property"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -292,7 +293,7 @@
"support.variable.object.node"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -302,7 +303,7 @@
"source.rust entity.name.type.struct.rust"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -312,7 +313,7 @@
"source.rust keyword.operator.logical"
],
"settings": {
"foreground": "#CF8FAE"
"foreground": "#E35A8F"
}
},
{
@@ -321,7 +322,7 @@
"source.python support.function.builtin.python"
],
"settings": {
"foreground": "#C070A0"
"foreground": "#D45A88"
}
},
{
@@ -330,7 +331,7 @@
"source.cs storage.type.cs"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -339,7 +340,7 @@
"source.dart support.type.dart"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -349,7 +350,7 @@
"source.prisma keyword.type"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -358,7 +359,7 @@
"source.graphql constant.character"
],
"settings": {
"foreground": "#D4A5C7"
"foreground": "#FF77A8"
}
},
{
@@ -367,7 +368,7 @@
"source.sql storage.type"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -377,7 +378,7 @@
"meta.embedded.block.jsx"
],
"settings": {
"foreground": "#E8D5E8"
"foreground": "#D87093"
}
},
{
@@ -387,101 +388,13 @@
"meta.decorator.angular"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#C96385"
}
},
{
"scope": [
"entity.name.tag.yaml",
"string.unquoted.plain.out.yaml"
],
"scope": "ref.matchtext",
"settings": {
"foreground": "#D4A5C7"
}
},
{
"scope": [
"support.type.property-name.toml",
"entity.name.tag.toml"
],
"settings": {
"foreground": "#D4A5C7"
}
},
{
"scope": [
"markup.underline.link",
"string.other.link.title.markdown",
"meta.link.inline.markdown"
],
"settings": {
"foreground": "#A8577E"
}
},
{
"scope": [
"markup.quote"
],
"settings": {
"foreground": "#7A5A8A",
"fontStyle": "italic"
}
},
{
"scope": [
"punctuation.definition.list.begin.markdown",
"beginning.punctuation.definition.list.markdown"
],
"settings": {
"foreground": "#A8577E"
}
},
{
"scope": [
"variable.css",
"variable.other.custom-property.css",
"support.type.custom-property.css"
],
"settings": {
"foreground": "#CF8FAE"
}
},
{
"scope": [
"support.macro.rust",
"entity.name.function.macro.rust",
"meta.macro.rust entity.name.function.rust"
],
"settings": {
"foreground": "#C070A0"
}
},
{
"scope": [
"storage.modifier.lifetime.rust",
"entity.name.lifetime.rust",
"punctuation.definition.lifetime.rust"
],
"settings": {
"foreground": "#9B5878"
}
},
{
"scope": [
"entity.name.package.go"
],
"settings": {
"foreground": "#C88FA8"
}
},
{
"scope": [
"entity.name.package.java",
"support.other.package.java",
"entity.name.package.kotlin"
],
"settings": {
"foreground": "#C88FA8"
"foreground": "#FFFFFF"
}
},
{
+88 -181
View File
@@ -2,61 +2,62 @@
"$schema": "vscode://schemas/color-theme",
"type": "light",
"colors": {
"activityBar.background": "#e8d5e8",
"activityBar.foreground": "#2b1b3d",
"activityBarBadge.background": "#a8577e",
"activityBarBadge.foreground": "#f5f5f5",
"button.background": "#a8577e",
"button.foreground": "#f5f5f5",
"dropdown.background": "#e8d5e8",
"dropdown.foreground": "#2b1b3d",
"editor.background": "#f5f5f5",
"editor.foreground": "#2b1b3d",
"editor.lineHighlightBackground": "#d4a5c740",
"editor.selectionBackground": "#d4a5c7",
"editor.selectionHighlightBackground": "#d4a5c750",
"editor.wordHighlightBackground": "#d4a5c740",
"editorCursor.foreground": "#a8577e",
"editorGroupHeader.tabsBackground": "#e8d5e8",
"editorWhitespace.foreground": "#d4a5c7",
"focusBorder": "#a8577e",
"input.background": "#f5f5f5",
"input.foreground": "#2b1b3d",
"input.placeholderForeground": "#a8577e",
"list.activeSelectionBackground": "#d4a5c7",
"list.activeSelectionForeground": "#2b1b3d",
"list.hoverBackground": "#e8d5e8",
"list.hoverForeground": "#2b1b3d",
"sideBar.background": "#e8d5e8",
"sideBar.foreground": "#2b1b3d",
"sideBarTitle.foreground": "#a8577e",
"statusBar.background": "#a8577e",
"statusBar.foreground": "#f5f5f5",
"statusBar.noFolderBackground": "#f5f5f5",
"tab.activeBackground": "#f5f5f5",
"tab.activeForeground": "#2b1b3d",
"tab.inactiveBackground": "#e8d5e8",
"tab.inactiveForeground": "#44275a",
"terminal.ansiBlack": "#2b1b3d",
"terminal.ansiBlue": "#7b5ea8",
"terminal.ansiBrightBlack": "#44275a",
"terminal.ansiBrightBlue": "#9b7ec8",
"terminal.ansiBrightCyan": "#d0b8e8",
"terminal.ansiBrightGreen": "#a898c0",
"terminal.ansiBrightMagenta": "#d4a5c7",
"terminal.ansiBrightRed": "#c96b8e",
"terminal.ansiBrightWhite": "#f5f5f5",
"terminal.ansiBrightYellow": "#e8d5e8",
"terminal.ansiCyan": "#b8a0d0",
"terminal.ansiGreen": "#8a7a9e",
"terminal.ansiMagenta": "#a8577e",
"terminal.ansiRed": "#a8577e",
"terminal.ansiWhite": "#d4a5c7",
"terminal.ansiYellow": "#d4a5c7",
"terminal.background": "#f5f5f5",
"terminal.foreground": "#2b1b3d",
"titleBar.activeBackground": "#e8d5e8",
"titleBar.activeForeground": "#2b1b3d"
"activityBar.background": "#ffd6e0",
"activityBar.foreground": "#d87093",
"activityBarBadge.background": "#ff69b4",
"activityBarBadge.foreground": "#ffffff",
"button.background": "#ff69b4",
"button.foreground": "#ffffff",
"dropdown.background": "#fff0f5",
"dropdown.foreground": "#d87093",
"editor.background": "#ffefef",
"editor.foreground": "#d87093",
"editor.lineHighlightBackground": "#1073cf2d",
"editor.lineHighlightBorder": "#9fced11f",
"editor.selectionBackground": "#ffb6c1",
"editor.selectionHighlightBackground": "#ffb6c180",
"editor.wordHighlightBackground": "#ffb6c180",
"editorCursor.foreground": "#ff69b4",
"editorGroupHeader.tabsBackground": "#ffe4e8",
"editorWhitespace.foreground": "#ffe4e8",
"focusBorder": "#ff69b4",
"input.background": "#fff0f5",
"input.foreground": "#d87093",
"input.placeholderForeground": "#ff77a8",
"list.activeSelectionBackground": "#ffefef",
"list.activeSelectionForeground": "#d87093",
"list.hoverBackground": "#fff0f5",
"list.hoverForeground": "#d87093",
"sideBar.background": "#fff0f5",
"sideBar.foreground": "#d87093",
"sideBarTitle.foreground": "#ff69b4",
"statusBar.background": "#ffd6e0",
"statusBar.foreground": "#d87093",
"statusBar.noFolderBackground": "#ffefef",
"tab.activeBackground": "#ffefef",
"tab.activeForeground": "#d87093",
"tab.inactiveBackground": "#ffd6e0",
"tab.inactiveForeground": "#ff77a8",
"terminal.ansiBlack": "#ffe4e8",
"terminal.ansiBlue": "#db7093",
"terminal.ansiBrightBlack": "#ffefef",
"terminal.ansiBrightBlue": "#f08080",
"terminal.ansiBrightCyan": "#ffc0cb",
"terminal.ansiBrightGreen": "#ff77a8",
"terminal.ansiBrightMagenta": "#ff9aac",
"terminal.ansiBrightRed": "#ff0066",
"terminal.ansiBrightWhite": "#fff5f7",
"terminal.ansiBrightYellow": "#ffa6c9",
"terminal.ansiCyan": "#ffafc5",
"terminal.ansiGreen": "#ff69b4",
"terminal.ansiMagenta": "#ff85a2",
"terminal.ansiRed": "#ff1493",
"terminal.ansiWhite": "#ffd1dc",
"terminal.ansiYellow": "#ffb6c1",
"terminal.background": "#ffefef",
"terminal.foreground": "#d87093",
"titleBar.activeBackground": "#ffd6e0",
"titleBar.activeForeground": "#d87093"
},
"tokenColors": [
{
@@ -65,7 +66,7 @@
"punctuation.definition.comment"
],
"settings": {
"foreground": "#7A5A8A",
"foreground": "#E5A3B5",
"fontStyle": "italic"
}
},
@@ -80,7 +81,7 @@
"constant.other.symbol"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF69B4"
}
},
{
@@ -92,7 +93,7 @@
"support.constant"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#C96385"
}
},
{
@@ -104,7 +105,7 @@
"variable.object.property"
],
"settings": {
"foreground": "#44275a"
"foreground": "#D87093"
}
},
{
@@ -118,7 +119,7 @@
"punctuation.decorator"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -131,7 +132,7 @@
"meta.function.dart"
],
"settings": {
"foreground": "#C070A0"
"foreground": "#D45A88"
}
},
{
@@ -148,7 +149,7 @@
"meta.return-type"
],
"settings": {
"foreground": "#9B5878",
"foreground": "#FF77A8",
"fontStyle": "bold"
}
},
@@ -159,7 +160,7 @@
"punctuation.definition.annotation"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#C96385"
}
},
{
@@ -168,7 +169,7 @@
"punctuation.definition.tag"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -180,7 +181,7 @@
"entity.other.attribute-name.class"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -193,7 +194,7 @@
"support.type.primitive.dart"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -202,7 +203,7 @@
"constant.character.escape.regex"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF69B4"
}
},
{
@@ -211,7 +212,7 @@
"entity.name.section"
],
"settings": {
"foreground": "#A8577E",
"foreground": "#D45A88",
"fontStyle": "bold"
}
},
@@ -238,7 +239,7 @@
"markup.raw"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF69B4"
}
},
{
@@ -247,7 +248,7 @@
"support.type.property-name.jsonc"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -261,7 +262,7 @@
"keyword.operator.logical"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -271,7 +272,7 @@
"meta.template.expression"
],
"settings": {
"foreground": "#44275a"
"foreground": "#D87093"
}
},
{
@@ -282,7 +283,7 @@
"variable.other.object.property"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -292,7 +293,7 @@
"support.variable.object.node"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -302,7 +303,7 @@
"source.rust entity.name.type.struct.rust"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -312,7 +313,7 @@
"source.rust keyword.operator.logical"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -321,7 +322,7 @@
"source.python support.function.builtin.python"
],
"settings": {
"foreground": "#C070A0"
"foreground": "#D45A88"
}
},
{
@@ -330,7 +331,7 @@
"source.cs storage.type.cs"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -339,7 +340,7 @@
"source.dart support.type.dart"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -349,7 +350,7 @@
"source.prisma keyword.type"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -358,7 +359,7 @@
"source.graphql constant.character"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#FF77A8"
}
},
{
@@ -367,7 +368,7 @@
"source.sql storage.type"
],
"settings": {
"foreground": "#A8577E"
"foreground": "#E35A8F"
}
},
{
@@ -377,7 +378,7 @@
"meta.embedded.block.jsx"
],
"settings": {
"foreground": "#44275a"
"foreground": "#D87093"
}
},
{
@@ -387,107 +388,13 @@
"meta.decorator.angular"
],
"settings": {
"foreground": "#9B5878"
}
},
{
"scope": [
"entity.name.tag.yaml",
"string.unquoted.plain.out.yaml"
],
"settings": {
"foreground": "#9B5878"
}
},
{
"scope": [
"support.type.property-name.toml",
"entity.name.tag.toml"
],
"settings": {
"foreground": "#9B5878"
}
},
{
"scope": [
"markup.underline.link",
"string.other.link.title.markdown",
"meta.link.inline.markdown"
],
"settings": {
"foreground": "#A8577E"
}
},
{
"scope": [
"markup.quote"
],
"settings": {
"foreground": "#7A5A8A",
"fontStyle": "italic"
}
},
{
"scope": [
"punctuation.definition.list.begin.markdown",
"beginning.punctuation.definition.list.markdown"
],
"settings": {
"foreground": "#A8577E"
}
},
{
"scope": [
"variable.css",
"variable.other.custom-property.css",
"support.type.custom-property.css"
],
"settings": {
"foreground": "#A8577E"
}
},
{
"scope": [
"support.macro.rust",
"entity.name.function.macro.rust",
"meta.macro.rust entity.name.function.rust"
],
"settings": {
"foreground": "#C070A0"
}
},
{
"scope": [
"storage.modifier.lifetime.rust",
"entity.name.lifetime.rust",
"punctuation.definition.lifetime.rust"
],
"settings": {
"foreground": "#9B5878"
}
},
{
"scope": [
"entity.name.package.go"
],
"settings": {
"foreground": "#9B5878"
}
},
{
"scope": [
"entity.name.package.java",
"support.other.package.java",
"entity.name.package.kotlin"
],
"settings": {
"foreground": "#9B5878"
"foreground": "#C96385"
}
},
{
"scope": "token.info-token",
"settings": {
"foreground": "#6796E6"
"foreground": "#316BCD"
}
},
{
@@ -499,13 +406,13 @@
{
"scope": "token.error-token",
"settings": {
"foreground": "#F44747"
"foreground": "#CD3131"
}
},
{
"scope": "token.debug-token",
"settings": {
"foreground": "#B267E6"
"foreground": "#800080"
}
}
]
+42
View File
@@ -0,0 +1,42 @@
# Staff Announcement
Hey team! πŸ‘‹ Just wanted to share a few quick updates:
## πŸ“‹ Policy Disclaimers Added
We've added disclaimers to policies that are still being implemented. You'll see these as tip callouts in various policy documents (like SLA, Privacy, Content Moderation, and others) indicating that certain sections are still a work in progress. This helps set clear expectations while we continue building out the necessary infrastructure.
## 🏷️ New Points and Time Labels
We've introduced new labeling systems to help with capacity planning and workload management:
**Points Labels** (complexity/effort):
- `points: 1` - Very simple tasks
- `points: 2` - Simple tasks
- `points: 3` - Moderate complexity
- `points: 5` - Complex issues
- `points: 8` - Very complex
- `points: 13` - Extremely complex/epic-level
**Time Labels** (expected duration):
- `time: <1 day` - Quick fixes
- `time: 1 day` - One day of work
- `time: 2-3 days` - Multi-day tasks
- `time: 4-5 days` - About a week
- `time: 1-2 weeks` - Major features
- `time: >2 weeks` - Epic-level work
Check out the full details in our [Labels documentation](https://docs.nhcarrigan.com/dev/labels)!
## πŸ“Š New Project Board for Available Tickets
We now have a dedicated **Staff Tickets** project board where you can find all properly triaged tickets that are ready to be worked on!
πŸ”— **Project Board**: https://git.nhcarrigan.com/nhcarrigan/-/projects/2
All tickets with the `status: ready for dev` label are automatically available on this board, making it much easier to find work that's ready to go.
---
Questions? Feel free to reach out! πŸ’¬