add 000-configs/, dashboard, templates, .obsidian/, bin/, model-identity
This commit is contained in:
+6
-2
@@ -1,2 +1,6 @@
|
|||||||
# Add .obsidian to gitignore so personal config stays local
|
# Personal Obsidian workspace state (don't sync)
|
||||||
.obsidian/
|
.obsidian/workspace.json
|
||||||
|
.obsidian/workspace.json.bak
|
||||||
|
|
||||||
|
# Plugin cache/state (per-device)
|
||||||
|
.obsidian/plugins/*/data.json
|
||||||
|
|||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"daily-notes": true
|
||||||
|
}
|
||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"folder": "01-logs/daily",
|
||||||
|
"format": "YYYY-MM-DD",
|
||||||
|
"template": "tpl/daily.md",
|
||||||
|
"autorun": false,
|
||||||
|
"autorunOnlyIfToday": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
title: "000-configs"
|
||||||
|
status: "active"
|
||||||
|
folder: "000-configs"
|
||||||
|
tags: [config, index]
|
||||||
|
created: "2026-07-29"
|
||||||
|
updated: "2026-07-29"
|
||||||
|
version: "1.0.0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 000-configs
|
||||||
|
|
||||||
|
Server, model, and workspace configuration docs. Mirror of `/home/user/000-configs/`.
|
||||||
|
|
||||||
|
## Subfolders
|
||||||
|
|
||||||
|
| Folder | What's In It |
|
||||||
|
|---|---|
|
||||||
|
| [[prompts/]] | Reusable system prompts |
|
||||||
|
| [[tools/]] | CLI / API tool docs (gh, playwright, vite, etc.) |
|
||||||
|
| [[skills/]] | Skill definitions |
|
||||||
|
| [[modes/]] | Model mode presets (creative, research, code, etc.) — incl. `workplace-modes.md` |
|
||||||
|
| [[workspace/]] | Workspace layouts and setup |
|
||||||
|
| [[settings/]] | Open WebUI / server settings |
|
||||||
|
|
||||||
|
## Migration Note
|
||||||
|
|
||||||
|
These docs used to live at `/home/user/000-configs/`. They've been moved here so the vault is the single source of truth. The `/home/user/000-configs/` directory still exists but is now a mirror.
|
||||||
|
|
||||||
|
Sync: when adding a new tool doc, save it in the vault (`000-configs/tools/`) and symlink or copy to `/home/user/000-configs/` if needed.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Configs Archive
|
||||||
|
|
||||||
|
Old or deprecated configs. Don't delete — they explain why we moved off something.
|
||||||
|
|
||||||
|
## How to archive
|
||||||
|
|
||||||
|
Move the file here and set `status: "archive"` in its frontmatter.
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# Workplace Modes
|
||||||
|
|
||||||
|
Mode configs — defines what context/models/prompts apply in different scenarios.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
- `research-mode.md` — web searches, note-taking
|
||||||
|
- `coding-mode.md` — git commits, code review
|
||||||
|
- `debug-mode.md` — logs, traces, error hunting
|
||||||
|
- `admin-mode.md` — server config, deployment
|
||||||
|
|
||||||
|
## Format
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Mode Name
|
||||||
|
|
||||||
|
## Active when
|
||||||
|
- User says "let's research X"
|
||||||
|
- User mentions "build mode"
|
||||||
|
|
||||||
|
## Stack
|
||||||
|
- Prompt: `[[../prompts/research-prompt]]`
|
||||||
|
- Tools: `[[../tools/...]]`
|
||||||
|
- Skills: `[[../skills/...]]`
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
-
|
||||||
|
```
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Prompts
|
||||||
|
|
||||||
|
System prompts, agent prompts, model-specific prompts.
|
||||||
|
|
||||||
|
## Format
|
||||||
|
|
||||||
|
Each prompt file:
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "Prompt name"
|
||||||
|
status: "active" | "draft" | "archive"
|
||||||
|
tags: [prompt, <provider>, <use-case>]
|
||||||
|
created: YYYY-MM-DD
|
||||||
|
updated: YYYY-MM-DD
|
||||||
|
version: 1.0.0
|
||||||
|
provider: openwebui | claude | gpt | local
|
||||||
|
use_case: research | coding | ops | etc
|
||||||
|
---
|
||||||
|
|
||||||
|
# Prompt Name
|
||||||
|
|
||||||
|
[the actual prompt text]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
- `openwebui-system.md`
|
||||||
|
- `claude-code-agent.md`
|
||||||
|
- `gpt-researcher.md`
|
||||||
|
|
||||||
|
## Versioning
|
||||||
|
|
||||||
|
Bump `version` on every edit. Major = rewrite.
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Settings
|
||||||
|
|
||||||
|
Config file templates, environment variable docs, app settings.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
- `openwebui-env.md` — env vars for openwebui
|
||||||
|
- `obsidian-config.md` — vault config notes
|
||||||
|
- `git-config.md` — git config for this server
|
||||||
|
|
||||||
|
## Format
|
||||||
|
|
||||||
|
Each settings file:
|
||||||
|
- What the config controls
|
||||||
|
- Default values
|
||||||
|
- Current values on this server
|
||||||
|
- How to change
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Skills
|
||||||
|
|
||||||
|
Skill docs — how-tos for tasks models do often on this server.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
- `obsidian-vault-workflow.md`
|
||||||
|
- `git-commit-messages.md`
|
||||||
|
- `research-web-search.md`
|
||||||
|
- `obsidian-dataview-patterns.md`
|
||||||
|
|
||||||
|
## Format
|
||||||
|
|
||||||
|
Each skill:
|
||||||
|
- What it does
|
||||||
|
- When to use
|
||||||
|
- Step-by-step
|
||||||
|
- Gotchas / server-specific notes
|
||||||
@@ -0,0 +1,202 @@
|
|||||||
|
# GitHub CLI (gh) Instructions for Open WebUI Models
|
||||||
|
|
||||||
|
`gh` is the GitHub CLI — v2.96.0, fully installed and authenticated as **`stateofshit`**.
|
||||||
|
|
||||||
|
This document covers how any model on this server can use `gh` for repo management, issues, PRs, and everything GitHub-related.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh --help # full help
|
||||||
|
gh auth status # confirm you're logged in
|
||||||
|
gh repo list # list all repos
|
||||||
|
gh repo view <repo> # view a repo
|
||||||
|
gh issue list # list issues in current dir's repo
|
||||||
|
gh pr create # create a pull request
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Authentication Status
|
||||||
|
|
||||||
|
Already logged in as **`stateofshit`** with token scopes: `admin:public_key`, `gist`, `read:org`, `repo`.
|
||||||
|
|
||||||
|
To check:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh auth status
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected output:
|
||||||
|
```
|
||||||
|
✓ Logged in to github.com account stateofshit
|
||||||
|
✓ Git operations protocol: ssh
|
||||||
|
✓ Token scopes: 'admin:public_key', 'gist', 'read:org', 'repo'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Repo Management
|
||||||
|
|
||||||
|
### Create a new repo
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh repo create <owner>/<name> --private --description "what it is"
|
||||||
|
```
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
- `--private` or `--public`
|
||||||
|
- `--clone` — also clone it locally after creating
|
||||||
|
- `--push` — push local branch to remote
|
||||||
|
|
||||||
|
### List repos
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh repo list stateofshit --limit 50
|
||||||
|
```
|
||||||
|
|
||||||
|
### View a repo
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh repo view stateofshit/shit_in_a_vault
|
||||||
|
```
|
||||||
|
|
||||||
|
### Delete a repo
|
||||||
|
|
||||||
|
⚠️ **Irreversible.**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh repo delete stateofshit/shit_in_a_vault --yes
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Working With the Vault Repo
|
||||||
|
|
||||||
|
The vault lives at `/home/user/02-repos/shit_in_a_vault/`.
|
||||||
|
|
||||||
|
Before working with it, read the boot prompt:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /home/user/02-repos/shit_in_a_vault/04-models/model-boot.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Everyday flow
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/user/02-repos/shit_in_a_vault
|
||||||
|
|
||||||
|
# Check status
|
||||||
|
git status
|
||||||
|
|
||||||
|
# Stage and commit
|
||||||
|
git add -A
|
||||||
|
git commit -m "description of changes"
|
||||||
|
|
||||||
|
# Push
|
||||||
|
git push
|
||||||
|
```
|
||||||
|
|
||||||
|
No need to authenticate — `git` uses SSH which is already set up via `~/.ssh/config`.
|
||||||
|
|
||||||
|
### Pull latest
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/user/02-repos/shit_in_a_vault
|
||||||
|
git pull
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
|
||||||
|
### Create an issue
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh issue create --title "Bug: thing broken" --body "Details here"
|
||||||
|
```
|
||||||
|
|
||||||
|
### List issues
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh issue list
|
||||||
|
```
|
||||||
|
|
||||||
|
### View / close
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh issue view <number>
|
||||||
|
gh issue close <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
### Create a PR
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# From a feature branch
|
||||||
|
git checkout -b my-feature
|
||||||
|
# ... make changes, commit, push ...
|
||||||
|
gh pr create --title "Add feature" --body "What it does"
|
||||||
|
```
|
||||||
|
|
||||||
|
### List / view / merge
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh pr list
|
||||||
|
gh pr view <number>
|
||||||
|
gh pr merge <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gists
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create
|
||||||
|
gh gist create file.txt
|
||||||
|
|
||||||
|
# List
|
||||||
|
gh gist list
|
||||||
|
|
||||||
|
# View
|
||||||
|
gh gist view <gist-id>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Working With Other Repos
|
||||||
|
|
||||||
|
Models can work with any repo `stateofshit` has access to.
|
||||||
|
|
||||||
|
### Clone any accessible repo
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh repo clone stateofshit/webby /home/user/02-repos/webby
|
||||||
|
```
|
||||||
|
|
||||||
|
Already cloned repos are in `/home/user/02-repos/`:
|
||||||
|
- `webby` — `stateofshit/webby`
|
||||||
|
- `shit_in_a_vault` — `stateofshit/shit_in_a_vault`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
|
||||||
|
- `gh` binary: `/usr/bin/gh` (system-installed)
|
||||||
|
- Config: `~/.config/gh/hosts.yml`
|
||||||
|
- Token is stored in that config — **do not expose it in chat or in files**
|
||||||
|
- Git protocol: SSH (key at `~/.ssh/github_openwebui`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- **Never** paste the token or `~/.config/gh/hosts.yml` contents into chat output.
|
||||||
|
- **Never** run `gh auth logout` — it will break all future model access.
|
||||||
|
- Deleting a repo is permanent. Use `--yes` with extreme care.
|
||||||
|
- `gh` respects the current directory's git remote. Run it inside a repo to act on that repo.
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# Playwright Browser Instructions for Open WebUI Coding AI
|
||||||
|
|
||||||
|
Use Playwright when the user asks you to inspect, test, debug, screenshot, or interact with a real webpage or web app.
|
||||||
|
|
||||||
|
Playwright is available inside the Open WebUI terminal container.
|
||||||
|
|
||||||
|
## What Playwright Is For
|
||||||
|
|
||||||
|
Use Playwright for:
|
||||||
|
|
||||||
|
- checking whether a webpage actually renders
|
||||||
|
- taking screenshots of an app
|
||||||
|
- testing buttons, forms, menus, routing, and mobile layouts
|
||||||
|
- inspecting page text after JavaScript runs
|
||||||
|
- debugging frontend errors that do not show up with `curl`
|
||||||
|
- verifying `https://preview.boogerclub.com`
|
||||||
|
|
||||||
|
Do not use Playwright as a replacement for normal web search. Use it when browser rendering or interaction matters.
|
||||||
|
|
||||||
|
## Quick Commands
|
||||||
|
|
||||||
|
Take a screenshot:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx playwright screenshot --browser=chromium https://example.com /home/user/example.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Take a screenshot of the live Vite preview:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx playwright screenshot --browser=chromium https://preview.boogerclub.com /home/user/preview.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Open a mobile-sized screenshot:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx playwright screenshot --browser=chromium --viewport-size=390,844 https://preview.boogerclub.com /home/user/preview-mobile.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Generate a Playwright test scaffold in an app:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/user/projects/YOUR_APP
|
||||||
|
npm install -D @playwright/test
|
||||||
|
npx playwright install chromium
|
||||||
|
npx playwright test
|
||||||
|
```
|
||||||
|
|
||||||
|
## One-Off Page Inspection Script
|
||||||
|
|
||||||
|
For quick rendered-page inspection, create a temporary script like this:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { chromium } = require('playwright')
|
||||||
|
|
||||||
|
;(async () => {
|
||||||
|
const browser = await chromium.launch({ headless: true })
|
||||||
|
const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } })
|
||||||
|
await page.goto('https://preview.boogerclub.com', { waitUntil: 'networkidle' })
|
||||||
|
console.log(await page.title())
|
||||||
|
console.log((await page.locator('body').innerText()).slice(0, 2000))
|
||||||
|
await page.screenshot({ path: '/home/user/preview.png', fullPage: true })
|
||||||
|
await browser.close()
|
||||||
|
})()
|
||||||
|
```
|
||||||
|
|
||||||
|
Run it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node script-name.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## Current Verified State
|
||||||
|
|
||||||
|
Playwright Chromium has been installed and verified in this container.
|
||||||
|
|
||||||
|
Smoke test that passed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/user
|
||||||
|
npx playwright screenshot --browser=chromium https://example.com /home/user/playwright-smoke.png
|
||||||
|
```
|
||||||
|
|
||||||
|
If Playwright later says browser binaries are missing, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx playwright install chromium
|
||||||
|
```
|
||||||
|
|
||||||
|
If Chromium fails with missing shared libraries, run this from the host against the Open WebUI compose stack:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose exec -u root open-terminal sh -lc 'cd /home/user && npx playwright install-deps chromium'
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# Tools
|
||||||
|
|
||||||
|
Tool docs — CLI references, browser automation, frameworks, anything with a CLI or API.
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
`TOOL_NAME_INSTRUCTIONS.md` — matches the existing convention from `/home/user/000-configs/`.
|
||||||
|
|
||||||
|
## Current
|
||||||
|
|
||||||
|
- `GH_CLI_INSTRUCTIONS.md` — GitHub CLI
|
||||||
|
- `PLAYWRIGHT_BROWSER_INSTRUCTIONS.md` — browser automation
|
||||||
|
- `VITE_PREVIEW_INSTRUCTIONS.md` — Vite preview server
|
||||||
|
|
||||||
|
## Adding a new tool doc
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/user/02-repos/shit_in_a_vault/000-configs/tools
|
||||||
|
touch NEW_TOOL_INSTRUCTIONS.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Include:
|
||||||
|
- Install location
|
||||||
|
- Auth status
|
||||||
|
- Common commands
|
||||||
|
- Server-specific quirks
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
# Vite Preview Instructions for Open WebUI Coding AI
|
||||||
|
|
||||||
|
Use this when the user asks to make a Vite/React app live, visible, public, previewable, or available at the preview URL.
|
||||||
|
|
||||||
|
## Public Preview URL
|
||||||
|
|
||||||
|
The stable public preview URL is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://preview.boogerclub.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Caddy on the host already proxies this hostname to the `open-terminal` container on port `5173`:
|
||||||
|
|
||||||
|
```text
|
||||||
|
preview.boogerclub.com -> open-terminal:5173
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not change the Open WebUI URL. Open WebUI stays at:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://openwebui.boogerclub.com
|
||||||
|
```
|
||||||
|
|
||||||
|
## Where Apps Live
|
||||||
|
|
||||||
|
Inside the Open WebUI terminal container:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/home/user/projects
|
||||||
|
/home/user/repos
|
||||||
|
```
|
||||||
|
|
||||||
|
On the host these map to:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/home/ubuntu/openwebui/projects
|
||||||
|
/home/ubuntu/repos
|
||||||
|
```
|
||||||
|
|
||||||
|
## Start Command
|
||||||
|
|
||||||
|
For a Vite app, run this from the app directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev -- --host 0.0.0.0 --port 5173
|
||||||
|
```
|
||||||
|
|
||||||
|
Only one app can use the public preview slot at a time. If port `5173` is already in use, stop the old Vite dev server before starting the new one.
|
||||||
|
|
||||||
|
## Required Vite Host Allowlist
|
||||||
|
|
||||||
|
If the preview URL shows this error:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Blocked request. This host ("preview.boogerclub.com") is not allowed.
|
||||||
|
To allow this host, add "preview.boogerclub.com" to `server.allowedHosts` in vite.config.js.
|
||||||
|
```
|
||||||
|
|
||||||
|
Add this to `vite.config.ts` or `vite.config.js`:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import react from '@vitejs/plugin-react'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [react()],
|
||||||
|
server: {
|
||||||
|
allowedHosts: ['preview.boogerclub.com'],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
If the config already has a `server` block, add only:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
allowedHosts: ['preview.boogerclub.com']
|
||||||
|
```
|
||||||
|
|
||||||
|
Then restart Vite with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev -- --host 0.0.0.0 --port 5173
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
From inside the terminal container, verify Vite is running:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I http://127.0.0.1:5173
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected result:
|
||||||
|
|
||||||
|
```text
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
```
|
||||||
|
|
||||||
|
From the public internet, verify the live preview:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I https://preview.boogerclub.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected result:
|
||||||
|
|
||||||
|
```text
|
||||||
|
HTTP/2 200
|
||||||
|
via: 1.1 Caddy
|
||||||
|
```
|
||||||
|
|
||||||
|
Also confirm Open WebUI still works:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I https://openwebui.boogerclub.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected result:
|
||||||
|
|
||||||
|
```text
|
||||||
|
HTTP/2 200
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Fixes
|
||||||
|
|
||||||
|
- `502` from `https://preview.boogerclub.com`: Caddy is up, but no Vite server is listening on `open-terminal:5173`. Start the app with the standard command.
|
||||||
|
- `Blocked request... host is not allowed`: add `preview.boogerclub.com` to `server.allowedHosts` in the app's Vite config and restart Vite.
|
||||||
|
- App works at `127.0.0.1:5173` but not the public URL: check `allowedHosts`, then check DNS for `preview.boogerclub.com`.
|
||||||
|
- Open WebUI should not be moved to the preview URL. Keep it on `https://openwebui.boogerclub.com`.
|
||||||
|
|
||||||
|
## Current Known Working Example
|
||||||
|
|
||||||
|
The current working example app is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/home/user/projects/candlestick-dashboard
|
||||||
|
```
|
||||||
|
|
||||||
|
It is configured with:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
server: {
|
||||||
|
allowedHosts: ['preview.boogerclub.com'],
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
title: "Dashboard Query Block"
|
||||||
|
status: "active"
|
||||||
|
folder: "000-shit_admin"
|
||||||
|
tags: [dashboard, dataview, template]
|
||||||
|
created: "2026-07-29"
|
||||||
|
updated: "2026-07-29"
|
||||||
|
version: "1.0.0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Dataview Query Snippets
|
||||||
|
|
||||||
|
Reusable Dataview blocks. Paste into any note.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Active Tasks
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE priority, due, owner
|
||||||
|
FROM ""
|
||||||
|
WHERE contains(tags, "task") AND status = "active"
|
||||||
|
SORT priority ASC, due ASC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Today's Daily Note
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "01-logs/daily"
|
||||||
|
WHERE date = date(today)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Recent Edits
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM ""
|
||||||
|
WHERE status != "archive"
|
||||||
|
SORT updated DESC
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
## Recent Archives
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM ""
|
||||||
|
WHERE status = "archive"
|
||||||
|
SORT updated DESC
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
## Inbox Count
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "00-inbox"
|
||||||
|
WHERE status = "draft"
|
||||||
|
```
|
||||||
|
|
||||||
|
## All Handoffs
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE from, to, date
|
||||||
|
FROM "05-handoffs"
|
||||||
|
SORT updated DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Research by Tag
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "02-notes"
|
||||||
|
WHERE contains(tags, "research")
|
||||||
|
SORT updated DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tasks by Owner
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE priority, due, status
|
||||||
|
FROM ""
|
||||||
|
WHERE contains(tags, "task") AND owner = "stateofshit"
|
||||||
|
SORT priority ASC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tasks Due Soon
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE priority, due, status
|
||||||
|
FROM ""
|
||||||
|
WHERE contains(tags, "task") AND status = "active" AND due AND due <= date(today) + dur(7 days)
|
||||||
|
SORT due ASC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Overdue
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE priority, due, owner
|
||||||
|
FROM ""
|
||||||
|
WHERE contains(tags, "task") AND status = "active" AND due AND due < date(today)
|
||||||
|
SORT due ASC
|
||||||
|
```
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
---
|
||||||
|
title: "Dashboard"
|
||||||
|
status: "active"
|
||||||
|
folder: "000-shit_admin"
|
||||||
|
tags: [dashboard, home]
|
||||||
|
created: "2026-07-29"
|
||||||
|
updated: "2026-07-29"
|
||||||
|
version: "1.0.0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Dashboard
|
||||||
|
|
||||||
|
> Home for the vault. Dataview pulls live data from frontmatter.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Today
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "01-logs/daily"
|
||||||
|
WHERE file.day = date(today)
|
||||||
|
SORT file.day DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Inbox (untriaged)
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "00-inbox"
|
||||||
|
WHERE status = "draft"
|
||||||
|
SORT created DESC
|
||||||
|
LIMIT 20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Active Tasks
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE priority, due, owner
|
||||||
|
FROM ""
|
||||||
|
WHERE contains(tags, "task") AND status = "active"
|
||||||
|
SORT priority ASC, due ASC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Recent Logs
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "01-logs"
|
||||||
|
SORT updated DESC
|
||||||
|
LIMIT 5
|
||||||
|
```
|
||||||
|
|
||||||
|
## Open Handoffs
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "05-handoffs"
|
||||||
|
WHERE status = "active"
|
||||||
|
SORT updated DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
## Research WIP
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM "02-notes"
|
||||||
|
WHERE contains(tags, "wip") AND status != "archive"
|
||||||
|
SORT updated DESC
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
## Recently Archived
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
LIST
|
||||||
|
FROM ""
|
||||||
|
WHERE status = "archive"
|
||||||
|
SORT updated DESC
|
||||||
|
LIMIT 5
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Folders
|
||||||
|
|
||||||
|
- [[000-shit_admin/README|000-shit_admin]] — your zone
|
||||||
|
- [[00-inbox/README|00-inbox]]
|
||||||
|
- [[01-logs/README|01-logs]]
|
||||||
|
- [[02-notes/README|02-notes]]
|
||||||
|
- [[03-archive/README|03-archive]]
|
||||||
|
- [[04-models/README|04-models]]
|
||||||
|
- [[05-handoffs/README|05-handoffs]]
|
||||||
|
- [[files/README|files]]
|
||||||
|
- [[tpl/README|tpl]]
|
||||||
|
|
||||||
|
## Model Docs
|
||||||
|
|
||||||
|
- [[04-models/Vault-Rules]]
|
||||||
|
- [[04-models/model-boot]]
|
||||||
|
- [[04-models/model-memory]]
|
||||||
|
- [[04-models/model-identity]]
|
||||||
@@ -5,7 +5,8 @@ folder: "04-models"
|
|||||||
model_owner: "none"
|
model_owner: "none"
|
||||||
tags: [rules, model]
|
tags: [rules, model]
|
||||||
created: "2026-07-28"
|
created: "2026-07-28"
|
||||||
updated: "2026-07-28"
|
updated: "2026-07-29"
|
||||||
|
version: "1.1.0"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Vault Rules
|
# Vault Rules
|
||||||
@@ -24,11 +25,16 @@ folder: "04-models"
|
|||||||
tags: [tag1, tag2]
|
tags: [tag1, tag2]
|
||||||
created: "YYYY-MM-DD"
|
created: "YYYY-MM-DD"
|
||||||
updated: "YYYY-MM-DD"
|
updated: "YYYY-MM-DD"
|
||||||
|
version: "1.0.0"
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
|
|
||||||
`folder` must match the physical folder this file lives in.
|
`folder` must match the physical folder this file lives in.
|
||||||
`updated` gets bumped on every edit.
|
`updated` gets bumped on every edit.
|
||||||
|
`version` follows semver: `major.minor.patch`.
|
||||||
|
- `major` — rewrite, restructure
|
||||||
|
- `minor` — new section, new content
|
||||||
|
- `patch` — typo fix, small edit
|
||||||
|
|
||||||
## 2. Tags
|
## 2. Tags
|
||||||
|
|
||||||
@@ -54,6 +60,7 @@ draft -> active -> archive
|
|||||||
- Never delete a file. Move to `03-archive` and set `status: "archive"`.
|
- Never delete a file. Move to `03-archive` and set `status: "archive"`.
|
||||||
- `00-inbox` items should eventually move to `02-notes` or `04-models`.
|
- `00-inbox` items should eventually move to `02-notes` or `04-models`.
|
||||||
- `01-logs` stay forever (don't archive logs).
|
- `01-logs` stay forever (don't archive logs).
|
||||||
|
- `01-logs/daily/` is auto-managed by Obsidian Daily Notes plugin. Don't manually create files here.
|
||||||
|
|
||||||
## 4. Linking
|
## 4. Linking
|
||||||
|
|
||||||
@@ -65,8 +72,10 @@ draft -> active -> archive
|
|||||||
|
|
||||||
| Folder | What Goes There |
|
| Folder | What Goes There |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `000-admin_shit` | Admin notes, config. User folder — models read-only. |
|
| `000-shit_admin` | Your zone. Models read-only. |
|
||||||
|
| `000-configs` | Server/model config docs (mirror of /home/user/000-configs/) |
|
||||||
| `00-inbox` | Raw dumps, new ideas, unorganized stuff |
|
| `00-inbox` | Raw dumps, new ideas, unorganized stuff |
|
||||||
|
| `01-logs/daily` | Auto daily notes (Obsidian Daily Notes plugin) |
|
||||||
| `01-logs` | Session logs, daily notes, timestamps |
|
| `01-logs` | Session logs, daily notes, timestamps |
|
||||||
| `02-notes` | Research notes, findings, reference material |
|
| `02-notes` | Research notes, findings, reference material |
|
||||||
| `03-archive` | Done / superseded files |
|
| `03-archive` | Done / superseded files |
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
title: "Model Identity"
|
||||||
|
status: "active"
|
||||||
|
folder: "04-models"
|
||||||
|
tags: [model, identity]
|
||||||
|
created: "2026-07-29"
|
||||||
|
updated: "2026-07-29"
|
||||||
|
version: "1.0.0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Model Identity
|
||||||
|
|
||||||
|
Each model should fill this in on boot. Helps track who made what.
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
|---|---|
|
||||||
|
| Model name | _fill on boot_ |
|
||||||
|
| Provider | _fill on boot_ |
|
||||||
|
| Boot date | _fill on boot_ |
|
||||||
|
| Last active | _fill on boot_ |
|
||||||
|
|
||||||
|
## How To Use
|
||||||
|
|
||||||
|
When a model starts working in this vault, append an entry below:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Entries
|
||||||
|
|
||||||
|
### YYYY-MM-DD — <model-name>
|
||||||
|
- Provider:
|
||||||
|
- Capabilities:
|
||||||
|
- Notes:
|
||||||
|
```
|
||||||
|
|
||||||
|
## Entries
|
||||||
|
|
||||||
|
_(models append here)_
|
||||||
@@ -1,26 +1,61 @@
|
|||||||
|
---
|
||||||
|
title: "shit_in_a_vault"
|
||||||
|
status: "active"
|
||||||
|
folder: ""
|
||||||
|
tags: [readme, home]
|
||||||
|
created: "2026-07-28"
|
||||||
|
updated: "2026-07-29"
|
||||||
|
version: "1.1.0"
|
||||||
|
---
|
||||||
|
|
||||||
# shit_in_a_vault
|
# shit_in_a_vault
|
||||||
|
|
||||||
Obsidian vault for openwebui models + research.
|
Obsidian vault for openwebui models + research. Private repo.
|
||||||
|
|
||||||
## Folders
|
## Folders
|
||||||
|
|
||||||
| Folder | Purpose |
|
| Folder | Purpose |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `000-admin_shit/` | User admin — models read-only |
|
| [[000-shit_admin/]] | Your zone — models read-only |
|
||||||
| `00-inbox/` | Raw dumps, new stuff |
|
| [[000-configs/]] | Server/model config docs |
|
||||||
| `01-logs/` | Session logs |
|
| [[00-inbox/]] | Raw dumps, unprocessed |
|
||||||
| `02-notes/` | Research notes |
|
| [[01-logs/]] | Session logs |
|
||||||
| `03-archive/` | Dead/superseded |
|
| [[01-logs/daily/]] | Auto daily notes (Obsidian Daily Notes plugin) |
|
||||||
| `04-models/` | Rules, memory, boot prompt |
|
| [[02-notes/]] | Research notes + tasks |
|
||||||
| `05-handoffs/` | Model handoffs |
|
| [[03-archive/]] | Superseded |
|
||||||
| `files/` | Attachments |
|
| [[04-models/]] | Rules, memory, boot prompt, model identity |
|
||||||
| `tpl/` | Templates |
|
| [[05-handoffs/]] | Model-to-model handoffs |
|
||||||
|
| [[files/]] | Attachments |
|
||||||
|
| [[tpl/]] | Templates |
|
||||||
|
| [[bin/]] | Helper scripts |
|
||||||
|
|
||||||
## For Models
|
## For Models
|
||||||
|
|
||||||
Boot: read `04-models/model-boot.md`
|
Boot: read [[04-models/model-boot]]
|
||||||
Rules: read `04-models/Vault-Rules.md`
|
Rules: read [[04-models/Vault-Rules]]
|
||||||
|
Identity: append to [[04-models/model-identity]]
|
||||||
|
|
||||||
|
## For You (Obsidian PC)
|
||||||
|
|
||||||
|
**Required plugins:**
|
||||||
|
- Daily Notes (built-in, auto-enabled by `.obsidian/core-plugins.json`)
|
||||||
|
- Templates (built-in)
|
||||||
|
- Dataview (community)
|
||||||
|
- Templater (community)
|
||||||
|
|
||||||
|
**Daily note auto-create** — Daily Notes plugin uses:
|
||||||
|
- Folder: `01-logs/daily`
|
||||||
|
- Format: `YYYY-MM-DD`
|
||||||
|
- Template: `tpl/daily.md`
|
||||||
|
|
||||||
|
Already pre-configured in `.obsidian/daily-notes.json`.
|
||||||
|
|
||||||
|
## Dashboard
|
||||||
|
|
||||||
|
[[000-shit_admin/dashboard]] — Dataview-driven home screen.
|
||||||
|
|
||||||
## Git
|
## Git
|
||||||
|
|
||||||
`git@github.com:stateofshit/shit_in_a_vault.git`
|
- Remote: `git@github.com:stateofshit/shit_in_a_vault.git`
|
||||||
|
- Auth: SSH (`~/.ssh/github_openwebui`) + `gh` CLI
|
||||||
|
- Default branch: `master`
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
title: "bin"
|
||||||
|
status: "active"
|
||||||
|
folder: "bin"
|
||||||
|
tags: [scripts, index]
|
||||||
|
created: "2026-07-29"
|
||||||
|
updated: "2026-07-29"
|
||||||
|
version: "1.0.0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# bin
|
||||||
|
|
||||||
|
Helper shell scripts.
|
||||||
|
|
||||||
|
## Current
|
||||||
|
|
||||||
|
- [[daily.sh]] — auto-create today's daily note from `tpl/daily.md`. Run from cron on the main server, not from openwebui.
|
||||||
|
|
||||||
|
## Adding a script
|
||||||
|
|
||||||
|
- Filename: `snake_case.sh`
|
||||||
|
- Must be executable (`chmod +x`)
|
||||||
|
- Add to this README
|
||||||
Executable
+39
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# bin/daily.sh — auto-create today's daily note from template
|
||||||
|
# Cron: 0 6 * * * /home/user/02-repos/shit_in_a_vault/bin/daily.sh
|
||||||
|
|
||||||
|
VAULT="/home/user/02-repos/shit_in_a_vault"
|
||||||
|
TPL="$VAULT/tpl/daily.md"
|
||||||
|
DEST_DIR="$VAULT/01-logs/daily"
|
||||||
|
DEST="$DEST_DIR/$(date +%Y-%m-%d).md"
|
||||||
|
DATE_STR=$(date +%Y-%m-%d)
|
||||||
|
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
|
||||||
|
|
||||||
|
mkdir -p "$DEST_DIR"
|
||||||
|
|
||||||
|
if [ -f "$DEST" ]; then
|
||||||
|
echo "Daily note $DEST already exists, skipping."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$TPL" ]; then
|
||||||
|
echo "Template not found: $TPL" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Substitute {{date:YYYY-MM-DD}} and {{date:}} placeholders
|
||||||
|
sed -e "s|{{date:YYYY-MM-DD}}|$DATE_STR|g" \
|
||||||
|
-e "s|{{date:}}|$DATE_STR|g" \
|
||||||
|
-e "s|{{yesterday:YYYY-MM-DD}}|$YESTERDAY|g" \
|
||||||
|
"$TPL" > "$DEST"
|
||||||
|
|
||||||
|
echo "Created: $DEST"
|
||||||
|
|
||||||
|
# Commit and push
|
||||||
|
cd "$VAULT" || exit 1
|
||||||
|
git add "$DEST"
|
||||||
|
if git diff --cached --quiet; then
|
||||||
|
echo "Nothing to commit."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git commit -m "daily: $DATE_STR" && git push
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
title: "{{date:YYYY-MM-DD}}"
|
||||||
|
status: "active"
|
||||||
|
folder: "01-logs/daily"
|
||||||
|
tags: [log, daily]
|
||||||
|
created: "{{date:YYYY-MM-DD}}"
|
||||||
|
updated: "{{date:YYYY-MM-DD}}"
|
||||||
|
version: "1.0.0"
|
||||||
|
date: {{date:YYYY-MM-DD}}
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{date:YYYY-MM-DD}}
|
||||||
|
|
||||||
|
## Agenda
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Tasks Done
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Tasks Tomorrow
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- [[dashboard]]
|
||||||
|
- [[{{yesterday:YYYY-MM-DD}}]] (yesterday)
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Active: `[[05-handoffs/...]]`
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
title: "Handoff: {{from}} → {{to}}"
|
||||||
|
status: "active"
|
||||||
|
folder: "05-handoffs"
|
||||||
|
tags: [handoff]
|
||||||
|
created: "{{date:YYYY-MM-DD}}"
|
||||||
|
updated: "{{date:YYYY-MM-DD}}"
|
||||||
|
version: "1.0.0"
|
||||||
|
from: "{{from}}"
|
||||||
|
to: "{{to}}"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Handoff: {{from}} → {{to}}
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
`[[04-models/...]]`
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
- What was being worked on
|
||||||
|
- What got done
|
||||||
|
- What's left
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Files Touched
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
- [ ]
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
title: "Research: {{topic}}"
|
||||||
|
status: "draft"
|
||||||
|
folder: "02-notes"
|
||||||
|
tags: [research, wip]
|
||||||
|
created: "{{date:YYYY-MM-DD}}"
|
||||||
|
updated: "{{date:YYYY-MM-DD}}"
|
||||||
|
version: "1.0.0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Research: {{topic}}
|
||||||
|
|
||||||
|
## Question
|
||||||
|
|
||||||
|
> What are we trying to find out?
|
||||||
|
|
||||||
|
## Sources
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Findings
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- [[]]
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- [ ] Drafting
|
||||||
|
- [ ] Sources cited
|
||||||
|
- [ ] Findings written
|
||||||
|
- [ ] Reviewed
|
||||||
|
- [ ] Archived
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
title: "Task: {{title}}"
|
||||||
|
status: "active"
|
||||||
|
folder: "02-notes"
|
||||||
|
tags: [task, wip]
|
||||||
|
created: "{{date:YYYY-MM-DD}}"
|
||||||
|
updated: "{{date:YYYY-MM-DD}}"
|
||||||
|
version: "1.0.0"
|
||||||
|
priority: "med"
|
||||||
|
due: "{{date:YYYY-MM-DD}}"
|
||||||
|
owner: "stateofshit"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Task: {{title}}
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- [[]]
|
||||||
|
|
||||||
|
## Done When
|
||||||
|
|
||||||
|
- [ ]
|
||||||
Reference in New Issue
Block a user