Compare commits

...
7 Commits
Author SHA1 Message Date
Patryk-Kuchta a18189dcea Merge pull request 'fix: upgrade Node to 24 so the Docker build works with sharp 0.35' (#3) from fix-docker-node-24 into main
Security Audit / Security Vulnerability Scan (push) Successful in 20s
Code Quality Check / Lint & Type Check (push) Successful in 23s
Reviewed-on: #3
2026-10-19 18:40:04 +00:00
Patryk-KuchtaandClaude Opus 5 9c597cbc80 fix: install pnpm via corepack in CI
Code Quality Check / Lint & Type Check (pull_request) Successful in 19s
Security Audit / Security Vulnerability Scan (pull_request) Successful in 19s
pnpm/action-setup's self-installer fails on Node 24 ("Running
self-installer..." exits 1), breaking both workflows. Use corepack
instead, which picks up the pnpm version from the packageManager field
and matches how the Dockerfile installs it.

Also move upload-artifact to v4, since v3 is retired.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-10-19 19:39:16 +01:00
Patryk-KuchtaandClaude Opus 5 ab7b2fa6f4 fix: upgrade Node to 24 so the Docker build works with sharp 0.35
Security Audit / Security Vulnerability Scan (pull_request) Failing after 13s
Code Quality Check / Lint & Type Check (pull_request) Failing after 13s
sharp 0.35.5 requires Node >=20.9.0, so the node:18-alpine image failed
to load the linuxmusl-arm64 binary and the production build broke.

Move the image and both CI workflows to Node 24 (current Active LTS),
raise the engines floor to the version sharp actually needs, and declare
packageManager to silence the corepack warning.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-10-19 19:37:21 +01:00
Patryk-Kuchta 8914a92bcc Merge pull request 'Senior consultant role update' (#2) from senior-consultant-role-update into main
Security Audit / Security Vulnerability Scan (push) Successful in 20s
Code Quality Check / Lint & Type Check (push) Successful in 23s
Reviewed-on: #2
2026-10-19 18:34:05 +00:00
Patryk-KuchtaandClaude Opus 5 d2d0705e5b chore: update CV to August 2026 version
Code Quality Check / Lint & Type Check (pull_request) Successful in 22s
Security Audit / Security Vulnerability Scan (pull_request) Successful in 22s
Reflects the Senior Technical Consultant role in the AI & Data Practice.
Filename kept so the existing /PatrykKuchta_CV.pdf link is unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-10-19 19:33:35 +01:00
Patryk-KuchtaandClaude Opus 5 8c3e97ab73 chore: patch vulnerable dependencies
Security Audit / Security Vulnerability Scan (pull_request) Successful in 32s
Code Quality Check / Lint & Type Check (pull_request) Successful in 32s
Upgrade next to 15.5.28 (clears 2 critical RCE advisories plus the SSRF,
middleware-bypass and cache-poisoning set), sharp to 0.35.5, sass,
@typescript-eslint/*, eslint-config-next and react-icons within their
current majors. Add pnpm overrides to force patched transitives
(js-yaml, flatted, brace-expansion, minimatch, postcss).

Audit goes from 63 advisories (2 critical, 38 high) to 1 high with no
upstream fix available.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-10-19 19:24:08 +01:00
Patryk-KuchtaandClaude Opus 5 1446679f4a feat: promote to Senior Technical Consultant and use British spelling
Update the current role to Senior Technical Consultant (AI & Data) from
October 2026, close out the previous Technical Consultant entry, and
convert site copy to British spelling.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-10-19 19:21:12 +01:00
11 changed files with 1005 additions and 656 deletions

No files matched your search

+3 -5
View File
@@ -26,12 +26,10 @@ jobs:
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: '18' node-version: '24'
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v4 run: corepack enable
with:
version: 10
- name: Get pnpm store directory - name: Get pnpm store directory
shell: bash shell: bash
@@ -60,7 +58,7 @@ jobs:
run: pnpm outdated || true run: pnpm outdated || true
- name: Upload security report - name: Upload security report
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
if: always() if: always()
with: with:
name: security-report name: security-report
+2 -4
View File
@@ -24,12 +24,10 @@ jobs:
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: '18' node-version: '24'
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v4 run: corepack enable
with:
version: 10
- name: Get pnpm store directory - name: Get pnpm store directory
shell: bash shell: bash
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:18-alpine AS base FROM node:24-alpine AS base
RUN apk add --no-cache libc6-compat RUN apk add --no-cache libc6-compat
RUN corepack enable && corepack prepare [email protected] --activate RUN corepack enable && corepack prepare [email protected] --activate
+16 -11
View File
@@ -2,6 +2,7 @@
"name": "new_portfolio", "name": "new_portfolio",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"packageManager": "[email protected]",
"scripts": { "scripts": {
"dev": "next dev -p 4000", "dev": "next dev -p 4000",
"build": "next build", "build": "next build",
@@ -17,35 +18,39 @@
"animejs": "^3.2.2", "animejs": "^3.2.2",
"aos": "^2.3.4", "aos": "^2.3.4",
"eslint": "8.57.1", "eslint": "8.57.1",
"eslint-config-next": "15.5.12", "eslint-config-next": "15.5.28",
"next": "^15.5.12", "next": "^15.5.28",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-icons": "^5.5.0", "react-icons": "^5.7.0",
"react-transition-group": "^4.4.5", "react-transition-group": "^4.4.5",
"sharp": "^0.34.5", "sharp": "^0.35.5",
"typescript": "5.9.3" "typescript": "5.9.3"
}, },
"devDependencies": { "devDependencies": {
"@next/eslint-plugin-next": "^15.5.12", "@next/eslint-plugin-next": "^15.5.28",
"@types/aos": "^3.0.7", "@types/aos": "^3.0.8",
"@types/node": "^20.19.33", "@types/node": "^20.19.33",
"@types/react": "^18.3.28", "@types/react": "^18.3.28",
"@types/react-dom": "^18.3.7", "@types/react-dom": "^18.3.7",
"@types/react-transition-group": "^4.4.12", "@types/react-transition-group": "^4.4.12",
"@typescript-eslint/eslint-plugin": "^8.56.0", "@typescript-eslint/eslint-plugin": "^8.72.0",
"@typescript-eslint/parser": "^8.56.0", "@typescript-eslint/parser": "^8.72.0",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.2.0",
"sass": "^1.97.3" "sass": "^1.105.2"
}, },
"engines": { "engines": {
"node": ">=18.0.0", "node": ">=20.9.0",
"pnpm": ">=8.0.0" "pnpm": ">=8.0.0"
}, },
"pnpm": { "pnpm": {
"overrides": { "overrides": {
"minimatch": ">=10.2.1" "js-yaml": ">=4.3.2",
"flatted": ">=3.4.2",
"brace-expansion": ">=5.0.12",
"minimatch": ">=10.2.3",
"postcss": ">=8.5.23"
} }
} }
} }
+959 -622
View File
File diff suppressed because it is too large. Load diff
Binary file not shown.
+4 -4
View File
@@ -2,23 +2,23 @@ export interface ICurrentWorkData {
role: string; role: string;
company: string; company: string;
companyUrl: string; companyUrl: string;
specialization: string; specialisation: string;
location: string; location: string;
imagePath: string; imagePath: string;
paragraphs: string[]; paragraphs: string[];
} }
const currentWorkData: ICurrentWorkData = { const currentWorkData: ICurrentWorkData = {
role: "Technical Consultant", role: "Senior Technical Consultant",
company: "Softwire", company: "Softwire",
companyUrl: "https://www.softwire.com/", companyUrl: "https://www.softwire.com/",
specialization: "AI Engineering", specialisation: "AI & Data",
location: "Manchester, United Kingdom", location: "Manchester, United Kingdom",
imagePath: "/portfolio/work_profile.png", imagePath: "/portfolio/work_profile.png",
paragraphs: [ paragraphs: [
"I spend much of my time <strong>designing and evaluating AI systems</strong>, or systems where AI plays a central role. My work involves the full lifecycle of AI implementation, from initial concept through to production deployment.", "I spend much of my time <strong>designing and evaluating AI systems</strong>, or systems where AI plays a central role. My work involves the full lifecycle of AI implementation, from initial concept through to production deployment.",
"I have <strong>delivered training and adoption materials</strong> that have significantly improved AI usage within Softwire, helping teams understand both the capabilities and limitations of AI technologies. I've also created <strong>autonomous AI pipelines</strong> that have reduced developer burden by automating tasks that were previously time-consuming manual processes.", "I have <strong>delivered training and adoption materials</strong> that have significantly improved AI usage within Softwire, helping teams understand both the capabilities and limitations of AI technologies. I've also created <strong>autonomous AI pipelines</strong> that have reduced developer burden by automating tasks that were previously time-consuming manual processes.",
"Working with <strong>diverse clients</strong> (from the highly skeptical to the enthusiastically optimistic), I've developed expertise in <strong>communicating AI benefits</strong> while respecting organizational constraints. This involves not just technical implementation, but also the human and ethical dimensions of AI adoption.", "Working with <strong>diverse clients</strong> (from the highly sceptical to the enthusiastically optimistic), I've developed expertise in <strong>communicating AI benefits</strong> while respecting organisational constraints. This involves not just technical implementation, but also the human and ethical dimensions of AI adoption.",
"A particular area of passion for me is <strong>Ethical AI and Sustainable AI</strong>. I've spent considerable time advocating for sustainability considerations in AI systems, conducting <strong>environmental assessments for embedded AI</strong>, and building adoption systems that leverage <strong>local open-source AI</strong> instead of relying on large providers whose ethical standards can be questionable." "A particular area of passion for me is <strong>Ethical AI and Sustainable AI</strong>. I've spent considerable time advocating for sustainability considerations in AI systems, conducting <strong>environmental assessments for embedded AI</strong>, and building adoption systems that leverage <strong>local open-source AI</strong> instead of relying on large providers whose ethical standards can be questionable."
] ]
}; };
+5 -5
View File
@@ -14,11 +14,11 @@ const projectData : IProjectArguments[] = [
github: "https://github.com/KuchtaVR6/Multi-LLM-Agent", github: "https://github.com/KuchtaVR6/Multi-LLM-Agent",
document: "/multiAgent.pdf", document: "/multiAgent.pdf",
title: "Efficient Agents with Hot-Swappable Adapters", title: "Efficient Agents with Hot-Swappable Adapters",
text: "Developed a modular multi-agent system using parameter-efficient fine-tuning to enhance tool use in small language models. Implemented hard routing with expert adapters, achieving performance surpassing larger closed-source models. Demonstrated skills in distributed training, model optimization, and API integration." text: "Developed a modular multi-agent system using parameter-efficient fine-tuning to enhance tool use in small language models. Implemented hard routing with expert adapters, achieving performance surpassing larger closed-source models. Demonstrated skills in distributed training, model optimisation, and API integration."
}, },
{ {
imagePath: "latviaEstimation.png", imagePath: "latviaEstimation.png",
title: "AI Property Valuation with Novel Normalization", title: "AI Property Valuation with Novel Normalisation",
tech: [ tech: [
SkillEnum.machineLearning, SkillEnum.machineLearning,
SkillEnum.research, SkillEnum.research,
@@ -28,7 +28,7 @@ const projectData : IProjectArguments[] = [
SkillEnum.computerVision SkillEnum.computerVision
], ],
document: "/DNNpropertyEstimation.pdf", document: "/DNNpropertyEstimation.pdf",
text: "Built a deep learning model combining CNNs and structured data for property valuation, achieving R² of 0.7287. Introduced novel geo-temporal normalization for market dynamics. Applied transfer learning, advanced regularization, and multi-modal data fusion including transport and POI maps. Led data collection and preprocessing." text: "Built a deep learning model combining CNNs and structured data for property valuation, achieving R² of 0.7287. Introduced novel geo-temporal normalisation for market dynamics. Applied transfer learning, advanced regularisation, and multi-modal data fusion including transport and POI maps. Led data collection and preprocessing."
}, },
{ {
imagePath: "ipp.png", imagePath: "ipp.png",
@@ -57,7 +57,7 @@ const projectData : IProjectArguments[] = [
SkillEnum.python, SkillEnum.python,
SkillEnum.numpy SkillEnum.numpy
], ],
text: "Implemented and analyzed three bio-inspired optimization algorithms: Particle Swarm Optimization, Genetic Algorithms, and Genetic Programming. Conducted comparative performance analysis across different problem domains. Demonstrated algorithm implementation, experimental design, and data analysis skills.", text: "Implemented and analysed three bio-inspired optimisation algorithms: Particle Swarm Optimisation, Genetic Algorithms, and Genetic Programming. Conducted comparative performance analysis across different problem domains. Demonstrated algorithm implementation, experimental design, and data analysis skills.",
github: "https://github.com/KuchtaVR6/nat_coursework", github: "https://github.com/KuchtaVR6/nat_coursework",
document: "/PatrykKuchta_nat.pdf" document: "/PatrykKuchta_nat.pdf"
}, },
@@ -77,7 +77,7 @@ const projectData : IProjectArguments[] = [
{ {
imagePath: "cifar10.png", imagePath: "cifar10.png",
title: "Deep Learning Image Classification (CIFAR-10)", title: "Deep Learning Image Classification (CIFAR-10)",
text: "Built CNN-based image classifier achieving 95.5% accuracy on CIFAR-10 dataset. Applied deep learning techniques including data augmentation, regularization, and hyperparameter tuning. Demonstrated model training, evaluation, and optimization skills. Scored 100% on coursework assignment.", text: "Built CNN-based image classifier achieving 95.5% accuracy on CIFAR-10 dataset. Applied deep learning techniques including data augmentation, regularisation, and hyperparameter tuning. Demonstrated model training, evaluation, and optimisation skills. Scored 100% on coursework assignment.",
tech: [ tech: [
SkillEnum.python, SkillEnum.python,
SkillEnum.computerVision, SkillEnum.computerVision,
+12 -1
View File
@@ -1,6 +1,15 @@
import { WorkExperienceArgs } from "@/src/portfolio/helpers/WorkExperience"; import { WorkExperienceArgs } from "@/src/portfolio/helpers/WorkExperience";
const workExperienceData : WorkExperienceArgs[] = [ const workExperienceData : WorkExperienceArgs[] = [
{
industry: "Software & AI",
title: "Senior Technical Consultant",
company: "Softwire",
city: "Manchester",
country: "United Kingdom",
startDate: "October 2026",
isImportant: true
},
{ {
industry: "Software & AI", industry: "Software & AI",
title: "Technical Consultant", title: "Technical Consultant",
@@ -8,6 +17,7 @@ const workExperienceData : WorkExperienceArgs[] = [
city: "Manchester", city: "Manchester",
country: "United Kingdom", country: "United Kingdom",
startDate: "November 2025", startDate: "November 2025",
endDate: "October 2026",
isImportant: true isImportant: true
}, },
{ {
@@ -130,7 +140,8 @@ export const workExperienceParagraph =
"I gained experience as a Software Developer Intern at Softwire. During my master's degree, I contributed to " + "I gained experience as a Software Developer Intern at Softwire. During my master's degree, I contributed to " +
"the Artificial Intelligence industry as a Programming Data Annotator at DataAnnotation Tech. Upon graduation, " + "the Artificial Intelligence industry as a Programming Data Annotator at DataAnnotation Tech. Upon graduation, " +
"I accepted a full-time offer to join Softwire as a Software Developer in their North West office in Manchester. " + "I accepted a full-time offer to join Softwire as a Software Developer in their North West office in Manchester. " +
"In November 2025, I transitioned to Technical Consultant, AI Specialist. At Softwire, I have gained valuable experience " + "In November 2025, I transitioned to Technical Consultant, AI Specialist, and in October 2026 I was promoted to " +
"Senior Technical Consultant within the AI & Data Practice. At Softwire, I have gained valuable experience " +
"working on several AI projects, applying my theoretical machine learning knowledge to real-world problems. " + "working on several AI projects, applying my theoretical machine learning knowledge to real-world problems. " +
"Across these diverse roles, I have developed a strong work ethic and a broad set of transferable skills."; "Across these diverse roles, I have developed a strong work ethic and a broad set of transferable skills.";
+2 -2
View File
@@ -9,8 +9,8 @@ const RoleInfo = (): JSX.Element => {
return ( return (
<div className={styles.roleInfo}> <div className={styles.roleInfo}>
<h3>{currentWorkData.role}</h3> <h3>{currentWorkData.role}</h3>
<p className={styles.specialization}> <p className={styles.specialisation}>
Specializing in <strong>{currentWorkData.specialization}</strong> Specialising in <strong>{currentWorkData.specialisation}</strong>
</p> </p>
<p className={styles.company}> <p className={styles.company}>
at{" "} at{" "}
@@ -172,7 +172,7 @@
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
} }
.specialization { .specialisation {
font-style: italic; font-style: italic;
color: #666; color: #666;
margin-bottom: 0.3rem; margin-bottom: 0.3rem;