From 2ec4b80c5265025c22b2b9b2bc21257fab1923db Mon Sep 17 00:00:00 2001 From: periodicbrake Date: Tue, 30 Jun 2026 16:11:14 +0200 Subject: [PATCH] added portfolio page --- public/placeholder.png | Bin 0 -> 7809 bytes src/app/portfolio/bruh/page.tsx | 14 +++++ src/app/portfolio/layout.tsx | 30 +++++++++++ src/app/portfolio/ongoingmaintenance/page.tsx | 14 +++++ src/app/portfolio/page.tsx | 8 +-- src/app/portfolio/underconstruction/page.tsx | 14 +++++ src/components/project_card.tsx | 48 ++++++++++++++++++ 7 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 public/placeholder.png create mode 100644 src/app/portfolio/bruh/page.tsx create mode 100644 src/app/portfolio/layout.tsx create mode 100644 src/app/portfolio/ongoingmaintenance/page.tsx create mode 100644 src/app/portfolio/underconstruction/page.tsx create mode 100644 src/components/project_card.tsx diff --git a/public/placeholder.png b/public/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..ed6df8c5f9ae73621526758c34902e81432ae663 GIT binary patch literal 7809 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 literal 0 HcmV?d00001 diff --git a/src/app/portfolio/bruh/page.tsx b/src/app/portfolio/bruh/page.tsx new file mode 100644 index 0000000..08056e8 --- /dev/null +++ b/src/app/portfolio/bruh/page.tsx @@ -0,0 +1,14 @@ +import Link from "next/link" + +export default function Sonion() { + return (<> + +
+
+

Where are you trying to go 🥀

+

click anywhere to return to the portfolio

+
+
+ + ) +} \ No newline at end of file diff --git a/src/app/portfolio/layout.tsx b/src/app/portfolio/layout.tsx new file mode 100644 index 0000000..5233a95 --- /dev/null +++ b/src/app/portfolio/layout.tsx @@ -0,0 +1,30 @@ +import Project from "@/components/project_card"; +import { nextjs_tag, typescript_tag } from "@/types/tags"; + +export default function Portfolio({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + <> + {children} +
+ + +
+ + ); +} diff --git a/src/app/portfolio/ongoingmaintenance/page.tsx b/src/app/portfolio/ongoingmaintenance/page.tsx new file mode 100644 index 0000000..d46bdff --- /dev/null +++ b/src/app/portfolio/ongoingmaintenance/page.tsx @@ -0,0 +1,14 @@ +import Link from "next/link" + +export default function Sonion() { + return (<> + +
+
+

The page or project you are trying to reach is currently under maintenance

+

click anywhere to return to the portfolio

+
+
+ + ) +} \ No newline at end of file diff --git a/src/app/portfolio/page.tsx b/src/app/portfolio/page.tsx index 3a09d9a..6b1eed0 100644 --- a/src/app/portfolio/page.tsx +++ b/src/app/portfolio/page.tsx @@ -1,7 +1,3 @@ export default function Portfolio() { - return ( - <> - - - ) -} \ No newline at end of file + return <>; +} diff --git a/src/app/portfolio/underconstruction/page.tsx b/src/app/portfolio/underconstruction/page.tsx new file mode 100644 index 0000000..5642af8 --- /dev/null +++ b/src/app/portfolio/underconstruction/page.tsx @@ -0,0 +1,14 @@ +import Link from "next/link" + +export default function Sonion() { + return (<> + +
+
+

The page or project you are trying to reach is currently under construction

+

click anywhere to return to the portfolio

+
+
+ + ) +} \ No newline at end of file diff --git a/src/components/project_card.tsx b/src/components/project_card.tsx new file mode 100644 index 0000000..c730a45 --- /dev/null +++ b/src/components/project_card.tsx @@ -0,0 +1,48 @@ +import TagType from "@/types/tags"; +import Tag from "@/components/tags"; +import Image from "next/image"; +import Link from "next/link"; + +interface ProjectInt { + tags: TagType[]; + title: string; + desc: string; + imgsrc: string; + link: string; +} + +export default function Project({ + tags, + title, + desc, + imgsrc, + link, +}: ProjectInt) { + return ( + <> + +
+ project image +
+

{title}

+

{desc}

+
+
+ {tags.map((tag, index) => ( + + ))} +
+
+ + + ); +}