1
0
mirror of https://github.com/theoludwig/theoludwig.git synced 2026-05-06 13:48:12 +02:00

Compare commits

...

3 Commits

20 changed files with 2003 additions and 2033 deletions
+6 -7
View File
@@ -22,21 +22,20 @@ jobs:
with:
fetch-depth: 0
- uses: "pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061" # v4.2.0
- uses: "pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061" # v4.2.0
- uses: "pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d" # v6.0.5
- name: "Setup Node.js"
uses: "actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238" # v6.2.0
uses: "actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e" # v6.4.0
with:
node-version: "24.13.1"
node-version: "24.15.0"
cache: "pnpm"
- run: "node --version"
- name: "Install dependencies"
run: "pnpm install --frozen-lockfile"
run: "pnpm clean-install"
- name: "Run Chromatic"
uses: "chromaui/action@07791f8243f4cb2698bf4d00426baf4b2d1cb7e0" # latest
uses: "chromaui/action@a200f3ba3ff81232c47ac7942347fb212b1a67dc" # latest
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
workingDir: "apps/storybook"
+5 -4
View File
@@ -20,16 +20,17 @@ jobs:
steps:
- uses: "actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd" # v6.0.2
- uses: "pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061" # v4.2.0
- uses: "pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d" # v6.0.5
- name: "Setup Node.js"
uses: "actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238" # v6.2.0
uses: "actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e" # v6.4.0
with:
node-version: "24.13.1"
node-version: "24.15.0"
cache: "pnpm"
- run: "node --version"
- name: "Install dependencies"
run: "pnpm install --frozen-lockfile"
run: "pnpm clean-install"
- name: "Install Playwright"
run: "pnpm exec playwright install --with-deps"
+1 -1
View File
@@ -2,7 +2,7 @@
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"ignorePatterns": ["pnpm-lock.yaml"],
"semi": false,
"experimentalTailwindcss": {
"sortTailwindcss": {
"stylesheet": "./configs/config-tailwind/styles.css",
"functions": ["classNames"]
}
+7 -1
View File
@@ -1,8 +1,14 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"extends": ["node_modules/eslint-config-conventions/.oxlintrc.json"],
"env": {
"builtin": true,
"browser": true,
"node": true,
"shared-node-browser": true
},
"rules": {
"import-x/extensions": [
"import/extensions": [
"error",
"ignorePackages",
{
+2 -2
View File
@@ -28,7 +28,7 @@ The commit message guidelines adheres to [Conventional Commits](https://www.conv
### Prerequisites
- [Node.js](https://nodejs.org/) >= v24.0.0 [(`nvm install 24`)](https://nvm.sh)
- [pnpm](https://pnpm.io/) [(`npm install --global corepack@0.34.6 && corepack enable`)](https://github.com/nodejs/corepack)
- [pnpm](https://pnpm.io/) [(`npm install --global corepack@0.34.7 && corepack enable`)](https://github.com/nodejs/corepack)
- [Docker](https://www.docker.com/)
### Installation
@@ -45,7 +45,7 @@ cp .env.example .env
cp apps/website/.env.example apps/website/.env
# Install dependencies
pnpm install --frozen-lockfile
pnpm clean-install
# Install Playwright browser binaries and their dependencies (tests)
pnpm exec playwright install --with-deps
+1
View File
@@ -0,0 +1 @@
declare module "*.css"
+2 -2
View File
@@ -37,8 +37,8 @@ const preview: Preview = {
controls: {
disableSaveFromUI: true,
matchers: {
color: /(background|color)$/i,
date: /date$/i,
color: /(background|color)$/iu,
date: /date$/iu,
},
},
},
+5 -5
View File
@@ -1,7 +1,7 @@
FROM node:24.13.1-slim@sha256:a81a03dd965b4052269a57fac857004022b522a4bf06e7a739e25e18bce45af2 AS node-pnpm
FROM docker.io/node:24.15.0-slim@sha256:879b21aec4a1ad820c27ccd565e7c7ed955f24b92e6694556154f251e4bdb240 AS node-pnpm
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN npm install --global corepack@0.34.6 && corepack enable
ENV PATH="$PNPM_HOME/bin:$PATH"
RUN npm install --global corepack@0.34.7 && corepack enable
ENV TURBO_TELEMETRY_DISABLED=1
ENV NEXT_TELEMETRY_DISABLED=1
ENV DO_NOT_TRACK=1
@@ -9,7 +9,7 @@ WORKDIR /usr/src/app
FROM node-pnpm AS builder
COPY ./ ./
RUN pnpm install --global turbo@2.8.9
RUN pnpm install --global turbo@2.9.9
RUN turbo prune @repo/website --docker
FROM node-pnpm AS installer
@@ -18,7 +18,7 @@ ENV IS_STANDALONE=true
COPY .gitignore .gitignore
COPY --from=builder /usr/src/app/out/json/ ./
COPY --from=builder /usr/src/app/out/pnpm-lock.yaml ./pnpm-lock.yaml
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm clean-install
COPY --from=builder /usr/src/app/out/full/ ./
COPY turbo.json turbo.json
+7 -7
View File
@@ -51,15 +51,15 @@
@apply tracking-wider italic;
}
blockquote {
@apply border-gray-lighter border-l-4 pl-3 italic;
@apply border-l-4 border-gray-lighter pl-3 italic;
}
kbd {
@apply bg-gray-lighter rounded-md px-2 dark:text-black;
@apply rounded-md bg-gray-lighter px-2 dark:text-black;
}
mark {
@apply bg-yellow rounded-md px-2;
@apply rounded-md bg-yellow px-2;
}
ol {
@@ -81,7 +81,7 @@
}
body {
@apply bg-background dark:bg-background-dark font-sans text-black dark:text-white;
@apply bg-background font-sans text-black dark:bg-background-dark dark:text-white;
}
@keyframes ripple {
@@ -101,7 +101,7 @@ body {
}
.prose {
@apply dark:text-gray-lighter !max-w-5xl scroll-smooth text-black;
@apply !max-w-5xl scroll-smooth text-black dark:text-gray-lighter;
}
.prose p {
@@ -122,11 +122,11 @@ body {
}
.prose a {
@apply text-primary dark:text-primary-dark !font-semibold;
@apply !font-semibold text-primary dark:text-primary-dark;
}
.prose strong {
@apply dark:text-gray-lighter text-black;
@apply text-black dark:text-gray-lighter;
}
.prose h2,
+1 -1
View File
@@ -32,5 +32,5 @@
"engines": {
"node": ">=24.0.0"
},
"packageManager": "pnpm@10.29.3+sha512.498e1fb4cca5aa06c1dcf2611e6fafc50972ffe7189998c409e90de74566444298ffe43e6cd2acdc775ba1aa7cc5e092a8b7054c811ba8c5770f84693d33d2dc"
"packageManager": "pnpm@11.0.6+sha512.97f906e1da2bedac3df83cadae04b4753a130092dd49d55cd36825ad3e623e9df3f97754f8f259e699172a360fac569acf2f908e7732bdae3eddb2dcf7e121fd"
}
+1 -1
View File
@@ -84,7 +84,7 @@ export const BlogPostContent: React.FC<BlogPostContentProps> = async (props) =>
},
img: (properties) => {
const { src = "", alt = "Blog Image" } = properties
const source = src.replace("../../../apps/website/public/", "/")
const source = (src as string).replace("../../../apps/website/public/", "/")
return (
<span className="flex flex-col items-center justify-center">
<Image src={source} alt={alt} width={1000} height={1000} className="size-auto" />
+1
View File
@@ -0,0 +1 @@
declare module "*.css"
+1 -2
View File
@@ -1,4 +1,3 @@
import type { AbstractIntlMessages } from "next-intl"
import { hasLocale } from "next-intl"
import { getRequestConfig } from "next-intl/server"
import { routing } from "./routing.ts"
@@ -12,7 +11,7 @@ export default getRequestConfig(async ({ requestLocale }) => {
const userMessages = (await import(`./translations/${locale}.json`)).default
const defaultMessages = (await import(`./translations/${LOCALE_DEFAULT}.json`)).default
const messages = deepMerge<AbstractIntlMessages>(defaultMessages, userMessages)
const messages = deepMerge(defaultMessages, userMessages)
return {
locale,
@@ -98,12 +98,12 @@ export const CurriculumVitaeWork: React.FC<CurriculumVitaeWorkProps> = () => {
<></>
)}
{workExperience.summary != null ? (
{workExperience.summary == null ? (
<></>
) : (
<div className="mt-2">
<p>{workExperience.summary}</p>
</div>
) : (
<></>
)}
</li>
)
+3 -3
View File
@@ -59,9 +59,9 @@ export const Button: React.FC<ButtonProps> = (props) => {
return (
<NextLink className={classNames(buttonVariants({ variant, size }), className)} {...rest}>
{leftIcon != null ? <span className="mr-2">{leftIcon}</span> : null}
{leftIcon == null ? null : <span className="mr-2">{leftIcon}</span>}
<span>{children}</span>
{rightIcon != null ? <span className="ml-2">{rightIcon}</span> : null}
{rightIcon == null ? null : <span className="ml-2">{rightIcon}</span>}
<Ripple color={rippleColor} />
</NextLink>
@@ -94,7 +94,7 @@ export const Button: React.FC<ButtonProps> = (props) => {
disabled={isDisabled}
{...rest}
>
{leftIconElement != null ? <span className="mr-2">{leftIconElement}</span> : null}
{leftIconElement == null ? null : <span className="mr-2">{leftIconElement}</span>}
<span>{children}</span>
{rightIcon != null && !isLoading ? <span className="ml-2">{rightIcon}</span> : null}
@@ -20,6 +20,7 @@ const typographyVariants = (options?: { variant?: TypographyVariant }): string =
export type TypographyProps<Component extends React.ElementType = "p"> = {
as?: Component
} & React.ComponentPropsWithoutRef<Component> & {
className?: string
variant?: TypographyVariant
}
@@ -11,12 +11,12 @@ export const AboutItem: React.FC<AboutItemProps> = (props) => {
<li className="flex items-center justify-between sm:justify-start">
<strong className="w-24 text-sm text-black lg:w-32 dark:text-white">{label}</strong>
<span className="block text-sm font-normal text-black dark:text-gray-lighter">
{link != null ? (
{link == null ? (
value
) : (
<a className="hover:underline" href={link}>
{value}
</a>
) : (
value
)}
</span>
</li>
+1 -1
View File
@@ -10,7 +10,7 @@ export const getPathnameWithoutLocale = (input: string): string => {
const locale = LOCALES.find((locale) => {
return input.startsWith(`/${locale}`)
})
const pathname = locale != null ? input.slice(locale.length + 1) : input
const pathname = locale == null ? input : input.slice(locale.length + 1)
if (pathname.length <= 0) {
return `/${pathname}`
}
+1927 -1965
View File
File diff suppressed because it is too large Load Diff
+25 -25
View File
@@ -7,35 +7,35 @@ catalogMode: "strict"
catalog:
# Turborepo
"turbo": "2.8.9"
"turbo": "2.9.9"
# TypeScript/Linting
"typescript": "5.9.3"
"@types/node": "25.2.3"
"typescript": "6.0.3"
"@types/node": "25.6.0"
"@total-typescript/ts-reset": "0.6.1"
"oxlint": "1.47.0"
"oxlint-tsgolint": "0.12.2"
"oxfmt": "0.32.0"
"eslint-config-conventions": "21.2.0"
"oxlint": "1.63.0"
"oxlint-tsgolint": "0.22.1"
"oxfmt": "0.48.0"
"eslint-config-conventions": "21.4.0"
"editorconfig-checker": "6.1.1"
# Utils
"mime": "4.1.0"
# React.js/Next.js
"next": "16.1.6"
"next-intl": "4.8.3"
"next": "16.2.4"
"next-intl": "4.11.0"
"next-themes": "0.4.6"
"react": "19.2.4"
"react-dom": "19.2.4"
"react": "19.2.5"
"react-dom": "19.2.5"
"@types/react": "19.2.14"
"@types/react-dom": "19.2.3"
"react-icons": "5.5.0"
"react-icons": "5.6.0"
# Blog
"@giscus/react": "3.1.0"
"gray-matter": "4.0.3"
"katex": "0.16.28"
"katex": "0.16.45"
"next-mdx-remote": "5.0.0"
"@mdx-js/mdx": "3.1.1"
"rehype-katex": "7.0.1"
@@ -47,31 +47,31 @@ catalog:
"@shikijs/rehype": "1.24.0"
# Markdown Lint
"markdownlint-cli2": "0.21.0"
"markdownlint-cli2": "0.22.1"
"markdownlint": "0.40.0"
"markdownlint-rule-relative-links": "5.0.1"
"markdownlint-rule-relative-links": "5.1.0"
# Storybook
"storybook": &storybook "10.2.8"
"storybook": &storybook "10.3.6"
"@storybook/addon-docs": *storybook
"@storybook/addon-a11y": *storybook
"@storybook/nextjs": *storybook
"@storybook/addon-themes": *storybook
"@storybook/test-runner": "0.24.2"
"@chromatic-com/storybook": "5.0.1"
"chromatic": "15.1.0"
"@storybook/test-runner": "0.24.3"
"@chromatic-com/storybook": "5.1.2"
"chromatic": "16.8.0"
# Testing
"playwright": &playwright "1.58.2"
"playwright": &playwright "1.59.1"
"@playwright/test": *playwright
"start-server-and-test": "2.1.3"
"start-server-and-test": "3.0.2"
# CSS
"postcss": "8.5.6"
"@tailwindcss/postcss": "4.1.18"
"postcss": "8.5.14"
"tailwindcss": &tailwindcss "4.2.4"
"@tailwindcss/postcss": *tailwindcss
"@tailwindcss/typography": "0.5.19"
"tailwindcss": "4.1.18"
"tailwind-merge": "3.4.1"
"tailwind-merge": "3.5.0"
"clsx": "2.1.1"
"@fontsource/montserrat": "5.2.8"