feat: Add new apps -- exchanges#227
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds an Exchange app type, registers six new projects and multiple exchange/wallet app entries with icons and ENSv2 readiness benchmarks, and applies minor UI updates (relative-time refresh and empty-rank guard). ChangesExchange and Wallet Apps Expansion
🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly Related PRs
Suggested Labels
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Adds the first set of “Exchange” apps (and related wallets) to the ENSAwards dataset, wiring the new app type into formatting/utilities, homepage rendering, and ENSv2 readiness benchmarks so these new apps/projects can appear in leaderboards and technical details.
Changes:
- Introduces
AppTypes.Exchange(parsing + formatting) and applies ENSv2 readiness best practice to exchanges. - Adds new projects (Binance, OKX, Kraken, Crypto.com, Robinhood) plus corresponding wallet/exchange apps and benchmark entries.
- Improves UI behavior by skipping empty “Top …” sections and making relative timestamps refresh (via
useNow).
Reviewed changes
Copilot reviewed 45 out of 55 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| ensawards.org/src/pages/index.astro | Hides “Top …” lists when there are no apps for a given type (incl. new Exchange type). |
| ensawards.org/src/components/molecules/technicalDetails/benchmark/acceptanceTestResultDetails.tsx | Makes “Test completed … ago” update live using useNow + relativeTo. |
| ensawards.org/data/projects/types.ts | Registers new project IDs. |
| ensawards.org/data/projects/binance/index.ts | Adds Binance project metadata. |
| ensawards.org/data/projects/binance/icon.tsx | Adds Binance project icon. |
| ensawards.org/data/projects/okx/index.ts | Adds OKX project metadata. |
| ensawards.org/data/projects/okx/icon.tsx | Adds OKX project icon. |
| ensawards.org/data/projects/kraken/index.ts | Adds Kraken project metadata. |
| ensawards.org/data/projects/kraken/icon.tsx | Adds Kraken project icon (placeholder). |
| ensawards.org/data/projects/cryptocom/index.ts | Adds Crypto.com project metadata. |
| ensawards.org/data/projects/cryptocom/icon.tsx | Adds Crypto.com project icon. |
| ensawards.org/data/projects/robinhood/index.ts | Adds Robinhood project metadata. |
| ensawards.org/data/projects/robinhood/icon.tsx | Adds Robinhood project icon. |
| ensawards.org/data/ens-best-practices/utils.ts | Formats best-practice targets for the new Exchange type. |
| ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts | Applies ENSv2 readiness resolution best practice to exchanges. |
| ensawards.org/data/apps/types.ts | Introduces AppTypes.Exchange. |
| ensawards.org/data/apps/utils.ts | Parses/prints Exchange app type values. |
| ensawards.org/data/apps/utils.test.ts | Extends app utils tests for Exchange. |
| ensawards.org/data/apps/binance-wallet/index.ts | Adds Binance Wallet app metadata. |
| ensawards.org/data/apps/binance-wallet/icon.tsx | Adds Binance Wallet icon. |
| ensawards.org/data/apps/binance-wallet/benchmarks/index.tsx | Adds Binance Wallet ENSv2 readiness benchmark. |
| ensawards.org/data/apps/binance-exchange/index.ts | Adds Binance Exchange app metadata. |
| ensawards.org/data/apps/binance-exchange/icon.tsx | Adds Binance Exchange icon. |
| ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx | Adds Binance Exchange ENSv2 readiness benchmark. |
| ensawards.org/data/apps/okx-wallet/index.ts | Adds OKX Wallet app metadata. |
| ensawards.org/data/apps/okx-wallet/icon.tsx | Adds OKX Wallet icon. |
| ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx | Adds OKX Wallet ENSv2 readiness benchmark. |
| ensawards.org/data/apps/okx-exchange/index.ts | Adds OKX Exchange app metadata. |
| ensawards.org/data/apps/okx-exchange/icon.tsx | Adds OKX Exchange icon. |
| ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx | Adds OKX Exchange ENSv2 readiness benchmark. |
| ensawards.org/data/apps/kraken-wallet/index.ts | Adds Kraken Wallet app metadata. |
| ensawards.org/data/apps/kraken-wallet/icon.tsx | Adds Kraken Wallet icon (placeholder). |
| ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx | Adds Kraken Wallet ENSv2 readiness benchmark. |
| ensawards.org/data/apps/kraken-exchange/index.ts | Adds Kraken Exchange app metadata. |
| ensawards.org/data/apps/kraken-exchange/icon.tsx | Adds Kraken Exchange icon (placeholder). |
| ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx | Adds Kraken Exchange ENSv2 readiness benchmark. |
| ensawards.org/data/apps/cryptocom-wallet/index.ts | Adds Crypto.com Wallet app metadata. |
| ensawards.org/data/apps/cryptocom-wallet/icon.tsx | Adds Crypto.com Wallet icon. |
| ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx | Adds Crypto.com Wallet ENSv2 readiness benchmark. |
| ensawards.org/data/apps/cryptocom-exchange/index.ts | Adds Crypto.com Exchange app metadata. |
| ensawards.org/data/apps/cryptocom-exchange/icon.tsx | Adds Crypto.com Exchange icon. |
| ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx | Adds Crypto.com Exchange ENSv2 readiness benchmark. |
| ensawards.org/data/apps/robinhood-wallet/index.ts | Adds Robinhood Wallet app metadata. |
| ensawards.org/data/apps/robinhood-wallet/benchmarks/index.tsx | Adds Robinhood Wallet ENSv2 readiness benchmark. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
ensawards.org/data/apps/kraken-wallet/icon.tsx (1)
1-18: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winPlaceholder icon noted; actual Kraken icon pending.
This icon renders a plain gray rectangle. Per the PR objectives, Kraken official icons are pending outreach. Ensure the actual branded icon is added before the PR leaves draft status.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ensawards.org/data/apps/kraken-wallet/icon.tsx` around lines 1 - 18, The current Icon component (Icon) renders only a placeholder gray rect; replace this placeholder SVG with the official Kraken-branded SVG asset before moving the PR out of draft: update the Icon component to import or inline the official Kraken SVG paths (preserving props spread and className usage via cn("p-1", className)) and remove the <rect> placeholder so the component returns the proper Kraken mark at the same viewBox and attributes used today; ensure the exported default remains Icon so consumers are unchanged.ensawards.org/data/projects/kraken/icon.tsx (1)
1-18: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winPlaceholder icon noted; actual Kraken icon pending.
This icon renders a plain gray rectangle. Per the PR objectives, Kraken official icons are pending outreach. Ensure the actual branded icon is added before the PR leaves draft status.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ensawards.org/data/projects/kraken/icon.tsx` around lines 1 - 18, Replace the placeholder gray rectangle in the Icon component with the official Kraken brand SVG before removing draft status: update the Icon React component (function name "Icon") so the <svg> markup contains the official Kraken path(s)/shapes and brand colors instead of the <rect> fill="`#E5E7EB`"; keep existing props spread and className usage via cn("p-1", className) so styling and accessibility props pass through; if the official SVG is not yet available, leave a clear TODO comment referencing this Icon component and the pending asset to avoid merging incomplete branding.ensawards.org/data/apps/kraken-exchange/icon.tsx (1)
1-18: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winPlaceholder icon noted; actual Kraken icon pending.
This icon renders a plain gray rectangle. Per the PR objectives, Kraken official icons are pending outreach. Ensure the actual branded icon is added before the PR leaves draft status.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ensawards.org/data/apps/kraken-exchange/icon.tsx` around lines 1 - 18, The component Icon currently renders a placeholder gray rectangle; replace the <rect> placeholder inside the Icon component with the official Kraken SVG markup (paths/groups) once the branded asset is available, preserving the outer Icon function, its props signature (Icon: ({ className, ...props }: React.SVGProps<SVGSVGElement>)), the className composition via cn("p-1", className) and the {...props} spread so consumers keep control over attributes; ensure the replacement uses the official brand fill/paths and includes accessible attributes (title or aria-label/role) as appropriate before removing the draft status.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@ensawards.org/data/apps/robinhood-wallet/icon.tsx`:
- Around line 5-6: The large inlined base64 constant robinhoodWalletIconDataUri
should be replaced by a static image asset: create a file (e.g.,
robinhood-wallet.png or .webp) with the decoded image, remove the
robinhoodWalletIconDataUri string, import the asset (e.g., import
robinhoodWalletImg from './robinhood-wallet.png'), and update any usage to
reference the imported asset's URL (.src or default import depending on your
bundler) so the bundle no longer contains the giant base64 string.
---
Outside diff comments:
In `@ensawards.org/data/apps/kraken-exchange/icon.tsx`:
- Around line 1-18: The component Icon currently renders a placeholder gray
rectangle; replace the <rect> placeholder inside the Icon component with the
official Kraken SVG markup (paths/groups) once the branded asset is available,
preserving the outer Icon function, its props signature (Icon: ({ className,
...props }: React.SVGProps<SVGSVGElement>)), the className composition via
cn("p-1", className) and the {...props} spread so consumers keep control over
attributes; ensure the replacement uses the official brand fill/paths and
includes accessible attributes (title or aria-label/role) as appropriate before
removing the draft status.
In `@ensawards.org/data/apps/kraken-wallet/icon.tsx`:
- Around line 1-18: The current Icon component (Icon) renders only a placeholder
gray rect; replace this placeholder SVG with the official Kraken-branded SVG
asset before moving the PR out of draft: update the Icon component to import or
inline the official Kraken SVG paths (preserving props spread and className
usage via cn("p-1", className)) and remove the <rect> placeholder so the
component returns the proper Kraken mark at the same viewBox and attributes used
today; ensure the exported default remains Icon so consumers are unchanged.
In `@ensawards.org/data/projects/kraken/icon.tsx`:
- Around line 1-18: Replace the placeholder gray rectangle in the Icon component
with the official Kraken brand SVG before removing draft status: update the Icon
React component (function name "Icon") so the <svg> markup contains the official
Kraken path(s)/shapes and brand colors instead of the <rect> fill="`#E5E7EB`";
keep existing props spread and className usage via cn("p-1", className) so
styling and accessibility props pass through; if the official SVG is not yet
available, leave a clear TODO comment referencing this Icon component and the
pending asset to avoid merging incomplete branding.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 05368830-ba73-4ee2-bbb2-e91a9ef84f60
⛔ Files ignored due to path filters (10)
ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-copy-trading.gifis excluded by!**/*.gifensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-withdrawal.pngis excluded by!**/*.pngensawards.org/data/apps/binance-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gifis excluded by!**/*.gifensawards.org/data/apps/cryptocom-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gifis excluded by!**/*.gifensawards.org/data/apps/cryptocom-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.pngis excluded by!**/*.pngensawards.org/data/apps/kraken-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gifis excluded by!**/*.gifensawards.org/data/apps/kraken-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.pngis excluded by!**/*.pngensawards.org/data/apps/okx-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.pngis excluded by!**/*.pngensawards.org/data/apps/okx-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.pngis excluded by!**/*.pngensawards.org/data/apps/robinhood-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gifis excluded by!**/*.gif
📒 Files selected for processing (45)
ensawards.org/data/apps/binance-exchange/benchmarks/index.tsxensawards.org/data/apps/binance-exchange/icon.tsxensawards.org/data/apps/binance-exchange/index.tsensawards.org/data/apps/binance-wallet/benchmarks/index.tsxensawards.org/data/apps/binance-wallet/icon.tsxensawards.org/data/apps/binance-wallet/index.tsensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsxensawards.org/data/apps/cryptocom-exchange/icon.tsxensawards.org/data/apps/cryptocom-exchange/index.tsensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsxensawards.org/data/apps/cryptocom-wallet/icon.tsxensawards.org/data/apps/cryptocom-wallet/index.tsensawards.org/data/apps/kraken-exchange/benchmarks/index.tsxensawards.org/data/apps/kraken-exchange/icon.tsxensawards.org/data/apps/kraken-exchange/index.tsensawards.org/data/apps/kraken-wallet/benchmarks/index.tsxensawards.org/data/apps/kraken-wallet/icon.tsxensawards.org/data/apps/kraken-wallet/index.tsensawards.org/data/apps/okx-exchange/benchmarks/index.tsxensawards.org/data/apps/okx-exchange/icon.tsxensawards.org/data/apps/okx-exchange/index.tsensawards.org/data/apps/okx-wallet/benchmarks/index.tsxensawards.org/data/apps/okx-wallet/icon.tsxensawards.org/data/apps/okx-wallet/index.tsensawards.org/data/apps/robinhood-wallet/benchmarks/index.tsxensawards.org/data/apps/robinhood-wallet/icon.tsxensawards.org/data/apps/robinhood-wallet/index.tsensawards.org/data/apps/types.tsensawards.org/data/apps/utils.test.tsensawards.org/data/apps/utils.tsensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.tsensawards.org/data/ens-best-practices/utils.tsensawards.org/data/projects/binance/icon.tsxensawards.org/data/projects/binance/index.tsensawards.org/data/projects/cryptocom/icon.tsxensawards.org/data/projects/cryptocom/index.tsensawards.org/data/projects/kraken/icon.tsxensawards.org/data/projects/kraken/index.tsensawards.org/data/projects/okx/icon.tsxensawards.org/data/projects/okx/index.tsensawards.org/data/projects/robinhood/icon.tsxensawards.org/data/projects/robinhood/index.tsensawards.org/data/projects/types.tsensawards.org/src/components/molecules/technicalDetails/benchmark/acceptanceTestResultDetails.tsxensawards.org/src/pages/index.astro
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@ensawards.org/data/apps/coinbase-exchange/icon.tsx`:
- Around line 3-16: The Icon component uses an inline style for padding and
spreads props directly; change it to follow the Kraken pattern by destructuring
className from props in the Icon function signature, merge a Tailwind padding
class (p-0.5) using the existing cn() utility (e.g., cn("p-0.5", className)),
remove style={{ padding: "2px" }}, and pass the merged className into the SVG
while still spreading the remaining props so the component uses Tailwind classes
consistently.
In `@ensawards.org/data/projects/gemini/icon.tsx`:
- Around line 8-12: The root SVG element in the icon component includes
unnecessary attributes (xmlnsXlink, x, y, xmlSpace); remove those attributes
from the <svg> tag in this file (icon.tsx) to shrink markup—keep the other
attributes like viewBox intact and verify there is no xlink:href usage elsewhere
in the component before removing xmlnsXlink.
In `@ensawards.org/data/projects/kraken/icon.tsx`:
- Around line 11-12: The SVG in icon.tsx currently uses a hardcoded fill
attribute (fill="`#5741d9`"); remove that attribute and instead add the equivalent
Tailwind fill class to the className string (e.g., include fill-[`#5741d9`] or
another project-approved fill-* utility) so the SVG styling matches
Robinhood/Gemini icons; update the cn("p-1 bg-white rounded-md", className) call
to include the new fill-* class.
- Line 8: Remove the unused xmlnsXlink="http://www.w3.org/1999/xlink" attribute
from the SVG element in icon.tsx (search for the SVG JSX opening tag that
contains xmlnsXlink) — delete that attribute and ensure there are no xlink:href
usages elsewhere in the file before committing.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: bc2af214-b5fd-4584-8e11-d45f14cc1561
⛔ Files ignored due to path filters (2)
ensawards.org/data/apps/coinbase-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.pngis excluded by!**/*.pngensawards.org/data/apps/gemini-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.pngis excluded by!**/*.png
📒 Files selected for processing (15)
ensawards.org/data/apps/binance-exchange/benchmarks/index.tsxensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsxensawards.org/data/apps/coinbase-exchange/icon.tsxensawards.org/data/apps/coinbase-exchange/index.tsensawards.org/data/apps/gemini-wallet/benchmarks/index.tsxensawards.org/data/apps/gemini-wallet/icon.tsxensawards.org/data/apps/gemini-wallet/index.tsensawards.org/data/apps/kraken-exchange/icon.tsxensawards.org/data/apps/kraken-wallet/icon.tsxensawards.org/data/projects/gemini/icon.tsxensawards.org/data/projects/gemini/index.tsensawards.org/data/projects/kraken/icon.tsxensawards.org/data/projects/kraken/index.tsensawards.org/data/projects/robinhood/icon.tsxensawards.org/data/projects/types.ts
Greptile SummaryThis PR introduces a new
Confidence Score: 5/5Safe to merge — all changes are additive data registrations and small defensive UI improvements with no breaking modifications to existing logic. The new Exchange type is wired consistently end-to-end (type constant, both switch functions, best-practice applicability, and tests). Every new app and benchmark file follows the established pattern exactly. The useNow addition to AcceptanceTestResultFooter matches identical usage already present in multiple other components. The homepage null guard is purely defensive and has no risk. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
AT[AppTypes const] -->|+ Exchange| UT[utils.ts\nasAppType / formatAppType]
AT -->|+ Exchange| BPU[ens-best-practices/utils.ts\nformatBestPracticeTarget]
AT -->|+ Exchange| EVR[ensv2-ready-resolution\nappliesTo]
PT[projects/types.ts\n+ 7 project IDs] --> PA[Project definitions\nbinance, okx, kraken,\ncryptoCom, robinhood,\ngemini, frame]
PA --> EA[Exchange apps\nbinance-exchange\nokx-exchange\nkraken-exchange\ncryptoCom-exchange\nrobinhood-exchange\ncoinbase-exchange]
PA --> WA[Wallet apps\nbinance-wallet\nokx-wallet\nkraken-wallet\ncryptoCom-wallet\nrobinhood-wallet\ngemini-wallet\nframe-wallet]
EA --> EB[Exchange benchmarks\nENSv2 resolution - Fail]
WA --> WB[Wallet benchmarks\nENSv2 resolution - Pass/Fail]
AT -->|iterate all types| IDX[index.astro\nnull-guard for empty types]
ATRD[acceptanceTestResultDetails.tsx\nuseNow - RelativeTime refresh] --> EB
ATRD --> WB
Reviews (2): Last reviewed commit: "Apply AI agents' suggestions, pt.3" | Re-trigger Greptile |
lightwalker-eth
left a comment
There was a problem hiding this comment.
@Y3drk Great work 🚀 So happy to see the context expanding quickly under the new content model 👍
Lite PR → Add new apps - Exchanges
Summary
Exchangetype from the spec (from both tranches) provided by @caldonia-eth. The majority of these projects also provide wallets, so they were also added:Why
Testing
typecheck,lint, andtestcommands locally to ensure that the migration didn't break anything, and later confirmed that in our CI workflowNotes for reviewer
My problem with the testing of the exchanges
My overall problem with adding these apps under the
exchangetype is that I couldn't find any ENS usage in their functionalities, not even speaking about those that would allow us to benchmark them on our acceptance test... However, almost all of these projects have their own wallets, which are super easy to benchmark.Possible solutions
exchangepart of the apps where ENS could be used but isn't, and our acceptance test could be performed (some user search, leaderboards etc), and add a benchmark with a failing result because of that. That way, we can also add these apps under theexchangetype -- still seems pretty legitimate. We should be able to defend our PoV by saying that these apps could easily integrate ENS in the tested places (added to this PR)exchangetype. While not technically fully true, said apps are still part of the same project -- seems risky and feels to much like bending the truth imo. We want to appear trustworthy, and that could damage this image. Personally, I'd avoid this optionExchanges with wallets and/or possibilities of ENS integration (Implementation of option 2)
copy-tradingflow. Added a benchmark pointing out how this doesn't allow ENS names as a traders identifier but should.Pre-Review Checklist (Blocking)