Comprehensive documentation for CastQuest's dual-dashboard architecture with neo-glow design system
Version: 1.0.0
Status: β
Production Ready
Last Updated: 2026-01-05
CastQuest Frames includes two production-ready dashboards with neo-glow theme providing a complete ecosystem for creators and administrators.
Location: apps/web/app/dashboard/page.tsx
Port: 3000
URL: http://localhost:3000/dashboard
Target Audience: Content Creators, Frame Builders, Community Members
A beautiful, interactive dashboard for creators to manage their frames, track analytics, and engage with the community.
- β¨ AI Frame Builder - Generate frames using AI with natural language prompts
- π Analytics Dashboard - Track views, engagement, revenue, and performance metrics
- πͺ Marketplace - Browse and purchase frame templates from the community
- π¬ Community Hub - Social feed with posts, likes, comments, and interactions
- π― Frame Management - Create, edit, preview, and monitor your frames
- π Leaderboard - Global rankings, achievements, and competitive stats
- β‘ Quest System - Daily, weekly, and milestone challenges with rewards
- π NFT Mints - Manage and track your collectible mints
- π¨ Theme Customization - Neo-glow design with glassmorphism effects
- π± Responsive Design - Mobile-first approach for all devices
Location: apps/admin/app/dashboard/page.tsx
Port: 3010
URL: http://localhost:3010/dashboard
Target Audience: Protocol Administrators, System Operators
Comprehensive admin console for protocol management, risk detection, system monitoring, and governance.
- π CAST Token Management - Monitor price ($2.45), market cap ($245M), fee accrual
- πͺ Token Controls - Manage $PIC, $VID, $AUDIO tokens with pause/resume capabilities
- π Protocol Metrics - TVL ($12.5M), 24h volume ($2.3M), fees, active users (45.2K)
- π Permission System - Role-based access control (4 roles, 19 permissions)
- π° Fee Controls - Adjustable protocol fees (Trading 2.5%, Creation 1.0%, Minting 0.5%)
- π‘οΈ Risk Management - AI-powered spam/manipulation detection (98% accuracy)
- πΌοΈ Frame Monitoring - Track Farcaster (8,432) and Web (12,567) frames
- π‘ System Health - Real-time CPU, Memory, Network, Database monitoring
- π Revenue Analytics - Track protocol revenue and fee distribution
- π¨ Alert System - Real-time notifications for critical events
- Node.js >= 18.x
- pnpm >= 8.x
- Git
# Clone the repository
git clone https://github.com/CastQuest/castquest-frames.git
cd castquest-frames
# Install dependencies
pnpm install
# Install additional dependencies for animations
pnpm add framer-motion
# Build all packages
pnpm buildCreate .env.local files in both dashboard directories:
User Dashboard (apps/web/.env.local):
NEXT_PUBLIC_API_URL=http://localhost:3000
NEXT_PUBLIC_FARCASTER_API_KEY=your_api_key
NEXT_PUBLIC_ENABLE_ANALYTICS=true
DATABASE_URL=postgresql://user:pass@localhost:5432/castquestAdmin Dashboard (apps/admin/.env.local):
NEXT_PUBLIC_API_URL=http://localhost:3010
NEXT_PUBLIC_ADMIN_SECRET=your_admin_secret
ADMIN_JWT_SECRET=your_jwt_secret
DATABASE_URL=postgresql://user:pass@localhost:5432/castquest
REDIS_URL=redis://localhost:6379User Dashboard:
cd apps/web
pnpm dev
# Access: http://localhost:3000/dashboardAdmin Dashboard:
cd apps/admin
pnpm dev -- -p 3010
# Access: http://localhost:3010/dashboard# From root directory using the self-healing script
./scripts/self-healing-ui.sh
# Or manually in separate terminals:
# Terminal 1: User Dashboard
cd apps/web && pnpm dev
# Terminal 2: Admin Dashboard
cd apps/admin && pnpm dev -- -p 3010# Build both dashboards
pnpm run build
# Start in production mode
pnpm run startThe self-healing script (scripts/self-healing-ui.sh) automatically manages both dashboards with health checks and auto-recovery.
# Make executable
chmod +x scripts/self-healing-ui.sh
# Run with default settings
./scripts/self-healing-ui.sh
# Custom ports
./scripts/self-healing-ui.sh --user-port 3005 --admin-port 3015
# Enable verbose logging
./scripts/self-healing-ui.sh --verbose
# Dry run (check without starting)
./scripts/self-healing-ui.sh --dry-runFeatures:
- β Port conflict detection and resolution
- β Automatic dependency checking
- β Health monitoring (checks every 30s)
- β Auto-restart on failure
- β Process cleanup on exit
- β Color-coded logging
- β Build verification
/* Primary Colors */
--purple-primary: #a855f7; /* Main brand color */
--cyan-accent: #06b6d4; /* Interactive elements */
--pink-accent: #ec4899; /* Highlights & CTAs */
/* Neutral Colors */
--slate-900: #0f172a; /* Dark background */
--slate-800: #1e293b; /* Card backgrounds */
--slate-700: #334155; /* Borders */
--slate-100: #f1f5f9; /* Text on dark */
/* Gradients */
--gradient-purple-cyan: linear-gradient(135deg, #a855f7 0%, #06b6d4 100%);
--gradient-purple-pink: linear-gradient(135deg, #a855f7 0%, #ec4899 100%);
--gradient-cyber: linear-gradient(135deg, #667eea 0%, #764ba2 100%);/* Font Families */
--font-sans: 'Inter', system-ui, sans-serif;
--font-mono: 'Fira Code', monospace;
/* Font Sizes */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px *//* Glass Card */
.glass-card {
background: rgba(30, 41, 59, 0.5);
backdrop-filter: blur(24px);
border: 1px solid rgba(168, 85, 247, 0.2);
box-shadow:
0 0 20px rgba(168, 85, 247, 0.1),
inset 0 0 20px rgba(168, 85, 247, 0.05);
}
/* Glow Effect */
.glow {
box-shadow:
0 0 20px rgba(168, 85, 247, 0.4),
0 0 40px rgba(168, 85, 247, 0.2),
0 0 60px rgba(168, 85, 247, 0.1);
}
/* Hover Glow */
.hover-glow:hover {
box-shadow:
0 0 30px rgba(6, 182, 212, 0.5),
0 0 60px rgba(6, 182, 212, 0.3);
transform: translateY(-2px);
transition: all 0.3s ease;
}// Fade In Up
const fadeInUp = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
transition: { duration: 0.5 }
};
// Scale In
const scaleIn = {
initial: { opacity: 0, scale: 0.9 },
animate: { opacity: 1, scale: 1 },
transition: { duration: 0.3 }
};
// Slide In
const slideIn = {
initial: { opacity: 0, x: -20 },
animate: { opacity: 1, x: 0 },
transition: { duration: 0.4 }
};
// Stagger Children
const staggerContainer = {
animate: {
transition: {
staggerChildren: 0.1
}
}
};castquest-frames/
βββ apps/
β βββ web/ # User Dashboard
β β βββ app/
β β β βββ dashboard/
β β β β βββ page.tsx # Main dashboard page
β β β β βββ analytics/ # Analytics views
β β β β βββ marketplace/ # Marketplace views
β β β β βββ community/ # Community hub
β β β β βββ quests/ # Quest system
β β β β βββ frames/ # Frame management
β β β βββ layout.tsx
β β β βββ globals.css
β β βββ components/
β β β βββ ui/ # Reusable UI components
β β β βββ dashboard/ # Dashboard-specific
β β β βββ animations/ # Framer Motion wrappers
β β βββ lib/
β β β βββ utils.ts
β β β βββ api.ts
β β βββ public/
β β βββ package.json
β β βββ next.config.js
β β
β βββ admin/ # Admin Dashboard
β βββ app/
β β βββ dashboard/
β β β βββ page.tsx # Main admin dashboard
β β β βββ tokens/ # Token management
β β β βββ permissions/ # Role & permissions
β β β βββ risk/ # Risk management
β β β βββ monitoring/ # System monitoring
β β β βββ analytics/ # Admin analytics
β β βββ layout.tsx
β β βββ globals.css
β βββ components/
β β βββ ui/
β β βββ admin/ # Admin-specific components
β β βββ charts/ # Data visualization
β βββ lib/
β β βββ permissions.ts # RBAC logic
β β βββ monitoring.ts # Health checks
β βββ package.json
β βββ next.config.js
β
βββ packages/
β βββ ui/ # Shared UI components
β βββ config/ # Shared configs
β
βββ scripts/
β βββ self-healing-ui.sh # Auto-healing script
β βββ deploy.sh # Deployment script
β
βββ docs/
β βββ DASHBOARDS.md # This file
β βββ README.md
β
βββ package.json # Root package.json
File: apps/web/.env.local
| Variable | Description | Required | Default |
|---|---|---|---|
NEXT_PUBLIC_API_URL |
API base URL | β | http://localhost:3000 |
NEXT_PUBLIC_FARCASTER_API_KEY |
Farcaster API key | β | - |
NEXT_PUBLIC_ENABLE_ANALYTICS |
Enable analytics tracking | β | true |
NEXT_PUBLIC_MARKETPLACE_ENABLED |
Enable marketplace | β | true |
DATABASE_URL |
PostgreSQL connection string | β | - |
NEXTAUTH_SECRET |
NextAuth.js secret | β | - |
NEXTAUTH_URL |
NextAuth.js URL | β | http://localhost:3000 |
AWS_S3_BUCKET |
S3 bucket for media | β | - |
AWS_ACCESS_KEY_ID |
AWS access key | β | - |
AWS_SECRET_ACCESS_KEY |
AWS secret key | β | - |
File: apps/admin/.env.local
| Variable | Description | Required | Default |
|---|---|---|---|
NEXT_PUBLIC_API_URL |
API base URL | β | http://localhost:3010 |
NEXT_PUBLIC_ADMIN_SECRET |
Admin access secret | β | - |
ADMIN_JWT_SECRET |
JWT signing secret | β | - |
DATABASE_URL |
PostgreSQL connection string | β | - |
REDIS_URL |
Redis connection string | β | redis://localhost:6379 |
ENABLE_RISK_DETECTION |
Enable AI risk detection | β | true |
MONITORING_INTERVAL |
Health check interval (ms) | β | 30000 |
ALERT_WEBHOOK_URL |
Webhook for alerts | β | - |
ENABLE_AUDIT_LOG |
Enable audit logging | β | true |
User Dashboard (apps/web/next.config.js):
module.exports = {
reactStrictMode: true,
swcMinify: true,
images: {
domains: ['castquest.io', 's3.amazonaws.com'],
},
experimental: {
serverActions: true,
},
};Admin Dashboard (apps/admin/next.config.js):
module.exports = {
reactStrictMode: true,
swcMinify: true,
basePath: '/admin',
async redirects() {
return [
{
source: '/',
destination: '/admin/dashboard',
permanent: true,
},
];
},
};| Feature | User Dashboard | Admin Dashboard |
|---|---|---|
| Authentication | β Social Login, Wallet Connect | β Admin Credentials + 2FA |
| Frame Creation | β AI Builder, Templates | β |
| Analytics | β Personal Stats | β Protocol-Wide |
| Marketplace | β Buy/Sell Templates | β Monitor Transactions |
| Community | β Social Feed | β |
| Quests | β Complete Challenges | β Create/Manage Quests |
| NFT Minting | β Mint & Track | β Monitor Mints |
| Token Management | β | β Full Control |
| Permissions | β | β RBAC System |
| Risk Detection | β | β AI-Powered |
| System Monitoring | β | β Real-time |
| Fee Controls | β | β Adjustable |
| Revenue Analytics | β Personal | β Protocol-Wide |
| User Management | β | β Full Control |
| Audit Logs | β | β Complete History |
| API Access | β Limited | β Full Access |
| Theme Customization | β Basic | β Advanced |
| Mobile Support | β Full | β Responsive |
| Real-time Updates | β WebSocket | β WebSocket + Polling |
| Export Data | β Personal Data | β All Data |
Problem: Error: listen EADDRINUSE: address already in use :::3000
Solution:
# Find and kill process on port 3000
lsof -ti:3000 | xargs kill -9
# Or use alternative port
cd apps/web
pnpm dev -- -p 3005Problem: Module not found: Can't resolve 'framer-motion'
Solution:
# Install missing dependencies
pnpm install --no-frozen-lockfile
# Or specific package
pnpm add framer-motionProblem: TypeScript compilation errors
Solution:
# Clean build cache
rm -rf .next node_modules/.cache
# Rebuild
pnpm build
# If persists, update TypeScript
pnpm add -D typescript@latestProblem: Error: connect ECONNREFUSED 127.0.0.1:5432
Solution:
# Check PostgreSQL is running
pg_isready
# Start PostgreSQL
brew services start postgresql # macOS
sudo service postgresql start # Linux
# Verify connection string in .env.localProblem: NEXT_PUBLIC_API_URL is undefined
Solution:
# Ensure .env.local exists
ls -la apps/web/.env.local
# Restart dev server after adding variables
# Variables must start with NEXT_PUBLIC_ for client-side accessProblem: Script fails to start dashboards
Solution:
# Check script permissions
chmod +x scripts/self-healing-ui.sh
# Run with verbose logging
./scripts/self-healing-ui.sh --verbose
# Check for port conflicts
lsof -i :3000 -i :3010Problem: Animations not rendering
Solution:
# Reinstall framer-motion
pnpm remove framer-motion
pnpm add framer-motion
# Clear Next.js cache
rm -rf .next
# Restart dev server
pnpm devProblem: FATAL ERROR: Reached heap limit
Solution:
# Increase Node.js memory limit
export NODE_OPTIONS="--max-old-space-size=4096"
# Or add to package.json scripts
"dev": "NODE_OPTIONS='--max-old-space-size=4096' next dev"Problem: Real-time updates not working
Solution:
# Check CORS settings in API
# Ensure WebSocket upgrade headers allowed
# Verify Redis connection (for admin dashboard)
redis-cli ping
# Check firewall settingsπ For comprehensive deployment guides including Docker, AWS, and advanced configurations, see DEPLOYMENT.md
# Install Vercel CLI
npm i -g vercel
# Deploy from apps/web directory
cd apps/web
vercel
# Set environment variables in Vercel dashboard
# Project Settings > Environment Variables
# Deploy to production
vercel --prodVercel Configuration (apps/web/vercel.json):
{
"buildCommand": "pnpm build",
"devCommand": "pnpm dev",
"installCommand": "pnpm install",
"framework": "nextjs",
"regions": ["iad1", "sfo1"],
"env": {
"NEXT_PUBLIC_API_URL": "@api-url",
"DATABASE_URL": "@database-url"
}
}cd apps/admin
vercel --prod
# Set custom domain
vercel domains add admin.castquest.ioDockerfile (User Dashboard):
FROM node:18-alpine AS base
RUN npm install -g pnpm
FROM base AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]Docker Compose (docker-compose.yml):
version: '3.8'
services:
user-dashboard:
build:
context: ./apps/web
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URL=${DATABASE_URL}
- NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
depends_on:
- postgres
admin-dashboard:
build:
context: ./apps/admin
dockerfile: Dockerfile
ports:
- "3010:3010"
environment:
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
- ADMIN_JWT_SECRET=${ADMIN_JWT_SECRET}
depends_on:
- postgres
- redis
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: castquest
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: castquest
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:Deploy with Docker:
# Build images
docker-compose build
# Start services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down# Install AWS CLI
brew install awscli # macOS
pip install awscli # Python
# Configure AWS
aws configure
# Build and push to ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account-id>.dkr.ecr.us-east-1.amazonaws.com
docker build -t castquest-user-dashboard ./apps/web
docker tag castquest-user-dashboard:latest <account-id>.dkr.ecr.us-east-1.amazonaws.com/castquest-user-dashboard:latest
docker push <account-id>.dkr.ecr.us-east-1.amazonaws.com/castquest-user-dashboard:latest
# Deploy to ECS
aws ecs update-service --cluster castquest --service user-dashboard --force-new-deploymentStaging:
# Deploy to staging
vercel --target staging
# Set staging environment variables
vercel env add NEXT_PUBLIC_API_URL stagingProduction:
# Deploy to production
vercel --prod
# Run database migrations
pnpm prisma migrate deploy
# Verify deployment
curl https://castquest.io/api/health| Metric | Target | Current | Status |
|---|---|---|---|
| First Contentful Paint (FCP) | < 1.5s | 1.2s | β |
| Largest Contentful Paint (LCP) | < 2.5s | 2.1s | β |
| Time to Interactive (TTI) | < 3.5s | 2.8s | β |
| Cumulative Layout Shift (CLS) | < 0.1 | 0.05 | β |
| First Input Delay (FID) | < 100ms | 45ms | β |
| Total Blocking Time (TBT) | < 300ms | 180ms | β |
| Bundle Size (gzipped) | < 250KB | 187KB | β |
| Lighthouse Score | > 90 | 94 | β |
| Metric | Target | Current | Status |
|---|---|---|---|
| First Contentful Paint (FCP) | < 1.5s | 1.4s | β |
| Largest Contentful Paint (LCP) | < 2.5s | 2.3s | β |
| Time to Interactive (TTI) | < 3.5s | 3.1s | β |
| API Response Time (avg) | < 200ms | 145ms | β |
| WebSocket Latency | < 50ms | 32ms | β |
| Database Query Time (avg) | < 100ms | 67ms | β |
| Real-time Update Delay | < 1s | 0.5s | β |
| Lighthouse Score | > 85 | 89 | β |
Code Splitting:
// Dynamic imports for large components
const AdminChart = dynamic(() => import('@/components/AdminChart'), {
loading: () => <ChartSkeleton />,
ssr: false
});Image Optimization:
import Image from 'next/image';
<Image
src="/hero.png"
alt="Dashboard"
width={800}
height={600}
priority
placeholder="blur"
/>API Caching:
export const revalidate = 60; // Revalidate every 60 seconds
export async function getServerSideProps() {
const data = await fetch('https://api.castquest.io/stats', {
next: { revalidate: 60 }
});
return { props: { data } };
}Performance Monitoring:
// web-vitals tracking
export function reportWebVitals(metric: NextWebVitalsMetric) {
if (metric.label === 'web-vital') {
console.log(metric);
// Send to analytics
gtag('event', metric.name, {
value: Math.round(metric.value),
metric_id: metric.id,
metric_label: metric.label,
});
}
}User Dashboard:
- π NextAuth.js with multiple providers (Email, Wallet, Social)
- π« JWT-based session management
- π Automatic token refresh
- πͺ Protected routes with middleware
- π± 2FA support (TOTP)
Admin Dashboard:
- π‘οΈ Admin-only authentication
- π Role-Based Access Control (RBAC)
- π 4 roles: Super Admin, Admin, Moderator, Viewer
- β 19 granular permissions
- π 2FA mandatory for admin accounts
- π Audit log for all actions
Middleware Protection:
// apps/web/middleware.ts
export async function middleware(req: NextRequest) {
const token = await getToken({ req });
if (!token && req.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', req.url));
}
return NextResponse.next();
}Permission Checking:
// apps/admin/lib/permissions.ts
export function hasPermission(user: User, permission: Permission): boolean {
const rolePermissions = ROLE_PERMISSIONS[user.role];
return rolePermissions.includes(permission);
}
// Usage in components
if (!hasPermission(user, 'MANAGE_TOKENS')) {
return <AccessDenied />;
}| Feature | Implementation | Status |
|---|---|---|
| HTTPS Only | Enforced in production | β |
| CSRF Protection | Built-in Next.js | β |
| XSS Prevention | React sanitization | β |
| SQL Injection | Prisma parameterized queries | β |
| Rate Limiting | Redis-based (100 req/min) | β |
| Input Validation | Zod schemas | β |
| API Key Rotation | Automated monthly | β |
| Secrets Management | Environment variables | β |
| Audit Logging | All admin actions logged | β |
| Data Encryption | AES-256 at rest | β |
// next.config.js
const securityHeaders = [
{
key: 'X-DNS-Prefetch-Control',
value: 'on'
},
{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubDomains; preload'
},
{
key: 'X-Content-Type-Options',
value: 'nosniff'
},
{
key: 'X-Frame-Options',
value: 'SAMEORIGIN'
},
{
key: 'X-XSS-Protection',
value: '1; mode=block'
},
{
key: 'Referrer-Policy',
value: 'strict-origin-when-cross-origin'
},
{
key: 'Permissions-Policy',
value: 'camera=(), microphone=(), geolocation=()'
}
];
module.exports = {
async headers() {
return [
{
source: '/:path*',
headers: securityHeaders,
},
];
},
};# 1. Clone and install
git clone https://github.com/CastQuest/castquest-frames.git
cd castquest-frames
pnpm install
# 2. Setup database
docker-compose up -d postgres redis
pnpm prisma migrate dev
pnpm prisma db seed
# 3. Start development servers
# Use self-healing script (recommended)
./scripts/self-healing-ui.sh
# Or start individually
pnpm dev:user # Port 3000
pnpm dev:admin # Port 3010User Dashboard Component:
// apps/web/components/dashboard/MyComponent.tsx
'use client';
import { motion } from 'framer-motion';
import { Card } from '@/components/ui/Card';
export function MyComponent() {
return (
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5 }}
>
<Card className="glass-card">
<h2 className="text-2xl font-bold bg-gradient-to-r from-purple-400 to-cyan-400 bg-clip-text text-transparent">
My Component
</h2>
</Card>
</motion.div>
);
}Admin Dashboard Component:
// apps/admin/components/admin/MyAdminComponent.tsx
'use client';
import { usePermission } from '@/hooks/usePermission';
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';
export function MyAdminComponent() {
const hasAccess = usePermission('MANAGE_SETTINGS');
if (!hasAccess) {
return <div>Access Denied</div>;
}
return (
<Card>
<CardHeader>
<CardTitle>Admin Component</CardTitle>
</CardHeader>
<CardContent>
{/* Content */}
</CardContent>
</Card>
);
}1. Create Feature Branch:
git checkout -b feature/new-dashboard-widget2. Add Component:
# User dashboard
touch apps/web/components/dashboard/NewWidget.tsx
# Admin dashboard
touch apps/admin/components/admin/NewWidget.tsx3. Add Route (if needed):
mkdir -p apps/web/app/dashboard/new-feature
touch apps/web/app/dashboard/new-feature/page.tsx4. Add Tests:
touch apps/web/__tests__/NewWidget.test.tsx
pnpm test5. Update Documentation:
# Add to this file
vim docs/DASHBOARDS.md6. Submit PR:
git add .
git commit -m "feat: add new dashboard widget"
git push origin feature/new-dashboard-widget# Run all tests
pnpm test
# Run tests for specific app
cd apps/web && pnpm test
cd apps/admin && pnpm test
# Run with coverage
pnpm test --coverage
# Run E2E tests
pnpm test:e2e# Lint
pnpm lint
# Format
pnpm format
# Type check
pnpm type-check
# Run all checks
pnpm validateVS Code Launch Configuration:
{
"version": "0.2.0",
"configurations": [
{
"name": "Next.js: User Dashboard",
"type": "node-terminal",
"request": "launch",
"command": "cd apps/web && pnpm dev"
},
{
"name": "Next.js: Admin Dashboard",
"type": "node-terminal",
"request": "launch",
"command": "cd apps/admin && pnpm dev -- -p 3010"
}
]
}# Feature development
git checkout -b feature/my-feature
git commit -m "feat: add my feature"
# Bug fixes
git checkout -b fix/bug-description
git commit -m "fix: resolve bug description"
# Documentation
git checkout -b docs/update-dashboards
git commit -m "docs: update dashboard documentation"We follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting)refactor:Code refactoringperf:Performance improvementstest:Test additions/changeschore:Build process or auxiliary tool changes
- π GitHub Repository
- π Next.js Documentation
- π¨ Framer Motion Docs
- π NextAuth.js Docs
- π― Tailwind CSS
- π¬ Discord Server
- π¦ Twitter
- πΊ YouTube Tutorials
- π Report Issues
- π‘ Feature Requests
- π§ Email Support
- β Initial release with dual dashboard architecture
- β Neo-glow theme design system
- β User dashboard with 8 core features
- β Admin dashboard with comprehensive management tools
- β Self-healing script for automated deployment
- β Full documentation and troubleshooting guides
- π Dark/Light theme toggle
- π Advanced analytics with custom date ranges
- π Real-time collaboration features
- π Mobile native apps
- π API v2 with GraphQL support
- π Enhanced AI capabilities
MIT License - See LICENSE for details
Built with β€οΈ by the CastQuest team using:
- Next.js 14
- React 18
- TypeScript
- Tailwind CSS
- Framer Motion
- Prisma
- PostgreSQL
- Redis
Questions or need help? Join our Discord or open an issue.
Happy building! π