diff --git a/astro.config.mjs b/astro.config.mjs index 415f8a3..f5924f3 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,6 +1,5 @@ import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; -import sitemap from '@astrojs/sitemap'; export default defineConfig({ site: 'https://insanitylab.tielogic.xyz', @@ -11,5 +10,4 @@ export default defineConfig({ allowedDomains: [{ hostname: 'insanitylab.tielogic.xyz', protocol: 'https' }], }, adapter: node({ mode: 'standalone' }), - integrations: [sitemap({ filter: (page) => !page.includes('/admin') })], }); diff --git a/public/robots.txt b/public/robots.txt index 66a96dc..7ff93d5 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,4 +1,4 @@ User-agent: * Disallow: /admin Disallow: /api -Sitemap: https://insanitylab.tielogic.xyz/sitemap-index.xml +Sitemap: https://insanitylab.tielogic.xyz/sitemap.xml diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index c6b38f3..6ed7abc 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -24,7 +24,7 @@ const { title, description = 'InsanityLab — Performance. Balance. Longevity. A - + diff --git a/src/pages/404.astro b/src/pages/404.astro index b103734..1b1acbb 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -2,7 +2,7 @@ import Base from '../layouts/Base.astro'; import T from '../components/content/T.astro'; import { t } from '../lib/content'; -export const prerender = true; +export const prerender = false; ---
diff --git a/src/pages/about.astro b/src/pages/about.astro index a3674aa..4c068a1 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -10,7 +10,7 @@ const images = import.meta.glob<{ default: ImageMetadata }>('../assets/img/*.{jp const imgOf = (name: string) => Object.entries(images).find(([p]) => p.includes(name))?.[1]?.default; const founders = team.filter((m) => m.founder); const staff = team.filter((m) => !m.founder); -export const prerender = true; +export const prerender = false; --- diff --git a/src/pages/contact.astro b/src/pages/contact.astro index f414acb..911f313 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -5,7 +5,7 @@ import ContactForm from '../components/ContactForm.astro'; import contactHero from '../assets/img/contact-hero.jpg'; import T from '../components/content/T.astro'; import { t, getImageOverride } from '../lib/content'; -export const prerender = true; +export const prerender = false; const mapsQuery = encodeURIComponent(`${t('global.contact.address')}, ${t('global.contact.city-line')}`); --- diff --git a/src/pages/index.astro b/src/pages/index.astro index a99d529..a6b0c75 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -12,7 +12,7 @@ import MethodSteps from '../components/home/MethodSteps.astro'; import PartnersStrip from '../components/home/PartnersStrip.astro'; import T from '../components/content/T.astro'; import { t } from '../lib/content'; -export const prerender = true; +export const prerender = false; --- diff --git a/src/pages/programs/[slug].astro b/src/pages/programs/[slug].astro index ae079db..3b11437 100644 --- a/src/pages/programs/[slug].astro +++ b/src/pages/programs/[slug].astro @@ -2,18 +2,16 @@ import Base from '../../layouts/Base.astro'; import PageHero from '../../components/PageHero.astro'; import type { ImageMetadata } from 'astro'; -import { programs } from '../../data/programs'; +import { programs, getProgram } from '../../data/programs'; import { performanceClassPricing } from '../../data/pricing'; import { programIcons } from '../../data/program-icons'; import T from '../../components/content/T.astro'; import TImg from '../../components/content/TImg.astro'; import { t } from '../../lib/content'; -export const prerender = true; +export const prerender = false; -export function getStaticPaths() { - return programs.map((p) => ({ params: { slug: p.slug }, props: { program: p } })); -} -const { program } = Astro.props; +const program = getProgram(Astro.params.slug!); +if (!program) return new Response(null, { status: 404 }); const slug = program.slug; const others = programs.filter((p) => p.slug !== program.slug); const images = import.meta.glob<{ default: ImageMetadata }>('../../assets/img/program-*.jpg', { eager: true }); diff --git a/src/pages/programs/index.astro b/src/pages/programs/index.astro index 9fb8554..11c4b83 100644 --- a/src/pages/programs/index.astro +++ b/src/pages/programs/index.astro @@ -8,7 +8,7 @@ import TImg from '../../components/content/TImg.astro'; import { t } from '../../lib/content'; const images = import.meta.glob<{ default: ImageMetadata }>('../../assets/img/program-*.jpg', { eager: true }); const imgOf = (slug: string) => Object.entries(images).find(([p]) => p.includes(`program-${slug}.`))?.[1]?.default; -export const prerender = true; +export const prerender = false; --- diff --git a/src/pages/sitemap.xml.ts b/src/pages/sitemap.xml.ts new file mode 100644 index 0000000..1f7235d --- /dev/null +++ b/src/pages/sitemap.xml.ts @@ -0,0 +1,18 @@ +import type { APIRoute } from 'astro'; +import { getDb } from '../lib/db'; +import { programs } from '../data/programs'; +export const prerender = false; + +const STATIC = ['/', '/about', '/contact', '/training', '/programs', '/blog']; + +export const GET: APIRoute = ({ site }) => { + const base = (site ?? new URL('https://insanitylab.tielogic.xyz')).toString().replace(/\/$/, ''); + const posts = getDb().prepare('SELECT slug FROM posts WHERE draft = 0').all() as { slug: string }[]; + const urls = [ + ...STATIC, + ...programs.map((p) => `/programs/${p.slug}`), + ...posts.map((p) => `/blog/${p.slug}`), + ]; + const xml = `\n\n${urls.map((u) => ` ${base}${u}`).join('\n')}\n`; + return new Response(xml, { headers: { 'Content-Type': 'application/xml' } }); +}; diff --git a/src/pages/training.astro b/src/pages/training.astro index 8b9d34b..bdbe0ce 100644 --- a/src/pages/training.astro +++ b/src/pages/training.astro @@ -11,7 +11,7 @@ import TImg from '../components/content/TImg.astro'; import { t } from '../lib/content'; const images = import.meta.glob<{ default: ImageMetadata }>('../assets/img/training-*.{jpg,png}', { eager: true }); const imgOf = (name: string) => Object.entries(images).find(([p]) => p.includes(name))?.[1]?.default; -export const prerender = true; +export const prerender = false; ---