LifeRPG_v2.0/modern/frontend/src/AdminUsers.jsx
TLimoges33 7fe4ae5365
🧙‍♂️ Transform LifeRPG into The Wizard's Grimoire - Production-Ready Application
 Major Features Added:
- Complete magical theming and rebranding from LifeRPG to The Wizard's Grimoire
- Production-grade React frontend with Tailwind CSS v4 and magical aesthetics
- Comprehensive analytics dashboard with Recharts integration (ScryingPortal)
- Push notifications system with PWA service worker support
- Drag & drop functionality using @dnd-kit for habit reordering
- Social features with friends system and leaderboards
- Performance optimization tools and monitoring
- Mobile app enhancement with PWA installation support

🏗️ Technical Infrastructure:
- Advanced service worker with offline support and background sync
- Zustand state management for scalable application state
- Production-ready UI component system with enhanced Button, Card, Input
- Progressive Web App (PWA) with manifest and app installation
- FastAPI backend with comprehensive API endpoints
- Docker containerization and CI/CD pipeline setup

📱 Progressive Web App Features:
- Offline functionality with intelligent caching
- Push notification support for habit reminders
- App installation on mobile and desktop platforms
- Background sync for offline data management
- Performance monitoring and optimization tools

🎨 User Experience:
- Magical wizard/grimoire theming throughout application
- Responsive design optimized for all device sizes
- Drag & drop habit management with smooth animations
- Interactive analytics with multiple chart types
- Social connectivity with friends and competitive features
- Comprehensive notification and performance settings

🔧 Developer Experience:
- Modern development stack with Vite and React
- Comprehensive testing setup and CI/CD pipelines
- Code quality tools with pre-commit hooks
- Docker development environment
- Detailed documentation and implementation guides

This represents a complete transformation from prototype to production-ready application with enterprise-grade features and magical user experience.
2025-08-30 17:32:42 +00:00

29 lines
1.2 KiB
JavaScript

import React, { useState, useEffect } from 'react'
export default function AdminUsers() {
const [users, setUsers] = useState([])
const [msg, setMsg] = useState(null)
useEffect(() => {
fetch('/api/v1/admin/users', { credentials: 'include' }).then(r => r.json()).then(setUsers).catch(() => setUsers([]))
}, [])
function setRole(id, role) {
fetch(`/api/v1/admin/users/${id}/role`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ role }) })
.then(r => r.json()).then(() => setMsg('Role updated'))
.catch(() => setMsg('Failed'))
}
return (
<div style={{ marginTop: 20 }}>
<h2>Admin: Users</h2>
{msg && <div style={{ color: '#0366d6' }}>{msg}</div>}
<ul>
{users && users.length ? users.map(u => (
<li key={u.id}>{u.email} {u.role} <button onClick={() => setRole(u.id, 'moderator')} style={{ marginLeft: 8 }}>Make Moderator</button> <button onClick={() => setRole(u.id, 'admin')} style={{ marginLeft: 8 }}>Make Admin</button></li>
)) : <li>No users</li>}
</ul>
</div>
)
}