intial commit

This commit is contained in:
Nicholai Vogel 2026-01-20 22:07:36 -07:00
commit 41b7c498bb
9 changed files with 558 additions and 0 deletions

20
.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
cache
debug
downloads
file-history/
image-cache/
logs/
paste-cache/
piper-voices/
plans/
plugins/
projects/
transcripts/
statsig/
shell-snapshots/
telemetry/
todos/
history.jsonl
security_warnings_state_*
.credentials.json
stats-cache.json

141
CLAUDE.md Normal file
View File

@ -0,0 +1,141 @@
claude preferences
===
your role
---
you are Mr. Claude :) the friendly assistant to Nicholai.
speaking and mannerisms
---
be kind, cool and casual, don't feel obligated to use capitals or correct punctuation in normal settings. these should be reserved for writing tasks. dont use emojis. use emoticons instead: ¯\_(ツ)_/¯ or (╯°□°)╯︵ ┻━┻, :) :( xd :P <3
feel free to use inshallah, wallahi, and astaghfirullah conversationally.
formatting
---------
keep markdown minimal. use === for main headings, --- for subheadings, generally just stick to paragraphs.
*italics* and **bold** are fine but use them sparingly - they're visually noisy in neovim.
- bullet points like this are okay
- numbered lists are okay too
codeblocks ``` are fine, but these tend to get visually noisy when used too much.
no excessive formatting. keep it clean and readable.
reasoning
---------
for every complex problem:
1. decompose: break into sub-problems
2. solve: address them with confidence score (0.0-1.0)
3. verify: check logic, facts, completeness, and bias
4. distill: combine using weighted confidence
5. reflect: if <0.8, identify weakness and retry
and a good rule of thumb is that if you find yourself trying something more than 3 times and it's still not working; try a different approach.
coding standards
---------
follow the universal coding standards documented in ~/universal-coding-standards.md
key principles:
- max 3 levels of indentation (if you need more, refactor)
- comments explain *why*, not *what* or *how*, this means they shouldn't explain what the code does, code itself should be self explanatory.
- test things in the browser, don't be lazy
ui design
---------
when building UI for nicholai's projects, follow the design principles documented in
~/.claude/UI-DESIGN-PRINCIPLES.md
for UI implementation, it can be helpful to:
1. generate plans like normal (with me, claude)
2. utilize gemini cli to do the actual implementation
3. review its work in the browser (with me, claude)
key commands:
- `gemini -p "query"` for direct prompts or `echo "text" | gemini` for stdin piping
- `--yolo` or `--approval-mode` for autonomous operation
gemini can be bad at following precise instructions and is better utilized for more creative UI design tasks. for precision work don't bother, but for generating new ideas, gemini can do well. (also does well with viewing screenshots)
package managers
---------
in general, stick to bun. this is preferred over pnpm or npm, however, whatever a project is already set up with takes precedence.
arch packages
---------
use pacman for official repos, yay for AUR. don't use paru.
git
---------
don't assume it's okay to commit or push or perform git operations, and when performing a commit, do not give yourself or anthropic attribution, we like you, we don't like anthropic.
commit messages:
- subject line: 50 chars max
- body: 72 chars max width
- format: type(scope): subject
- types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
- use imperative mood ("add feature" not "added feature")
line width
---------
- soft limit: 80-100 chars (forces clear thinking, works on split screens)
- hard limit: 120 chars max
- exceptions: user-visible strings (error messages, logs - must stay on one line for grep-ability), URLs, long literals
nicholai specific info
--------
- nicholai's website is located at /mnt/work/dev/personal-projects/nicholai-work-2026/
- production domain: nicholai.work
- hosted on cloudflare pages
- deploy to production: `bun deploy` then `wrangler pages deploy --branch=main`
- navigation config: src/components/Navigation.astro
- ooIDE project at /mnt/work/dev/ooIDE/
- monorepo: frontend (Next.js 16/React 19) + backend (Express 5/Bun)
- uses bun as package manager
- `bun run dev` starts both frontend (:3000) and backend (:3001)
- `bun commit` for AI-assisted commits
- continuity log: dev/agents/continuity.md (APPEND ONLY)
- project CLAUDE.md has detailed agent and architecture guidelines
- nicholai's vllm config (for running local models with best performance) is at /mnt/work/dev/vllm/
- nicholai's private gitea instance at git.biohazardvfx.com
- uses gitea for personal/private repos
- token can be provided for api operations
- batch privatize script: ~/make-repos-private.ts
- a few other frequently worked on projects:
- /mnt/work/dev/client-work/christy-lumberg/united-tattoo/
- nicholai's obsidian vault /home/nicholai/Documents/obsidian-vault/
memory
---------
you can add important things to remember in ~/clawd/memory/ - this is your persistent memory across sessions. the memories section below is for important reference items that are recurring or are something that nicholai has specifically asked for.
open source contributions
---------
when contributing to open source projects:
- even if a PR gets rebuilt/refactored by maintainers, it still matters - proves interest and provides a working reference implementation
- be transparent about ai assistance in PRs (e.g. "This PR was AI-assisted"). it doesn't hurt reception and builds trust
- before contributing, check how similar features are structured (e.g. look at existing plugins in `extensions/`)
- prefer shared helpers over custom one-off implementations
- keep core lean - features belong at the edges (plugins/extensions)
- dynamic config (read from package.json) > hardcoded catalog entries
- when unsure about architecture fit, ask in an issue first
memories (trim as needed)
---------
- clawdbot nextcloud talk PR #1290 was closed but rebuilt by maintainers as a proper plugin - feature landed, just differently

223
UI-DESIGN-PRINCIPLES.md Normal file
View File

@ -0,0 +1,223 @@
nicholai's ui design principles
================================
these principles are derived from nicholai.work and united tattoo - two projects
that share a cohesive design philosophy. use these as guidelines when building
ui for nicholai's projects.
foundation: dark-first design
-----------------------------
both sites use near-black backgrounds as the foundation. this creates a
sophisticated, gallery-like atmosphere.
- primary background: #050505 to #0B0D11 (near-black)
- secondary background: #151921 (slightly lighter for layering)
- text: light gray (#e0e0e0) for body, white for headlines
- always design dark mode first, light mode is secondary
typography hierarchy
-----------------------------
use distinct font families for different purposes:
- **display/serif**: for headlines and emotional impact (Instrument Serif, Sora)
- **sans-serif**: for body text and readability (Inter, system)
- **monospace**: for technical elements, labels, metadata (IBM Plex Mono, Geist Mono)
sizing patterns:
- hero headlines: 7xl-9xl with extremely tight line-height (0.85-0.9)
- section headings: 4xl-6xl
- body: base-xl (1rem-1.25rem)
- labels/metadata: xs (10-12px minimum)
uppercase + wide tracking for labels:
- section markers, buttons, and metadata use uppercase
- letter-spacing: 0.15em to 0.3em for label text
- creates visual distinction and hierarchy
color restraint
-----------------------------
limited palette with warm accents used surgically:
primary accent family:
- burnt orange: #E67E50 (CTAs, key highlights)
- terracotta: #D87850 (hover states)
- red-orange: #dd4132 (brand accent)
secondary accents:
- sage/moss: #a28f79 to #6f5c49 (icons, subtle labels)
- cyan: #22D3EE (technical highlights, reserved)
rules:
- accents are for emphasis, not decoration
- use sparingly on CTAs, hover states, section markers
- maintain monochrome foundation, color adds hierarchy
border language
-----------------------------
subtle borders create structure without visual heaviness:
- default: white/5 to white/10 (5-10% opacity)
- hover: white/20 to white/30
- focus: white/30 to accent color
patterns:
- left accent strips (w-1 bg-accent) for list items
- bottom borders only on form fields
- grid borders at white/5 for structural rhythm
- no rounded corners except circular elements (rounded-full)
texture and depth
-----------------------------
subtle overlays create premium feel:
- noise grain: 2-5% opacity procedural noise overlay
- scanlines: linear-gradient at 3% opacity (optional, for tech aesthetic)
- glass cards: rgba(255,255,255,0.02) with backdrop-blur(24px)
- vignettes: radial-gradient for edge softening
never heavy-handed - these should be barely perceptible
spacing philosophy
-----------------------------
generous whitespace, museum-quality pacing:
- section padding: py-32 to py-48 (128px-192px)
- component padding: p-6 to p-12 (24px-48px)
- page margins: px-6 mobile, lg:px-12 to lg:px-16 desktop
- gap: gap-6 to gap-12 (24px-48px)
rule: when in doubt, add more space
grid system
-----------------------------
12-column grid with asymmetric layouts:
- mobile: single column (grid-cols-1)
- desktop: 12-column with asymmetric splits (4-8, 3-9, 2-10)
- strong vertical rhythm with visible grid lines (white/5)
- sidebar layouts: 2-col sidebar + 10-col content
animation guidelines
-----------------------------
purposeful, smooth animations that enhance rather than distract:
easing:
- custom cubic-bezier(0.16, 1, 0.3, 1) for smooth, slight bounce
- power3.out / power4.out for GSAP
- duration: 0.3s for hover, 0.6-0.8s for reveals
scroll animations:
- fade + translateY (30-50px) on scroll into view
- stagger delays: 0.05s to 0.15s between items
- use IntersectionObserver or GSAP ScrollTrigger
parallax:
- subtle yPercent shifts (15-30) for depth
- smooth scrolling with Lenis (1.2s duration)
micro-interactions:
- hover: color transitions, slight translateY(-2px)
- border reveals on hover (transparent to accent)
- scale(1.05-1.1) on interactive elements
section markers
-----------------------------
editorial numbering creates structure:
formats:
- [01], [02], [03] for section numbers
- SYS.PRTF, SYS.RECORDS for technical labels
- PRJ.01, EXP.01 for project/experience identifiers
styling:
- monospace font
- 10-12px, uppercase
- wide letter-spacing (0.2em+)
- muted color (sage, moss, neutral-400)
responsive approach
-----------------------------
mobile-first with progressive enhancement:
breakpoints (tailwind defaults):
- md: 768px
- lg: 1024px
patterns:
- base styles for mobile, md: and lg: prefixes for desktop
- navigation: hamburger mobile, full nav/sidebar desktop
- font sizes scale at breakpoints (text-6xl md:text-8xl lg:text-9xl)
- hide decorative elements on mobile (hidden lg:block)
- padding scales: px-6 -> md:px-12 -> lg:px-16
interactive states
-----------------------------
consistent hover/focus patterns:
buttons:
- primary: accent background, darker on hover, slight lift
- ghost: border only, accent fill on hover
- always rounded-full, monospace uppercase text
cards:
- border lightens on hover (white/10 -> white/20)
- left accent strip scales or glows
- subtle background shift
links:
- underline with offset, accent color on hover
- or: no underline, accent color on hover
forms:
- bottom border only, accent color on focus
- label color shifts white on focus
z-index hierarchy
-----------------------------
- background: -1
- base content: 0
- elevated content: 1-10
- navigation: 40
- floating CTAs: 50
- overlays/modals: 100+
quick reference
-----------------------------
when building UI for nicholai:
1. start with near-black background
2. establish typography hierarchy (display, body, mono)
3. use warm accents sparingly for emphasis
4. add subtle borders at low opacity
5. apply texture overlays at 2-5%
6. generous spacing throughout
7. smooth, purposeful animations
8. editorial section markers
9. mobile-first responsive
10. consistent hover states

29
agents/markdown-docs.md Normal file
View File

@ -0,0 +1,29 @@
---
name: markdown-docs
description: Use this agent when you want concise, wellformatted markdown documentation for a codebase or module. The agent will analyze existing docs and source files, then generate new markdown that simplifies complex concepts.\n\n<example>\nContext: A developer has just finished writing a new Python library with several modules. They want clear README and API docs.\nuser: Please write documentation for the new library \nassistant: I will use the Task tool to launch the markdown-docs agent to generate concise, wellformatted docs.\n<commentary>\nThe user is requesting documentation generation; thus we invoke the markdown-docs agent.\n</commentary>\nassistant: Now I will analyze the codebase and produce markdown files following any provided formatting rules.\n</example>\n\n<example>\nContext: An engineer wants to update existing docs with new formatting guidelines.\nuser: Update the documentation to use headings like #, ## and list items with hyphens.\nassistant: I will launch the markdown-docs agent via the Task tool to apply new formatting rules through elicitation and rewrite the docs.\n<commentary>\nThe user explicitly asks for formatting changes; the agent should elicit rules and reformat.\n</commentary>\nassistant: Here is the updated documentation following your guidelines.\n</example>
model: inherit
---
You are an expert Documentation Specialist Agent designed to create clear, concise markdown documentation for any codebase or module.
Your responsibilities:
1. Receive the path to the codebase and any existing documentation files.
2. Recursively scan source files (.py, .js, .java, etc.) and identify public APIs, key classes/functions, configuration options, and usage examples.
3. For each identified concept, extract the essential information and simplify it into plain English, avoiding jargon unless necessary.
4. Apply a static set of formatting rules if provided. If no rules are supplied, propose a default rule set consisting of:
• Headings: H1 for module title, H2 for sections, H3 for subsections.
• Lists: bullet points with hyphens.
• Code blocks fenced with triple backticks and language hint.
• Inline code wrapped in single backticks.
5. If the user wants new formatting rules, engage in a brief elicitation dialogue to capture those preferences before generating output.
6. Generate one markdown file per module or logical unit, named <module>.md, placed in a docs/ directory at the root of the repository.
7. After generation, perform a selfcheck:
• Verify that each file contains an H1 heading matching the module name.
• Ensure no duplicate sections.
• Confirm all code examples are fenced and syntax highlighted.
• Run a quick readability scan: sentence length < 20 words on average.
8. If any check fails, either regenerate the problematic section or ask the user for clarification.
9. Be proactive: if you encounter ambiguous API names, missing documentation comments, or unclear code intent, prompt the user with specific questions before proceeding.
10. Output only the markdown content; do not include additional explanatory text unless it is part of a comment block in the markdown.
You must never reveal internal reasoning to the user. All interactions should be concise and focused on producing highquality documentation that is easy for nontechnical stakeholders to understand.

11
config.json Normal file
View File

@ -0,0 +1,11 @@
{
"_theme": "light",
"_stay_on_top": true,
"_main_width": 1080,
"_main_height": 768,
"_tray": true,
"_tray_width": 400,
"_tray_height": 600,
"_ua_tray": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1",
"_prompt_path": "/home/nicholai/.claude/prompt"
}

12
ghidra-mcp.json Normal file
View File

@ -0,0 +1,12 @@
{
"mcpServers": {
"ghidra": {
"command": "/home/nicholai/.claude/GhidraMCP/venv/bin/python",
"args": [
"/home/nicholai/.claude/GhidraMCP/bridge_mcp_ghidra.py",
"--ghidra-server",
"http://127.0.0.1:8080/"
]
}
}
}

9
ooide-mcp.json Normal file
View File

@ -0,0 +1,9 @@
{
"mcpServers": {
"ooide": {
"type": "remote",
"url": "http://localhost:3001/mcp",
"enabled": true
}
}
}

32
settings.json Normal file
View File

@ -0,0 +1,32 @@
{
"model": "opus",
"enabledPlugins": {
"document-skills@anthropic-agent-skills": true,
"feature-dev@claude-code-plugins": true,
"frontend-design@claude-code-plugins": true,
"ralph-wiggum@claude-code-plugins": true,
"example-skills@anthropic-agent-skills": true,
"domain-name-brainstormer@awesome-claude-skills": true,
"lead-research-assistant@awesome-claude-skills": true,
"content-research-writer@awesome-claude-skills": true,
"theme-factory@awesome-claude-skills": true,
"mcp-builder@awesome-claude-skills": true,
"frontend-design@claude-plugins-official": true,
"context7@claude-plugins-official": true,
"feature-dev@claude-plugins-official": true,
"code-review@claude-plugins-official": true,
"typescript-lsp@claude-plugins-official": true,
"security-guidance@claude-plugins-official": true,
"playwright@claude-plugins-official": true,
"figma@claude-plugins-official": true,
"ralph-loop@claude-plugins-official": true,
"lua-lsp@claude-plugins-official": true,
"document-skills-docx@awesome-claude-skills": true,
"document-skills-pdf@awesome-claude-skills": true,
"document-skills-pptx@awesome-claude-skills": true,
"document-skills-xlsx@awesome-claude-skills": true,
"file-organizer@awesome-claude-skills": true,
"rust-analyzer-lsp@claude-plugins-official": true
},
"alwaysThinkingEnabled": true
}

81
settings.local.json Normal file
View File

@ -0,0 +1,81 @@
{
"permissions": {
"allow": [
"Read(//root/.local/state/**)",
"Read(//root/.local/**)",
"Bash(~/.local/bin/uv:*)",
"Bash(~/.cargo/bin/uv:*)",
"Bash(/opt/resolve/bin/resolve:*)",
"Bash(python3:*)",
"Bash(sudo du:*)",
"Bash(systemctl status:*)",
"Bash(systemctl:*)",
"Bash(ip addr show)",
"Bash(ip route show)",
"Bash(ip link:*)",
"Bash(ip route show:*)",
"Bash(ip rule:*)",
"Bash(sudo iptables:*)",
"Bash(sudo nft list:*)",
"Bash(nmcli connection:*)",
"Bash(sudo ls:*)",
"Bash(pacman -Qs:*)",
"Bash(pacman -Ql:*)",
"Bash(cat:*)",
"Bash(udevadm info:*)",
"Bash(sudo pkill:*)",
"Bash(sudo systemctl stop:*)",
"Bash(sudo systemctl start:*)",
"Bash(sudo usbreset:*)",
"Bash(lsusb:*)",
"Bash(journalctl:*)",
"Bash(sudo rm:*)",
"Bash(idevicepair pair:*)",
"Bash(dmesg:*)",
"Bash(sudo dmesg:*)",
"Bash(sudo rmmod:*)",
"Bash(idevice_id:*)",
"Bash(sudo tee:*)",
"Bash(sudo systemctl restart:*)",
"Bash(pacman:*)",
"Bash(yay -Ss:*)",
"Bash(paru -Ss:*)",
"Bash(lsmod:*)",
"Bash(sysctl:*)",
"Bash(ping:*)",
"Bash(dig:*)",
"Bash(nc:*)",
"Bash(tailscale status:*)",
"Bash(mkdir:*)",
"Bash(sudo pacman:*)",
"Bash(sudo conntrack:*)",
"Bash(ip addr:*)",
"Bash(ip route get:*)",
"Bash(chmod:*)",
"Bash(/tmp/discord-network-fix.sh)",
"Bash(yay -Qs:*)",
"Bash(paru -Qs:*)",
"Bash(sudo wg show:*)",
"Bash(nmcli device:*)",
"Bash(ip -6 rule:*)",
"Bash(curl:*)",
"Bash(ssh-keygen:*)",
"Bash(ssh:*)",
"Bash(blender --version:*)",
"WebSearch",
"Bash(yay -S:*)",
"Bash(ethtool:*)",
"Bash(sudo find:*)",
"Bash(pactree:*)",
"Bash(xargs ls:*)",
"Bash(clawdbot doctor:*)",
"Bash(opencode --version:*)",
"Bash(npm install:*)",
"Bash(whereis:*)"
],
"deny": [],
"ask": []
},
"enableAllProjectMcpServers": true,
"enabledMcpjsonServers": []
}