diff --git a/src/components/projects/ProjectCard.astro b/src/components/projects/ProjectCard.astro index fd6f886..207df50 100644 --- a/src/components/projects/ProjectCard.astro +++ b/src/components/projects/ProjectCard.astro @@ -2,6 +2,8 @@ import { Image } from "astro:assets" import { type ImageMetadata } from "astro" import BadgeList from "../badge/BadgeList.astro" +import LocaleLink from "../links/LocaleLink.astro" +import { type NavLink } from "@/utils/linking" interface Props { title: string @@ -9,14 +11,14 @@ interface Props { tags: string[] image: ImageMetadata imageAlt: string - linkTo: string + linkTo: NavLink } const { title, description, tags, image, imageAlt, linkTo } = Astro.props --- -
@@ -29,4 +31,4 @@ const { title, description, tags, image, imageAlt, linkTo } = Astro.props

{description}

-
+ diff --git a/src/content/projects/Calendar before and after.png b/src/content/projects/Calendar before and after.png new file mode 100644 index 0000000..e8e7453 Binary files /dev/null and b/src/content/projects/Calendar before and after.png differ diff --git a/src/content/projects/Simplify-truths-website.png b/src/content/projects/Simplify-truths-website.png new file mode 100644 index 0000000..cf46856 Binary files /dev/null and b/src/content/projects/Simplify-truths-website.png differ diff --git a/src/content/projects/hotelService.mdx b/src/content/projects/hotelService.mdx deleted file mode 100644 index 21e6e14..0000000 --- a/src/content/projects/hotelService.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Hotel Service" -description: "REST API for managing hotels" -heroImage: "./kevin-james.jpg" -heroImageAlt: "The homepage of this site" -tags: [Rust, Axum, Postgres, REST] -source: "https://example.com" -createdAt: "2024-09-22" -updatedAt: "2024-09-22" ---- - -Hello diff --git a/src/content/projects/hvl-ics-simplifier.mdx b/src/content/projects/hvl-ics-simplifier.mdx new file mode 100644 index 0000000..43beda9 --- /dev/null +++ b/src/content/projects/hvl-ics-simplifier.mdx @@ -0,0 +1,16 @@ +--- +title: "API for å forenkle TimeEdit iCalendar filer" +description: "Et API som forenkler tittler i ICS filer fra TimeEdit" +heroImage: "./Calendar before and after.png" +heroImageAlt: "En kalender før og etter APIet har blitt brukt. Venstre side er før, høyre etter." +tags: [API, Kotlin, Spring Boot, Tomcat, iCal4j, CI/CD] +source: "https://github.com/emberal/hvl_ics_simplifier" +createdAt: "2023-08-08" +updatedAt: "2024-10-20" +--- + +Ble lei av hvor vanskelig det var å lese iCalendar filer fra HVL sin kalender i TimeEdit, så jeg lagde et API som gjør det enklere. +Data for tittelen blir hentet fra den gamle tittelen. +For å finne hvilken type hendselse det er, sjekkes beskrivelsen og lokasjonen. + +APIet er skrevet i Kotlin med Spring boot, og hosted på en selvhostet tomcat server. \ No newline at end of file diff --git a/src/content/projects/simplify-truths.mdx b/src/content/projects/simplify-truths.mdx new file mode 100644 index 0000000..bc5c48b --- /dev/null +++ b/src/content/projects/simplify-truths.mdx @@ -0,0 +1,26 @@ +--- +title: "Forenkle sannhetsverdier og sannhetstabeller" +description: "Forenkle sannhetsuttrykk og opprette sannhetstabeller" +heroImage: "./Simplify-truths-website.png" +heroImageAlt: "Nettsiden med en sannhetstabell" +tags: [TypeScript, SolidJS, Tailwind css, Nettside, Java, API, Spring Boot, Raspberry Pi, Apache, Tomcat] +source: "https://github.com/h600878/martials.no" +createdAt: "2022-11-08" +updatedAt: "2024-10-20" +--- +{/* TODO change to Rust */} +Noen sannhetsverdier kan bli ganske store, og kompliserte. Derfor har jeg laget dette programmet for å forenkle uttrykk mest mulig. +Programmet bruker flere kjente metoder for å skrive om uttrykkene. Hvilke uttrykk som er brukt og hvilke endringer de gjorde, +kan vises i menyen under søkefeltet. +
+I tillegg til å bare forenkle uttrykk, kan man også generere en sannhetstabell med alle mulige verdier i uttrykket. +Hvis man ikke ønsker å forenkle uttrykket, men bare generere tabellen, kan man enkelt skru av forenkling. I tillegg har +man muligheten til å filtrere resultat, enten ved å skjule sanne eller usanne verdier. Eller ved å sortere etter sanne +eller usanne først. +
+Nettsiden er laget med TypeScript, SolidJS og Tailwind CSS. API-et er laget med Java og Spring Boot. +Begge kjører på min egen raspberry pi 4, nettsiden er hostet på en apache2 tjener, mens API-et ligger på en tomcat tjener. +Lenke til nettsiden. +
+Spørringer kan gjøres mot API-et kan utføres med GET eller POST. API-et returnerer JSON. +[Lenke til API-docs](https://api.martials.no/simplify-truths) \ No newline at end of file diff --git a/src/pages/en/projects/[project].astro b/src/pages/en/projects/[project].astro index fbfec2f..d2de0f2 100644 --- a/src/pages/en/projects/[project].astro +++ b/src/pages/en/projects/[project].astro @@ -1,5 +1,5 @@ --- -import ProjectPage from "../../../components/projects/ProjectPage.astro" +import ProjectPage from "@/components/projects/ProjectPage.astro" import { type GetStaticPathsResult } from "astro" // Prerender the page as static HTML during build @@ -7,8 +7,9 @@ export const prerender = true export function getStaticPaths(): GetStaticPathsResult { return [ - { params: { project: "hotelservice" } }, - { params: { project: "homepage" } } + { params: { project: "hvl-ics-simplifier" } }, + { params: { project: "homepage" } }, + { params: { project: "simplify-truths" } } ] } diff --git a/src/pages/projects/[project].astro b/src/pages/projects/[project].astro index 5064ead..d2de0f2 100644 --- a/src/pages/projects/[project].astro +++ b/src/pages/projects/[project].astro @@ -7,8 +7,9 @@ export const prerender = true export function getStaticPaths(): GetStaticPathsResult { return [ - { params: { project: "hotelservice" } }, - { params: { project: "homepage" } } + { params: { project: "hvl-ics-simplifier" } }, + { params: { project: "homepage" } }, + { params: { project: "simplify-truths" } } ] } diff --git a/src/styles/global.css b/src/styles/global.css index ac1d433..2977217 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -10,7 +10,7 @@ @layer base { br { - @apply my-4; + @apply my-0.5; } h1 { @@ -20,4 +20,9 @@ h2 { @apply text-3xl font-bold mb-2; } + + /* TODO change default style*/ + a { + @apply link + } } diff --git a/src/types/types.ts b/src/types/types.ts index a738bb4..7501ccc 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -1 +1,5 @@ +import type { CollectionEntry } from "astro:content" + export type AbsolutePathname = `/${string}` + +export type Project = CollectionEntry<"projects"> diff --git a/src/utils/linking.ts b/src/utils/linking.ts index 183ffe0..eeb7fd1 100644 --- a/src/utils/linking.ts +++ b/src/utils/linking.ts @@ -1,12 +1,18 @@ import type { AvailableLanguageTag } from "@/paraglide/runtime.js" -import type { AbsolutePathname } from "@/types/types.ts" +import type { AbsolutePathname, Project } from "@/types/types.ts" interface TranslatedPathnames { nb: AbsolutePathname en: `/en${AbsolutePathname}` } -export type NavLink = "/" | "/contact" | "/projects" | "/links" | "/hardware" +export type NavLink = + "/" + | "/contact" + | "/projects" + | `/projects/${Project["id"]}` + | "/links" + | "/hardware" const paths: Set = new Set([ "/", @@ -34,9 +40,19 @@ for (const path of paths) { export function localizePathname( pathname: NavLink, locale: AvailableLanguageTag -) { - if (pathnames[pathname]) { - return pathnames[pathname][locale] +): string { + const pathnameParts = pathname.split("/") + const firstSegment: AbsolutePathname = `/${pathnameParts[1]}` + + if (pathnames[firstSegment]) { + const localizedPathname = pathnames[firstSegment][locale] + + const rest = pathnameParts.slice(2) + if (rest.length > 0) { + return `${localizedPathname}/${rest.join("/")}` + } else { + return localizedPathname + } } return pathname }