Skip to content

feat: staking visibility + creator dashboard settings (#814, #816, #817, #818) - #820

Merged
Chucks1093 merged 3 commits into
accesslayerorg:devfrom
devsimze:feat/issues-814-816-817-818
Aug 27, 2026
Merged

feat: staking visibility + creator dashboard settings (#814, #816, #817, #818)#820
Chucks1093 merged 3 commits into
accesslayerorg:devfrom
devsimze:feat/issues-814-816-817-818

Conversation

@devsimze

Copy link
Copy Markdown
Contributor

Summary

Adds staking visibility and creator-configuration surfaces across the key detail page and a new creator dashboard.

Closes #814
Closes #816
Closes #817
Closes #818


#814 — Staking column in the holders list

  • KeyHolderEntry / KeyHolder gain an optional stakedQuantity from the holders endpoint.
  • rankKeyHolders derives stakedQuantity (clamped to [0, keyCount]; negatives / non-finite → 0) and liquidQuantity (keyCount − stakedQuantity). Ranking stays keyed on total quantity, so staked keys still count toward rank.
  • KeyHolderList renders a header row plus Staked / Liquid / Total / Share per row and shows a staking badge only when stakedQuantity > 0 (zero shows 0, no badge). Pagination path unchanged.

#817 — Staking Rewards section on the key detail page

  • Course gains stakingPoolBalance, totalStaked, recentFeeInflow.
  • stakingRewards.utils: computeEstimatedApy = recentFeeInflow * 12 / stakingPoolBalance * 100, returns null on divide-by-zero / non-finite input; hasStakingActivity drives the hide rule.
  • StakingRewardsSection shows pool balance, total staked and estimated APY, a "Stake your keys" CTA to /profile?tab=staking, a loading skeleton while data fetches, and renders nothing when there is no staking activity. Rendered on CreatorDetailPage below the stat cards.

#818 — Edit Profile on the creator dashboard settings tab

#816 — Auction Setup on the creator dashboard settings tab

  • auctionConfig.utils: derives Not configured / Active (X of Y sold) / Completed 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. Submits configure_auction / cancel_auction with a success toast on confirmation.
  • Course gains name / bio / avatarUri and auctionPrice / auctionSupply / auctionSold.

On-chain wiring is not in the client yet, so the metadata / auction contract calls are issued through useCreatorContractActions, which simulates signing latency and invalidates the creator detail query — mirroring the existing useTradeMutation pattern.

Testing

  • pnpm lint — clean
  • pnpm build (tsc -b && vite build) — clean
  • pnpm test — new suites added for keyHolderRanking, KeyHolderList, stakingRewards, StakingRewardsSection, creatorMetadata, auctionConfig, CreatorMetadataForm, AuctionSetupPanel. Pre-existing failures on dev are unchanged (no regressions).

Screenshots

UI changes — screenshots to follow.

devsimze and others added 3 commits August 27, 2026 09:50
…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>
@drips-wave

drips-wave Bot commented Aug 27, 2026

Copy link
Copy Markdown

@devsimze 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

@Chucks1093
Chucks1093 merged commit 434b251 into accesslayerorg:dev Aug 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment