| <!doctype html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <meta name="description" content="RYP- Interactive platform for learning programming with coding challenges, aptitude tests, and AI assistance" /> |
| <meta name="theme-color" content="#1d4ed8" /> |
| <link rel="manifest" href="/manifest.json" /> |
| <title>RYP - Learn Programming</title> |
| <link rel="preconnect" href="https://fonts.googleapis.com" /> |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
| <link href="https://fonts.googleapis.com/css2?family=IM+Fell+English:ital@0;1&family=Caveat:wght@400;700&family=Cinzel+Decorative:wght@400;700;900&family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet" /> |
| </head> |
| <body> |
| <div id="root"></div> |
| <script type="module" src="/src/main.tsx"></script> |
| <script> |
| if ('serviceWorker' in navigator) { |
| window.addEventListener('load', async () => { |
| try { |
| const registrations = await navigator.serviceWorker.getRegistrations(); |
| await Promise.all(registrations.map((registration) => registration.unregister())); |
| |
| if ('caches' in window) { |
| const keys = await caches.keys(); |
| await Promise.all(keys.map((key) => caches.delete(key))); |
| } |
| |
| console.log('Legacy service workers cleared'); |
| } catch (error) { |
| console.log('Service worker cleanup skipped:', error); |
| } |
| }); |
| } |
| </script> |
| </body> |
| </html> |
|
|