Best Claude Code Skills for Web Development (Tested)

Best Claude Code Skills for Web Development (Tested)

Looking for the best claude code web skills? Anthropic’s open skills repo has three that fit the job, and we ran two of them on small demo projects to see what they really do. One checks a page in a real browser, and the other builds a React app and packs it into a single file.

This is Part 10 of 45 in our Claude Code Deep Dives, part of our Claude Code tutorials. In the last part we compared frontend design skill, so today we cover the rest of the web toolkit.

Tested with Claude Code v2.1.318 on November 4, 2026. The skills come from the anthropics/skills repo at commit ca45fc4, dated October 28, 2026.

Quick Summary

SkillJobWhat we didVerdict
frontend-designPicks a distinctive lookTested in Part 9Worth it for new pages
webapp-testingTests a page in a real browser with PlaywrightFound a planted bug and checked the fixWorks well once Playwright is ready
web-artifacts-builderBuilds a React app and bundles it into one HTML fileBuilt a tip splitter, 304,166 bytesWorks, but needed two fixes on our Mac

How We Picked the Best Claude Code Web Skills

We started from the web-related entries in our Skills Directory. Three official skills from Anthropic stood out because they cover three different stages of building a site: design, build and test. Other web plugins in the directory need outside accounts or extra downloads, so we left them for later posts.

Each skill is a folder with a SKILL.md file that Claude loads when your request matches. If that idea is new, our guide to Claude Code skills explains it, and the official skills docs cover the details.

Diagram showing frontend-design, web-artifacts-builder and webapp-testing as three stages of one web workflow
The three skills cover design, build and test, in that order

Our safe setup

We never touched our normal Claude Code setup. We copied the two skill folders into a throwaway project, started Claude Code with --setting-sources project, and read every script before running anything.

Typing /skills showed both skills loaded from the project. The list also shows a rough token cost, about 70 for webapp-testing and about 100 for web-artifacts-builder.

Claude Code skills list showing web-artifacts-builder and webapp-testing loaded from the project
Both skills appear in the /skills list after copying them into .claude/skills/

Skill 1: webapp-testing

This skill teaches Claude to test a local web page by writing Python Playwright scripts. Its folder holds SKILL.md, a helper called scripts/with_server.py that starts and stops dev servers, and three example scripts.

GitHub folder for the webapp-testing skill showing examples, scripts, LICENSE.txt and SKILL.md
One skill is a small folder: instructions, helper scripts and examples

What the instructions say

The file gives Claude a short decision tree. For static HTML, read the file and pick selectors from it. For a running app, open the page, wait for the network to go quiet, look at what rendered, and only then click things.

It also tells Claude to treat the bundled scripts as black boxes and run them with --help first. That keeps long script code out of the conversation. The helper uses shell=True to start your server command, so read it before you trust it with commands you did not write.

Our test page with a planted bug

We wrote a tiny newsletter signup page called signup.html. Its submit handler writes a thank-you message into an element with the id message, but the page only has an element with the id status. The page looks fine, yet clicking Subscribe does nothing.

Our prompt asked Claude to use the skill, type an email into the box, click Subscribe, report what the page shows, list any console errors and save a screenshot. We told it not to change the file yet.

Use the webapp-testing skill on signup.html. Playwright is in .venv (use .venv/bin/python). Type [email protected] into the email box, click Subscribe, report what the page shows, list any console errors, and save a screenshot as test-result.png. Do not change signup.html yet.

Our prompt also said which browser to launch, because we had installed Playwright’s Python package but not its Chromium download. We pointed it at an installed copy of Chrome instead.

Claude Code loading the webapp-testing skill, running a Playwright test and reporting a null textContent error
Claude loaded the skill, read the HTML, ran the click test and caught the page error

What happened

Claude loaded the skill by name, read the static HTML first as the decision tree says, and spotted the likely mismatch before running anything. Then it ran the test and confirmed it: the status area stayed empty and the page threw Cannot set properties of null (setting 'textContent').

The saved screenshot shows the form with the email filled in and no message. The whole check took about 20 seconds.

Daily Brew signup form with the email filled in and an empty status area below the Subscribe button
The screenshot the skill saved: email typed, button clicked, nothing shown

The fix and the retest

We then asked Claude to apply the fix and run the same test again. It changed one word on line 22, from message to status.

Claude Code diff replacing getElementById message with getElementById status in signup.html
The whole fix is one changed line

Honest note: the retest stopped at a permission prompt that our script could not answer, so we did not capture Claude’s own after-fix run. We ran the same click test ourselves with the same Playwright setup. The page now shows the thank-you message and no page errors.

Daily Brew signup form showing the green message Thanks, test@example.com is subscribed
Our own re-run after the fix: the confirmation message appears

Skill 2: web-artifacts-builder

This skill is for building a multi-part front end with React, TypeScript, Vite, Tailwind CSS and shadcn/ui, then squeezing everything into one self-contained HTML file. It was written for claude.ai artifacts, but the single file works anywhere you can open HTML.

Its instructions say to run scripts/init-artifact.sh to create the project, edit the code, then run scripts/bundle-artifact.sh to produce bundle.html. They also tell Claude to avoid centered layouts, purple gradients and the Inter font.

What we read before running it

The init script checks for Node 18 or newer, then runs npm install -g pnpm if pnpm is missing. That is a global install on your computer, so we did not let it happen. We installed pnpm inside our throwaway sandbox folder and put it on the path for the demo session only.

The script then creates a Vite project, installs Tailwind and unpacks a tarball of shadcn components. The bundle script installs Parcel and a few helpers, builds the app and inlines it with html-inline.

Our test prompt

Use the web-artifacts-builder skill to build a small tip splitter artifact named tip-splitter: a bill amount box, tip buttons for 15, 18 and 20 percent, and a number of people box. It shows the tip and what each person pays. Follow the skill steps, bundle it into one HTML file, and tell me the size of bundle.html.

The first run failed

The project was created and the code was written, but the bundle step stopped with ERR_PNPM_IGNORED_BUILDS. The pnpm version on our Mac blocks dependency build scripts until you approve them, and the skill’s script does not expect that.

Terminal output showing the pnpm error ERR_PNPM_IGNORED_BUILDS during the bundle step
pnpm refused to run build scripts that Parcel’s dependencies need

Claude explained the problem, tried one fix that this pnpm version ignored, and then used pnpm approve-builds for four packages. The result was an allowBuilds entry in a new pnpm-workspace.yaml file. We had to answer several permission prompts along the way, which is normal for commands that write config files.

The second problem and the result

The next build failed because the generated index.html linked a /favicon.svg that did not exist. Claude deleted that one line and the build passed.

The final file, bundle.html, came out at 304,166 bytes. We also noticed a stray file named index.html'' in the project folder. It looks like a leftover of the init script’s sed command on macOS, and we did not dig further.

Claude Code summary stating bundle.html is 304,166 bytes and listing the pnpm and favicon fixes
The summary: one 304,166-byte file, and the two fixes it needed

Does the app work?

Claude itself said it had not opened the file in a browser, so we did. We opened bundle.html in headless Chrome, typed a bill of 84, picked the 20 percent button and set 4 people. The page showed a tip of $16.80, a total of $100.80 and $25.20 each, which is correct math, and there were no page errors.

The look is plain on purpose: left-aligned, a serif heading and a dark selected button. It followed the skill’s advice against centered cards and purple gradients.

Tip Splitter app showing bill 84, 20 percent tip, 4 people, tip 16.80, total 100.80 and each pays 25.20
The bundled app, opened straight from one HTML file

Skill 3: frontend-design

We covered this one fully in Part 9. In short, it is one instructions file that asks Claude to plan a palette, fonts and layout from your subject, then review the plan before coding. In that test it changed the result clearly, so read our design test for the images.

Which of the Best Claude Code Web Skills Should You Use?

You want toUseSetup needed
Make a new page look chosen, not genericfrontend-designFolder copy only
Check that a page or form really workswebapp-testingPython Playwright and a browser
Build a React app that ships as one fileweb-artifacts-builderNode 18+, pnpm and internet

They also work as a chain. Use the design skill for the look, the builder for the app, and the testing skill to click through the result. We tested each skill on its own, not all three in one run, so we cannot report how smoothly they chain.

Real Examples to Copy

Test a form you already have

Use the webapp-testing skill. Open index.html, fill every field with sample data, submit the form, and tell me what the page shows and if the console has any errors. Save a screenshot.

Check a running dev server

Use the webapp-testing skill. My app runs with npm run dev on port 5173. Use the with_server.py helper, load the home page, click every button in the header and report anything that breaks.

Build a small tool as one file

Use the web-artifacts-builder skill to build a habit tracker with a weekly grid and a streak counter. Bundle it into one HTML file and tell me the file size.

Try It Yourself

Make a folder, add a tiny page with a button that should change some text, and break it on purpose by using the wrong element id. Copy the webapp-testing folder into .claude/skills/, install Playwright in a virtual environment, and run the first prompt above.

If you want a bigger project afterwards, our guide to landing page guide shows a full page build, and test-driven development shows another way to catch bugs early.

Common Mistakes

  • Skipping the setup check. webapp-testing needs Python Playwright and a browser, and without them the skill cannot run a single test.
  • Letting an init script install tools globally. Read the script first and give it a sandbox instead.
  • Assuming the build is finished when Claude says so. Open the bundled file and click it yourself, as we did.
  • Trusting helper scripts blindly. Open the files in scripts/ before running them, especially ones that start servers.
  • Running big skills with a tight allow list and walking away. Installs and config writes ask for permission, so stay nearby.

Pro Tips

  • Name the skill in your prompt. Our tests loaded the skill every time we asked for it by name.
  • Ask for a screenshot. A saved image is the quickest proof that a test actually ran.
  • Tell Claude what is already installed, such as the virtual environment or which browser to use, so it does not waste steps.
  • Keep skills in the project folder while you try them, so removing them is one delete.
  • Note the commit of the repo you copied from. Skills change, and a version note helps you compare results later.

Cheat Sheet

Cheat sheet card with folder path, skills command, test prompt, build prompt, requirements and source for the web development skills
Keep this card nearby when you try the web skills

Skills do the work only when you ask by name and your tools are ready, so check setup first and open the result yourself.

What We Did Not Test

We ran one bug and one small app, so these results show how the skills behave on tiny projects, not on large codebases. We did not run the example scripts bundled with webapp-testing, the multi-server mode of with_server.py, or the shadcn components beyond what Claude chose to use. Other web plugins in the directory were not part of this test.

Frequently Asked Questions

What are the best Claude Code skills for web development?

From the official repo, frontend-design, webapp-testing and web-artifacts-builder cover design, testing and building. We tested the last two here and the first in Part 9.

Does webapp-testing work without Playwright?

No. The skill writes Playwright scripts, so the Python package and a browser must be available. In our test we used the package in a virtual environment and pointed it at an installed Chrome.

Do I need to install these through the plugin system?

No. We copied the folders into .claude/skills/ in a project and they showed up in /skills. A plugin install also exists, and our plugins guide explains it.

Can web-artifacts-builder work for a normal website?

It produces a React project plus one bundled HTML file, so you can use either. The skill describes the bundle as an artifact for claude.ai, but we opened it directly as a local file and it worked.

Is it safe to run these skills?

Read them first. frontend-design is text only, webapp-testing starts servers you specify, and web-artifacts-builder installs packages and tries a global pnpm install if pnpm is missing. We used a sandbox folder for all of it.

Conclusion

Among the best claude code web skills, the two we tested earned a place: webapp-testing found our planted bug in about 20 seconds and proved it with a screenshot, and web-artifacts-builder produced a working 304,166-byte app once Claude worked around a pnpm block and a missing favicon. Neither is one click, so plan for setup and a few permission prompts. Try the first prompt on a page of your own, and see more add-ons in our Claude hub.

Previous in the series: Part 9: Claude Code Frontend Design Skill: Before and After

Next in the series: Part 11, Best Claude Code Skills for UI Design (Tested), is coming soon.

Newsletter

New AI tools in your inbox

The best new tools and the AI news that matters, in one short email. Unsubscribe any time.

Free · No spam · Unsubscribe any time

✓ Looks like you’re subscribed

Loading Google’s sign-up form…

Looks like you’re already subscribed

Thanks for reading! New AI tools and the AI news that matters will land in your inbox.

Not subscribed yet? Refresh the page to load the sign-up form.

The sign-up form couldn’t load. If you use an ad or content blocker, allow news.google.com and reload the page.

Free instant check before you pay. Takes a few seconds.

Scroll to Top