mirror of
https://github.com/arthur-pbty/clock.git
synced 2026-06-03 23:36:30 +02:00
c061960e57
- Implemented ClockApp component to display time based on user settings. - Created SettingsPanel for users to adjust clock type, time format, timezone, and theme. - Added hooks for managing time, settings persistence, and fullscreen functionality. - Introduced types for clock settings and themes, including default settings. - Integrated URL parameter parsing for sharing clock configurations. - Enhanced user experience with loading states and visual transitions.
114 lines
2.5 KiB
TypeScript
114 lines
2.5 KiB
TypeScript
import type { NextConfig } from "next";
|
|
|
|
const nextConfig: NextConfig = {
|
|
// Optimisations de production
|
|
reactStrictMode: true,
|
|
|
|
// Supprimer le header X-Powered-By pour la sécurité
|
|
poweredByHeader: false,
|
|
|
|
// Optimisation des images
|
|
images: {
|
|
formats: ['image/avif', 'image/webp'],
|
|
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
|
|
},
|
|
|
|
// Headers de sécurité, cache et SEO
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: '/:path*',
|
|
headers: [
|
|
{
|
|
key: 'X-DNS-Prefetch-Control',
|
|
value: 'on',
|
|
},
|
|
{
|
|
key: 'X-XSS-Protection',
|
|
value: '1; mode=block',
|
|
},
|
|
{
|
|
key: 'X-Frame-Options',
|
|
value: 'SAMEORIGIN',
|
|
},
|
|
{
|
|
key: 'X-Content-Type-Options',
|
|
value: 'nosniff',
|
|
},
|
|
{
|
|
key: 'Referrer-Policy',
|
|
value: 'strict-origin-when-cross-origin',
|
|
},
|
|
{
|
|
key: 'Permissions-Policy',
|
|
value: 'camera=(), microphone=(), geolocation=()',
|
|
},
|
|
{
|
|
key: 'Strict-Transport-Security',
|
|
value: 'max-age=63072000; includeSubDomains; preload',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/manifest.json',
|
|
headers: [
|
|
{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=31536000, immutable',
|
|
},
|
|
{
|
|
key: 'Content-Type',
|
|
value: 'application/manifest+json',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
// Cache statiques (images, fonts, icons)
|
|
source: '/:path*.(ico|png|jpg|jpeg|svg|webp|avif|woff|woff2)',
|
|
headers: [
|
|
{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=31536000, immutable',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
// Sitemap et robots : cache court pour que Google voit les mises à jour
|
|
source: '/(sitemap.xml|robots.txt)',
|
|
headers: [
|
|
{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=3600, s-maxage=86400',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
},
|
|
|
|
// Redirections pour des URL propres
|
|
async redirects() {
|
|
return [
|
|
{
|
|
source: '/index',
|
|
destination: '/',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/home',
|
|
destination: '/',
|
|
permanent: true,
|
|
},
|
|
];
|
|
},
|
|
|
|
// Compression
|
|
compress: true,
|
|
|
|
// Optimisation du bundle
|
|
experimental: {
|
|
optimizeCss: true,
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|