- Update ElectionsInterface to fetch real elections from welati pallet
- Add MyVotes component for user voting history (proposals, elections, delegations)
- Add GovernanceHistory component for completed elections and proposals
- Integrate DelegationManager into GovernanceInterface delegation tab
- Fix linter errors across multiple files (unused imports, type annotations)
- Update eslint.config.js to ignore SDK docs and CJS files
Replaced custom loading spinners with standardized LoadingState component from AsyncComponent.tsx. This ensures consistent UX for all data-loading operations.
Changes:
- web/src/components/staking/StakingDashboard.tsx: LoadingState for staking data
- web/src/components/governance/GovernanceOverview.tsx: LoadingState for governance data
- web/src/components/governance/ProposalsList.tsx: LoadingState for proposals
- web/src/components/dex/PoolBrowser.tsx: LoadingState for liquidity pools
- web/src/components/delegation/DelegationManager.tsx: LoadingState for delegation data
- web/src/components/forum/ForumOverview.tsx: LoadingState for forum threads
- web/src/components/treasury/TreasuryOverview.tsx: LoadingState for treasury data
All components now show:
- Kurdistan green animated spinner (Loader2)
- Contextual loading messages
- Consistent padding and centering
- Professional appearance
Button loading states (auth, wallet modals) left as-is since they appropriately disable during actions.
This commit reorganizes the codebase to eliminate duplication between web and mobile frontends by moving all commonly used files to the shared folder.
Changes:
- Moved lib files to shared/lib/:
* wallet.ts, staking.ts, tiki.ts, identity.ts
* multisig.ts, usdt.ts, scores.ts, citizenship-workflow.ts
- Moved utils to shared/utils/:
* auth.ts, dex.ts
* Created format.ts (extracted formatNumber from web utils)
- Created shared/theme/:
* colors.ts (Kurdistan and App color definitions)
- Updated web configuration:
* Added @pezkuwi/* path aliases in tsconfig.json and vite.config.ts
* Updated all imports to use @pezkuwi/lib/*, @pezkuwi/utils/*, @pezkuwi/theme/*
* Removed duplicate files from web/src/lib and web/src/utils
- Updated mobile configuration:
* Added @pezkuwi/* path aliases in tsconfig.json
* Updated theme/colors.ts to re-export from shared
* Mobile already uses relative imports to shared (no changes needed)
Architecture Benefits:
- Single source of truth for common code
- No duplication between frontends
- Easier maintenance and consistency
- Clear separation of shared vs platform-specific code
Web-specific files kept:
- web/src/lib/supabase.ts
- web/src/lib/utils.ts (cn function for Tailwind, re-exports formatNumber from shared)
All imports updated and tested. Both web and mobile now use the centralized shared folder.
- Updated ProposalsList to use useGovernance hook
- Fetches treasury proposals and democracy referenda from blockchain
- Displays both proposal types in unified list:
- Treasury proposals: Show requested amount, beneficiary, proposer
- Democracy referenda: Show aye/nay votes, voting threshold, end block
- Added loading state with spinner
- Added error handling with user-friendly messages
- Added "Live Blockchain Data" badge
- Format token amounts from blockchain units (12 decimals to HEZ)
- Empty state when no proposals exist
- Token symbol consistency: All amounts show as HEZ
- Auto-refreshes every 30 seconds via useGovernance hook
All proposals and referenda now display live blockchain data.
Restructured the project to support multiple frontend applications:
- Move web app to web/ directory
- Create pezkuwi-sdk-ui/ for Polkadot SDK clone (planned)
- Create mobile/ directory for mobile app development
- Add shared/ directory with common utilities, types, and blockchain code
- Update README.md with comprehensive documentation
- Remove obsolete DKSweb/ directory
This monorepo structure enables better code sharing and organized
development across web, mobile, and SDK UI projects.