diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..47f9cc9 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,24 @@ +{ + "name": "Scott Scoble", + "short_name": "Scott Scoble", + "description": "Human Cultivation Expert for the AI Age", + "start_url": "/", + "display": "standalone", + "background_color": "#faf8f5", + "theme_color": "#3d5a3e", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..26a9c27 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,19 @@ +# robots.txt for scott.scoble.me +# https://scott.scoble.me + +User-agent: * +Allow: / + +# Sitemap +Sitemap: https://scott.scoble.me/sitemap.xml + +# Disallow admin pages (if any) +Disallow: /admin/ +Disallow: /api/ + +# Disallow private user data +Disallow: /private/ +Disallow: /checkout/ + +# Crawl delay (optional) +Crawl-delay: 1 diff --git a/src/components/Footer.astro b/src/components/Footer.astro index c4b0dd1..188cb8a 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -9,11 +9,13 @@ const currentYear = new Date().getFullYear();
+ + diff --git a/src/pages/consulting.astro b/src/pages/consulting.astro index f186a21..7dc8146 100644 --- a/src/pages/consulting.astro +++ b/src/pages/consulting.astro @@ -6,6 +6,7 @@ import PackageCard from '../components/PackageCard.astro';If you submit a contact form, your email and message are sent to me directly. I don't share this information with third parties.
This site does not use Google Analytics or other tracking scripts.
+This site uses Umami Analytics, a privacy-focused, first-party analytics tool. Umami does not use cookies, does not track you across sites, and does not collect personal data.
+You can see the privacy policy at umami.is/privacy.
No cookies are set by this site.
+No cookies are set by this site. Umami Analytics uses localStorage (not cookies) for anonymous session tracking.
This site is hosted on Storj. Their privacy policy applies to infrastructure-level logging.
diff --git a/src/pages/sitemap.xml.ts b/src/pages/sitemap.xml.ts new file mode 100644 index 0000000..cd2489f --- /dev/null +++ b/src/pages/sitemap.xml.ts @@ -0,0 +1,44 @@ +--- +import { getCollection } from 'astro:content'; +import { getSortedPosts } from '../utils/posts'; + +const posts = await getCollection('blog'); +const speakingPosts = await getCollection('speaking'); + +const pages = [ + { url: '/', lastmod: new Date().toISOString() }, + { url: '/speaking', lastmod: new Date().toISOString() }, + { url: '/consulting', lastmod: new Date().toISOString() }, + { url: '/books', lastmod: new Date().toISOString() }, + { url: '/contact', lastmod: new Date().toISOString() }, + ...posts.map(post => ({ + url: `/blog/${post.slug}`, + lastmod: post.data.updated || post.data.date, + })), + ...speakingPosts.map(talk => ({ + url: `/speaking#talk-${talk.slug}`, + lastmod: new Date().toISOString(), + })), +]; + +// Render the sitemap XML +const xml = ` +