Skip to content

Instantly share code, notes, and snippets.

View julrich's full-sized avatar
🍋
squeezing!

Jonas Ulrich julrich

🍋
squeezing!
View GitHub Profile
@julrich
julrich / create-page.md
Created March 5, 2026 09:37
Create Page Skill for Storyblok

Neue Seite von Grund auf erstellen

Wann verwenden

Der Editor möchte eine neue Seite in Storyblok erstellen und beschreibt den gewünschten Inhalt in natürlicher Sprache – z.B. „Erstelle eine Landing Page für unser neues Produkt mit Hero, Features und FAQ".

Voraussetzungen

  • Der Editor hat eine grobe Vorstellung vom Seiteninhalt (Thema, Zweck, Zielgruppe)
  • Optional: Texte, Bilder oder URLs als Ausgangsmaterial

Content Operations – n8n Workflows mit dem Storyblok MCP Server

This document describes automation workflows that editors can build using n8n connected to the Storyblok MCP Server via an MCP client node. Each workflow combines MCP tools with external n8n nodes to automate content production, quality assurance, and housekeeping.


🔴 Höchste Priorität: Content-Produktion automatisieren

1. Bulk-Seiten-Generierung aus Datenquellen

@julrich
julrich / stackbit.config.ts
Created February 4, 2026 10:11
Stackbit config export
export default defineStackbitConfig({
stackbitVersion: "~0.6.0",
ssgName: "custom",
devCommand: [
"npm run _assemble:build:tokens",
"npx @11ty/eleventy --serve --port={PORT} --incremental --config=scripts/stackbit.eleventy.js",
].join(" && "),
experimental: {
ssg: {
name: "eleventy",
@julrich
julrich / .rm-distrc.schema.json
Created February 24, 2025 11:54
Complex CLI task
{
"definitions": {},
"$schema": "http://json-schema.org/draft-06/schema#",
"$id": "https://ruhmesmeile.com/rm-dist.json",
"type": "object",
"title": "ruhmesmeile Basiswebsite / rm-dist configuration",
"required": [
"project",
"configuration",
"remote",
@julrich
julrich / hero.schema.json
Created August 1, 2024 13:51
JSON Schema for UI / content
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://schema.redacted.de/hero.schema.json",
"title": "Hero",
"description": "Prominente Bild- oder Videodarstellung mit Option für Text und Cta",
"type": "object",
"properties": {
"textPosition": {
"type": "string",
"title": "Textposition",
@julrich
julrich / Providers.tsx
Last active May 9, 2024 16:15
Unpic blurhash handling with React
function isStoryblokAsset(object: unknown): object is AssetStoryblok {
return (object as AssetStoryblok)?.filename !== undefined;
}
const Picture = forwardRef<
HTMLImageElement,
PictureProps & ImgHTMLAttributes<HTMLImageElement>
>(({ src, lazy, ...props }, ref) => {
const internalRef = useRef<HTMLImageElement>(null);
@julrich
julrich / prepareProject.js
Created April 30, 2024 12:12
Storyblok Node.js script
const fs = require("node:fs");
const PromiseThrottle = require("promise-throttle");
const FormData = require("form-data");
const { traverse } = require("object-traversal");
const sizeOf = require("image-size");
const StoryblokClient = require("storyblok-js-client");
const { v4: uuidv4 } = require("uuid");
const jsonpointer = require("jsonpointer");
const designSystemPresets = require("@kickstartds/ds-agency-premium/presets.json");
const generatedComponents = require("../cms/components.123456.json");
# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
"" "";
default "immutable";
}
##
# Connection header for WebSocket reverse proxy
##
map $http_upgrade $connection_upgrade {
@julrich
julrich / cport.json
Created April 3, 2024 13:35
Conversion result for kickstartDS Schema and cport converter
{
"components": [
{
"id": "headline",
"name": "Headline",
"groups": [
{
"id": "default",
"name": "Default",
"contentTypeId": "headline",
@julrich
julrich / createPresets.test.ts
Last active January 29, 2024 11:58
Storybook "Extraction" revamped
/// <reference types="vite/client"/>
// @vitest-environment happy-dom
import path from "node:path";
import fs from "node:fs";
import fg from "fast-glob";
import { describe, test } from "vitest";
import { ReactRenderer, composeStories } from "@storybook/react";
import { Store_CSFExports } from "@storybook/types";
import reactElementToJSXString from "react-element-to-jsx-string";