import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { VitePWA } from 'vite-plugin-pwa'; import path from 'path'; export default defineConfig({ plugins: [ react(), VitePWA({ registerType: 'autoUpdate', includeAssets: ['favicon.ico', 'robots.txt', 'apple-touch-icon.png'], manifest: { name: 'Bakery AI', short_name: 'Bakery AI', theme_color: '#f97316', icons: [ { src: '/icons/icon-192.png', sizes: '192x192', type: 'image/png', }, { src: '/icons/icon-512.png', sizes: '512x512', type: 'image/png', }, ], }, workbox: { globPatterns: ['**/*.{js,css,html,ico,png,svg,woff,woff2}'], runtimeCaching: [ { urlPattern: /^https:\/\/api\.bakeryai\.com\//, handler: 'NetworkFirst', options: { cacheName: 'api-cache', expiration: { maxEntries: 50, maxAgeSeconds: 5 * 60, // 5 minutes }, cacheableResponse: { statuses: [0, 200], }, }, }, ], }, }), ], resolve: { alias: { '@': path.resolve(__dirname, './src'), '@components': path.resolve(__dirname, './src/components'), '@pages': path.resolve(__dirname, './src/pages'), '@hooks': path.resolve(__dirname, './src/hooks'), '@stores': path.resolve(__dirname, './src/stores'), '@services': path.resolve(__dirname, './src/services'), '@utils': path.resolve(__dirname, './src/utils'), '@types': path.resolve(__dirname, './src/types'), }, }, server: { host: '0.0.0.0', // Important for Docker port: 3000, watch: { usePolling: true, // Important for Docker file watching }, proxy: { '/api': { target: 'http://localhost:8000', changeOrigin: true, }, }, }, build: { outDir: 'dist', sourcemap: true, rollupOptions: { output: { manualChunks: { vendor: ['react', 'react-dom', 'react-router-dom'], ui: ['@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu'], charts: ['recharts'], forms: ['react-hook-form', 'zod'], }, }, }, }, });