Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 0 additions & 6 deletions public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.mazuryk.dev/proof-of-work</loc>
<lastmod>2026-05-24</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.mazuryk.dev/proof-of-work/or-integration</loc>
<lastmod>2026-05-25</lastmod>
Expand Down
5 changes: 0 additions & 5 deletions src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,10 @@ import { AIPage, FullStackPage, HomePage, MedTechPage } from "./components/Marke
import ClinicalEvidenceWorkflowPage from "./components/ClinicalEvidenceWorkflowPage.jsx";
import AIWorkflowLibrary from "./components/AIWorkflowLibrary.jsx";
import AIWorkflowDetailPage from "./components/AIWorkflowDetailPage.jsx";
import ProofOfWorkPage from "./components/ProofOfWorkPage.jsx";
import ORIntegrationProofPage from "./components/ORIntegrationProofPage.jsx";

const CLINICAL_EVIDENCE_PATH = "/medtech-ai-systems/clinical-evidence-workflow";
const AI_WORKFLOW_PATH = "/ai-workflow";
const PROOF_OF_WORK_PATH = "/proof-of-work";
const OR_INTEGRATION_PROOF_PATH = "/proof-of-work/or-integration";
const ROUTE_SECTION_MAP = {
"/about": "about",
Expand All @@ -34,7 +32,6 @@ function getPage() {
if (path === "/about") return "about";
if (path === "/contact") return "contact";
if (path === OR_INTEGRATION_PROOF_PATH) return "or-integration-proof";
if (path === PROOF_OF_WORK_PATH) return "proof-of-work";
if (path === AI_WORKFLOW_PATH) return "ai-workflow";
if (path.startsWith(`${AI_WORKFLOW_PATH}/`)) return "ai-workflow-detail";
if (path === CLINICAL_EVIDENCE_PATH) return "clinical-evidence-workflow";
Expand Down Expand Up @@ -89,8 +86,6 @@ function AppInner() {
<AboutPage />
) : page === "contact" ? (
<ContactPage />
) : page === "proof-of-work" ? (
<ProofOfWorkPage />
) : page === "or-integration-proof" ? (
<ORIntegrationProofPage />
) : page === "ai-workflow" ? (
Expand Down
58 changes: 56 additions & 2 deletions src/assets/css/market-pages.css
Original file line number Diff line number Diff line change
Expand Up @@ -1377,11 +1377,33 @@
}

.medtech-proof-card {
--proof-link-accent: var(--accent-medtech);
--proof-link-soft: var(--accent-medtech-soft);
display: flex;
flex-direction: column;
padding: 20px;
}

.medtech-proof-card--surgical {
--proof-link-accent: var(--accent-medtech);
--proof-link-soft: var(--accent-medtech-soft);
}

.medtech-proof-card--demo {
--proof-link-accent: var(--accent-medtech-2);
--proof-link-soft: var(--surface-cool);
}

.medtech-proof-card--workflow {
--proof-link-accent: var(--accent-ai);
--proof-link-soft: var(--accent-ai-soft);
}

.medtech-proof-card--systems {
--proof-link-accent: var(--accent-fullstack);
--proof-link-soft: var(--accent-fullstack-soft);
}

.medtech-proof-card:nth-child(1) {
background:
linear-gradient(var(--grid-line) 1px, transparent 1px),
Expand Down Expand Up @@ -1457,10 +1479,42 @@
.medtech-proof-card__links a {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
color: var(--accent-medtech);
font-weight: 800;
min-height: 34px;
padding: 7px 10px;
border: 1px solid color-mix(in srgb, var(--proof-link-accent) 38%, var(--border));
border-radius: 999px;
background: color-mix(in srgb, var(--proof-link-soft) 72%, transparent);
color: color-mix(in srgb, var(--proof-link-accent) 88%, var(--text));
font-size: 13px;
font-weight: 850;
text-decoration: none;
box-shadow: 0 0 0 1px color-mix(in srgb, var(--proof-link-accent) 8%, transparent);
transition: transform 0.16s ease, background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease, color 0.2s ease;
}

.medtech-proof-card__links a:hover {
border-color: color-mix(in srgb, var(--proof-link-accent) 68%, var(--border));
background: color-mix(in srgb, var(--proof-link-accent) 18%, var(--panel));
color: var(--text);
box-shadow:
0 10px 24px color-mix(in srgb, var(--proof-link-accent) 18%, transparent),
0 0 0 1px color-mix(in srgb, var(--proof-link-accent) 22%, transparent);
transform: translateY(-1px);
}

.medtech-proof-card__links a:focus-visible {
outline: 2px solid var(--proof-link-accent);
outline-offset: 3px;
}

.medtech-proof-card__links a svg {
transition: transform 0.2s ease;
}

.medtech-proof-card__links a:hover svg {
transform: translateX(2px);
}

.medtech-capability-card {
Expand Down
2 changes: 1 addition & 1 deletion src/components/AIWorkflowLibrary.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ export default function AIWorkflowLibrary() {
<div className="ai-workflow-page__actions">
<a href={AUDIT_HREF} className="btn btn--primary">{t("site.cta.startAudit")}</a>
<a href="/collaborate" className="btn btn--ghost">{t("site.cta.workWithMe")}</a>
<a href="/proof-of-work#projects" className="btn btn--ghost">{t("site.cta.viewProof")}</a>
<a href="/fullstack" className="btn btn--ghost">{t("site.cta.viewProof")}</a>
</div>
</div>
</section>
Expand Down
4 changes: 2 additions & 2 deletions src/components/About.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ export default function About() {
<article className="about__role-card">
<h4>{localizedRoleCards[1].title}</h4>
<CheckList items={localizedRoleCards[1].items} />
<a href="/proof-of-work" className="btn btn--ghost">
<a href="/fullstack" className="btn btn--ghost">
{deText("View Proof of Work", lang)}
</a>
</article>
Expand Down Expand Up @@ -271,7 +271,7 @@ export default function About() {
<a href="/contact" className="btn btn--primary">
{deText("Discuss a Workflow", lang)} <Users size={15} className="icon ml-1" />
</a>
<a href="/proof-of-work" className="btn btn--ghost">
<a href="/fullstack" className="btn btn--ghost">
{deText("View Proof of Work", lang)}
</a>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/components/AboutPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export default function AboutPage() {
title={<TypewriterTitle text={deText(title, lang)} />}
subtitle={deText("I help operations-heavy teams turn fragmented processes into practical AI-assisted systems, combining product strategy, workflow analysis, AI automation, and full-stack delivery. My MedTech background adds real-world judgment from regulated, high-friction environments.", lang)}
primaryCta={{ label: deText("Explore AI Workflows", lang), href: "/ai-workflow", icon: <ArrowRight size={15} className="icon ml-1" aria-hidden="true" /> }}
secondaryCta={{ label: deText("View Proof of Work", lang), href: "/proof-of-work" }}
secondaryCta={{ label: deText("View Proof of Work", lang), href: "/fullstack" }}
scrollTargetId="about"
>
<div className="market-page__hero-extra">
Expand Down
2 changes: 1 addition & 1 deletion src/components/HiringTeams.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export default function HiringTeams() {
and the ability to convert regulated workflow ambiguity into usable system scope.
</p>
<div className="hiring-teams__actions">
<a href="/proof-of-work" className="btn btn--primary">
<a href="/fullstack" className="btn btn--primary">
View Proof of Work <ArrowRight size={15} className="icon ml-1" />
</a>
<a href="/contact" className="btn btn--ghost">Contact</a>
Expand Down
11 changes: 6 additions & 5 deletions src/components/MarketPages.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -696,13 +696,14 @@ function CapabilityToolMatrix({ items }) {
);
}

function SelectedProofCard({ item }) {
function SelectedProofCard({ item, index = 0 }) {
const { lang } = useTranslation();
const localizedItem = localizeGermanValue(item, lang);
const links = localizedItem.links || [];
const tone = ["surgical", "demo", "workflow", "systems"][index % 4];

return (
<article className="medtech-proof-card reveal">
<article className={`medtech-proof-card medtech-proof-card--${tone} reveal`}>
<header>
<p>{localizedItem.type}</p>
<h3>{localizedItem.title}</h3>
Expand Down Expand Up @@ -1242,7 +1243,7 @@ export function MedTechPage() {
eyebrow={deText("Trust layer / regulated operations", lang)}
title={<TypewriterTitle text={deText(medtechTitle, lang)} />}
subtitle={deText("Real MedTech implementation experience translated into AI workflow consulting judgment: clinical context, stakeholder coordination, documentation, handover, risk boundaries, and practical implementation thinking.", lang)}
primaryCta={{ label: deText("View Regulated Proof", lang), href: "/proof-of-work" }}
primaryCta={{ label: deText("View Regulated Proof", lang), href: "#medtech-impact" }}
secondaryCta={{ label: deText("Book an AI Workflow Audit", lang), href: `mailto:${EMAIL}?subject=AI%20Workflow%20Audit%20Request`, icon: <Mail size={15} className="icon ml-1" aria-hidden="true" /> }}
scrollTargetId="medtech-impact"
>
Expand All @@ -1268,7 +1269,7 @@ export function MedTechPage() {
text={deText("A focused selection of MedTech and workflow-system projects that connect implementation experience with product thinking and AI-assisted delivery.", lang)}
/>
<div className="medtech-proof-grid">
{localizedMedtechSelectedProof.map((item) => <SelectedProofCard item={item} key={item.title} />)}
{localizedMedtechSelectedProof.map((item, index) => <SelectedProofCard item={item} index={index} key={item.title} />)}
</div>
</section>

Expand Down Expand Up @@ -1297,7 +1298,7 @@ export function MedTechPage() {
title={deText("Need AI workflow work with regulated-operations judgment?", lang)}
text={deText("MedTech is the credibility layer: it shows I understand implementation-heavy environments where workflows, documentation, stakeholders, handover, and risk matter.", lang)}
primary={{ label: deText("Book an AI Workflow Audit", lang), href: `mailto:${EMAIL}?subject=AI%20Workflow%20Audit%20Request` }}
secondary={{ label: deText("View Regulated Proof", lang), href: "/proof-of-work" }}
secondary={{ label: deText("View Regulated Proof", lang), href: "#medtech-impact" }}
/>
</section>
</div>
Expand Down
12 changes: 6 additions & 6 deletions src/components/Navbar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const IDS = [

const CLINICAL_EVIDENCE_PATH = "/medtech-ai-systems/clinical-evidence-workflow";
const AI_WORKFLOW_PATH = "/ai-workflow";
const PROOF_OF_WORK_PATH = "/proof-of-work";
const OR_INTEGRATION_PROOF_PATH = "/proof-of-work/or-integration";

// tuning knobs
const VIEWPORT_ANCHOR = 0.32; // 32% down the viewport for deciding active section
Expand All @@ -32,13 +32,13 @@ export default function Navbar({ themeMode, onThemeChange }) {
typeof window !== "undefined" && window.location.pathname.replace(/\/+$/, "") === CLINICAL_EVIDENCE_PATH;
const isAIWorkflowPage =
typeof window !== "undefined" && window.location.pathname.replace(/\/+$/, "").startsWith(AI_WORKFLOW_PATH);
const isProofOfWorkPage =
typeof window !== "undefined" && window.location.pathname.replace(/\/+$/, "").startsWith(PROOF_OF_WORK_PATH);
const isORIntegrationProofPage =
typeof window !== "undefined" && window.location.pathname.replace(/\/+$/, "") === OR_INTEGRATION_PROOF_PATH;
const isAboutPage =
typeof window !== "undefined" && window.location.pathname.replace(/\/+$/, "") === "/about";
const isContactPage =
typeof window !== "undefined" && window.location.pathname.replace(/\/+$/, "") === "/contact";
const isStandalonePage = isServicesPage || isMedTechPage || isFullStackPage || isClinicalEvidencePage || isAIWorkflowPage || isProofOfWorkPage || isAboutPage || isContactPage;
const isStandalonePage = isServicesPage || isMedTechPage || isFullStackPage || isClinicalEvidencePage || isAIWorkflowPage || isORIntegrationProofPage || isAboutPage || isContactPage;
const navIds = useMemo(
() => (isStandalonePage ? [] : IDS),
[isStandalonePage]
Expand All @@ -59,12 +59,12 @@ export default function Navbar({ themeMode, onThemeChange }) {
() => [
{ id: isStandalonePage ? undefined : "home", href: "/", labelKey: "nav.home", current: !isStandalonePage && active === "home" },
{ href: "/ai", labelKey: "nav.aiSolutions", current: isServicesPage || isAIWorkflowPage || isClinicalEvidencePage },
{ href: "/medtech", labelKey: "nav.medtech", current: isMedTechPage || isProofOfWorkPage },
{ href: "/medtech", labelKey: "nav.medtech", current: isMedTechPage || isORIntegrationProofPage },
{ href: "/fullstack", labelKey: "nav.fullstack", current: isFullStackPage },
{ id: isStandalonePage ? undefined : "about", href: "/about", labelKey: "nav.about", current: isAboutPage || (!isStandalonePage && active === "about") },
{ id: isStandalonePage ? undefined : "contact", href: "/contact", labelKey: "nav.contact", current: isContactPage || (!isStandalonePage && active === "contact") },
],
[active, isAIWorkflowPage, isAboutPage, isClinicalEvidencePage, isContactPage, isFullStackPage, isMedTechPage, isProofOfWorkPage, isServicesPage, isStandalonePage]
[active, isAIWorkflowPage, isAboutPage, isClinicalEvidencePage, isContactPage, isFullStackPage, isMedTechPage, isORIntegrationProofPage, isServicesPage, isStandalonePage]
);

const computeActive = useCallback(() => {
Expand Down
2 changes: 1 addition & 1 deletion src/components/OperatorAdvantage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export default function OperatorAdvantage() {
</p>

<div className="operator-advantage__actions">
<a href="/proof-of-work" className="btn btn--primary">
<a href="/medtech#medtech-impact" className="btn btn--primary">
{t("site.cta.viewProof")} <ArrowRight size={15} className="icon ml-1" />
</a>
<a href="/ai-workflow" className="btn btn--ghost">
Expand Down
2 changes: 1 addition & 1 deletion src/components/Projects.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ export default function Projects() {
</div>

<div className="projects__actions reveal">
<a href="/proof-of-work" className="btn btn--primary">
<a href="/fullstack" className="btn btn--primary">
{t("site.home.proofPreview.cta")} <ArrowRight size={15} className="icon ml-1" />
</a>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/components/ServicesPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ const METHOD_STEPS = [
];

const PROOF_LINKS = [
{ title: "Proof of Work", href: "/proof-of-work" },
{ title: "Proof of Work", href: "/fullstack" },
{ title: "AI Workflow Library", href: "/ai-workflow" },
];

Expand Down
20 changes: 0 additions & 20 deletions src/hooks/useOgMeta.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,6 @@ const AI_WORKFLOW = {
imageHeight: "630",
};

const PROOF_OF_WORK = {
title: "Proof of Work - AI Workflow Systems and Regulated Operations",
description:
"Selected workflow systems, product concepts, and AI-assisted prototypes showing how Roman Mazuryk translates operational complexity into structured, auditable systems.",
url: "https://www.mazuryk.dev/proof-of-work",
image: "https://www.mazuryk.dev/images/og-home.png",
imageAlt: "Proof of work for MedTech product and workflow systems.",
imageWidth: "1200",
imageHeight: "630",
};

const OR_INTEGRATION_PROOF = {
title: "OR Integration & Surgical Workflow Systems | Roman Mazuryk",
description:
Expand Down Expand Up @@ -206,15 +195,6 @@ export function useOgMeta() {
return;
}

if (path === "/proof-of-work") {
applyMeta({
...PROOF_OF_WORK,
title: seo("proofTitle", PROOF_OF_WORK.title),
description: seo("proofDescription", PROOF_OF_WORK.description),
});
return;
}

if (path === "/proof-of-work/or-integration") {
applyMeta({
...OR_INTEGRATION_PROOF,
Expand Down
2 changes: 1 addition & 1 deletion src/locales/de.js
Original file line number Diff line number Diff line change
Expand Up @@ -719,7 +719,7 @@ export default {
},
labels: { problemSolved: "Gelöstes Problem", deliverables: "Deliverables", outcome: "Typisches Ergebnis" },
method: { eyebrow: "Methode", title: "Operator-first, KI-gestützt", text: "Ich starte nicht mit der Frage, was KI kann. Ich starte dort, wo der Workflow bricht, wo Risiko entsteht und welches System eigentlich existieren sollte.", steps: ["Workflow mappen", "Engpässe und Risiken identifizieren", "Systemmodell definieren", "KI dort ergänzen, wo sie nützlich ist", "Review- und Traceability-Checkpoints gestalten", "Prototypisieren, dokumentieren und übergeben"] },
proof: { eyebrow: "Proof", title: "Praktische Workflow-Beispiele ansehen", text: "Die Workflow-Bibliothek zeigt transparente Konzept-Workflows, Referenzsysteme, Prototyp-Konzepte und Proof-of-Work-Artefakte mit klaren Maturity Labels.", links: [{ title: "Proof of Work", href: "/proof-of-work" }, { title: "KI-Workflow-Bibliothek", href: "/ai-workflow" }] },
proof: { eyebrow: "Proof", title: "Praktische Workflow-Beispiele ansehen", text: "Die Workflow-Bibliothek zeigt transparente Konzept-Workflows, Referenzsysteme, Prototyp-Konzepte und Proof-of-Work-Artefakte mit klaren Maturity Labels.", links: [{ title: "Proof of Work", href: "/fullstack" }, { title: "KI-Workflow-Bibliothek", href: "/ai-workflow" }] },
final: { title: "Mit einem Workflow starten", text: "Bringen Sie einen fragmentierten Workflow, einen Implementierungsengpass oder eine KI-Idee mit. Ich helfe, den aktuellen Prozess zu mappen, sichere KI-Unterstützungspunkte zu identifizieren und den ersten nachvollziehbaren Systempfad zu definieren." },
},
proof: {
Expand Down
2 changes: 1 addition & 1 deletion src/locales/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ export default {
eyebrow: "Proof",
title: "See practical workflow examples",
text: "The workflow library shows transparent concept workflows, reference systems, prototype concepts, and proof-of-work artifacts with explicit maturity labels.",
links: [{ title: "Proof of Work", href: "/proof-of-work" }, { title: "AI Workflow Library", href: "/ai-workflow" }],
links: [{ title: "Proof of Work", href: "/fullstack" }, { title: "AI Workflow Library", href: "/ai-workflow" }],
},
final: {
title: "Start with one workflow",
Expand Down
1 change: 0 additions & 1 deletion vercel.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
{ "source": "/fullstack", "destination": "/index.html" },
{ "source": "/fullstack/(.*)", "destination": "/index.html" },
{ "source": "/proof-of-work/or-integration", "destination": "/proof-of-work/or-integration/index.html" },
{ "source": "/proof-of-work", "destination": "/index.html" },
{ "source": "/about", "destination": "/index.html" },
{ "source": "/contact", "destination": "/index.html" },
{ "source": "/ai-workflow", "destination": "/ai-workflow/index.html" },
Expand Down
Loading