skills/customization/SKILL.md
Use when overriding Livemark's built-in UI or adding custom routes — drop same-named files under .livemark/{components,elements,styles} to shadow defaults, author .livemark/routes/*.tsx for new pages, or copy defaults with the `livemark escape` command.
npx skillsauth add datisthq/livemark livemark-customizationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guidance for customizing the UI layer of a Livemark project beyond what livemark.config.ts exposes.
Invoke when the user asks to:
favicon.svg, robots.txt, og-image.png, or other static asset.| Goal | Mechanism |
| --------------------------------- | ----------------------------------------------------- |
| Replace a default component/style | Drop a file at .livemark/components/<Name>.tsx etc. |
| Add a new page at an exact URL | Create .livemark/routes/<path>.tsx |
| Serve a static asset at /<path> | Put the file in .livemark/public/<path> |
None require config changes. The Vite plugin (website/plugins/vite-livemark.ts) watches .livemark/** and hot-reloads.
Run the escape command. No arg lists every overridable file:
livemark escape
Output is a flat <subdir>/<file> list across components/, elements/, and styles/. With an argument, the command copies the default into .livemark/:
livemark escape components/Footer.tsx # → .livemark/components/Footer.tsx
livemark escape elements/button.tsx # → .livemark/elements/button.tsx
livemark escape styles/general.css # → .livemark/styles/general.css
The command refuses to overwrite an existing override. Delete the override first if you want a fresh start.
livemark escape components/Footer.tsx — copy the default..livemark/components/Footer.tsx. All the site's Footer renders shift to the new file on save.livemark/<subdir>/* subpath exports:
import { cn } from "livemark/helpers/style"
import { Button } from "livemark/elements/button"
livemark escape styles/general.css.:root and .dark blocks in .livemark/styles/general.css:
--primary — brand accent (Tailwind-flavoured oklch values work).--radius — corner roundness base.Whole-site contrast is audited: light mode targets blue-600, dark mode targets blue-500. Keep new token values AA-compliant on both backgrounds (≥4.5:1 for text).
Custom routes use TanStack Router. Minimal example:
import { createFileRoute } from "@tanstack/react-router"
export const Route = createFileRoute("/about")({
component: () => (
<main className="mx-auto max-w-3xl px-6 py-16 prose">
<h1>About</h1>
<p>Hello.</p>
</main>
),
})
Filename maps to URL path: .livemark/routes/pricing.tsx → /pricing/. Nested paths work via nested folders.
An index.tsx in .livemark/routes/ replaces Livemark's default landing at /.
Custom routes win over the Markdown catch-all at exact URLs. Don't create a route that collides with an article URL unless you intend to hide the article.
.livemark/ first — it reliably survives Livemark upgrades..livemark/. The override plugin is case-sensitive and mirrors the subdirectory structure exactly.escape), then edit.livemark/*, not via relative paths — the plugin routes those through the override resolver, so chained overrides (e.g., your Layout using your Sidebar) compose correctly..livemark/public/, which Vite exposes at the site root.actions/, commands/, program.ts — server/CLI code. Fork upstream if you need to change these.livemark.config.ts schema — fixed.pnpm type — confirms overrides typecheck.pnpm docs:build — smoke-test the override lands in the bundle.docs/customization/file-overrides.md, docs/customization/custom-routes.md.website/plugins/vite-livemark.ts.commands/escape.ts.package.json exports block.documentation
Use when editing livemark.config.ts — site metadata, include/exclude globs, syntax themes, sections (article/blog/changelog), navigation links, and patches.
content-media
Use when adding or editing Markdown articles in a Livemark project — covers file placement under include globs, frontmatter fields, sidebar grouping, URL derivation, images/assets, and the patches mechanism for files that can't carry frontmatter.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------