Skip to content

merge from develop to main - #132

Merged
Hallab7 merged 181 commits into
mainfrom
develop
Sep 9, 2026
Merged

merge from develop to main#132
Hallab7 merged 181 commits into
mainfrom
develop

Conversation

@Hallab7

@Hallab7 Hallab7 commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Description

Explain what changed, why the change is needed, and the user-facing impact.

Related issue

Closes #[issue number]

Type of change

  • Feature
  • Bug fix
  • Refactor
  • Documentation
  • Test or build improvement

Changes made

Validation

  • npm run lint
  • npm run build
  • Relevant automated tests were added or updated.
  • Desktop and mobile behavior was verified.

Privacy and security

  • No secrets, wallet private material, signing keys, or private financial data were added.
  • Public verification output exposes only intentionally disclosed data.
  • User-facing claims match implemented behavior.

Alu-card19 and others added 30 commits August 24, 2026 22:07
- 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(ui): connect status page to health API
Add route performance budgets and Web Vitals diagnostics
Revert "Run Codex PR reviews automatically" (#68)
Ghostcecode and others added 28 commits August 31, 2026 10:54
…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
@vercel

vercel Bot commented Sep 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
earnproof Ready Ready Preview Sep 9, 2026 9:19pm UTC

@Hallab7
Hallab7 merged commit 275e526 into main Sep 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.