From 6825a5549b6f2c664d4e0a27695b3fc9030cb54f Mon Sep 17 00:00:00 2001 From: KaroGil Date: Sat, 29 Mar 2025 23:51:23 +0100 Subject: [PATCH 1/3] add careers --- app/api/interests/utils.ts | 13 +++++++ app/careers/[slug]/page.tsx | 47 ++++++++++++++++++++++++++ app/careers/page.tsx | 67 +++++++++++++++++++++++++++++++++++++ components/footer.tsx | 24 ++++++++----- components/header.tsx | 3 ++ 5 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 app/api/interests/utils.ts create mode 100644 app/careers/[slug]/page.tsx create mode 100644 app/careers/page.tsx diff --git a/app/api/interests/utils.ts b/app/api/interests/utils.ts new file mode 100644 index 0000000..0654816 --- /dev/null +++ b/app/api/interests/utils.ts @@ -0,0 +1,13 @@ +import { promises as fs } from "fs"; +import path from "path"; +import type { Interest } from "./../../../components/types/interests"; + +export async function getInterestBySlug( + slug: string +): Promise { + const filePath = path.join(process.cwd(), "public", "interests.json"); + const file = await fs.readFile(filePath, "utf-8"); + const interests: Interest[] = JSON.parse(file); + + return interests.find((interest) => interest.slug === slug); +} diff --git a/app/careers/[slug]/page.tsx b/app/careers/[slug]/page.tsx new file mode 100644 index 0000000..2bcf69b --- /dev/null +++ b/app/careers/[slug]/page.tsx @@ -0,0 +1,47 @@ +import { notFound } from "next/navigation"; +import LinkButton from "@/components/linkButton"; + +const jobOpenings = [ + { + title: "Frontend-utvikler", + slug: "frontend-developer", + location: "Hjemmekontor", + type: "Fulltid", + description: + "Vi ser etter en frontend-utvikler med erfaring i React og Tailwind CSS.", + }, + { + title: "Backend-utvikler", + slug: "backend-developer", + location: "Oslo, Norge", + type: "Deltid", + description: + "Bli med i backend-teamet vårt og bygg skalerbare API-er med Node.js og PostgreSQL.", + }, +]; + +export default function JobPage({ params }: { params: { slug: string } }) { + const job = jobOpenings.find((job) => job.slug === params.slug); + + if (!job) { + notFound(); + } + + return ( +
+
+

{job.title}

+

+ {job.location} · {job.type} +

+

{job.description}

+ + +
+
+ ); +} diff --git a/app/careers/page.tsx b/app/careers/page.tsx new file mode 100644 index 0000000..49ae1c5 --- /dev/null +++ b/app/careers/page.tsx @@ -0,0 +1,67 @@ +import LinkButton from "@/components/linkButton"; +import React from "react"; + +const jobOpenings = [ + { + title: "Frontend-kompis", + location: "Hjemmekontor", + type: "Fulltid", + description: + "Vi ser etter en frontend-utvikler med erfaring i React og Tailwind CSS.", + link: "/careers/frontend-developer", + }, + { + title: "Backend-kompis", + location: "Oslo, Norge", + type: "Deltid", + description: + "Bli med i backend-teamet vårt og bygg skalerbare API-er med Node.js og PostgreSQL.", + link: "/careers/backend-developer", + }, +]; + +export default function CareersPage() { + return ( +
+
+
+

Ledige stillinger

+ {jobOpenings.map((job, index) => ( +
+

{job.title}

+

+ {job.location} · {job.type} +

+

{job.description}

+ +
+ ))} +
+ +
+

+ Fant du ikke noe som passer? +

+

+ Vi er alltid på utkikk etter engasjerte mennesker. Send gjerne en + åpen søknad til{" "} + + jobs@kompis.com + + . +

+
+
+
+ ); +} diff --git a/components/footer.tsx b/components/footer.tsx index c367a0d..d6e67ff 100644 --- a/components/footer.tsx +++ b/components/footer.tsx @@ -8,15 +8,23 @@ export function Footer() {

...KOMPIS

- - Om oss - +
+ + Om oss + + + Jobb + +
-
- - - -

Laget av Ninja Turtles 🐢 Mille, Karolina, Johanne og Henrik

+
+
+ + + +

Laget av Ninja Turtles 🐢 Mille, Karolina, Johanne og Henrik

+
+ © {new Date().getFullYear()} Your Company. All rights reserved.
diff --git a/components/header.tsx b/components/header.tsx index 3b648e5..0b7ae43 100644 --- a/components/header.tsx +++ b/components/header.tsx @@ -39,6 +39,9 @@ export function Header() { const event = getEventById(parseInt(id)); setTitle(`${event?.hobby.infinitiv}${ending}`); setBade(false); + } else if (pathname.startsWith("/careers")) { + setTitle(`BLI JOBB${ending}`); + setBade(false); } else { setTitle(`...${ending.toUpperCase()}`); setBade(false); From 408eadaff46ce7e7350c536fc4f24cb9ccad3cea Mon Sep 17 00:00:00 2001 From: KaroGil Date: Sat, 29 Mar 2025 23:54:21 +0100 Subject: [PATCH 2/3] =?UTF-8?q?pr=C3=B8ve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/careers/[slug]/page.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/careers/[slug]/page.tsx b/app/careers/[slug]/page.tsx index 2bcf69b..95ce284 100644 --- a/app/careers/[slug]/page.tsx +++ b/app/careers/[slug]/page.tsx @@ -20,7 +20,14 @@ const jobOpenings = [ }, ]; -export default function JobPage({ params }: { params: { slug: string } }) { +// ✅ The type for App Router page props +interface PageProps { + params: { + slug: string; + }; +} + +export default async function JobPage({ params }: PageProps) { const job = jobOpenings.find((job) => job.slug === params.slug); if (!job) { @@ -34,12 +41,12 @@ export default function JobPage({ params }: { params: { slug: string } }) {

{job.location} · {job.type}

-

{job.description}

+

{job.description}

From 892dfff22a20f9f5193717b6064dee917e9d8e49 Mon Sep 17 00:00:00 2001 From: KaroGil Date: Sat, 29 Mar 2025 23:57:13 +0100 Subject: [PATCH 3/3] adaasdinfeiwnfiewnfnewf --- app/careers/[slug]/page.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/careers/[slug]/page.tsx b/app/careers/[slug]/page.tsx index 95ce284..4b4c0a0 100644 --- a/app/careers/[slug]/page.tsx +++ b/app/careers/[slug]/page.tsx @@ -20,15 +20,15 @@ const jobOpenings = [ }, ]; -// ✅ The type for App Router page props interface PageProps { - params: { + params: Promise<{ slug: string; - }; + }>; } export default async function JobPage({ params }: PageProps) { - const job = jobOpenings.find((job) => job.slug === params.slug); + const { slug } = await params; + const job = jobOpenings.find((job) => job.slug === slug); if (!job) { notFound();