- pnpm monorepo (apps/client + apps/server) - Server: Express + node:sqlite with numbered migration runner, REST API for all 9 features (members, events, chores, shopping, meals, messages, countdowns, photos, settings) - Client: React 18 + Vite + TypeScript + Tailwind + Framer Motion + Zustand - Theme system: dark/light + 5 accent colors, CSS custom properties, anti-FOUC script, ThemeToggle on every surface - AppShell: collapsible sidebar, animated route transitions, mobile drawer - Phase 2 features: Calendar (custom month grid, event chips, add/edit modal), Chores (card grid, complete/reset, member filter, streaks), Shopping (multi-list tabs, animated check-off, quick-add bar, member assign) - Family member CRUD with avatar, color picker - Settings page: theme/accent, photo folder, slideshow, weather, date/time - Docker: multi-stage Dockerfile, docker-compose.yml, entrypoint with PUID/PGID - Unraid: CA XML template, CLI install script, UNRAID.md guide - .gitignore covering node_modules, dist, db files, secrets, build artifacts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import type { Config } from 'tailwindcss';
|
|
|
|
export default {
|
|
darkMode: 'class',
|
|
content: ['./index.html', './src/**/*.{ts,tsx}'],
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
// Map CSS custom properties → Tailwind utilities
|
|
bg: 'var(--color-bg)',
|
|
surface: 'var(--color-surface)',
|
|
border: 'var(--color-border)',
|
|
'text-primary': 'var(--color-text-primary)',
|
|
'text-secondary': 'var(--color-text-secondary)',
|
|
accent: 'var(--color-accent)',
|
|
'accent-light': 'var(--color-accent-light)',
|
|
},
|
|
fontFamily: {
|
|
sans: ['Inter', 'system-ui', 'sans-serif'],
|
|
},
|
|
transitionProperty: {
|
|
theme: 'background-color, color, border-color, fill, stroke',
|
|
},
|
|
animation: {
|
|
'fade-in': 'fadeIn 0.3s ease-out',
|
|
'slide-up': 'slideUp 0.3s ease-out',
|
|
},
|
|
keyframes: {
|
|
fadeIn: { '0%': { opacity: '0' }, '100%': { opacity: '1' } },
|
|
slideUp: { '0%': { opacity: '0', transform: 'translateY(8px)' }, '100%': { opacity: '1', transform: 'translateY(0)' } },
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
} satisfies Config;
|