Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
325238f
feat(nuxt)!: rename runtime configuration key
dargmuesli Jul 8, 2025
aa7503e
Merge pull request #2024 from maevsi/feat/nuxt/runtime-configuration-…
dargmuesli Jul 8, 2025
fe6e7a1
chore(release): 13.0.0-beta.1 [skip ci]
semantic-release-bot Jul 8, 2025
440f602
Merge branch 'main' into beta
dargmuesli Dec 2, 2025
aa03b04
fix(store)!: remove plain jwt
dargmuesli Dec 2, 2025
6d59c87
chore(release): 13.0.0-beta.2 [skip ci]
semantic-release-bot Dec 2, 2025
78a94ab
Merge pull request #2137 from maevsi/fix/store/plain-jwt
dargmuesli Dec 2, 2025
116f233
chore(release): 13.0.0-beta.3 [skip ci]
semantic-release-bot Dec 2, 2025
3d08690
Merge branch 'main' into beta
dargmuesli Jan 6, 2026
ead013e
chore(release): 14.0.0-beta.1 [skip ci]
semantic-release-bot Jan 6, 2026
e9c433a
Merge branch 'main' into beta
dargmuesli Jan 17, 2026
4c153a1
chore(release): 14.0.0-beta.2 [skip ci]
semantic-release-bot Jan 17, 2026
196ed40
chore(github): add code formatting note to instructions
dargmuesli Jan 6, 2026
547df19
feat(security)!: use http-only cookie
dargmuesli Jan 6, 2026
357a623
fix(components): deduplicate icon wrapper
dargmuesli Jan 26, 2026
495a671
fix(deps): patch @nuxt/content
dargmuesli Jan 26, 2026
63a1728
test(e2e): rework seo tests
dargmuesli Jan 26, 2026
3fb6041
refactor(docker): improve development test user syntax
dargmuesli Jan 26, 2026
f441aa0
feat(content): improve error handling
dargmuesli Jan 26, 2026
8ab6ac7
Merge pull request #2174 from maevsi/feat/security/cookie
dargmuesli Jan 26, 2026
d6992a1
chore(release): 14.0.0-beta.3 [skip ci]
semantic-release-bot Jan 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .github/instructions/nuxt.instructions.md

This file was deleted.

8 changes: 8 additions & 0 deletions .github/instructions/project.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
applyTo: '**'
---
Do not use abbreviations in naming, except for instances where it would be weird not to abbreviate.
Prefer descriptive syntax for naming and only add comments where additional context is necessary.

Nuxt auto-imports are active, so there is no need to import Nuxt components, composables and Vue.js APIs.
Code formatting is done using Prettier.
125 changes: 125 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,128 @@
## [14.0.0-beta.3](https://github.com/maevsi/vibetype/compare/14.0.0-beta.2...14.0.0-beta.3) (2026-01-26)

### ⚠ BREAKING CHANGES

* **security:** use http-only cookie

### Features

* **content:** improve error handling ([f441aa0](https://github.com/maevsi/vibetype/commit/f441aa0f79227d4d105dc267c980b420c6654909))
* **security:** use http-only cookie ([547df19](https://github.com/maevsi/vibetype/commit/547df196a2f3653287966242cb449a374c125c4d))

### Bug Fixes

* **components:** deduplicate icon wrapper ([357a623](https://github.com/maevsi/vibetype/commit/357a623fc30479034bbd999fcac970eb4e5389b9))
* **deps:** patch @nuxt/content ([495a671](https://github.com/maevsi/vibetype/commit/495a67142ee3eeaa05cfcd0a5ddd9393ddb3e44a))

## [14.0.0-beta.2](https://github.com/maevsi/vibetype/compare/14.0.0-beta.1...14.0.0-beta.2) (2026-01-17)

### Bug Fixes

* schedule release ([c6806e4](https://github.com/maevsi/vibetype/commit/c6806e4bf13259209cd6b1590f64272e5a0d322d))

## [14.0.0-beta.1](https://github.com/maevsi/vibetype/compare/13.3.0...14.0.0-beta.1) (2026-01-06)

### ⚠ BREAKING CHANGES

* **store:** remove plain jwt
* **nuxt:** rename runtime configuration key

### Features

* **nuxt:** rename runtime configuration key ([325238f](https://github.com/maevsi/vibetype/commit/325238fc96e97ad2b44ffe7d1e96da654e175cf5))

### Bug Fixes

* **store:** remove plain jwt ([aa03b04](https://github.com/maevsi/vibetype/commit/aa03b0457db8790c4b895b59d3d788d3b0ca8e6c))

## [13.0.0-beta.3](https://github.com/maevsi/vibetype/compare/13.0.0-beta.2...13.0.0-beta.3) (2025-12-02)

### ⚠ BREAKING CHANGES

* **store:** remove plain jwt

### Bug Fixes

* **store:** remove plain jwt ([aa03b04](https://github.com/maevsi/vibetype/commit/aa03b0457db8790c4b895b59d3d788d3b0ca8e6c))

## [13.0.0-beta.2](https://github.com/maevsi/vibetype/compare/13.0.0-beta.1...13.0.0-beta.2) (2025-12-02)

### Features

* **account:** rework creation success page ([7d51369](https://github.com/maevsi/vibetype/commit/7d51369a2ce2b14c7185ce7e9ad447b9fe22ce62))
* **account:** show profile picture in menu ([2d454fd](https://github.com/maevsi/vibetype/commit/2d454fdbd2bccee58af78271c7fd146cbfbba92d))
* **account:** unify detail buttons ([09ec5e6](https://github.com/maevsi/vibetype/commit/09ec5e65f2e7426abdc41dbd5987edfc392438d1))
* **app:** disable text selection ([df7b53d](https://github.com/maevsi/vibetype/commit/df7b53d50e9a1f364057935d46d985d4a1a28160))
* **components:** double menu bottom padding for ios ([54a81f3](https://github.com/maevsi/vibetype/commit/54a81f324f73a3b71cf5b96ef3e34b0ee196417c))
* **components:** replace toast with sonner ([500e1bd](https://github.com/maevsi/vibetype/commit/500e1bdfdedffa7703cff6b0978de32a6ce1a745))
* **components:** update error design ([07e75d7](https://github.com/maevsi/vibetype/commit/07e75d7449c40891814d700fb8082235bfc09904))
* **composables:** add alert error ([3119c37](https://github.com/maevsi/vibetype/commit/3119c379ae24a1af109b4b1a0c5765ea33941f1c))
* **composables:** centralize urql result handling ([cec435e](https://github.com/maevsi/vibetype/commit/cec435efd820467d295c39e7f1fd032174dffe5f))
* **content:** remove dispute resolution section from imprint ([ce18763](https://github.com/maevsi/vibetype/commit/ce18763b1a408107f6653a1b5411e74946ce0d72))
* **docs:** add redirection to app stores ([4369d28](https://github.com/maevsi/vibetype/commit/4369d2867cac50ecbaff4ce3a25dddee14511095))
* **docs:** do not redirect when app is installed ([c82b422](https://github.com/maevsi/vibetype/commit/c82b4227e419e8ffa5263e838972ca8ea3749f23))
* **event:** show link option no matter the attendance type ([1c28141](https://github.com/maevsi/vibetype/commit/1c2814129b01c9b77faf689cc5b817389c3bd641))
* **head:** test disabled scaling ([e8730bd](https://github.com/maevsi/vibetype/commit/e8730bd8a2ff6d2d38a4793433ecb57db6574948))
* **i18n:** uppercase global site name ([bd96c08](https://github.com/maevsi/vibetype/commit/bd96c0800493ed000a63b87b2bf5174f252c9669))
* **notification:** replace `moment-timezone` with `Intl` ([8c88d57](https://github.com/maevsi/vibetype/commit/8c88d57428a440588239d76a8b933bb812d3242b))
* **pages:** drop marketing ([c67f333](https://github.com/maevsi/vibetype/commit/c67f3333dfd7606699e31049256efe0c8e70fd29))
* **recommendation:** add ([19b3f5b](https://github.com/maevsi/vibetype/commit/19b3f5b33c394675a556782adb4aa22e7600c8a9))
* **recommendation:** show up to 10 ([ec9678d](https://github.com/maevsi/vibetype/commit/ec9678d5f41c0ce41e916385fe953fddcddc0887))
* **session:** allow to clear api client data ([278b484](https://github.com/maevsi/vibetype/commit/278b484ec1e29e2226c83bce48de0dd2976da285))
* **session:** redirect to root on sign out ([295bc31](https://github.com/maevsi/vibetype/commit/295bc3103139493f4b4c6aeb1d469fabc6d8c440))
* **tiptap:** support justified alignment ([f17ca9c](https://github.com/maevsi/vibetype/commit/f17ca9cb0ab2fe7083a1c66b8b624e33bf5b5b84))

### Bug Fixes

* **account:** unref date for registration ([e35cb03](https://github.com/maevsi/vibetype/commit/e35cb03a6cf11466b88c89fca115d29d76621f45))
* **attendance:** add missing hint to camera error ([d3b7233](https://github.com/maevsi/vibetype/commit/d3b72339d65a7ff5eb11d9825c4e6171e6b0138d))
* **attendance:** don't log error twice ([d2e12d1](https://github.com/maevsi/vibetype/commit/d2e12d14abd2ee017197e5e5f39466a98946e9b0))
* **components:** add more padding for bottom menu on ios ([#2071](https://github.com/maevsi/vibetype/issues/2071)) ([6126590](https://github.com/maevsi/vibetype/commit/6126590f08b25e59df0713185835338454f52b09))
* **components:** align dashboard menu item name ([11c7702](https://github.com/maevsi/vibetype/commit/11c7702988b42be2bf53d6784e5d25f51a7a49f8))
* **components:** correct time zone display ([33d1583](https://github.com/maevsi/vibetype/commit/33d1583c862b4723205d30f48f8b6e9fd531058e))
* **early-bird:** correct button label ([f980ed3](https://github.com/maevsi/vibetype/commit/f980ed3a189872e8f47de86a0a9d31037ea0a5b9))
* **event:** correct maximum guest count fetching ([95c6528](https://github.com/maevsi/vibetype/commit/95c6528f0d2a79444acb56f3103646307a89f9bc))
* **event:** relax ical data requirements ([2ccf25b](https://github.com/maevsi/vibetype/commit/2ccf25b764db9488a496c0a6cd1840ecd9adb71e))
* **event:** show match only on recommendation ([24a8c3c](https://github.com/maevsi/vibetype/commit/24a8c3c3367e9c6bdf1e4cb33e0840b0c1de15ac))
* **event:** update card style ([69a8170](https://github.com/maevsi/vibetype/commit/69a8170e5cde34a71c438dce9e99a08f474f0702))
* **gql:** correct variable computation ([42a5885](https://github.com/maevsi/vibetype/commit/42a58859704615ad9720e541949e7e6850a27dc2))
* **legal-term:** correct loading ([65e9c80](https://github.com/maevsi/vibetype/commit/65e9c80b5f5c926d25ba148380ccf18e6e9f60b6))
* **modules:** correct pwa scope extensions ([3b5d072](https://github.com/maevsi/vibetype/commit/3b5d072ef29571ef2397303a4c6f2dbd218fe3f9))
* **notification:** correct enum capitalization for invitation visibility ([6b7c4bd](https://github.com/maevsi/vibetype/commit/6b7c4bd701824318e2b92ab8d6ade4de30434059))
* **notification:** only attach successfully fetched ical data ([ba52f0b](https://github.com/maevsi/vibetype/commit/ba52f0bb79b852e2da44b98057454e9e6ae6b3e0))
* **notification:** skip empty payloads ([2f34b68](https://github.com/maevsi/vibetype/commit/2f34b689ceec57f4af13530c1823f86718db173f))
* **preference:** await asynchronous data at initialization ([bb3422b](https://github.com/maevsi/vibetype/commit/bb3422be5c649d1f22fa30a20266ad42bef78630))
* **pwa:** set id ([cf486d9](https://github.com/maevsi/vibetype/commit/cf486d972158b0bf0b7a10bae2483189671702c2))
* **recommendation:** don't show section if content is empty ([ce65f88](https://github.com/maevsi/vibetype/commit/ce65f8852ce7b4b07e9ef9b8d825f1e709be57d9))
* **recommendation:** show just one for now ([77aaacf](https://github.com/maevsi/vibetype/commit/77aaacf3cceba19408cd4a346220336c1157a090))
* schedule release ([b695e10](https://github.com/maevsi/vibetype/commit/b695e10c7f4db18ff1447871b2c08174dd565a88))
* schedule release ([67695d9](https://github.com/maevsi/vibetype/commit/67695d95ffe301803feadb7702937ccd310d2e5e))
* schedule release ([f8f5a6c](https://github.com/maevsi/vibetype/commit/f8f5a6cf441e300da9e88b7b25403b0834c583be))
* schedule release ([e273b95](https://github.com/maevsi/vibetype/commit/e273b95e7c5d3364eb42025518372e7e24c6145a))
* **security:** apply camera permission globally ([88043a3](https://github.com/maevsi/vibetype/commit/88043a310f86688c27a84a807d242b631ff64ec9))
* **session:** move developer information button up ([9e1bc5c](https://github.com/maevsi/vibetype/commit/9e1bc5c939e0d473303b7d3b763bb7781d62ac50))
* **session:** redirect from root to dashboard when signed in ([41fdbfe](https://github.com/maevsi/vibetype/commit/41fdbfeda8b829aa731cdb1fadef28aca09534f5))
* **upload:** unref uppy ([e7dd28e](https://github.com/maevsi/vibetype/commit/e7dd28e841890b799854cc3746191af09b4cb70d))

### Performance Improvements

* **aws:** complete migration to ses client v2 ([1ed17ac](https://github.com/maevsi/vibetype/commit/1ed17ac31a7fc565ea1984ed367d3bf1738d697a))
* **docker:** add volume for development node modules ([9ec8a43](https://github.com/maevsi/vibetype/commit/9ec8a435dded307e21948a8a6d2854cc2b79fded))
* **docker:** cache playwright node modules separately ([7187cf0](https://github.com/maevsi/vibetype/commit/7187cf0c30bd3fb96ec2b6a4c7617761251a2a87))
* **docker:** use cache mounts ([ef0a6db](https://github.com/maevsi/vibetype/commit/ef0a6db52f1edcd9752d9ac9641571f4bcdfbc8b))
* **event:** replace `dayjs` with `Intl` ([44240d7](https://github.com/maevsi/vibetype/commit/44240d7034ea6e4f713b215294d3c6743e99703a))
* **utils:** replace copy dependency ([4eb7c65](https://github.com/maevsi/vibetype/commit/4eb7c65054774190a18dd76a23d49a4a80b1e1c9))

## [13.0.0-beta.1](https://github.com/maevsi/vibetype/compare/12.15.1...13.0.0-beta.1) (2025-07-08)

### ⚠ BREAKING CHANGES

* **nuxt:** rename runtime configuration key

### Features

* **nuxt:** rename runtime configuration key ([325238f](https://github.com/maevsi/vibetype/commit/325238fc96e97ad2b44ffe7d1e96da654e175cf5))

## [13.3.1](https://github.com/maevsi/vibetype/compare/13.3.0...13.3.1) (2026-01-17)

### Bug Fixes
Expand Down
23 changes: 12 additions & 11 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ FROM base-image AS prepare

COPY ./pnpm-lock.yaml ./package.json ./

## pnpm patches
# COPY ./patches ./patches
# pnpm patches
COPY ./patches ./patches

RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \
pnpm fetch
Expand Down Expand Up @@ -130,20 +130,20 @@ RUN corepack enable \

FROM test-e2e-base-image AS test-e2e_development

ARG UNAME=e2e
ARG UID=1000
ARG GID=1000
ARG USER_NAME=e2e
ARG USER_ID=1000
ARG GROUP_ID=1000

ENV NODE_ENV=development

COPY ./docker-entrypoint.sh /usr/local/bin/

RUN groupadd -g $GID -o $UNAME \
&& useradd -m -l -u $UID -g $GID -o -s /bin/bash $UNAME \
RUN groupadd -g $GROUP_ID -o $USER_NAME \
&& useradd -m -l -u $USER_ID -g $GROUP_ID -o -s /bin/bash $USER_NAME \
&& mkdir /srv/app/node_modules \
&& chown $UID:$GID /srv/app/node_modules
&& chown $USER_ID:$GROUP_ID /srv/app/node_modules

COPY ./docker-entrypoint.sh /usr/local/bin/

USER $UNAME
USER $USER_NAME

VOLUME /srv/.pnpm-store
VOLUME /srv/app
Expand Down Expand Up @@ -199,6 +199,7 @@ RUN pnpm --dir tests run test:e2e:server:node
FROM base-image AS collect

COPY --from=build-node --chown=node /srv/app/src/.output ./.output
COPY --from=build-node --chown=node /srv/app/src/scripts ./scripts
COPY --from=build-node --chown=node /srv/app/src/package.json ./package.json
# COPY --from=build-static /srv/app/package.json /dev/null
COPY --from=lint /srv/app/package.json /dev/null
Expand Down
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,21 @@
"debug": "4.4.3",
"nuxt-og-image": "5.1.12",
"parse5-parser-stream": "8.0.0"
},
"patchedDependencies": {
"@nuxt/content": "patches/@nuxt__content.patch"
}
},
"private": true,
"scripts": {
"build": "pnpm --dir src run build",
"build:node": "nuxt --dir src run build:node",
"build:static": "nuxt --dir src run build:static",
"dev": "pnpm --dir src run start:dev",
"dev": "pnpm --dir src run dev",
"generate": "pnpm --dir src run generate",
"lint": "pnpm -r lint",
"start": "pnpm --dir src run start",
"start:dev": "pnpm --dir src run start:dev",
"start:development": "pnpm --dir src run start:development",
"start:node": "pnpm --dir src run start:node",
"start:static": "pnpm --dir src run start:static",
"test:e2e:docker:server:dev": "pnpm --dir tests run test:e2e:docker:server:dev",
Expand Down
14 changes: 14 additions & 0 deletions patches/@nuxt__content.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
diff --git a/dist/runtime/internal/api.js b/dist/runtime/internal/api.js
index 0a41128168783b69146a578b8f89f5e02d78a923..8a07f6817c9b9f6889dbd134d5387ce73e62fcc3 100644
--- a/dist/runtime/internal/api.js
+++ b/dist/runtime/internal/api.js
@@ -6,7 +6,8 @@ async function fetchContent(event, collection, path, options) {
const fetchOptions = {
...options,
headers: {
- ...headers,
+ ...(headers.cookie ? { cookie: headers.cookie } : {}),
+ ...(event?.context.nitro.runtimeConfig?.csurf.headerName && event.context.csrfToken ? { [event.context.nitro.runtimeConfig.csurf.headerName]: event.context.csrfToken } : {}),
...options.headers
},
query: { v: checksums[String(collection)], t: import.meta.dev ? Date.now() : void 0 }
12 changes: 10 additions & 2 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 42 additions & 23 deletions src/.config/certificates/mkcert.sh
Original file line number Diff line number Diff line change
@@ -1,30 +1,49 @@
#!/bin/sh
THIS=$(dirname "$(readlink -f "$0")")
set -e

create() {
NAME="$1"
shift
CONTENT=$*

path="$THIS/$NAME"
certfile="$path.crt"
keyfile="$path.key"

if [ "$CONTENT" != "" ]; then
# shellcheck disable=SC2086
mkcert \
-cert-file "$certfile" \
-ecdsa \
-key-file "$keyfile" $CONTENT
fi
SCRIPT_DIRECTORY=$(dirname "$(readlink -f "$0")")
CERTIFICATE_SUFFIX="-dev"

[ -n "$CI" ] && CERTIFICATE_SUFFIX="-ci"

is_certificate_valid() {
certificate_path="$1"
root_ca_path="$(mkcert -CAROOT)/rootCA.pem"

cat "$(mkcert -CAROOT)/rootCA.pem" >> "$certfile"
[ -f "$certificate_path" ] || return 1

openssl verify -CAfile "$root_ca_path" "$certificate_path" >/dev/null 2>&1 && openssl x509 -checkend 86400 -noout -in "$certificate_path" >/dev/null 2>&1
}

echo "key crt" | tr ' ' '\n' | while read -r glob; do
if test -n "$(find "$THIS" -maxdepth 1 -name "*.$glob" -print -quit)"; then
rm "$THIS"/*."$glob"
generate_certificate() {
certificate_name="$1"
shift
domains="$*"

certificate_path="${SCRIPT_DIRECTORY}/${certificate_name}${CERTIFICATE_SUFFIX}.crt"
key_file_path="${SCRIPT_DIRECTORY}/${certificate_name}${CERTIFICATE_SUFFIX}.key"

if is_certificate_valid "$certificate_path"; then
echo "✓ Certificate '${certificate_name}' is valid"
return 0
fi

if [ -f "$certificate_path" ]; then
echo "✗ Removing outdated certificate: '${certificate_name}'"
rm -f "$certificate_path" "$key_file_path"
fi
done

create "ssl" "localhost" "app.localhost" "127.0.0.1" "0.0.0.0"
echo "→ Generating certificate: '${certificate_name}'"
# shellcheck disable=SC2086
mkcert \
-cert-file "$certificate_path" \
-key-file "$key_file_path" \
-ecdsa \
$domains

cat "$(mkcert -CAROOT)/rootCA.pem" >> "$certificate_path"

echo "✓ Certificate generated: '${certificate_name}'"
}

generate_certificate "ssl" "localhost" "app.localhost" "127.0.0.1" "0.0.0.0"
Loading