From 3292afb9132943d3673e32173147190a248d7a85 Mon Sep 17 00:00:00 2001 From: Schalli Date: Tue, 21 Jul 2026 10:43:28 +0200 Subject: [PATCH] feat(10-02): add tender-radar module-loader whitelist entry + placeholder page - MODULE_REGISTRY['tender-radar'] entry (mirrors cert-manager/dkv-fleet shape) - minimal client-component placeholder page proving activation -> page-load path - hardcoded German string is an intentional MVP stub; full i18n is CONFIG-03 (Phase 14) --- .../(portal)/modules/tender-radar/page.tsx | 31 +++++++++++++++++++ apps/web/src/lib/module-loader.ts | 6 ++++ 2 files changed, 37 insertions(+) create mode 100644 apps/web/src/app/(portal)/modules/tender-radar/page.tsx diff --git a/apps/web/src/app/(portal)/modules/tender-radar/page.tsx b/apps/web/src/app/(portal)/modules/tender-radar/page.tsx new file mode 100644 index 0000000..2ca8507 --- /dev/null +++ b/apps/web/src/app/(portal)/modules/tender-radar/page.tsx @@ -0,0 +1,31 @@ +'use client'; + +/** + * Ausschreibungs-Radar module page within the portal. + * + * MVP stub (Plan 10-02, CONFIG-01): proves the activation -> page-load + * path (marketplace seed -> module-loader whitelist -> lazy-loaded + * page). Real results UI (search, filters, tender list) lands in + * Phase 11. + * + * Intentional hardcoded German string: full i18n (next-intl message + * keys) is CONFIG-03, planned for Phase 14. Do not add a translation + * key for this stub yet — replace this whole component in Phase 11. + */ +export default function TenderRadarPage() { + return ( +
+
+

+ Ausschreibungs-Radar +

+
+ +
+

+ Ausschreibungen werden erfasst. +

+
+
+ ); +} diff --git a/apps/web/src/lib/module-loader.ts b/apps/web/src/lib/module-loader.ts index 2ec18b8..72c409a 100644 --- a/apps/web/src/lib/module-loader.ts +++ b/apps/web/src/lib/module-loader.ts @@ -47,6 +47,12 @@ export const MODULE_REGISTRY: Record = { { ssr: false }, ), }, + 'tender-radar': { + component: dynamic( + () => import('@/app/(portal)/modules/tender-radar/page'), + { ssr: false }, + ), + }, }; /**