home / skills / phrazzld / claude-config / check-product-standards

check-product-standards skill

/skills/check-product-standards

This skill audits Misty Step products for version display, attribution, and contact links to ensure compliant shipping experiences.

npx playbooks add skill phrazzld/claude-config --skill check-product-standards

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
5.7 KB
---
name: check-product-standards
description: |
  Verify Misty Step product standards: version display, attribution, contact link.
  Required for all shipping products. Invoked by /groom as P1 fundamental.
effort: high
---

# /check-product-standards

Verify every Misty Step product meets baseline shipping standards.

## Why This Exists

If we charge money, users need:
- **Version info** — Know what they're running, check for updates
- **Attribution** — Know who made it, builds trust
- **Contact method** — Get help when something goes wrong

These are non-negotiable for shipped products.

## Required Elements

### 1. Version Display

**Requirement:** Visible version number that links to releases page.

**Location:** Footer, settings, or about section

**Format:**
```
v1.2.3  →  links to /releases or GitHub releases
```

**Implementation patterns:**
```tsx
// From package.json or build-time injection
<a href="/releases" className="text-muted-foreground text-sm">
  v{process.env.NEXT_PUBLIC_APP_VERSION}
</a>
```

**Check for:**
- [ ] Version visible somewhere in UI
- [ ] Version is dynamic (from package.json, not hardcoded)
- [ ] Version links to releases/changelog page

### 2. Misty Step Attribution

**Requirement:** "A Misty Step project" or similar, linking to MistyStep.io

**Location:** Footer

**Format:**
```
A Misty Step project  →  links to https://mistystep.io
```

**Implementation patterns:**
```tsx
<a
  href="https://mistystep.io"
  target="_blank"
  rel="noopener noreferrer"
  className="text-muted-foreground text-sm hover:text-foreground"
>
  A Misty Step project
</a>
```

**Acceptable variations:**
- "A Misty Step project"
- "Built by Misty Step"
- "From Misty Step"
- Misty Step logo with link

**Check for:**
- [ ] Attribution text/logo present
- [ ] Links to https://mistystep.io
- [ ] Opens in new tab (external link)

### 3. Contact/Support Link

**Requirement:** Way to contact for help, feedback, or issues.

**Location:** Footer, help menu, or settings

**Format:**
```
Contact | Feedback | Support  →  mailto:[email protected]
```

**Implementation patterns:**
```tsx
<a href="mailto:[email protected]" className="text-muted-foreground text-sm">
  Contact
</a>

// Or with subject line
<a href="mailto:[email protected]?subject=Feedback%20for%20[AppName]">
  Feedback
</a>
```

**Acceptable variations:**
- "Contact"
- "Support"
- "Feedback"
- "Help"
- "Get in touch"
- Email icon with mailto link

**Check for:**
- [ ] Contact method visible
- [ ] Links to [email protected] (or specific product email)
- [ ] Accessible without authentication (can report issues even if logged out)

## Audit Process

### Step 1: Find Footer/Chrome Components

```bash
# Common patterns
rg -l "footer" --type tsx --type jsx
rg -l "Footer" --type tsx --type jsx
rg -l "layout" --type tsx --type jsx

# Look for version references
rg "version|VERSION" --type tsx --type jsx --type ts

# Look for mistystep references
rg -i "misty.?step" --type tsx --type jsx
```

### Step 2: Check Each Requirement

For each requirement, verify:
1. **Presence** — Element exists in the UI
2. **Functionality** — Links work correctly
3. **Accessibility** — Visible on all pages, not hidden

### Step 3: Report Findings

```markdown
## Product Standards Audit

| Requirement | Status | Location | Issue |
|-------------|--------|----------|-------|
| Version display | ❌ Missing | - | No version shown |
| Version links to releases | ❌ Missing | - | No releases page |
| Misty Step attribution | ✅ Present | Footer.tsx:42 | - |
| Attribution links correctly | ✅ Present | - | - |
| Contact link | ⚠️ Partial | Footer.tsx:45 | Links to Twitter, not email |

### Issues to Create
1. [P1] Add version display to footer
2. [P1] Create /releases page or link to GitHub releases
3. [P1] Add contact email link ([email protected])
```

## Priority

**P1 (Fundamentals)** — These are baseline shipping requirements.

Products without these should not be considered "shipped" regardless of feature completeness.

## Integration with /groom

Groom invokes this skill as part of Step 4 (Issue-Creator Skills):

```
/log-product-standards-issues
```

Creates issues for any missing requirements with:
- Label: `domain/product-standards`
- Priority: `priority/p1`

## Quick Fix Patterns

### Minimal Footer Component

```tsx
// components/Footer.tsx
export function Footer() {
  const version = process.env.NEXT_PUBLIC_APP_VERSION || 'dev'

  return (
    <footer className="border-t py-6 text-center text-sm text-muted-foreground">
      <div className="flex items-center justify-center gap-4">
        <a href="/releases" className="hover:text-foreground">
          v{version}
        </a>
        <span>·</span>
        <a
          href="https://mistystep.io"
          target="_blank"
          rel="noopener noreferrer"
          className="hover:text-foreground"
        >
          A Misty Step project
        </a>
        <span>·</span>
        <a
          href="mailto:[email protected]"
          className="hover:text-foreground"
        >
          Contact
        </a>
      </div>
    </footer>
  )
}
```

### Inject Version at Build Time

```js
// next.config.js
const { version } = require('./package.json')

module.exports = {
  env: {
    NEXT_PUBLIC_APP_VERSION: version,
  },
}
```

### Simple Releases Page

```tsx
// app/releases/page.tsx
export default function ReleasesPage() {
  return (
    <div className="container py-12">
      <h1>Releases</h1>
      <p>
        View full changelog on{' '}
        <a href="https://github.com/MistyStep/[repo]/releases">
          GitHub Releases
        </a>
      </p>
    </div>
  )
}
```

## Related Skills

- `/check-landing` — Landing page audit (includes footer checks)
- `/brand-builder` — Establishes brand profile
- `/changelog` — Creates releases infrastructure

Overview

This skill verifies that every Misty Step product meets minimum shipping standards: visible version display, proper Misty Step attribution, and an accessible contact method. It flags missing or incorrect implementations and produces prioritized issues so products can be considered ship-ready. This is a P1 fundamental invoked during grooming.

How this skill works

The skill scans UI chrome and footer components to locate version, attribution, and contact links. It validates presence, correct targets (releases page, https://mistystep.io, mailto:[email protected]), link behavior (external links open safely), and accessibility across pages. When a check fails, it generates clear, prioritized issues labeled for product-standards.

When to use it

  • Every product before marking as shipped (required P1 check)
  • During grooming (/groom) as part of issue creation step
  • When performing a release readiness audit
  • When adding or refactoring app chrome or footer components
  • When implementing build-time injection for version info

Best practices

  • Display a dynamic version string sourced from package.json or build env, not a hardcoded value
  • Link the version string to a releases or changelog page (internal or GitHub releases)
  • Include clear footer attribution linking to https://mistystep.io and open external links with rel="noopener noreferrer"
  • Expose a visible contact method (mailto:[email protected] or product-specific support) accessible without authentication
  • Ensure these elements appear in the global layout/footer so they’re visible on all pages

Example use cases

  • Audit a new product before first paid release and create P1 issues for missing items
  • Scan an existing app after a redesign to confirm version, attribution, and contact weren’t removed
  • Add version injection at build time and verify the UI links to the new /releases page
  • Convert footer components to a shared layout and confirm contact is accessible when logged out
  • Create issues for teams to add or fix missing email, attribution link, or releases link

FAQ

What exact targets should links use?

Version should link to a releases or changelog page; attribution must link to https://mistystep.io; contact should use mailto:[email protected] or a product support email.

Where should these elements live in the app?

Prefer the global footer or a persistent chrome/settings/about area so they are visible across all pages and without requiring authentication.