Skip to content

feat(creator): add TipLeaderboard component for creator profile page - #1230

Closed
shadrach68 wants to merge 585 commits into
accesslayerorg:mainfrom
shadrach68:fix/1227-1228
Closed

shadrach68 wants to merge 585 commits into
accesslayerorg:mainfrom
shadrach68:fix/1227-1228

Conversation

@shadrach68

Copy link
Copy Markdown
Contributor

Closes #1227
Closes #1228

Adds src/components/creator/TipLeaderboard.tsx:

  • Ranked list of up to 10 tippers with truncated wallet, total tipped in XLM, and rank medals (🥇🥈🥉) for top 3
  • Anonymous tippers shown with 'Anonymous' label (italic, muted)
  • Section returns null when entries is empty — hidden with no tips received
  • Follows existing creator component patterns (cn, formatNumber, lucide icons, border-white/10 card style)

Chucks1093 and others added 30 commits September 28, 2026 08:24
…-acl-whitelist

feat: add ACL whitelist viewer for admin contract integration management
…atch-trade-ui

feat: add batch trade panel
…ferral-dashboard

feat: implement referral dashboard with unique link, stats, paginatio…
…oud/fix/issue-999

feat: show graduated curve milestones on key details
…ntdown-buy-sell-buttons

Closes accesslayerorg#998: live cooldown countdown on Buy/Sell buttons
Creators need one shareable page that aggregates everything they have
deployed, so investors can evaluate a creator's activity without hopping
between individual key pages (accesslayerorg#1054).

Adds the profile data layer (keys filtered by creator address, stats
aggregated across every key, social links resolved only when published),
a localStorage-persisted follow store, the header / stats row / deployed
keys grid UI, and a dedicated 404 state for unknown creator addresses.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…cesslayerorg#1051)

Readers had no way to see whether contract RPC, the indexer, the API, or IPFS
were healthy. Add a public /status route backed by a typed status service
(GET /status, POST /status/subscribe) that renders the current state of each
service, 30-day uptime history, every published incident with its affected
services and start/resolution times, and an email subscribe form. The snapshot
polls every 60 seconds, and the uptime math lives in pure helpers covered by
unit and page tests so it stays verifiable.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…rds (accesslayerorg#1017)

- Add StakingVaultService with stake/unstake API methods and types
- Add stakingVault query key namespace to queryKeys factory
- Add useVaultStakes, useStakeVaultMutation, useUnstakeVaultMutation hooks
- Add StakeForm component with amount input, lock period selector (7/30/90/180d), estimated reward preview
- Add ActiveStakesList with per-stake countdown, accrued rewards, pool balance, and unstake CTA
- Unstake button disabled with tooltip during lock period (acceptance criteria)
- Add StakingVaultPanel container integrating form and stakes list
- Integrate StakingVaultPanel into CreatorDetailPage after StakingRewardsSection
- Add unit tests for StakeForm and ActiveStakesList covering all acceptance criteria
…esslayerorg#1015 holding cap PR

After the large dev rebase (20+ PRs merged including holding cap accesslayerorg#1015, batch trade accesslayerorg#1044, cooldown accesslayerorg#1043), several issues were introduced in BuySellKeyFlow and TradeDialog:

- TradeDialog.tsx: priceImpactPercent guard was changed to currentSupply <= 0, incorrectly blocking valid impact calculations at supply=0 (new bonding curves). Reverted to < 0 to match calculateTradePriceImpact's own guard. Fixes 4 failing circuit breaker tests.
- BuySellKeyFlow.tsx: Unused HoldingCapIndicator import and dead isCapLimitReached/isCapBreached/isCapExceeded useMemo blocks added but never rendered. Removed to fix ESLint no-unused-vars errors.
- TradeDialog.tsx: Unused isCapExceeded combined variable removed (isCapLimitReached and isCapBreached used directly).
- course.service.ts: holdingCap and maxHoldingCap properties missing from KeyConfig interface despite being accessed via keyConfig?.holdingCap in both BuySellKeyFlow and TradeDialog. Added with correct JSDoc (accesslayerorg#1015).

Result: 31/31 circuit breaker tests pass, lint 0 errors, 0 TypeScript errors.
 Add holder leaderboard page for each creator key showing top 100 holders ranked by balance.
Closes accesslayerorg#1056
- course.service.ts: Restore WhitelistEntry and Course whitelist properties dropped during merge (accesslayerorg#1031)
- BuySellKeyFlow.tsx: Re-integrate HoldingCapIndicator and cap limit/breach checks to satisfy holding cap tests (accesslayerorg#1015)
- TradeDialog.tsx: Clean up dataset access, redundant jumps, Number.NaN, nullish coalescing, and ambiguous spacing
- TradeDialog.sellPayoutDisplay.test.tsx: Acknowledge high price impact override checkbox on 5-key sell
- TradeDialog.mobileBottomSheet.test.tsx: Provide safe supply in mobile trade confirmation test to avoid tripping circuit breaker
Make the creator key detail and trade flows fully usable at 375px+:

- Key detail page: Key Purchase CTA row stacks vertically with a
  full-width 44px Buy button; Watchlist button grows to a 44px tap
  target; TWAP and Fee Structure rows wrap instead of overflowing.
- Price chart: mobile-tuned recharts layout (tighter margins, straight
  x-ticks with a larger min gap, slimmer y-axis gutter) so the
  ResponsiveContainer-backed chart resizes cleanly without distortion.
- Trade buy/sell form: the mobile bottom sheet's Cancel/Confirm and MAX
  buttons get >=44px tap targets, and the sheet height uses 100dvh so
  mobile browser chrome no longer clips it.
- Activity/analytics filter tabs: horizontally scrollable rail on mobile
  (overflow-x-auto + new no-scrollbar utility + snap points) with 44px
  pills; falls back to a wrapped row on sm+.
- Add tests locking in the sheet behavior, filter-tab rail, and chart
  resize plumbing.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…e block

Merging dev into this branch spliced the accesslayerorg#1055 mobile layout in front of
dev's newer whitelist/cooldown version of the Key Purchase block, leaving
a duplicated <div> and an unclosed tag that broke JSX parsing:

  src/pages/CreatorDetailPage.tsx:698 Parsing error: Expected
  corresponding JSX closing tag for 'div'  (failed the CI Lint step)

Resolve it by keeping one wrapper with the accesslayerorg#1055 responsive classes and
dev's upstream content intact: the whitelist status badge, the lockout
copy, the spread/oracle indicators and the cooldown-aware CTA. The stale
pre-merge Buy button is dropped in favour of dev's TradeCooldownButton,
which inherits the same >=44px mobile tap target.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…le-listing-purchase-ui

feat(bundles): add creator key bundle listing and purchase UI (accesslayerorg#981)
Add public creator profile page with stats and social links
…uit-breaker-status-indicator

feat: build circuit breaker status indicator on buy form for price im…
…e-responsive-key-detail-trade

feat(accesslayerorg#1055): mobile-responsive key detail and trade pages
Resolved conflicts in src/routes.tsx by combining both changes:
- Kept HolderLeaderboardPage import and routes from feature branch
- Added BundlesPage and BundleDetailPage imports and routes from upstream
- Added CreatorPublicProfilePage routes from upstream

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Chucks1093 and others added 26 commits October 19, 2026 19:08
The four new components in this PR import from modules that did not
exist in the project. Add them so tsc -b and vite build pass:

- src/components/ui/card.tsx        (Card, CardHeader, CardTitle,
                                     CardDescription, CardContent, CardFooter)
- src/components/ui/label.tsx       (Label)
- src/components/ui/input.tsx       (Input)
- src/components/ui/alert.tsx       (Alert, AlertDescription)
- src/components/ui/badge.tsx       (Badge, badgeVariants)
- src/components/ui/progress.tsx    (Progress)
- src/components/ui/checkbox.tsx    (Checkbox)
- src/components/ui/radio-group.tsx (RadioGroup, RadioGroupItem)
- package.json: add react-hook-form ^7.54.2
…nance-insurance-transfer-auction

feat: add governance, insurance, transfer, and auction UI components
…-1147-1157-1159-1160

feat: platform pause banner, announcement composer, trade limits and spotlight auction
…ues-1176-1181

feat(accesslayerorg#1176,accesslayerorg#1178,accesslayerorg#1179,accesslayerorg#1181): milestone toasts, vote delegation, insurance pool, rebalance history
…ccesslayerorg#1155)

Implement batch swap interface allowing users to queue multiple buy or sell orders across different keys and submit them as a single atomic transaction with per-item slippage controls. Accessible via Batch Trade drawer from portfolio, discovery, and creator detail pages, with BatchSwapExecuted toast on confirmation.
…ator management

- BootstrapPriceChart: price decline curve with countdown timer (accesslayerorg#1180)
- KeySplitPanel: propose split with impact preview and timelock countdown (accesslayerorg#1182)
- CommunityPolls: create/vote polls with live result bar charts (accesslayerorg#1199)
- CoCreatorManagementPanel: roster table with role badges and add/remove (accesslayerorg#1202)
…112-1128-1126-1129

feat: trade confirmation slippage, whitelist panel, governance voting, and atomic swaps
- Remove unused lineStart/lineEnd from BootstrapPriceChart
- Remove unused AlertTriangle from KeySplitPanel
- Add missing useEffect import to KeySplitPanel
…strap-chart-split-poll-co-creator-1180-1182-1199-1202

feat: bootstrap price chart, key split panel, community polls, co-creator management
…5-batch-swap-ui

feat(trade): build batch swap UI for executing multiple key trades (#…
…own (accesslayerorg#1163)

- Add GET /keys/:keyId/lockup/:wallet service method, query key, and
  useKeyLockup hook (per-wallet cache, 404 treated as unlocked)
- Add KeyLockupBadge with live days/hours/minutes countdown that removes
  itself at unlock
- PortfolioHoldingRow: show lock-up badge and disable Sell with a
  LockupActive reason while locked
- KeyDetail: disable Sell Key with LockupActive message + countdown and
  render the badge; re-enables automatically at unlock timestamp
…sue-1200-nft-badge-showcase

feat(profile): add NFT badge showcase to wallet profile page
…ey-lockup-status-indicator

feat(keys): implement key lock-up status indicator and sell unlock countdown (accesslayerorg#1163)
…nel-and-recent-tips-feed

feat: build tipping panel and public recent tips feed on key detail page
…t banner

- Implemented CampaignCard component to display individual campaign details including criteria, reward pool, and eligibility progress.
- Created CampaignsSection component to list active campaigns on the discovery page, with a link to view all campaigns.
- Developed SpotlightBanner component to showcase the current spotlight auction with key statistics and countdown.
- Added useActiveCampaigns hook to fetch active campaigns based on the connected wallet.
- Created CampaignsPage to display a full list of active campaigns with loading and error states.
- Introduced campaignsService to handle API requests for active campaigns.
- Added utility functions for campaign eligibility and filtering active campaigns.
- Implemented tests for CampaignsSection and SpotlightBanner components to ensure proper rendering and functionality.
- Added utility tests for campaign-related functions and action attribution utilities.
…ntProvider (accesslayerorg#1224)

AnnouncementItem calls useAnnouncementContent, which needs a QueryClient.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…potlight-campaigns-badge-progress-cocreator-attribution-1219-1224-1225-1226

Feat/discovery spotlight campaigns badge progress cocreator attribution 1219 1224 1225 1226
…ators pay key holders pro-rata, with validation, a confirmation step, and a distribution history.

The new DistributeRevenuePanel component is mounted on the dashboard's revenue tab for creators. The creator enters an amount, which is validated inline against the 1 XLM minimum, and a live preview shows how that amount splits across the top 5 eligible key holders. A confirm modal restates the total and the top holder allocations before anything is submitted. On confirm, the panel submits the distribute_revenue contract call, shows a success toast, and invalidates the holders and revenue summary queries. Confirmed distributions are persisted and listed below the panel with their date, amount, and holder count, including an empty state when no distributions exist yet. The flow is covered by component tests exercising validation, preview accuracy, the confirm and cancel paths, the submitted contract arguments, and the history update, plus unit tests for the underlying distribution utils.

Closes accesslayerorg#1201
…revenue-share-distribution-UI-in-creator-dashboard

Add a Distribute Revenue panel to the creator dashboard that lets creators pay key holders pro-rata, with validation, a confirmation step, and a distribution history.
@netlify

netlify Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for accesslayer ready!

Name Link
🔨 Latest commit 127acfa
🔍 Latest deploy log https://app.netlify.com/projects/accesslayer/deploys/6ad7d6201d519534ee6b547e
😎 Deploy Preview https://deploy-preview-1230--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 Oct 20, 2026

Copy link
Copy Markdown

@shadrach68 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 Oct 20, 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.