1import{o as $}from"./rolldown-runtime-BNNRdYrd.js";import{n as U}from"./react-dom-CagvwlZ5.js";import{r as F}from"./Navigation-B4T-34VF.js";import{c as B,i as G}from"./router-compat-D_eiPntG.js";import{t as H}from"./jsx-runtime-Bb2r7ayK.js";import{t as R}from"./arrow-left-C_p0ETwy.js";import{t as N}from"./usePortfolio-BE9-jrk_.js";import{Mt as W,Q as q,dt as u,mt as z,n as k,pt as y,r as C,t as J}from"./index-B-7KkYq8.js";var L=$(U(),1),K=()=>{const{portfolioSections:l}=N(),i=l.find(r=>r.section_type==="hero"&&r.visible),c=(0,L.useMemo)(()=>r=>{const m="https://craftingproduct.io",n=new URLSearchParams;n.set("type",r.type),r.title?.trim()&&n.set("title",r.title.trim()),r.subtitle?.trim()&&n.set("subtitle",r.subtitle.trim()),r.author?.trim()&&n.set("author",r.author.trim()),r.readingTime?.trim()&&n.set("readingTime",r.readingTime.trim()),r.category?.trim()&&n.set("category",r.category.trim());const g=new URLSearchParams;return[...n.entries()].sort().forEach(([f,d])=>{g.set(f,d)}),`${m}/api/og?${g.toString()}`},[]),o=r=>{if(!r)return"1 min read";let m=0;const n=g=>{g.type==="text"&&(m+=g.text?.split(/\s+/).length||0),g.content&&g.content.forEach(n)};return Array.isArray(r.content)&&r.content.forEach(n),`${Math.max(1,Math.ceil(m/200))} min read`};return{generateHomeImage:()=>(i?.content,c({type:"home",title:i?.title||"Dmitrii Abramov",subtitle:i?.subtitle||"Product Leader & Tech Innovator"})),generateBlogListingImage:()=>c({type:"blog-listing"}),generateArticleImage:r=>{const m=o(r.content),n=r.tags?.[0];return c({type:"article",title:r.title,author:r.author||"Dmitrii Abramov",readingTime:m,category:n})},generatePageImage:r=>c({type:"page",title:r}),generateCustomImage:c,generateImageForRoute:(r,m)=>{if(r==="/"||r==="")return c({type:"home",title:"Dmitrii Abramov",subtitle:"Product Leader & Tech Innovator"});if(r==="/blog")return c({type:"blog-listing"});if(r.startsWith("/blog/")&&m){const g=o(m.content),f=m.tags?.[0];return c({type:"article",title:m.title,author:m.author||"Dmitrii Abramov",readingTime:g,category:f})}const n=m?.title||r.replace("/","").replace(/[^\w\s]/gi," ").replace(/\s+/g," ").trim()||"Page";return c({type:"page",title:n.charAt(0).toUpperCase()+n.slice(1)})}}},V=()=>({parseMetadataContent:i=>{if(!i||typeof i!="object"||Array.isArray(i))return{};try{return typeof i=="string"?JSON.parse(i):i}catch(c){return console.warn("Failed to parse metadata content:",c),{}}}}),Q=l=>{const i=G(),{generateHomeImage:c,generateBlogListingImage:o,generateArticleImage:r,generatePageImage:m}=K(),{portfolioSections:n,loading:g}=N(),{parseMetadataContent:f}=V(),d=f(n.find(a=>a.section_type==="metadata")?.content);return(0,L.useMemo)(()=>{const{pageType:a,title:p,description:h,blogPost:e,customImage:j,customKeywords:x,canonicalOverride:b}=l,w=()=>{if(p)return p;switch(a){case"homepage":return"CraftingProduct â AI transformation workshops in Amsterdam";case"blog-list":return"Blog - Thoughts & Insights | CraftingProduct.io";case"blog-post":return e?.title?`${e.title} | CraftingProduct.io`:"Blog Post | CraftingProduct.io";default:const s=i.pathname.replace("/","").replace(/[^\w\s]/gi," ").replace(/\s+/g," ").trim()||"Page";return`${s.charAt(0).toUpperCase()+s.slice(1)} | CraftingProduct.io`}},v=()=>{if(h)return C(h,160);switch(a){case"homepage":return d?.metaDescription?C(d.metaDescription,160):"CraftingProduct is a workshop-led studio in Amsterdam. Hands-on Lovable, Agents, Claude, and Codex work for leaders and their teams.";case"blog-list":return"Latest thoughts and insights on product management, vibe-coding community, AI tools, and building with no-code platforms in Amsterdam.";case"blog-post":if(e){if(e.seo_description)return C(e.seo_description,160);if(e.excerpt)return C(e.excerpt,160);if(e.content){const s=S(e.content);if(s.length>50)return C(s,160)}return`${e.author||"Dmitrii Abramov"} shares insights on ${e.title||"this topic"}.`}return"Read the latest insights and thoughts from Dmitrii Abramov on product management and technology.";default:return"Explore more content and insights from Dmitrii Abramov, Product Leader and founder of Amsterdam's vibe-coding community."}},_=()=>{if(x)return x.slice(0,8);const s=["vibe-coding amsterdam","cursor ai","workshops","lovable","v0 prototyping"];switch(a){case"homepage":return s;case"blog-list":return[...s,"blog","insights","product management"].slice(0,8);case"blog-post":if(e){const A=[...e.tags||[],...e.keywords||[],...s.slice(0,3)];return Array.from(new Set(A)).slice(0,8)}return[...s,"blog post","insights"].slice(0,8);default:return[...s,"portfolio","experience"].slice(0,8)}},P=()=>{if(j)return y(j);switch(a){case"homepage":return d?.ogImage?y(d.ogImage):y(u.DEFAULT_OG_IMAGE);case"blog-post":if(e?.cover_image){const A=z(e.updated_at);return y(e.cover_image,A)}return y(r({title:e?.title||"Blog Post",author:e?.author||"Dmitrii Abramov",content:e?.content,tags:e?.tags}));case"blog-list":return y(o());default:const s=p||i.pathname.replace("/","").replace(/[^\w\s]/gi," ").trim()||"Page";return y(m(s))}},I=()=>
1{if(b)return k(b);if(a==="blog-post"&&e?.slug)return`${u.URL}/blog/${e.slug}`;const s=i.pathname.replace(/[#?].*$/,"");return`${u.URL}${s}`},E=()=>{const s={"@context":"https://schema.org",url:I(),image:k(P())};switch(a){case"homepage":return{...s,"@type":"Person","@id":"https://craftingproduct.io/#person",name:"Dmitrii Abramov",description:v(),jobTitle:"Product Leader",knowsAbout:["Product Management","Vibe-Coding","AI Prototyping","Community Building","Cursor AI","Lovable","Claude AI","No-Code Development"],worksFor:{"@type":"Organization","@id":"https://craftingproduct.io/#organization",name:"CraftingProduct.io"},sameAs:["https://www.linkedin.com/in/abramovdima/","https://github.com/amsterdammer12","https://www.meetup.com/amsterdam-vibe-coding-meetup","https://lu.ma/craftingproduct"]};case"blog-list":return{...s,"@type":"Blog",name:"CraftingProduct.io Blog",description:v(),author:{"@type":"Person",name:"Dmitrii Abramov",url:"https://craftingproduct.io"}};case"blog-post":const A=e?.content?S(e.content):"",D=X(A),M=Math.ceil(D/200),T={...s,"@type":"Article",headline:w(),description:v(),wordCount:D||void 0,timeRequired:M>0?`PT${M}M`:void 0,articleSection:e?.tags?.[0]||"Blog",keywords:e?.keywords?.length?e.keywords.join(", "):_().join(", "),genre:e?.tags?.[0]||"Technology",speakable:{"@type":"SpeakableSpecification",cssSelector:[".blog-post-title",".quick-answer",".blog-post-content"]},isPartOf:{"@type":"Blog","@id":"https://craftingproduct.io/blog",name:"CraftingProduct.io Blog"},author:{"@type":"Person",name:e?.author||"Dmitrii Abramov",url:"https://craftingproduct.io",sameAs:["https://www.linkedin.com/in/abramovdima/","https://github.com/amsterdammer12"]},publisher:{"@type":"Organization",name:"CraftingProduct.io",logo:{"@type":"ImageObject",url:"https://craftingproduct.io/og-jetbrains-mono.jpg"}},datePublished:e?.published_at||e?.created_at,dateModified:e?.updated_at||e?.created_at,mainEntityOfPage:{"@type":"WebPage","@id":I()}};return e?.tags&&e.tags.length>0&&(T.about=e.tags.slice(0,3).map(O=>({"@type":"Thing",name:O}))),e?.cover_image&&(T.thumbnailUrl=k(e.cover_image)),T;default:return{...s,"@type":"WebPage",name:w(),description:v(),keywords:_().join(", "),author:{"@type":"Person",name:"Dmitrii Abramov",url:"https://craftingproduct.io"}}}};return{title:w(),description:v(),keywords:_(),image:P(),canonicalUrl:I(),author:e?.author||"Dmitrii Abramov",type:a==="blog-post"?"article":"website",publishedTime:a==="blog-post"?e?.published_at||e?.created_at:void 0,structuredData:E()}},[l,i.pathname,d,g])},S=l=>{if(!l)return"";let i="";const c=o=>{o.type==="text"&&(i+=o.text||""),o.content&&Array.isArray(o.content)&&o.content.forEach(c)};try{const o=typeof l=="string"?JSON.parse(l):l;o.content&&Array.isArray(o.content)&&o.content.forEach(c)}catch{}return i.trim()},X=l=>l?l.split(/\s+/).filter(i=>i.length>0).length:0,t=H(),Y=({pageType:l,title:i,description:c,blogPost:o,customImage:r,customKeywords:m,canonicalOverride:n,suppressStructuredData:g=!1,robots:f})=>{const d=f??(o?`${o.robots_index===!1?"noindex":"index"}, ${o.robots_follow===!1?"nofollow":"follow"}`:"index, follow"),a=Q({pageType:l,...i!==void 0&&{title:i},...c!==void 0&&{description:c},...o!==void 0&&{blogPost:o},...r!==void 0&&{customImage:r},...m!==void 0&&{customKeywords:m},...n!==void 0&&{canonicalOverride:n}}),p=o?J(o.cover_image,o.title,o.slug):null,h=p?.url??a.image,e=p?.alt??(a.type==="article"?`Cover image for ${a.title}`:`${u.NAME} - ${u.DEFAULT_DESCRIPTION}`),j=p?.type,x=p?p.width:u.OG_IMAGE_WIDTH,b=p?p.height:u.OG_IMAGE_HEIGHT;return(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)(W,{children:[(0,t.jsx)("title",{children:a.title}),(0,t.jsx)("meta",{name:"description",content:a.description}),(0,t.jsx)("meta",{name:"author",content:a.author}),a.keywords.length>0&&(0,t.jsx)("meta",{name:"keywords",content:a.keywords.join(", ")}),(0,t.jsx)("link",{rel:"canonical",href:a.canonicalUrl}),(0,t.jsx)("meta",{name:"robots",content:d}),(0,t.jsx)("meta",{property:"og:title",content:a.title}),(0,t.jsx)("meta",{property:"og:description",content:a.description}),(0,t.jsx)("meta",{property:"og:type",content:a.type}),(0,t.jsx)("meta",{property:"og:url",content:a.canonicalUrl}),(0,t.jsx)("meta",{property:"og:site_name",content:u.NAME}),(0,t.jsx)("meta",{property:"og:locale",content:"en_US"}),h&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("meta",{property:"og:image",content:h}),(0,t.jsx)("meta",{property:"og:image:secure_url",content:h}),x&&b&&(0,t.jsx)("meta",{property:"og:image:width",content:x.toString()}),x&&b&&(0,t.jsx)("meta",{property:"og:image:height",content:b.toString()}),j&&(0,t.jsx)("meta",{property:"og:image:type",content:j}),(0,t.jsx)("meta",{property:"og:image:alt",content:e})]}),(0,t.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,t.jsx)("meta",{name:"twitter:site",content:u.SOCIAL.twitter}),(0,t.jsx)("meta",{name:"twitter:creator",content:u.SOCIAL.twitter}),(0,t.jsx)("meta",{name:"twitter:title",content:a.title}),(0,t.jsx)("meta",{name:"twitter:description",content:a.description}),h&&(0,t.jsx)("meta",{name:"twitter:image",content:h}),h&&(0,t.jsx)("meta",{name:"twitter:image:alt",content:e}),a.type==="article"&&(0,t.jsxs)(t.Fragment,{children:[a.publishedTime&&(0,t.jsx)("meta",{property:"article:published_time",content:a.publishedTime}),o?.updated_at&&(0,t.jsx)("meta",{property:"article:modified_time",content:o.updated_at}),(0,t.jsx)("meta",{property:"article:author",content:a.author}),o?.tags&&o.tags.map(w=>(0,t.jsx)("meta",{property:"article:tag",content:w},w))]}),(0,t.jsx)("html",{lang:"en"}),!g&&(0,t.jsx)("script",{type:"application/ld+json",children:JSON.stringify(a.structuredData)})]})})};function st(){return(0,t.jsxs)("div",{className:"min-h-screen bg-background",children:[(0,t.jsx)(Y,{pageType:"page",title:"Note not found â CraftingProduct",robots:"noindex, nofollow"}),(0,t.jsx)(F,{}),(0,t.jsx)("main",{className:"pt-28 md:pt-32 pb-16 md:pb-24",children:(0,t.jsx)("div",{className:"container px-4",children:(0,t.jsxs)("div",{className:"max-w-2xl",children:[(0,t.jsx)("p",{className:"font-mono text-xs uppercase tracking-[0.2em] text-foreground
1/50 mb-3",children:"Field Notes · Missing entry"}),(0,t.jsx)("h1",{className:"text-4xl md:text-5xl font-bold tracking-tight mb-4",children:"This note isn't in the archive."}),(0,t.jsx)("p",{className:"text-lg text-muted-foreground leading-relaxed",children:"The note you're looking for doesn't exist, hasn't been published, or was moved during a revision."}),(0,t.jsxs)(B,{to:"/field-notes",className:"mt-6 inline-flex items-center gap-2 font-mono text-xs uppercase tracking-[0.2em] text-foreground/60 hover:text-primary transition-colors group",children:[(0,t.jsx)(R,{className:"h-3.5 w-3.5 transition-transform group-hover:-translate-x-1"}),"Back to Field Notes"]})]})})}),(0,t.jsx)(q,{})]})}export{st as notFoundComponent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.