moving site to cloudflare pages

This commit is contained in:
fynks 2025-09-08 11:02:40 +05:00
parent 9b519ed2bb
commit 25296fe880
3 changed files with 130 additions and 42 deletions

10
dist/index.html vendored
View file

@ -11,7 +11,7 @@
<meta name="robots" content="index, follow"> <meta name="robots" content="index, follow">
<meta name="author" content="Fynks"> <meta name="author" content="Fynks">
<meta name="google-site-verification" content="nlH9UKmiZsYOuMXXnRc9pKL-AW5rECWikqcUqzri-yQ"> <meta name="google-site-verification" content="nlH9UKmiZsYOuMXXnRc9pKL-AW5rECWikqcUqzri-yQ">
<link rel="canonical" href="https://debrid-services-comparison.netlify.app/"> <link rel="canonical" href="https://debridcompare.pages.dev/">
<!-- Theme color per scheme --> <!-- Theme color per scheme -->
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)"> <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
@ -56,21 +56,21 @@
<!-- Open Graph --> <!-- Open Graph -->
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="https://debrid-services-comparison.netlify.app/"> <meta property="og:url" content="https://debridcompare.pages.dev/">
<meta property="og:title" content="Debrid Services Comparison"> <meta property="og:title" content="Debrid Services Comparison">
<meta property="og:description" <meta property="og:description"
content="Compare pricing and supported hosts across major debrid services. Find the best premium download service for your needs."> content="Compare pricing and supported hosts across major debrid services. Find the best premium download service for your needs.">
<meta property="og:image" content="https://debrid-services-comparison.netlify.app/image.png"> <meta property="og:image" content="https://debridcompare.pages.dev/image.png">
<meta property="og:site_name" content="Debrid Services Comparison"> <meta property="og:site_name" content="Debrid Services Comparison">
<meta property="og:locale" content="en_US"> <meta property="og:locale" content="en_US">
<!-- Twitter --> <!-- Twitter -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://debrid-services-comparison.netlify.app/"> <meta name="twitter:url" content="https://debridcompare.pages.dev/">
<meta name="twitter:title" content="Debrid Services Comparison"> <meta name="twitter:title" content="Debrid Services Comparison">
<meta name="twitter:description" <meta name="twitter:description"
content="Compare pricing and supported hosts across major debrid services. Find the best premium download service for your needs."> content="Compare pricing and supported hosts across major debrid services. Find the best premium download service for your needs.">
<meta name="twitter:image" content="https://debrid-services-comparison.netlify.app/image.png"> <meta name="twitter:image" content="https://debridcompare.pages.dev/image.png">
<link rel="stylesheet" href="./css/styles.css"> <link rel="stylesheet" href="./css/styles.css">

4
dist/sitemap.xml vendored
View file

@ -6,8 +6,8 @@
<!-- Homepage --> <!-- Homepage -->
<url> <url>
<loc>https://debrid-services-comparison.netlify.app/</loc> <loc>https://debridcompare.pages.dev/</loc>
<lastmod>2025-08-25T00:00:00+00:00</lastmod> <lastmod>2025-09-07T00:00:00+00:00</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>1.0</priority> <priority>1.0</priority>
</url> </url>

View file

@ -1,61 +1,149 @@
module.exports = { module.exports = {
// Specify files to precache // Base directory - still needed for SW generation
globDirectory: "dist/", globDirectory: "dist/",
globPatterns: [
"**/*.{html,css,js,json,svg,ico}",
"json/*.json"
],
// REMOVE globPatterns entirely - no precaching!
// globPatterns: [], // Explicitly empty or just omit
// Enhanced runtime caching strategies
runtimeCaching: [ runtimeCaching: [
// Cache JSON files with a stale-while-revalidate strategy // 1. Navigation routes (for SPAs) - Network first with offline fallback
{ {
urlPattern: /\.json$/, urlPattern: ({ request }) => request.mode === 'navigate',
handler: 'StaleWhileRevalidate', handler: 'NetworkFirst',
options: { options: {
cacheName: 'json-cache', cacheName: 'navigation-cache',
networkTimeoutSeconds: 3, // Fallback to cache after 3s
expiration: { expiration: {
maxEntries: 50, maxEntries: 50,
maxAgeSeconds: 60 * 60 * 24 // 24 hours maxAgeSeconds: 24 * 60 * 60 // 24 hours
},
cacheableResponse: {
statuses: [0, 200] // Cache successful responses
} }
} }
}, },
// Cache static assets // 2. HTML pages - Network first for fresh content
{ {
urlPattern: /\.(?:png|css|svg|ico)$/, urlPattern: /\.html$/i,
handler: 'CacheFirst',
options: {
cacheName: 'static-assets',
expiration: {
maxEntries: 20,
maxAgeSeconds: 60 * 60 * 24 * 7 // 7 days
}
}
},
// Cache HTML files
{
urlPattern: /\.html$/,
handler: 'NetworkFirst', handler: 'NetworkFirst',
options: { options: {
cacheName: 'html-cache', cacheName: 'html-cache',
networkTimeoutSeconds: 2,
expiration: { expiration: {
maxEntries: 10, maxEntries: 50,
maxAgeSeconds: 60 * 60 * 24 // 24 hours maxAgeSeconds: 12 * 60 * 60 // 12 hours
}
}
},
// 3. JS/CSS - StaleWhileRevalidate with versioning awareness
{
urlPattern: /\.(?:js|css)$/i,
handler: 'StaleWhileRevalidate',
options: {
cacheName: 'static-resources',
expiration: {
maxEntries: 60,
maxAgeSeconds: 7 * 24 * 60 * 60, // 7 days
purgeOnQuotaError: true // Auto-cleanup when storage is full
},
cacheableResponse: {
statuses: [0, 200]
}
}
},
// 4. Images - CacheFirst for performance
{
urlPattern: /\.(?:png|jpg|jpeg|gif|webp|svg|ico)$/i,
handler: 'CacheFirst',
options: {
cacheName: 'image-cache',
expiration: {
maxEntries: 200, // More space for images
maxAgeSeconds: 30 * 24 * 60 * 60, // 30 days
purgeOnQuotaError: true
},
cacheableResponse: {
statuses: [0, 200]
},
plugins: [
{
handlerDidError: async () => {
// Return fallback image on error
return caches.match('/assets/fallback-image.svg');
}
}
]
}
},
// 5. JSON responses - NetworkFirst with timeout
{
urlPattern: /^https:\/\/api\.|\/api\/|\.json$/i,
handler: 'NetworkFirst',
options: {
cacheName: 'api-cache',
networkTimeoutSeconds: 5,
expiration: {
maxEntries: 100,
maxAgeSeconds: 5 * 60 // 5 minutes for fresh API data
},
cacheableResponse: {
statuses: [0, 200],
headers: {
'x-cache': 'hit' // Optional: only cache specific responses
}
},
matchOptions: {
ignoreSearch: false // Consider query params
}
}
},
// 8. Google Fonts - CacheFirst
{
urlPattern: /^https:\/\/fonts\.(?:googleapis|gstatic)\.com/,
handler: 'CacheFirst',
options: {
cacheName: 'google-fonts',
expiration: {
maxEntries: 30,
maxAgeSeconds: 365 * 24 * 60 * 60 // 1 year
},
cacheableResponse: {
statuses: [0, 200]
} }
} }
} }
], ],
// Output path for service worker // Service worker output
swDest: "dist/sw.js", swDest: "dist/sw.js",
// Don't generate sourcemaps // Disable sourcemaps in production
sourcemap: false, sourcemap: false,
// Skip waiting on install // Immediate activation
skipWaiting: true, skipWaiting: true,
clientsClaim: true,
// Claim clients immediately // Additional improvements
clientsClaim: true cleanupOutdatedCaches: true, // Remove old caches automatically
navigateFallback: null, // No fallback since no precaching
// Ignore specific query parameters
ignoreURLParametersMatching: [
/^utm_/, // Marketing params
/^fbclid$/ // Facebook click ID
],
// Maximum file size to cache (15MB)
maximumFileSizeToCacheInBytes: 15 * 1024 * 1024,
// Mode for generated SW
mode: 'production'
}; };