Files
pwap/AI_analiz.txt
pezkuwichain 8d30519efc Fix all shadow deprecation warnings across entire mobile app
- Replaced shadowColor/shadowOffset/shadowOpacity/shadowRadius with boxShadow
- Fixed 28 files (21 screens + 7 components)
- Preserved elevation for Android compatibility
- All React Native Web deprecation warnings resolved

Files fixed:
- All screen components
- All reusable components
- Navigation components
- Modal components
2026-01-14 15:05:10 +03:00

2002 lines
29 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md - AI Assistant Guide for PezkuwiChain Web App Projects
**Last Updated:** 2025-11-17
**Production Status:** ~95% Complete
**Active Network:** Beta Testnet (`wss://rpc.pezkuwichain.io:9944`)
---
## 🎯 Quick Start for AI Assistants
This is a **production-grade blockchain monorepo** for PezkuwiChain with live validators running on VPS. Exercise extreme caution when making changes that could affect blockchain operations.
### Critical Rules (READ FIRST!)
⚠️ **NEVER DO THESE WITHOUT EXPLICIT USER PERMISSION:**
1. **DO NOT** restart or stop VPS validators (7 validators currently finalizing blocks)
2. **DO NOT** modify chain specs (`/root/pezkuwi-sdk/chain-specs/beta/beta-testnet-raw.json`)
3. **DO NOT** change blockchain base paths or validator configurations
4. **DO NOT** commit `.env` files or secrets to git
5. **DO NOT** deploy to production without testing locally first
6. **DO NOT** make assumptions about blockchain operations - **ALWAYS ASK**
### VPS Infrastructure
- **IP:** 37.60.230.9
- **Validators:** 7 running (ports 30333-30339, RPC 9944-9950)
- **Frontend:** Nginx serving at `/var/www/pezkuwichain/web/dist/`
- **Blockchain:** LIVE on Beta Testnet - handle with care
---
## 📁 Repository Structure
```
pezkuwi-web-app-projects/
├── web/ # Main React web app (Vite + TypeScript) - 90% complete
├── mobile/ # React Native Expo app - 50% complete
├── pezkuwi-sdk-ui/ # Polkadot.js SDK UI (branded clone) - 47MB
├── shared/ # Shared code library (types, utils, blockchain, i18n)
├── README.md # Project overview
├── PRODUCTION_READINESS.md # Production status report
└── CLAUDE_README_KRITIK.md # CRITICAL operational guidelines (Turkish)
```
### Directory Breakdown
| Directory | Size | Status | Purpose |
|-----------|------|--------|---------|
| `web/` | 3.8MB | 90% | Main production web application |
| `mobile/` | 737KB | 50% | iOS/Android mobile app |
| `pezkuwi-sdk-ui/` | 47MB | Active | Polkadot.js Apps clone |
| `shared/` | 402KB | 100% | Shared libraries & utilities |
---
## 🛠️ Tech Stack
### Web Application (`/web/`)
| Category | Technology | Version | Purpose |
|----------|-----------|---------|---------|
| **Framework** | React | 18.3.1 | UI framework |
| **Language** | TypeScript | 5.5.3 | Type safety |
| **Build Tool** | Vite | 5.4.1 | Fast bundler with HMR |
| **Blockchain** | Polkadot.js API | 16.4.9 | Blockchain integration |
| **Backend** | Supabase | 2.49.4 | Auth & Database |
| **UI Library** | shadcn/ui | Latest | Radix UI components |
| **Styling** | Tailwind CSS | 3.4.11 | Utility-first CSS |
| **State** | React Context | - | Global state management |
| **Data Fetching** | TanStack Query | 5.56.2 | Server state caching |
| **Routing** | React Router | 6.26.2 | Client-side routing |
| **i18n** | i18next | 23.7.6 | 6-language support |
| **Forms** | React Hook Form | 7.53.0 | Form management |
| **Validation** | Zod | 3.23.8 | Schema validation |
| **Charts** | Recharts | 2.12.7 | Data visualization |
| **Icons** | Lucide React | 0.462.0 | Icon library |
| **Notifications** | Sonner | 1.5.0 | Toast notifications |
### Mobile Application (`/mobile/`)
| Category | Technology | Version | Purpose |
|----------|-----------|---------|---------|
| **Framework** | React Native | 0.81.5 | Mobile framework |
| **Runtime** | Expo | 54.0.23 | Development platform |
| **Navigation** | React Navigation | 7.x | Native navigation |
| **Blockchain** | Polkadot.js API | 16.5.2 | Blockchain integration |
| **Storage** | AsyncStorage | 2.2.0 | Persistent storage |
| **Security** | Expo SecureStore | 15.0.7 | Encrypted storage |
| **Biometrics** | expo-local-authentication | 17.0.7 | Fingerprint/FaceID |
| **i18n** | i18next | 25.6.2 | Multi-language |
### Shared Library (`/shared/`)
- **Language:** TypeScript (100% typed)
- **Runtime:** Platform-agnostic (Node.js + Browser + React Native)
- **Dependencies:** Minimal (Polkadot.js only)
---
## 🔑 Key Files & Entry Points
### Web Application
**Entry Points:**
- `web/src/main.tsx` - React root render
- `web/src/App.tsx` - Provider hierarchy & routing
- `web/index.html` - HTML template
**Configuration:**
- `web/vite.config.ts` - Vite bundler config with path aliases
- `web/tailwind.config.ts` - Tailwind with Kurdistan color theme
- `web/tsconfig.json` - TypeScript strict mode + path mappings
- `web/postcss.config.js` - PostCSS for Tailwind
**State Management (6 Contexts):**
- `contexts/PolkadotContext.tsx` - Blockchain API connection
- `contexts/WalletContext.tsx` - Wallet state & multi-token balances
- `contexts/AuthContext.tsx` - Supabase authentication
- `contexts/AppContext.tsx` - Global application state
- `contexts/WebSocketContext.tsx` - Real-time blockchain updates
- `contexts/IdentityContext.tsx` - User identity & KYC status
**Backend:**
- `src/lib/supabase.ts` - Supabase client initialization
- `supabase/migrations/*.sql` - Database schema migrations (9 files)
### Mobile Application
**Entry Points:**
- `mobile/index.ts` - Expo registerRootComponent
- `mobile/App.tsx` - Root with i18n initialization
- `mobile/src/navigation/AppNavigator.tsx` - Navigation setup
### Shared Library
**Core Files:**
- `shared/blockchain/endpoints.ts` - Network endpoint configurations
- `shared/blockchain/polkadot.ts` - Polkadot.js utilities
- `shared/constants/index.ts` - KNOWN_TOKENS, KURDISTAN_COLORS, LANGUAGES
- `shared/i18n/index.ts` - i18n configuration
- `shared/types/blockchain.ts` - Blockchain type definitions
- `shared/lib/wallet.ts` - Wallet utilities & formatters
**Business Logic Libraries:**
- `shared/lib/citizenship-workflow.ts` - KYC & citizenship workflow
- `shared/lib/tiki.ts` - 70+ government roles (Hemwelatî, Parlementer, etc.)
- `shared/lib/perwerde.ts` - Education platform logic
- `shared/lib/p2p-fiat.ts` - P2P fiat trading system (production-ready)
- `shared/lib/staking.ts` - Staking operations
- `shared/lib/multisig.ts` - Multisig treasury operations
- `shared/lib/validator-pool.ts` - Validator pool management
---
## 🚀 Development Workflows
### Web Development
```bash
# Navigate to web directory
cd web
# Install dependencies
npm install
# Start development server (localhost:8081)
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Lint code
npm run lint
```
**Environment Setup:**
1. Copy `.env.example` to `.env`
2. Set `VITE_NETWORK=local` (or testnet/beta/mainnet)
3. Configure Supabase credentials:
- `VITE_SUPABASE_URL`
- `VITE_SUPABASE_ANON_KEY`
4. Set blockchain endpoint (optional, defaults to beta)
### Mobile Development
```bash
# Navigate to mobile directory
cd mobile
# Install dependencies
npm install
# Start Expo development server
npm start
# Run on Android emulator
npm run android
# Run on iOS simulator
npm run ios
# Run in web browser
npm run web
```
### Deploying to Production (Web)
```bash
# 1. Build locally
cd /home/mamostehp/pwap/web
npm run build
# 2. Deploy to VPS
rsync -avz dist/ pezkuwi-vps:/var/www/pezkuwichain/web/dist/
# 3. Reload Nginx (no restart needed)
ssh pezkuwi-vps "systemctl reload nginx"
```
**Important:** Always test locally with `npm run build && npm run preview` before deploying to VPS.
---
## 📂 Code Organization Patterns
### Component Structure
**Web Components:**
```
web/src/components/
├── ui/ # shadcn/ui primitives (50+ components)
│ ├── button.tsx
│ ├── card.tsx
│ ├── dialog.tsx
│ └── ...
├── auth/ # Authentication components
├── citizenship/ # Citizenship/KYC UI
├── dex/ # DEX/Swap interface
├── delegation/ # Delegation management
├── forum/ # Forum components
├── governance/ # Governance interface
├── p2p/ # P2P fiat trading
├── perwerde/ # Education platform
├── staking/ # Staking dashboard
└── wallet/ # Wallet components
```
**Pattern:** Feature-based organization with co-located types and utilities.
### File Naming Conventions
- **Components:** PascalCase (`StakingDashboard.tsx`)
- **Utilities:** camelCase (`wallet.ts`, `formatting.ts`)
- **Types:** PascalCase interfaces/types (`WalletAccount`, `TokenInfo`)
- **Constants:** UPPER_SNAKE_CASE exports (`ASSET_IDS`, `KURDISTAN_COLORS`)
### Import Patterns
**Path Aliases (Web):**
```typescript
// Local imports
import { Component } from '@/components/ui/component';
import { useWallet } from '@/contexts/WalletContext';
// Shared library imports
import { formatBalance } from '@pezkuwi/lib/wallet';
import { WalletAccount } from '@pezkuwi/types';
import { KURDISTAN_COLORS } from '@pezkuwi/constants';
import { translations } from '@pezkuwi/i18n';
```
**Import Order (Follow This!):**
1. React imports
2. External libraries
3. Shared imports (`@pezkuwi/*`)
4. Local imports (`@/`)
5. Types
6. Styles/assets
**Example:**
```typescript
import React, { useState, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { formatBalance } from '@pezkuwi/lib/wallet';
import { WalletAccount } from '@pezkuwi/types';
import { ASSET_IDS } from '@pezkuwi/constants';
import { useWallet } from '@/contexts/WalletContext';
import { Card } from '@/components/ui/card';
import type { PoolInfo } from '@/types/dex';
import '@/styles/dashboard.css';
```
### TypeScript Conventions
**Strict Mode Enabled:**
```json
{
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noUnusedLocals": true,
"noUnusedParameters": true
}
```
**Type Patterns:**
- Use `interface` for object shapes
- Use `type` for unions, intersections, and complex types
- Use `enum` for fixed sets of values
- Use `as const` for literal types
- Avoid `any` - use `unknown` and type guards instead
---
## ⛓️ Blockchain Integration
### Network Endpoints
```typescript
// shared/blockchain/endpoints.ts
const ENDPOINTS = {
MAINNET: 'wss://mainnet.pezkuwichain.io',
BETA: 'wss://rpc.pezkuwichain.io:9944', // Currently active
STAGING: 'wss://staging.pezkuwichain.io',
TESTNET: 'wss://testnet.pezkuwichain.io',
LOCAL: 'ws://127.0.0.1:9944'
};
// Default for development
DEFAULT_ENDPOINT = 'ws://127.0.0.1:9944';
```
### Asset System
**⚠️ CRITICAL: wUSDT uses 6 decimals, not 12!**
```typescript
// Native token (no Asset ID)
HEZ - Accessed via system.account.data.free
// Assets pallet (12 decimals except wUSDT)
ASSET_IDS = {
WHEZ: 0, // Wrapped HEZ - 12 decimals
PEZ: 1, // Utility token - 12 decimals
WUSDT: 2, // Wrapped USDT - 6 decimals ⚠️
}
// Display mapping (internal vs user-facing)
TOKEN_DISPLAY_SYMBOLS = {
'wHEZ': 'HEZ', // Show as HEZ to users
'wUSDT': 'USDT', // Show as USDT to users
'PEZ': 'PEZ' // Keep as PEZ
}
```
### Polkadot.js Connection Pattern
```typescript
import { ApiPromise, WsProvider } from '@polkadot/api';
// Initialize API
const provider = new WsProvider(endpoint);
const api = await ApiPromise.create({ provider });
await api.isReady;
// Query native balance
const { data } = await api.query.system.account(address);
const balance = data.free.toString();
// Query asset balance
const assetData = await api.query.assets.account(ASSET_IDS.PEZ, address);
const amount = assetData.unwrap().balance.toString();
```
### Transaction Pattern
```typescript
// Simple transaction
const extrinsic = api.tx.balances.transfer(dest, amount);
const hash = await extrinsic.signAndSend(account, { signer });
// With event handling
const result = await new Promise((resolve, reject) => {
let unsub;
api.tx.module.method(params)
.signAndSend(account, { signer }, ({ status, events, dispatchError }) => {
if (dispatchError) {
if (dispatchError.isModule) {
const decoded = api.registry.findMetaError(dispatchError.asModule);
reject(new Error(`${decoded.section}.${decoded.name}: ${decoded.docs}`));
} else {
reject(new Error(dispatchError.toString()));
}
if (unsub) unsub();
return;
}
if (status.isInBlock) {
// Extract data from events
const event = events.find(e =>
e.event.section === 'module' &&
e.event.method === 'EventName'
);
resolve(event.data[0].toString());
if (unsub) unsub();
}
})
.then(unsubscribe => { unsub = unsubscribe; });
});
```
### Custom Pallets
1. **pallet-tiki** - Governance roles (70+ roles: Hemwelatî, Parlementer, Serok, Wezir, etc.)
2. **pallet-identity-kyc** - Zero-knowledge citizenship & KYC
3. **pallet-perwerde** - Education platform (courses, enrollments, certificates)
4. **pallet-validator-pool** - Validator pool categories & staking
5. **pallet-welati** - P2P fiat trading with escrow
---
## 🎨 UI Patterns & Styling
### shadcn/ui Components
Located in `web/src/components/ui/` - 50+ components built on Radix UI primitives.
**Component Variants (CVA Pattern):**
```typescript
import { cva } from 'class-variance-authority';
const buttonVariants = cva(
'inline-flex items-center justify-center rounded-md font-medium',
{
variants: {
variant: {
default: 'bg-kurdish-green text-white',
destructive: 'bg-kurdish-red text-white',
outline: 'border border-input bg-background',
},
size: {
default: 'h-10 px-4 py-2',
sm: 'h-9 px-3',
lg: 'h-11 px-8',
}
},
defaultVariants: {
variant: 'default',
size: 'default',
}
}
);
```
### Kurdistan Color System
**Primary Colors:**
```typescript
KURDISTAN_COLORS = {
kesk: '#00A94F', // Green (Kesk) - Primary brand color
sor: '#EE2A35', // Red (Sor) - Danger/error
zer: '#FFD700', // Yellow/Gold (Zer) - Warning/accent
spi: '#FFFFFF', // White (Spî)
res: '#000000', // Black (Reş)
}
```
**Tailwind Usage:**
```css
bg-kurdish-green
bg-kurdish-green-dark
bg-kurdish-green-light
text-kurdish-red
border-kurdish-yellow
```
---
## 🌍 Internationalization (i18n)
### Supported Languages
| Code | Language | Direction | Status |
|------|----------|-----------|--------|
| `en` | English | LTR | ✅ Complete |
| `tr` | Türkçe (Turkish) | LTR | ✅ Complete |
| `kmr` | Kurmancî (Kurdish Kurmanji) | LTR | ✅ Complete |
| `ckb` | سۆرانی (Kurdish Sorani) | RTL | ✅ Complete |
| `ar` | العربية (Arabic) | RTL | ✅ Complete |
| `fa` | فارسی (Persian) | RTL | ✅ Complete |
### Translation Files
- **Web:** `web/src/i18n/locales/*.ts` (TypeScript modules - local imports)
- **Mobile:** `mobile/src/i18n/locales/*.ts`
- **Shared:** `shared/i18n/locales/*.json` (JSON files)
**⚠️ Important:** Web uses `.ts` files with local imports, not shared JSON files. This was changed to fix loading issues.
### RTL Support
```typescript
import { isRTL } from '@pezkuwi/i18n';
// Detect RTL languages
const isRightToLeft = isRTL(currentLanguage); // true for ckb, ar, fa
// Apply direction
document.dir = isRightToLeft ? 'rtl' : 'ltr';
```
### Usage Pattern
```typescript
import { useTranslation } from 'react-i18next';
function Component() {
const { t, i18n } = useTranslation();
return (
<div>
<h1>{t('welcome.title')}</h1>
<button onClick={() => i18n.changeLanguage('kmr')}>
{t('language.kurdish')}
</button>
</div>
);
}
```
---
## 🗄️ State Management
### Provider Hierarchy
**Order matters!** This is the provider nesting in `web/src/App.tsx`:
```typescript
<ThemeProvider> // Dark/light mode
<ErrorBoundary> // Error handling
<AuthProvider> // Supabase authentication
<AppProvider> // Global app state
<PolkadotProvider> // Blockchain API connection
<WalletProvider> // Wallet state & balances
<WebSocketProvider> // Real-time blockchain events
<IdentityProvider> // User identity & KYC
<Router />
</IdentityProvider>
</WebSocketProvider>
</WalletProvider>
</PolkadotProvider>
</AppProvider>
</AuthProvider>
</ErrorBoundary>
</ThemeProvider>
```
### Context APIs
**PolkadotContext:**
```typescript
interface PolkadotContextType {
api: ApiPromise | null;
isApiReady: boolean;
accounts: InjectedAccountWithMeta[];
selectedAccount: InjectedAccountWithMeta | null;
connectWallet: () => Promise<void>;
disconnectWallet: () => void;
error: string | null;
}
```
**WalletContext:**
```typescript
interface WalletContextType {
isConnected: boolean;
account: string | null;
accounts: InjectedAccountWithMeta[];
balance: string; // HEZ native balance
balances: {
HEZ: string;
PEZ: string;
wHEZ: string;
USDT: string;
};
signer: Signer | null;
connectWallet: () => Promise<void>;
disconnect: () => void;
switchAccount: (account: InjectedAccountWithMeta) => void;
signTransaction: (tx: SubmittableExtrinsic) => Promise<string>;
refreshBalances: () => Promise<void>;
}
```
### TanStack Query (React Query)
Used for server state caching and automatic refetching:
```typescript
import { useQuery } from '@tanstack/react-query';
const { data, isLoading, error } = useQuery({
queryKey: ['proposals'],
queryFn: () => fetchProposals(api),
refetchInterval: 30000, // Refresh every 30 seconds
enabled: !!api, // Only run when API is ready
});
```
---
## 🔐 Security Best Practices
### Environment Variables
**NEVER commit `.env` files!**
```bash
# .env.example (commit this)
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_anon_key
VITE_NETWORK=local
# .env (DO NOT commit)
VITE_SUPABASE_URL=https://actual-url.supabase.co
VITE_SUPABASE_ANON_KEY=actual_key_here
VITE_NETWORK=beta
```
**Access in code:**
```typescript
// Web (Vite)
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
// Mobile (Expo)
const supabaseUrl = process.env.EXPO_PUBLIC_SUPABASE_URL;
```
### Sensitive Data Handling
- **Wallet seeds:** NEVER stored in app - Polkadot.js extension only
- **Private keys:** NEVER accessible to frontend code
- **KYC data:** AES-GCM encrypted → IPFS → Hash stored on-chain
- **API keys:** Environment variables only, never hardcoded
### Error Handling
```typescript
// ErrorBoundary for React errors
<ErrorBoundary>
<App />
</ErrorBoundary>
// Try-catch for async operations
try {
await api.tx.method(params).signAndSend(account, { signer });
toast.success('Transaction successful!');
} catch (error) {
console.error('Transaction failed:', error);
toast.error(error.message || 'Transaction failed');
// Don't expose sensitive error details to users
}
```
---
## 🧰 Utility Functions
### Formatting
```typescript
import { formatAddress, formatBalance, parseAmount } from '@pezkuwi/utils/formatting';
// Address formatting
formatAddress('5GrwVaEbzhSSC2biT...xQjz')
// → '5GrwV...xQjz'
// Balance formatting (with decimals)
formatBalance('1234567890000', 12) // HEZ, PEZ, wHEZ
// → '1234.5679'
formatBalance('1234567', 6) // wUSDT (6 decimals!)
// → '1.2346'
// Amount parsing (to BigInt)
parseAmount('100', 12)
// → 100000000000000n
```
### Validation
```typescript
import { isValidAddress, isValidAmount } from '@pezkuwi/utils/validation';
isValidAddress('5GrwVaEbzhSSC2biT...') // true
isValidAmount('100.5') // true
isValidAmount('abc') // false
```
---
## 🧪 Testing & Quality
### Before Committing
1. **Run linter:** `npm run lint`
2. **Check no `.env` committed:** `git status`
3. **Remove debug logs:** Search for `console.log`
4. **Update types:** If API changed
5. **Test i18n:** Check all 6 languages
6. **Test RTL:** Check ckb, ar, fa layouts
### Before Deploying
1. **Test production build:**
```bash
npm run build
npm run preview
```
2. **Verify environment variables** set correctly
3. **Check Supabase migrations** applied
4. **Backup database** (if schema changed)
5. **Monitor blockchain** validator status
---
## 📊 Database Schema (Supabase)
### Core Tables
- **profiles** - User profiles (linked to auth.users)
- **forum_categories** - Forum categories
- **forum_threads** - Forum threads
- **forum_posts** - Forum posts with moderation
- **courses** - Perwerde education courses
- **enrollments** - Course enrollments
- **p2p_offers** - P2P fiat trading offers
- **p2p_trades** - Active trades with escrow
- **p2p_reputation** - User reputation scores
- **payment_methods** - Payment method registry
### Hybrid Architecture
**Blockchain = Source of Truth**
```
User action → Blockchain transaction → Event emitted
Event listener → Supabase sync (for indexing/caching)
UI queries Supabase (fast) + Blockchain (verification)
```
**Example Flow (Creating a Course):**
1. User submits form
2. Frontend calls `api.tx.perwerde.createCourse(...)`
3. Transaction finalized on-chain
4. Event listener catches `CourseCreated` event
5. Sync to Supabase for UI display
6. UI reads from Supabase (fast) but trusts blockchain
---
## 🚨 Common Issues & Solutions
### Issue: Polkadot.js API not connecting
**Solution:**
1. Check endpoint is reachable: `curl -I http://37.60.230.9:9944`
2. Verify WebSocket protocol (wss vs ws)
3. Check CORS settings on blockchain node
4. Ensure validators are running: `ssh pezkuwi-vps "ps aux | grep pezkuwi"`
### Issue: Transaction fails with "BadOrigin"
**Solution:**
- User doesn't have required role (check pallet-tiki roles)
- Use `dispatch_as` if needed for elevated permissions
### Issue: Balance shows as 0
**Solution:**
- Check correct Asset ID (wHEZ: 0, PEZ: 1, wUSDT: 2)
- Remember wUSDT uses 6 decimals, not 12
- Verify account has opted-in to asset (required for assets pallet)
### Issue: i18n translations not loading
**Solution:**
- Web uses local `.ts` files (not shared JSON)
- Check import path: `import en from './locales/en.ts'`
- Not: `import en from '@pezkuwi/i18n/locales/en.json'`
### Issue: Build fails with "Can't resolve @pezkuwi/..."
**Solution:**
- Check Vite path aliases in `vite.config.ts`
- Verify TypeScript path mappings in `tsconfig.json`
- Run `npm install` in shared directory if using symlinks
---
## 📝 Commit Guidelines
### Commit Message Format
```
<type>: <subject>
<body (optional)>
```
**Types:**
- `feat:` New feature
- `fix:` Bug fix
- `docs:` Documentation changes
- `style:` Code style changes (formatting)
- `refactor:` Code refactoring
- `test:` Adding tests
- `chore:` Build process, dependencies
**Examples:**
```bash
git commit -m "feat: add P2P fiat trading interface"
git commit -m "fix: wUSDT decimals now correctly use 6 instead of 12"
git commit -m "docs: update CLAUDE.md with blockchain integration patterns"
```
---
## 🎓 Learning Resources
### Polkadot.js
- **API Docs:** https://polkadot.js.org/docs/
- **Apps UI:** https://github.com/polkadot-js/apps
- **Extension:** https://polkadot.js.org/extension/
### UI/UX
- **shadcn/ui:** https://ui.shadcn.com/
- **Radix UI:** https://www.radix-ui.com/
- **Tailwind CSS:** https://tailwindcss.com/
### Mobile
- **Expo:** https://docs.expo.dev/
- **React Native:** https://reactnative.dev/
- **React Navigation:** https://reactnavigation.org/
### Backend
- **Supabase:** https://supabase.com/docs
- **PostgreSQL:** https://www.postgresql.org/docs/
---
## 🔧 Useful Commands
### Blockchain Health Check
```bash
# Check validator logs
ssh pezkuwi-vps "tail -f /tmp/validator-1.log"
# Check finalization
ssh pezkuwi-vps "tail -30 /tmp/validator-1.log | grep -E 'peers|finalized' | tail -5"
# View all validators
ssh pezkuwi-vps "ps aux | grep pezkuwi"
```
### Deployment
```bash
# Full web deployment
cd web && \
npm run build && \
rsync -avz dist/ pezkuwi-vps:/var/www/pezkuwichain/web/dist/ && \
ssh pezkuwi-vps "systemctl reload nginx"
```
### Database
```bash
# Apply Supabase migrations
cd web/supabase
supabase db push
# Reset local database
supabase db reset
```
---
## 🎯 AI Assistant Guidelines
### When Working on Features
1. **Read critical docs first:** `CLAUDE_README_KRITIK.md`
2. **Check current branch:** Verify you're on correct feature branch
3. **Test blockchain connectivity:** Before making blockchain changes
4. **Use existing patterns:** Follow component/context patterns
5. **Maintain type safety:** No `any` types
6. **Test all languages:** Check i18n keys exist
7. **Test RTL layout:** For ckb, ar, fa languages
### When Making Blockchain Changes
1. **Understand pallet first:** Read Rust pallet code if needed
2. **Test on local node:** Before testnet
3. **Handle errors properly:** Extract dispatchError correctly
4. **Update Supabase:** If creating indexable data
5. **Monitor events:** Use WebSocketContext for real-time updates
### When Deploying
1. **Never deploy without testing**
2. **Check validator status first:** Ensure blockchain is healthy
3. **Deploy during low-traffic hours:** If possible
4. **Monitor logs after deploy:** Watch for errors
5. **Have rollback plan:** Keep previous build
---
## 📞 Getting Help
### Documentation Files
- `README.md` - Project overview
- `CLAUDE_README_KRITIK.md` - Critical operational guidelines (Turkish)
- `PRODUCTION_READINESS.md` - Production status report
- `web/SECURITY.md` - Security policies
- `web/mimari.txt` - Detailed system architecture (Turkish)
### VPS Access
- **IP:** 37.60.230.9
- **SSH:** `ssh pezkuwi-vps` (alias assumed configured)
- **Web Root:** `/var/www/pezkuwichain/web/dist/`
- **Nginx Config:** `/etc/nginx/sites-available/pezkuwichain.io`
---
## ✅ Quick Reference Checklist
**Starting a new feature:**
- [ ] Create feature branch
- [ ] Read relevant shared libraries
- [ ] Check existing similar features
- [ ] Plan component structure
- [ ] Add i18n keys for all languages
**Before committing:**
- [ ] Run `npm run lint`
- [ ] Remove console.logs
- [ ] Check no `.env` changes
- [ ] Test in browser
- [ ] Write clear commit message
**Before deploying:**
- [ ] Test production build locally
- [ ] Verify environment variables
- [ ] Check blockchain connection
- [ ] Monitor validator status
- [ ] Plan rollback strategy
**After deploying:**
- [ ] Test live site
- [ ] Check browser console
- [ ] Monitor error logs
- [ ] Verify blockchain transactions work
---
1. Navigasyon Yapısı (Kesinleşen)
Alt Menü (Bottom Bar - 5'li):
1. 🏠 Home: Ana Dashboard (Gruplandırılmış ikonlar burada).
2. 📱 Apps: Tüm mini-app'lerin alfabetik veya kategorik tam listesi (Hızlı erişim çekmecesi).
3. 🏛️ Citizen (Ortada, Büyük): "Dijital Kimlik Kartı". Tıklayınca eğer vatandaş değilse başvuruya,
vatandaşsa dijital kimlik kartına (QR kodlu) döner.
4. 🤝 Referral: Büyüme motoru.
5. 👤 Profile: Kişisel alan.
Üst Header:
* Sol: Avatar (Tıklayınca hızlı durum değişimi: Online/Busy).
* Sağ: 🔔 Bildirimler, ⚙️ Ayarlar.
* Ekstra : Avatarın yanına pezpallet tiki den canli veri ceken ve kullanicinin sahip oldugu tikileri gosteren alan.
2. Body (Gövde) Gruplandırması ve Yeni Fikirler
Sizin dikdörtgen alanlarınızı zenginleştirelim:
💰 FINANCE (Finansal Alan)
Mevcut: Wallet, Bank, Exchange, P2P, B2B.
* Benim Eklemelerim:
* 📊 Tax (Vergi/Zekat): Gönüllü katkı veya sistem vergilerini şeffafça ödeme/izleme.
* 🌱 Launchpad: Yeni Kürt girişimlerine/tokenlarına erken yatırım yapma alanı.
* 💳 Cards: Sanal veya fiziksel Pezkuwi Kart yönetimi (Gelecek vizyonu).
🏛️ GOVERNANCE (Yönetim Alanı)
Mevcut: President, Assembly, Government, Validators, Nominators, Vote.
* Benim Eklemelerim:
* ⚖️ Justice (Dad): Anlaşmazlık çözüm merkezi (AI Lawyer entegreli).
* 📜 Proposals: Halkın doğrudan yasa teklifi verebileceği alan.
* 🗳️ Polls: Hızlı kamuoyu yoklamaları (Anketler).
💬 SOCIAL (Sosyal Alan)
Mevcut: whatsKURD, VPN, Forum, KurdMedia.
* Benim Eklemelerim:
* 🎭 Events (Çalakî): Kürt dünyasındaki konser, miting, konferans takvimi ve biletleme.
* 🤝 Help (Harîkarî): Deprem, sel gibi durumlarda acil yardımlaşma ve bağış ağı.
* 🎵 Music: Kürtçe müzik streaming servisi entegrasyonu (Spotify gibi ama yerel).
📚 EDUCATION (Eğitim Alanı)
Mevcut: University, College, Kids, Programs.
* Benim Eklemelerim:
* 📜 Library (Pirtûkxane): Dijital Kürtçe kütüphane ve arşiv.
* 🗣️ Language (Ziman): Kürtçe (Kurmancî/Sorani/Zazaki) öğrenme modülü (Duolingo tarzı).
* 🏆 Certificates: Blokzincir tabanlı diplomalar ve sertifikalar cüzdanı.