From 99e820174559cdc53d5b9ffbb21f7b8070b271c8 Mon Sep 17 00:00:00 2001 From: Schubert Ferenc Date: Fri, 3 Jul 2026 21:08:04 +0200 Subject: [PATCH] feat: apply Funktechnik Schubert branding --- .DS_Store | Bin 0 -> 8196 bytes app/api/repair/route.ts | 5 +- app/funkgeraete-service/page.tsx | 11 +- app/globals.css | 246 +++++++++++++++++++++------ app/layout.tsx | 2 +- app/leistungen/page.tsx | 18 +- app/page.tsx | 31 ++-- app/reparatur/page.tsx | 13 +- app/seo.ts | 31 +++- components/Footer.tsx | 18 +- components/Header.tsx | 37 +++- components/RepairForm.tsx | 27 ++- public/apple-touch-icon.png | Bin 0 -> 43539 bytes public/favicon-16x16.png | Bin 0 -> 1165 bytes public/favicon-32x32.png | Bin 0 -> 2295 bytes public/favicon.ico | Bin 0 -> 3390 bytes public/funktechnik_schubert_logo.jpg | Bin 0 -> 245428 bytes 17 files changed, 335 insertions(+), 104 deletions(-) create mode 100644 .DS_Store create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/funktechnik_schubert_logo.jpg diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..379c22d995b04dca0d238f942dd9a4d0c611da7a GIT binary patch literal 8196 zcmeHMYitx%6u#fIlo>m~v=%7HWVbG_;9|F>AO*o?TVB!%vMt?~V%^8kj-Afbo!Kpq z)RY+CCK_LfzlhJDjT(&@gQCAod_~icNFpI>BL49ge=q?(Gk2EQg_@Wc13EXEd*+;b z&Y3x9zjJTTlre@xA=kuMJ!4Fy%cV*+P1hLix_ezU1Yc4~6lBks&a#;?do*KMnX9w| zL6CtU13?CY3b3yhpnK{AJe#mj<363>)H5ZYynBFe3ctkwH>dTmt4=iT(+N(wIRiIm@ShC7LxJ~n zvI~3a3~^3_ImkeefvYp%mQNKMWd)XDMp^%UA~R~}wiAn;hEP#Ct7^75TdWojB!{fA zq?2|Eb|RhM?{Zz1Wn@bC>C8S|8yisS+APya>!z0X4D_5vD*ZjWnX|?cR>92Ko^6sZ zh>|D`DD_8=Hnp}y!_Dj0jz_~sTbpCiaLbx?n~FyLg|*JQ+n1illl>DK$&M#U^|K3lh=wAP*2t} z3L~aHpwwj3Mz&z29c_zYxXL7(XJ_-4VeGMN-O(+xH|1!DoRXtyOQ}BF$~$eIvjIgZ z*xFu=eCb84ojj7OTK8$YM_o7eJ}qw(jl^R-L}_yF!qC!{tDEn*Gro0a=e<+&l$u(( zPF~Pc)NMUuXx(Fa&Kc@W+gZ)b>E>V`W!H4{gSwWNY7mvW%=CyhRa?Jk@hwYKwOqU8 zB~{4i4;FOiuo4kP{)`4SA}Q~Q{W*HcPAlhn%y}zngStW#_q+18yhbw@%d6C=q@=|z zn-aubG|EkqVoP1a1OaZ^BCivboYZZkGn&Cgt@1`u*(LQ9dE{JJC*LJXsjM|JLc!Qv zmQdS8-CWD0)9E$z7AJIo+}HUN-J& zP}N@7)s|dN%Tdsa>lf9kNwr&4z9kz)H;Xz!o_-6Cd@)kOTqM4V-$qUipY!g#97}a2 z1)sVHoXVE7^>mCID40!WFN6F*=cr`{ltD{7uj#@61$8F$f(5UdF3<4R7F0OyYfRPzQlhT>EEz3 z>>NAKF0hNJLNyeGuoAbUg^;}sI|$t!=p=Nf(1-o#hlWAuc!03(pol{_j3am$kKi#p zjwcA|FW^PIgyVRH(Ed8%eG+fsZM=gIaS|Wn6h85AKZWn{1AZ(+a_4j;<3c%-i^;rc zSmq$fOX#0&azk?!{O#-A{(tMt-~Vsu7=xD&G7x0ouQPzk_GEj4bY|M)++I6O*Zp+4 z!_}MM)H9*UYsZOt?KsgZ|1hNcFsZsWai30bN)j6X`iFqO^XGPO{s-s(fAswS1BSYE A)c^nh literal 0 HcmV?d00001 diff --git a/app/api/repair/route.ts b/app/api/repair/route.ts index 9fbdc6d..533fddb 100644 --- a/app/api/repair/route.ts +++ b/app/api/repair/route.ts @@ -10,10 +10,11 @@ export async function POST(request: Request) { const email = form.get("email"); const manufacturer = form.get("manufacturer"); const model = form.get("model"); + const deviceType = form.get("deviceType"); const description = form.get("description"); const privacy = form.get("privacy"); - if (!required(name) || !required(email) || !required(manufacturer) || !required(model) || !required(description) || privacy !== "on") { + if (!required(name) || !required(email) || !required(manufacturer) || !required(model) || !required(deviceType) || !required(description) || privacy !== "on") { return NextResponse.json({ message: "Bitte füllen Sie alle Pflichtfelder aus." }, { status: 400 }); } @@ -24,8 +25,10 @@ export async function POST(request: Request) { hasIntakeIntegration: Boolean(intakeUrl && hasIntegrationToken), manufacturer: String(manufacturer), model: String(model), + deviceType: String(deviceType), hasPhone: required(form.get("phone")), hasSerialNumber: required(form.get("serialNumber")), + hasAccessories: required(form.get("accessories")), }); return NextResponse.json({ diff --git a/app/funkgeraete-service/page.tsx b/app/funkgeraete-service/page.tsx index 95d1583..ef23bd7 100644 --- a/app/funkgeraete-service/page.tsx +++ b/app/funkgeraete-service/page.tsx @@ -9,7 +9,7 @@ export default function RadioServicePage() { return ( <> - Funkgeräte zeigen Fehler oft erst im Zusammenspiel von Empfang, Sendeteil, Versorgung, Antennenanpassung und Bedienung. Der Service betrachtet diese Zusammenhänge strukturiert. + Funkgeräte zeigen Fehler oft erst im Zusammenspiel von Empfang, Sendeteil, Versorgung, Antennenanpassung, Bedienung und Abgleich. Der Service betrachtet diese Zusammenhänge strukturiert.
@@ -19,13 +19,14 @@ export default function RadioServicePage() {
  • Kein oder schwacher Empfang
  • Keine, leise oder verzerrte Modulation
  • Frequenzversatz, PLL-Rasten oder instabile Kanäle
  • -
  • Aussetzer durch Stromversorgung, Buchsen oder Bedienelemente
  • -
  • Unklare Vorarbeiten oder verbastelte Geräte
  • +
  • Sendeprobleme, schwankende Leistung oder auffällige Erwärmung
  • +
  • Audio-/NF-Probleme, Displayfehler oder Aussetzer durch Bedienelemente
  • +
  • Unklare Vorarbeiten, fehlende Serviceunterlagen oder bereits geöffnete Geräte
  • -

    Serviceablauf

    -

    Eine gute Reparatur beginnt mit vollständigen Angaben zu Gerät, Fehlerbild und Vorgeschichte. Danach folgt eine technische Einschätzung und die weitere Abstimmung.

    +

    Messung und Einordnung

    +

    Eine gute Reparatur beginnt mit vollständigen Angaben zu Gerät, Fehlerbild und Vorgeschichte. Danach folgen technische Einschätzung, Prüfung mit geeigneter Messtechnik und die weitere Abstimmung.

    Reparatur anfragen
    diff --git a/app/globals.css b/app/globals.css index 74b660b..2b5edb9 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,15 +1,16 @@ :root { - --bg: #f6f8fb; + --bg: #f4f6f8; --surface: #ffffff; - --ink: #101827; - --muted: #5b677a; - --line: #d9e1ec; - --navy: #0b1728; - --navy-2: #13243a; - --cyan: #16b6d9; + --ink: #101722; + --muted: #566270; + --line: #d9dee6; + --navy: #082a60; + --navy-2: #0e3a78; + --steel: #666d76; + --cyan: #1e9fb8; --orange: #f28c28; --radius: 8px; - --shadow: 0 20px 50px rgba(10, 23, 40, 0.12); + --shadow: 0 18px 44px rgba(8, 42, 96, 0.12); } * { @@ -49,77 +50,102 @@ textarea { position: sticky; top: 0; z-index: 20; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(11, 23, 40, 0.96); - color: #fff; - backdrop-filter: blur(14px); + border-bottom: 1px solid rgba(8, 42, 96, 0.12); + background: rgba(255, 255, 255, 0.96); + color: var(--ink); + box-shadow: 0 8px 24px rgba(8, 42, 96, 0.06); + backdrop-filter: blur(12px); } .header-inner { display: flex; - min-height: 72px; + min-height: 78px; align-items: center; justify-content: space-between; - gap: 24px; + gap: 18px; } .brand { display: inline-flex; align-items: center; - gap: 12px; - font-weight: 800; + flex: 0 0 auto; } -.brand-mark { - display: grid; - width: 38px; - height: 38px; - place-items: center; - border: 1px solid rgba(22, 182, 217, 0.45); - border-radius: 8px; - background: linear-gradient(135deg, rgba(22, 182, 217, 0.22), rgba(242, 140, 40, 0.18)); -} - -.brand-mark::before { - width: 16px; - height: 16px; - border: 3px solid var(--cyan); - border-left-color: transparent; - border-radius: 999px; - content: ""; +.brand-logo { + width: 286px; + height: 68px; + object-fit: cover; + object-position: center; + display: block; } .nav { display: flex; flex-wrap: wrap; align-items: center; - justify-content: flex-end; + justify-content: center; + flex: 1 1 auto; gap: 6px; } .nav a { border-radius: 8px; padding: 9px 11px; - color: rgba(255, 255, 255, 0.82); + color: var(--muted); font-size: 14px; + font-weight: 700; } .nav a:hover { - background: rgba(255, 255, 255, 0.08); + background: rgba(8, 42, 96, 0.07); + color: var(--navy); +} + +.nav a[aria-current="page"] { + background: rgba(8, 42, 96, 0.1); + color: var(--navy); +} + +.header-cta { + display: inline-flex; + min-height: 40px; + align-items: center; + justify-content: center; + border-radius: 8px; + background: var(--navy); color: #fff; + font-size: 14px; + font-weight: 800; + padding: 0 14px; + white-space: nowrap; +} + +.header-cta:hover { + background: var(--navy-2); +} + +.menu-toggle { + display: none; + min-height: 40px; + border: 1px solid var(--line); + border-radius: 8px; + background: #fff; + color: var(--navy); + font-weight: 800; + padding: 0 12px; } .hero { position: relative; overflow: hidden; - min-height: calc(100vh - 72px); + min-height: calc(100vh - 78px); display: grid; align-items: center; color: #fff; background: - linear-gradient(90deg, rgba(8, 18, 32, 0.94), rgba(8, 18, 32, 0.72), rgba(8, 18, 32, 0.58)), + linear-gradient(90deg, rgba(6, 24, 52, 0.96), rgba(8, 42, 96, 0.78), rgba(8, 42, 96, 0.58)), url("/workbench-signal.svg"), - linear-gradient(135deg, #0b1728, #17324e); + linear-gradient(135deg, #07172d, #0b3778); background-position: center; background-size: cover; } @@ -174,6 +200,30 @@ h3 { font-size: 21px; } +.hero-copy { + max-width: 720px; + color: rgba(255, 255, 255, 0.78); + font-size: 17px; + line-height: 1.65; +} + +.hero-badges { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 24px; +} + +.hero-badges span { + border: 1px solid rgba(255, 255, 255, 0.18); + border-radius: 999px; + background: rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.86); + font-size: 13px; + font-weight: 800; + padding: 7px 10px; +} + .hero-actions, .actions { display: flex; @@ -190,21 +240,29 @@ h3 { border: 1px solid transparent; border-radius: 8px; padding: 0 18px; - background: var(--cyan); - color: #06111d; + background: var(--navy); + color: #fff; font-weight: 800; } +.button:hover { + background: var(--navy-2); +} + .button.secondary { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.36); + background: rgba(255, 255, 255, 0.1); color: #fff; } .button.light { - border-color: var(--line); + border-color: var(--navy); background: #fff; - color: var(--ink); + color: var(--navy); +} + +.button.light:hover { + background: #eef3f8; } .section { @@ -244,12 +302,26 @@ h3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } +.service-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + .card { border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); padding: 24px; - box-shadow: 0 8px 26px rgba(12, 28, 48, 0.05); + box-shadow: 0 10px 26px rgba(8, 42, 96, 0.06); +} + +.card h3::before { + display: block; + width: 34px; + height: 3px; + margin-bottom: 14px; + border-radius: 999px; + background: var(--orange); + content: ""; } .dark .card { @@ -366,6 +438,20 @@ h3 { color: #fff; } +.footer-logo { + display: block; + width: 220px; + height: 52px; + margin-bottom: 14px; + object-fit: cover; + object-position: center; +} + +.copyright { + color: rgba(255, 255, 255, 0.58); + font-size: 14px; +} + .legal { max-width: 860px; } @@ -375,16 +461,71 @@ h3 { font-size: 26px; } -@media (max-width: 860px) { - .header-inner, - .nav { - justify-content: flex-start; +@media (max-width: 1080px) and (min-width: 861px) { + .brand-logo { + width: 236px; + height: 56px; } .header-inner { + gap: 12px; + } + + .nav a { + padding: 8px; + font-size: 13px; + } + + .header-cta { + padding: 0 12px; + } +} + +@media (max-width: 860px) { + .header-inner { + min-height: 68px; + flex-wrap: wrap; + gap: 10px; + padding: 10px 0; + } + + .brand { + min-width: 0; + } + + .brand-logo { + width: 194px; + height: 46px; + } + + .menu-toggle { + display: inline-flex; + align-items: center; + margin-left: auto; + } + + .header-cta { + min-height: 38px; + order: 3; + width: 100%; + } + + .nav { + display: none; + order: 4; + width: 100%; flex-direction: column; - align-items: flex-start; - padding: 14px 0; + align-items: stretch; + border-top: 1px solid var(--line); + padding-top: 10px; + } + + .nav.is-open { + display: flex; + } + + .nav a { + padding: 11px 12px; } .hero { @@ -397,6 +538,7 @@ h3 { .grid.three, .grid.two, + .service-grid, .split, .footer-grid { grid-template-columns: 1fr; diff --git a/app/layout.tsx b/app/layout.tsx index 119dd20..c9d50ab 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -6,7 +6,7 @@ import { createMetadata } from "./seo"; export const metadata: Metadata = createMetadata( "Funktechnik Schubert", - "Service, Reparatur und technische Unterstützung für Funkgeräte und Kommunikationstechnik.", + "Service, Reparatur, Diagnose und Abgleich von Funktechnik, CB-Funk, Amateurfunk und Kommunikationstechnik.", ); export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) { diff --git a/app/leistungen/page.tsx b/app/leistungen/page.tsx index d234fff..7794dad 100644 --- a/app/leistungen/page.tsx +++ b/app/leistungen/page.tsx @@ -6,25 +6,21 @@ import { createMetadata } from "../seo"; export const metadata: Metadata = createMetadata("Leistungen", "Funkgeräte-Service, Diagnose, Abgleich und Dokumentation für Kommunikationstechnik.", "/leistungen"); const services = [ - ["Funkgeräte-Service", "Prüfung, Wartung und technische Beurteilung von Funkgeräten mit Fokus auf nachvollziehbare Fehlerbilder."], - ["CB-Funk", "Service für klassische und moderne CB-Funkgeräte, inklusive Empfangs-, Sende- und Modulationsproblemen."], - ["Amateurfunk", "Unterstützung bei ausgewählter Amateurfunktechnik, Abgleichfragen und gerätespezifischen Fehlern."], - ["Betriebsfunk", "Technische Einschätzung und Prüfung von betriebsnaher Kommunikationstechnik im Rahmen der Werkstattmöglichkeiten."], - ["Fehlersuche", "Strukturierte Diagnose bei Aussetzern, Störungen, instabiler Versorgung oder auffälligem Verhalten."], - ["Modulationsprobleme", "Analyse von leiser, verzerrter oder fehlender Modulation sowie Prüfung relevanter Baugruppen."], - ["PLL-/Frequenzprobleme", "Prüfung von Frequenzstabilität, Rastung, Synthesizer- und Referenzproblemen."], - ["Abgleich und Prüfung", "Sorgfältiger Abgleich nach technischen Unterlagen und dokumentierte Funktionsprüfung."], - ["Dokumentation", "Einbindung von Serviceunterlagen, Schaltplänen und Reparaturhinweisen in den Prüfprozess."], + ["Funkgeräte-Service", "Service für CB-Funk, Amateurfunk, Betriebsfunk sowie ältere und moderne Funkgeräte. Dazu gehören Sichtprüfung, Funktionsprüfung und eine technische Einschätzung des Gerätezustands."], + ["Fehlersuche & Reparatur", "Strukturierte Analyse bei fehlender Modulation, Frequenzabweichung, PLL-Problemen, Empfangs- oder Sendeproblemen, Audio-/NF-Fehlern und Anzeige- oder Displayfehlern."], + ["Abgleich & Prüfung", "Frequenzabgleich, Hub- und Modulationsprüfung, Sendeleistung, Empfindlichkeit und Funktionsprüfung nach technischen Unterlagen und sinnvoller Werkstattpraxis."], + ["Messtechnik & Diagnose", "Systematische Fehlersuche mit geeigneter Messtechnik wie Oszilloskop, Frequenzzähler, Signalgenerator, RF-Messung und Modulationsmessung."], + ["Serviceunterlagen", "Sorgfältige Einordnung von Schaltplänen, Service Manuals, Abgleichanleitungen, Dokumentation und Reparaturhinweisen für nachvollziehbare Arbeitsschritte."], ] as const; export default function ServicesPage() { return ( <> - Technische Unterstützung für Geräte, bei denen Diagnose, Erfahrung und saubere Dokumentation zählen. + Technische Unterstützung für Geräte, bei denen Diagnose, Messtechnik, Erfahrung und saubere Dokumentation zählen.
    -
    +
    {services.map(([title, text]) => {text})}
    diff --git a/app/page.tsx b/app/page.tsx index 0b7b8ae..859a1a6 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -6,9 +6,18 @@ export default function HomePage() { <>
    -

    Funktechnik, Elektronikservice, Werkstatt

    +

    Funktechnik, Messtechnik, Werkstattservice

    Funktechnik Schubert

    -

    Service, Reparatur und technische Unterstützung für Funkgeräte und Kommunikationstechnik.

    +

    Service, Reparatur und Diagnose für Funkgeräte, Messtechnik und Kommunikationstechnik.

    +

    Von CB-Funk und Amateurfunk bis zur professionellen Funktechnik: Wir unterstützen bei Fehlersuche, Abgleich, Modulationsproblemen, Frequenzproblemen und technischer Dokumentation.

    +
    + CB-Funk + Amateurfunk + Messtechnik + Abgleich + Diagnose + Service Manuals +
    Reparatur anfragen Leistungen ansehen @@ -20,13 +29,13 @@ export default function HomePage() {

    Leistungsbereiche

    -

    Technischer Service mit sauberer Diagnose

    -

    Von der ersten Fehlerbeschreibung bis zur dokumentierten Prüfung: Funktechnik Schubert verbindet Werkstatterfahrung mit strukturierter Kommunikation.

    +

    Werkstattservice für Funktechnik und Messtechnik

    +

    Von der ersten Fehlerbeschreibung bis zur dokumentierten Prüfung: Funktechnik Schubert verbindet technische Erfahrung, geeignete Messmittel und strukturierte Kommunikation.

    - Prüfung, Abgleich und Service für CB-Funk, Amateurfunk und ausgewählte Kommunikationstechnik. - Systematische Fehlersuche bei Empfang, Modulation, PLL, Frequenzstabilität und Stromversorgung. - Sorgfältiger Umgang mit Schaltplänen, Service Manuals und gerätespezifischen Dokumentationen. + Sichtprüfung, Funktionsprüfung und technische Beurteilung für CB-Funk, Amateurfunk, Betriebsfunk sowie ältere und moderne Geräte. + Systematische Diagnose bei Empfangsproblemen, Sendeproblemen, PLL-Fehlern, Frequenzabweichungen und Audio-/NF-Störungen. + Frequenzabgleich, Hub- und Modulationsprüfung, Sendeleistung, Empfindlichkeit und RF-Messung mit geeigneter Messtechnik.
    @@ -36,7 +45,7 @@ export default function HomePage() {

    Persönlicher Support

    Direkte technische Einschätzung statt anonymer Abwicklung

    -

    Viele Fehlerbilder lassen sich bereits mit einer klaren Beschreibung eingrenzen. Die Reparaturannahme fragt deshalb die wichtigsten technischen Details strukturiert ab.

    +

    Viele Fehlerbilder lassen sich bereits mit einer klaren Beschreibung und den richtigen Gerätedaten eingrenzen. Die Reparaturannahme fragt deshalb die wichtigsten technischen Details strukturiert ab.

    Reparaturformular öffnen
    @@ -45,9 +54,9 @@ export default function HomePage() {

    Warum Funktechnik Schubert?

    • Technischer Fokus auf Funkgeräte und Kommunikationstechnik
    • -
    • Nachvollziehbare Diagnose statt pauschaler Austauschlogik
    • -
    • Klare Rückmeldung zu Aufwand, Zustand und nächsten Schritten
    • -
    • Vorbereitung für strukturierte Service- und Dokumentationsprozesse
    • +
    • Nachvollziehbare Diagnose mit Blick auf Messwerte und Fehlerbild
    • +
    • Sauberer Umgang mit Service Manuals, Schaltplänen und Abgleichanleitungen
    • +
    • Klare Rückmeldung zu Zustand, Aufwand und sinnvollen nächsten Schritten
    diff --git a/app/reparatur/page.tsx b/app/reparatur/page.tsx index 754fead..22989f5 100644 --- a/app/reparatur/page.tsx +++ b/app/reparatur/page.tsx @@ -9,18 +9,19 @@ export default function RepairPage() { return ( <> - Beschreiben Sie Gerät, Fehlerbild und bisherige Vorarbeiten. Die Anfrage wird strukturiert erfasst und für eine spätere technische Übergabe vorbereitet. + Beschreiben Sie Gerät, Fehlerbild, Zubehör und bisherige Vorarbeiten. Die Anfrage wird strukturiert erfasst und für eine spätere technische Bearbeitung vorbereitet.

    Vor der Einsendung

    -

    Bitte senden Sie Geräte erst nach Rückmeldung ein. Eine klare Fehlerbeschreibung hilft, den Aufwand besser einzuschätzen.

    +

    Bitte senden Sie Geräte erst nach Rückmeldung ein. Vollständige Gerätedaten und eine präzise Fehlerbeschreibung helfen, den Aufwand besser einzuschätzen.

      -
    • Hersteller, Modell und Seriennummer bereithalten
    • -
    • Fehler möglichst reproduzierbar beschreiben
    • -
    • Vorarbeiten und geöffnete Geräte ehrlich angeben
    • -
    • Zubehör nur nach Absprache mitsenden
    • +
    • Hersteller, Modell, Geräteart und Seriennummer bereithalten, soweit vorhanden
    • +
    • Fehler möglichst konkret beschreiben: Empfang, Sendung, Modulation, Frequenz, Anzeige oder Versorgung
    • +
    • Zubehör wie Netzteil, Mikrofon, Antennenadapter oder Kabel angeben
    • +
    • Bereits geöffnete Geräte und durchgeführte Arbeiten ehrlich nennen
    • +
    • Fotos können später nach Rückmeldung ergänzt werden
    diff --git a/app/seo.ts b/app/seo.ts index 3bfd0e4..d019f77 100644 --- a/app/seo.ts +++ b/app/seo.ts @@ -1,15 +1,22 @@ import type { Metadata } from "next"; const siteName = "Funktechnik Schubert"; +const defaultTitle = "Funktechnik Schubert | Funkgeräte-Service & Messtechnik"; const siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3010"; const keywords = [ "Funktechnik Schubert", "Funkgeräte Reparatur", "CB Funk Service", - "Amateurfunk Reparatur", + "Amateurfunk Service", "Funkgeräte Abgleich", + "Funkgeräte Diagnose", + "Messtechnik", "Funktechnik Service", "Kommunikationstechnik", + "Service Manual", + "Schaltplan", + "Funkwerkstatt", + "Reparaturannahme", ]; export function createMetadata(title: string, description: string, path = "/"): Metadata { @@ -17,9 +24,19 @@ export function createMetadata(title: string, description: string, path = "/"): const fullTitle = title === siteName ? title : `${title} | ${siteName}`; return { - title: fullTitle, + metadataBase: new URL(siteUrl), + title: title === siteName ? { default: defaultTitle, template: `%s | ${siteName}` } : fullTitle, + applicationName: siteName, description, keywords, + icons: { + icon: [ + { url: "/favicon.ico", sizes: "any" }, + { url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" }, + { url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" }, + ], + apple: [{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" }], + }, alternates: { canonical: url, }, @@ -30,8 +47,16 @@ export function createMetadata(title: string, description: string, path = "/"): siteName, title: fullTitle, description, + images: [ + { + url: "/funktechnik_schubert_logo.jpg", + width: 1672, + height: 941, + alt: siteName, + }, + ], }, }; } -export { siteName, siteUrl }; +export { defaultTitle, siteName, siteUrl }; diff --git a/components/Footer.tsx b/components/Footer.tsx index dc7a47b..c8fb150 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -1,3 +1,4 @@ +import Image from "next/image"; import Link from "next/link"; export default function Footer() { @@ -5,20 +6,27 @@ export default function Footer() {
    -

    Funktechnik Schubert

    -

    Service, Reparatur und technische Unterstützung für Funkgeräte und Kommunikationstechnik.

    + Funktechnik Schubert +

    Funktechnik Schubert – Service und technische Unterstützung für Funkgeräte, Messtechnik und Kommunikationstechnik.

    +

    © Funktechnik Schubert

    -

    Service

    +

    Website

    Leistungen

    Funkgeräte-Service

    -

    Reparaturannahme

    +

    Reparatur

    +

    Kontakt

    Rechtliches

    Impressum

    Datenschutz

    -

    Kontakt

    diff --git a/components/Header.tsx b/components/Header.tsx index 641183a..105fd6e 100644 --- a/components/Header.tsx +++ b/components/Header.tsx @@ -1,6 +1,12 @@ +"use client"; + +import Image from "next/image"; import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { useState } from "react"; const navigation = [ + ["Start", "/"], ["Leistungen", "/leistungen"], ["Funkgeräte-Service", "/funkgeraete-service"], ["Reparatur", "/reparatur"], @@ -9,18 +15,39 @@ const navigation = [ ] as const; export default function Header() { + const pathname = usePathname(); + const [menuOpen, setMenuOpen] = useState(false); + return (
    - -
    ); diff --git a/components/RepairForm.tsx b/components/RepairForm.tsx index 3b4e11f..ccb678a 100644 --- a/components/RepairForm.tsx +++ b/components/RepairForm.tsx @@ -2,7 +2,8 @@ import { useState, type FormEvent } from "react"; -type Errors = Partial>; +type ErrorField = "name" | "email" | "manufacturer" | "model" | "deviceType" | "description" | "privacy"; +type Errors = Partial>; export default function RepairForm() { const [errors, setErrors] = useState({}); @@ -19,6 +20,7 @@ export default function RepairForm() { if (!String(form.get("email") ?? "").includes("@")) nextErrors.email = "Bitte geben Sie eine gültige E-Mail-Adresse ein."; if (!String(form.get("manufacturer") ?? "").trim()) nextErrors.manufacturer = "Bitte nennen Sie den Hersteller."; if (!String(form.get("model") ?? "").trim()) nextErrors.model = "Bitte nennen Sie das Modell."; + if (!String(form.get("deviceType") ?? "").trim()) nextErrors.deviceType = "Bitte wählen Sie die Geräteart aus."; if (String(form.get("description") ?? "").trim().length < 20) nextErrors.description = "Bitte beschreiben Sie den Fehler mit mindestens 20 Zeichen."; if (form.get("privacy") !== "on") nextErrors.privacy = "Bitte stimmen Sie der Verarbeitung Ihrer Angaben zu."; @@ -52,6 +54,23 @@ export default function RepairForm() {
    +
    + + + {errors.deviceType && {errors.deviceType}} +
    +
    + +