Files
mb-grid-solutions.com/app/agb/page.tsx
Marc Mintel 44d4ac38b6
All checks were successful
Build & Deploy MB Grid Solutions / build-and-deploy (push) Successful in 1m42s
terms
2026-01-29 16:38:33 +01:00

99 lines
3.7 KiB
TypeScript

import { Download } from 'lucide-react';
import fs from 'fs';
import path from 'path';
export default function AGB() {
const filePath = path.join(process.cwd(), 'context/agbs.md');
const fileContent = fs.readFileSync(filePath, 'utf8');
// Split by double newlines to get major blocks (headers + their first paragraphs, or subsequent paragraphs)
const blocks = fileContent.split(/\n\s*\n/).map(b => b.trim()).filter(b => b !== '');
const title = blocks[0] || 'Liefer- und Zahlungsbedingungen';
const stand = blocks[1] || 'Stand Januar 2026';
const sections: { title: string; content: string[] }[] = [];
let currentSection: { title: string; content: string[] } | null = null;
// Skip title and stand
blocks.slice(2).forEach(block => {
const lines = block.split('\n').map(l => l.trim()).filter(l => l !== '');
if (lines.length === 0) return;
const firstLine = lines[0];
if (/^\d+\./.test(firstLine)) {
// New section
if (currentSection) sections.push(currentSection);
currentSection = { title: firstLine, content: [] };
// If there are more lines in this block, they form the first paragraph(s)
if (lines.length > 1) {
// Join subsequent lines as they might be part of the same paragraph
// In this MD, we'll assume lines in the same block belong together
// unless they are clearly separate paragraphs (but we already split by double newline)
const remainingText = lines.slice(1).join(' ');
if (remainingText) currentSection.content.push(remainingText);
}
} else if (currentSection) {
// Continuation of current section
const blockText = lines.join(' ');
if (blockText) currentSection.content.push(blockText);
}
});
if (currentSection) sections.push(currentSection);
// The last block is the footer
const footer = blocks[blocks.length - 1];
if (sections.length > 0) {
const lastSection = sections[sections.length - 1];
if (lastSection.content.includes(footer) || lastSection.title === footer) {
lastSection.content = lastSection.content.filter(c => c !== footer);
if (sections[sections.length - 1].title === footer) {
sections.pop();
}
}
}
return (
<div className="bg-slate-50 min-h-screen pt-28 pb-20">
<div className="container-custom">
<div className="max-w-4xl mx-auto bg-white p-8 md:p-12 rounded-[2.5rem] shadow-sm border border-slate-100">
<div className="flex flex-col md:flex-row md:items-center justify-between gap-6 mb-8">
<div>
<h1 className="text-4xl font-extrabold text-primary mb-2">{title}</h1>
<p className="text-slate-500 font-medium">{stand}</p>
</div>
<a
href="/assets/AGB MB Grid 1-2026.pdf"
download
className="btn-primary !py-3 !px-6 flex items-center gap-2"
>
<Download size={18} />
Als PDF herunterladen
</a>
</div>
<div className="space-y-8 text-slate-600 leading-relaxed">
{sections.map((section, index) => (
<div key={index}>
<h2 className="text-2xl font-bold text-primary mb-4">{section.title}</h2>
<div className="space-y-4">
{section.content.map((paragraph, pIndex) => (
<p key={pIndex}>{paragraph}</p>
))}
</div>
</div>
))}
<div className="pt-8 border-t border-slate-100">
<p className="font-bold text-primary">{footer}</p>
</div>
</div>
</div>
</div>
</div>
);
}