# Sourcecraft Publisher

> Publish static page artifacts to SourceCraft Sites (Yandex infrastructure, works in Russia), with advisory image optimization and an original-image path. Use when a static page/React artifact needs to be deployed to SourceCraft under YYYY/YYYY-MM/page-slug directory layout.

- **Type:** Skill
- **Install:** `agentstack add skill-artwist-polyakov-polyakov-claude-skills-sourcecraft-publisher`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [artwist-polyakov](https://agentstack.voostack.com/s/artwist-polyakov)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [artwist-polyakov](https://github.com/artwist-polyakov)
- **Source:** https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/sourcecraft-publisher/skills/sourcecraft-publisher

## Install

```sh
agentstack add skill-artwist-polyakov-polyakov-claude-skills-sourcecraft-publisher
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# SourceCraft Publisher

Publish already-built static artifacts to a SourceCraft Sites repository. Works from Russia (Yandex infrastructure).

This skill is the **deployment/output layer** for page artifacts created by other skills (e.g. `telegram-channel-parser` digest).

## Required repository layout

Every published artifact must go into this path shape inside the target repo:

`/-//`

Example:
- `2026/2026-03/ai-digest-week/`

Never publish flat at repo root. Never skip the year or year-month nesting.

## What this skill expects

Input should already exist as one of these:
- a folder of built static files
- a single HTML artifact plus local assets
- a small static site ready to serve from a subdirectory

This skill does not do frontend design work. It packages and publishes what already exists.

## Config

Read `config/README.md` for required environment variables and token setup.

```bash
cp config/.env.example config/.env
```

Required: `SOURCECRAFT_TOKEN`, `SOURCECRAFT_REPO`, `SOURCECRAFT_SITE_URL`.

## Workflow

1. Determine the publish date bucket:
   - year = `YYYY`
   - year-month = `YYYY-MM`
2. Create or update target directory:
   - `///`
3. Copy artifact files into that directory
4. Verify there is an entrypoint (`index.html` normally)
5. Ensure `.sourcecraft/sites.yaml` exists in repo root
6. Commit and force-push to the SourceCraft repo
7. Return the final public URL

## Publishing command

```bash
python3 scripts/publish_static.py --source  --slug  [--date YYYY-MM-DD] [--image-max-kb 500]
```

The script:
- Clones the SourceCraft repo (shallow)
- Ensures `.sourcecraft/sites.yaml` config exists
- Copies artifact into `YYYY/YYYY-MM/slug/`
- Optimizes oversized `.jpg`, `.jpeg`, `.png`, and `.webp` images before commit
- Commits and force-pushes
- Prints the final public URL

## Image optimization

Image optimization is a recommendation, not a hard requirement. By default, the publishing script tries to keep each raster image under `500KB` by stripping metadata, recompressing, and resizing long edges when needed.

Use `--image-max-kb ` for a different target.
Use `--keep-large-images` or `--image-max-kb 0` when the user explicitly needs original-size images (for example, a full-resolution infographic, map, or downloadable media asset).

The original `--source` artifact is not changed. Optimization happens only after files are copied into the publish repo target directory. If Pillow/uv is unavailable or optimization fails, continue publishing originals and mention the warning.

Manual console run for a prepared artifact:

```bash
uv run --with pillow python3 scripts/optimize_images.py  --max-kb 500
```

## Slug rules

- use lowercase letters, digits, and hyphens
- keep it short and descriptive
- avoid spaces, underscores, Cyrillic

## URL contract

Always return the final public URL:
`//-//`

## Pre-publish validation

Before pushing, verify:
- artifact has `index.html` entrypoint
- oversized raster images are optimized when practical, unless original-size sharing is intentional
- no absolute local paths in HTML/CSS
- no secrets in files
- all local assets reachable from the target folder

## Safety rules

- do not delete unrelated directories in the repo
- only replace contents of the target page directory
- if overwriting, say so in the result
- do not expose the token in output, logs, or committed files

## References

Read if needed:
- `references/publish-checklist.md` — operational checklist before pushing

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [artwist-polyakov](https://github.com/artwist-polyakov)
- **Source:** [artwist-polyakov/polyakov-claude-skills](https://github.com/artwist-polyakov/polyakov-claude-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-artwist-polyakov-polyakov-claude-skills-sourcecraft-publisher
- Seller: https://agentstack.voostack.com/s/artwist-polyakov
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
