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 / release.md
Last active June 12, 2026 11:33
Release 2.0.1

Release PRD: v2.0.1 (post-2.0.0 fixes)

Goal

Cut a patch release v2.0.1 of @kickstartds/telekom-salespartner-kit that bundles the 13 follow-up fixes landed on main after v2.0.0 (form-field behaviour and styling, header/footer regressions, missing icon/font, copy corrections). Produce all release artifacts (snapshots, diffs, changelog, per-module docs), publish to npm, integrate into the sibling website-toolkit repo.

Here's how I'd approach it. Quick summary of what's in place today so the plan is grounded:

  • The Image from @unpic/react/nextjs is wired up centrally in ComponentProviders.tsx — i.e. there's one funnel for every image render.
  • Storyblok URLs flow through as https://a.storyblok.com/f/<space>/<WxH>/<hash>/<name> (visible in types/components-presets.json). The <hash> is a perfect dedup key.
  • The project is already targeted at Cloudflare (wrangler.jsonc, open-next.config.ts).

Recommended shape

1. Don't do the upload inside getStaticProps. Do the rewrite there, but the upload in a dedicated pre-build step.

@julrich
julrich / DESIGN.md
Created March 19, 2026 22:15
DESIGN.md

DESIGN.md

Overview

A modern, professional design system for a content-rich corporate website built with kickstartDS. The visual language balances clean professionalism with a distinct teal-green brand identity. The design favors generous whitespace, clear typographic hierarchy, and subtle depth through shadows and border radiuses. Accessibility and responsive scaling are first-class concerns — typography, spacing, and layout all scale fluidly across breakpoints using a factor-based token system.

The overall feel is confident and structured, with a 3-tier token architecture (branding → semantic → component) that ensures consistency at every level while remaining fully themeable.

Colors

@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");