Serve a custom maintenance page. Ideal for downtime notifications, planned maintenance, or emergency messages.
// Define your customizable inputsconst statusCode = 503;const title = "We'll Be Right Back!";const message = "Our site is currently undergoing scheduled maintenance. We’re working hard to bring you a better experience. Thank you for your patience and understanding.";const estimatedTime = "1 hour";const contactEmail = "support@example.com";const contactPhone = "+1 234 567 89"; export default { async fetch(request) { // Serve the maintenance page as a response return new Response(generateMaintenancePage(), { status: statusCode, headers: { "Content-Type": "text/html", "Retry-After": "3600", // Suggest retry after 1 hour }, }); },}; function generateMaintenancePage() { return ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>${title}</title> <style> body { margin: 0; font-family: Arial, sans-serif; display: flex; align-items: center; justify-content: center; height: 100vh; background-color: #f4f4f4; color: #333; text-align: center; } .container { max-width: 600px; padding: 20px; } h1 { font-size: 2rem; color: #0056b3; margin-bottom: 10px; } p { font-size: 1rem; margin-bottom: 20px; line-height: 1.5; } .contact { margin-top: 20px; font-size: 0.9rem; color: #666; } .contact a { color: #0056b3; text-decoration: none; } .contact a:hover { text-decoration: underline; } .logo { margin: 20px 0; max-width: 150px; } .timer { font-weight: bold; color: #e63946; } </style> </head> <body> <div class="container"> <h1>${title}</h1> <p>${message}</p> <p>If all goes to plan, we'll be back online in <span class="timer">${estimatedTime}</span>. 🚀</p> <p class="contact"> Need help? Reach out to us at <a href="mailto:${contactEmail}">${contactEmail}</a> or call us at <a href="tel:${contactPhone}">${contactPhone}</a>. </p> </div> </body> </html> `;}