Conversation
- Add About page component at app/about/page.tsx - Implement hero section with Open protocol badge - Create six info cards (EarnProof, Veridatum Labs, Privacy-first proofs, Built on Stellar, Open source, Non-custodial) - Add CTA section with Create a proof and Verify a proof buttons - Implement comprehensive test suite (50+ tests) - Add Jest configuration and TypeScript type definitions - Ensure semantic HTML structure and accessibility - Match Figma design for responsive layout - Link only to existing routes (/how-it-works, /proofs/create, /verify) Closes #27
- Remove 6-card grid layout - Display only 3 feature cards: Open source, Non-custodial, Built on Stellar - Remove CTA section - Fix typo in Built on Stellar description - Match exact Figma design specifications Closes #27
Closes #33 - Replace hardcoded status metrics with live data from GET /health endpoint - Add useHealthCheck hook with timeout, stale, malformed, and retry handling - Render real service rows (API, Database, Stellar) with unknown state for contracts and webhooks unless returned by the API - Add error banner with retry button on failure/timeout - Show last-checked timestamp and API timestamp - Add focused tests for health check hook (9 cases) and status page (7 cases) - npm run lint, npm run build, and npm test all pass
Add a per-route performance budget gate and privacy-safe Web Vitals diagnostics for public verification/landing routes and the wallet worker flow. - scripts/performance/budget-check.js: pure, testable comparison of measured per-route First Load JS and largest static asset against scripts/performance/budgets.json, naming the specific chunk responsible for any regression. - scripts/performance/check-budgets.js: CLI that measures a real next build output (parsing the prerendered HTML each route emits, not internal bundler manifests) and exits non-zero on regression. - scripts/performance/budgets.json: committed per-route budgets plus documented test conditions (build mode, Node/npm versions, network/ CPU throttling profile for LCP/CLS/interaction-latency targets). - scripts/performance/budget-check.test.js: unit tests including a negative fixture that sets an artificially low budget and asserts the gate reports failure with route + chunk context. - .github/workflows/ci.yml: run lint, tests, build, then the budget check on every PR/push. - components/proofs/create-proof-flow.tsx: load @stellar/freighter-api via dynamic import() on demand (when the worker clicks 'Connect Freighter') instead of a static import, keeping wallet SDK bytes out of /proofs/create's first load JS as well as every public route's. - components/common/web-vitals-reporter.tsx, lib/diagnostics/sanitize.ts, lib/diagnostics/web-vitals-sink.ts: client-side LCP/CLS/interaction-latency reporter that strips wallet addresses, proof IDs, credential contents, payment data, and query strings before anything is logged, collapsing paths to a fixed route-pattern allow-list instead of forwarding raw high-cardinality URLs. - scripts/performance/README.md: documents methodology, test conditions, and the trade-off of unit-testing the budget gate and shipping real-user Web Vitals reporting now instead of a synthetic Lighthouse/Playwright CI job, given this repo has no browser/server e2e fixture yet. Bundle evidence: after next build, the @stellar/freighter-api chunk is referenced only by /proofs/create's dynamic import, and does not appear in the <script> tags Next.js emits for /, /verify, /verify/credential, or any other public route.
Introduce a dedicated Playwright visual regression suite under e2e/visual/ that screenshots representative public, wallet-connected, loading, empty, error, and success states across three viewports (1440x900 desktop, 768x1024 tablet, 390x844 mobile). - New playwright.config.ts scoped to the visual suite only, separate from any other Playwright suite the project may add later. - e2e/visual/public-pages.visual.spec.ts covers every static public route (home, how-it-works, developers, issuers, faq, privacy, terms, status). - e2e/visual/verify.visual.spec.ts and verify-credential.visual.spec.ts cover the public verification pages' empty, loading, success, not-found, and error states via mocked API responses. - e2e/visual/proof-flow.visual.spec.ts covers the wallet-connect and proof-creation flow's disconnected, loading, error, empty, populated, and success states. There is no dashboard route yet, so wallet connection (seeded via localStorage, never a real extension) stands in for the issue's 'authenticated' state, documented explicitly in the README. - All dynamic values (proof IDs, payment IDs, transaction hashes, timestamps) come from fixed synthetic fixtures in e2e/visual/fixtures/payments.ts, injected through Playwright route interception. No real user data, wallets, or credentials appear anywhere in the suite. - Animations/transitions are disabled suite-wide before every screenshot; locale/timezone are pinned for deterministic date formatting. - Conservative maxDiffPixelRatio (0.01) configured centrally. - CI: new visual-regression job in .github/workflows/ci.yml runs the suite against a production build and uploads the Playwright report and diff artifacts on failure. - Baseline images are intentionally not generated from this local (Windows) environment, since Playwright screenshots are platform- sensitive; they are generated from the CI (Linux) run itself in a follow-up commit on this branch. - e2e/visual/README.md documents viewport rationale, route/component ownership, state coverage, stabilization techniques, and the required visual-review process for baseline updates. CONTRIBUTING.md cross-references the same requirement. - jest.config.mjs excludes e2e/ so jest does not try to run the Playwright specs.
Add a Playwright + axe-core accessibility gate covering every route that ships in app/ today (home, how-it-works, faq, developers, issuers, privacy, terms, status, proofs/create, verify, verify/credential, and a 404), plus keyboard-interaction tests for skip links, the FAQ accordion disclosure, form error focus/announcement, and focus restoration. - e2e/accessibility/: axe scans (WCAG2A/AA + WCAG21A/AA) fail CI on any critical/serious violation and report the route, rule id, and DOM nodes involved. routes.ts is the single place to register a new route so payments/history/detail pages can be scanned automatically once they exist. - Dynamic states (wallet-connected, loading, error, success) on proofs/create and verify/verify-credential are scanned via mocked Freighter wallet messaging and mocked API responses, self-contained to this PR. - keyboard.spec.ts exercises real keyboard automation: skip link, accordion toggle, error-focus + aria-describedby association, and focus restoration after disconnect/clear actions. - Fixes found by the new gate: unhandled promise rejections in create-proof-flow.tsx that left users stuck with no error on API failure, a missing accessible name on the payment classification select, sub-4.5:1 text contrast in three components, and no skip link in the app. Also restores focus after wallet disconnect and FAQ search-clear, which previously dropped focus to <body>. - docs/accessibility-testing.md documents automated coverage and a manual screen-reader checklist for what automation cannot verify. - .github/workflows/ci.yml runs the frontend test suite and a new accessibility job that uploads a report artifact on failure. Runs at Desktop Chrome and Mobile Chrome (Pixel 5) viewports via playwright.config.ts. npm run lint, npm run test -- --runInBand, npm run test:e2e:a11y, and npm run build all pass.
Visual-review note: these 66 baseline images (22 states x 3 viewports) were generated locally against the committed specs and reviewed by hand against the app's current, approved layouts before being added — no intentional layout change accompanies this commit. GitHub Actions requires maintainer approval to run workflows for this PR (first-time contributor on this fork), so a Linux CI run to generate platform-matched baselines per e2e/visual/README.md's own guidance was not available at the time of this commit. These baselines were generated locally instead as a stopgap so the suite is complete and reviewable now. Once a maintainer approves the workflow run and the visual-regression CI job runs, any platform-driven font-rendering diff should be treated as expected (not a real regression) and the baselines replaced with the CI-run output, called out as its own visual-review note per the process this suite documents.
Add Playwright coverage for the worker flows that exist in the app today: wallet connect/authenticate against a mocked Freighter wallet, payment sync/classification, minimum-income proof creation, and public proof and credential verification (including privacy-boundary assertions for expired/revoked/unknown states). - e2e/fixtures/synthetic-data.ts: synthetic wallet, payment, proof, and credential fixtures (no real keys, addresses, or live data) - e2e/fixtures/freighter-mock.ts: mocks the Freighter postMessage relay protocol used by @stellar/freighter-api, no real extension required - e2e/fixtures/api-mock.ts: mocks the EarnProof backend API via route interception, no live network dependency - e2e/fixtures/test.ts, pages.ts, flows.ts: shared Playwright fixtures and page objects, structured so future dashboard/history/revocation specs can be added without reworking the existing ones - playwright.config.ts: desktop and mobile viewport projects, trace/ screenshot retained on failure only - CI: new e2e job installing Chromium and running the suite Dashboard, payment-selection-as-a-separate-step, history/detail, and revocation UI do not exist in the app yet, so no tests were written against fictitious pages for those.
Feat/about page
Add QR proof scanner
feat(ui): connect status page to health API
Add route performance budgets and Web Vitals diagnostics
Revert "Run Codex PR reviews automatically" (#68)
…udgets perf(bundle): add bundle composition and duplicate dependency budgets
test(telemetry): add privacy-safe client error telemetry contract tests
test(i18n): add localization readiness and pseudo-locale tests
test(a11y): add zoom, reflow, and large-text regression tests
feat(#22): add minimum-income proof type details page
feat(a11y): add accessible mobile navigation menu
…rage test(auth): add authentication flow test suite
…ts-for-proof-creation-flows test(components): add proof creation flow tests
…tests-for-form-validation test(forms): add form validation test suite
…-fixes Codebase contribution fixes
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Explain what changed, why the change is needed, and the user-facing impact.
Related issue
Closes #[issue number]
Type of change
Changes made
Validation
npm run lintnpm run buildPrivacy and security