diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index ac253fd76..3d74f0ab2 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -4,6 +4,7 @@ import UnoCSS from 'unocss/vite' import AutoImport from 'unplugin-auto-import/vite' import OptimizeExclude from 'vite-plugin-optimize-exclude' import Terminal from 'vite-plugin-terminal' +import { VitePWA } from 'vite-plugin-pwa' import { defineConfig } from 'vitepress' import { commitRef, @@ -43,11 +44,14 @@ export default defineConfig({ ['meta', { name: 'og:locale', content: 'en' }], ['link', { rel: 'icon', href: '/test.png' }], // PWA + ['link', { rel: 'manifest', href: '/manifest.json' }], ['link', { rel: 'icon', href: '/test.png', type: 'image/svg+xml' }], ['link', { rel: 'alternate icon', href: '/test.png' }], ['link', { rel: 'mask-icon', href: '/test.png', color: '#7bc5e4' }], ['meta', { name: 'keywords', content: meta.keywords.join(' ') }], ['link', { rel: 'apple-touch-icon', href: '/test.png', sizes: '192x192' }], + ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], + ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'default' }], // Bing site verification [ 'meta', @@ -116,6 +120,58 @@ export default defineConfig({ filepath: './.cache/imports.json' } }), + VitePWA({ + registerType: 'autoUpdate', + workbox: { + globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'], + runtimeCaching: [ + { + urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i, + handler: 'CacheFirst', + options: { + cacheName: 'google-fonts-cache', + expiration: { + maxEntries: 10, + maxAgeSeconds: 60 * 60 * 24 * 365 // 365 days + }, + cacheableResponse: { + statuses: [0, 200] + } + } + } + ] + }, + manifest: { + name: 'FMHY - freemediaheckyeah', + short_name: 'FMHY', + description: 'The largest collection of free stuff on the internet!', + theme_color: '#7bc5e4', + background_color: '#ffffff', + display: 'standalone', + orientation: 'portrait', + scope: '/', + start_url: '/', + icons: [ + { + src: '/fmhy.ico', + sizes: '16x16', + type: 'image/x-icon' + }, + { + src: '/test.png', + sizes: '192x192', + type: 'image/png', + purpose: 'any maskable' + }, + { + src: '/test.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any maskable' + } + ] + } + }), transformsPlugin(), { name: 'custom:adjust-order', diff --git a/docs/public/manifest.json b/docs/public/manifest.json new file mode 100644 index 000000000..28310d128 --- /dev/null +++ b/docs/public/manifest.json @@ -0,0 +1,39 @@ +{ + "name": "FMHY - freemediaheckyeah", + "short_name": "FMHY", + "description": "The largest collection of free stuff on the internet!", + "theme_color": "#7bc5e4", + "background_color": "#ffffff", + "display": "standalone", + "orientation": "portrait", + "scope": "/", + "start_url": "/", + "icons": [ + { + "src": "/fmhy.ico", + "sizes": "16x16", + "type": "image/x-icon" + }, + { + "src": "/test.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/test.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ], + "categories": ["education", "entertainment", "lifestyle", "utilities"], + "screenshots": [ + { + "src": "/banner2.png", + "sizes": "1280x720", + "type": "image/png", + "form_factor": "wide" + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..6b8bb3636 Binary files /dev/null and b/package-lock.json differ diff --git a/package.json b/package.json index 90955bb61..008e0ac53 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "typescript": "^5.8.2", "unplugin-auto-import": "^0.18.3", "vite-plugin-optimize-exclude": "^0.0.1", + "vite-plugin-pwa": "^1.0.3", "vite-plugin-terminal": "^1.2.0", "wrangler": "^3.114.1" },