Skip to content
Menu
All work

Own productInternal

Expert checklists, packaged so AI applies them the same way every time

Custom Claude skills that turn specialist know-how, from interface auditing to Lithuanian tax law, into instructions an AI assistant follows consistently.

Industry
AI enablement
What it shows
Claude skills, Knowledge packaging, Quality assurance
Year
2026
Status
Internal
ui-ux-auditA Claude skillReal outputWhat’s in the packageui-ux-audit/SKILL.mdreferences/structure-typography.mdcolor-states-forms.mdinteraction-responsive-a11y.mdconsistency-tokens-nav.mdmotion-performance.mdanti-slop-copy.mddata-viz-tables.mduser-simulation.mdprofile-marketing-landing.mdprofile-saas-dashboard.md+ 4 more15 audit categories · 4 product profilesReportUI audit: arkira.ventures, before the redesign30/100Do not ship100 − (2×12) − (3×8) − (5×4) − (2×1) = 30BlockerThe contact form sends nothingBlockerKeyboard focus is invisibleCriticalMain button contrast is 4.27:1CriticalMenu button has no label, 21 × 28 pxCriticalPlaceholder text left in the TermsEach finding comes with the fix and a check that stops it coming back.This site was rebuilt against the same skill.
The report is real. It is the audit of this website's previous version, which scored 30 out of 100.

In numbers

audit categories, from typography to accessibility
15
product profiles that adjust the rules
4
the score it gave our own old website
30/100

Figures come from the project’s own files and records.

What changes

The steps people did by hand, and the route the work takes now.

A new page needs a design review

Before

  1. Wait for a senior designer
  2. Check against a list in their head
  3. Write up the findings
  4. Hope nothing was missed

With AI

  1. Claude loads the audit skill
  2. A scored report with a fix for each finding

The same standard on every review

The problem

Ask an AI assistant to review a design or answer a tax question twice and you can get two different standards. The expertise that makes an answer good, a senior designer’s checklist or a tax adviser’s habit of citing the law in force, usually lives in someone’s head.

What we built

Skills: packages of instructions, reference material and worked examples that a Claude assistant loads when a task calls for them. The one shown here audits web interfaces across 15 categories, from broken layouts and contrast to generic AI-looking design, and scores the result with the arithmetic shown.

We ran it on this website before rebuilding it. The old site scored 30 out of 100: its contact form silently discarded every message and keyboard focus was invisible. The new site was built with the same skill checking every page.

Other skills in use

  • Lithuanian tax law: answers from the primary law in force, with exact article citations and the date of the edition used.
  • UK CV writer: produces ATS-friendly CVs to UK conventions. It is the drafting engine inside our application agent.
  • Anti-AI writing: strips the filler and formulaic phrasing that makes text read as machine-written. This site’s copy went through it.

Inside a skill

Score the real audit yourself, open each skill to see what it is made of, and run the CV skill’s checks on passing and failing inputs.

InteractiveUntick a severity to rescore the audit, open a finding, or try the guardrails.
View
Real report · 29 September 2026

The previous arkira.ventures

Profile: Marketing / landing. In code, and rendered at 1440 and 375px.
100/100Ready to ship
Nothing deducted: 100
What if: the unticked findings were fixed. 0 still counted. The real score was 30.
98/100Ready to ship
100− (2 × 1)= 98
What if: the unticked findings were fixed. 2 still counted. The real score was 30.
80/100Ship after fixing the highest-severity findings
100− (5 × 4)= 80
What if: the unticked findings were fixed. 5 still counted. The real score was 30.
78/100Ship after fixing the highest-severity findings
100− (5 × 4)− (2 × 1)= 78
What if: the unticked findings were fixed. 7 still counted. The real score was 30.
76/100Ship after fixing the highest-severity findings
100− (3 × 8)= 76
What if: the unticked findings were fixed. 3 still counted. The real score was 30.
74/100Ship after fixing the highest-severity findings
100− (3 × 8)− (2 × 1)= 74
What if: the unticked findings were fixed. 5 still counted. The real score was 30.
56/100Significant rework needed
100− (3 × 8)− (5 × 4)= 56
What if: the unticked findings were fixed. 8 still counted. The real score was 30.
54/100Significant rework needed
100− (3 × 8)− (5 × 4)− (2 × 1)= 54
What if: the unticked findings were fixed. 10 still counted. The real score was 30.
76/100Do not ship
100− (2 × 12)= 76
What if: the unticked findings were fixed. 2 still counted. The real score was 30.
74/100Do not ship
100− (2 × 12)− (2 × 1)= 74
What if: the unticked findings were fixed. 4 still counted. The real score was 30.
56/100Do not ship
100− (2 × 12)− (5 × 4)= 56
What if: the unticked findings were fixed. 7 still counted. The real score was 30.
54/100Do not ship
100− (2 × 12)− (5 × 4)− (2 × 1)= 54
What if: the unticked findings were fixed. 9 still counted. The real score was 30.
52/100Do not ship
100− (2 × 12)− (3 × 8)= 52
What if: the unticked findings were fixed. 5 still counted. The real score was 30.
50/100Do not ship
100− (2 × 12)− (3 × 8)− (2 × 1)= 50
What if: the unticked findings were fixed. 7 still counted. The real score was 30.
32/100Do not ship
100− (2 × 12)− (3 × 8)− (5 × 4)= 32
What if: the unticked findings were fixed. 10 still counted. The real score was 30.
30/100Do not ship
100− (2 × 12)− (3 × 8)− (5 × 4)− (2 × 1)= 30
The score the skill gave. 12 findings counted.
Any Blocker forces “Do not ship”, whatever the score. That is the skill’s rule, not a judgement made per audit.
Where the 100 points went
0100
Severities counted. Untick one to treat those findings as fixed.

The findings

Each one in the skill’s format: what was found, why it matters, the fix and how to stop it returning. Open one to read it.
  1. BlockerThe contact form sends nothing
    Found
    The submit handler stops the form, shows a thank-you alert and resets it. Nothing is sent anywhere.
    Why
    Every visitor who fills it in believes they made contact. The lead is silently lost.
    Fix
    A real submission path with Netlify Forms, inline success and error states, and a no-JS fallback.
    Prevent
    A Playwright test that submits the form on the deploy preview.
    Now
    Netlify Forms, with a no-JS fallback that posts to a thank-you page. src/components/BriefForm.astro
  2. BlockerKeyboard focus is invisible
    Found
    Buttons set outline: none with no :focus-visible replacement anywhere.
    Why
    Keyboard users cannot see where they are on the page (WCAG 2.4.7).
    Fix
    One global :focus-visible outline in the accent colour, never removed.
    Prevent
    axe-core in Playwright, plus a keyboard walk that captures focus on each control.
    Now
    One global :focus-visible outline, 2px in the accent colour. src/styles/global.css
  3. CriticalMain button contrast is 4.27:1
    Found
    Primary button text on indigo measures 4.27:1. Indigo link text measures 4.40:1.
    Why
    Below the 4.5:1 AA floor on the most important control.
    Fix
    A new palette: dark text on the amber accent.
    Prevent
    Contrast recorded next to each colour token, and the axe contrast rule in CI.
    Now
    Dark text on the amber accent measures 10.9:1. src/styles/global.css
  4. CriticalMenu button has no label, 21 × 28 px
    Found
    The mobile menu button is an icon with no accessible name and no expanded state.
    Why
    Screen readers announce an unnamed button, and the target is far below 44px.
    Fix
    A labelled button with a 44 × 44px hit area.
    Prevent
    The axe button-name rule, and a target-size check at 360px.
    Now
    A visible Menu label on a 44px target. src/components/Header.astro
  5. CriticalPlaceholder text left in the Terms
    Found
    The Terms of Service read "laws of [Jurisdiction]", and no legal entity is named anywhere.
    Why
    Placeholder text in a legal document undermines trust on a page whose job is trust.
    Fix
    Real terms and privacy pages, and a footer with the company details.
    Prevent
    A build check that fails on [Placeholder] patterns in the output.
    Now
    Written terms and privacy pages, with no placeholders. src/pages/terms.astro
  6. WarningGeneric AI template look
    Found
    Gradient headline text, 30 floating particles, three six-card grids in a row, and two-letter text icons.
    Why
    It reads as a template, so the brand is invisible.
    Fix
    A new art direction with real product footage and varied section layouts.
  7. WarningNo reduced-motion handling
    Found
    The particles loop forever and sections slide in, with no prefers-reduced-motion check.
    Why
    People with vestibular disorders get constant motion and no way to stop it.
    Fix
    All non-essential motion gated behind prefers-reduced-motion.
    Now
    Page transitions and smooth scrolling run only without a reduced-motion preference. src/styles/global.css
  8. WarningNo description, preview or canonical tags
    Found
    The head held only charset, viewport and a title.
    Why
    Poor search snippets, and blank previews when the link is shared.
    Fix
    Per-page SEO tags, generated preview images, a sitemap and structured data.
    Now
    Description, canonical and Open Graph tags on every page. src/layouts/Base.astro
  9. WarningThe email address is not a link
    Found
    The address was plain text in a span.
    Why
    Visitors cannot tap it to write, so the fallback channel fails on phones.
    Fix
    A mailto: link.
    Now
    A mailto: link in the footer. src/components/Footer.astro
  10. WarningSmall grey text at 3.90:1
    Found
    The tertiary text colour measures 3.90:1 on the surface colour and is used for small text.
    Why
    Small text below 4.5:1 is hard to read on a phone outdoors.
    Fix
    A muted colour that measures 5.8 to 6.7:1 on every surface.
    Now
    The muted colour #9A9892 measures 5.8 to 6.7:1. src/styles/global.css
  11. PolishA bar crosses the hero headline at 375px
    Found
    A decorative line runs through the headline on small phones.
    Why
    It cuts across the first words a visitor reads.
    Fix
    Move or remove the decoration.
  12. PolishButtons animate every property
    Found
    transition: all on buttons animates layout properties too.
    Why
    Layout animation costs frames on slower phones.
    Fix
    Transition only colour, background colour and transform.
Clean in the same audit: no horizontal scroll at 375px; form inputs have real labels.

Fixes that stop it coming back

The report ends with the tooling that prevents the biggest failure families from returning. The new site was built with the same skill checking every page. No second scored audit is recorded, so no new score is shown.
  1. 1
    A Playwright and axe-core suite run before every push
    Now: axe-core (WCAG 2.2 AA) runs in Playwright on every page at 360 and 1440px.
    scripts/a11y.mjsscripts/live-check.mjs
  2. 2
    Tokens-only colour, with measured contrast next to each token
    Now: The default palette is cleared, and each colour token carries its measured contrast.
    src/styles/global.css
  3. 3
    Lighthouse thresholds that fail the deploy
    Now: Every deploy fails if accessibility, best practices or SEO drop below 95.
    netlify.toml
Pick a skill
What it encodes
A senior designer’s review of a page: what AI tools get wrong in layout, contrast, states, accessibility and generic design, each with a severity, a concrete fix and a check that stops it returning.
Hard rules
  1. Any Blocker forces “Do not ship”, whatever the score.
  2. The score is 100 minus the deductions, and the arithmetic is always shown.
  3. An escalated finding replaces its deduction. It never counts twice.
  4. When unsure between two severities, pick the lower one and say why.
Rules in SKILL.md that the report must follow.
audit categories
15
reference files
14
severities, each with a fixed deduction
4
product profiles
4
pre-flight checks while writing code
17
personas walked before the checklist
3
The package
  1. ui-ux-audit/
  2. SKILL.mdmodes, scoring, report, pre-flight
  3. references/
  4. 7 category checklists15 categories
  5. user-simulation.mdwalk it as a person first
  6. durable-fixes.mdfailure to tooling map
  7. examples.mdworked findings, a model report
  8. 4 profile fileslanding, dashboard, shop, kids
Source: ui-ux-audit SKILL.md, references/ and CHANGELOG.md (v1.2.0, 2 July 2026)
What it encodes
A recruiter’s and an ATS’s view of a CV: tailor a master profile to one advert as a two-page, single-column UK document, and never claim anything the profile does not support.
Hard rules
  1. Never deliver a CV while check_cv.py reports a single FAIL.
  2. Any number not in the master profile is treated as invented.
  3. A final page under about 55% full fails.
  4. A gap of more than five months, or a dropped current role, fails.
  5. An Interests or Hobbies section fails, in English or Lithuanian.
Run by the two check scripts. Try them in Guardrails.
reference files
6
scripts
3
areas check_cv.py tests
9
pages of A4, the target length
2
must-have keywords, the minimum
75%
FAILs allowed before delivery
0
The package
  1. uk-cv-writer/
  2. SKILL.mdworkflow and the hard gate
  3. references/6 files
  4. integrity.mdoptimise, never fabricate
  5. scripts/
  6. build_cv.pyrenders the .docx
  7. check_cv.pythe QA gate
  8. check_grounding.pythe anti-fabrication gate
  9. assets/schema, profile template
Source: uk-cv-writer SKILL.md, CHANGELOG.md and scripts/ (v1.0.0, 11 July 2026)
What it encodes
An editor’s ear for empty language: find the filler, uniform rhythm and inflated claims that make text read as machine-written, and fix them while keeping the author’s voice and formal register.
Hard rules
  1. Don’t over-edit: a strong draft gets the few needed cuts, then stops.
  2. Keep the author’s voice and meaningful hedging in formal writing.
  3. Never tell anyone their text “is” AI or will pass a detector.
  4. Reread the rewrite and fix the tells that survived.
This skill has no script. These are rules in SKILL.md, applied by the assistant.
modes: rewrite or detect only
2
checks, in order of diagnostic power
5
severity tiers, P0 to P2
3
context profiles, from academic to social
5
word tiers
3
reference files
2
The package
  1. avoid-ai-writing/
  2. SKILL.mdmodes, priority order, profiles
  3. references/
  4. word-lists.mdthree tiers, used last
  5. british-english.mdspelling and punctuation
Source: avoid-ai-writing SKILL.md and references/ (v0.1.0)

Checks that gate the output

The CV skill does not trust its own writing. Two scripts check every CV, and it is not delivered while one check fails. Here are six of their rules, each run on a passing and a failing dummy input.
Pick a check
check_grounding.py
Invented numbers
Any number in the CV that is not in the master profile counts as an invented metric. Years and single digits are skipped.
Master profile
Support lead, 2021 to now. Cut the ticket backlog by 25% in 2024. Trained 3 new starters. Ran the weekly report for 12 accounts.
Passing input
Cut the ticket backlog by 25% and trained 3 new starters.
PASS Every number is in the master profile.
Failing input
Cut the ticket backlog by 40% and ran reporting for 15 accounts.
FAIL “40” and “15” not in the master profile.
The script also lists every word that is not in the profile, for a person to review. It over-flags on purpose: a fair rewording passes review, an invented claim is cut.
check_cv.py, check_prohibited()
Personal data
A UK CV carries no date of birth, nationality, marital status, right-to-work line or National Insurance number.
Passing input
+44 7700 900123 | jo.example@example.com | linkedin.com/in/example
PASS Phone, email and LinkedIn only.
Failing input
+44 7700 900123 | Date of birth: 4 May 1990 | Nationality: British
FAIL Found: date of birth, nationality.
check_cv.py, check_headings()
Interests section
An Interests or Hobbies section fails, in English or Lithuanian, even when the master profile lists interests.
Passing input
  1. Professional Summary
  2. Skills
  3. Work Experience
  4. Education
PASS Standard headings only.
Failing input
  1. Professional Summary
  2. Skills
  3. Work Experience
  4. Education
  5. Interests
FAIL “Interests” is excluded by design.
check_cv.py, check_pages()
Page balance
Rendered to PDF, the final page must be at least 55% as full as the fullest page. A half-empty page 2 fails.
Passing input
PASS Page 2 is 88% full (46 of 52 lines).
Failing input
FAIL Page 2 is only 37% full (19 of 52 lines).
check_cv.py, check_gaps()
Timeline gaps
More than five months between roles fails, so a role cannot be quietly dropped to make room.
Passing input
  1. Support agentSep 2018 to Feb 2021
  2. Support leadApr 2021 to now
PASS Longest gap 2 months.
Failing input
  1. Support agentSep 2018 to Feb 2021
  2. Support leadNov 2021 to now
FAIL A 9-month gap between roles.
check_cv.py, check_keywords()
Keyword coverage
At least 75% of the advert’s must-have terms must appear. Case, hyphens and slashes are ignored.
Passing input
Led a team on Zendesk through peak-season volume, kept the SLA, owned escalation and onboarding, ran weekly reporting and coaching.
  1. Zendesk
  2. SLA
  3. escalation
  4. onboarding
  5. reporting
  6. stakeholder management
  7. peak season
  8. coaching
PASS 7 of 8 must-haves present, 88%.
Failing input
Led a team on Zendesk, kept the SLA, owned escalation, ran weekly reporting and coaching.
  1. Zendesk
  2. SLA
  3. escalation
  4. onboarding
  5. reporting
  6. stakeholder management
  7. peak season
  8. coaching
FAIL 5 of 8 present, 63%. Below 75%.
The audit is real: the report on this site’s previous version, 29 September 2026. “Now” notes were checked against this site’s code on 4 October 2026. Guardrail inputs are dummies; the rules are ported from the CV skill’s scripts.

What it shows

Every team has experts whose judgement is hard to scale. Packaging that judgement as a skill means everyone’s assistant applies the same standard, and it improves in one place when the rules change. We build these for clients as part of enablement.

Under the hood

  • Claude
  • Markdown skill packages
  • Reference libraries
  1. 01Trigger

    The skill describes when it applies, so the assistant loads it for the right requests without being asked.

  2. 02Modes

    A full scored audit, a quick review, or silent prevention while code is being written.

  3. 03References

    Detailed checklists load only when a category is in scope, keeping the assistant focused.

  4. 04Profiles

    Rules shift by product type. A children's app gets bigger touch targets than an admin dashboard.

  5. 05User first

    Before the checklist, the assistant walks the page as real people would, including a keyboard user on a slow phone.

  6. 06Report

    Findings by severity with the score arithmetic shown, a concrete fix for each, and a check that stops it returning.

Want something like this built for your team?

Tell us about the process or the data. We'll reply within two business days with a first view of what we'd build.