Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new /impressum route under the localized app router segment, intended to display locale-specific legal information and provide localized SEO metadata.
Changes:
- Added
src/app/[locale]/impressum/page.tsximplementing the Impressum page for DE/EN. - Implemented
generateMetadatafor the new page, including Open Graph metadata. - Rendered DE/EN Impressum content (currently via an HTML string +
dangerouslySetInnerHTML).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| export async function generateMetadata({ params }: ImpressumPageProps): Promise<Metadata> { | ||
| const { locale } = await params | ||
|
|
||
| const title = locale === 'de' ? 'Impressum - Open Elements' : 'Impressum - Open Elements' | ||
| const description = locale === 'de' ? 'Impressum' : 'Impressum' | ||
|
|
There was a problem hiding this comment.
generateMetadata uses locale conditionals, but both branches return identical title and description, so metadata isn’t actually localized (beyond openGraph.locale). This also makes the meta description extremely short, which is inconsistent with the repo’s SEO expectations (see tests/e2e/seo.spec.ts where descriptions are expected to be meaningful). Consider providing distinct EN/DE title/description strings (and a longer description) or removing the unnecessary conditional if localization isn’t intended here.
| <h1 className="text-center h1">Impressum</h1> | ||
| <Image |
There was a problem hiding this comment.
The page heading is hard-coded to "Impressum" for all locales. For the English locale the rest of the content is in English, so the H1 should likely be localized as well (e.g., "Imprint" / "Legal notice") to avoid a mixed-language page.
| <div | ||
| className="text-blue prose prose-a:text-purple-700 prose-code:bg-yellow prose-blockquote:border-l-0 prose-blockquote:bg-green-100 prose-blockquote:not-italic prose-blockquote:px-8 prose-blockquote:py-3 prose-blockquote:rounded-3xl relative" | ||
| style={{ maxWidth: '100%' }} | ||
| dangerouslySetInnerHTML={{ __html: contentHtml }} | ||
| /> |
There was a problem hiding this comment.
dangerouslySetInnerHTML is being used to render static, hard-coded content. Since this isn’t coming from markdown or a CMS, rendering as JSX (or at least storing the content as React nodes) would be safer and easier to maintain, and avoids normalizing dangerouslySetInnerHTML usage for simple content.
| export async function generateMetadata({ params }: ImpressumPageProps): Promise<Metadata> { | ||
| const { locale } = await params | ||
|
|
||
| const title = locale === 'de' ? 'Impressum - Open Elements' : 'Impressum - Open Elements' | ||
| const description = locale === 'de' ? 'Impressum' : 'Impressum' | ||
|
|
||
| return { | ||
| title, | ||
| description, | ||
| openGraph: { | ||
| type: 'website', | ||
| title, | ||
| description, | ||
| siteName: 'Open Elements', | ||
| locale: locale === 'de' ? 'de_DE' : 'en_US', | ||
| }, | ||
| } | ||
| } |
There was a problem hiding this comment.
There’s Playwright coverage for SEO across a fixed set of routes (tests/e2e/seo.spec.ts), but the new impressum route isn’t included, so regressions in title/description/OpenGraph tags won’t be caught. Consider extending the existing SEO (and/or navigation) E2E tests to include /impressum for both locales.
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…ript loading Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…lean up layout files Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…ocale Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Jessie Ssebuliba <jessiessebuliba@gmail.com> Signed-off-by: Daniel Ntege <danientege785@gmail.com>
- Added green-arrow.svg with a detailed arrow design and gradients. - Introduced plane-sm.svg featuring a stylized plane with dashed lines. - Created plane.svg showcasing a larger plane illustration with gradient strokes. - Added round11.svg containing two circles with varying opacities. - Introduced sky-round.svg featuring a large circle with a light blue fill. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…logs - Created German and English markdown files for updates v0.1.7 and v0.1.8. - Implemented new components for displaying updates, including collapsible sections and truncated views. - Added functionality to parse markdown files and extract update information. - Introduced a new data structure for updates, including contributors and assets. - Enhanced the updates page with metadata generation and localization support. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Jessie Ssebuliba <jessiessebuliba@gmail.com> Signed-off-by: Daniel Ntege <danientege785@gmail.com>
- Added green-arrow.svg with a detailed arrow design and gradients. - Introduced plane-sm.svg featuring a stylized plane with dashed lines. - Created plane.svg showcasing a larger plane illustration with gradient strokes. - Added round11.svg containing two circles with varying opacities. - Introduced sky-round.svg featuring a large circle with a light blue fill. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…logs - Created German and English markdown files for updates v0.1.7 and v0.1.8. - Implemented new components for displaying updates, including collapsible sections and truncated views. - Added functionality to parse markdown files and extract update information. - Introduced a new data structure for updates, including contributors and assets. - Enhanced the updates page with metadata generation and localization support. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
fcf8566 to
70f5b02
Compare
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…ript loading Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…lean up layout files Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…ocale Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Jessie Ssebuliba <jessiessebuliba@gmail.com> Signed-off-by: Daniel Ntege <danientege785@gmail.com>
- Added green-arrow.svg with a detailed arrow design and gradients. - Introduced plane-sm.svg featuring a stylized plane with dashed lines. - Created plane.svg showcasing a larger plane illustration with gradient strokes. - Added round11.svg containing two circles with varying opacities. - Introduced sky-round.svg featuring a large circle with a light blue fill. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…logs - Created German and English markdown files for updates v0.1.7 and v0.1.8. - Implemented new components for displaying updates, including collapsible sections and truncated views. - Added functionality to parse markdown files and extract update information. - Introduced a new data structure for updates, including contributors and assets. - Enhanced the updates page with metadata generation and localization support. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Jessie Ssebuliba <jessiessebuliba@gmail.com> Signed-off-by: Daniel Ntege <danientege785@gmail.com>
- Added green-arrow.svg with a detailed arrow design and gradients. - Introduced plane-sm.svg featuring a stylized plane with dashed lines. - Created plane.svg showcasing a larger plane illustration with gradient strokes. - Added round11.svg containing two circles with varying opacities. - Introduced sky-round.svg featuring a large circle with a light blue fill. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
…logs - Created German and English markdown files for updates v0.1.7 and v0.1.8. - Implemented new components for displaying updates, including collapsible sections and truncated views. - Added functionality to parse markdown files and extract update information. - Introduced a new data structure for updates, including contributors and assets. - Enhanced the updates page with metadata generation and localization support. Signed-off-by: Daniel Ntege <danientege785@gmail.com>
Signed-off-by: Daniel Ntege <danientege785@gmail.com>
This pull request adds a new localized Impressum page to the application, supporting both German and English content. The page dynamically generates metadata based on the user's locale and renders appropriate legal information for each language.
New Impressum page implementation:
ImpressumPagecomponent insrc/app/[locale]/impressum/page.tsxthat displays legal information in either German or English, depending on the locale. (src/app/[locale]/impressum/page.tsxR1-R92)generateMetadatafunction to provide localized metadata (title, description, OpenGraph tags) for SEO and social sharing. (src/app/[locale]/impressum/page.tsxR1-R92)Localization and content rendering:
next/imagecomponent to display a localized underline illustration below the page heading. (src/app/[locale]/impressum/page.tsxR1-R92)