docs: Add comprehensive multi-child implementation plan
Added detailed implementation plan covering: - Frontend: Dynamic UI, child selector, bulk activity logging, comparison analytics - Backend: Bulk operations, multi-child queries, family statistics - AI/Voice: Child name detection, context building, clarification flows - Database: Schema enhancements, user preferences, bulk operation tracking - State management, API enhancements, real-time sync updates - Testing strategy: Unit, integration, and E2E tests - Migration plan with feature flags for phased rollout - Performance optimizations: Caching, indexes, code splitting Also includes: - Security fixes for multi-family data leakage in analytics pages - ParentFlow branding updates - Activity tracking navigation improvements - Backend DTO and error handling fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -19,10 +19,11 @@ import { TabBar } from '../TabBar/TabBar';
|
||||
import { useMediaQuery } from '@/hooks/useMediaQuery';
|
||||
import { ReactNode } from 'react';
|
||||
import { useWebSocket } from '@/hooks/useWebSocket';
|
||||
import { Wifi, WifiOff, People, AccountCircle, Settings, ChildCare, Group, Logout, Gavel } from '@mui/icons-material';
|
||||
import { Wifi, WifiOff, People, AccountCircle, Settings, ChildCare, Group, Logout, Gavel, Favorite } from '@mui/icons-material';
|
||||
import { useTranslation } from '@/hooks/useTranslation';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { useAuth } from '@/lib/auth/AuthContext';
|
||||
import Link from 'next/link';
|
||||
|
||||
interface AppShellProps {
|
||||
children: ReactNode;
|
||||
@@ -93,7 +94,7 @@ export const AppShell = ({ children }: AppShellProps) => {
|
||||
}}
|
||||
>
|
||||
{/* Left Side - Family Members Online Indicator */}
|
||||
<Box>
|
||||
<Box sx={{ width: 80, display: 'flex', justifyContent: 'flex-start' }}>
|
||||
{isConnected && presence.count > 1 && (
|
||||
<Tooltip title={t('connection.familyMembersOnline', { count: presence.count })}>
|
||||
<Chip
|
||||
@@ -109,7 +110,47 @@ export const AppShell = ({ children }: AppShellProps) => {
|
||||
)}
|
||||
</Box>
|
||||
|
||||
{/* Center - Logo */}
|
||||
<Box
|
||||
component={Link}
|
||||
href="/"
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: 1,
|
||||
textDecoration: 'none',
|
||||
'&:hover': {
|
||||
opacity: 0.8,
|
||||
},
|
||||
cursor: 'pointer',
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
component="img"
|
||||
src="/icon-192x192.png"
|
||||
alt="ParentFlow logo"
|
||||
sx={{
|
||||
width: 32,
|
||||
height: 32,
|
||||
borderRadius: 1,
|
||||
}}
|
||||
/>
|
||||
<Box
|
||||
component="span"
|
||||
sx={{
|
||||
fontWeight: 700,
|
||||
fontSize: { xs: '0.95rem', sm: '1.1rem' },
|
||||
background: (theme) => `linear-gradient(135deg, ${theme.palette.primary.main} 0%, ${theme.palette.secondary.main} 100%)`,
|
||||
WebkitBackgroundClip: 'text',
|
||||
WebkitTextFillColor: 'transparent',
|
||||
}}
|
||||
>
|
||||
ParentFlow
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
{/* Right Side - User Menu Button with Status Indicator */}
|
||||
<Box sx={{ width: 80, display: 'flex', justifyContent: 'flex-end' }}>
|
||||
<Tooltip title={isConnected ? t('connection.syncActive') : t('connection.syncDisconnected')}>
|
||||
<IconButton
|
||||
onClick={handleMenuOpen}
|
||||
@@ -207,6 +248,7 @@ export const AppShell = ({ children }: AppShellProps) => {
|
||||
<ListItemText>{t('navigation.logout')}</ListItemText>
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
<Container
|
||||
|
||||
Reference in New Issue
Block a user