diff --git a/astro.config.mjs b/astro.config.mjs
index 13d8a8b60..9b72331dc 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -53,15 +53,8 @@ export default defineConfig({
},
site: process.env.SITE_URL || "https://ep2025.europython.eu",
redirects: {
- "/c-api-summit/": "/programme/c-api-summit/",
- "/cfp/": "/programme/cfp/",
"/planning/": "https://forms.gle/riw6CvML8ck94A4V9",
"/reviewers/": "https://forms.gle/4GTJjwZ1nHBGetM18",
- "/rust-summit/": "/programme/rust-summit/",
- "/sponsor/": "/sponsorship/sponsor/",
- "/voting/": "/programme/voting/",
- "/wasm-summit/": "/programme/wasm-summit/",
- "/programme/sessions/": "/sessions/",
},
integrations: [
preload(),
diff --git a/src/content/deadlines/00_cfp.md b/src/content/deadlines/00_cfp.md
index c86e6242c..4054289fd 100644
--- a/src/content/deadlines/00_cfp.md
+++ b/src/content/deadlines/00_cfp.md
@@ -1,7 +1,7 @@
---
title: Call for Proposals
subtitle: Extended until February 3rd
-url: /programme/cfp
+url: /cfp
image: "./cfp.jpg"
---
diff --git a/src/content/deadlines/00_mentorship.md b/src/content/deadlines/00_mentorship.md
index 227e386c8..18f5a3a13 100644
--- a/src/content/deadlines/00_mentorship.md
+++ b/src/content/deadlines/00_mentorship.md
@@ -1,7 +1,7 @@
---
title: Speaker Mentorship
subtitle: Open until 21st January
-url: /programme/mentorship
+url: /mentorship
image: mentorship1.jpg
---
diff --git a/src/content/deadlines/00_voting.md b/src/content/deadlines/00_voting.md
index 08ceb2b7d..9f92e1ec1 100644
--- a/src/content/deadlines/00_voting.md
+++ b/src/content/deadlines/00_voting.md
@@ -1,7 +1,7 @@
---
title: Community Voting
subtitle: Closed on February 17th
-url: /programme/voting/
+url: /voting/
image: voting.jpg
---
diff --git a/src/content/pages/faq.mdx b/src/content/pages/faq.mdx
index f730674f8..1c27a44c3 100644
--- a/src/content/pages/faq.mdx
+++ b/src/content/pages/faq.mdx
@@ -9,15 +9,15 @@ subtitle: Frequently Asked Questions about EuroPython
- **12 December 2024** Call for Teams starts
- - **10 January 2025** [Call for Proposals (CfP)](/programme/cfp/) opens
- - **11 January 2025** [Speaker Mentorship Programme](/programme/mentorship/) sign-up opens
+ - **10 January 2025** [Call for Proposals (CfP)](/cfp) opens
+ - **11 January 2025** [Speaker Mentorship Programme](/mentorship) sign-up opens
- **21 January 2025:** Speaker Mentorship signup closes
- **30 January 2025:** [Call for Reviewers](https://forms.gle/4GTJjwZ1nHBGetM18) & review process begin
- **3 February 2025:** Extended Call for Proposals (CfP) closes
- **5 February 2025:** Proposal Review process starts
- - **6 February 2025:** [Community Voting](/programme/voting/) starts
+ - **6 February 2025:** [Community Voting](/voting) starts
- **17 February 2025:** Community Voting and Review ends
- - **8 March 2025** [Financial Aid](/finaid/) Programme starts
+ - **8 March 2025** [Financial Aid](/finaid) Programme starts
- **11 March 2025:** [Sponsorship](/sponsor) Sign-up Starts
- **27 March 2025:** [Ticket sales](/tickets) open!
- **February/March 2025** Programme selection process
@@ -157,9 +157,9 @@ Share your ideas with the programme team at [programme@europython.eu](mailto:pro
- Sadly, at this point you cannot. The [Call for Proposals (CfP)](/programme/cfp) was open from **the 10th of January to the 3rd of February 2025** (including an extension of the original deadline).
+ Sadly, at this point you cannot. The [Call for Proposals (CfP)](/cfp) was open from **the 10th of January to the 3rd of February 2025** (including an extension of the original deadline).
-Need support with your submission? Explore our [Speaker Mentorship Programme](/programme/mentorship/) for guidance.
+Need support with your submission? Explore our [Speaker Mentorship Programme](/mentorship) for guidance.
@@ -169,7 +169,7 @@ Need support with your submission? Explore our [Speaker Mentorship Programme](/p
Once the CfP closes, all proposals go through **community voting and two rounds of review and refinement** to finalise the programme.
-Learn more about our selection process [here](/programme/selection/).
+Learn more about our selection process [here](/selection).
@@ -181,7 +181,7 @@ Learn more about our selection process [here](/programme/selection/).
Speakers needing travel support are encouraged to apply for [Financial Aid](/finaid).
-We actively support first-time speakers and welcome participation from under-represented groups in tech. Learn more through our [Speaker Mentorship Programme](/programme/mentorship).
+We actively support first-time speakers and welcome participation from under-represented groups in tech. Learn more through our [Speaker Mentorship Programme](/mentorship).
Got any questions? Reach out to us at [programme@europython.eu](mailto:programme@europython.eu).
diff --git a/src/content/pages/programme/cfp.mdx b/src/content/pages/programme/cfp.mdx
index ead285385..4e972d6a3 100644
--- a/src/content/pages/programme/cfp.mdx
+++ b/src/content/pages/programme/cfp.mdx
@@ -29,9 +29,9 @@ If you’re thinking, “but they don’t mean me”, then we especially mean **
* If you think you’re an imposter, join us — many of the EuroPython organisers feel this way.
* This is a volunteer-led community, so join us — you will be welcomed with friendship, support and compassion.
-To get some inspiration for talk ideas, check out the [tracks](https://ep2025.europython.eu/programme/tracks/) we're running this year. We also run a [mentorship program](https://ep2025.europython.eu/programme/mentorship/) to help people with their proposals: we'd love to hear from you if you want to sign up as a mentor or mentee.
+To get some inspiration for talk ideas, check out the [tracks](/tracks) we're running this year. We also run a [mentorship program](/mentorship) to help people with their proposals: we'd love to hear from you if you want to sign up as a mentor or mentee.
-Finally, you can find out more about the [selection process](https://ep2025.europython.eu/programme/selection/) all talks go through after submission.
+Finally, you can find out more about the [selection process](/selection) all talks go through after submission.
## How to write a proposal
diff --git a/src/content/pages/programme/voting.mdx b/src/content/pages/programme/voting.mdx
index f53d07067..b1e505099 100644
--- a/src/content/pages/programme/voting.mdx
+++ b/src/content/pages/programme/voting.mdx
@@ -49,7 +49,7 @@ one that has been used for any of the following:
- Go to the [Community Voting page](https://voting.europython.eu).
- Enter an eligible email address (see [Who can
- participate](/programme/voting/#who-can-participate) above).
+ participate](/voting/#who-can-participate) above).
- If the email is known to us, you will receive an email with a confirmation
link.
- Check your inbox (and spam) for the email with the confirmation link - click
diff --git a/src/data/links.json b/src/data/links.json
index 039db94c1..729514b12 100644
--- a/src/data/links.json
+++ b/src/data/links.json
@@ -13,31 +13,31 @@
},
{
"name": "Tracks",
- "path": "/programme/tracks"
+ "path": "/tracks"
},
{
"name": "Selection Process",
- "path": "/programme/selection"
+ "path": "/selection"
},
{
"name": "Community Voting",
- "path": "/programme/voting"
+ "path": "/voting"
},
{
"name": "Speaker Mentorship",
- "path": "/programme/mentorship"
+ "path": "/mentorship"
},
{
"name": "C API Summit",
- "path": "/programme/c-api-summit"
+ "path": "/c-api-summit"
},
{
"name": "WebAssembly Summit",
- "path": "/programme/wasm-summit"
+ "path": "/wasm-summit"
},
{
"name": "Rust Summit",
- "path": "/programme/rust-summit"
+ "path": "/rust-summit"
}
]
},
diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro
index 8fc02504e..9dc52fff9 100644
--- a/src/pages/[...slug].astro
+++ b/src/pages/[...slug].astro
@@ -17,12 +17,25 @@ import SponsorTiers from "../components/sponsor-tiers/sponsor-tiers.astro";
import Accordion from "../components/accordion/accordion.astro";
export async function getStaticPaths() {
- const posts = await getCollection("pages");
- return posts.map((post) => ({
- params: { slug: post.slug },
- props: post,
- }));
+ const pages = await getCollection("pages");
+
+ return pages.flatMap((page) => {
+ const slugParts = page.slug.split("/");
+ const shortSlug = slugParts[slugParts.length - 1];
+
+ const paths = [
+ { params: { slug: page.slug }, props: page }, // long slug
+ ];
+
+ // only add short slug if it's not the same
+ if (page.slug !== shortSlug) {
+ paths.push({ params: { slug: shortSlug }, props: page }); // short slug
+ }
+
+ return paths;
+ });
}
+
type Props = CollectionEntry<"pages">;
const post = Astro.props;