Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1a68af0eec | |||
| 275784745d | |||
| 4aef49cf2c | |||
| 8ad3abb6f3 | |||
| 1d75b60236 |
@@ -1,5 +1,5 @@
|
|||||||
# Stage 1: Builder
|
# Stage 1: Builder
|
||||||
FROM git.infra.mintel.me/mmintel/nextjs:latest AS base
|
FROM registry.infra.mintel.me/mintel/nextjs:v1.8.20 AS base
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Arguments for build-time configuration
|
# Arguments for build-time configuration
|
||||||
@@ -52,7 +52,7 @@ ENV UV_THREADPOOL_SIZE=3
|
|||||||
RUN pnpm build
|
RUN pnpm build
|
||||||
|
|
||||||
# Stage 2: Runner
|
# Stage 2: Runner
|
||||||
FROM git.infra.mintel.me/mmintel/runtime:latest AS runner
|
FROM registry.infra.mintel.me/mintel/runtime:v1.8.20 AS runner
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Create nextjs user and group (standardized in runtime image but ensuring local ownership)
|
# Create nextjs user and group (standardized in runtime image but ensuring local ownership)
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ Font.register({
|
|||||||
const C = {
|
const C = {
|
||||||
navy: '#001a4d',
|
navy: '#001a4d',
|
||||||
navyDeep: '#000d26',
|
navyDeep: '#000d26',
|
||||||
green: '#4da612',
|
accent: '#82ed20',
|
||||||
greenLight: '#e8f5d8',
|
|
||||||
white: '#FFFFFF',
|
white: '#FFFFFF',
|
||||||
offWhite: '#f8f9fa',
|
offWhite: '#f8f9fa',
|
||||||
gray100: '#f3f4f6',
|
gray100: '#f3f4f6',
|
||||||
@@ -26,7 +25,7 @@ const C = {
|
|||||||
gray900: '#111827',
|
gray900: '#111827',
|
||||||
};
|
};
|
||||||
|
|
||||||
const MARGIN = 56;
|
const MARGIN = 72;
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
page: {
|
page: {
|
||||||
@@ -34,7 +33,7 @@ const styles = StyleSheet.create({
|
|||||||
lineHeight: 1.5,
|
lineHeight: 1.5,
|
||||||
backgroundColor: C.white,
|
backgroundColor: C.white,
|
||||||
paddingTop: 0,
|
paddingTop: 0,
|
||||||
paddingBottom: 80,
|
paddingBottom: 100,
|
||||||
fontFamily: 'Helvetica',
|
fontFamily: 'Helvetica',
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -57,17 +56,17 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
|
|
||||||
logoText: {
|
logoText: {
|
||||||
fontSize: 22,
|
fontSize: 24,
|
||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
color: C.navyDeep,
|
color: C.navyDeep,
|
||||||
letterSpacing: 2,
|
letterSpacing: 1,
|
||||||
textTransform: 'uppercase',
|
textTransform: 'uppercase',
|
||||||
},
|
},
|
||||||
|
|
||||||
docTitle: {
|
docTitle: {
|
||||||
fontSize: 8,
|
fontSize: 10,
|
||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
color: C.green,
|
color: C.navy,
|
||||||
letterSpacing: 2,
|
letterSpacing: 2,
|
||||||
textTransform: 'uppercase',
|
textTransform: 'uppercase',
|
||||||
},
|
},
|
||||||
@@ -89,10 +88,10 @@ const styles = StyleSheet.create({
|
|||||||
|
|
||||||
accentBar: {
|
accentBar: {
|
||||||
width: 30,
|
width: 30,
|
||||||
height: 2,
|
height: 3,
|
||||||
backgroundColor: C.green,
|
backgroundColor: C.accent,
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
borderRadius: 1,
|
borderRadius: 1.5,
|
||||||
},
|
},
|
||||||
|
|
||||||
// Lexical Elements
|
// Lexical Elements
|
||||||
@@ -136,7 +135,7 @@ const styles = StyleSheet.create({
|
|||||||
listItemBullet: {
|
listItemBullet: {
|
||||||
width: 12,
|
width: 12,
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
color: C.green,
|
color: C.accent,
|
||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
},
|
},
|
||||||
listItemContent: {
|
listItemContent: {
|
||||||
@@ -146,7 +145,7 @@ const styles = StyleSheet.create({
|
|||||||
lineHeight: 1.7,
|
lineHeight: 1.7,
|
||||||
},
|
},
|
||||||
link: {
|
link: {
|
||||||
color: C.green,
|
color: C.accent,
|
||||||
textDecoration: 'none',
|
textDecoration: 'none',
|
||||||
},
|
},
|
||||||
textBold: {
|
textBold: {
|
||||||
@@ -161,31 +160,31 @@ const styles = StyleSheet.create({
|
|||||||
// Footer — matches brochure style
|
// Footer — matches brochure style
|
||||||
footer: {
|
footer: {
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
bottom: 28,
|
bottom: 40,
|
||||||
left: MARGIN,
|
left: MARGIN,
|
||||||
right: MARGIN,
|
right: MARGIN,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
justifyContent: 'space-between',
|
justifyContent: 'space-between',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
paddingTop: 12,
|
paddingTop: 24,
|
||||||
borderTopWidth: 2,
|
borderTopWidth: 1,
|
||||||
borderTopColor: C.green,
|
borderTopColor: C.gray200,
|
||||||
},
|
},
|
||||||
|
|
||||||
footerText: {
|
footerText: {
|
||||||
fontSize: 7,
|
fontSize: 8,
|
||||||
color: C.gray400,
|
color: C.gray400,
|
||||||
fontWeight: 400,
|
fontWeight: 500,
|
||||||
textTransform: 'uppercase',
|
textTransform: 'uppercase',
|
||||||
letterSpacing: 0.8,
|
letterSpacing: 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
footerBrand: {
|
footerBrand: {
|
||||||
fontSize: 9,
|
fontSize: 10,
|
||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
color: C.navyDeep,
|
color: C.navyDeep,
|
||||||
textTransform: 'uppercase',
|
textTransform: 'uppercase',
|
||||||
letterSpacing: 1.5,
|
letterSpacing: 1,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -443,10 +443,6 @@ const nextConfig = {
|
|||||||
source: '/de/kontakt',
|
source: '/de/kontakt',
|
||||||
destination: '/de/contact',
|
destination: '/de/contact',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
source: '/de/agbs',
|
|
||||||
destination: '/de/terms',
|
|
||||||
},
|
|
||||||
// Safety rewrites for English locale using German slugs (legacy or content errors)
|
// Safety rewrites for English locale using German slugs (legacy or content errors)
|
||||||
{
|
{
|
||||||
source: '/en/produkte',
|
source: '/en/produkte',
|
||||||
@@ -468,10 +464,6 @@ const nextConfig = {
|
|||||||
source: '/en/datenschutz',
|
source: '/en/datenschutz',
|
||||||
destination: '/en/privacy-policy',
|
destination: '/en/privacy-policy',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
source: '/en/agbs',
|
|
||||||
destination: '/en/terms',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
afterFiles: [],
|
afterFiles: [],
|
||||||
fallback: [],
|
fallback: [],
|
||||||
|
|||||||
22
src/migrations/20260312_120000_pages_redirect_fields.ts
Normal file
22
src/migrations/20260312_120000_pages_redirect_fields.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres';
|
||||||
|
|
||||||
|
export async function up({ db }: MigrateUpArgs): Promise<void> {
|
||||||
|
// redirect_permanent is a non-localized checkbox → stored on the main pages table
|
||||||
|
await db.execute(sql`
|
||||||
|
ALTER TABLE "pages" ADD COLUMN IF NOT EXISTS "redirect_permanent" boolean DEFAULT true;
|
||||||
|
`);
|
||||||
|
|
||||||
|
// redirect_url is a localized text field → stored on the pages_locales table
|
||||||
|
await db.execute(sql`
|
||||||
|
ALTER TABLE "pages_locales" ADD COLUMN IF NOT EXISTS "redirect_url" varchar;
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function down({ db }: MigrateDownArgs): Promise<void> {
|
||||||
|
await db.execute(sql`
|
||||||
|
ALTER TABLE "pages" DROP COLUMN IF EXISTS "redirect_permanent";
|
||||||
|
`);
|
||||||
|
await db.execute(sql`
|
||||||
|
ALTER TABLE "pages_locales" DROP COLUMN IF EXISTS "redirect_url";
|
||||||
|
`);
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ import * as migration_20260223_195151_remove_sku_unique from './20260223_195151_
|
|||||||
import * as migration_20260225_003500_add_pages_collection from './20260225_003500_add_pages_collection';
|
import * as migration_20260225_003500_add_pages_collection from './20260225_003500_add_pages_collection';
|
||||||
import * as migration_20260225_175000_native_localization from './20260225_175000_native_localization';
|
import * as migration_20260225_175000_native_localization from './20260225_175000_native_localization';
|
||||||
import * as migration_20260305_215000_products_featured_image from './20260305_215000_products_featured_image';
|
import * as migration_20260305_215000_products_featured_image from './20260305_215000_products_featured_image';
|
||||||
|
import * as migration_20260312_120000_pages_redirect_fields from './20260312_120000_pages_redirect_fields';
|
||||||
|
|
||||||
export const migrations = [
|
export const migrations = [
|
||||||
{
|
{
|
||||||
@@ -30,4 +31,9 @@ export const migrations = [
|
|||||||
down: migration_20260305_215000_products_featured_image.down,
|
down: migration_20260305_215000_products_featured_image.down,
|
||||||
name: '20260305_215000_products_featured_image',
|
name: '20260305_215000_products_featured_image',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
up: migration_20260312_120000_pages_redirect_fields.up,
|
||||||
|
down: migration_20260312_120000_pages_redirect_fields.down,
|
||||||
|
name: '20260312_120000_pages_redirect_fields',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user