6 Commits

Author SHA1 Message Date
fa2e249e94 Merge pull request 'feat(front-end): linkedin logo' (#56) from dev into main
All checks were successful
Build and Deploy / test-backend (push) Successful in 30s
Build and Deploy / test-frontend (push) Successful in 1m5s
Build and Deploy / build-and-push (push) Successful in 18s
Build and Deploy / deploy (push) Successful in 22s
Reviewed-on: #56
2026-03-25 19:26:41 +01:00
132f0f3646 feat(front-end): linkedin logo
All checks were successful
Build and Deploy / test-backend (push) Successful in 37s
Build and Deploy / test-frontend (push) Successful in 1m4s
Build and Deploy / build-and-push (push) Successful in 36s
Build and Deploy / deploy (push) Successful in 22s
PR Checks / prettier-autofix (pull_request) Successful in 8s
PR Checks / security-sast (pull_request) Successful in 35s
PR Checks / test-backend (pull_request) Successful in 30s
PR Checks / test-frontend (pull_request) Successful in 1m6s
2026-03-25 19:18:38 +01:00
3cbcec5f53 Merge pull request 'dev' (#55) from dev into main
All checks were successful
Build and Deploy / test-backend (push) Successful in 29s
Build and Deploy / test-frontend (push) Successful in 1m46s
Build and Deploy / deploy (push) Successful in 35s
Build and Deploy / build-and-push (push) Successful in 1m5s
Reviewed-on: #55
2026-03-25 11:57:49 +01:00
printcalc-ci
8835175fb3 style: apply prettier formatting
All checks were successful
PR Checks / prettier-autofix (pull_request) Successful in 12s
PR Checks / security-sast (pull_request) Successful in 52s
PR Checks / test-frontend (pull_request) Successful in 1m17s
PR Checks / test-backend (pull_request) Successful in 27s
2026-03-25 10:46:11 +00:00
28c3abdb4a Merge branch 'main' into dev
All checks were successful
Build and Deploy / test-backend (push) Successful in 28s
PR Checks / prettier-autofix (pull_request) Successful in 14s
Build and Deploy / test-frontend (push) Successful in 1m41s
PR Checks / security-sast (pull_request) Successful in 52s
PR Checks / test-backend (pull_request) Successful in 30s
Build and Deploy / build-and-push (push) Successful in 32s
Build and Deploy / deploy (push) Successful in 20s
PR Checks / test-frontend (pull_request) Successful in 1m42s
2026-03-25 11:44:01 +01:00
1b7c0c48e7 Merge pull request 'dev' (#54) from dev into main
All checks were successful
Build and Deploy / test-backend (push) Successful in 27s
Build and Deploy / test-frontend (push) Successful in 59s
Build and Deploy / build-and-push (push) Successful in 28s
Build and Deploy / deploy (push) Successful in 19s
Reviewed-on: #54
2026-03-24 13:29:50 +01:00
6 changed files with 111 additions and 18 deletions

View File

@@ -137,7 +137,9 @@ export const serverOriginInterceptor: HttpInterceptorFn = (req, next) => {
return next(req); return next(req);
} }
const request = inject(REQUEST, { optional: true }) as ServerRequestLike | null; const request = inject(REQUEST, {
optional: true,
}) as ServerRequestLike | null;
const origin = resolveApiOrigin(request, req.url); const origin = resolveApiOrigin(request, req.url);
if (!origin) { if (!origin) {
return next(req); return next(req);

View File

@@ -22,10 +22,30 @@
</div> </div>
<div class="col social"> <div class="col social">
<!-- Social Placeholders --> <div class="social-link-row">
<div class="social-icon"></div> <span class="social-name">Joe Küng:</span>
<div class="social-icon"></div> <a
<div class="social-icon"></div> class="social-icon-link"
href="https://www.linkedin.com/in/joe-k%C3%BCng-31831828b/"
target="_blank"
rel="noopener noreferrer"
aria-label="Joe Küng LinkedIn"
>
<span class="social-icon-linkedin" aria-hidden="true"></span>
</a>
</div>
<div class="social-link-row">
<span class="social-name">Matteo Caletti:</span>
<a
class="social-icon-link"
href="https://www.linkedin.com/in/matteo-caletti-94291a3b6/"
target="_blank"
rel="noopener noreferrer"
aria-label="Matteo Caletti LinkedIn"
>
<span class="social-icon-linkedin" aria-hidden="true"></span>
</a>
</div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@@ -66,11 +66,69 @@
.social { .social {
display: flex; display: flex;
flex-direction: column;
align-items: flex-start;
gap: var(--space-3); gap: var(--space-3);
} }
.social-icon {
width: 24px; .social-link-row {
height: 24px; display: flex;
background-color: var(--color-neutral-800); align-items: center;
border-radius: 50%; gap: var(--space-3);
}
.social-name {
color: var(--color-neutral-200);
font-size: 0.875rem;
}
.social-icon-link {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
border-radius: 50%;
background-color: var(--color-neutral-50);
color: #0a66c2;
transition:
transform 0.2s ease,
background-color 0.2s ease,
color 0.2s ease;
&:hover {
background-color: #0a66c2;
color: var(--color-neutral-50);
transform: translateY(-1px);
}
&:focus-visible {
outline: 2px solid var(--color-secondary-500);
outline-offset: 2px;
}
}
.social-icon-linkedin {
display: block;
width: 1rem;
height: 1rem;
background-color: currentColor;
mask-image: url("/assets/images/SVG/linkedin-svgrepo-com.svg");
mask-repeat: no-repeat;
mask-position: center;
mask-size: contain;
-webkit-mask-image: url("/assets/images/SVG/linkedin-svgrepo-com.svg");
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
-webkit-mask-size: contain;
}
@media (max-width: 768px) {
.social {
align-items: center;
}
.social-link-row {
justify-content: center;
}
} }

View File

@@ -220,7 +220,8 @@ describe('ShopService', () => {
next: (product) => { next: (product) => {
response = product; response = product;
}, },
error: () => fail('Expected stale slug tails to resolve from the uuid prefix'), error: () =>
fail('Expected stale slug tails to resolve from the uuid prefix'),
}); });
const request = httpMock.expectOne((request) => { const request = httpMock.expectOne((request) => {
@@ -243,7 +244,8 @@ describe('ShopService', () => {
next: (product) => { next: (product) => {
response = product; response = product;
}, },
error: () => fail('Expected bare uuid path to resolve from the uuid prefix'), error: () =>
fail('Expected bare uuid path to resolve from the uuid prefix'),
}); });
const request = httpMock.expectOne((request) => { const request = httpMock.expectOne((request) => {

View File

@@ -295,12 +295,9 @@ export class ShopService {
? `${this.apiUrl}/products/by-id-prefix/${encodeURIComponent(productIdPrefix)}` ? `${this.apiUrl}/products/by-id-prefix/${encodeURIComponent(productIdPrefix)}`
: `${this.apiUrl}/products/by-path/${encodeURIComponent(normalizedPath)}`; : `${this.apiUrl}/products/by-path/${encodeURIComponent(normalizedPath)}`;
return this.http.get<ShopProductDetail>( return this.http.get<ShopProductDetail>(endpoint, {
endpoint,
{
params: this.buildLangParams(), params: this.buildLangParams(),
}, });
);
} }
private normalizePublicPath(value: string | null | undefined): string { private normalizePublicPath(value: string | null | undefined): string {

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 382 382" xml:space="preserve">
<path style="fill:#0077B7;" d="M347.445,0H34.555C15.471,0,0,15.471,0,34.555v312.889C0,366.529,15.471,382,34.555,382h312.889
C366.529,382,382,366.529,382,347.444V34.555C382,15.471,366.529,0,347.445,0z M118.207,329.844c0,5.554-4.502,10.056-10.056,10.056
H65.345c-5.554,0-10.056-4.502-10.056-10.056V150.403c0-5.554,4.502-10.056,10.056-10.056h42.806
c5.554,0,10.056,4.502,10.056,10.056V329.844z M86.748,123.432c-22.459,0-40.666-18.207-40.666-40.666S64.289,42.1,86.748,42.1
s40.666,18.207,40.666,40.666S109.208,123.432,86.748,123.432z M341.91,330.654c0,5.106-4.14,9.246-9.246,9.246H286.73
c-5.106,0-9.246-4.14-9.246-9.246v-84.168c0-12.556,3.683-55.021-32.813-55.021c-28.309,0-34.051,29.066-35.204,42.11v97.079
c0,5.106-4.139,9.246-9.246,9.246h-44.426c-5.106,0-9.246-4.14-9.246-9.246V149.593c0-5.106,4.14-9.246,9.246-9.246h44.426
c5.106,0,9.246,4.14,9.246,9.246v15.655c10.497-15.753,26.097-27.912,59.312-27.912c73.552,0,73.131,68.716,73.131,106.472
L341.91,330.654L341.91,330.654z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB