Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
585 commits
Select commit Hold shift + click to select a range
b92df58
Merge pull request #1041 from Tekprecious/feature/admin-acl-whitelist
Chucks1093 Sep 28, 2026
13cd26b
Merge pull request #1044 from Killerjunior/codex/1029-batch-trade-ui
Chucks1093 Sep 28, 2026
20139a6
Merge pull request #1048 from oscarj007/feature/1016-referral-dashboard
Chucks1093 Sep 28, 2026
02c280b
Merge pull request #1007 from nasirudeenbadirudeen87-cloud/fix/issue-999
Chucks1093 Sep 28, 2026
a1f8039
Merge branch 'dev' into feat/cooldown-countdown-buy-sell-buttons
Ajibose Sep 28, 2026
f4c0e56
Merge pull request #1043 from Ajibose/feat/cooldown-countdown-buy-sel…
Chucks1093 Sep 28, 2026
aac7817
Merge branch 'dev' into feat/981-bundle-listing-purchase-ui
Cmitchelle7 Sep 28, 2026
42057a8
Add public creator profile page with stats and social links
Obito-2222 Sep 28, 2026
d41804b
Add public platform status page with health grid and incident log (#1…
shekwolonathanielbala-cyber Sep 28, 2026
4e7fe0a
feat: add staking vault UI for locking creator keys and tracking rewa…
mysterio123865 Sep 28, 2026
72c133d
Merge branch 'dev' into feat/1034-circuit-breaker-status-indicator
Unclebaffa Sep 28, 2026
98da767
fix: resolve post-merge lint errors and type errors introduced by #10…
Unclebaffa Sep 28, 2026
f35fdd8
feat: add creator key holder leaderboard
Jessicaayegh Sep 28, 2026
5fee937
ci issue fixed
Jessicaayegh Sep 28, 2026
a36f42a
ci fixed
Jessicaayegh Sep 28, 2026
c1f787a
fix: resolve build, type, and test regressions following dev rebase
Unclebaffa Sep 28, 2026
0f0b59d
feat(#1055): mobile-responsive key detail and trade pages
DanbabaJr Sep 28, 2026
2d9eb76
feat(admin): add timelock queue viewer (#1014)
JerryOJJ Sep 28, 2026
33c9eb6
Merge branch 'dev' into feat/1055-mobile-responsive-key-detail-trade
DanbabaJr Sep 28, 2026
5a205c2
fix(#1055): resolve bad merge in key detail Key Purchase block
DanbabaJr Sep 28, 2026
a85dc59
feat: #1050 add social share functionality for creator key purchases
T-kesh Sep 28, 2026
8aa16a5
Merge upstream/main into feat/924-pre-launch-auction-ui
baling-1 Sep 28, 2026
df8cb12
Merge upstream/dev into feat/924-pre-launch-auction-ui
baling-1 Sep 28, 2026
05dbc5f
feat(creator-revenue): build creator revenue dashboard with earnings …
timiturn3r Sep 28, 2026
c91e964
feat: add portfolio performance chart with range selectors
sksneh Sep 28, 2026
40174af
Merge pull request #1046 from Cmitchelle7/feat/981-bundle-listing-pur…
Chucks1093 Sep 28, 2026
57a4740
Merge pull request #1060 from Obito-2222/dev
Chucks1093 Sep 28, 2026
c261b72
Merge pull request #1039 from Unclebaffa/feat/1034-circuit-breaker-st…
Chucks1093 Sep 28, 2026
64a44b8
Merge pull request #1065 from DanbabaJr/feat/1055-mobile-responsive-k…
Chucks1093 Sep 28, 2026
505d6e9
Merge upstream/dev into feat/creator-holder-leaderboard
Jessicaayegh Sep 28, 2026
c83761a
Merge pull request #1063 from Jessicaayegh/feat/creator-holder-leader…
Chucks1093 Sep 28, 2026
3131c68
Merge branch 'dev' of https://github.com/accesslayerorg/accesslayer-c…
timiturn3r Sep 28, 2026
ee94600
Merge upstream dev into #1051 status page branch
shekwolonathanielbala-cyber Sep 28, 2026
d993d2d
Merge upstream dev (holder leaderboard) into status page branch
shekwolonathanielbala-cyber Sep 28, 2026
dce53a5
Merge pull request #1061 from shekwolonathanielbala-cyber/dev
Chucks1093 Sep 28, 2026
eae9bd4
Merge branch 'dev' of https://github.com/accesslayerorg/accesslayer-c…
timiturn3r Sep 28, 2026
439d881
Merge pull request #1067 from toniasteve15-ui/feature/1059-creator-re…
Chucks1093 Sep 28, 2026
794f122
Merge remote-tracking branch 'upstream/dev' into feat/917-staking-das…
CHKM001 Sep 28, 2026
8f868ba
fix: declare deprecation state, banner import, and Course.deprecation…
samjay8 Sep 28, 2026
050b739
fix: restore course service merge blocks
baling-1 Sep 29, 2026
122185f
Merge pull request #1009 from CHKM001/feat/917-staking-dashboard
Chucks1093 Sep 29, 2026
77e0530
Merge pull request #1068 from sksneh/cloud-fixer/1052-portfolio-perfo…
Chucks1093 Sep 29, 2026
b57393b
Merge branch 'dev' into feat/978-subscription-access-gate
whitezaddy Sep 29, 2026
a8dee9e
Fix lint errors in BatchTradePanel and CreatorDetailPage
whitezaddy Sep 29, 2026
b094d31
Fix typescript compilation errors
whitezaddy Sep 29, 2026
800f433
Merge branch 'dev' into feat/issues-964-966-968
Mutech939 Sep 29, 2026
778bd31
Merge pull request #1004 from whitezaddy/feat/978-subscription-access…
Chucks1093 Sep 29, 2026
c0ce67b
Merge branch 'dev' into feat/987-1023-royalties-staking-pool
sojetunde8 Sep 29, 2026
5adf852
Merge branch 'dev' into feat/issues-953-955-961
k-deejah Sep 29, 2026
6cbae57
fix: resolve merge conflicts β€” App, TradeDialog, CreatorCard, Landing…
k-deejah Sep 29, 2026
69df860
fix: resolve pull conflicts β€” keep our parse-error fixes in TradeDial…
k-deejah Sep 29, 2026
ad1cf23
feat: add upgrade proxy status panel to admin dashboard (#1032)
actvabdulrahman Sep 29, 2026
2a415ca
Merge branch 'accesslayerorg:dev' into dev
actvabdulrahman Sep 29, 2026
c9ef026
Merge pull request #1069 from actvabdulrahman/dev
Chucks1093 Sep 29, 2026
aa715c0
Merge pull request #1064 from JerryOJJ/feat/1014-timelock-queue-admin
Chucks1093 Sep 29, 2026
03ee7c6
Merge upstream/dev into feat/924-pre-launch-auction-ui
baling-1 Sep 29, 2026
ed3854b
Merge pull request #938 from cold-13/feat/924-pre-launch-auction-ui
Chucks1093 Sep 29, 2026
5f7a659
feat(trade): show dynamic fee breakdown on trade confirmation screen …
Rafiat30 Sep 29, 2026
0b69494
fix: restore royalty earnings and reward pool imports lost in dev merge
sojetunde8 Sep 29, 2026
6e60188
feat(keys): add early access whitelist status indicator and gating
Francis6-git Sep 29, 2026
7c30d28
Merge branch 'dev' into feat/key-deprecation-flow
samjay8 Sep 29, 2026
f7b3a21
Merge pull request #1047 from sojetunde8/feat/987-1023-royalties-stak…
Chucks1093 Sep 29, 2026
b6a82e3
Merge branch 'dev' into feat/key-deprecation-flow
samjay8 Sep 29, 2026
8d0bfc2
Merge remote-tracking branch 'origin/feat/key-deprecation-flow'
samjay8 Sep 29, 2026
9443394
feat: add vesting schedule viewer to creator key portfolio (#1018)
sojetunde8 Sep 29, 2026
ac299d4
test: cover app error boundary recovery
edehvalentine236-jpg Sep 29, 2026
294f868
Merge dev into test/app-error-boundary-593
edehvalentine236-jpg Sep 29, 2026
6420b84
Merge branch 'dev' into feat/1050-creator-key-social-share
T-kesh Sep 29, 2026
9564022
Merge pull request #1038 from samjay8/feat/key-deprecation-flow
Chucks1093 Sep 30, 2026
25642c9
Merge pull request #1070 from Rafiat30/feat/trade-confirmation-fee-br…
Chucks1093 Sep 30, 2026
bbafa50
Merge pull request #1073 from sojetunde8/feat/1018-vesting-schedule-v…
Chucks1093 Sep 30, 2026
6dfa0ee
feat(creator): implement on-chain metadata display on key detail page…
VictorEzenma Sep 30, 2026
0ad8e39
Merge pull request #1072 from VictorEzenma/dev
Chucks1093 Sep 30, 2026
1e23cf5
feat(search): build global search across keys, creators, and transact…
funds0033-cmyk Sep 30, 2026
9d348c4
Merge branch 'dev' into feat/1050-creator-key-social-share
T-kesh Sep 30, 2026
9db7e9f
Merge branch 'dev' into feat/issue-965
Mutech939 Sep 30, 2026
97d2479
Merge pull request #1066 from T-kesh/feat/1050-creator-key-social-share
Chucks1093 Sep 30, 2026
bc6a6e7
fix: remove unused ContractPausedBanner import from LandingPage; fix …
k-deejah Sep 30, 2026
fe6f2ef
Merge pull request #1074 from edehvalentine236-jpg/test/app-error-bou…
Chucks1093 Sep 30, 2026
893fbfd
Update CONTRIBUTING.md
Ayfataan Sep 30, 2026
8503cad
Merge branch 'dev' into feat/954-batch-buy-ui
k-deejah Sep 30, 2026
333aa10
Merge branch 'dev' into feat/issues-953-955-961
k-deejah Sep 30, 2026
131a535
Merge remote-tracking branch 'origin/feat/issues-953-955-961' into fe…
k-deejah Sep 30, 2026
f0a9f18
fix: resolve parse error in CreatorCard, clean TradeDialog and Landin…
k-deejah Sep 30, 2026
1fd6858
feat(admin): add treasury distribution history viewer
Tek-Lizzy Sep 30, 2026
7d5a1b0
fix: resolve parse and lint errors in CreatorCard and LandingPage
k-deejah Sep 30, 2026
dd598a9
Merge pull request #972 from k-deejah/feat/954-batch-buy-ui
Chucks1093 Sep 30, 2026
f12f9cf
fix(router): remove duplicate router declaration in App.tsx
k-deejah Sep 30, 2026
8d357f6
fix(router): remove duplicate router declaration in App.tsx
k-deejah Sep 30, 2026
8628904
feat(alerts): price alert configuration UI (#1057)
chidii Sep 30, 2026
229eb95
Merge branch 'dev' into feat/issues-953-955-961
k-deejah Sep 30, 2026
9c2520d
Merge branch 'dev' into feat/1057-price-alert-ui
chidii Sep 30, 2026
b7bb9d4
Merge pull request #975 from Mutech939/feat/issues-964-966-968
Chucks1093 Sep 30, 2026
45e39cc
Merge branch 'dev' into feat/issues-953-955-961
k-deejah Sep 30, 2026
10a2f4f
fix: simplify Buy button, add PriceAlertButton integration
chidii Sep 30, 2026
962bafd
Merge pull request #976 from Mutech939/feat/issue-965
Chucks1093 Sep 30, 2026
9990557
feat: add platform-wide runtime error boundaries
Tek-Lizzy Sep 30, 2026
40c4878
Merge pull request #974 from k-deejah/feat/issues-953-955-961
Chucks1093 Sep 30, 2026
590ab13
Merge branch 'dev' into feat/early-access-whitelist-indicator-962
Francis6-git Sep 30, 2026
35fff08
fix(build): restore fee service typing and align component APIs
Francis6-git Sep 30, 2026
95544e0
Merge pull request #1079 from Tek-Lizzy/feature/1058-platform-error-b…
Chucks1093 Sep 30, 2026
97725ac
Merge branch 'dev' into feat/early-access-whitelist-indicator-962
Francis6-git Sep 30, 2026
126e35d
fix(types): add structured course deprecation metadata
Francis6-git Sep 30, 2026
74f7bb1
fix: merge pulled version
Francis6-git Sep 30, 2026
f51b50a
fix: align PriceAlertModal with FormInput and InlineValidationMessage…
chidii Oct 1, 2026
491dc1e
chore: commit pending Page and Alert component changes
chidii Oct 1, 2026
19e0110
Merge branch 'feat/1057-price-alert-ui' of https://github.com/chidii/…
chidii Oct 1, 2026
c6c5420
Merge branch 'dev' into feat/1057-price-alert-ui
chidii Oct 1, 2026
da0a249
Merge pull request #1071 from Francis6-git/feat/early-access-whitelis…
Chucks1093 Oct 1, 2026
37d2730
Merge branch 'dev' into feat/1057-price-alert-ui
chidii Oct 1, 2026
07a8772
fix(lint): remove unused showStaleIndicator
chidii Oct 1, 2026
9b29ba1
feat(keys): supply cap progress indicator on key detail page (#1035)
chidii Oct 1, 2026
42b9e3d
Merge pull request #1078 from chidii/feat/1057-price-alert-ui
Chucks1093 Oct 1, 2026
3eabfb8
Merge pull request #1080 from chidii/feat/1035-supply-cap-progress
Chucks1093 Oct 1, 2026
18531bc
Merge upstream/dev into feature/global-search
funds0033-cmyk Oct 1, 2026
224532f
Merge branch 'dev' into feature/1026-emergency-pause-ui
Tekprecious Oct 1, 2026
069d1cd
chore: fix unused variables and missing imports
Tekprecious Oct 1, 2026
2706e21
Merge pull request #1042 from Tekprecious/feature/1026-emergency-paus…
Chucks1093 Oct 2, 2026
ab9b7f3
Merge pull request #1076 from Ayfataan/patch-1
Chucks1093 Oct 2, 2026
a81333a
Fix linting errors: remove unused type imports and parameters
funds0033-cmyk Oct 2, 2026
43b1e59
Merge pull request #1075 from funds0033-cmyk/feature/global-search
Chucks1093 Oct 2, 2026
9c9d5a8
fix ci
Oct 4, 2026
7136419
Merge branch 'dev' into feat
dakwa001 Oct 4, 2026
1f19082
fix ci
Oct 4, 2026
dc7c2ba
Merge pull request #925 from dakwa001/feat
Chucks1093 Oct 4, 2026
8bb5d67
chore: resolve merge conflict with dev
mysterio123865 Oct 5, 2026
694358d
Merge pull request #1062 from mysterio123865/feature/issue-1017-staki…
Chucks1093 Oct 5, 2026
a3da0b9
feat(ui): add unified data state UI system for loading skeletons and …
muokwejosh-cloud Oct 16, 2026
43aba21
feat: implement discovery feed, auto-invest rules, account settings, …
Just-Bamford Oct 16, 2026
0724cfc
feat: replace inline formatting with shared hooks and verify governan…
ayobami-dale Oct 16, 2026
ea57058
fix: remove duplicate lucide-react import in CreatorSpotlight
ayobami-dale Oct 16, 2026
9755ca5
feat: add batch transfer modal for multi-wallet key distributions
onajidavid87-web Oct 16, 2026
aeca04e
feat(chart): build TWAP price chart overlay on creator key trading pa…
timiturn3r Oct 16, 2026
3a46529
feat: add notification preferences settings page (#1083)
Abidoyesimze Oct 16, 2026
dfd2cc4
feat: add transaction history page with filters and CSV export (#1084)
Abidoyesimze Oct 16, 2026
dfed6db
feat(key-detail): scope buy cooldown fetch to the connected wallet
KingDavid9999 Oct 16, 2026
50d4a93
feat: show trading paused banner and disable trading on key detail pa…
oyeyinka1 Oct 16, 2026
a228b3d
test(creators): add integration test for search no-results state
Nife-tanny Oct 16, 2026
b30603b
feat: Add activity feed, trending creators, and marketplace features
heymariam Oct 17, 2026
912f38b
Merge pull request #1081 from muokwejosh-cloud/feat/issue-545-unified…
Chucks1093 Oct 17, 2026
29a7a05
Merge pull request #1094 from onajidavid87-web/Add-a-batch-transfer-m…
Chucks1093 Oct 17, 2026
d9fdcc4
Merge pull request #1095 from timiturn3r/feat/twap-price-chart-overla…
Chucks1093 Oct 17, 2026
aae93d9
Merge pull request #1097 from KingDavid9999/fixes-issue-#915
Chucks1093 Oct 17, 2026
35dc799
Merge pull request #1099 from oyeyinka1/feat/777-trading-paused-banner
Chucks1093 Oct 17, 2026
60e9281
Merge pull request #1100 from Nife-tanny/test/675-creator-search-no-r…
Chucks1093 Oct 17, 2026
c5e40b7
Merge pull request #1093 from ayobami-dale/feature/formatting-hooks-a…
Chucks1093 Oct 17, 2026
0c4cf3b
Merge pull request #1092 from Just-Bamford/feature/marketplace-discov…
Chucks1093 Oct 17, 2026
0697c58
Merge branch 'dev' into feature/activity-trending-features
heymariam Oct 17, 2026
0623ff2
fix: remove unused ActivityFeed import from HomePage
heymariam Oct 17, 2026
791e808
Merge pull request #1101 from heymariam/feature/activity-trending-fea…
Chucks1093 Oct 17, 2026
c7484df
Merge pull request #1098 from Abidoyesimze/feat/1083-1086-combined
Chucks1093 Oct 17, 2026
4c09e0d
feat: add session security dashboard in account settings (#1111)
robertocarlous Oct 17, 2026
520291a
Merge remote-tracking branch 'upstream/dev' into issue-1111
robertocarlous Oct 17, 2026
2eaa79a
feat: liquidity depth indicator, holder snapshot history, graduation …
Yormee-103 Oct 17, 2026
349fd0b
Merge pull request #1123 from robertocarlous/issue-1111
Chucks1093 Oct 17, 2026
69ae297
Merge pull request #1124 from Yormee-103/feat/liquidity-depth-holder-…
Chucks1093 Oct 17, 2026
380fa44
test: add unit tests for the time-ago formatter (#749)
ElizabethChi Oct 17, 2026
3701e30
feat(trade-dialog): enforce a minimum of 1 and an available-supply ce…
ElizabethChi Oct 17, 2026
f05d858
feat: add a Horizon transaction status poller for pending Soroban tra…
ElizabethChi Oct 17, 2026
ae8f514
Merge pull request #1125 from ElizabethChi/fix/accesslayer-client-ass…
Chucks1093 Oct 18, 2026
649a343
fix: preserve discovery feed marketplace filters
iamcracked-dev Oct 18, 2026
304d826
test: strengthen marketing community link coverage
iamcracked-dev Oct 18, 2026
3751f63
feat: show holder snapshot history with dividends
iamcracked-dev Oct 18, 2026
04bf230
feat: label staking epoch rewards
iamcracked-dev Oct 18, 2026
c784ff9
test: strengthen marketing community link coverage
iamcracked-dev Oct 18, 2026
d5847d9
feat: show holder snapshot history with dividends
iamcracked-dev Oct 18, 2026
c4920e6
test: clean marketing community link coverage
iamcracked-dev Oct 18, 2026
8e40880
feat: clean dividend snapshot history panel
iamcracked-dev Oct 18, 2026
f3ceebf
Merge pull request #1137 from iamcracked-dev/fix/discovery-feed-filte…
Chucks1093 Oct 18, 2026
42c6c8a
feat: support four-hour TWAP window
nomsoscript Oct 18, 2026
ccad72d
feat: add four-hour TWAP chart control
nomsoscript Oct 18, 2026
ade27e7
feat: add subscription duration selection
nomsoscript Oct 18, 2026
eb9ebb6
feat: add nonce-safe gasless swap payload
nomsoscript Oct 18, 2026
a6c44cd
feat(chart): Build bonding curve price chart component with real-time…
0xSlink Oct 18, 2026
03b6974
feat(feed): Implement key discovery feed with sort and filter control…
0xSlink Oct 18, 2026
d3fee9c
feat(portfolio): Add wallet portfolio page with holdings and PnL brea…
0xSlink Oct 18, 2026
7b8f791
feat(vesting): Add vesting schedule viewer for creator key allocation…
0xSlink Oct 18, 2026
c195668
feat(bundle): Build bundle buy UI for purchasing multiple keys in one…
cryptBeckley Oct 18, 2026
1c05912
feat(referrals): Implement referral dashboard page with earnings and …
cryptBeckley Oct 18, 2026
58fe68a
feat(profile): Add key creator profile page with stats and key listin…
cryptBeckley Oct 18, 2026
36faa79
feat(trading): Build key freeze status banner and trading block UI (#…
cryptBeckley Oct 18, 2026
bedd262
Merge pull request #1150 from cryptBeckley/feat/multi-1118-1119-1120-…
Chucks1093 Oct 18, 2026
4799de1
feat: add pause banner details, trade limits, announcements and spotl…
UltimateUser1 Oct 18, 2026
05e1ee5
fix: repair malformed PR syntax
nomsoscript Oct 18, 2026
50469b1
fix: remove remaining JSX delimiter
nomsoscript Oct 18, 2026
3846f88
Merge pull request #1138 from nomsoscript/feat/assigned-issues-1131-1134
Chucks1093 Oct 18, 2026
baa62b9
fix(realtime): cast native WebSocket to WebSocketLike to satisfy fact…
Chucks1093 Oct 19, 2026
7babf30
Merge pull request #1149 from 0xSlink/feat/multi-1113-1115-1116-1117
Chucks1093 Oct 19, 2026
0923b86
feat(trading): implement price floor indicator and sell block UI on k…
itzsoftwaredevops-sys Oct 19, 2026
a544566
feat: implement multi-sig action approval UI for protocol admins (#1135)
Oct 19, 2026
abdf62e
Merge pull request #1169 from itzsoftwaredevops-sys/feat/issue-1152-p…
Chucks1093 Oct 19, 2026
885cbbb
Merge pull request #1171 from Jerry-Tekh/feat/multi-sig-action-approv…
Chucks1093 Oct 19, 2026
8ec43e2
Implement on-chain alert preferences
byteMara Oct 19, 2026
c1daff8
Merge pull request #1183 from byteMara/feature/1165-on-chain-alert-pr…
Chucks1093 Oct 19, 2026
dce180c
feat: Build key merge proposal UI for dual-creator key consolidati (#…
johnson7104 Oct 19, 2026
a8f7c1a
feat(auction): build key launch auction UI for initial price discover…
Oct 19, 2026
d866cc1
Add protocol analytics dashboard with TVL and volume charts (#1167)
baling-1 Oct 19, 2026
e69d3f7
Merge pull request #1186 from johnson7104/feat/issue-1166-build-key-m…
Chucks1093 Oct 19, 2026
46c5c42
Merge pull request #1188 from Sensei-Victor/feat/issue-1164-key-launc…
Chucks1093 Oct 19, 2026
cb8b85b
Remove unused imports in TopKeysVolumeTable to fix lint
baling-1 Oct 19, 2026
afdbbb7
Fix ProtocolHistoryPoint type error in protocol analytics mock
baling-1 Oct 19, 2026
2822db4
feat(trading): add bonding curve price impact slider (reduced scope)
Oct 19, 2026
e6a360b
feat(trading): add fee discount tier badge and breakdown
Oct 19, 2026
b9b91c0
feat(creator): show social links and a profile link on the key detail…
Oct 19, 2026
521f707
Merge pull request #1191 from uche001-dev/fix/accesslayer-assigned-batch
Chucks1093 Oct 19, 2026
1b75519
merge: resolve conflicts with origin/dev
UltimateUser1 Oct 19, 2026
eca64ac
Adds an /airdrop-claims page where holders can view all airdrops allo…
DevScoopee Oct 19, 2026
6f20ba3
Merge pull request #1172 from DevScoopee/#1154-Build-holder-airdrop-c…
Chucks1093 Oct 19, 2026
dc6efef
feat(creator-detail): add max supply cap display and mint progress ba…
Noobb-byte Oct 19, 2026
85299e7
feat(#1176): add key holder loyalty milestone notification toast
franciscodes-ops Oct 19, 2026
680b2b3
feat(#1178): add vote weight delegation indicator in governance vote …
franciscodes-ops Oct 19, 2026
9dee2e8
feat(#1179): add key insurance pool funding UI for creators
franciscodes-ops Oct 19, 2026
5602fba
feat(#1181): add cross-key portfolio rebalance history page
franciscodes-ops Oct 19, 2026
389fc1e
feat: fee discount tier indicator on swap confirmation modal (#1173)
oldtaker24 Oct 19, 2026
322e0c0
feat: auction creation UI, announcements feed, royalty earnings dashb…
oldtaker24 Oct 19, 2026
4ed58d6
Merge pull request #1190 from baling-1/feat/1167-protocol-analytics-d…
Chucks1093 Oct 19, 2026
8f7f139
feat(admin): add protocol fee breakdown dashboard
timo126 Oct 19, 2026
f4f15aa
Merge pull request #1195 from Noobb-byte/feat/1156-mint-progress-bar
Chucks1093 Oct 19, 2026
6cac510
Merge pull request #1197 from timo126/feat/1153-admin-protocol-fee-da…
Chucks1093 Oct 19, 2026
9ae3798
fix: remove unused auctionEndTime imports (lint)
oldtaker24 Oct 19, 2026
d1af56c
fix: remove unused imports to fix lint errors
franciscodes-ops Oct 19, 2026
77ffb03
fix: showToast.success takes options, not a second message string
oldtaker24 Oct 19, 2026
d844e91
feat: add governance, insurance, transfer, and auction UI components
EmmanuelOchaje Oct 18, 2026
23afaef
fix(lint): remove unused destructured props and imports to pass ESLint
Chucks1093 Oct 19, 2026
f284004
fix(build): add missing UI components and react-hook-form dependency
Chucks1093 Oct 19, 2026
10485e6
fix(deps): update pnpm-lock.yaml with react-hook-form
Chucks1093 Oct 19, 2026
d3ba2e6
fix(lint): suppress react-refresh warning on badgeVariants export
Chucks1093 Oct 19, 2026
e552857
Merge pull request #1162 from EmmanuelOchaje/feat/governance-insuranc…
Chucks1093 Oct 19, 2026
3428718
Merge pull request #1161 from UltimateUser1/feat/issues-1147-1157-115…
Chucks1093 Oct 19, 2026
24aae40
Merge pull request #1187 from oldtaker24/feat/issue-1173
Chucks1093 Oct 19, 2026
cf5403f
Merge pull request #1196 from franciscodes-ops/feat/issues-1176-1181
Chucks1093 Oct 19, 2026
fafc4aa
feat(trade): build batch swap UI for executing multiple key trades (#…
Tekgodfrey Oct 20, 2026
ea4d7d0
feat: add trade confirmation slippage modal, whitelist management, go…
therealjhay Oct 20, 2026
d07f734
feat: bootstrap price chart, key split panel, community polls, co-cre…
ogundelevictory Oct 20, 2026
7bfd348
Merge pull request #1210 from therealjhay/feat-issues-1112-1128-1126-…
Chucks1093 Oct 20, 2026
9e45fff
fix: remove unused variables and add missing useEffect import
ogundelevictory Oct 20, 2026
ae1c6f6
Merge pull request #1211 from ogundelevictory/feat/bootstrap-chart-sp…
Chucks1093 Oct 20, 2026
d4ad51b
Merge pull request #1209 from Tekgodfrey/feat/issue-1155-batch-swap-ui
Chucks1093 Oct 20, 2026
f2eba74
feat(keys): implement lock-up status indicator and sell unlock countd…
baling-1 Oct 19, 2026
759019b
feat(profile): add NFT badge showcase to wallet profile page (#1200)
solaawojobi00-bit Oct 20, 2026
b9a7530
feat: build tipping panel and public recent tips feed on key detail page
praizeD10 Oct 20, 2026
208df67
Merge pull request #1213 from solaawojobi00-bit/feat/issue-1200-nft-b…
Chucks1093 Oct 20, 2026
1cee082
Merge pull request #1214 from cold-13/feat/issue-1163-key-lockup-stat…
Chucks1093 Oct 20, 2026
52549f8
Merge pull request #1215 from praizeD10/feat/tipping-panel-and-recent…
Chucks1093 Oct 20, 2026
14057f4
feat: add seasonal campaigns feature with campaign cards and spotligh…
Petrelid Oct 20, 2026
5d479e6
test(announcements): wrap co-creator attribution tests in a QueryClie…
Petrelid Oct 20, 2026
e594055
Merge pull request #1229 from Petrelid/feat/discovery-spotlight-campa…
Chucks1093 Oct 20, 2026
925eccf
Add a Distribute Revenue panel to the creator dashboard that lets cre…
DevScoopee Oct 20, 2026
96e9750
Merge pull request #1218 from DevScoopee/Build-creator-revenue-share-…
Chucks1093 Oct 20, 2026
127acfa
feat(creator): add TipLeaderboard component for creator profile page …
shadrach68 Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 14 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,20 @@ VITE_MAINNET_RPC_URL=
# Stellar network for Stellar Expert explorer links.
# Set to 'mainnet' for production, 'testnet' for development (default).
VITE_STELLAR_NETWORK=testnet
VITE_STELLAR_RPC_URL=
# Horizon base URL used to poll transaction status after submission. Leave
# unset to use the public Horizon endpoint for VITE_STELLAR_NETWORK.
VITE_HORIZON_URL=
VITE_CREATOR_KEYS_CONTRACT_ID=

# WebSocket endpoint for the real-time key-price feed (optional). Leave unset to
# disable the live feed β€” bonding-curve charts then rely on polled data only.
# VITE_WEBSOCKET_URL=wss://stream.example.com/keys

# Comma-separated wallet addresses allowed to deploy new creator keys through the
# key factory wizard (optional). Leaving this unset fails closed and hides the wizard.
# The factory contract still authorizes the deployment server-side.
# VITE_KEY_FACTORY_WHITELIST=

# UTM settings for shared profile links (optional)
# Set any of these to enable UTM parameters on shared profile URLs.
Expand Down
1 change: 1 addition & 0 deletions .freebuff/project-id
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
23786e79-6f9d-4ab3-90d8-f57510f217b4
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ jobs:
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.6.5
run: |
corepack enable
corepack prepare pnpm@10.6.5 --activate

- name: Setup Node.js
uses: actions/setup-node@v4
Expand Down
48 changes: 24 additions & 24 deletions .github/workflows/pr-target-check.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
name: Redirect PRs to dev

on:
pull_request_target:
branches:
- main
pull_request_target:
branches:
- main

jobs:
close-and-redirect:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Close PR and redirect to dev
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: "πŸ‘‹ 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."
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
state: 'closed'
});
close-and-redirect:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Close PR and redirect to dev
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: "πŸ‘‹ 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."
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
state: 'closed'
});
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ dist-ssr
issue.md
pr.md

# MiMoCode
.mimocode/
# Test artifacts
__snapshots__
*.snap
Expand All @@ -39,4 +41,4 @@ Thumbs.db

# Lock files from other package managers
package-lock.json
yarn.lock
yarn.lock
16 changes: 8 additions & 8 deletions .kiro/specs/holder-count-cache-invalidation-test/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ The production diff is intentionally small: one utility file, one hook, one comp
- Verify `LandingPage.tsx` still compiles and the keyboard test (`LandingPage.keyboard.test.tsx`) still passes
- _Requirements: 1.1, 3.4_

- [ ] 5. Write the integration test
- [x] 5. Write the integration test
- Create `src/pages/__tests__/holderCountCacheInvalidation.test.tsx`
- [ ] 5.1 Set up test scaffolding
- [x] 5.1 Set up test scaffolding
- Import `QueryClient`, `QueryClientProvider` from `@tanstack/react-query`; `MemoryRouter` from `react-router`; `render`, `screen`, `waitFor`, `act` from `@testing-library/react`; `fc` from `fast-check`; `beforeEach`, `afterEach`, `describe`, `expect`, `it`, `vi` from `vitest`
- Import `FeaturedCreatorAudienceChip` from `@/components/common/FeaturedCreatorAudienceChip`
- Import `getFeaturedCreatorKeyHolderCopy` from `@/utils/holderCount.utils`
Expand All @@ -56,42 +56,42 @@ The production diff is intentionally small: one utility file, one hook, one comp
- Implement `createWrapper(queryClient)` returning a component that wraps children in `<QueryClientProvider>` + `<MemoryRouter>`
- _Requirements: 4.1, 4.2, 4.3, 4.4_

- [ ] 5.2 Write property test for Property 1 β€” initial render round-trip
- [x] 5.2 Write property test for Property 1 β€” initial render round-trip
- **Property 1: Initial render round-trip**
- **Validates: Requirements 1.1, 5.4**
- Use `fc.asyncProperty(fc.integer({ min: 1, max: 1_000_000 }), ...)` with `numRuns: 100`
- For each `count`: create fresh `queryClient`, seed with `queryClient.setQueryData(['creator', CREATOR_ID, 'holderCount'], count)`, render `FeaturedCreatorAudienceChip` with wrapper, assert `screen.getByText(getFeaturedCreatorKeyHolderCopy(count).value)` is in the document, assert `mockFetchHolderCount` was NOT called, then `unmount()`
- _Requirements: 1.1, 1.2, 5.4_

- [ ] 5.3 Write property test for Property 2 β€” stale-while-revalidate display stability
- [x] 5.3 Write property test for Property 2 β€” stale-while-revalidate display stability
- **Property 2: Stale-while-revalidate display stability**
- **Validates: Requirements 2.3**
- Use `fc.asyncProperty(fc.integer({ min: 1, max: 1_000_000 }), ...)` with `numRuns: 100`
- For each `initialCount`: seed cache, render component, call `queryClient.invalidateQueries` but do NOT resolve the pending `mockFetchHolderCount` (use a `Promise` that never resolves during the assertion window), assert old value is still visible and no blank/error state
- _Requirements: 2.3_

- [ ] 5.4 Write property test for Property 3 β€” post-invalidation update round-trip
- [x] 5.4 Write property test for Property 3 β€” post-invalidation update round-trip
- **Property 3: Post-invalidation update round-trip**
- **Validates: Requirements 3.1, 3.2, 3.4**
- Use `fc.asyncProperty(fc.integer({ min: 1, max: 999 }), fc.integer({ min: 1000, max: 1_000_000 }), ...)` with `numRuns: 100` (disjoint ranges guarantee `initialCount !== updatedCount`)
- For each pair `(initialCount, updatedCount)`: seed cache with `initialCount`, render, spy on `window.location.reload`, invalidate query, await `waitFor` assertion that updated text is visible and old text is gone, assert `reloadSpy` was NOT called, `unmount()`
- _Requirements: 3.1, 3.2, 3.3, 3.4_

- [ ] 5.5 Write property test for Property 4 β€” format function round-trip
- [x] 5.5 Write property test for Property 4 β€” format function round-trip
- **Property 4: Format function round-trip**
- **Validates: Requirements 5.1, 5.4**
- Use synchronous `fc.property(fc.integer({ min: 1, max: 10_000_000 }), ...)` with `numRuns: 200`
- For each `n > 0`: assert `getFeaturedCreatorKeyHolderCopy(n).value === formatCompactNumber(n) + ' key holders'`
- _Requirements: 5.1, 5.4_

- [ ]\* 5.6 Write edge-case tests
- [x]\* 5.6 Write edge-case tests
- `count = 0` renders `"No key holders yet"` β€” seed cache with `0`, render, assert text present
- `count = null` renders `"Key holders unavailable"` β€” seed cache with `null`, render, assert text present
- Non-matching query key: invalidate a different key, assert `mockFetchHolderCount` was NOT called and display is unchanged
- After invalidation + resolved refetch: assert `mockFetchHolderCount` was called exactly once with `CREATOR_ID`
- _Requirements: 1.3, 1.4, 2.2, 2.4_

- [ ] 6. Checkpoint β€” run tests and confirm everything passes
- [x] 6. Checkpoint β€” run tests and confirm everything passes
- Run `pnpm test` (or `pnpm vitest run`) from `accesslayer-client--fork/`
- Confirm `holderCountCacheInvalidation.test.tsx` passes all property and edge-case tests
- Confirm `LandingPage.keyboard.test.tsx` still passes (no regression from Task 4 changes)
Expand Down
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,3 +145,4 @@ Issues labeled `good first issue` should:
## Questions

If something is unclear, open a documentation issue or ask in the repo before starting implementation.
..
75 changes: 75 additions & 0 deletions docs/CurveMigrationPanel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Curve Migration Panel

Creator-only management surface for the bonding-curve migrations queued against
a creator key. It lives in the **Governance** tab of the creator dashboard
(`src/pages/CreatorDashboardPage.tsx`).

- Component: `CurveMigrationPanel`
- File: `src/components/common/CurveMigrationPanel.tsx`
- Hook: `useCurveMigrations` β€” `src/hooks/useCurveMigrations.ts`
- Service: `curveMigrationService` β€” `src/services/curveMigration.service.ts`
- Types: `src/types/curveMigration.ts`
- Pure helpers: `src/utils/curveMigration.utils.ts`
- Execute mutation: `useExecuteCurveMigrationMutation` β€”
`src/hooks/useCreatorContractActions.ts`

## Why

A curve migration changes the price every holder buys and sells at, so it is
governed rather than applied directly. Two **independent** gates must both be
satisfied before the creator can execute one:

1. **Vote approval** β€” quorum reached _and_ more weight `for` than `against`.
2. **Timelock elapsed** β€” the post-vote delay has passed, giving holders a
window to exit before the new pricing goes live.

Either gate being unmet keeps Execute disabled, and the panel shows which one is
still blocking.

## What the panel renders

| Region | Test id | Contents |
| --------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| Pending list | `curve-migration-pending-section` | One card per `pending` migration, soonest timelock first |
| Proposed params | `curve-migration-params-{id}` | `from β†’ to` diff of base price, growth factor, and graduated curve tiers; unchanged params carry `data-changed="false"` |
| Timelock | `curve-migration-timelock-{id}` | Live `HH:MM:SS` countdown, or `Ready` once elapsed |
| Vote approval | `curve-migration-vote-approval-{id}` | Share of cast weight that voted `for` |
| Vote status | `curve-migration-vote-status-{id}` | `Approved` / `Not approved`, with quorum and participation below |
| Execute | `curve-migration-execute-{id}` | Enabled only when both gates pass |
| History | `curve-migration-history-section` | Executed migrations with applied params and execution date |

The countdown only re-renders while a timelock is actually running.

## Visibility

`CreatorDashboardPage` gates the section on `isKeyCreator` β€” the connected
wallet must match the key's `instructorId`. For non-creators the section is not
rendered at all **and** the `useCurveMigrations` query stays disabled, so no
migration data is fetched for wallets that cannot act on it.

## Execute call

Executing submits `execute_curve_migration`, built by the pure
`buildCurveMigrationExecuteCall` helper so the exact call is assertable without
signing anything:

```ts
buildCurveMigrationExecuteCall({ creatorId, migrationId });
// { functionName: 'execute_curve_migration', args: { creatorId, migrationId } }
```

On success both cache layers are invalidated together β€” the 15s
`curve_migrations_{keyId}` entry and the
`queryKeys.creators.curveMigrations(creatorId)` query β€” so the migration moves
from the pending list into the history with the params it actually applied.

## Local validation

```bash
pnpm test src/utils/__tests__/curveMigration.utils.test.ts
pnpm test src/services/__tests__/curveMigration.service.test.ts
pnpm test src/hooks/__tests__/useCurveMigrations.test.tsx
pnpm test src/hooks/__tests__/useCreatorContractActions.curveMigration.test.tsx
pnpm test src/components/common/__tests__/CurveMigrationPanel.test.tsx
pnpm test src/pages/__tests__/CreatorDashboardPage.curveMigration.integration.test.tsx
```
103 changes: 103 additions & 0 deletions docs/LpPositionManagement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# LP Position Management (Portfolio β†’ Liquidity)

The **Liquidity** tab on `/profile` (and `/profile/:wallet`, read-only) lets a
liquidity provider see their active LP positions and manage them (#1030).

## What it shows

- **Total LP earnings** card: unclaimed rewards + rewards already claimed from
the active positions, plus a position count.
- One row per active position: pool / key name, contributed amount, pool
share %, accrued (unclaimed) rewards, and lock status.
- Per-position actions, rendered only when the connected Stellar signer owns
the positions: **Add liquidity**, **Claim rewards**, **Remove liquidity**.

## Where the data comes from

| Concern | Source | Code |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| Positions, rewards, lock | `GET /lp/positions?wallet=` (accesslayer-server #980) | `services/lpPositions.service.ts` |
| Pool size, APR estimate | `GET /lp/pool/:keyId` (accesslayer-server #980) | `services/lpPositions.service.ts` |
| Spendable XLM | Account ledger entry over Soroban RPC (`VITE_STELLAR_RPC_URL`) | `services/stellarAccount.service.ts` |
| Add / claim / remove | Creator Keys contract `add_liquidity` / `claim_lp_rewards` / `remove_liquidity` (accesslayer-contracts #1002, PR #1004) | `services/lpContract.service.ts` |

Hooks live in `hooks/useLpPositions.ts`; pure math lives in
`utils/lpPositions.utils.ts`.

### Expected API shapes

The server endpoints are specified in accesslayer-server #980 but were not
merged when this UI was built. The client expects the following shape and
validates every field. Amounts are **stroops as integer strings** (i128 in
the contract); numbers are accepted only when they are safe integers.

```jsonc
// GET /lp/positions?wallet=G... β†’ APIResponse<{ positions: [...] }> (a bare array also works)
{
"lpId": "7", // contract lp_id (u64)
"keyId": "C...", // contract key_id (Address)
"keyName": "Alpha Key", // optional, falls back to a shortened keyId
"creatorId": "alpha", // optional, enables the /creator/:id link
"contribution": "250000000",
"share": 2500, // optional, contract basis points
"poolTotalLiquidity": "1000000000", // optional, preferred for an exact share
"pendingRewards": "12345", // missing/invalid β†’ shown as "Unavailable"
"claimedRewards": "100", // optional, lifetime claimed from this position
"unlocksAt": "2030-01-01T00:00:00Z", // optional; ISO, epoch s, or epoch ms
}

// GET /lp/pool/:keyId β†’ APIResponse<{ keyId, totalLiquidity, aprBps }>
```

Records missing `lpId`, `keyId`, or a valid `contribution` are dropped, as are
closed positions (`contribution = 0`, which is how the contract reports them).

## Rules the UI follows

- **Precision.** All amounts are `bigint` stroops end to end and are rendered
with 7 decimals via `formatXlm`, so tiny rewards never display as `0.00`.
- **Pool share** is `contribution / poolTotalLiquidity` in integer math,
floored to 0.01%. A non-zero share under 0.01% reads `<0.01%`. If the pool
total is missing, the contract's basis-point `share` is used instead.
- **Earnings total** de-duplicates by `lpId` and is withheld ("Unavailable")
when any position's rewards can't be read, rather than showing a partial sum.
- **Add liquidity** validates format, > 0, ≀ 7 decimals, and ≀ spendable XLM
(balance minus account reserve and selling liabilities). The mutation reads
the balance again right before signing, so a balance that dropped after the
modal opened is caught.
- **Reward rate preview** shows the API's APR estimate and the pool share the
deposit would receive using the contract formula
`amount / (total_liquidity + amount)`. No reward-rate formula is invented
client-side; if the API has no APR the preview says "Unavailable".
- **Claim** simulates `claim_lp_rewards` first. If the contract would pay out
zero, the wallet is never prompted.
- **Remove** is disabled while `unlocksAt` is in the future, with a live
countdown (`2d 14h 32m`). An unparseable `unlocksAt` blocks removal. Before
signing, the mutation refetches positions and re-checks the lock, and the
contract simulation has the final say.
- **Confirmation.** Success toasts (with tx hash and Stellar Expert link)
appear only after `getTransaction` reports `SUCCESS`. A transaction that
lands but fails on-chain surfaces as an error.
- **Refresh.** After a confirmed transaction the hooks invalidate
`queryKeys.lp.positions(wallet)`, `queryKeys.lp.pool(keyId)`, and
`queryKeys.wallet.xlmBalance(wallet)`. Positions also refetch every 30s and
when a lock countdown reaches zero.

## Known limitations

- **Lock period:** the LP reward contract in PR #1004 has no lock. `unlocksAt`
is honoured if the API provides it. Without it, removal is allowed and the
contract decides.
- **Asset:** the contract does not name the deposited token. The UI assumes
XLM (stroops, 7 decimals) like every other amount in the app.
- **Entry point:** "Add liquidity" is offered per existing pool. Opening a
first position in a new pool needs an entry point on the creator page,
which is outside this tab's scope.
- **Base reserve** is fixed at 0.5 XLM (`BASE_RESERVE_STROOPS`), the current
value on mainnet and testnet.

## Configuration

Requires `VITE_STELLAR_RPC_URL` and `VITE_CREATOR_KEYS_CONTRACT_ID` (see
`.env.example`). Without them, reads from the API still work but actions show
a clear "not configured" error.
8 changes: 2 additions & 6 deletions docs/adding-page-and-data-fetching.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,8 @@ export const queryKeys = {
import type { GetYourParams } from '@/services/your.service';

export const queryKeys = {
creators: {
/* ... */
},
wallet: {
/* ... */
},
creators: {/* ... */},
wallet: {/* ... */},
yourEntity: {
all: ['yourEntity'] as const,
list: (params?: GetYourParams) =>
Expand Down
Loading
Loading