The fileDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/hetari/creative-coding/llms.txt
Use this file to discover all available pages before exploring further.
src/config/sketches.ts exports a single typed SKETCHES: SketchMeta[] array that drives the entire Creative Coding playground. Every feature that needs to know about a sketch — the Vue Router route table, the dashboard card grid, the iframe/image preview toggle, and the nested category hierarchy — reads from this one array. Adding a sketch means adding one entry here; nothing else needs to be touched.
The SketchMeta Interface
Each entry in the SKETCHES array must conform to the SketchMeta interface. The full type definition is:
Field Reference
A unique, kebab-case identifier for the sketch. Used as a stable key throughout the application — for example, as a Vue
key attribute when rendering card lists. The convention is to join the full category path and sketch name with hyphens, e.g. 'gsap-footer-ascii-hand'.The human-readable display name shown on the dashboard card and in the page title. This value is used directly — no slug transformation is applied. Example:
'Ascii Hand', 'Reveal Loader'.A slash-separated path that places the sketch within the category hierarchy. A single segment (e.g.
'shader') means the sketch lives directly under a top-level category. Multiple segments (e.g. 'gsap/footer') create nested sub-categories. The dashboard uses this field to build its folder structure — each unique segment becomes either a folder card or a leaf card depending on depth.The full URL path that Vue Router registers for this sketch, without a trailing slash. Must begin with
/ and should mirror the category hierarchy, e.g. '/gsap/footer/ascii-hand'. This value is also used by getSketchByPath() to resolve the active sketch from the current URL.A numeric sort key controlling the order in which sketches and categories appear on the dashboard. Lower numbers are listed first. The recommended convention is to use multiples of 10 (0, 10, 20, 30, …) so that future sketches can be inserted between existing ones without renumbering.
Controls how the sketch is previewed on the dashboard card.
'iframe' embeds the live sketch route in a sandboxed <iframe>. 'image' shows a static screenshot instead. Currently all registered sketches use 'iframe'.An optional array of external URLs — tutorials, reference videos, or inspiration links — associated with the sketch. These are surfaced on the dashboard card so contributors can find the original source material. Example:
['https://www.youtube.com/@codingmath/videos'].A dynamic import factory that lazy-loads the sketch’s root Vue component. Vite uses this to split each sketch into its own chunk, keeping the initial bundle small. Always point to an
index.vue file inside the sketch’s directory, using the @/ alias for src/. Example: () => import('@/sketches/gsap/footer/ascii-hand/index.vue').The Current SKETCHES Array
The following is the completeSKETCHES array as it exists in the repository today. This is the real data powering all routing and dashboard rendering:
Helper Functions
src/config/sketches.ts also exports two utility functions that the router and dashboard components use to reason about paths at runtime.
getSketchByPath()
SKETCHES array for an entry whose path exactly matches the given string. Trailing slashes are normalised before comparison — '/shader/learn/' and '/shader/learn' both resolve to the same sketch. Returns undefined if no match is found, which signals to the router that the current path is a category dashboard rather than a leaf sketch.
Example:
isCategoryPath()
true when the given path prefix matches the category field of at least one sketch — either as an exact match or as the beginning of a deeper category path. Leading and trailing slashes are stripped before comparison. This function is used to distinguish valid category dashboard routes from unknown paths.
Example:
Order Convention
Use multiples of 10 when assigningorder values: 0, 10, 20, 30, …. This leaves nine integer slots between any two adjacent entries, so you can insert a new sketch between existing ones by choosing a value like 5 or 15 without having to renumber every subsequent entry.
Order only affects display order within a shared parent category. Sketches in different top-level categories are always sorted independently.