From team-of-agents
Use when building React applications or components in a fintech context, implementing financial dashboards, transaction histories, payment flows, or data-heavy UIs, working with Tailwind CSS, optimising for SEO (meta tags, structured data, Core Web Vitals), improving page load performance, handling sensitive financial data display, designing accessible form flows, or any frontend task where fintech domain knowledge and SEO awareness matter alongside clean React and Tailwind work.
npx claudepluginhub pranav8494/team-of-agentsThis skill uses the workspace's default tool permissions.
```
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Share bugs, ideas, or general feedback.
Display correctness is as important as logic correctness. Showing the wrong currency,
locale, or amount is a bug with legal consequences, not just a UX failure.
Never log PII to the console. Never render raw card numbers.
components/TransactionTable.tsx to display the paginated transaction history with sorting and accessible row focus management"Use this table to determine what to produce for each task type:
| User asks for | What to produce |
|---|---|
| Financial data display (amounts, balances) | Component using Intl.NumberFormat with explicit locale and currency; zero and negative amount handling; unit tests for edge cases (zero, negative, large numbers, multiple locales) |
| Transaction list or history | Paginated table with <th scope="col"> and aria-sort, cursor-based pagination, empty state message, aria-live="polite" for real-time updates, and accessible row focus management |
| Payment form | Multi-step flow with progress indicator, on-blur inline validation, specific error messages, confirmation step before irreversible action, disabled submit during processing |
| Sensitive data display (card numbers, account numbers) | Masked default state per the Sensitive Data Display table; reveal toggle requiring explicit user action; no console.log of unmasked values |
| Public marketing or product page | SSG or SSR rendering strategy, <title> and <meta description>, Open Graph tags, structured data where applicable, and noindex confirmation for any auth-gated content |
| Authenticated account screen | CSR with <meta name="robots" content="noindex"> or X-Robots-Tag: noindex; confirm the page is excluded from the sitemap |
| Core Web Vitals fix | Identified metric (LCP / INP / CLS), fintech-specific risk explained, concrete code fix, and expected improvement |
| Compliance or regulatory display | Immutable record UI, exact datetime (not relative), regulatory disclosure placement — flag any disclosure text for legal review before writing it |
| Tailwind component | Design tokens applied from tailwind.config, mobile-first responsive classes, dark: variants, and extraction to @apply if the pattern repeats 3+ times |
| Formatting utility | Intl-based function with explicit locale parameter, unit tests covering zero, negative, large numbers, and at least two different locales |
| Requirement | Wrong | Correct |
|---|---|---|
| Currency formatting | "£" + amount.toFixed(2) | new Intl.NumberFormat('en-GB', { style: 'currency', currency: 'GBP' }).format(amount) |
| Large number abbreviation | "1.2M" (hardcoded) | Intl.NumberFormat with notation: 'compact' and locale |
| Date/time display | new Date().toString() | Intl.DateTimeFormat with explicit locale and timezone |
| Decimal precision | 0.1 + 0.2 arithmetic in JS | All financial amounts come from the backend as strings or integer minor units; never do arithmetic in the browser |
| Zero amount | Hide or show as blank | Show explicitly as £0.00 — blank amounts cause user confusion and support calls |
| Negative amounts | -£50.00 (ambiguous) | Show in red with a minus sign −£50.00; use Intl.NumberFormat which handles sign correctly |
| Percentage rates | "3.5%" (hardcoded) | Format with locale: Intl.NumberFormat('en-GB', { style: 'percent', minimumFractionDigits: 2 }) |
| Data | Default state | Toggle behaviour |
|---|---|---|
| Card number | •••• •••• •••• 4242 (last 4 visible) | Reveal on explicit user action with confirmation |
| Sort code / routing number | ••-••-42 (last pair visible) | Reveal on explicit user action |
| Account number | ••••1234 | Reveal on explicit user action |
| Balance | Show by default unless user has set a preference | Respect prefers-privacy user setting if implemented |
| PII in URLs | Never | Use IDs, never names or emails in URL parameters |
Security rules:
console.log() card data, account numbers, or PII — even in development| Page type | Rendering strategy | SEO requirement |
|---|---|---|
| Marketing / acquisition (rates, product info) | SSG or SSR | Indexable; requires metadata, structured data |
| Blog / content | SSG | Indexable; requires metadata, OG tags |
| Authenticated account screens | CSR | Noindex; exclude from sitemap |
| Calculator tools (public) | SSR or SSG + client hydration | Indexable; requires structured data if applicable |
| API documentation | SSG | Indexable |
Authenticated pages must:
X-Robots-Tag: noindex from the server, or<meta name="robots" content="noindex"> in the <head>Never serve account data at a crawlable URL. Auth-gated pages that return a login redirect are fine; pages that conditionally render content based on client-side auth state may briefly expose content to Googlebot.
| Metric | Fintech risk | Fix |
|---|---|---|
| LCP > 2.5s | Trust damage on key product pages; SEO ranking loss | Preload hero images, SSR above-fold content, reduce TTFB |
| INP > 200ms | Laggy payment forms; user abandonment | Move heavy validation to Web Workers; debounce inputs; avoid long tasks in event handlers |
| CLS > 0.1 | Layout jumps during balance loading; confusing and alarming for financial data | Skeleton screens with fixed dimensions; reserve space for async data; set width/height on all images |
<th scope="col"> with aria-sortaria-live="polite" for balance/transaction updates; debounce rapid changestailwind.config — no magic hex values in class names@apply class when a pattern repeats 3+ times across different filessm:, md:, lg:) — design for 375px firstdark: prefix; respect prefers-color-scheme; never use inline styles for theme valuesgetByRole, getByLabelText, getByText — never getByTestId as a first choicetoHaveNoViolations() in component tests; keyboard navigation in E2Efaker or clearly synthetic dataEnd every response with a confidence signal on its own line:
CONFIDENCE: [High|Medium|Low] — [one-line reason]
If the task is outside this skill's scope or you lack the information needed to proceed, return this instead of a confidence signal:
BLOCKED: [reason] — [what information would unblock this]
Do not guess or produce low-quality output to avoid returning BLOCKED. A precise BLOCKED is more useful than a low-confidence guess.