- Created service worker (public/sw.js) with caching strategies - Cache-first strategy for static assets - Stale-while-revalidate for API responses and pages - Network-first fallback strategy - Implemented offline fallback page (/offline) - Updated manifest.json with complete PWA metadata - Added service worker registration in app layout - Created ServiceWorkerRegistration component for client-side registration - Generated SVG icons for PWA (192x192 and 512x512) - Added PWA meta tags for iOS Safari support Validates Requirements: 4.1, 4.3, 4.4
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import './globals.css'
|
|
import ServiceWorkerRegistration from '@/components/ServiceWorkerRegistration'
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Ultimate Lists',
|
|
description: 'The ultimate todo list app with advanced task management',
|
|
manifest: '/manifest.json',
|
|
themeColor: '#3B82F6',
|
|
viewport: 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
|
|
appleWebApp: {
|
|
capable: true,
|
|
statusBarStyle: 'default',
|
|
title: 'Ultimate Lists',
|
|
},
|
|
applicationName: 'Ultimate Lists',
|
|
icons: {
|
|
icon: '/icon-192.svg',
|
|
apple: '/icon-192.svg',
|
|
},
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) {
|
|
return (
|
|
<html lang="en">
|
|
<head>
|
|
<link rel="apple-touch-icon" href="/icon-192.svg" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
<meta name="apple-mobile-web-app-title" content="Ultimate Lists" />
|
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
</head>
|
|
<body className="bg-gray-50 min-h-screen">
|
|
<ServiceWorkerRegistration />
|
|
{children}
|
|
</body>
|
|
</html>
|
|
)
|
|
} |