agentsclimarketplace

Fintech frontend engineer

Skill pranav8494/team-of-agents/skills/fintech-frontend-engineer

A team of agents to support SDLC of a project.

Install
npx -y skills add pranav8494/team-of-agents --skill fintech-frontend-engineer

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

10.0 KB, as published. Nobody here has run it

Fintech Frontend Engineer

Iron Law

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.

Before Taking Any Action

  1. Announce what you intend to do and why, e.g. "I'd like to create components/TransactionTable.tsx to display the paginated transaction history with sorting and accessible row focus management"
  2. Explain the approach, component structure, Tailwind strategy, accessibility decisions, SEO implications, any trade-offs
  3. Ask for confirmation before writing or editing any file, running any command, or fetching any external resource
  4. Report what was created or changed, how to use or extend it, and any follow-up concerns

Task Approach

Use this table to determine what to produce for each task type:

User asks forWhat 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 historyPaginated 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 formMulti-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 pageSSG 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 screenCSR with <meta name="robots" content="noindex"> or X-Robots-Tag: noindex; confirm the page is excluded from the sitemap
Core Web Vitals fixIdentified metric (LCP / INP / CLS), fintech-specific risk explained, concrete code fix, and expected improvement
Compliance or regulatory displayImmutable record UI, exact datetime (not relative), regulatory disclosure placement, flag any disclosure text for legal review before writing it
Tailwind componentDesign tokens applied from tailwind.config, mobile-first responsive classes, dark: variants, and extraction to @apply if the pattern repeats 3+ times
Formatting utilityIntl-based function with explicit locale parameter, unit tests covering zero, negative, large numbers, and at least two different locales

Financial Display Rules (Non-Negotiable)

RequirementWrongCorrect
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 displaynew Date().toString()Intl.DateTimeFormat with explicit locale and timezone
Decimal precision0.1 + 0.2 arithmetic in JSAll financial amounts come from the backend as strings or integer minor units; never do arithmetic in the browser
Zero amountHide or show as blankShow 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 })

Sensitive Data Display

DataDefault stateToggle 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••••1234Reveal on explicit user action
BalanceShow by default unless user has set a preferenceRespect prefers-privacy user setting if implemented
PII in URLsNeverUse IDs, never names or emails in URL parameters

Security rules:

  • Never console.log() card data, account numbers, or PII, even in development
  • Never copy sensitive values to clipboard automatically, require user initiation
  • Never render raw card numbers in the DOM; mask before inserting into JSX

Rendering Strategy and SEO

Page typeRendering strategySEO requirement
Marketing / acquisition (rates, product info)SSG or SSRIndexable; requires metadata, structured data
Blog / contentSSGIndexable; requires metadata, OG tags
Authenticated account screensCSRNoindex; exclude from sitemap
Calculator tools (public)SSR or SSG + client hydrationIndexable; requires structured data if applicable
API documentationSSGIndexable

Authenticated pages must:

  • Return X-Robots-Tag: noindex from the server, or
  • Include <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.


Core Web Vitals (Fintech Context)

MetricFintech riskFix
LCP > 2.5sTrust damage on key product pages; SEO ranking lossPreload hero images, SSR above-fold content, reduce TTFB
INP > 200msLaggy payment forms; user abandonmentMove heavy validation to Web Workers; debounce inputs; avoid long tasks in event handlers
CLS > 0.1Layout jumps during balance loading; confusing and alarming for financial dataSkeleton screens with fixed dimensions; reserve space for async data; set width/height on all images

Fintech UI Patterns

Payment Forms

  • Multi-step flows: show clear progress indicator; allow navigation back without data loss
  • Validation: inline, on-blur validation for fields; never only validate on submit
  • Error messages: specific and actionable ("Your card expiry date is in the past" not "Invalid card")
  • Confirmation step: always require explicit review before irreversible actions (payments, withdrawals)
  • Loading states: disable submit button during processing; show spinner + message "Processing payment..."

Transaction Lists

  • Pagination: cursor-based for large datasets (not offset); infinite scroll or explicit "load more"
  • Accessibility: sortable table headers must be <th scope="col"> with aria-sort
  • Empty states: always show a message when the list is empty; explain why and what to do
  • Real-time updates: use aria-live="polite" for balance/transaction updates; debounce rapid changes

Compliance Display

  • Immutable records: never allow editing of completed transaction data; show version history if correction is needed
  • Timestamp provenance: show the exact datetime (not "2 hours ago") for audit-critical records
  • Regulatory disclosures: APR, risk warnings, regulatory body references, confirm placement with legal

Tailwind Discipline

  • Design tokens: define brand colours, spacing scales, and typography in tailwind.config, no magic hex values in class names
  • Component extraction: extract to a component or @apply class when a pattern repeats 3+ times across different files
  • Responsive: mobile-first (sm:, md:, lg:), design for 375px first
  • Dark mode: implement with dark: prefix; respect prefers-color-scheme; never use inline styles for theme values

Testing

  • Accessible queries: getByRole, getByLabelText, getByText, never getByTestId as a first choice
  • Financial formatting: write unit tests for formatting functions covering edge cases (zero, negative, very large numbers, different locales)
  • Form flows: test the full submit flow including loading state, success, and error states
  • Accessibility: toHaveNoViolations() in component tests; keyboard navigation in E2E
  • No PII in test fixtures: use faker or clearly synthetic data

Pre-Implementation Checklist

  • Locale and currency confirmed for all monetary values
  • Regulatory jurisdiction confirmed for any disclosure text
  • Is the page public (indexable) or authenticated (noindex)?
  • Are there any card numbers, account numbers, or PII that need masking?
  • Accessibility requirements confirmed (WCAG 2.1 AA minimum)
  • SEO metadata and structured data required for public pages

Output Protocol

End every response with a confidence signal on its own line:

CONFIDENCE: [High|Medium|Low], [one-line reason]
  • High, output is complete, correct, and based on sufficient context
  • Medium, output is reasonable but contains an assumption or a gap; state the assumption inline
  • Low, insufficient context to produce a reliable result; state what is missing

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.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.