Skip to content
Conduit

skill

portfolio-pipeline

From a code repository to a verified case study, live in six languages: four Claude Code skills and a WordPress plugin that automate the DigiFluss portfolio.

monellonasti/portfolio-pipelinecommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/monellonasti/portfolio-pipeline itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 28, 2026

Portfolio Pipeline

From a code repository to a verified case study, live on a WordPress site in six languages.

Four Claude Code skills and a WordPress plugin, built at DigiFluss to automate the page that sells our work best and used to be the slowest to write: the portfolio case study.

Leggi in italiano

One case study, written in Italian and translated by the plugin, live on digifluss.com in six languages.

The process before

On 9 August 2026 we wrote our first case study (Look And Feel Better, a Shopify theme we designed and built) by steering Claude Code through a 20 KB prompt, one message at a time. It took 2 h 47 min and 7 follow-up messages. Three of them added facts only we knew: our role, the timeline, work that never shows up in the code. Four corrected the output: remove the AI-sounding dashes (twice), explain the design choices, redo the screenshots, rename the image files.

Then the text had to reach the website. Our WordPress plugin took a case study one field at a time in wp-admin, in Italian only, on a site that speaks six languages.

Every correction became a rule

We did not want to type those seven messages again for every project, so each one moved into the system:

What we had to say on 9 AugustWhere it lives now
Our role, the timeline, the catalog we digitized for the clientCONTEXT.md, a file the pipeline reads as evidence and never overwrites. Missing facts come back as at most 7 questions, never as guesses
"Take the screenshots"Phase 5 of /portfolio: Playwright shot lists, every image opened and checked before it is kept
"Remove the AI patterns, like the dashes" (twice)writing-rules.md bans em dashes, arrow chains and stock phrases, and the reviewer checks for them
"Explain why green, and where the accents go"quality-bar.md: the design section gives every color a role and lists where it appears
"Show the badges, the filters, the announcement bar"screenshot-playbook.md: 4 to 7 close-up detail shots, because craft shows up close
"Rename the files with the project name"Every file is prefixed with the project slug, so galleries never collide

The next day the first automated runs came out thinner than the hand-made case study. The fix was the same move: the hand-made case study became quality-bar.md, the minimum every run is checked against (15+ evidence records, mechanisms named with file paths, counted numbers, close-up shots).

The dash rule had one more place to reach. On 28 September we noticed that the translations put the dashes back (28 in the English version of Look And Feel Better, 40 in Frequency School's), because the translation prompt did not carry our writing rules. Since plugin 1.11.7 it does, and all 15 live translations were redone: not one dash is left.

Before and after

BeforeAfter
Our messages after the first command7: three facts, four corrections1: the facts only we had
Time to a finished package2 h 47 min39 min, independent review included
Evidencecited inline in the draft, checked by usa ledger of 44 numbered records with source and confidence, re-checked by a reviewer
Quality controlus, reading the drafta separate reviewer agent: 7 scored areas, 81/100 raised to 88 by its fixes
Getting it into WordPressevery field typed in wp-adminone Markdown import fills 18 fields and the repeatable blocks; nothing is saved until we press Update
LanguagesItalianItalian plus five translations in one click, published only when complete

"Before" is our first case study (9 August 2026) and the plugin before version 1.7.0. "After" is a pipeline run on a new in-house project (23 September 2026). They are two different projects, and the first run also had to invent the method, so the times are indicative, not a benchmark. The clearer change is where our time goes: from correcting drafts to supplying facts. Sources and method: docs/METRICS.md.

How it works

flowchart LR
    R["Repository<br/>+ live product"]
    subgraph O["/portfolio-pipeline: checkpoints, resumable state"]
        P["/portfolio<br/>analysis, evidence,<br/>screenshots"]
        V["/portfolio-review<br/>independent review,<br/>approval gate"]
        U["/portfolio-publish<br/>import bundle"]
        P --> V
        V -->|approved| U
    end
    W["WordPress plugin<br/>Markdown import"]
    T["Claude API<br/>5 translations"]
    L["Live case study<br/>6 languages"]
    R --> P
    U --> W --> T --> L

/portfolio reads the repository (code, schema, configuration, git history), checks the live product, and builds an evidence ledger before writing any copy. Every claim gets a numbered record with its source (code, runtime, git, user-context and so on) and a confidence level. When sources disagree, the running product wins over the code, and the code over the docs. Only then does it write CASE-STUDY.md, a schema-validated project.json and the screenshots.

/portfolio-review hands the package to a separate agent that receives only the file paths and a checklist, never the creator's reasoning, so it has to re-derive the facts from the sources. It scores seven areas (accuracy, evidence, portfolio value, technical depth, visual story, copy, privacy), fixes what is safe to fix, and is the only step allowed to set approvedForPublish. On Frequency School it found that a page-weight figure in the draft ("about 560 KB") could not be reproduced: the number was removed everywhere and replaced with the weight of the theme's CSS and JavaScript, which anyone can check in DevTools.

/portfolio-publish refuses to run without that approval. It studies the target site's content model and maps the package onto it instead of building a parallel system. For our WordPress site it produces an import bundle: the Markdown file, the images at the sizes the theme uses, and the short list of fields that stay manual.

The WordPress plugin reads the Markdown file in the browser and fills 18 fields plus the repeatable blocks (design, capabilities, technical deep dives). Values still marked [to confirm] are skipped on purpose. A translate button then sends the case study to the Claude API once per language, with a progress bar and a stop button. The request uses structured outputs, with a JSON schema built from the case study's own fields, so the answer always parses and keeps exactly the Italian keys. The translation prompt carries the same no-dash rule as the Italian copy, and a language goes live only when every Italian field has a complete translation. The calls start from the server, so the key is never exposed to the site's visitors.

/portfolio-pipeline runs the steps in order through five checkpoints and keeps its state in .portfolio/pipeline.json, so an interrupted run continues from its last step instead of starting over.

Guardrails

  • Evidence first. Business metrics, team size, development time and our role never appear without evidence. When they are plausible but unverified, they become questions for us.
  • People have the last word. CONTEXT.md (facts) and OVERRIDES.md (editorial decisions) are never overwritten. An override beats the automation, unless it would force a false statement.
  • Privacy is filtered twice, when the package is created and again right before publishing: no credentials, no personal data, no internal URLs, no client names flagged as confidential.
  • Hands off production. The analysis never buys, submits forms or changes data on the product it studies. Publishing writes to the site's codebase or to an import bundle; deploying stays a human decision.

What stays manual

  • Facts only we know: our role, the timeline, whether a client can be named.
  • The final title, the cover and gallery uploads, a handful of fields (goal, integrations, accent colors) and the Publish button.
  • Starting the translations, from the project page in wp-admin.

Results so far

Between 9 August and 28 September 2026:

  • 8 projects analyzed by the pipeline, with 424 numbered evidence records in total (from 26 to 92 per project).
  • 3 packages approved by the independent review: Frequency School (91/100), an in-house Shopify app (88/100) and TOPTOUR Portugal (69/100 on the first pass, approved once its fixes were in and we had confirmed the live site).
  • Live on digifluss.com in six languages: Frequency School, TOPTOUR Portugal and the hand-made reference, Look And Feel Better. The last translation run took 15 calls and 26 minutes, all of them right on the first call.

Repository layout

skills/
  portfolio/            analysis, evidence ledger, screenshots, case study
  portfolio-review/     independent review, scoring, approval gate
  portfolio-publish/    publishing to the portfolio site (codebase or import bundle)
  portfolio-pipeline/   orchestrator, shared references, JSON schema, templates, scripts
wordpress-plugin/
  digifluss-portfolio/  "Progetti" post type, Markdown importer, AI translation, case study templates
docs/
  METRICS.md            how every number in this README was measured

Using it

Requirements: Claude Code with skills and subagents, Python 3 with playwright for screenshots (it drives the system Chrome) and, optionally, jsonschema for validation.

git clone https://github.com/monellonasti/portfolio-pipeline.git
cp -r portfolio-pipeline/skills/* ~/.claude/skills/
pip install playwright jsonschema

Then, from the root of any project:

/portfolio-pipeline https://example.com | Role: Full-stack developer | Year: 2026

Everything after the command is context: URLs get verified and Key: value pairs fill project fields. Case studies are written in Italian by default; add Language: English to change that. The first /portfolio-publish asks where your portfolio site lives and remembers it in ~/.claude/portfolio/config.json. More in skills/portfolio-pipeline/README.md.

The WordPress plugin is built for the DigiFluss theme and falls back to its own styles on other themes. Its admin screens are in Italian. Copy wordpress-plugin/digifluss-portfolio into wp-content/plugins/, activate it, and add an Anthropic API key under Portfolio > AI (stack) to enable translations.

License

Skills and documentation: MIT. The WordPress plugin in wordpress-plugin/ is GPL-2.0-or-later, as declared in its header.

↑↓ navigate openesc close