├── mcp-builder └── scripts │ ├── requirements.txt │ └── example_evaluation.xml ├── document-skills ├── docx │ ├── scripts │ │ ├── __init__.py │ │ └── templates │ │ │ ├── people.xml │ │ │ ├── comments.xml │ │ │ ├── commentsExtended.xml │ │ │ ├── commentsIds.xml │ │ │ └── commentsExtensible.xml │ ├── ooxml │ │ ├── scripts │ │ │ ├── validation │ │ │ │ └── __init__.py │ │ │ ├── unpack.py │ │ │ └── validate.py │ │ └── schemas │ │ │ ├── ISO-IEC29500-4_2016 │ │ │ ├── vml-presentationDrawing.xsd │ │ │ ├── dml-lockedCanvas.xsd │ │ │ ├── shared-customXmlSchemaProperties.xsd │ │ │ ├── dml-picture.xsd │ │ │ ├── shared-customXmlDataProperties.xsd │ │ │ ├── shared-additionalCharacteristics.xsd │ │ │ ├── shared-relationshipReference.xsd │ │ │ ├── shared-documentPropertiesCustom.xsd │ │ │ ├── shared-documentPropertiesExtended.xsd │ │ │ └── vml-wordprocessingDrawing.xsd │ │ │ ├── microsoft │ │ │ ├── wml-sdtdatahash-2020.xsd │ │ │ ├── wml-symex-2015.xsd │ │ │ ├── wml-2018.xsd │ │ │ ├── wml-cid-2016.xsd │ │ │ ├── wml-cex-2018.xsd │ │ │ └── wml-2012.xsd │ │ │ ├── ecma │ │ │ └── fouth-edition │ │ │ │ ├── opc-relationships.xsd │ │ │ │ ├── opc-contentTypes.xsd │ │ │ │ ├── opc-coreProperties.xsd │ │ │ │ └── opc-digSig.xsd │ │ │ └── mce │ │ │ └── mc.xsd │ └── LICENSE.txt ├── pptx │ ├── ooxml │ │ ├── scripts │ │ │ ├── validation │ │ │ │ └── __init__.py │ │ │ ├── unpack.py │ │ │ └── validate.py │ │ └── schemas │ │ │ ├── ISO-IEC29500-4_2016 │ │ │ ├── vml-presentationDrawing.xsd │ │ │ ├── dml-lockedCanvas.xsd │ │ │ ├── shared-customXmlSchemaProperties.xsd │ │ │ ├── dml-picture.xsd │ │ │ ├── shared-customXmlDataProperties.xsd │ │ │ ├── shared-additionalCharacteristics.xsd │ │ │ ├── shared-relationshipReference.xsd │ │ │ ├── shared-documentPropertiesCustom.xsd │ │ │ ├── shared-documentPropertiesExtended.xsd │ │ │ └── vml-wordprocessingDrawing.xsd │ │ │ ├── microsoft │ │ │ ├── wml-sdtdatahash-2020.xsd │ │ │ ├── wml-symex-2015.xsd │ │ │ ├── wml-2018.xsd │ │ │ ├── wml-cid-2016.xsd │ │ │ ├── wml-cex-2018.xsd │ │ │ └── wml-2012.xsd │ │ │ ├── ecma │ │ │ └── fouth-edition │ │ │ │ ├── opc-relationships.xsd │ │ │ │ ├── opc-contentTypes.xsd │ │ │ │ ├── opc-coreProperties.xsd │ │ │ │ └── opc-digSig.xsd │ │ │ └── mce │ │ │ └── mc.xsd │ └── LICENSE.txt ├── pdf │ ├── scripts │ │ ├── check_fillable_fields.py │ │ ├── convert_pdf_to_images.py │ │ ├── create_validation_image.py │ │ ├── check_bounding_boxes.py │ │ └── fill_pdf_form_with_annotations.py │ └── LICENSE.txt └── xlsx │ └── LICENSE.txt ├── slack-gif-creator ├── requirements.txt └── templates │ ├── bounce.py │ └── shake.py ├── theme-factory ├── theme-showcase.pdf ├── themes │ ├── desert-rose.md │ ├── forest-canopy.md │ ├── midnight-galaxy.md │ ├── botanical-garden.md │ ├── golden-hour.md │ ├── arctic-frost.md │ ├── tech-innovation.md │ ├── modern-minimalist.md │ ├── ocean-depths.md │ └── sunset-boulevard.md └── SKILL.md ├── canvas-design └── canvas-fonts │ ├── Jura-Light.ttf │ ├── Jura-Medium.ttf │ ├── Lora-Bold.ttf │ ├── Lora-Italic.ttf │ ├── Outfit-Bold.ttf │ ├── Lora-Regular.ttf │ ├── Tektur-Medium.ttf │ ├── WorkSans-Bold.ttf │ ├── Boldonse-Regular.ttf │ ├── CrimsonPro-Bold.ttf │ ├── DMMono-Regular.ttf │ ├── EricaOne-Regular.ttf │ ├── GeistMono-Bold.ttf │ ├── Gloock-Regular.ttf │ ├── IBMPlexMono-Bold.ttf │ ├── Italiana-Regular.ttf │ ├── Lora-BoldItalic.ttf │ ├── Outfit-Regular.ttf │ ├── RedHatMono-Bold.ttf │ ├── Tektur-Regular.ttf │ ├── WorkSans-Italic.ttf │ ├── WorkSans-Regular.ttf │ ├── ArsenalSC-Regular.ttf │ ├── BigShoulders-Bold.ttf │ ├── CrimsonPro-Italic.ttf │ ├── CrimsonPro-Regular.ttf │ ├── GeistMono-Regular.ttf │ ├── IBMPlexSerif-Bold.ttf │ ├── JetBrainsMono-Bold.ttf │ ├── NationalPark-Bold.ttf │ ├── PoiretOne-Regular.ttf │ ├── RedHatMono-Regular.ttf │ ├── Silkscreen-Regular.ttf │ ├── SmoochSans-Medium.ttf │ ├── YoungSerif-Regular.ttf │ ├── BigShoulders-Regular.ttf │ ├── IBMPlexMono-Regular.ttf │ ├── IBMPlexSerif-Italic.ttf │ ├── IBMPlexSerif-Regular.ttf │ ├── InstrumentSans-Bold.ttf │ ├── InstrumentSans-Italic.ttf │ ├── JetBrainsMono-Regular.ttf │ ├── NationalPark-Regular.ttf │ ├── PixelifySans-Medium.ttf │ ├── WorkSans-BoldItalic.ttf │ ├── BricolageGrotesque-Bold.ttf │ ├── IBMPlexSerif-BoldItalic.ttf │ ├── InstrumentSans-Regular.ttf │ ├── InstrumentSerif-Italic.ttf │ ├── InstrumentSerif-Regular.ttf │ ├── BricolageGrotesque-Regular.ttf │ ├── InstrumentSans-BoldItalic.ttf │ ├── LibreBaskerville-Regular.ttf │ ├── NothingYouCouldDo-Regular.ttf │ ├── IBMPlexMono-OFL.txt │ └── PoiretOne-OFL.txt ├── artifacts-builder ├── scripts │ ├── shadcn-components.tar.gz │ └── bundle-artifact.sh └── SKILL.md ├── template-skill └── SKILL.md ├── internal-comms ├── examples │ ├── general-comms.md │ ├── faq-answers.md │ ├── 3p-updates.md │ └── company-newsletter.md └── SKILL.md ├── webapp-testing ├── examples │ ├── static_html_automation.py │ ├── console_logging.py │ └── element_discovery.py ├── SKILL.md └── scripts │ └── with_server.py ├── skill-creator └── scripts │ ├── quick_validate.py │ └── package_skill.py ├── brand-guidelines └── SKILL.md ├── image-enhancer └── SKILL.md ├── video-downloader └── SKILL.md ├── skill-share └── SKILL.md ├── changelog-generator └── SKILL.md └── raffle-winner-picker └── SKILL.md /mcp-builder/scripts/requirements.txt: -------------------------------------------------------------------------------- 1 | anthropic>=0.39.0 2 | mcp>=1.1.0 3 | -------------------------------------------------------------------------------- /document-skills/docx/scripts/__init__.py: -------------------------------------------------------------------------------- 1 | # Make scripts directory a package for relative imports in tests 2 | -------------------------------------------------------------------------------- /slack-gif-creator/requirements.txt: -------------------------------------------------------------------------------- 1 | pillow>=10.0.0 2 | imageio>=2.31.0 3 | imageio-ffmpeg>=0.4.9 4 | numpy>=1.24.0 -------------------------------------------------------------------------------- /theme-factory/theme-showcase.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/theme-factory/theme-showcase.pdf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Jura-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Jura-Light.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Jura-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Jura-Medium.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Lora-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Lora-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Lora-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Lora-Italic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Outfit-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Outfit-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Lora-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Lora-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Tektur-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Tektur-Medium.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/WorkSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/WorkSans-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Boldonse-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Boldonse-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/CrimsonPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/DMMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/DMMono-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/EricaOne-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/EricaOne-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/GeistMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/GeistMono-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Gloock-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Gloock-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Italiana-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Italiana-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Lora-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Lora-BoldItalic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Outfit-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Outfit-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/RedHatMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/RedHatMono-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Tektur-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Tektur-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/WorkSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/WorkSans-Italic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/WorkSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/WorkSans-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/ArsenalSC-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/BigShoulders-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/BigShoulders-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/CrimsonPro-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/CrimsonPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/GeistMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/GeistMono-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/NationalPark-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/NationalPark-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/PoiretOne-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/PoiretOne-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/RedHatMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/RedHatMono-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/Silkscreen-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/Silkscreen-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/SmoochSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/SmoochSans-Medium.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/YoungSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/YoungSerif-Regular.ttf -------------------------------------------------------------------------------- /artifacts-builder/scripts/shadcn-components.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/artifacts-builder/scripts/shadcn-components.tar.gz -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/BigShoulders-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/BigShoulders-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/InstrumentSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/InstrumentSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/NationalPark-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/NationalPark-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/PixelifySans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/PixelifySans-Medium.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/InstrumentSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/awesome-claude-skills/master/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf -------------------------------------------------------------------------------- /template-skill/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: template-skill 3 | description: Replace with description of the skill and when Claude should use it. 4 | --- 5 | 6 | # Insert instructions below 7 | -------------------------------------------------------------------------------- /document-skills/docx/scripts/templates/people.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/scripts/validation/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Validation modules for Word document processing. 3 | """ 4 | 5 | from .base import BaseSchemaValidator 6 | from .docx import DOCXSchemaValidator 7 | from .pptx import PPTXSchemaValidator 8 | from .redlining import RedliningValidator 9 | 10 | __all__ = [ 11 | "BaseSchemaValidator", 12 | "DOCXSchemaValidator", 13 | "PPTXSchemaValidator", 14 | "RedliningValidator", 15 | ] 16 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/scripts/validation/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Validation modules for Word document processing. 3 | """ 4 | 5 | from .base import BaseSchemaValidator 6 | from .docx import DOCXSchemaValidator 7 | from .pptx import PPTXSchemaValidator 8 | from .redlining import RedliningValidator 9 | 10 | __all__ = [ 11 | "BaseSchemaValidator", 12 | "DOCXSchemaValidator", 13 | "PPTXSchemaValidator", 14 | "RedliningValidator", 15 | ] 16 | -------------------------------------------------------------------------------- /document-skills/pdf/scripts/check_fillable_fields.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from pypdf import PdfReader 3 | 4 | 5 | # Script for Claude to run to determine whether a PDF has fillable form fields. See forms.md. 6 | 7 | 8 | reader = PdfReader(sys.argv[1]) 9 | if (reader.get_fields()): 10 | print("This PDF has fillable form fields") 11 | else: 12 | print("This PDF does not have fillable form fields; you will need to visually determine where to enter data") 13 | -------------------------------------------------------------------------------- /theme-factory/themes/desert-rose.md: -------------------------------------------------------------------------------- 1 | # Desert Rose 2 | 3 | A soft and sophisticated theme with dusty, muted tones perfect for elegant presentations. 4 | 5 | ## Color Palette 6 | 7 | - **Dusty Rose**: `#d4a5a5` - Soft primary color 8 | - **Clay**: `#b87d6d` - Earthy accent 9 | - **Sand**: `#e8d5c4` - Warm neutral backgrounds 10 | - **Deep Burgundy**: `#5d2e46` - Rich dark contrast 11 | 12 | ## Typography 13 | 14 | - **Headers**: FreeSans Bold 15 | - **Body Text**: FreeSans 16 | 17 | ## Best Used For 18 | 19 | Fashion presentations, beauty brands, wedding planning, interior design, boutique businesses. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/forest-canopy.md: -------------------------------------------------------------------------------- 1 | # Forest Canopy 2 | 3 | A natural and grounded theme featuring earth tones inspired by dense forest environments. 4 | 5 | ## Color Palette 6 | 7 | - **Forest Green**: `#2d4a2b` - Primary dark green 8 | - **Sage**: `#7d8471` - Muted green accent 9 | - **Olive**: `#a4ac86` - Light accent color 10 | - **Ivory**: `#faf9f6` - Backgrounds and text 11 | 12 | ## Typography 13 | 14 | - **Headers**: FreeSerif Bold 15 | - **Body Text**: FreeSans 16 | 17 | ## Best Used For 18 | 19 | Environmental presentations, sustainability reports, outdoor brands, wellness content, organic products. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/midnight-galaxy.md: -------------------------------------------------------------------------------- 1 | # Midnight Galaxy 2 | 3 | A dramatic and cosmic theme with deep purples and mystical tones for impactful presentations. 4 | 5 | ## Color Palette 6 | 7 | - **Deep Purple**: `#2b1e3e` - Rich dark base 8 | - **Cosmic Blue**: `#4a4e8f` - Mystical mid-tone 9 | - **Lavender**: `#a490c2` - Soft accent color 10 | - **Silver**: `#e6e6fa` - Light highlights and text 11 | 12 | ## Typography 13 | 14 | - **Headers**: FreeSans Bold 15 | - **Body Text**: FreeSans 16 | 17 | ## Best Used For 18 | 19 | Entertainment industry, gaming presentations, nightlife venues, luxury brands, creative agencies. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/botanical-garden.md: -------------------------------------------------------------------------------- 1 | # Botanical Garden 2 | 3 | A fresh and organic theme featuring vibrant garden-inspired colors for lively presentations. 4 | 5 | ## Color Palette 6 | 7 | - **Fern Green**: `#4a7c59` - Rich natural green 8 | - **Marigold**: `#f9a620` - Bright floral accent 9 | - **Terracotta**: `#b7472a` - Earthy warm tone 10 | - **Cream**: `#f5f3ed` - Soft neutral backgrounds 11 | 12 | ## Typography 13 | 14 | - **Headers**: DejaVu Serif Bold 15 | - **Body Text**: DejaVu Sans 16 | 17 | ## Best Used For 18 | 19 | Garden centers, food presentations, farm-to-table content, botanical brands, natural products. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/golden-hour.md: -------------------------------------------------------------------------------- 1 | # Golden Hour 2 | 3 | A rich and warm autumnal palette that creates an inviting and sophisticated atmosphere. 4 | 5 | ## Color Palette 6 | 7 | - **Mustard Yellow**: `#f4a900` - Bold primary accent 8 | - **Terracotta**: `#c1666b` - Warm secondary color 9 | - **Warm Beige**: `#d4b896` - Neutral backgrounds 10 | - **Chocolate Brown**: `#4a403a` - Dark text and anchors 11 | 12 | ## Typography 13 | 14 | - **Headers**: FreeSans Bold 15 | - **Body Text**: FreeSans 16 | 17 | ## Best Used For 18 | 19 | Restaurant presentations, hospitality brands, fall campaigns, cozy lifestyle content, artisan products. 20 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /theme-factory/themes/arctic-frost.md: -------------------------------------------------------------------------------- 1 | # Arctic Frost 2 | 3 | A cool and crisp winter-inspired theme that conveys clarity, precision, and professionalism. 4 | 5 | ## Color Palette 6 | 7 | - **Ice Blue**: `#d4e4f7` - Light backgrounds and highlights 8 | - **Steel Blue**: `#4a6fa5` - Primary accent color 9 | - **Silver**: `#c0c0c0` - Metallic accent elements 10 | - **Crisp White**: `#fafafa` - Clean backgrounds and text 11 | 12 | ## Typography 13 | 14 | - **Headers**: DejaVu Sans Bold 15 | - **Body Text**: DejaVu Sans 16 | 17 | ## Best Used For 18 | 19 | Healthcare presentations, technology solutions, winter sports, clean tech, pharmaceutical content. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/tech-innovation.md: -------------------------------------------------------------------------------- 1 | # Tech Innovation 2 | 3 | A bold and modern theme with high-contrast colors perfect for cutting-edge technology presentations. 4 | 5 | ## Color Palette 6 | 7 | - **Electric Blue**: `#0066ff` - Vibrant primary accent 8 | - **Neon Cyan**: `#00ffff` - Bright highlight color 9 | - **Dark Gray**: `#1e1e1e` - Deep backgrounds 10 | - **White**: `#ffffff` - Clean text and contrast 11 | 12 | ## Typography 13 | 14 | - **Headers**: DejaVu Sans Bold 15 | - **Body Text**: DejaVu Sans 16 | 17 | ## Best Used For 18 | 19 | Tech startups, software launches, innovation showcases, AI/ML presentations, digital transformation content. 20 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /theme-factory/themes/modern-minimalist.md: -------------------------------------------------------------------------------- 1 | # Modern Minimalist 2 | 3 | A clean and contemporary theme with a sophisticated grayscale palette for maximum versatility. 4 | 5 | ## Color Palette 6 | 7 | - **Charcoal**: `#36454f` - Primary dark color 8 | - **Slate Gray**: `#708090` - Medium gray for accents 9 | - **Light Gray**: `#d3d3d3` - Backgrounds and dividers 10 | - **White**: `#ffffff` - Text and clean backgrounds 11 | 12 | ## Typography 13 | 14 | - **Headers**: DejaVu Sans Bold 15 | - **Body Text**: DejaVu Sans 16 | 17 | ## Best Used For 18 | 19 | Tech presentations, architecture portfolios, design showcases, modern business proposals, data visualization. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/ocean-depths.md: -------------------------------------------------------------------------------- 1 | # Ocean Depths 2 | 3 | A professional and calming maritime theme that evokes the serenity of deep ocean waters. 4 | 5 | ## Color Palette 6 | 7 | - **Deep Navy**: `#1a2332` - Primary background color 8 | - **Teal**: `#2d8b8b` - Accent color for highlights and emphasis 9 | - **Seafoam**: `#a8dadc` - Secondary accent for lighter elements 10 | - **Cream**: `#f1faee` - Text and light backgrounds 11 | 12 | ## Typography 13 | 14 | - **Headers**: DejaVu Sans Bold 15 | - **Body Text**: DejaVu Sans 16 | 17 | ## Best Used For 18 | 19 | Corporate presentations, financial reports, professional consulting decks, trust-building content. 20 | -------------------------------------------------------------------------------- /theme-factory/themes/sunset-boulevard.md: -------------------------------------------------------------------------------- 1 | # Sunset Boulevard 2 | 3 | A warm and vibrant theme inspired by golden hour sunsets, perfect for energetic and creative presentations. 4 | 5 | ## Color Palette 6 | 7 | - **Burnt Orange**: `#e76f51` - Primary accent color 8 | - **Coral**: `#f4a261` - Secondary warm accent 9 | - **Warm Sand**: `#e9c46a` - Highlighting and backgrounds 10 | - **Deep Purple**: `#264653` - Dark contrast and text 11 | 12 | ## Typography 13 | 14 | - **Headers**: DejaVu Serif Bold 15 | - **Body Text**: DejaVu Sans 16 | 17 | ## Best Used For 18 | 19 | Creative pitches, marketing presentations, lifestyle brands, event promotions, inspirational content. 20 | -------------------------------------------------------------------------------- /internal-comms/examples/general-comms.md: -------------------------------------------------------------------------------- 1 | ## Instructions 2 | You are being asked to write internal company communication that doesn't fit into the standard formats (3P 3 | updates, newsletters, or FAQs). 4 | 5 | Before proceeding: 6 | 1. Ask the user about their target audience 7 | 2. Understand the communication's purpose 8 | 3. Clarify the desired tone (formal, casual, urgent, informational) 9 | 4. Confirm any specific formatting requirements 10 | 11 | Use these general principles: 12 | - Be clear and concise 13 | - Use active voice 14 | - Put the most important information first 15 | - Include relevant links and references 16 | - Match the company's communication style -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/microsoft/wml-2018.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /webapp-testing/examples/static_html_automation.py: -------------------------------------------------------------------------------- 1 | from playwright.sync_api import sync_playwright 2 | import os 3 | 4 | # Example: Automating interaction with static HTML files using file:// URLs 5 | 6 | html_file_path = os.path.abspath('path/to/your/file.html') 7 | file_url = f'file://{html_file_path}' 8 | 9 | with sync_playwright() as p: 10 | browser = p.chromium.launch(headless=True) 11 | page = browser.new_page(viewport={'width': 1920, 'height': 1080}) 12 | 13 | # Navigate to local HTML file 14 | page.goto(file_url) 15 | 16 | # Take screenshot 17 | page.screenshot(path='/mnt/user-data/outputs/static_page.png', full_page=True) 18 | 19 | # Interact with elements 20 | page.click('text=Click Me') 21 | page.fill('#name', 'John Doe') 22 | page.fill('#email', 'john@example.com') 23 | 24 | # Submit form 25 | page.click('button[type="submit"]') 26 | page.wait_for_timeout(500) 27 | 28 | # Take final screenshot 29 | page.screenshot(path='/mnt/user-data/outputs/after_submit.png', full_page=True) 30 | 31 | browser.close() 32 | 33 | print("Static HTML automation completed!") -------------------------------------------------------------------------------- /document-skills/docx/ooxml/scripts/unpack.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """Unpack and format XML contents of Office files (.docx, .pptx, .xlsx)""" 3 | 4 | import random 5 | import sys 6 | import defusedxml.minidom 7 | import zipfile 8 | from pathlib import Path 9 | 10 | # Get command line arguments 11 | assert len(sys.argv) == 3, "Usage: python unpack.py " 12 | input_file, output_dir = sys.argv[1], sys.argv[2] 13 | 14 | # Extract and format 15 | output_path = Path(output_dir) 16 | output_path.mkdir(parents=True, exist_ok=True) 17 | zipfile.ZipFile(input_file).extractall(output_path) 18 | 19 | # Pretty print all XML files 20 | xml_files = list(output_path.rglob("*.xml")) + list(output_path.rglob("*.rels")) 21 | for xml_file in xml_files: 22 | content = xml_file.read_text(encoding="utf-8") 23 | dom = defusedxml.minidom.parseString(content) 24 | xml_file.write_bytes(dom.toprettyxml(indent=" ", encoding="ascii")) 25 | 26 | # For .docx files, suggest an RSID for tracked changes 27 | if input_file.endswith(".docx"): 28 | suggested_rsid = "".join(random.choices("0123456789ABCDEF", k=8)) 29 | print(f"Suggested RSID for edit session: {suggested_rsid}") 30 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/scripts/unpack.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """Unpack and format XML contents of Office files (.docx, .pptx, .xlsx)""" 3 | 4 | import random 5 | import sys 6 | import defusedxml.minidom 7 | import zipfile 8 | from pathlib import Path 9 | 10 | # Get command line arguments 11 | assert len(sys.argv) == 3, "Usage: python unpack.py " 12 | input_file, output_dir = sys.argv[1], sys.argv[2] 13 | 14 | # Extract and format 15 | output_path = Path(output_dir) 16 | output_path.mkdir(parents=True, exist_ok=True) 17 | zipfile.ZipFile(input_file).extractall(output_path) 18 | 19 | # Pretty print all XML files 20 | xml_files = list(output_path.rglob("*.xml")) + list(output_path.rglob("*.rels")) 21 | for xml_file in xml_files: 22 | content = xml_file.read_text(encoding="utf-8") 23 | dom = defusedxml.minidom.parseString(content) 24 | xml_file.write_bytes(dom.toprettyxml(indent=" ", encoding="ascii")) 25 | 26 | # For .docx files, suggest an RSID for tracked changes 27 | if input_file.endswith(".docx"): 28 | suggested_rsid = "".join(random.choices("0123456789ABCDEF", k=8)) 29 | print(f"Suggested RSID for edit session: {suggested_rsid}") 30 | -------------------------------------------------------------------------------- /webapp-testing/examples/console_logging.py: -------------------------------------------------------------------------------- 1 | from playwright.sync_api import sync_playwright 2 | 3 | # Example: Capturing console logs during browser automation 4 | 5 | url = 'http://localhost:5173' # Replace with your URL 6 | 7 | console_logs = [] 8 | 9 | with sync_playwright() as p: 10 | browser = p.chromium.launch(headless=True) 11 | page = browser.new_page(viewport={'width': 1920, 'height': 1080}) 12 | 13 | # Set up console log capture 14 | def handle_console_message(msg): 15 | console_logs.append(f"[{msg.type}] {msg.text}") 16 | print(f"Console: [{msg.type}] {msg.text}") 17 | 18 | page.on("console", handle_console_message) 19 | 20 | # Navigate to page 21 | page.goto(url) 22 | page.wait_for_load_state('networkidle') 23 | 24 | # Interact with the page (triggers console logs) 25 | page.click('text=Dashboard') 26 | page.wait_for_timeout(1000) 27 | 28 | browser.close() 29 | 30 | # Save console logs to file 31 | with open('/mnt/user-data/outputs/console.log', 'w') as f: 32 | f.write('\n'.join(console_logs)) 33 | 34 | print(f"\nCaptured {len(console_logs)} console messages") 35 | print(f"Logs saved to: /mnt/user-data/outputs/console.log") -------------------------------------------------------------------------------- /mcp-builder/scripts/example_evaluation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Calculate the compound interest on $10,000 invested at 5% annual interest rate, compounded monthly for 3 years. What is the final amount in dollars (rounded to 2 decimal places)? 4 | 11614.72 5 | 6 | 7 | A projectile is launched at a 45-degree angle with an initial velocity of 50 m/s. Calculate the total distance (in meters) it has traveled from the launch point after 2 seconds, assuming g=9.8 m/s². Round to 2 decimal places. 8 | 87.25 9 | 10 | 11 | A sphere has a volume of 500 cubic meters. Calculate its surface area in square meters. Round to 2 decimal places. 12 | 304.65 13 | 14 | 15 | Calculate the population standard deviation of this dataset: [12, 15, 18, 22, 25, 30, 35]. Round to 2 decimal places. 16 | 7.61 17 | 18 | 19 | Calculate the pH of a solution with a hydrogen ion concentration of 3.5 × 10^-5 M. Round to 2 decimal places. 20 | 4.46 21 | 22 | 23 | -------------------------------------------------------------------------------- /document-skills/pdf/scripts/convert_pdf_to_images.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | from pdf2image import convert_from_path 5 | 6 | 7 | # Converts each page of a PDF to a PNG image. 8 | 9 | 10 | def convert(pdf_path, output_dir, max_dim=1000): 11 | images = convert_from_path(pdf_path, dpi=200) 12 | 13 | for i, image in enumerate(images): 14 | # Scale image if needed to keep width/height under `max_dim` 15 | width, height = image.size 16 | if width > max_dim or height > max_dim: 17 | scale_factor = min(max_dim / width, max_dim / height) 18 | new_width = int(width * scale_factor) 19 | new_height = int(height * scale_factor) 20 | image = image.resize((new_width, new_height)) 21 | 22 | image_path = os.path.join(output_dir, f"page_{i+1}.png") 23 | image.save(image_path) 24 | print(f"Saved page {i+1} as {image_path} (size: {image.size})") 25 | 26 | print(f"Converted {len(images)} pages to PNG images") 27 | 28 | 29 | if __name__ == "__main__": 30 | if len(sys.argv) != 3: 31 | print("Usage: convert_pdf_to_images.py [input pdf] [output directory]") 32 | sys.exit(1) 33 | pdf_path = sys.argv[1] 34 | output_directory = sys.argv[2] 35 | convert(pdf_path, output_directory) 36 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd: -------------------------------------------------------------------------------- 1 | 2 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd: -------------------------------------------------------------------------------- 1 | 2 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /document-skills/pdf/LICENSE.txt: -------------------------------------------------------------------------------- 1 | © 2025 Anthropic, PBC. All rights reserved. 2 | 3 | LICENSE: Use of these materials (including all code, prompts, assets, files, 4 | and other components of this Skill) is governed by your agreement with 5 | Anthropic regarding use of Anthropic's services. If no separate agreement 6 | exists, use is governed by Anthropic's Consumer Terms of Service or 7 | Commercial Terms of Service, as applicable: 8 | https://www.anthropic.com/legal/consumer-terms 9 | https://www.anthropic.com/legal/commercial-terms 10 | Your applicable agreement is referred to as the "Agreement." "Services" are 11 | as defined in the Agreement. 12 | 13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the 14 | contrary, users may not: 15 | 16 | - Extract these materials from the Services or retain copies of these 17 | materials outside the Services 18 | - Reproduce or copy these materials, except for temporary copies created 19 | automatically during authorized use of the Services 20 | - Create derivative works based on these materials 21 | - Distribute, sublicense, or transfer these materials to any third party 22 | - Make, offer to sell, sell, or import any inventions embodied in these 23 | materials 24 | - Reverse engineer, decompile, or disassemble these materials 25 | 26 | The receipt, viewing, or possession of these materials does not convey or 27 | imply any license or right beyond those expressly granted above. 28 | 29 | Anthropic retains all right, title, and interest in these materials, 30 | including all copyrights, patents, and other intellectual property rights. 31 | -------------------------------------------------------------------------------- /document-skills/docx/LICENSE.txt: -------------------------------------------------------------------------------- 1 | © 2025 Anthropic, PBC. All rights reserved. 2 | 3 | LICENSE: Use of these materials (including all code, prompts, assets, files, 4 | and other components of this Skill) is governed by your agreement with 5 | Anthropic regarding use of Anthropic's services. If no separate agreement 6 | exists, use is governed by Anthropic's Consumer Terms of Service or 7 | Commercial Terms of Service, as applicable: 8 | https://www.anthropic.com/legal/consumer-terms 9 | https://www.anthropic.com/legal/commercial-terms 10 | Your applicable agreement is referred to as the "Agreement." "Services" are 11 | as defined in the Agreement. 12 | 13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the 14 | contrary, users may not: 15 | 16 | - Extract these materials from the Services or retain copies of these 17 | materials outside the Services 18 | - Reproduce or copy these materials, except for temporary copies created 19 | automatically during authorized use of the Services 20 | - Create derivative works based on these materials 21 | - Distribute, sublicense, or transfer these materials to any third party 22 | - Make, offer to sell, sell, or import any inventions embodied in these 23 | materials 24 | - Reverse engineer, decompile, or disassemble these materials 25 | 26 | The receipt, viewing, or possession of these materials does not convey or 27 | imply any license or right beyond those expressly granted above. 28 | 29 | Anthropic retains all right, title, and interest in these materials, 30 | including all copyrights, patents, and other intellectual property rights. 31 | -------------------------------------------------------------------------------- /document-skills/pptx/LICENSE.txt: -------------------------------------------------------------------------------- 1 | © 2025 Anthropic, PBC. All rights reserved. 2 | 3 | LICENSE: Use of these materials (including all code, prompts, assets, files, 4 | and other components of this Skill) is governed by your agreement with 5 | Anthropic regarding use of Anthropic's services. If no separate agreement 6 | exists, use is governed by Anthropic's Consumer Terms of Service or 7 | Commercial Terms of Service, as applicable: 8 | https://www.anthropic.com/legal/consumer-terms 9 | https://www.anthropic.com/legal/commercial-terms 10 | Your applicable agreement is referred to as the "Agreement." "Services" are 11 | as defined in the Agreement. 12 | 13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the 14 | contrary, users may not: 15 | 16 | - Extract these materials from the Services or retain copies of these 17 | materials outside the Services 18 | - Reproduce or copy these materials, except for temporary copies created 19 | automatically during authorized use of the Services 20 | - Create derivative works based on these materials 21 | - Distribute, sublicense, or transfer these materials to any third party 22 | - Make, offer to sell, sell, or import any inventions embodied in these 23 | materials 24 | - Reverse engineer, decompile, or disassemble these materials 25 | 26 | The receipt, viewing, or possession of these materials does not convey or 27 | imply any license or right beyond those expressly granted above. 28 | 29 | Anthropic retains all right, title, and interest in these materials, 30 | including all copyrights, patents, and other intellectual property rights. 31 | -------------------------------------------------------------------------------- /document-skills/xlsx/LICENSE.txt: -------------------------------------------------------------------------------- 1 | © 2025 Anthropic, PBC. All rights reserved. 2 | 3 | LICENSE: Use of these materials (including all code, prompts, assets, files, 4 | and other components of this Skill) is governed by your agreement with 5 | Anthropic regarding use of Anthropic's services. If no separate agreement 6 | exists, use is governed by Anthropic's Consumer Terms of Service or 7 | Commercial Terms of Service, as applicable: 8 | https://www.anthropic.com/legal/consumer-terms 9 | https://www.anthropic.com/legal/commercial-terms 10 | Your applicable agreement is referred to as the "Agreement." "Services" are 11 | as defined in the Agreement. 12 | 13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the 14 | contrary, users may not: 15 | 16 | - Extract these materials from the Services or retain copies of these 17 | materials outside the Services 18 | - Reproduce or copy these materials, except for temporary copies created 19 | automatically during authorized use of the Services 20 | - Create derivative works based on these materials 21 | - Distribute, sublicense, or transfer these materials to any third party 22 | - Make, offer to sell, sell, or import any inventions embodied in these 23 | materials 24 | - Reverse engineer, decompile, or disassemble these materials 25 | 26 | The receipt, viewing, or possession of these materials does not convey or 27 | imply any license or right beyond those expressly granted above. 28 | 29 | Anthropic retains all right, title, and interest in these materials, 30 | including all copyrights, patents, and other intellectual property rights. 31 | -------------------------------------------------------------------------------- /internal-comms/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: internal-comms 3 | description: A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.). 4 | license: Complete terms in LICENSE.txt 5 | --- 6 | 7 | ## When to use this skill 8 | To write internal communications, use this skill for: 9 | - 3P updates (Progress, Plans, Problems) 10 | - Company newsletters 11 | - FAQ responses 12 | - Status reports 13 | - Leadership updates 14 | - Project updates 15 | - Incident reports 16 | 17 | ## How to use this skill 18 | 19 | To write any internal communication: 20 | 21 | 1. **Identify the communication type** from the request 22 | 2. **Load the appropriate guideline file** from the `examples/` directory: 23 | - `examples/3p-updates.md` - For Progress/Plans/Problems team updates 24 | - `examples/company-newsletter.md` - For company-wide newsletters 25 | - `examples/faq-answers.md` - For answering frequently asked questions 26 | - `examples/general-comms.md` - For anything else that doesn't explicitly match one of the above 27 | 3. **Follow the specific instructions** in that file for formatting, tone, and content gathering 28 | 29 | If the communication type doesn't match any existing guideline, ask for clarification or more context about the desired format. 30 | 31 | ## Keywords 32 | 3P updates, company newsletter, company comms, weekly update, faqs, common questions, updates, internal comms 33 | -------------------------------------------------------------------------------- /webapp-testing/examples/element_discovery.py: -------------------------------------------------------------------------------- 1 | from playwright.sync_api import sync_playwright 2 | 3 | # Example: Discovering buttons and other elements on a page 4 | 5 | with sync_playwright() as p: 6 | browser = p.chromium.launch(headless=True) 7 | page = browser.new_page() 8 | 9 | # Navigate to page and wait for it to fully load 10 | page.goto('http://localhost:5173') 11 | page.wait_for_load_state('networkidle') 12 | 13 | # Discover all buttons on the page 14 | buttons = page.locator('button').all() 15 | print(f"Found {len(buttons)} buttons:") 16 | for i, button in enumerate(buttons): 17 | text = button.inner_text() if button.is_visible() else "[hidden]" 18 | print(f" [{i}] {text}") 19 | 20 | # Discover links 21 | links = page.locator('a[href]').all() 22 | print(f"\nFound {len(links)} links:") 23 | for link in links[:5]: # Show first 5 24 | text = link.inner_text().strip() 25 | href = link.get_attribute('href') 26 | print(f" - {text} -> {href}") 27 | 28 | # Discover input fields 29 | inputs = page.locator('input, textarea, select').all() 30 | print(f"\nFound {len(inputs)} input fields:") 31 | for input_elem in inputs: 32 | name = input_elem.get_attribute('name') or input_elem.get_attribute('id') or "[unnamed]" 33 | input_type = input_elem.get_attribute('type') or 'text' 34 | print(f" - {name} ({input_type})") 35 | 36 | # Take screenshot for visual reference 37 | page.screenshot(path='/tmp/page_discovery.png', full_page=True) 38 | print("\nScreenshot saved to /tmp/page_discovery.png") 39 | 40 | browser.close() -------------------------------------------------------------------------------- /artifacts-builder/scripts/bundle-artifact.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | echo "📦 Bundling React app to single HTML artifact..." 5 | 6 | # Check if we're in a project directory 7 | if [ ! -f "package.json" ]; then 8 | echo "❌ Error: No package.json found. Run this script from your project root." 9 | exit 1 10 | fi 11 | 12 | # Check if index.html exists 13 | if [ ! -f "index.html" ]; then 14 | echo "❌ Error: No index.html found in project root." 15 | echo " This script requires an index.html entry point." 16 | exit 1 17 | fi 18 | 19 | # Install bundling dependencies 20 | echo "📦 Installing bundling dependencies..." 21 | pnpm add -D parcel @parcel/config-default parcel-resolver-tspaths html-inline 22 | 23 | # Create Parcel config with tspaths resolver 24 | if [ ! -f ".parcelrc" ]; then 25 | echo "🔧 Creating Parcel configuration with path alias support..." 26 | cat > .parcelrc << 'EOF' 27 | { 28 | "extends": "@parcel/config-default", 29 | "resolvers": ["parcel-resolver-tspaths", "..."] 30 | } 31 | EOF 32 | fi 33 | 34 | # Clean previous build 35 | echo "🧹 Cleaning previous build..." 36 | rm -rf dist bundle.html 37 | 38 | # Build with Parcel 39 | echo "🔨 Building with Parcel..." 40 | pnpm exec parcel build index.html --dist-dir dist --no-source-maps 41 | 42 | # Inline everything into single HTML 43 | echo "🎯 Inlining all assets into single HTML file..." 44 | pnpm exec html-inline dist/index.html > bundle.html 45 | 46 | # Get file size 47 | FILE_SIZE=$(du -h bundle.html | cut -f1) 48 | 49 | echo "" 50 | echo "✅ Bundle complete!" 51 | echo "📄 Output: bundle.html ($FILE_SIZE)" 52 | echo "" 53 | echo "You can now use this single HTML file as an artifact in Claude conversations." 54 | echo "To test locally: open bundle.html in your browser" -------------------------------------------------------------------------------- /document-skills/pdf/scripts/create_validation_image.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sys 3 | 4 | from PIL import Image, ImageDraw 5 | 6 | 7 | # Creates "validation" images with rectangles for the bounding box information that 8 | # Claude creates when determining where to add text annotations in PDFs. See forms.md. 9 | 10 | 11 | def create_validation_image(page_number, fields_json_path, input_path, output_path): 12 | # Input file should be in the `fields.json` format described in forms.md. 13 | with open(fields_json_path, 'r') as f: 14 | data = json.load(f) 15 | 16 | img = Image.open(input_path) 17 | draw = ImageDraw.Draw(img) 18 | num_boxes = 0 19 | 20 | for field in data["form_fields"]: 21 | if field["page_number"] == page_number: 22 | entry_box = field['entry_bounding_box'] 23 | label_box = field['label_bounding_box'] 24 | # Draw red rectangle over entry bounding box and blue rectangle over the label. 25 | draw.rectangle(entry_box, outline='red', width=2) 26 | draw.rectangle(label_box, outline='blue', width=2) 27 | num_boxes += 2 28 | 29 | img.save(output_path) 30 | print(f"Created validation image at {output_path} with {num_boxes} bounding boxes") 31 | 32 | 33 | if __name__ == "__main__": 34 | if len(sys.argv) != 5: 35 | print("Usage: create_validation_image.py [page number] [fields.json file] [input image path] [output image path]") 36 | sys.exit(1) 37 | page_number = int(sys.argv[1]) 38 | fields_json_path = sys.argv[2] 39 | input_image_path = sys.argv[3] 40 | output_image_path = sys.argv[4] 41 | create_validation_image(page_number, fields_json_path, input_image_path, output_image_path) 42 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/scripts/validate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Command line tool to validate Office document XML files against XSD schemas and tracked changes. 4 | 5 | Usage: 6 | python validate.py --original 7 | """ 8 | 9 | import argparse 10 | import sys 11 | from pathlib import Path 12 | 13 | from validation import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator 14 | 15 | 16 | def main(): 17 | parser = argparse.ArgumentParser(description="Validate Office document XML files") 18 | parser.add_argument( 19 | "unpacked_dir", 20 | help="Path to unpacked Office document directory", 21 | ) 22 | parser.add_argument( 23 | "--original", 24 | required=True, 25 | help="Path to original file (.docx/.pptx/.xlsx)", 26 | ) 27 | parser.add_argument( 28 | "-v", 29 | "--verbose", 30 | action="store_true", 31 | help="Enable verbose output", 32 | ) 33 | args = parser.parse_args() 34 | 35 | # Validate paths 36 | unpacked_dir = Path(args.unpacked_dir) 37 | original_file = Path(args.original) 38 | file_extension = original_file.suffix.lower() 39 | assert unpacked_dir.is_dir(), f"Error: {unpacked_dir} is not a directory" 40 | assert original_file.is_file(), f"Error: {original_file} is not a file" 41 | assert file_extension in [".docx", ".pptx", ".xlsx"], ( 42 | f"Error: {original_file} must be a .docx, .pptx, or .xlsx file" 43 | ) 44 | 45 | # Run validations 46 | match file_extension: 47 | case ".docx": 48 | validators = [DOCXSchemaValidator, RedliningValidator] 49 | case ".pptx": 50 | validators = [PPTXSchemaValidator] 51 | case _: 52 | print(f"Error: Validation not supported for file type {file_extension}") 53 | sys.exit(1) 54 | 55 | # Run validators 56 | success = True 57 | for V in validators: 58 | validator = V(unpacked_dir, original_file, verbose=args.verbose) 59 | if not validator.validate(): 60 | success = False 61 | 62 | if success: 63 | print("All validations PASSED!") 64 | 65 | sys.exit(0 if success else 1) 66 | 67 | 68 | if __name__ == "__main__": 69 | main() 70 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/scripts/validate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Command line tool to validate Office document XML files against XSD schemas and tracked changes. 4 | 5 | Usage: 6 | python validate.py --original 7 | """ 8 | 9 | import argparse 10 | import sys 11 | from pathlib import Path 12 | 13 | from validation import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator 14 | 15 | 16 | def main(): 17 | parser = argparse.ArgumentParser(description="Validate Office document XML files") 18 | parser.add_argument( 19 | "unpacked_dir", 20 | help="Path to unpacked Office document directory", 21 | ) 22 | parser.add_argument( 23 | "--original", 24 | required=True, 25 | help="Path to original file (.docx/.pptx/.xlsx)", 26 | ) 27 | parser.add_argument( 28 | "-v", 29 | "--verbose", 30 | action="store_true", 31 | help="Enable verbose output", 32 | ) 33 | args = parser.parse_args() 34 | 35 | # Validate paths 36 | unpacked_dir = Path(args.unpacked_dir) 37 | original_file = Path(args.original) 38 | file_extension = original_file.suffix.lower() 39 | assert unpacked_dir.is_dir(), f"Error: {unpacked_dir} is not a directory" 40 | assert original_file.is_file(), f"Error: {original_file} is not a file" 41 | assert file_extension in [".docx", ".pptx", ".xlsx"], ( 42 | f"Error: {original_file} must be a .docx, .pptx, or .xlsx file" 43 | ) 44 | 45 | # Run validations 46 | match file_extension: 47 | case ".docx": 48 | validators = [DOCXSchemaValidator, RedliningValidator] 49 | case ".pptx": 50 | validators = [PPTXSchemaValidator] 51 | case _: 52 | print(f"Error: Validation not supported for file type {file_extension}") 53 | sys.exit(1) 54 | 55 | # Run validators 56 | success = True 57 | for V in validators: 58 | validator = V(unpacked_dir, original_file, verbose=args.verbose) 59 | if not validator.validate(): 60 | success = False 61 | 62 | if success: 63 | print("All validations PASSED!") 64 | 65 | sys.exit(0 if success else 1) 66 | 67 | 68 | if __name__ == "__main__": 69 | main() 70 | -------------------------------------------------------------------------------- /skill-creator/scripts/quick_validate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Quick validation script for skills - minimal version 4 | """ 5 | 6 | import sys 7 | import os 8 | import re 9 | from pathlib import Path 10 | 11 | def validate_skill(skill_path): 12 | """Basic validation of a skill""" 13 | skill_path = Path(skill_path) 14 | 15 | # Check SKILL.md exists 16 | skill_md = skill_path / 'SKILL.md' 17 | if not skill_md.exists(): 18 | return False, "SKILL.md not found" 19 | 20 | # Read and validate frontmatter 21 | content = skill_md.read_text() 22 | if not content.startswith('---'): 23 | return False, "No YAML frontmatter found" 24 | 25 | # Extract frontmatter 26 | match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL) 27 | if not match: 28 | return False, "Invalid frontmatter format" 29 | 30 | frontmatter = match.group(1) 31 | 32 | # Check required fields 33 | if 'name:' not in frontmatter: 34 | return False, "Missing 'name' in frontmatter" 35 | if 'description:' not in frontmatter: 36 | return False, "Missing 'description' in frontmatter" 37 | 38 | # Extract name for validation 39 | name_match = re.search(r'name:\s*(.+)', frontmatter) 40 | if name_match: 41 | name = name_match.group(1).strip() 42 | # Check naming convention (hyphen-case: lowercase with hyphens) 43 | if not re.match(r'^[a-z0-9-]+$', name): 44 | return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)" 45 | if name.startswith('-') or name.endswith('-') or '--' in name: 46 | return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens" 47 | 48 | # Extract and validate description 49 | desc_match = re.search(r'description:\s*(.+)', frontmatter) 50 | if desc_match: 51 | description = desc_match.group(1).strip() 52 | # Check for angle brackets 53 | if '<' in description or '>' in description: 54 | return False, "Description cannot contain angle brackets (< or >)" 55 | 56 | return True, "Skill is valid!" 57 | 58 | if __name__ == "__main__": 59 | if len(sys.argv) != 2: 60 | print("Usage: python quick_validate.py ") 61 | sys.exit(1) 62 | 63 | valid, message = validate_skill(sys.argv[1]) 64 | print(message) 65 | sys.exit(0 if valid else 1) -------------------------------------------------------------------------------- /internal-comms/examples/faq-answers.md: -------------------------------------------------------------------------------- 1 | ## Instructions 2 | You are an assistant for answering questions that are being asked across the company. Every week, there are lots of questions that get asked across the company, and your goal is to try to summarize what those questions are. We want our company to be well-informed and on the same page, so your job is to produce a set of frequently asked questions that our employees are asking and attempt to answer them. Your singular job is to do two things: 3 | 4 | - Find questions that are big sources of confusion for lots of employees at the company, generally about things that affect a large portion of the employee base 5 | - Attempt to give a nice summarized answer to that question in order to minimize confusion. 6 | 7 | Some examples of areas that may be interesting to folks: recent corporate events (fundraising, new executives, etc.), upcoming launches, hiring progress, changes to vision or focus, etc. 8 | 9 | 10 | ## Tools Available 11 | You should use the company's available tools, where communication and work happens. For most companies, it looks something like this: 12 | - Slack: questions being asked across the company - it could be questions in response to posts with lots of responses, questions being asked with lots of reactions or thumbs up to show support, or anything else to show that a large number of employees want to ask the same things 13 | - Email: emails with FAQs written directly in them can be a good source as well 14 | - Documents: docs in places like Google Drive, linked on calendar events, etc. can also be a good source of FAQs, either directly added or inferred based on the contents of the doc 15 | 16 | ## Formatting 17 | The formatting should be pretty basic: 18 | 19 | - *Question*: [insert question - 1 sentence] 20 | - *Answer*: [insert answer - 1-2 sentence] 21 | 22 | ## Guidance 23 | Make sure you're being holistic in your questions. Don't focus too much on just the user in question or the team they are a part of, but try to capture the entire company. Try to be as holistic as you can in reading all the tools available, producing responses that are relevant to all at the company. 24 | 25 | ## Answer Guidelines 26 | - Base answers on official company communications when possible 27 | - If information is uncertain, indicate that clearly 28 | - Link to authoritative sources (docs, announcements, emails) 29 | - Keep tone professional but approachable 30 | - Flag if a question requires executive input or official response -------------------------------------------------------------------------------- /brand-guidelines/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: brand-guidelines 3 | description: Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply. 4 | license: Complete terms in LICENSE.txt 5 | --- 6 | 7 | # Anthropic Brand Styling 8 | 9 | ## Overview 10 | 11 | To access Anthropic's official brand identity and style resources, use this skill. 12 | 13 | **Keywords**: branding, corporate identity, visual identity, post-processing, styling, brand colors, typography, Anthropic brand, visual formatting, visual design 14 | 15 | ## Brand Guidelines 16 | 17 | ### Colors 18 | 19 | **Main Colors:** 20 | 21 | - Dark: `#141413` - Primary text and dark backgrounds 22 | - Light: `#faf9f5` - Light backgrounds and text on dark 23 | - Mid Gray: `#b0aea5` - Secondary elements 24 | - Light Gray: `#e8e6dc` - Subtle backgrounds 25 | 26 | **Accent Colors:** 27 | 28 | - Orange: `#d97757` - Primary accent 29 | - Blue: `#6a9bcc` - Secondary accent 30 | - Green: `#788c5d` - Tertiary accent 31 | 32 | ### Typography 33 | 34 | - **Headings**: Poppins (with Arial fallback) 35 | - **Body Text**: Lora (with Georgia fallback) 36 | - **Note**: Fonts should be pre-installed in your environment for best results 37 | 38 | ## Features 39 | 40 | ### Smart Font Application 41 | 42 | - Applies Poppins font to headings (24pt and larger) 43 | - Applies Lora font to body text 44 | - Automatically falls back to Arial/Georgia if custom fonts unavailable 45 | - Preserves readability across all systems 46 | 47 | ### Text Styling 48 | 49 | - Headings (24pt+): Poppins font 50 | - Body text: Lora font 51 | - Smart color selection based on background 52 | - Preserves text hierarchy and formatting 53 | 54 | ### Shape and Accent Colors 55 | 56 | - Non-text shapes use accent colors 57 | - Cycles through orange, blue, and green accents 58 | - Maintains visual interest while staying on-brand 59 | 60 | ## Technical Details 61 | 62 | ### Font Management 63 | 64 | - Uses system-installed Poppins and Lora fonts when available 65 | - Provides automatic fallback to Arial (headings) and Georgia (body) 66 | - No font installation required - works with existing system fonts 67 | - For best results, pre-install Poppins and Lora fonts in your environment 68 | 69 | ### Color Application 70 | 71 | - Uses RGB color values for precise brand matching 72 | - Applied via python-pptx's RGBColor class 73 | - Maintains color fidelity across different systems 74 | -------------------------------------------------------------------------------- /document-skills/docx/scripts/templates/comments.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /document-skills/docx/scripts/templates/commentsExtended.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /document-skills/docx/scripts/templates/commentsIds.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /document-skills/docx/scripts/templates/commentsExtensible.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /image-enhancer/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: image-enhancer 3 | description: Improves the quality of images, especially screenshots, by enhancing resolution, sharpness, and clarity. Perfect for preparing images for presentations, documentation, or social media posts. 4 | --- 5 | 6 | # Image Enhancer 7 | 8 | This skill takes your images and screenshots and makes them look better—sharper, clearer, and more professional. 9 | 10 | ## When to Use This Skill 11 | 12 | - Improving screenshot quality for blog posts or documentation 13 | - Enhancing images before sharing on social media 14 | - Preparing images for presentations or reports 15 | - Upscaling low-resolution images 16 | - Sharpening blurry photos 17 | - Cleaning up compressed images 18 | 19 | ## What This Skill Does 20 | 21 | 1. **Analyzes Image Quality**: Checks resolution, sharpness, and compression artifacts 22 | 2. **Enhances Resolution**: Upscales images intelligently 23 | 3. **Improves Sharpness**: Enhances edges and details 24 | 4. **Reduces Artifacts**: Cleans up compression artifacts and noise 25 | 5. **Optimizes for Use Case**: Adjusts based on intended use (web, print, social media) 26 | 27 | ## How to Use 28 | 29 | ### Basic Enhancement 30 | 31 | ``` 32 | Improve the image quality of screenshot.png 33 | ``` 34 | 35 | ``` 36 | Enhance all images in this folder 37 | ``` 38 | 39 | ### Specific Improvements 40 | 41 | ``` 42 | Upscale this image to 4K resolution 43 | ``` 44 | 45 | ``` 46 | Sharpen this blurry screenshot 47 | ``` 48 | 49 | ``` 50 | Reduce compression artifacts in this image 51 | ``` 52 | 53 | ### Batch Processing 54 | 55 | ``` 56 | Improve the quality of all PNG files in this directory 57 | ``` 58 | 59 | ## Example 60 | 61 | **User**: "Improve the image quality of screenshot-2024.png" 62 | 63 | **Output**: 64 | ``` 65 | Analyzing screenshot-2024.png... 66 | 67 | Current specs: 68 | - Resolution: 1920x1080 69 | - Format: PNG 70 | - Quality: Good, but slight blur 71 | 72 | Enhancements applied: 73 | ✓ Upscaled to 2560x1440 (retina) 74 | ✓ Sharpened edges 75 | ✓ Enhanced text clarity 76 | ✓ Optimized file size 77 | 78 | Saved as: screenshot-2024-enhanced.png 79 | Original preserved as: screenshot-2024-original.png 80 | ``` 81 | 82 | **Inspired by:** Lenny Rachitsky's workflow from his newsletter - used for screenshots in his articles 83 | 84 | ## Tips 85 | 86 | - Always keeps original files as backup 87 | - Works best with screenshots and digital images 88 | - Can batch process entire folders 89 | - Specify output format if needed (PNG for quality, JPG for smaller size) 90 | - For social media, mention the platform for optimal sizing 91 | 92 | ## Common Use Cases 93 | 94 | - **Blog Posts**: Enhance screenshots before publishing 95 | - **Documentation**: Make UI screenshots crystal clear 96 | - **Social Media**: Optimize images for Twitter, LinkedIn, Instagram 97 | - **Presentations**: Upscale images for large screens 98 | - **Print Materials**: Increase resolution for physical media 99 | 100 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 40 | 41 | 42 | 43 | 44 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 40 | 41 | 42 | 43 | 44 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /video-downloader/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: video-downloader 3 | description: Downloads videos from YouTube and other platforms for offline viewing, editing, or archival. Handles various formats and quality options. 4 | --- 5 | 6 | # Video Downloader 7 | 8 | This skill downloads videos from YouTube and other platforms directly to your computer. 9 | 10 | ## When to Use This Skill 11 | 12 | - Downloading YouTube videos for offline viewing 13 | - Saving educational content for reference 14 | - Archiving important videos 15 | - Getting video files for editing or repurposing 16 | - Downloading your own content from platforms 17 | - Saving conference talks or webinars 18 | 19 | ## What This Skill Does 20 | 21 | 1. **Downloads Videos**: Fetches videos from YouTube and other platforms 22 | 2. **Quality Selection**: Lets you choose resolution (480p, 720p, 1080p, 4K) 23 | 3. **Format Options**: Downloads in various formats (MP4, WebM, audio-only) 24 | 4. **Batch Downloads**: Can download multiple videos or playlists 25 | 5. **Metadata Preservation**: Saves title, description, and thumbnail 26 | 27 | ## How to Use 28 | 29 | ### Basic Download 30 | 31 | ``` 32 | Download this YouTube video: https://youtube.com/watch?v=... 33 | ``` 34 | 35 | ``` 36 | Download this video in 1080p quality 37 | ``` 38 | 39 | ### Audio Only 40 | 41 | ``` 42 | Download the audio from this YouTube video as MP3 43 | ``` 44 | 45 | ### Playlist Download 46 | 47 | ``` 48 | Download all videos from this YouTube playlist: [URL] 49 | ``` 50 | 51 | ### Batch Download 52 | 53 | ``` 54 | Download these 5 YouTube videos: 55 | 1. [URL] 56 | 2. [URL] 57 | ... 58 | ``` 59 | 60 | ## Example 61 | 62 | **User**: "Download this YouTube video: https://youtube.com/watch?v=abc123" 63 | 64 | **Output**: 65 | ``` 66 | Downloading from YouTube... 67 | 68 | Video: "How to Build Products Users Love" 69 | Channel: Lenny's Podcast 70 | Duration: 45:32 71 | Quality: 1080p 72 | 73 | Progress: ████████████████████ 100% 74 | 75 | ✓ Downloaded: how-to-build-products-users-love.mp4 76 | ✓ Saved thumbnail: how-to-build-products-users-love.jpg 77 | ✓ Size: 342 MB 78 | 79 | Saved to: ~/Downloads/ 80 | ``` 81 | 82 | **Inspired by:** Lenny's workflow from his newsletter 83 | 84 | ## Important Notes 85 | 86 | ⚠️ **Copyright & Fair Use** 87 | - Only download videos you have permission to download 88 | - Respect copyright laws and platform terms of service 89 | - Use for personal, educational, or fair use purposes 90 | - Don't redistribute copyrighted content 91 | 92 | ## Tips 93 | 94 | - Specify quality if you need lower file size (720p vs 1080p) 95 | - Use audio-only for podcasts or music to save space 96 | - Download to a dedicated folder to stay organized 97 | - Check file size before downloading on slow connections 98 | 99 | ## Common Use Cases 100 | 101 | - **Education**: Save tutorials and courses for offline learning 102 | - **Research**: Archive videos for reference 103 | - **Content Creation**: Download your own content from platforms 104 | - **Backup**: Save important videos before they're removed 105 | - **Offline Viewing**: Watch videos without internet access 106 | 107 | -------------------------------------------------------------------------------- /skill-share/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: skill-share 3 | description: A skill that creates new Claude skills and automatically shares them on Slack using Rube for seamless team collaboration and skill discovery. 4 | license: Complete terms in LICENSE.txt 5 | --- 6 | 7 | ## When to use this skill 8 | 9 | Use this skill when you need to: 10 | - **Create new Claude skills** with proper structure and metadata 11 | - **Generate skill packages** ready for distribution 12 | - **Automatically share created skills** on Slack channels for team visibility 13 | - **Validate skill structure** before sharing 14 | - **Package and distribute** skills to your team 15 | 16 | Also use this skill when: 17 | - **User says he wants to create/share his skill** 18 | 19 | This skill is ideal for: 20 | - Creating skills as part of team workflows 21 | - Building internal tools that need skill creation + team notification 22 | - Automating the skill development pipeline 23 | - Collaborative skill creation with team notifications 24 | 25 | ## Key Features 26 | 27 | ### 1. Skill Creation 28 | - Creates properly structured skill directories with SKILL.md 29 | - Generates standardized scripts/, references/, and assets/ directories 30 | - Auto-generates YAML frontmatter with required metadata 31 | - Enforces naming conventions (hyphen-case) 32 | 33 | ### 2. Skill Validation 34 | - Validates SKILL.md format and required fields 35 | - Checks naming conventions 36 | - Ensures metadata completeness before packaging 37 | 38 | ### 3. Skill Packaging 39 | - Creates distributable zip files 40 | - Includes all skill assets and documentation 41 | - Runs validation automatically before packaging 42 | 43 | ### 4. Slack Integration via Rube 44 | - Automatically sends created skill information to designated Slack channels 45 | - Shares skill metadata (name, description, link) 46 | - Posts skill summary for team discovery 47 | - Provides direct links to skill files 48 | 49 | ## How It Works 50 | 51 | 1. **Initialization**: Provide skill name and description 52 | 2. **Creation**: Skill directory is created with proper structure 53 | 3. **Validation**: Skill metadata is validated for correctness 54 | 4. **Packaging**: Skill is packaged into a distributable format 55 | 5. **Slack Notification**: Skill details are posted to your team's Slack channel 56 | 57 | ## Example Usage 58 | 59 | ``` 60 | When you ask Claude to create a skill called "pdf-analyzer": 61 | 1. Creates /skill-pdf-analyzer/ with SKILL.md template 62 | 2. Generates structured directories (scripts/, references/, assets/) 63 | 3. Validates the skill structure 64 | 4. Packages the skill as a zip file 65 | 5. Posts to Slack: "New Skill Created: pdf-analyzer - Advanced PDF analysis and extraction capabilities" 66 | ``` 67 | 68 | ## Integration with Rube 69 | 70 | This skill leverages Rube for: 71 | - **SLACK_SEND_MESSAGE**: Posts skill information to team channels 72 | - **SLACK_POST_MESSAGE_WITH_BLOCKS**: Shares rich formatted skill metadata 73 | - **SLACK_FIND_CHANNELS**: Discovers target channels for skill announcements 74 | 75 | ## Requirements 76 | 77 | - Slack workspace connection via Rube 78 | - Write access to skill creation directory 79 | - Python 3.7+ for skill creation scripts 80 | - Target Slack channel for skill notifications 81 | -------------------------------------------------------------------------------- /theme-factory/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: theme-factory 3 | description: Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly. 4 | license: Complete terms in LICENSE.txt 5 | --- 6 | 7 | 8 | # Theme Factory Skill 9 | 10 | This skill provides a curated collection of professional font and color themes themes, each with carefully selected color palettes and font pairings. Once a theme is chosen, it can be applied to any artifact. 11 | 12 | ## Purpose 13 | 14 | To apply consistent, professional styling to presentation slide decks, use this skill. Each theme includes: 15 | - A cohesive color palette with hex codes 16 | - Complementary font pairings for headers and body text 17 | - A distinct visual identity suitable for different contexts and audiences 18 | 19 | ## Usage Instructions 20 | 21 | To apply styling to a slide deck or other artifact: 22 | 23 | 1. **Show the theme showcase**: Display the `theme-showcase.pdf` file to allow users to see all available themes visually. Do not make any modifications to it; simply show the file for viewing. 24 | 2. **Ask for their choice**: Ask which theme to apply to the deck 25 | 3. **Wait for selection**: Get explicit confirmation about the chosen theme 26 | 4. **Apply the theme**: Once a theme has been chosen, apply the selected theme's colors and fonts to the deck/artifact 27 | 28 | ## Themes Available 29 | 30 | The following 10 themes are available, each showcased in `theme-showcase.pdf`: 31 | 32 | 1. **Ocean Depths** - Professional and calming maritime theme 33 | 2. **Sunset Boulevard** - Warm and vibrant sunset colors 34 | 3. **Forest Canopy** - Natural and grounded earth tones 35 | 4. **Modern Minimalist** - Clean and contemporary grayscale 36 | 5. **Golden Hour** - Rich and warm autumnal palette 37 | 6. **Arctic Frost** - Cool and crisp winter-inspired theme 38 | 7. **Desert Rose** - Soft and sophisticated dusty tones 39 | 8. **Tech Innovation** - Bold and modern tech aesthetic 40 | 9. **Botanical Garden** - Fresh and organic garden colors 41 | 10. **Midnight Galaxy** - Dramatic and cosmic deep tones 42 | 43 | ## Theme Details 44 | 45 | Each theme is defined in the `themes/` directory with complete specifications including: 46 | - Cohesive color palette with hex codes 47 | - Complementary font pairings for headers and body text 48 | - Distinct visual identity suitable for different contexts and audiences 49 | 50 | ## Application Process 51 | 52 | After a preferred theme is selected: 53 | 1. Read the corresponding theme file from the `themes/` directory 54 | 2. Apply the specified colors and fonts consistently throughout the deck 55 | 3. Ensure proper contrast and readability 56 | 4. Maintain the theme's visual identity across all slides 57 | 58 | ## Create your Own Theme 59 | To handle cases where none of the existing themes work for an artifact, create a custom theme. Based on provided inputs, generate a new theme similar to the ones above. Give the theme a similar name describing what the font/color combinations represent. Use any basic description provided to choose appropriate colors/fonts. After generating the theme, show it for review and verification. Following that, apply the theme as described above. 60 | -------------------------------------------------------------------------------- /artifacts-builder/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: artifacts-builder 3 | description: Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts. 4 | license: Complete terms in LICENSE.txt 5 | --- 6 | 7 | # Artifacts Builder 8 | 9 | To build powerful frontend claude.ai artifacts, follow these steps: 10 | 1. Initialize the frontend repo using `scripts/init-artifact.sh` 11 | 2. Develop your artifact by editing the generated code 12 | 3. Bundle all code into a single HTML file using `scripts/bundle-artifact.sh` 13 | 4. Display artifact to user 14 | 5. (Optional) Test the artifact 15 | 16 | **Stack**: React 18 + TypeScript + Vite + Parcel (bundling) + Tailwind CSS + shadcn/ui 17 | 18 | ## Design & Style Guidelines 19 | 20 | VERY IMPORTANT: To avoid what is often referred to as "AI slop", avoid using excessive centered layouts, purple gradients, uniform rounded corners, and Inter font. 21 | 22 | ## Quick Start 23 | 24 | ### Step 1: Initialize Project 25 | 26 | Run the initialization script to create a new React project: 27 | ```bash 28 | bash scripts/init-artifact.sh 29 | cd 30 | ``` 31 | 32 | This creates a fully configured project with: 33 | - ✅ React + TypeScript (via Vite) 34 | - ✅ Tailwind CSS 3.4.1 with shadcn/ui theming system 35 | - ✅ Path aliases (`@/`) configured 36 | - ✅ 40+ shadcn/ui components pre-installed 37 | - ✅ All Radix UI dependencies included 38 | - ✅ Parcel configured for bundling (via .parcelrc) 39 | - ✅ Node 18+ compatibility (auto-detects and pins Vite version) 40 | 41 | ### Step 2: Develop Your Artifact 42 | 43 | To build the artifact, edit the generated files. See **Common Development Tasks** below for guidance. 44 | 45 | ### Step 3: Bundle to Single HTML File 46 | 47 | To bundle the React app into a single HTML artifact: 48 | ```bash 49 | bash scripts/bundle-artifact.sh 50 | ``` 51 | 52 | This creates `bundle.html` - a self-contained artifact with all JavaScript, CSS, and dependencies inlined. This file can be directly shared in Claude conversations as an artifact. 53 | 54 | **Requirements**: Your project must have an `index.html` in the root directory. 55 | 56 | **What the script does**: 57 | - Installs bundling dependencies (parcel, @parcel/config-default, parcel-resolver-tspaths, html-inline) 58 | - Creates `.parcelrc` config with path alias support 59 | - Builds with Parcel (no source maps) 60 | - Inlines all assets into single HTML using html-inline 61 | 62 | ### Step 4: Share Artifact with User 63 | 64 | Finally, share the bundled HTML file in conversation with the user so they can view it as an artifact. 65 | 66 | ### Step 5: Testing/Visualizing the Artifact (Optional) 67 | 68 | Note: This is a completely optional step. Only perform if necessary or requested. 69 | 70 | To test/visualize the artifact, use available tools (including other Skills or built-in tools like Playwright or Puppeteer). In general, avoid testing the artifact upfront as it adds latency between the request and when the finished artifact can be seen. Test later, after presenting the artifact, if requested or if issues arise. 71 | 72 | ## Reference 73 | 74 | - **shadcn/ui components**: https://ui.shadcn.com/docs/components -------------------------------------------------------------------------------- /document-skills/pdf/scripts/check_bounding_boxes.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | import json 3 | import sys 4 | 5 | 6 | # Script to check that the `fields.json` file that Claude creates when analyzing PDFs 7 | # does not have overlapping bounding boxes. See forms.md. 8 | 9 | 10 | @dataclass 11 | class RectAndField: 12 | rect: list[float] 13 | rect_type: str 14 | field: dict 15 | 16 | 17 | # Returns a list of messages that are printed to stdout for Claude to read. 18 | def get_bounding_box_messages(fields_json_stream) -> list[str]: 19 | messages = [] 20 | fields = json.load(fields_json_stream) 21 | messages.append(f"Read {len(fields['form_fields'])} fields") 22 | 23 | def rects_intersect(r1, r2): 24 | disjoint_horizontal = r1[0] >= r2[2] or r1[2] <= r2[0] 25 | disjoint_vertical = r1[1] >= r2[3] or r1[3] <= r2[1] 26 | return not (disjoint_horizontal or disjoint_vertical) 27 | 28 | rects_and_fields = [] 29 | for f in fields["form_fields"]: 30 | rects_and_fields.append(RectAndField(f["label_bounding_box"], "label", f)) 31 | rects_and_fields.append(RectAndField(f["entry_bounding_box"], "entry", f)) 32 | 33 | has_error = False 34 | for i, ri in enumerate(rects_and_fields): 35 | # This is O(N^2); we can optimize if it becomes a problem. 36 | for j in range(i + 1, len(rects_and_fields)): 37 | rj = rects_and_fields[j] 38 | if ri.field["page_number"] == rj.field["page_number"] and rects_intersect(ri.rect, rj.rect): 39 | has_error = True 40 | if ri.field is rj.field: 41 | messages.append(f"FAILURE: intersection between label and entry bounding boxes for `{ri.field['description']}` ({ri.rect}, {rj.rect})") 42 | else: 43 | messages.append(f"FAILURE: intersection between {ri.rect_type} bounding box for `{ri.field['description']}` ({ri.rect}) and {rj.rect_type} bounding box for `{rj.field['description']}` ({rj.rect})") 44 | if len(messages) >= 20: 45 | messages.append("Aborting further checks; fix bounding boxes and try again") 46 | return messages 47 | if ri.rect_type == "entry": 48 | if "entry_text" in ri.field: 49 | font_size = ri.field["entry_text"].get("font_size", 14) 50 | entry_height = ri.rect[3] - ri.rect[1] 51 | if entry_height < font_size: 52 | has_error = True 53 | messages.append(f"FAILURE: entry bounding box height ({entry_height}) for `{ri.field['description']}` is too short for the text content (font size: {font_size}). Increase the box height or decrease the font size.") 54 | if len(messages) >= 20: 55 | messages.append("Aborting further checks; fix bounding boxes and try again") 56 | return messages 57 | 58 | if not has_error: 59 | messages.append("SUCCESS: All bounding boxes are valid") 60 | return messages 61 | 62 | if __name__ == "__main__": 63 | if len(sys.argv) != 2: 64 | print("Usage: check_bounding_boxes.py [fields.json]") 65 | sys.exit(1) 66 | # Input file should be in the `fields.json` format described in forms.md. 67 | with open(sys.argv[1]) as f: 68 | messages = get_bounding_box_messages(f) 69 | for msg in messages: 70 | print(msg) 71 | -------------------------------------------------------------------------------- /internal-comms/examples/3p-updates.md: -------------------------------------------------------------------------------- 1 | ## Instructions 2 | You are being asked to write a 3P update. 3P updates stand for "Progress, Plans, Problems." The main audience is for executives, leadership, other teammates, etc. They're meant to be very succinct and to-the-point: think something you can read in 30-60sec or less. They're also for people with some, but not a lot of context on what the team does. 3 | 4 | 3Ps can cover a team of any size, ranging all the way up to the entire company. The bigger the team, the less granular the tasks should be. For example, "mobile team" might have "shipped feature" or "fixed bugs," whereas the company might have really meaty 3Ps, like "hired 20 new people" or "closed 10 new deals." 5 | 6 | They represent the work of the team across a time period, almost always one week. They include three sections: 7 | 1) Progress: what the team has accomplished over the next time period. Focus mainly on things shipped, milestones achieved, tasks created, etc. 8 | 2) Plans: what the team plans to do over the next time period. Focus on what things are top-of-mind, really high priority, etc. for the team. 9 | 3) Problems: anything that is slowing the team down. This could be things like too few people, bugs or blockers that are preventing the team from moving forward, some deal that fell through, etc. 10 | 11 | Before writing them, make sure that you know the team name. If it's not specified, you can ask explicitly what the team name you're writing for is. 12 | 13 | 14 | ## Tools Available 15 | Whenever possible, try to pull from available sources to get the information you need: 16 | - Slack: posts from team members with their updates - ideally look for posts in large channels with lots of reactions 17 | - Google Drive: docs written from critical team members with lots of views 18 | - Email: emails with lots of responses of lots of content that seems relevant 19 | - Calendar: non-recurring meetings that have a lot of importance, like product reviews, etc. 20 | 21 | 22 | Try to gather as much context as you can, focusing on the things that covered the time period you're writing for: 23 | - Progress: anything between a week ago and today 24 | - Plans: anything from today to the next week 25 | - Problems: anything between a week ago and today 26 | 27 | 28 | If you don't have access, you can ask the user for things they want to cover. They might also include these things to you directly, in which case you're mostly just formatting for this particular format. 29 | 30 | ## Workflow 31 | 32 | 1. **Clarify scope**: Confirm the team name and time period (usually past week for Progress/Problems, next 33 | week for Plans) 34 | 2. **Gather information**: Use available tools or ask the user directly 35 | 3. **Draft the update**: Follow the strict formatting guidelines 36 | 4. **Review**: Ensure it's concise (30-60 seconds to read) and data-driven 37 | 38 | ## Formatting 39 | 40 | The format is always the same, very strict formatting. Never use any formatting other than this. Pick an emoji that is fun and captures the vibe of the team and update. 41 | 42 | [pick an emoji] [Team Name] (Dates Covered, usually a week) 43 | Progress: [1-3 sentences of content] 44 | Plans: [1-3 sentences of content] 45 | Problems: [1-3 sentences of content] 46 | 47 | Each section should be no more than 1-3 sentences: clear, to the point. It should be data-driven, and generally include metrics where possible. The tone should be very matter-of-fact, not super prose-heavy. -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/mce/mc.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/mce/mc.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /internal-comms/examples/company-newsletter.md: -------------------------------------------------------------------------------- 1 | ## Instructions 2 | You are being asked to write a company-wide newsletter update. You are meant to summarize the past week/month of a company in the form of a newsletter that the entire company will read. It should be maybe ~20-25 bullet points long. It will be sent via Slack and email, so make it consumable for that. 3 | 4 | Ideally it includes the following attributes: 5 | - Lots of links: pulling documents from Google Drive that are very relevant, linking to prominent Slack messages in announce channels and from executives, perhgaps referencing emails that went company-wide, highlighting significant things that have happened in the company. 6 | - Short and to-the-point: each bullet should probably be no longer than ~1-2 sentences 7 | - Use the "we" tense, as you are part of the company. Many of the bullets should say "we did this" or "we did that" 8 | 9 | ## Tools to use 10 | If you have access to the following tools, please try to use them. If not, you can also let the user know directly that their responses would be better if they gave them access. 11 | 12 | - Slack: look for messages in channels with lots of people, with lots of reactions or lots of responses within the thread 13 | - Email: look for things from executives that discuss company-wide announcements 14 | - Calendar: if there were meetings with large attendee lists, particularly things like All-Hands meetings, big company announcements, etc. If there were documents attached to those meetings, those are great links to include. 15 | - Documents: if there were new docs published in the last week or two that got a lot of attention, you can link them. These should be things like company-wide vision docs, plans for the upcoming quarter or half, things authored by critical executives, etc. 16 | - External press: if you see references to articles or press we've received over the past week, that could be really cool too. 17 | 18 | If you don't have access to any of these things, you can ask the user for things they want to cover. In this case, you'll mostly just be polishing up and fitting to this format more directly. 19 | 20 | ## Sections 21 | The company is pretty big: 1000+ people. There are a variety of different teams and initiatives going on across the company. To make sure the update works well, try breaking it into sections of similar things. You might break into clusters like {product development, go to market, finance} or {recruiting, execution, vision}, or {external news, internal news} etc. Try to make sure the different areas of the company are highlighted well. 22 | 23 | ## Prioritization 24 | Focus on: 25 | - Company-wide impact (not team-specific details) 26 | - Announcements from leadership 27 | - Major milestones and achievements 28 | - Information that affects most employees 29 | - External recognition or press 30 | 31 | Avoid: 32 | - Overly granular team updates (save those for 3Ps) 33 | - Information only relevant to small groups 34 | - Duplicate information already communicated 35 | 36 | ## Example Formats 37 | 38 | :megaphone: Company Announcements 39 | - Announcement 1 40 | - Announcement 2 41 | - Announcement 3 42 | 43 | :dart: Progress on Priorities 44 | - Area 1 45 | - Sub-area 1 46 | - Sub-area 2 47 | - Sub-area 3 48 | - Area 2 49 | - Sub-area 1 50 | - Sub-area 2 51 | - Sub-area 3 52 | - Area 3 53 | - Sub-area 1 54 | - Sub-area 2 55 | - Sub-area 3 56 | 57 | :pillar: Leadership Updates 58 | - Post 1 59 | - Post 2 60 | - Post 3 61 | 62 | :thread: Social Updates 63 | - Update 1 64 | - Update 2 65 | - Update 3 66 | -------------------------------------------------------------------------------- /slack-gif-creator/templates/bounce.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Bounce Animation Template - Creates bouncing motion for objects. 4 | 5 | Use this to make objects bounce up and down or horizontally with realistic physics. 6 | """ 7 | 8 | import sys 9 | from pathlib import Path 10 | 11 | # Add parent directory to path 12 | sys.path.append(str(Path(__file__).parent.parent)) 13 | 14 | from core.gif_builder import GIFBuilder 15 | from core.frame_composer import create_blank_frame, draw_circle, draw_emoji 16 | from core.easing import ease_out_bounce, interpolate 17 | 18 | 19 | def create_bounce_animation( 20 | object_type: str = 'circle', 21 | object_data: dict = None, 22 | num_frames: int = 30, 23 | bounce_height: int = 150, 24 | ground_y: int = 350, 25 | start_x: int = 240, 26 | frame_width: int = 480, 27 | frame_height: int = 480, 28 | bg_color: tuple[int, int, int] = (255, 255, 255) 29 | ) -> list: 30 | """ 31 | Create frames for a bouncing animation. 32 | 33 | Args: 34 | object_type: 'circle', 'emoji', or 'custom' 35 | object_data: Data for the object (e.g., {'radius': 30, 'color': (255, 0, 0)}) 36 | num_frames: Number of frames in the animation 37 | bounce_height: Maximum height of bounce 38 | ground_y: Y position of ground 39 | start_x: X position (or starting X if moving horizontally) 40 | frame_width: Frame width 41 | frame_height: Frame height 42 | bg_color: Background color 43 | 44 | Returns: 45 | List of frames 46 | """ 47 | frames = [] 48 | 49 | # Default object data 50 | if object_data is None: 51 | if object_type == 'circle': 52 | object_data = {'radius': 30, 'color': (255, 100, 100)} 53 | elif object_type == 'emoji': 54 | object_data = {'emoji': '⚽', 'size': 60} 55 | 56 | for i in range(num_frames): 57 | # Create blank frame 58 | frame = create_blank_frame(frame_width, frame_height, bg_color) 59 | 60 | # Calculate progress (0.0 to 1.0) 61 | t = i / (num_frames - 1) if num_frames > 1 else 0 62 | 63 | # Calculate Y position using bounce easing 64 | y = ground_y - int(ease_out_bounce(t) * bounce_height) 65 | 66 | # Draw object 67 | if object_type == 'circle': 68 | draw_circle( 69 | frame, 70 | center=(start_x, y), 71 | radius=object_data['radius'], 72 | fill_color=object_data['color'] 73 | ) 74 | elif object_type == 'emoji': 75 | draw_emoji( 76 | frame, 77 | emoji=object_data['emoji'], 78 | position=(start_x - object_data['size'] // 2, y - object_data['size'] // 2), 79 | size=object_data['size'] 80 | ) 81 | 82 | frames.append(frame) 83 | 84 | return frames 85 | 86 | 87 | # Example usage 88 | if __name__ == '__main__': 89 | print("Creating bouncing ball GIF...") 90 | 91 | # Create GIF builder 92 | builder = GIFBuilder(width=480, height=480, fps=20) 93 | 94 | # Generate bounce animation 95 | frames = create_bounce_animation( 96 | object_type='circle', 97 | object_data={'radius': 40, 'color': (255, 100, 100)}, 98 | num_frames=40, 99 | bounce_height=200 100 | ) 101 | 102 | # Add frames to builder 103 | builder.add_frames(frames) 104 | 105 | # Save GIF 106 | builder.save('bounce_test.gif', num_colors=64) -------------------------------------------------------------------------------- /changelog-generator/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: changelog-generator 3 | description: Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation. 4 | --- 5 | 6 | # Changelog Generator 7 | 8 | This skill transforms technical git commits into polished, user-friendly changelogs that your customers and users will actually understand and appreciate. 9 | 10 | ## When to Use This Skill 11 | 12 | - Preparing release notes for a new version 13 | - Creating weekly or monthly product update summaries 14 | - Documenting changes for customers 15 | - Writing changelog entries for app store submissions 16 | - Generating update notifications 17 | - Creating internal release documentation 18 | - Maintaining a public changelog/product updates page 19 | 20 | ## What This Skill Does 21 | 22 | 1. **Scans Git History**: Analyzes commits from a specific time period or between versions 23 | 2. **Categorizes Changes**: Groups commits into logical categories (features, improvements, bug fixes, breaking changes, security) 24 | 3. **Translates Technical → User-Friendly**: Converts developer commits into customer language 25 | 4. **Formats Professionally**: Creates clean, structured changelog entries 26 | 5. **Filters Noise**: Excludes internal commits (refactoring, tests, etc.) 27 | 6. **Follows Best Practices**: Applies changelog guidelines and your brand voice 28 | 29 | ## How to Use 30 | 31 | ### Basic Usage 32 | 33 | From your project repository: 34 | 35 | ``` 36 | Create a changelog from commits since last release 37 | ``` 38 | 39 | ``` 40 | Generate changelog for all commits from the past week 41 | ``` 42 | 43 | ``` 44 | Create release notes for version 2.5.0 45 | ``` 46 | 47 | ### With Specific Date Range 48 | 49 | ``` 50 | Create a changelog for all commits between March 1 and March 15 51 | ``` 52 | 53 | ### With Custom Guidelines 54 | 55 | ``` 56 | Create a changelog for commits since v2.4.0, using my changelog 57 | guidelines from CHANGELOG_STYLE.md 58 | ``` 59 | 60 | ## Example 61 | 62 | **User**: "Create a changelog for commits from the past 7 days" 63 | 64 | **Output**: 65 | ```markdown 66 | # Updates - Week of March 10, 2024 67 | 68 | ## ✨ New Features 69 | 70 | - **Team Workspaces**: Create separate workspaces for different 71 | projects. Invite team members and keep everything organized. 72 | 73 | - **Keyboard Shortcuts**: Press ? to see all available shortcuts. 74 | Navigate faster without touching your mouse. 75 | 76 | ## 🔧 Improvements 77 | 78 | - **Faster Sync**: Files now sync 2x faster across devices 79 | - **Better Search**: Search now includes file contents, not just titles 80 | 81 | ## 🐛 Fixes 82 | 83 | - Fixed issue where large images wouldn't upload 84 | - Resolved timezone confusion in scheduled posts 85 | - Corrected notification badge count 86 | ``` 87 | 88 | **Inspired by:** Manik Aggarwal's use case from Lenny's Newsletter 89 | 90 | ## Tips 91 | 92 | - Run from your git repository root 93 | - Specify date ranges for focused changelogs 94 | - Use your CHANGELOG_STYLE.md for consistent formatting 95 | - Review and adjust the generated changelog before publishing 96 | - Save output directly to CHANGELOG.md 97 | 98 | ## Related Use Cases 99 | 100 | - Creating GitHub release notes 101 | - Writing app store update descriptions 102 | - Generating email updates for users 103 | - Creating social media announcement posts 104 | 105 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd: -------------------------------------------------------------------------------- 1 | 2 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd: -------------------------------------------------------------------------------- 1 | 2 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /skill-creator/scripts/package_skill.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Skill Packager - Creates a distributable zip file of a skill folder 4 | 5 | Usage: 6 | python utils/package_skill.py [output-directory] 7 | 8 | Example: 9 | python utils/package_skill.py skills/public/my-skill 10 | python utils/package_skill.py skills/public/my-skill ./dist 11 | """ 12 | 13 | import sys 14 | import zipfile 15 | from pathlib import Path 16 | from quick_validate import validate_skill 17 | 18 | 19 | def package_skill(skill_path, output_dir=None): 20 | """ 21 | Package a skill folder into a zip file. 22 | 23 | Args: 24 | skill_path: Path to the skill folder 25 | output_dir: Optional output directory for the zip file (defaults to current directory) 26 | 27 | Returns: 28 | Path to the created zip file, or None if error 29 | """ 30 | skill_path = Path(skill_path).resolve() 31 | 32 | # Validate skill folder exists 33 | if not skill_path.exists(): 34 | print(f"❌ Error: Skill folder not found: {skill_path}") 35 | return None 36 | 37 | if not skill_path.is_dir(): 38 | print(f"❌ Error: Path is not a directory: {skill_path}") 39 | return None 40 | 41 | # Validate SKILL.md exists 42 | skill_md = skill_path / "SKILL.md" 43 | if not skill_md.exists(): 44 | print(f"❌ Error: SKILL.md not found in {skill_path}") 45 | return None 46 | 47 | # Run validation before packaging 48 | print("🔍 Validating skill...") 49 | valid, message = validate_skill(skill_path) 50 | if not valid: 51 | print(f"❌ Validation failed: {message}") 52 | print(" Please fix the validation errors before packaging.") 53 | return None 54 | print(f"✅ {message}\n") 55 | 56 | # Determine output location 57 | skill_name = skill_path.name 58 | if output_dir: 59 | output_path = Path(output_dir).resolve() 60 | output_path.mkdir(parents=True, exist_ok=True) 61 | else: 62 | output_path = Path.cwd() 63 | 64 | zip_filename = output_path / f"{skill_name}.zip" 65 | 66 | # Create the zip file 67 | try: 68 | with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: 69 | # Walk through the skill directory 70 | for file_path in skill_path.rglob('*'): 71 | if file_path.is_file(): 72 | # Calculate the relative path within the zip 73 | arcname = file_path.relative_to(skill_path.parent) 74 | zipf.write(file_path, arcname) 75 | print(f" Added: {arcname}") 76 | 77 | print(f"\n✅ Successfully packaged skill to: {zip_filename}") 78 | return zip_filename 79 | 80 | except Exception as e: 81 | print(f"❌ Error creating zip file: {e}") 82 | return None 83 | 84 | 85 | def main(): 86 | if len(sys.argv) < 2: 87 | print("Usage: python utils/package_skill.py [output-directory]") 88 | print("\nExample:") 89 | print(" python utils/package_skill.py skills/public/my-skill") 90 | print(" python utils/package_skill.py skills/public/my-skill ./dist") 91 | sys.exit(1) 92 | 93 | skill_path = sys.argv[1] 94 | output_dir = sys.argv[2] if len(sys.argv) > 2 else None 95 | 96 | print(f"📦 Packaging skill: {skill_path}") 97 | if output_dir: 98 | print(f" Output directory: {output_dir}") 99 | print() 100 | 101 | result = package_skill(skill_path, output_dir) 102 | 103 | if result: 104 | sys.exit(0) 105 | else: 106 | sys.exit(1) 107 | 108 | 109 | if __name__ == "__main__": 110 | main() 111 | -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/microsoft/wml-2012.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /document-skills/pdf/scripts/fill_pdf_form_with_annotations.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sys 3 | 4 | from pypdf import PdfReader, PdfWriter 5 | from pypdf.annotations import FreeText 6 | 7 | 8 | # Fills a PDF by adding text annotations defined in `fields.json`. See forms.md. 9 | 10 | 11 | def transform_coordinates(bbox, image_width, image_height, pdf_width, pdf_height): 12 | """Transform bounding box from image coordinates to PDF coordinates""" 13 | # Image coordinates: origin at top-left, y increases downward 14 | # PDF coordinates: origin at bottom-left, y increases upward 15 | x_scale = pdf_width / image_width 16 | y_scale = pdf_height / image_height 17 | 18 | left = bbox[0] * x_scale 19 | right = bbox[2] * x_scale 20 | 21 | # Flip Y coordinates for PDF 22 | top = pdf_height - (bbox[1] * y_scale) 23 | bottom = pdf_height - (bbox[3] * y_scale) 24 | 25 | return left, bottom, right, top 26 | 27 | 28 | def fill_pdf_form(input_pdf_path, fields_json_path, output_pdf_path): 29 | """Fill the PDF form with data from fields.json""" 30 | 31 | # `fields.json` format described in forms.md. 32 | with open(fields_json_path, "r") as f: 33 | fields_data = json.load(f) 34 | 35 | # Open the PDF 36 | reader = PdfReader(input_pdf_path) 37 | writer = PdfWriter() 38 | 39 | # Copy all pages to writer 40 | writer.append(reader) 41 | 42 | # Get PDF dimensions for each page 43 | pdf_dimensions = {} 44 | for i, page in enumerate(reader.pages): 45 | mediabox = page.mediabox 46 | pdf_dimensions[i + 1] = [mediabox.width, mediabox.height] 47 | 48 | # Process each form field 49 | annotations = [] 50 | for field in fields_data["form_fields"]: 51 | page_num = field["page_number"] 52 | 53 | # Get page dimensions and transform coordinates. 54 | page_info = next(p for p in fields_data["pages"] if p["page_number"] == page_num) 55 | image_width = page_info["image_width"] 56 | image_height = page_info["image_height"] 57 | pdf_width, pdf_height = pdf_dimensions[page_num] 58 | 59 | transformed_entry_box = transform_coordinates( 60 | field["entry_bounding_box"], 61 | image_width, image_height, 62 | pdf_width, pdf_height 63 | ) 64 | 65 | # Skip empty fields 66 | if "entry_text" not in field or "text" not in field["entry_text"]: 67 | continue 68 | entry_text = field["entry_text"] 69 | text = entry_text["text"] 70 | if not text: 71 | continue 72 | 73 | font_name = entry_text.get("font", "Arial") 74 | font_size = str(entry_text.get("font_size", 14)) + "pt" 75 | font_color = entry_text.get("font_color", "000000") 76 | 77 | # Font size/color seems to not work reliably across viewers: 78 | # https://github.com/py-pdf/pypdf/issues/2084 79 | annotation = FreeText( 80 | text=text, 81 | rect=transformed_entry_box, 82 | font=font_name, 83 | font_size=font_size, 84 | font_color=font_color, 85 | border_color=None, 86 | background_color=None, 87 | ) 88 | annotations.append(annotation) 89 | # page_number is 0-based for pypdf 90 | writer.add_annotation(page_number=page_num - 1, annotation=annotation) 91 | 92 | # Save the filled PDF 93 | with open(output_pdf_path, "wb") as output: 94 | writer.write(output) 95 | 96 | print(f"Successfully filled PDF form and saved to {output_pdf_path}") 97 | print(f"Added {len(annotations)} text annotations") 98 | 99 | 100 | if __name__ == "__main__": 101 | if len(sys.argv) != 4: 102 | print("Usage: fill_pdf_form_with_annotations.py [input pdf] [fields.json] [output pdf]") 103 | sys.exit(1) 104 | input_pdf = sys.argv[1] 105 | fields_json = sys.argv[2] 106 | output_pdf = sys.argv[3] 107 | 108 | fill_pdf_form(input_pdf, fields_json, output_pdf) -------------------------------------------------------------------------------- /webapp-testing/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: webapp-testing 3 | description: Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs. 4 | license: Complete terms in LICENSE.txt 5 | --- 6 | 7 | # Web Application Testing 8 | 9 | To test local web applications, write native Python Playwright scripts. 10 | 11 | **Helper Scripts Available**: 12 | - `scripts/with_server.py` - Manages server lifecycle (supports multiple servers) 13 | 14 | **Always run scripts with `--help` first** to see usage. DO NOT read the source until you try running the script first and find that a customized solution is abslutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window. 15 | 16 | ## Decision Tree: Choosing Your Approach 17 | 18 | ``` 19 | User task → Is it static HTML? 20 | ├─ Yes → Read HTML file directly to identify selectors 21 | │ ├─ Success → Write Playwright script using selectors 22 | │ └─ Fails/Incomplete → Treat as dynamic (below) 23 | │ 24 | └─ No (dynamic webapp) → Is the server already running? 25 | ├─ No → Run: python scripts/with_server.py --help 26 | │ Then use the helper + write simplified Playwright script 27 | │ 28 | └─ Yes → Reconnaissance-then-action: 29 | 1. Navigate and wait for networkidle 30 | 2. Take screenshot or inspect DOM 31 | 3. Identify selectors from rendered state 32 | 4. Execute actions with discovered selectors 33 | ``` 34 | 35 | ## Example: Using with_server.py 36 | 37 | To start a server, run `--help` first, then use the helper: 38 | 39 | **Single server:** 40 | ```bash 41 | python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py 42 | ``` 43 | 44 | **Multiple servers (e.g., backend + frontend):** 45 | ```bash 46 | python scripts/with_server.py \ 47 | --server "cd backend && python server.py" --port 3000 \ 48 | --server "cd frontend && npm run dev" --port 5173 \ 49 | -- python your_automation.py 50 | ``` 51 | 52 | To create an automation script, include only Playwright logic (servers are managed automatically): 53 | ```python 54 | from playwright.sync_api import sync_playwright 55 | 56 | with sync_playwright() as p: 57 | browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode 58 | page = browser.new_page() 59 | page.goto('http://localhost:5173') # Server already running and ready 60 | page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute 61 | # ... your automation logic 62 | browser.close() 63 | ``` 64 | 65 | ## Reconnaissance-Then-Action Pattern 66 | 67 | 1. **Inspect rendered DOM**: 68 | ```python 69 | page.screenshot(path='/tmp/inspect.png', full_page=True) 70 | content = page.content() 71 | page.locator('button').all() 72 | ``` 73 | 74 | 2. **Identify selectors** from inspection results 75 | 76 | 3. **Execute actions** using discovered selectors 77 | 78 | ## Common Pitfall 79 | 80 | ❌ **Don't** inspect the DOM before waiting for `networkidle` on dynamic apps 81 | ✅ **Do** wait for `page.wait_for_load_state('networkidle')` before inspection 82 | 83 | ## Best Practices 84 | 85 | - **Use bundled scripts as black boxes** - To accomplish a task, consider whether one of the scripts available in `scripts/` can help. These scripts handle common, complex workflows reliably without cluttering the context window. Use `--help` to see usage, then invoke directly. 86 | - Use `sync_playwright()` for synchronous scripts 87 | - Always close the browser when done 88 | - Use descriptive selectors: `text=`, `role=`, CSS selectors, or IDs 89 | - Add appropriate waits: `page.wait_for_selector()` or `page.wait_for_timeout()` 90 | 91 | ## Reference Files 92 | 93 | - **examples/** - Examples showing common patterns: 94 | - `element_discovery.py` - Discovering buttons, links, and inputs on a page 95 | - `static_html_automation.py` - Using file:// URLs for local HTML 96 | - `console_logging.py` - Capturing console logs during automation -------------------------------------------------------------------------------- /webapp-testing/scripts/with_server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Start one or more servers, wait for them to be ready, run a command, then clean up. 4 | 5 | Usage: 6 | # Single server 7 | python scripts/with_server.py --server "npm run dev" --port 5173 -- python automation.py 8 | python scripts/with_server.py --server "npm start" --port 3000 -- python test.py 9 | 10 | # Multiple servers 11 | python scripts/with_server.py \ 12 | --server "cd backend && python server.py" --port 3000 \ 13 | --server "cd frontend && npm run dev" --port 5173 \ 14 | -- python test.py 15 | """ 16 | 17 | import subprocess 18 | import socket 19 | import time 20 | import sys 21 | import argparse 22 | 23 | def is_server_ready(port, timeout=30): 24 | """Wait for server to be ready by polling the port.""" 25 | start_time = time.time() 26 | while time.time() - start_time < timeout: 27 | try: 28 | with socket.create_connection(('localhost', port), timeout=1): 29 | return True 30 | except (socket.error, ConnectionRefusedError): 31 | time.sleep(0.5) 32 | return False 33 | 34 | 35 | def main(): 36 | parser = argparse.ArgumentParser(description='Run command with one or more servers') 37 | parser.add_argument('--server', action='append', dest='servers', required=True, help='Server command (can be repeated)') 38 | parser.add_argument('--port', action='append', dest='ports', type=int, required=True, help='Port for each server (must match --server count)') 39 | parser.add_argument('--timeout', type=int, default=30, help='Timeout in seconds per server (default: 30)') 40 | parser.add_argument('command', nargs=argparse.REMAINDER, help='Command to run after server(s) ready') 41 | 42 | args = parser.parse_args() 43 | 44 | # Remove the '--' separator if present 45 | if args.command and args.command[0] == '--': 46 | args.command = args.command[1:] 47 | 48 | if not args.command: 49 | print("Error: No command specified to run") 50 | sys.exit(1) 51 | 52 | # Parse server configurations 53 | if len(args.servers) != len(args.ports): 54 | print("Error: Number of --server and --port arguments must match") 55 | sys.exit(1) 56 | 57 | servers = [] 58 | for cmd, port in zip(args.servers, args.ports): 59 | servers.append({'cmd': cmd, 'port': port}) 60 | 61 | server_processes = [] 62 | 63 | try: 64 | # Start all servers 65 | for i, server in enumerate(servers): 66 | print(f"Starting server {i+1}/{len(servers)}: {server['cmd']}") 67 | 68 | # Use shell=True to support commands with cd and && 69 | process = subprocess.Popen( 70 | server['cmd'], 71 | shell=True, 72 | stdout=subprocess.PIPE, 73 | stderr=subprocess.PIPE 74 | ) 75 | server_processes.append(process) 76 | 77 | # Wait for this server to be ready 78 | print(f"Waiting for server on port {server['port']}...") 79 | if not is_server_ready(server['port'], timeout=args.timeout): 80 | raise RuntimeError(f"Server failed to start on port {server['port']} within {args.timeout}s") 81 | 82 | print(f"Server ready on port {server['port']}") 83 | 84 | print(f"\nAll {len(servers)} server(s) ready") 85 | 86 | # Run the command 87 | print(f"Running: {' '.join(args.command)}\n") 88 | result = subprocess.run(args.command) 89 | sys.exit(result.returncode) 90 | 91 | finally: 92 | # Clean up all servers 93 | print(f"\nStopping {len(server_processes)} server(s)...") 94 | for i, process in enumerate(server_processes): 95 | try: 96 | process.terminate() 97 | process.wait(timeout=5) 98 | except subprocess.TimeoutExpired: 99 | process.kill() 100 | process.wait() 101 | print(f"Server {i+1} stopped") 102 | print("All servers stopped") 103 | 104 | 105 | if __name__ == '__main__': 106 | main() -------------------------------------------------------------------------------- /slack-gif-creator/templates/shake.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Shake Animation Template - Creates shaking/vibrating motion. 4 | 5 | Use this for impact effects, emphasis, or nervous/excited reactions. 6 | """ 7 | 8 | import sys 9 | import math 10 | from pathlib import Path 11 | 12 | sys.path.append(str(Path(__file__).parent.parent)) 13 | 14 | from core.gif_builder import GIFBuilder 15 | from core.frame_composer import create_blank_frame, draw_circle, draw_emoji, draw_text 16 | from core.easing import ease_out_quad 17 | 18 | 19 | def create_shake_animation( 20 | object_type: str = 'emoji', 21 | object_data: dict = None, 22 | num_frames: int = 20, 23 | shake_intensity: int = 15, 24 | center_x: int = 240, 25 | center_y: int = 240, 26 | direction: str = 'horizontal', # 'horizontal', 'vertical', or 'both' 27 | frame_width: int = 480, 28 | frame_height: int = 480, 29 | bg_color: tuple[int, int, int] = (255, 255, 255) 30 | ) -> list: 31 | """ 32 | Create frames for a shaking animation. 33 | 34 | Args: 35 | object_type: 'circle', 'emoji', 'text', or 'custom' 36 | object_data: Data for the object 37 | num_frames: Number of frames 38 | shake_intensity: Maximum shake displacement in pixels 39 | center_x: Center X position 40 | center_y: Center Y position 41 | direction: 'horizontal', 'vertical', or 'both' 42 | frame_width: Frame width 43 | frame_height: Frame height 44 | bg_color: Background color 45 | 46 | Returns: 47 | List of frames 48 | """ 49 | frames = [] 50 | 51 | # Default object data 52 | if object_data is None: 53 | if object_type == 'emoji': 54 | object_data = {'emoji': '😱', 'size': 80} 55 | elif object_type == 'text': 56 | object_data = {'text': 'SHAKE!', 'font_size': 50, 'color': (255, 0, 0)} 57 | 58 | for i in range(num_frames): 59 | frame = create_blank_frame(frame_width, frame_height, bg_color) 60 | 61 | # Calculate progress 62 | t = i / (num_frames - 1) if num_frames > 1 else 0 63 | 64 | # Decay shake intensity over time 65 | intensity = shake_intensity * (1 - ease_out_quad(t)) 66 | 67 | # Calculate shake offset using sine wave for smooth oscillation 68 | freq = 3 # Oscillation frequency 69 | offset_x = 0 70 | offset_y = 0 71 | 72 | if direction in ['horizontal', 'both']: 73 | offset_x = int(math.sin(t * freq * 2 * math.pi) * intensity) 74 | 75 | if direction in ['vertical', 'both']: 76 | offset_y = int(math.cos(t * freq * 2 * math.pi) * intensity) 77 | 78 | # Apply offset 79 | x = center_x + offset_x 80 | y = center_y + offset_y 81 | 82 | # Draw object 83 | if object_type == 'emoji': 84 | draw_emoji( 85 | frame, 86 | emoji=object_data['emoji'], 87 | position=(x - object_data['size'] // 2, y - object_data['size'] // 2), 88 | size=object_data['size'] 89 | ) 90 | elif object_type == 'text': 91 | draw_text( 92 | frame, 93 | text=object_data['text'], 94 | position=(x, y), 95 | font_size=object_data['font_size'], 96 | color=object_data['color'], 97 | centered=True 98 | ) 99 | elif object_type == 'circle': 100 | draw_circle( 101 | frame, 102 | center=(x, y), 103 | radius=object_data.get('radius', 30), 104 | fill_color=object_data.get('color', (100, 100, 255)) 105 | ) 106 | 107 | frames.append(frame) 108 | 109 | return frames 110 | 111 | 112 | # Example usage 113 | if __name__ == '__main__': 114 | print("Creating shake GIF...") 115 | 116 | builder = GIFBuilder(width=480, height=480, fps=24) 117 | 118 | frames = create_shake_animation( 119 | object_type='emoji', 120 | object_data={'emoji': '😱', 'size': 100}, 121 | num_frames=30, 122 | shake_intensity=20, 123 | direction='both' 124 | ) 125 | 126 | builder.add_frames(frames) 127 | builder.save('shake_test.gif', num_colors=128) -------------------------------------------------------------------------------- /document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /raffle-winner-picker/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: raffle-winner-picker 3 | description: Picks random winners from lists, spreadsheets, or Google Sheets for giveaways, raffles, and contests. Ensures fair, unbiased selection with transparency. 4 | --- 5 | 6 | # Raffle Winner Picker 7 | 8 | This skill randomly selects winners from lists, spreadsheets, or Google Sheets for giveaways and contests. 9 | 10 | ## When to Use This Skill 11 | 12 | - Running social media giveaways 13 | - Picking raffle winners at events 14 | - Randomly selecting participants for surveys or tests 15 | - Choosing winners from contest submissions 16 | - Fair distribution of limited spots or resources 17 | - Random team assignments 18 | 19 | ## What This Skill Does 20 | 21 | 1. **Random Selection**: Uses cryptographically random selection 22 | 2. **Multiple Sources**: Works with CSV, Excel, Google Sheets, or plain lists 23 | 3. **Multiple Winners**: Can pick one or multiple winners 24 | 4. **Duplicate Prevention**: Ensures the same person can't win twice 25 | 5. **Transparent Results**: Shows the selection process clearly 26 | 6. **Winner Details**: Displays all relevant information about winners 27 | 28 | ## How to Use 29 | 30 | ### From Google Sheets 31 | 32 | ``` 33 | Pick a random row from this Google Sheet to select a winner 34 | for a giveaway: [Sheet URL] 35 | ``` 36 | 37 | ### From Local File 38 | 39 | ``` 40 | Pick 3 random winners from entries.csv 41 | ``` 42 | 43 | ### From List 44 | 45 | ``` 46 | Pick a random winner from this list: 47 | - Alice (alice@email.com) 48 | - Bob (bob@email.com) 49 | - Carol (carol@email.com) 50 | ... 51 | ``` 52 | 53 | ### Multiple Winners 54 | 55 | ``` 56 | Pick 5 random winners from contest-entries.xlsx, 57 | make sure no duplicates 58 | ``` 59 | 60 | ## Example 61 | 62 | **User**: "Pick a random row from this Google Sheet to select a winner for a giveaway." 63 | 64 | **Output**: 65 | ``` 66 | Accessing Google Sheet... 67 | Total entries found: 247 68 | 69 | Randomly selecting winner... 70 | 71 | 🎉 WINNER SELECTED! 🎉 72 | 73 | Row #142 74 | Name: Sarah Johnson 75 | Email: sarah.j@email.com 76 | Entry Date: March 10, 2024 77 | Comment: "Love your newsletter!" 78 | 79 | Selection method: Cryptographically random 80 | Timestamp: 2024-03-15 14:32:18 UTC 81 | 82 | Would you like to: 83 | - Pick another winner (excluding Sarah)? 84 | - Export winner details? 85 | - Pick runner-ups? 86 | ``` 87 | 88 | **Inspired by:** Lenny's use case - picking a Sora 2 giveaway winner from his subscriber Slack community 89 | 90 | ## Features 91 | 92 | ### Fair Selection 93 | - Uses secure random number generation 94 | - No bias or patterns 95 | - Transparent process 96 | - Repeatable with seed (for verification) 97 | 98 | ### Exclusions 99 | ``` 100 | Pick a random winner excluding previous winners: 101 | Alice, Bob, Carol 102 | ``` 103 | 104 | ### Weighted Selection 105 | ``` 106 | Pick a winner with weighted probability based on 107 | the "entries" column (1 entry = 1 ticket) 108 | ``` 109 | 110 | ### Runner-ups 111 | ``` 112 | Pick 1 winner and 3 runner-ups from the list 113 | ``` 114 | 115 | ## Example Workflows 116 | 117 | ### Social Media Giveaway 118 | 1. Export entries from Google Form to Sheets 119 | 2. "Pick a random winner from [Sheet URL]" 120 | 3. Verify winner details 121 | 4. Announce publicly with timestamp 122 | 123 | ### Event Raffle 124 | 1. Create CSV of attendee names and emails 125 | 2. "Pick 10 random winners from attendees.csv" 126 | 3. Export winner list 127 | 4. Email winners directly 128 | 129 | ### Team Assignment 130 | 1. Have list of participants 131 | 2. "Randomly split this list into 4 equal teams" 132 | 3. Review assignments 133 | 4. Share team rosters 134 | 135 | ## Tips 136 | 137 | - **Document the process**: Save the timestamp and method 138 | - **Public announcement**: Share selection details for transparency 139 | - **Check eligibility**: Verify winner meets contest rules 140 | - **Have backups**: Pick runner-ups in case winner is ineligible 141 | - **Export results**: Save winner list for records 142 | 143 | ## Privacy & Fairness 144 | 145 | ✓ Uses cryptographically secure randomness 146 | ✓ No manipulation possible 147 | ✓ Timestamp recorded for verification 148 | ✓ Can provide seed for third-party verification 149 | ✓ Respects data privacy 150 | 151 | ## Common Use Cases 152 | 153 | - Newsletter subscriber giveaways 154 | - Product launch raffles 155 | - Conference ticket drawings 156 | - Beta tester selection 157 | - Focus group participant selection 158 | - Random prize distribution at events 159 | 160 | -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/IBMPlexMono-OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /canvas-design/canvas-fonts/PoiretOne-OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011, Denis Masharov (denis.masharov@gmail.com) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | --------------------------------------------------------------------------------