Summary
The Dashboard page currently shows a coming-soon placeholder. This issue is to implement a fully working learner dashboard backed by real on-chain and database data.
What to build
A dashboard at /dashboard that shows a logged-in scholar's:
- LRN balance — call
learn_token.balance(address) via the Soroban RPC simulation endpoint (GET /api/lrn/balance/:address already exists)
- Enrolled courses with progress — depends on issue #X (on-chain enrollment query). Each course should show: title, milestone count, how many milestones approved vs total
- Pending milestones — list of milestones awaiting submission or review (from
GET /api/scholars/:address/milestones)
- Recent on-chain activity — LRN mints, milestone verifications (from treasury event indexer)
- Reputation rank — derived from LRN balance using the
reputationRank util already in src/util/reputationRank.ts
Relevant existing code
| File |
Purpose |
src/pages/Dashboard.tsx |
Replace this placeholder |
src/hooks/useLearnToken.ts |
LRN balance hook |
src/hooks/useScholarMilestones.ts |
Scholar milestones hook |
server/src/controllers/scholars.controller.ts |
Scholar profile + milestones API |
src/util/reputationRank.ts |
Rank calculation from LRN balance |
Acceptance criteria
Summary
The Dashboard page currently shows a coming-soon placeholder. This issue is to implement a fully working learner dashboard backed by real on-chain and database data.
What to build
A dashboard at
/dashboardthat shows a logged-in scholar's:learn_token.balance(address)via the Soroban RPC simulation endpoint (GET /api/lrn/balance/:addressalready exists)GET /api/scholars/:address/milestones)reputationRankutil already insrc/util/reputationRank.tsRelevant existing code
src/pages/Dashboard.tsxsrc/hooks/useLearnToken.tssrc/hooks/useScholarMilestones.tsserver/src/controllers/scholars.controller.tssrc/util/reputationRank.tsAcceptance criteria