d6f3dda9e5f3773f36219f1a4355867ee4750165
CI Pipeline with Test Management / đ§Ș Run Tests & Generate Reports (push) Waiting to run
CI Pipeline with Test Management / đł Docker Integration Tests (push) Blocked by required conditions
CI Pipeline with Test Management / đïž Build Docker Image (push) Blocked by required conditions
CI Pipeline with Test Management / đ Generate Test Summary (push) Blocked by required conditions
Test Reporting & Gherkin Analysis / đ§Ș Run Tests & Generate Reports (push) Waiting to run
Test Reporting & Gherkin Analysis / đ Analyze Test Coverage (push) Blocked by required conditions
Test Reporting & Gherkin Analysis / đ Sync with Linear (push) Blocked by required conditions
Test Reporting & Gherkin Analysis / ⥠Performance Monitoring (push) Blocked by required conditions
Replaces the JSON content system with Payload's Local API across every
frontend page, and introduces symmetric locale-prefixed routing
(/hu/..., /en/...) with per-locale translated slugs â supersedes the
earlier "hu unprefixed" decision (see chat 2026-09-10).
Routing structure:
- src/app/(frontend)/layout.tsx: now a minimal shell (html/body, theme
script, ThemeProvider) â no longer locale-aware.
- src/app/(frontend)/page.tsx: redirects bare "/" to the default
locale (/hu).
- src/app/(frontend)/not-found.tsx: explicit 404 for the (frontend)
group â without it, Next's built-in fallback collided with the
(payload) group's own root and reproduced the "double html / script
tag" symptom from MITHOME-87, but only on notFound() paths. Verified
fixed in both dev and a real production (standalone) server; the
remaining "script tag" console warning on invalid routes turned out
to be Turbopack dev-mode-only noise (zero console errors in
production) â confirmed by building and running .next/standalone
directly.
- src/app/(frontend)/[locale]/layout.tsx: validates the locale segment
(generateStaticParams hu/en, notFound() otherwise), fetches Common +
Home via Payload, renders Header/Footer/staging-banner.
- src/app/(frontend)/[locale]/page.tsx: home, fetches Home global +
Partners collection.
- src/app/(frontend)/[locale]/[slug]/page.tsx: catch-all for about/
services/contact/privacy/terms â resolves slug -> PageKey via
src/lib/i18n.ts's PAGE_SLUGS map (generateStaticParams pre-renders
all 10 localeĂslug combinations), generateMetadata per page.
New lib layer:
- src/lib/i18n.ts: Locale/PageKey types, PAGE_SLUGS (translated slugs
per locale), localePath()/resolvePageKey()/switchLocalePath()
helpers (the last one already shaped for MITHOME-115).
- src/lib/payload-content.ts: Local API getters that also unwrap
Payload's `{ value: string }[]` array-field shape back into plain
string[] (see src/globals/fields/stringArray.ts) â keeps the page
JSX consuming the exact shape the old content/types.ts had, so the
migration is a data-source swap, not a markup rewrite.
Presentational split: page bodies moved to src/components/views/
(HomeView, AboutView, ServicesView, ContactView, LegalPageView â the
last one shared by both legal pages, identical shape) as prop-driven
components; the app-router page.tsx files became thin server-side
fetch + render wrappers. Header/Footer converted from importing
content directly to accepting nav/locale/content props, since they're
'use client' and can't call the Payload Local API themselves â
config/site.ts's navigation arrays became getMainNavigation(locale)/
getFooterNavigation(locale)/getFooterLegalLinks(locale) functions.
Two real, pre-existing bugs fixed along the way (not introduced by
this migration):
- Services and Contact pages' "Webmail belépés" links used the
primary CTA's href (/kapcsolat) with target="_blank" instead of the
actual webmail URL (home.hero.cta.secondary.href) â now correct.
- The GDPR checkbox link pointed to "/adatkezelesi-tajekoztato", which
never matched the real privacy page route under any past URL
scheme. contact.json's gdpr.label now carries a {privacyHref}
placeholder that ContactView replaces with the locale-correct path
â also fixes the adatvedelem page's own <title> tag, which
previously read "AdatvĂ©delmi TĂĄjĂ©koztatĂł | SzolgĂĄltatĂĄs jellemzĆk:"
(a copy-paste bug using common.labels.features instead of the site
name).
Known, accepted limitation: the outer shell layout hardcodes
<html lang="hu"> because it sits above the [locale] segment and can't
read the param â every [locale]/[slug] page's own generateMetadata is
locale-correct, but the initial lang attribute isn't. Documented as a
MITHOME-116 (SEO/hreflang) follow-up rather than restructured now.
Verified end to end in a real browser: /hu matches the
https://stage.mozdit.hu visual baseline (MITHOME-117) exactly; /en
renders with English nav/metadata (content body still Hungarian-only,
as expected â MITHOME-111/113 not done yet); /hu/kapcsolat's GDPR link
resolves to /hu/adatvedelem; dark mode still works; invalid locale
(/fr/about) and invalid slug (/hu/nemletezo-oldal) both 404 correctly;
bare "/" redirects to /hu. build/lint/tsc/test (58 passed) all clean,
including a clean production standalone-server run.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
mozdIT Bt. â Weboldal fejlesztĂ©s (websitedev)
Modern Next.js weboldal a mozdIT Bt. szĂĄmĂĄra â webtĂĄrhely, email- Ă©s DNS-szolgĂĄltatĂĄs, magyar IT vĂĄllalkozĂĄs.
Stack
- Frontend: Next.js 15 (Turbopack), React 19, TypeScript, Tailwind CSS 4
- Tartalom: JSON-alapĂș, sĂ©ma-validĂĄlt content rendszer (
proto/src/content/) - CMS: sajĂĄt, dependency-mentes
content-editor.js(böngĂ©szĆs szerkesztĆ) - Backend: Next.js API routes, MongoDB
- TesztelĂ©s: Jest, React Testing Library, Playwright (smoke), valĂłdi szervert indĂtĂł CMS-tesztek
- Deploy: natĂv Docker Compose (
deploy.sh) + Gitea Actions nĂ©lkĂŒl, lokĂĄlisan vezĂ©relt - Monitoring: Winston + Loki, plusz
scripts/security-scan.sh(ntfy riasztĂĄssal)
Gyors indĂtĂĄs
# FejlesztĆi szerver
cd proto && npm run dev
# Docker fejlesztĆi környezet
docker-compose -f docker-compose.dev.yml up -d
# Teljes pre-deploy tesztkészlet
scripts/pre-deploy-tests.sh
Feladatkezelés (Plane)
- Projekt: MITHOME (workspace:
developments) - TODO.md: helyi tĂŒkör, a Plane az elsĆdleges forrĂĄs
- Szinkron:
node plane-sync.js(Plane â TODO.md) - Ticket-azonosĂtĂłk:
MITHOME-XX
Deploy
./scripts/deploy_to_stage_on_local.sh # staging: teljes tesztkészlet + push + deploy + smoke
./deploy.sh production # Ă©les (szerveren, staging ellenĆrzĂ©se utĂĄn)
A CMS âPublikĂĄlĂĄs" gombja szintĂ©n commitol + pushol + deployol (csak a beĂĄllĂtott környezetre). RĂ©szletek: .agent/workflows/deploy.md, docs/helyi-staging-deploy.md.
Tartalomkezelés
A weboldal szövegei és a CMS a proto/src/content/ JSON-fåjljaiból jönnek:
proto/src/content/
âââ schema.js # közös sĂ©ma-validĂĄtor (Next + CMS)
âââ types.ts # TypeScript tĂpusok
âââ index.ts # tartalom-betöltĆ
âââ common.json # közös szövegek (gombok, lĂĄblĂ©c, a11y)
âââ pages/ # oldalankĂ©nti tartalom (home, about, services, âŠ)
HasznĂĄlat:
import { content, getPageContent } from '@/content'
const about = content.pages.about
DokumentĂĄciĂł
- Agent-szabĂĄlyok:
.agent/AGENTS.md,.agent/steering/,.agent/workflows/ - CMS felhasznĂĄlĂłi ĂștmutatĂł:
docs/felhasznaloi-utmutato.md(a CMS-ben a â SĂșgĂł is ezt rendereli) - Plane szinkron:
PLANE-SYNC-GUIDE.md - Staging deploy:
docs/helyi-staging-deploy.md - Gitea runner:
docs/gitea-runner-telepites.md
Környezetek
- Staging: https://stage.mozdit.hu
- CMS (staging): https://cms.stage.llmdev.mozdit.hu
- ntfy (riasztĂĄs):
st_limidev_securitytopic
BiztonsĂĄgi monitoring
scripts/security-scan.sh (cron, 5 percenként) kriptominer/backdoor indikåtorokat figyel
(ålcåzott folyamatnevek, /tmp/.kworkerd-jellegƱ maradvånyok, magas CPU), és talålat esetén
ntfy push-t kĂŒld a st_limidev_security topicra.
Languages
TypeScript
60.3%
JavaScript
24.8%
HTML
7%
Shell
4.4%
CSS
3%
Other
0.4%