Skip to content

feat: display 24h key price TWAP - #840

Closed
mayborn005 wants to merge 323 commits into
accesslayerorg:mainfrom
mayborn005:fix/issue-827
Closed

feat: display 24h key price TWAP#840
mayborn005 wants to merge 323 commits into
accesslayerorg:mainfrom
mayborn005:fix/issue-827

Conversation

@mayborn005

Copy link
Copy Markdown

Summary

  • fetch the key’s 24-hour time-weighted average price
  • show a loading skeleton and explanatory tooltip on the key detail page
  • compare TWAP with spot price and hide the panel when no TWAP is returned

Verification

  • pnpm build was attempted; dependency linking did not complete in the workspace, so CI should perform the full build.

Closes #827

Chucks1093 and others added 30 commits June 30, 2026 09:39
…env-vars-522

Add environment variable contribution guide
…e-421-creator-card-skeleton

feat(accesslayerorg#421): add CreatorCardSkeleton matching CreatorCard layout
…mat-activity-amount-helper

feat: add formatActivityAmount helper for XLM transaction amounts
…ng-error-states

docs: standardize loading and error state guidelines for page components
Add integration test for clamp helper being applied to key amount input field
…on-test-for-isownwallet-edit-controls-533

feat: add integration tests for isOwnWallet and implement isOwnWallet…
Add helper for computing bonding curve price at any given supply step without mutating contract state
- Add isOwnWallet(address, connectedAddress) to walletConnection.utils.ts
- Returns false when connectedAddress is null (wallet not connected)
- Performs case-insensitive comparison for address matching
- Add comprehensive unit tests covering all acceptance criteria:
  - Matching addresses return true
  - Non-matching addresses return false
  - Null connected address returns false
  - Case-insensitive comparison works correctly
…-wallet-utility

Add isOwnWallet utility function with unit tests
Closes accesslayerorg#539

- HoldingsEmptyState: settled-empty only (skeleton while loading)
- CTA to /creators; aria role=status
- tests: empty settle + no flash during load
…oldings-empty-state

feat(holdings): empty state UI when wallet has no creator keys
Trade confirmation now shows "Bought/Sold {n} key(s) from {creator}"
instead of a generic holdings-refreshed message. The quick-buy demo
flow in CreatorCard uses the same wording for consistency.
Issue 557: Add copy-to-clipboard button for creator Stellar address
- Add FEATURED_CREATOR_STELLAR_ADDRESS constant (demo Stellar public key)
- Add stellarAddressCopied state for 2-second Copied! feedback
- Add handleCopyStellarAddress using existing copyTextToClipboard util
- Render address row with truncated mono display and accessible copy button
- Button aria-label toggles between 'Copy Stellar address' and 'Stellar address copied'

Issue 556: Add structured debug log for React Query cache miss
- Import useQueryClient in useCreatorDetail
- Detect cache miss by checking queryClient.getQueryData before fetch
- Emit console.debug with { creator_id, cache_status: 'miss', duration_ms }
- Log is skipped in test environments (NODE_ENV === 'test')

Issue 555: Add unit tests for useFormatXlm hook
- Create src/hooks/useFormatXlm.ts with formatXlm() and useFormatXlm()
- 16 tests covering: default 2dp precision, decimal override (0 and 7),
  thousands separator, zero input, large values without scientific notation,
  and hook interface stability

Issue 554: Add T keyboard shortcut to open trade panel
- Add isTradeShortcut() helper (bare T, no modifiers)
- Stabilise openTradeDialog with useCallback
- Register keydown listener after openTradeDialog declaration to avoid
  TS2448 'used before declaration' error
- Listener respects isEditableShortcutTarget() and cleans up on unmount
- Document shortcut in README.md

Misc: update .gitignore with __snapshots__, *.snap, coverage, .nyc_output,
      Thumbs.db, and lock files from other package managers
…helper

feat: Add creator card subtitle clamp helper
…ering

- Create PriceSparkline component rendering SVG path from dataPoints array
- Handle 7, 1, and 0 data point edge cases safely
- Apply emerald-400 line color when last value > first value
- Co-locate tests following existing __tests__/ convention

Closes accesslayerorg#572
…ice-sparkline

test: add PriceSparkline component and unit tests for data point rendering
…-timing-logging

Add Navigation Timing Performance Logging for Client-Side Route Loads
Chucks1093 and others added 26 commits August 26, 2026 16:57
…gs-sorting-tests

Feature/holdings sorting tests
…-modal-improvements

Wallet connect modal improvements
…rs-infinite-scroll-776

feat: add key holder infinite scroll
…curve-price-preview

test: cover bonding curve price preview
…it-tests-following-empty-state

Fix/component unit tests following empty state
…accesslayerorg#814)

Fetch a per-holder stakedQuantity from the holders endpoint and surface the
liquid vs. staked split in the holder list:

- KeyHolderEntry / KeyHolder gain an optional stakedQuantity field
- rankKeyHolders derives stakedQuantity (clamped to [0, keyCount]) and
  liquidQuantity (keyCount - stakedQuantity) per ranked entry; ranking stays
  keyed on total quantity so staked keys still count toward rank
- KeyHolderList renders Staked, Liquid and Total columns with a header row
  and shows a staking badge on rows where stakedQuantity > 0
- CreatorDetailPage sample holders carry demo staked values

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Surface staking economics on the key detail page so holders can weigh
staking:

- Course gains stakingPoolBalance / totalStaked / recentFeeInflow from the
  key detail API
- stakingRewards.utils computes estimated APY
  (recentFeeInflow * 12 / stakingPoolBalance * 100, null on divide-by-zero)
  and hasStakingActivity() for the hide condition
- StakingRewardsSection renders pool balance, total staked and est. APY with
  a "Stake your keys" CTA to /profile?tab=staking, a loading skeleton while
  data fetches, and nothing when there is no staking activity
- CreatorDetailPage renders it below the stat cards (demo stats until the API
  returns real values)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ction (accesslayerorg#818, accesslayerorg#816)

Introduces a creator dashboard at /creator/:id/dashboard whose Settings tab
hosts the two creator-facing configuration surfaces. Both issues share this
previously-missing page.

accesslayerorg#818 — Edit Profile:
- creatorMetadata.utils: name (64) / bio (256) limit validation and a
  minimal-change diff
- CreatorMetadataForm pre-fills current metadata, shows live character
  counters, blocks submit while over a limit or unchanged, and submits only
  changed fields
- useUpdateMetadataMutation issues the update_metadata contract call

accesslayerorg#816 — Auction Setup:
- auctionConfig.utils: derives Not configured / Active (X of Y sold) /
  Completed state and validates price (> 0) and supply (whole, > 0)
- AuctionSetupPanel shows current state, validated price/supply inputs, and a
  Cancel Auction button only while auction_sold is zero
- useConfigureAuctionMutation / useCancelAuctionMutation issue
  configure_auction / cancel_auction with a success toast on confirmation

Course gains name/bio/avatarUri and auctionPrice/auctionSupply/auctionSold.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…creator-keys-leaderboard-779

feat: add trending creator keys leaderboard
…-holder-count-780

fix(wallet): add optimistic holder count update on key purchase (accesslayerorg#780)
@netlify

netlify Bot commented Aug 28, 2026

Copy link
Copy Markdown

Deploy Preview for accesslayer ready!

Name Link
🔨 Latest commit 3716bb1
🔍 Latest deploy log https://app.netlify.com/projects/accesslayer/deploys/6a91ce4d0eb3110008b71536
😎 Deploy Preview https://deploy-preview-840--accesslayer.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@drips-wave

drips-wave Bot commented Aug 28, 2026

Copy link
Copy Markdown

@mayborn005 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@github-actions

Copy link
Copy Markdown

👋 Thanks for your contribution! We don't accept pull requests directly to main. Please re-open your PR targeting the dev branch instead. See our contributing guide for details.

@github-actions github-actions Bot closed this Aug 28, 2026
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.