diff options
| -rw-r--r-- | scripts/generate-sitemap.ts | 26 | ||||
| -rw-r--r-- | src/app.html | 1 | ||||
| -rw-r--r-- | src/routes/+layout.svelte | 38 |
3 files changed, 44 insertions, 21 deletions
diff --git a/scripts/generate-sitemap.ts b/scripts/generate-sitemap.ts index e521365..3270fea 100644 --- a/scripts/generate-sitemap.ts +++ b/scripts/generate-sitemap.ts @@ -12,25 +12,25 @@ const postsDir = path.join(projectRoot, 'src', 'posts'); const sitemapPath = path.join(projectRoot, 'static', 'sitemap.txt'); async function getPostRoutes(): Promise<string[]> { - const files = await fs.readdir(postsDir); + const files = await fs.readdir(postsDir); - return files - .filter((file) => file.endsWith('.svx')) - .map((file) => `/posts/${file.replace(/\.svx$/, '')}`) - .sort(); + return files + .filter((file) => file.endsWith('.svx')) + .map((file) => `/posts/${file.replace(/\.svx$/, '')}`) + .sort(); } async function main(): Promise<void> { - const postRoutes = await getPostRoutes(); - const urls = [...STATIC_ROUTES, ...postRoutes].map((route) => `${SITE_URL}${route}`); - const body = `${urls.join('\n')}\n`; + const postRoutes = await getPostRoutes(); + const urls = [...STATIC_ROUTES, ...postRoutes].map((route) => `${SITE_URL}${route}`); + const body = `${urls.join('\n')}\n`; - await fs.writeFile(sitemapPath, body, 'utf8'); - console.log(`Generated sitemap: ${path.relative(projectRoot, sitemapPath)} (${urls.length} URLs)`); + await fs.writeFile(sitemapPath, body, 'utf8'); + console.log(`Generated sitemap: ${path.relative(projectRoot, sitemapPath)} (${urls.length} URLs)`); } main().catch((error: unknown) => { - console.error('Failed to generate sitemap.txt'); - console.error(error); - process.exit(1); + console.error('Failed to generate sitemap.txt'); + console.error(error); + process.exit(1); }); diff --git a/src/app.html b/src/app.html index ae37ad7..94ca387 100644 --- a/src/app.html +++ b/src/app.html @@ -8,7 +8,6 @@ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet"> %sveltekit.head% - <script data-goatcounter="https://stats.wsap.dev/count" async src="//stats.wsap.dev/count.js"></script> </head> <body data-sveltekit-preload-data="hover"> diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index ac15a2e..5229cac 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,20 +1,44 @@ <script lang="ts"> - import Header from "$lib/components/Header.svelte"; - import Footer from "$lib/components/Footer.svelte"; - import favicon from "$lib/assets/favicon.svg"; - import "$lib/styles/global.css"; + import { onMount } from "svelte"; + import Header from "$lib/components/Header.svelte"; + import Footer from "$lib/components/Footer.svelte"; + import favicon from "$lib/assets/favicon.svg"; + import "$lib/styles/global.css"; - let { children } = $props(); + let { children } = $props(); + + onMount(() => { + const loadAnalytics = () => { + if (document.querySelector('script[data-goatcounter-script="true"]')) + return; + + const script = document.createElement("script"); + script.src = "https://stats.wsap.dev/count.js"; + script.async = true; + script.defer = true; + script.setAttribute("data-goatcounter", "https://stats.wsap.dev/count"); + script.setAttribute("data-goatcounter-script", "true"); + document.head.appendChild(script); + }; + + if (document.readyState === "complete") { + window.setTimeout(loadAnalytics, 0); + return; + } + + window.addEventListener("load", loadAnalytics, { once: true }); + return () => window.removeEventListener("load", loadAnalytics); + }); </script> <svelte:head> - <link rel="icon" href={favicon} /> + <link rel="icon" href={favicon} /> </svelte:head> <Header title="Berke Güzel" description="Super. Bad. Code." /> <main class="container"> - {@render children()} + {@render children()} </main> <Footer /> |
