open-sheet Workbook Authoring
lianghsun/open-sheet
Technical reference for writing open-sheet workbooks as React files that export live .xlsx models, built around a rule against hand-written cell addresses.
Polishes and improves the UI in your project. An agent skill from VladSez/easy-invoice-pdf.
$ npx skills add VladSez/easy-invoice-pdf --skill better-ui -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install VladSez/easy-invoice-pdf better-ui --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/VladSez/easy-invoice-pdf.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/better-ui .claude/skills/better-ui && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "better-ui" agent skill from https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-ui into .claude/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-uiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add VladSez/easy-invoice-pdf --skill better-ui -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install VladSez/easy-invoice-pdf better-ui --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VladSez/easy-invoice-pdf.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/better-ui .agents/skills/better-ui && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "better-ui" agent skill from https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-ui into .agents/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add VladSez/easy-invoice-pdf --skill better-ui -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install VladSez/easy-invoice-pdf better-ui --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VladSez/easy-invoice-pdf.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/better-ui .cursor/skills/better-ui && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "better-ui" agent skill from https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-ui into .cursor/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/VladSez/easy-invoice-pdf.git --path .agents/skills/better-ui--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add VladSez/easy-invoice-pdf --skill better-ui -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install VladSez/easy-invoice-pdf better-ui --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VladSez/easy-invoice-pdf.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/better-ui .gemini/skills/better-ui && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "better-ui" agent skill from https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-ui into .gemini/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install VladSez/easy-invoice-pdf better-uiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add VladSez/easy-invoice-pdf --skill better-ui -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/VladSez/easy-invoice-pdf.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/better-ui .github/skills/better-ui && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "better-ui" agent skill from https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-ui into .github/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add VladSez/easy-invoice-pdf --skill better-ui -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install VladSez/easy-invoice-pdf better-ui --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VladSez/easy-invoice-pdf.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/better-ui .opencode/skills/better-ui && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "better-ui" agent skill from https://github.com/VladSez/easy-invoice-pdf/tree/main/.agents/skills/better-ui into .opencode/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
better-uiPolishes and improves the UI in your project. An agent skill from VladSez/easy-invoice-pdf.
Better UI is an agent skill from VladSez/easy-invoice-pdf. Polishes and improves the UI in your project. Covers concentric border radius, optical alignment, surface depth, contextual icons, hit areas and more.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files (for example `agents/openai.yaml`, `animations.md` and `enter-exit.md`).
It sits in Documents & Office, covering Forms and invoices. It works with React. The repository describes itself as: Free & Open-Source Invoice Generator - No Sign-Up, No Ads, Instant PDF Export, 100% In-Browser, and Fully Customizable Templates. ⭐ Star the repo if you like it. The licence is AGPL-3.0.
Read from SKILL.md and the folder at commit ba85869. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Better UI loads about 1.9k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 991 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from VladSez/easy-invoice-pdf at commit ba85869, republished under its AGPL-3.0 licence (© VladSez). 991 words, ~1,902 tokens.
.claude/skills/better-ui/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Polish comes from a pile of small details that compound. This skill is the reference for which are worth having and what values they take.
When reviewing, slow the interface down. What feels off at 10% speed is what is subtly wrong at full speed.
Keep the project's component library, tokens and density, and match its motion language except where a rule below prescribes an exact interaction.
Every duration, curve, scale and blur below is a specific value, not a range to approximate. cubic-bezier(0.2, 0, 0, 1) is not cubic-bezier(0.4, 0, 0.2, 1), and 0.96 is not 0.95. Use what is written.
Text wrapping, font rendering, tabular numbers and text spacing belong to better-typography. Hit areas, focus, keyboard support, ARIA and reduced motion belong to better-accessibility. Grouping, section spacing, breakpoints and spatial RTL belong to better-layout.
Outer radius = inner radius + padding. Mismatched radii on nested elements is the most common thing that makes an interface feel off. Radius, shadow and outline recipes are in surfaces.md.
When geometric centering looks off, align optically. Buttons with icons, play triangles and asymmetric icons all need a manual nudge.
Where a border exists only to create depth, prefer layered transparent box-shadow values. Keep borders that communicate structure or state: dividers, separators and selected or focus states.
Use CSS transitions for interactive state changes, because they can be interrupted mid-animation. Reserve keyframes for staged sequences that run once.
For an infrequent staged entrance where sequence communicates hierarchy, break the content into semantic chunks and stagger them by ~100ms. Animating one container gets you less for the same cost. Leave high-frequency interactions unstaggered. See enter-exit.md.
Use a small fixed translateY rather than full height. Exits should be softer than enters. Use ease-out for both directions.
Animate icons with opacity, scale and blur rather than toggling visibility. Use exactly these values: scale 0.25 to 1, opacity 0 to 1, blur 4px to 0px.
With a motion library (motion or framer-motion in package.json), match that package's import path, or nearby imports where both exist. Use transition: { type: "spring", duration: 0.3, bounce: 0 }. Bounce is always 0.
Without one, keep both icons in the DOM with one absolutely positioned, and cross-fade with cubic-bezier(0.2, 0, 0, 1). That gives you enter and exit with no dependency. Both recipes are in icon-transitions.md.
Give images a 1px outline at low opacity for consistent depth. Pure black in light mode (oklch(0 0 0 / 0.1)), pure white in dark (oklch(1 0 0 / 0.1)). Never a near-black like slate or zinc and never a tinted neutral. A tinted outline picks up the surface underneath and reads as dirt on the image edge.
A scale(0.96) on click gives a button tactile feedback. Always 0.96; anything below 0.95 feels exaggerated. Add a static prop to switch it off where motion would distract. See recipes for CSS, Tailwind and Motion.
Use initial={false} on AnimatePresence to keep enter animations off the first render. Check that it leaves intentional page entrances intact.
A theme flip changes color, background, border and shadow on nearly every element at once. Every transition on those properties fires together and the switch smears instead of snapping. Inject *,*::before,*::after{transition:none !important}, force a reflow, then remove it on the next frame. See the recipe.
Always name the exact properties: transition-property: scale, opacity. Tailwind's transition-transform covers transform, translate, scale, rotate.
will-change sparinglyOnly for transform, opacity and filter, which the GPU can composite. Never will-change: all. Add it when you see first-frame stutter, not before. See performance.md.
An icon next to text carries the text's optical weight: 1.5px stroke beside regular (400) text, 2px beside semibold (600). One stroke weight per icon set and one icon library per surface. Sizing and RTL flipping are in icons.md.
Icons use currentColor and take hover, selected and disabled states from CSS color and opacity, never from separate assets. Outline is the default variant; fill marks the active state.
Give high-frequency interactions instant feedback, or a transition of 150ms or less on opacity and color. A custom animation there charges its attention cost on every trigger.
Every animated state change also needs a static cue: color, an icon, or a label. Motion is never the only feedback channel.
| Mistake | Fix |
|---|---|
| Icons look off-center | Nudge optically with padding, or fix the SVG |
| Jarring staged entrance or exit | Stagger infrequent entrances; keep exits subtle |
| Theme toggle crossfades the whole page | Disable transitions for the swap, force a reflow, restore on the next frame |
transition: all on elements | Specify exact properties |
| First-frame animation stutter | Add will-change: transform (sparingly) |
| Hairline icon beside bold text | Match the stroke width to the text weight |
Severity. HIGH breaks an interaction, makes motion unusable, or leaves a state change visible only while the animation runs. MEDIUM is a visible inconsistency in surfaces, icons, or motion. LOW is isolated polish.
Verification. Without a browser: every state the component defines, meaning hover, focus, active, loading and empty, plus motion durations and easings read from the code. With one: walk each state, and replay motion at 10% speed in the browser's Animations panel. Report every check you could not run as Not verified.
Format. Group findings under the principle each violates, ordered by severity, one row per root cause listing every location it appears in:
| Severity | Location | Before | After | Why |
|---|
Location is path/to/file:line. Why names the principle and the user impact.
End with Block when any HIGH remains, Approve otherwise, leaving the rest in the table as work to do. Never Approve coverage you did not inspect. With nothing to report, state "No actionable UI-polish findings" and report verification.
© VladSez, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files in .agents/skills/better-ui of VladSez/easy-invoice-pdf.
Open the folder on GitHubat commit ba85869
We found 7 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 5 other GitHub owners. This page covers the copy in VladSez/easy-invoice-pdf, which our catalogue first saw on October 7, 2026.
Better UI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Better UI this skillVladSez/easy-invoice-pdf | 1.1k | 5 repos | ~1.9k | Automated safety check: Pass | AGPL-3.0 | |
| open-sheet Workbook Authoringlianghsun/open-sheet | 127 | — | ~2.1k | Automated safety check: Pass | MIT | |
| React PDFtrailofbits/skills-curated | 513 | — | ~3.1k | Automated safety check: Notes | CC-BY-SA-4.0 | |
| Billing SDKhashgraph-online/awesome-codex-plugins | 1.3k | — | ~3.5k | Automated safety check: Notes | Apache-2.0 | |
| Form Fillingplatonai/Browser4 | 1.2k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Code2mediatsingliuwin/autoclaw | 283 | — | ~956 | Automated safety check: Pass | MIT |
lianghsun/open-sheet
Technical reference for writing open-sheet workbooks as React files that export live .xlsx models, built around a rule against hand-written cell addresses.
trailofbits/skills-curated
Generates PDF documents using the React-PDF library (@react-pdf/renderer) with TypeScript and JSX.
hashgraph-online/awesome-codex-plugins
BillingSDK, the open-source React and shadcn component library for Dodo Payments billing UI.
platonai/Browser4
Automatically fills web forms using provided field data and can optionally submit the form.
tsingliuwin/autoclaw
Universal media renderer with no fixed template — any custom layout, size or style becomes pixel-perfect images (PNG/JPEG/WebP), vector SVG, paged PDFs or animations (WebP/GIF).
Hchen1218/token-receipt
A skill your agent uses when the user wants to view AI conversation token usage as a receipt, invoice, checkout slip, token bill, usage receipt, cost snapshot, or creative monospace thermal-paper…
VladSez/easy-invoice-pdf
Maintain a clear and informative changelog for software releases.
VladSez/easy-invoice-pdf
Cut an OpenSEO release — bump the version, draft user-facing release notes from commits since the last tag, run a review + subagent-verification pass, and open a "release: vX.X.X" PR.
VladSez/easy-invoice-pdf
Author and run a durable AI chat agent with chat.agent from @trigger.dev/sdk/ai: the per-turn run loop, why you MUST spread ...chat.toStreamTextOptions() first, returning a StreamTextResult vs…
VladSez/easy-invoice-pdf
Bootstrap Trigger.dev into an existing project from scratch: authenticate the CLI, install @trigger.dev/sdk and @trigger.dev/build, write trigger.config.ts with the project ref and task dirs…
VladSez/easy-invoice-pdf
Take a branch from "code exists (or is about to)" to "ready for Ben's final review" — multi-axis subagent review with verified findings, fixes, ci:check, checkpoint commits, and an updated PR.
VladSez/easy-invoice-pdf
Covers writing backend Trigger.dev tasks with @trigger.dev/sdk: defining task() and schemaTask(), the run function and its ctx, retries, waits, queues and concurrency, idempotency keys, run…
Works with
Categories
Polishes and improves the UI in your project. An agent skill from VladSez/easy-invoice-pdf. Better UI is an agent skill from VladSez/easy-invoice-pdf. Polishes and improves the UI in your project.
Better UI fits situations like: tasks that involve Forms and invoices.
Run `npx skills add VladSez/easy-invoice-pdf --skill better-ui -a claude-code`. Or copy the skill folder (.agents/skills/better-ui in VladSez/easy-invoice-pdf) into .claude/skills/better-ui in your project. Claude Code loads it when a task matches its description.
Run `npx skills add VladSez/easy-invoice-pdf --skill better-ui -a codex`. Or copy the skill folder (.agents/skills/better-ui in VladSez/easy-invoice-pdf) into .agents/skills/better-ui in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add VladSez/easy-invoice-pdf --skill better-ui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/better-ui, .gemini/skills/better-ui, .github/skills/better-ui and .opencode/skills/better-ui in your project.
SKILL.md names no scripts, command-line tools or credentials: Better UI is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Better UI is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Better UI: open-sheet Workbook Authoring (lianghsun/open-sheet, 127 stars), React PDF (trailofbits/skills-curated, 513 stars), Billing SDK (hashgraph-online/awesome-codex-plugins, 1.3k stars) and Form Filling (platonai/Browser4, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
VladSez (a GitHub user) maintains it in VladSez/easy-invoice-pdf, which has 1,106 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.
Source: VladSez/easy-invoice-pdf on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.