Skip to content
Back to skills

Mjdesign

ASecurity

Turn a post, moment, note, chart or idea into an MJ Research visual explainer — a 4:5 still image (1080x1350 PNG) and a 9:16 short video (1080x1920 MP4, ~11s, preview frame = final image), optional looping GIF where the diagram draws itself and the headline builds word by word. Drex-style editorial format (line-art diagram, engraved hatching, one emphasised headline word) in MJ Research colours (linen/enamel, oxide/cadmium/cobalt/verdigris) and type (Bricolage Grotesque + Departure Mono). Use...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
ai-agentsrustgobashnodeawsfrontend

Works with

  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 8 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add The-Utopia-Studio/skills --skill mjdesign --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mjdesign?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mjdesign
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/the-utopia-studio-mjdesign/badge)](https://www.skillsdirectory.com/skills/the-utopia-studio-mjdesign)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: mjdesign
description: Turn a post, moment, note, chart or idea into an MJ Research visual explainer — a 4:5 still image (1080x1350 PNG) and a 9:16 short video (1080x1920 MP4, ~11s, preview frame = final image), optional looping GIF where the diagram draws itself and the headline builds word by word. Drex-style editorial format (line-art diagram, engraved hatching, one emphasised headline word) in MJ Research colours (linen/enamel, oxide/cadmium/cobalt/verdigris) and type (Bricolage Grotesque + Departure Mono). Use when the user says /mjdesign, or asks to "make a visual / graphic / reel / short video / carousel image / post image" for a post, insight, market moment, release or idea, especially for Mario Jude / MJ Research.
---

# /mjdesign

One idea in, one picture and one short video out. The format: a mono kicker bar, a hairline rule, a line-art figure that *explains* the idea, a heavy headline with one word in italic caps and accent colour, a short body line, an optional big mono stat, a mono footer. Linen ground with grain by default.

Inspiration is drex.design (visual explainers for writers: diagrams and engraved illustration that make an idea legible at a glance). Copy the *method*, not the work: every image must carry a diagram of this post's actual idea.

## Steps

1. **Distil the post** into: a headline of 4–9 words with exactly one `*word*` (the turn of the idea), one body sentence (≤ 18 words), optional stat (`value` + short `label`), a kicker (`MJ Research · <topic>`), an index (`No. 0xx`) and a footer (`mjresearch · DD.MM.YYYY`). Write in British English.
2. **Draw the figure** — this is the part that matters. Write an inline SVG that shows the mechanism of the idea, not decoration: two lines diverging, a funnel narrowing, a ladder, a before/after split, a node graph, a sunburst from one cause. Rules:
   - `fill="none" stroke="currentColor"` on the root; stroke widths 1.2–2 for structure, 4–6 for the one line that matters.
   - Mark the one element that carries the point with `class="accent"` (gets the accent colour). Only one or two accent elements.
   - Engraving texture: `fill="url(#hatch)"`, `url(#cross)` or `url(#dots)` on areas. No solid colour blocks, no gradients, no text inside the SVG (the headline does the talking).
   - Order elements in the order they should draw: axes/frame first, context next, the accent last. Stroked shapes draw themselves over 1–5s; hatched fills fade in after their outline; dashed strokes (`stroke-dasharray`) fade instead of drawing.
   - Keep it under ~120 elements. Any `viewBox` works; it is fitted to the figure area.
   - No idea for a diagram? Use a built-in motif: `"figure": "sunburst"` (a single cause radiating), `"tunnel"` (depth, focus, a frame within a frame) or `"orbit"` (a system, cycles, things around a centre).
3. **Write the spec** to the session scratchpad (never the repo), e.g. `post.json`:
   ```json
   {
     "slug": "breadth-narrowing",
     "kicker": "MJ Research · Breadth", "index": "No. 014",
     "headline": "The index climbs while its *base* thins",
     "body": "Fewer names carry the tape. Ten stocks now explain most of this year's gain.",
     "stat": { "value": "27%", "label": "of S&P 500 above their 50-day" },
     "accent": "oxide", "ground": "linen",
     "footer": "mjresearch · 24.10.2026",
     "figure": "<svg viewBox='0 0 900 560' fill='none' stroke='currentColor' stroke-width='2'>…</svg>"
   }
   ```
   `accent`: `oxide` (default, rust — risk, warning, the point), `cadmium` (gold — gain, insight), `cobalt` (blue — data, structure), `verdigris` (green — health, growth). `ground`: `linen` (default) or `enamel` (dark). Optional `duration` (seconds, default 10). Full examples: `examples/breadth.json`, `examples/conviction.json`.
4. **Render** (first run only: `npm install` in this skill directory; it uses the system Google Chrome, no browser download):
   ```bash
   node ~/.claude/skills/mjdesign/render.mjs post.json <outdir>          # both
   node ~/.claude/skills/mjdesign/render.mjs post.json <outdir> --still  # PNG only
   node ~/.claude/skills/mjdesign/render.mjs post.json <outdir> --video  # MP4 only
   node ~/.claude/skills/mjdesign/render.mjs post.json <outdir> --gif    # add a looping 4:5 GIF (720x900, 12fps)
   ```
   The MP4 and GIF open on the finished composition for 1s, fade to the empty page, build, then hold. Platforms use the first frame as the preview, so the preview is the final image. Do not remove this intro.

   **Which file for where:** MP4 is the default for LinkedIn, Instagram Reels and X. LinkedIn autoplays native video muted in the feed, and the quality is far better. Use the GIF only for a looping inline image (a LinkedIn *image* post uploaded through the photo button, Slack, email, docs). LinkedIn's GIF limit is reported at 2–5MB, so the renderer warns above 2MB. The GIF has no grain, because noise breaks GIF compression.
   It fails loudly if a font does not load (Bricolage comes from Google Fonts, so it needs network) or the template throws.
5. **Look at the output before handing it over.** Read the PNG. For the video, tile frames and read that (frame 0 must be the finished image):
   `ffmpeg -i x.mp4 -vf "select='eq(n\,0)+eq(n\,60)+eq(n\,150)+eq(n\,341)',scale=360:-1,tile=4x1" -frames:v 1 -vsync vfr strip.png`
   Check: the figure reads as the idea without the caption, nothing overlaps the headline, the headline fits in ≤ 3 lines, one accent word only. Fix the spec and re-render; do not hand over a first draft you have not seen.
6. Send the files to the user (SendUserFile) with one line saying what the figure shows.

## Do not

- Edit `template.html` to make one post fit. Shorten the copy or redraw the figure instead. Change the template only when the format itself should change, and say so.
- Use colours or fonts outside the tokens in `template.html` (copied from `ai-hedge-fund/frontend/src/index.css` in the Mario Jude Fund repo; keep them in sync if the brand changes).
- Put a client's or a third party's logo, likeness or branding in the figure.

Files in this skill

  • SKILL.md6 KB
  • examples/breadth.json973 B
  • examples/conviction.json334 B
  • fonts/DepartureMono-LICENSE.txt4.3 KB
  • fonts/DepartureMono-Regular.woff222 KB
  • package.json115 B
  • render.mjs4.8 KB
  • template.html9.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.