diff --git a/apps/web/__tests__/helpers.ts b/apps/web/__tests__/helpers.ts
index b1b89be32554f7f6fc567d1ca575c6229d0e5442..c1f8420a6c3132e78878b844ef7698f7e5112283 100644
--- a/apps/web/__tests__/helpers.ts
+++ b/apps/web/__tests__/helpers.ts
@@ -1,10 +1,10 @@
 import type { IncomingMessage, ServerResponse } from 'http'
 import { graphql } from 'msw'
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 export const graphqlLink = graphql.link('http://localhost:3000/api/graphql')
 
-export const createPageContextMock = ({ locale = 'en', ...overrides }: Partial<NextPageContext> = {}) => {
+export const createPageContextMock = ({ locale = 'en', ...overrides }: Partial<GetServerSidePropsContext> = {}) => {
   const writeMock = jest.fn()
   const setHeaderMock = jest.fn()
   // @ts-ignore
@@ -14,7 +14,7 @@ export const createPageContextMock = ({ locale = 'en', ...overrides }: Partial<N
     end: jest.fn(),
   }
 
-  const context = { res, locale, ...overrides } as NextPageContext
+  const context = { res, locale, ...overrides } as GetServerSidePropsContext
 
   return { context, writeMock, setHeaderMock }
 }
diff --git a/apps/web/__tests__/sitemap/insights.page.test.ts b/apps/web/__tests__/sitemap/insights.page.test.ts
index 04777d4ad6b9408d2b1c1b4667a47c949dc046c7..9ec60e44aea148f9631503f668d8ed09960bb96c 100644
--- a/apps/web/__tests__/sitemap/insights.page.test.ts
+++ b/apps/web/__tests__/sitemap/insights.page.test.ts
@@ -1,6 +1,6 @@
 import { HttpResponse } from 'msw'
 import { setupServer } from 'msw/node'
-import { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 import { createPageContextMock, graphqlLink } from '@holi/web/__tests__/helpers'
 import { getServerSideProps, insightsWithRelatedIdsQuery } from '@holi/web/pages/sitemap/insights/[page]'
@@ -226,7 +226,7 @@ describe('Insights sitemap page', () => {
   it('should render sitemap for paginated insights for german locale', async () => {
     const { context, writeMock } = createPageContextMock({ query: { page: '0' }, locale: 'de' })
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     const response = writeMock.mock.lastCall[0]
     expect(response).toMatchInlineSnapshot(`
@@ -405,7 +405,7 @@ describe('Insights sitemap page', () => {
   it('should set correct content type', async () => {
     const { context, setHeaderMock } = createPageContextMock({ query: { page: '0' } })
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     expect(setHeaderMock).toHaveBeenCalledWith('Content-Type', 'text/xml')
   })
diff --git a/apps/web/__tests__/sitemap/insights.xml.test.ts b/apps/web/__tests__/sitemap/insights.xml.test.ts
index 8747e9bd2008c3e6153ee09cdb5893f361bbad4f..d576ea531f9816558aa8aad6e8edc1321957f47a 100644
--- a/apps/web/__tests__/sitemap/insights.xml.test.ts
+++ b/apps/web/__tests__/sitemap/insights.xml.test.ts
@@ -1,6 +1,6 @@
 import { HttpResponse } from 'msw'
 import { setupServer } from 'msw/node'
-import { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 import { createPageContextMock, graphqlLink } from '@holi/web/__tests__/helpers'
 import { getServerSideProps, insightsCountQuery } from '@holi/web/pages/sitemap/insights.xml'
@@ -51,7 +51,7 @@ describe('Insights sitemap index', () => {
   it('should render sitemap index for insights for german locale', async () => {
     const { context, writeMock } = createPageContextMock({ locale: 'de' })
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     const response = writeMock.mock.lastCall[0]
     expect(response).toMatchInlineSnapshot(`
@@ -71,7 +71,7 @@ describe('Insights sitemap index', () => {
   it('should set correct content type', async () => {
     const { context, setHeaderMock } = createPageContextMock()
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     expect(setHeaderMock).toHaveBeenCalledWith('Content-Type', 'text/xml')
   })
diff --git a/apps/web/__tests__/sitemap/sitemap.xml.test.ts b/apps/web/__tests__/sitemap/sitemap.xml.test.ts
index 929ebf3901ae1a538c4a77d47b19e5484a72a6e5..0680e0036ab3f2d7479fc3ee5e96fdf657d98d4e 100644
--- a/apps/web/__tests__/sitemap/sitemap.xml.test.ts
+++ b/apps/web/__tests__/sitemap/sitemap.xml.test.ts
@@ -1,4 +1,4 @@
-import { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 import { createPageContextMock } from '@holi/web/__tests__/helpers'
 import { getServerSideProps } from '@holi/web/pages/sitemap.xml'
@@ -37,7 +37,7 @@ describe('Root sitemap', () => {
   it('should set correct content type', async () => {
     const { context, setHeaderMock } = createPageContextMock()
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     expect(setHeaderMock).toHaveBeenCalledWith('Content-Type', 'text/xml')
   })
diff --git a/apps/web/__tests__/sitemap/static.xml.test.ts b/apps/web/__tests__/sitemap/static.xml.test.ts
index 266e91404fa0c2de13310a60326c8a41673128f4..fd0177f35e18dc1b711f12105e71daf9003392ae 100644
--- a/apps/web/__tests__/sitemap/static.xml.test.ts
+++ b/apps/web/__tests__/sitemap/static.xml.test.ts
@@ -1,5 +1,5 @@
 import { setupServer } from 'msw/node'
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 import { createPageContextMock } from '@holi/web/__tests__/helpers'
 import { getServerSideProps } from '@holi/web/pages/sitemap/static.xml'
@@ -130,7 +130,7 @@ describe('Static sitemap index', () => {
   it('should render sitemap index with static urls for german locale', async () => {
     const { context, writeMock } = createPageContextMock({ locale: 'de' })
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     const response = writeMock.mock.lastCall[0]
     expect(response).toMatchInlineSnapshot(`
@@ -240,7 +240,7 @@ describe('Static sitemap index', () => {
   it('should set correct content type', async () => {
     const { context, setHeaderMock } = createPageContextMock()
 
-    await getServerSideProps(context as NextPageContext)
+    await getServerSideProps(context as GetServerSidePropsContext)
 
     expect(setHeaderMock).toHaveBeenCalledWith('Content-Type', 'text/xml')
   })
diff --git a/apps/web/helpers/__tests__/createServerSideProps.test.ts b/apps/web/helpers/__tests__/createServerSideProps.test.ts
index 0614ee2e22e9d1153d53727e6b82dd56477aa081..72ff38c9c287aac4c27654bb1c31d132ea3d7c7a 100644
--- a/apps/web/helpers/__tests__/createServerSideProps.test.ts
+++ b/apps/web/helpers/__tests__/createServerSideProps.test.ts
@@ -5,11 +5,11 @@ import type { WebApolloClientOptions } from '@holi/api/graphql/client'
 import {
   createServerSideProps,
   createServerSidePropsWithLoggedInUserGuard,
-  type PageContext,
 } from '@holi/web/helpers/createServerSideProps'
 import { HoliPageProps } from '@holi/web/types'
 import { createUUID } from '@holi/core/helpers'
 import { GUEST_MODE_COOKIE_NAME } from '@holi/core/screens/onboarding/helpers/guestModeStorage.web'
+import type { GetServerSidePropsContext } from 'next'
 
 const mockLoadTranslations = jest.fn()
 jest.mock('ni18n', () => ({
@@ -34,7 +34,7 @@ describe('createServerSideProps', () => {
     accept: 'application/json',
     'accept-encoding': 'gzip',
   }
-  const context = { req: { url: '', headers } } as unknown as PageContext
+  const context = { req: { url: '', headers } } as unknown as GetServerSidePropsContext
   const mockedTranslations = { __ni18n_server__: { resources: {}, ns: [] } }
   const mockPosthogBootstrapValues = {
     featureFlags: { DONATIONS: 'on' },
@@ -89,7 +89,10 @@ describe('createServerSideProps', () => {
   }
 
   type UserType = 'loggedIn' | 'incompleteAccount' | 'guest' | 'newUser' | 'bot'
-  const setupAndCreateContextForUser = (userContextType: UserType, requestOverrides = {}): PageContext => {
+  const setupAndCreateContextForUser = (
+    userContextType: UserType,
+    requestOverrides = {}
+  ): GetServerSidePropsContext => {
     const userData =
       userContextType === 'loggedIn'
         ? { id: 'test-user-id', identity: 'ada', firstName: 'Ada' }
@@ -102,7 +105,7 @@ describe('createServerSideProps', () => {
       })
     }
     const cookies = userContextType === 'guest' ? { [GUEST_MODE_COOKIE_NAME]: 'true' } : {}
-    const headers = userContextType === 'bot' ? { 'user-agent': 'bot' } : {}
+    const headers = userContextType === 'bot' ? { 'user-agent': 'Googlebot/2.1' } : {}
 
     return {
       ...context,
@@ -112,7 +115,7 @@ describe('createServerSideProps', () => {
         cookies,
         headers,
       },
-    } as unknown as PageContext
+    } as unknown as GetServerSidePropsContext
   }
 
   beforeEach(() => {
@@ -133,7 +136,7 @@ describe('createServerSideProps', () => {
     it('should add valid locale to page props', async () => {
       const props = await createServerSideProps({
         req: { url: '', headers: { 'accept-language': 'default' } },
-      } as unknown as PageContext)
+      } as unknown as GetServerSidePropsContext)
 
       expect(new HoliPageProps(props).props.locale).toEqual('en')
     })
@@ -278,7 +281,7 @@ describe('createServerSideProps', () => {
       host: 'localhost:3000',
       'x-forwarded-proto': 'http',
     }
-    const context = { req: { url: '', headers } } as unknown as PageContext
+    const context = { req: { url: '', headers } } as unknown as GetServerSidePropsContext
 
     const props = await createServerSideProps(context)
 
diff --git a/apps/web/helpers/createServerSideProps.ts b/apps/web/helpers/createServerSideProps.ts
index 05559bdf7339a0f302299096ac9411ab57c950b0..8b56bb253af11d984ee649ef3f79790a92d4a9c0 100644
--- a/apps/web/helpers/createServerSideProps.ts
+++ b/apps/web/helpers/createServerSideProps.ts
@@ -1,5 +1,5 @@
 import type { QueryOptions } from '@apollo/client'
-import type { GetServerSidePropsResult, NextPageContext } from 'next'
+import type { GetServerSidePropsContext, GetServerSidePropsResult } from 'next'
 
 import { initializeWebApolloClient } from '@holi/api/graphql/client'
 import { authenticatedUserV2Query } from '@holi/core/domain/shared/queries'
@@ -14,21 +14,20 @@ import { coerceUUIDParams } from '@holi/web/helpers/coerceUUIDParams'
 import { GUEST_MODE_COOKIE_NAME } from '@holi/core/screens/onboarding/helpers/guestModeStorage.web'
 import { isAccountComplete } from '@holi/core/screens/onboarding/helpers/isAccountComplete'
 import type { User } from '@holi/core/domain/shared/types'
+import type { NextApiRequestCookies } from 'next/dist/server/api-utils'
 
 interface SkippableQueryOptions extends QueryOptions {
   skip?: boolean
 }
 
-type Cookies = { [key: string]: string }
-type PageContextRequest = NextPageContext['req'] & { cookies: Cookies }
-export type PageContext = Omit<NextPageContext, 'req'> & { req: PageContextRequest }
+type PageContextRequest = GetServerSidePropsContext['req']
 
 // List of user agents substrings used by search engine crawlers and link preview bots (python-requests is used by Okuna)
 const botUserAgents = ['bot', 'crawl', 'slurp', 'spider', 'facebookexternalhit', 'whatsapp', 'python-requests']
 const isBot = (headers: PageContextRequest['headers'] = {}) =>
   botUserAgents.some((userAgent) => headers['user-agent']?.toLowerCase().includes(userAgent))
 
-const isGuestUser = (cookies: Cookies = {}) => !!cookies[GUEST_MODE_COOKIE_NAME]
+const isGuestUser = (cookies: NextApiRequestCookies = {}) => !!cookies[GUEST_MODE_COOKIE_NAME]
 
 const createUserPageProps = (user: User | undefined, req: PageContextRequest): UserPageProps => {
   if (user?.id) {
@@ -45,7 +44,7 @@ const createUserPageProps = (user: User | undefined, req: PageContextRequest): U
 }
 
 export const createServerSideProps = async (
-  { req, locale: nextJsLocale }: PageContext,
+  { req, locale: nextJsLocale }: GetServerSidePropsContext,
   queries: SkippableQueryOptions[] = [],
   customProps?: Partial<CustomProps>
 ): Promise<GetServerSidePropsResult<Partial<NextJSPageProps>>> => {
diff --git a/apps/web/pages/apps/challenges.tsx b/apps/web/pages/apps/challenges.tsx
index cf3c10d2a0685078b8e87ac58896c449cce34f9e..28dd09555a8bf05441e4c1797827bb370f577a3c 100644
--- a/apps/web/pages/apps/challenges.tsx
+++ b/apps/web/pages/apps/challenges.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { createExternalChallengesPath } from '@holi-apps/challenges/helpers/navigation'
@@ -13,7 +13,7 @@ const getSinglePath = (path: string | string[] | undefined) => {
   return path
 }
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { path } = context.query
   const singlePath = getSinglePath(path)
 
diff --git a/apps/web/pages/donations/[projectId].tsx b/apps/web/pages/donations/[projectId].tsx
index fe3a3928c5ec219c86a1e381c2754ea9e0e7b578..53925ffdda2e8e3e44ff06f619beb1904a2497a9 100644
--- a/apps/web/pages/donations/[projectId].tsx
+++ b/apps/web/pages/donations/[projectId].tsx
@@ -1,5 +1,5 @@
-import { NextPageContext } from 'next'
-import React, { ReactElement } from 'react'
+import type { GetServerSidePropsContext } from 'next'
+import React, { type ReactElement } from 'react'
 
 import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 import { AppLayout } from '@holi/web/layout/NavigationLayoutDonationsApp'
@@ -12,7 +12,7 @@ const DonationsAppProjectDetailPage: NextPageWithLayout = () => <DonationsAppPro
 
 DonationsAppProjectDetailPage.getLayout = (page: ReactElement) => <AppLayout>{page}</AppLayout>
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { projectId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/donations/index.tsx b/apps/web/pages/donations/index.tsx
index b1f6694946a4d460ace8fd52e4f26ad26d84a26a..b38b6998dfa1ff9387984e472861a2c3badb2943 100644
--- a/apps/web/pages/donations/index.tsx
+++ b/apps/web/pages/donations/index.tsx
@@ -1,5 +1,5 @@
-import { NextPageContext } from 'next'
-import React, { ReactElement } from 'react'
+import type { GetServerSidePropsContext } from 'next'
+import React, { type ReactElement } from 'react'
 
 import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 import { AppLayout } from '@holi/web/layout/NavigationLayoutDonationsApp'
@@ -16,7 +16,7 @@ export const paths = {
   de: '/spenden',
 }
 
-export const getServerSideProps = async (context: NextPageContext) =>
+export const getServerSideProps = async (context: GetServerSidePropsContext) =>
   createServerSideProps(context, [], {
     seoTitle: 'seo.h1.donations',
     urls: paths,
diff --git a/apps/web/pages/feed-posts/[idOrSlug]/index.tsx b/apps/web/pages/feed-posts/[idOrSlug]/index.tsx
index a857b7904f45a32b70e648793afdb7b562f32249..8850062b4c5cd8ad1a323242a60e7e05888641a2 100644
--- a/apps/web/pages/feed-posts/[idOrSlug]/index.tsx
+++ b/apps/web/pages/feed-posts/[idOrSlug]/index.tsx
@@ -1,10 +1,10 @@
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 import PostDetailsPage from '@holi/core/screens/individualPosts/PostDetailsPage'
 import { postQuery } from '@holi/core/screens/individualPosts/queries'
 import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { idOrSlug } = context.query
 
   const queries = [
diff --git a/apps/web/pages/index.tsx b/apps/web/pages/index.tsx
index 2c71c6a68b2508c7db5a162c1d86bcee75b2fc4d..7f0b49bc7b6e1f9282e183ad024d9de26ea8ff33 100644
--- a/apps/web/pages/index.tsx
+++ b/apps/web/pages/index.tsx
@@ -1,12 +1,12 @@
-import type { NextPage } from 'next'
+import type { GetServerSidePropsContext, NextPage } from 'next'
 import React from 'react'
 
-import { createServerSideProps, type PageContext } from '@holi/web/helpers/createServerSideProps'
+import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 import HomeFeed from '@holi/core/screens/homeFeed/HomeFeed'
 
 const HomeFeedPage: NextPage = () => <HomeFeed />
 
-export const getServerSideProps = async (context: PageContext) =>
+export const getServerSideProps = async (context: GetServerSidePropsContext) =>
   createServerSideProps(context, [], {
     seoTitle: 'seo.h1.home',
     redirectIfNewUser: '/onboarding',
diff --git a/apps/web/pages/insights/[insightId]/discussions/[discussionId]/index.tsx b/apps/web/pages/insights/[insightId]/discussions/[discussionId]/index.tsx
index 259cb3bd2ab91c1e2465013f2f852089c2abd2fd..d6f785856892caebdf4dce3d73e269c3009ffc60 100644
--- a/apps/web/pages/insights/[insightId]/discussions/[discussionId]/index.tsx
+++ b/apps/web/pages/insights/[insightId]/discussions/[discussionId]/index.tsx
@@ -1,4 +1,4 @@
-import { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import DiscussionDetailPage from '@holi/core/screens/insights/discussions/DiscussionDetailPage'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const DiscussionPage = () => <DiscussionDetailPage />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { discussionId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/insights/[insightId]/index.tsx b/apps/web/pages/insights/[insightId]/index.tsx
index a43688db98212b373833fc6803b0745b941af6ab..5aea9d17597d5e20d7201801b2cd60584233fd8b 100644
--- a/apps/web/pages/insights/[insightId]/index.tsx
+++ b/apps/web/pages/insights/[insightId]/index.tsx
@@ -1,4 +1,4 @@
-import type { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import InsightDetailPage from '@holi/core/screens/insights/InsightDetailPage'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const InsightPage: NextPage = () => <InsightDetailPage />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { insightId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/insights/[insightId]/initiatives/[initiativeId]/index.tsx b/apps/web/pages/insights/[insightId]/initiatives/[initiativeId]/index.tsx
index ff8c8fa73bb81f116441dbf5bd5aad05c23bfd18..b24fcec676cb21860805fcae886bf3143c17cee7 100644
--- a/apps/web/pages/insights/[insightId]/initiatives/[initiativeId]/index.tsx
+++ b/apps/web/pages/insights/[insightId]/initiatives/[initiativeId]/index.tsx
@@ -1,4 +1,4 @@
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import InitiativeDetailPage from '@holi/core/screens/insights/initiatives/InitiativeDetailPage'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const InitiativePage = () => <InitiativeDetailPage />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { insightId, initiativeId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/insights/[insightId]/quotes/[quoteId]/index.tsx b/apps/web/pages/insights/[insightId]/quotes/[quoteId]/index.tsx
index 25ced24436eb22e5f8185a98ecda3014fbac3d20..cd90fe6fab96e29e58e3eee7b278b48e35c95e19 100644
--- a/apps/web/pages/insights/[insightId]/quotes/[quoteId]/index.tsx
+++ b/apps/web/pages/insights/[insightId]/quotes/[quoteId]/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { insightWithQuoteById } from '@holi/core/screens/insights/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const InsightQuotePage: NextPage = () => <QuoteDetailPage />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { insightId, quoteId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/insights/[insightId]/recommendations/[recommendationId]/index.tsx b/apps/web/pages/insights/[insightId]/recommendations/[recommendationId]/index.tsx
index 7c553e1f442d309872f00ccdbf148b48621dc792..86da472fcc1ac1d0d54c309ced0f8911865f3ac6 100644
--- a/apps/web/pages/insights/[insightId]/recommendations/[recommendationId]/index.tsx
+++ b/apps/web/pages/insights/[insightId]/recommendations/[recommendationId]/index.tsx
@@ -1,4 +1,4 @@
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { insightWithRecommendation } from '@holi/core/screens/insights/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const RecommendationPage = () => <RecommendationDetailPage />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { insightId, recommendationId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/onboarding/index.tsx b/apps/web/pages/onboarding/index.tsx
index 9924a82f5a58b35ad5a2c31b5604ab6ab87fdd3b..9630c76d8eabb5250e37eea2cd7aa555262aebb7 100644
--- a/apps/web/pages/onboarding/index.tsx
+++ b/apps/web/pages/onboarding/index.tsx
@@ -1,4 +1,4 @@
-import type { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import Onboarding from '@holi/core/screens/onboarding/Onboarding'
@@ -6,7 +6,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const OnboardingPage: NextPage = () => <Onboarding />
 
-export const getServerSideProps = async (context: NextPageContext) =>
+export const getServerSideProps = async (context: GetServerSidePropsContext) =>
   createServerSideProps(context, [], {
     redirectIfLoggedIn: '/',
   })
diff --git a/apps/web/pages/posts/[postId]/index.tsx b/apps/web/pages/posts/[postId]/index.tsx
index 628824a3a76ff074b0bc8174e322bb5b2b4e0228..37dd2ad40f4034da70d57f0ab489c191ee3dba89 100644
--- a/apps/web/pages/posts/[postId]/index.tsx
+++ b/apps/web/pages/posts/[postId]/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import PostDetailPage from '@holi/core/screens/posts/PostDetailPage'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const PostPage: NextPage = () => <PostDetailPage />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { postId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/profile/[userId].tsx b/apps/web/pages/profile/[userId].tsx
index 2afad83ed2307f71e49c6d9874228d6f2c60b45c..a50a332d8bc248125aeaa1c9dee27129d6aedb35 100644
--- a/apps/web/pages/profile/[userId].tsx
+++ b/apps/web/pages/profile/[userId].tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { userByIdQuery } from '@holi/core/domain/shared/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const UserProfilePage: NextPage = () => <UserProfile />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { userId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/sitemap.xml.ts b/apps/web/pages/sitemap.xml.ts
index 861aed959de8a4d9965929ba25e3b8b320c4ed4b..321b6f80743b9ff8be30551c4ea92b602e44808a 100644
--- a/apps/web/pages/sitemap.xml.ts
+++ b/apps/web/pages/sitemap.xml.ts
@@ -1,4 +1,4 @@
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 
 import { locales } from '@holi/core/i18n/locales.cjs'
 import { getOrigin } from '@holi/web/helpers/getOrigin'
@@ -10,11 +10,11 @@ const SiteMap = () => {
 
 const sitemapIndexUrls = ['/sitemap/static', '/sitemap/insights']
 
-export const getServerSideProps = async ({ req, res }: NextPageContext) => {
+export const getServerSideProps = async ({ req, res }: GetServerSidePropsContext) => {
   const origin = getOrigin(req)
   const sitemap = generateSitemapIndex(
     origin,
-    locales.map((locale) => sitemapIndexUrls.map((url) => `/${locale}${url}`)).flat()
+    locales.flatMap((locale) => sitemapIndexUrls.map((url) => `/${locale}${url}`))
   )
 
   if (res) {
diff --git a/apps/web/pages/sitemap/insights.xml.ts b/apps/web/pages/sitemap/insights.xml.ts
index 82f8b55fe80553d7d8d4ca93bb3e7121482fe7e7..22b5631a7dae2dd243226d394c0fc4f410296b22 100644
--- a/apps/web/pages/sitemap/insights.xml.ts
+++ b/apps/web/pages/sitemap/insights.xml.ts
@@ -1,5 +1,5 @@
 import { gql } from '@apollo/client/core'
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 import pino from 'pino'
 
 import { initializeWebApolloClient } from '@holi/api/graphql/client'
@@ -29,7 +29,7 @@ const InsightsSiteMapIndex = () => {
   // Content is written to response in getServerSideProps
 }
 
-export const getServerSideProps = async ({ req, res, locale }: NextPageContext) => {
+export const getServerSideProps = async ({ req, res, locale }: GetServerSidePropsContext) => {
   const prefix = getUrlPrefix(req, locale)
   const client = initializeWebApolloClient({ locale })
   const totalInsightsCount = await client
diff --git a/apps/web/pages/sitemap/insights/[page].ts b/apps/web/pages/sitemap/insights/[page].ts
index ffccabf17575b9b2fc63267464d5aff6eb8aa8f6..7dce2fa26300a89b1dc0895177fb8e5972b7cb37 100644
--- a/apps/web/pages/sitemap/insights/[page].ts
+++ b/apps/web/pages/sitemap/insights/[page].ts
@@ -1,9 +1,9 @@
 import { gql } from '@apollo/client/core'
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 import pino from 'pino'
 
 import { initializeWebApolloClient } from '@holi/api/graphql/client'
-import { Insight } from '@holi/api/graphql/graphql-codegen'
+import type { Insight } from '@holi/api/graphql/graphql-codegen'
 import { generateSitemapUrlSet, getUrlPrefix } from '@holi/web/helpers/sitemap'
 import { PAGE_SIZE } from '@holi/web/pages/sitemap/insights.xml'
 
@@ -51,16 +51,16 @@ const asNum = (param: string | string[] | undefined) => {
     return 0
   }
   if (Array.isArray(param)) {
-    return param.length ? parseInt(param[0]) : 0
+    return param.length ? Number.parseInt(param[0]) : 0
   }
-  return parseInt(param)
+  return Number.parseInt(param)
 }
 
 const InsightSiteMap = () => {
   // Content is written to response in getServerSideProps
 }
 
-export const getServerSideProps = async ({ req, res, query, locale }: NextPageContext) => {
+export const getServerSideProps = async ({ req, res, query, locale }: GetServerSidePropsContext) => {
   const { page } = query
   const prefix = getUrlPrefix(req, locale)
   const client = initializeWebApolloClient({ locale })
@@ -77,7 +77,7 @@ export const getServerSideProps = async ({ req, res, query, locale }: NextPageCo
 
   const sitemap = generateSitemapUrlSet(
     prefix,
-    insights.map((insight: Insight) => createEntriesForInsight(insight)).flat()
+    insights.flatMap((insight: Insight) => createEntriesForInsight(insight))
   )
 
   if (res) {
diff --git a/apps/web/pages/sitemap/static.xml.ts b/apps/web/pages/sitemap/static.xml.ts
index ffeac505f88f7466db56ea39a3f0f1f6515c1c62..7469f316f6bb7384d0fbf8e5d9149da169befed3 100644
--- a/apps/web/pages/sitemap/static.xml.ts
+++ b/apps/web/pages/sitemap/static.xml.ts
@@ -1,4 +1,4 @@
-import type { NextPageContext } from 'next'
+import type { GetServerSidePropsContext } from 'next'
 import { defaultLocale } from '@holi/core/i18n/locales.cjs'
 import { generateSitemapUrlSet, getUrlPrefix } from '@holi/web/helpers/sitemap'
 import { paths as donationPaths } from '@holi/web/pages/donations'
@@ -33,7 +33,7 @@ const StaticSitemapIndex = () => {
   // Content is written to response in getServerSideProps
 }
 
-export const getServerSideProps = async ({ req, res, locale }: NextPageContext) => {
+export const getServerSideProps = async ({ req, res, locale }: GetServerSidePropsContext) => {
   const prefix = getUrlPrefix(req, locale)
   const sitemap = generateSitemapUrlSet(prefix, createSitemapUrls(locale))
 
diff --git a/apps/web/pages/spaces/[spaceIdOrName]/appointments/[idOrSlug]/index.tsx b/apps/web/pages/spaces/[spaceIdOrName]/appointments/[idOrSlug]/index.tsx
index a7c4f6539f43c0c86237449d403ca325c6247a1c..52beeb01fd18e0e90732b1c4bb4a9c435fd4d887 100644
--- a/apps/web/pages/spaces/[spaceIdOrName]/appointments/[idOrSlug]/index.tsx
+++ b/apps/web/pages/spaces/[spaceIdOrName]/appointments/[idOrSlug]/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { appointmentByIdOrSlugQuery } from '@holi/core/screens/appointments/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const AppointmentDetailsPage: NextPage = () => <AppointmentDetails />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { idOrSlug } = context.query
 
   const queries = [
diff --git a/apps/web/pages/spaces/[spaceIdOrName]/appointments/index.tsx b/apps/web/pages/spaces/[spaceIdOrName]/appointments/index.tsx
index a4e60a75ef1b38f6a1bdae77b1c9c6d53598f6c6..5358c1dea839dea08c02cca0d0e1243ac983909f 100644
--- a/apps/web/pages/spaces/[spaceIdOrName]/appointments/index.tsx
+++ b/apps/web/pages/spaces/[spaceIdOrName]/appointments/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import SpaceAppointments from '@holi/core/screens/spaces/appointments/SpaceAppointments'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const SpaceAppointmentsPage: NextPage = () => <SpaceAppointments />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { spaceIdOrName } = context.query
 
   const queries = [
diff --git a/apps/web/pages/spaces/[spaceIdOrName]/index.tsx b/apps/web/pages/spaces/[spaceIdOrName]/index.tsx
index 1148b50d6120e688bf876932f7e41c1d597d0924..01552aa47b415b1cf642c83406251dde68c9a0a5 100644
--- a/apps/web/pages/spaces/[spaceIdOrName]/index.tsx
+++ b/apps/web/pages/spaces/[spaceIdOrName]/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import SpaceDetails from '@holi/core/screens/spaces/details/SpaceDetails'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const SpaceDetailsPage: NextPage = () => <SpaceDetails />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { spaceIdOrName } = context.query
 
   const queries = [
diff --git a/apps/web/pages/spaces/[spaceIdOrName]/relatedSpaces.tsx b/apps/web/pages/spaces/[spaceIdOrName]/relatedSpaces.tsx
index d84b8458461c2a9d4ceb48a3a8c3fe38ccc035b6..8ee5a472a996a3a44a46747203fb2ab52a5af35c 100644
--- a/apps/web/pages/spaces/[spaceIdOrName]/relatedSpaces.tsx
+++ b/apps/web/pages/spaces/[spaceIdOrName]/relatedSpaces.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { spaceRelatedSpacesQuery } from '@holi/core/screens/spaces/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const RelatedSpacesPage: NextPage = () => <RelatedSpaces />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { spaceIdOrName } = context.query
 
   const queries = [
diff --git a/apps/web/pages/spaces/[spaceIdOrName]/tasks/[taskId]/index.tsx b/apps/web/pages/spaces/[spaceIdOrName]/tasks/[taskId]/index.tsx
index 7e4db7d71152dc87f689f154a523761ecc048494..ddaaec328165694e47325d40effbf18305cc3c0e 100644
--- a/apps/web/pages/spaces/[spaceIdOrName]/tasks/[taskId]/index.tsx
+++ b/apps/web/pages/spaces/[spaceIdOrName]/tasks/[taskId]/index.tsx
@@ -1,4 +1,4 @@
-import type { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { taskByIdQuery } from '@holi/core/screens/spaces/details/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const TaskDetailsPage: NextPage = () => <TaskDetails />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { spaceIdOrName, taskId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/spaces/[spaceIdOrName]/tasks/index.tsx b/apps/web/pages/spaces/[spaceIdOrName]/tasks/index.tsx
index cbe6bc5b4e9384151d95a5d4ffb1d97c885b98a6..9d0268affc8e1bd8086df4e6e70a13a317935198 100644
--- a/apps/web/pages/spaces/[spaceIdOrName]/tasks/index.tsx
+++ b/apps/web/pages/spaces/[spaceIdOrName]/tasks/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import { spaceByIdQuery } from '@holi/core/screens/spaces/queries'
@@ -7,7 +7,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const SpaceTasksPage: NextPage = () => <SpaceTasks />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { spaceIdOrName } = context.query
 
   const queries = [
diff --git a/apps/web/pages/spaces/filter.tsx b/apps/web/pages/spaces/filter.tsx
index 8f03fa959acd20cb952d9cf4db98bb058fe3d1e4..1cccc3a7bb6595d651f9538193ff1507103018fe 100644
--- a/apps/web/pages/spaces/filter.tsx
+++ b/apps/web/pages/spaces/filter.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { GetServerSidePropsContext, NextPage } from 'next'
 import React from 'react'
 
 import FilteredSpaces from '@holi/core/screens/spaces/filter/FilteredSpaces'
@@ -6,7 +6,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const FilteredSpacesPage: NextPage = () => <FilteredSpaces />
 
-export const getServerSideProps = async (context: NextPageContext) =>
+export const getServerSideProps = async (context: GetServerSidePropsContext) =>
   createServerSideProps(context, [], { seoTitle: 'seo.h1.spaces' })
 
 export default FilteredSpacesPage
diff --git a/apps/web/pages/spaces/index.tsx b/apps/web/pages/spaces/index.tsx
index f83b9c5d3e7fe7f330b39c47f43f2b74a44f606a..333777a312ea9e9aac70007a2ad99155553534ea 100644
--- a/apps/web/pages/spaces/index.tsx
+++ b/apps/web/pages/spaces/index.tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import Spaces from '@holi/core/screens/spaces/discover/Spaces'
@@ -6,7 +6,7 @@ import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 
 const SpacesPage: NextPage = () => <Spaces />
 
-export const getServerSideProps = async (context: NextPageContext) =>
+export const getServerSideProps = async (context: GetServerSidePropsContext) =>
   createServerSideProps(context, [], { seoTitle: 'seo.h1.spaces' })
 
 export default SpacesPage
diff --git a/apps/web/pages/video-call/[roomName].tsx b/apps/web/pages/video-call/[roomName].tsx
index 9bd0065b31f89c6a9f78e54190467aac31d35c12..440608cbc05edd07b0c409e8e4e0c91430a51116 100644
--- a/apps/web/pages/video-call/[roomName].tsx
+++ b/apps/web/pages/video-call/[roomName].tsx
@@ -1,4 +1,4 @@
-import { NextPage, NextPageContext } from 'next'
+import type { NextPage, GetServerSidePropsContext } from 'next'
 import React from 'react'
 
 import VideoCall from '@holi/core/screens/videoCall/VideoCall'
@@ -6,7 +6,7 @@ import { getOrigin } from '@holi/web/helpers/getOrigin'
 
 const VideoCallPage: NextPage = () => <VideoCall />
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { roomName } = context.query
   const origin = getOrigin(context.req)
 
diff --git a/apps/web/pages/volunteering/[engagementId].tsx b/apps/web/pages/volunteering/[engagementId].tsx
index 18754eb72d9066f73b9a89888440121c1a451762..1f64afc826f6b876302d93b44eb5cb181fcc4995 100644
--- a/apps/web/pages/volunteering/[engagementId].tsx
+++ b/apps/web/pages/volunteering/[engagementId].tsx
@@ -1,5 +1,5 @@
-import type { NextPageContext } from 'next'
-import React, { ReactElement } from 'react'
+import type { GetServerSidePropsContext } from 'next'
+import React, { type ReactElement } from 'react'
 
 import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 import { AppLayout } from '@holi/web/layout/NavigationLayoutVolunteeringApp'
@@ -12,7 +12,7 @@ const VolunteeringEngagementDetailPage: NextPageWithLayout = () => <Volunteering
 
 VolunteeringEngagementDetailPage.getLayout = (page: ReactElement) => <AppLayout>{page}</AppLayout>
 
-export const getServerSideProps = async (context: NextPageContext) => {
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
   const { engagementId } = context.query
 
   const queries = [
diff --git a/apps/web/pages/volunteering/index.tsx b/apps/web/pages/volunteering/index.tsx
index 0239b096a51af89e24a79e0bc799124826230dbd..148e2ecdfc92fa49877d26ebc8ec799dd2d36323 100644
--- a/apps/web/pages/volunteering/index.tsx
+++ b/apps/web/pages/volunteering/index.tsx
@@ -1,5 +1,5 @@
-import { NextPageContext } from 'next'
-import React, { ReactElement } from 'react'
+import type { GetServerSidePropsContext } from 'next'
+import React, { type ReactElement } from 'react'
 
 import { createServerSideProps } from '@holi/web/helpers/createServerSideProps'
 import { AppLayout } from '@holi/web/layout/NavigationLayoutVolunteeringApp'
@@ -16,7 +16,7 @@ export const paths = {
   de: '/ehrenamt',
 }
 
-export const getServerSideProps = async (context: NextPageContext) =>
+export const getServerSideProps = async (context: GetServerSidePropsContext) =>
   createServerSideProps(context, [], {
     seoTitle: 'seo.h1.volunteering',
     urls: paths,