From david-skills
Ingests text-based documents like certificates, contracts, or employment letters into a wiki's sources layer as structured markdown files and integrates facts into wiki pages.
npx claudepluginhub thedavidweng/skillsThis skill uses the workspace's default tool permissions.
Take a raw document (certificate, contract, income proof, employment letter) provided as text and systematically integrate it into the wiki as both a source document and structured wiki data.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
Take a raw document (certificate, contract, income proof, employment letter) provided as text and systematically integrate it into the wiki as both a source document and structured wiki data.
sources/ (not just referenced externally)vault-cross-reference)sources/docs/OCR-Only/ or discard)identity-ocr or obsidian-ocr-cleanup)read_file(path=...) using skill_viewsources/docs/readme.md to understand the Archive vs OCR-Only policyConsult sources/[category]/ structure. Common locations:
| Document Type | Location | Rationale |
|---|---|---|
| Identity documents (ID, passport, visa) | sources/identity/ | Already existing pattern |
| Employment/income certificates | sources/docs/Archive/ | High-value official docs, keep forever |
| Academic transcripts | sources/identity/ or sources/docs/Archive/ | Identity-adjacent |
| Contracts/agreements | sources/docs/Archive/ | Legal documents |
| Low-value OCR docs | sources/docs/OCR-Only/ | Searchable but not worth keeping |
Naming: [slug]-[descriptor].md e.g. zhang-san-income-cert.md
Create the source document with proper frontmatter:
---
layer: source
kind: document
created: YYYY-MM-DD # Date on document, not today
updated: YYYY-MM-DD # Today's date
source_type: manual # or 'ocr', 'import'
source_uri: "Document title - Person name"
tags: [category1, category2]
---
Body:
# Document Title
Full original text...
## Metadata
- **Person**: [[person-slug|Person Name]]
- **Organization**: [[org-slug|Org Name]]
- **Document type**: Type
- **Key fact**: Value (with units/dates)
- **Date issued**: YYYY-MM-DD
source_notes frontmatterAdd the new source path to the source_notes array (create if missing):
source_notes:
- "sources/previous/doc.md"
- "sources/docs/Archive/new-doc.md"
Add a new section (## Employment, ## Income, ## Education, etc.) after existing sections. Format:
## Section Name
Brief narrative sentence.
- **Field name**: Value with [[wikilinks]] (bold for fields)
- **Another field**: Value
- **Source**: Link to source document inline
Check for:
Run quick checks:
from hermes_tools import search_files
assert search_files(pattern="new-doc.md", path="sources/").get('total_count',0) > 0
assert search_files(pattern="new-doc.md", path="wiki/people/").get('total_count',0) == 0
Verify the person page renders cleanly with all wikilinks resolved.
sources/) is NOT the same as referencing (external path). Ingest when user provides document text and expects it archived in wiki.Archive/ for documents that must be provable/re-checkable later. Use OCR-Only/ for low-value content where only the text matters.read_file with context first.YYYY-MM-DD for dates in metadata. Narrative dates can be Chinese YYYY年M月D日.