1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Experience-Def4GMEG.js","assets/index-OZBwOq0W.js","assets/index-CAwBdAmG.css","assets/Footer-Bl-kUtxI.js","assets/SectionLink-CYLVaZpO.js","assets/cloudflare-logo-Bq6yJob5.js","assets/ThisWeekInNET-B68PPVpz.js","assets/skeleton-Be61UwyG.js","assets/InteractiveGlobe-Ck4trIOw.js","assets/Contact-BpmKIAdT.js","assets/Closing-BO8NN_5W.js","assets/CloudSection-BeQbg5VF.js"])))=>i.map(i=>d[i]); 2import{c as y,r as a,j as L,a as e,b as C,X as D,_ as p}from"./index-OZBwOq0W.js";import{u as F,S as T,M as I,a as V,b as l,E as w,F as R}from"./Footer-Bl-kUtxI.js";import{P as W,B}from"./ParticleCloud-Bb5yXpKz.js";import{C as N,S}from"./skeleton-Be61UwyG.js";import{S as g}from"./SectionLink-CYLVaZpO.js";import{P as H,M as z,G as E,F as A,T as O,B as P,n as G,p as J,u as U,g as $,a as q,b as X,H as Y,Z,C as K}from"./producoes-ficticias-logo-DrpkfhzQ.js";import{C as Q}from"./chevron-right-DajRt_yh.js";import{c as ee}from"./cloudflare-logo-Bq6yJob5.js";/** 3 * @license lucide-react v0.462.0 - ISC 4 * 5 * This source code is licensed under the ISC license. 6 * See the LICENSE file in the root directory of this source tree. 7 */const se=y("ChartNoAxesColumnIncreasing",[["line",{x1:"12",x2:"12",y1:"20",y2:"10",key:"1vz5eb"}],["line",{x1:"18",x2:"18",y1:"20",y2:"4",key:"cun8e5"}
7],["line",{x1:"6",x2:"6",y1:"20",y2:"16",key:"hq0ia6"}]]);/** 8 * @license lucide-react v0.462.0 - ISC 9 * 10 * This source code is licensed under the ISC license. 11 * See the LICENSE file in the root directory of this source tree. 12 */const te=y("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** 13 * @license lucide-react v0.462.0 - ISC 14 * 15 * This source code is licensed under the ISC license. 16 * See the LICENSE file in the root directory of this source tree. 17 */const M=y("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),ae=96,ne={home:"home",experience:"experience",career:"experience",skills:"skills",projects:"projects","featured-projects":"projects",twin:"twin","this-week-in-net":"twin",blog:"blog","cloudflare-blog":"blog",essays:"essays",substack:"essays",about:"about",globe:"globe",contact:"contact",bio:"bio"},oe=t=>t.replace(/^#/,"").trim().toLowerCase(),_=(t,r="smooth")=>{const o=oe(t),n=ne[o]??o;if(!n)return!1;const i=document.getElementById(n);if(!i)return!1;const s=i.getBoundingClientRect().top+window.scrollY-ae;return window.scrollTo({top:Math.max(s,0),behavior:r}),!0},ie=()=>{const[t,r]=a.useState(!1),[o,n]=a.useState(!1),i=F(),{theme:s,setTheme:d}=L(),[m,u]=a.useState(!1);a.useEffect(()=>{u(!0)},[]);const x=[{label:"Home",href:"#home"},{label:"Experience",href:"#experience"},{label:"Projects",href:"#projects"},{label:"TWiN",href:"#twin"},{label:"Blog",href:"#blog"},{label:"About",href:"#about"},{label:"Contact",href:"#contact"}];a.useEffect(()=>{const c=()=>{const f=window.scrollY>20;r(f)};return window.addEventListener("scroll",c),()=>window.removeEventListener("scroll",c)},[]);const h=()=>{n(!o)},k=c=>{n(!1),_(c)&&window.history.pushState(null,"",c)};return e.jsxs("header",{className:C("fixed top-0 left-0 w-full z-50 transition-all duration-300 ease-in-out py-4 px-6 md:px-12",t?"bg-background/80 backdrop-blur-md shadow-sm dark:bg-background/80":"bg-transparent"),children:[e.jsxs("div",{className:"max-w-7xl mx-auto flex items-center justify-between",children:[e.jsxs("a",{href:"#home",className:"text-xl font-serif font-bold text-foreground",children:["João",e.jsx("span",{className:"text-cloudflare",children:"Tomé"})]}),e.jsxs("nav",{className:"hidden md:flex items-center space-x-8",children:[x.map(c=>e.jsx("a",{href:c.href,onClick:f=>{f.preventDefault(),k(c.href)},className:"nav-link",children:c.label},c.href)),m&&e.jsx("button",{onClick:()=>d(s==="dark"?"light":"dark"),className:"p-2 rounded-lg hover:bg-secondary transition-colors","aria-label":"Toggle dark mode",children:s==="dark"?e.jsx(T,{size:20}):e.jsx(I,{size:20})})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[m&&e.jsx("button",{onClick:()=>d(s==="dark"?"light":"dark"),className:"p-2 rounded-lg hover:bg-secondary transition-colors text-foreground","aria-label":"Toggle dark mode",children:s==="dark"?e.jsx(T,{size:20}):e.jsx(I,{size:20})}),e.jsx("button",{className:"text-foreground hover:text-cloudflare focus:outline-none",onClick:h,"aria-label":o?"Close menu":"Open menu",children:o?e.jsx(D,{size:24}):e.jsx(V,{size:24})})]})]}),i&&e.jsx("div",{className:C("fixed inset-0 bg-background z-40 transition-transform duration-300 ease-in-out transform pt-20",o?"translate-x-0":"translate-x-full"),children:e.jsx("nav",{className:"flex flex-col items-center space-y-8 p-8",children:x.map(c=>e.jsx("a",{href:c.href,onClick:f=>{f.preventDefault(),k(c.href)},className:"text-lg font-medium text-foreground hover:text-cloudflare transition-colors duration-300",children:c.label},c.href))})})]})},re=()=>{const[t,r]=a.useState(0),o=a.useRef(null),n=["Data Editor","Writer","Storyteller","Podcaster","Journalist"];a.useEffect(()=>{const s=setInterval(()=>{r(d=>(d+1)%n.length)},3e3);return()=>clearInterval(s)},[]);const i=()=>{const s=document.getElementById("experience");s&&s.scrollIntoView({behavior:"smooth"})};return e.jsxs("section",{id:"home",ref:o,className:"relative min-h-screen flex flex-col items-center justify-center px-6 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 -z-10 bg-gradient-to-b from-background via-secondary/30 to-background"}),e.jsxs("div",{className:"max-w-4xl w-full text-center",children:[e.jsx(l,{animation:"fade-in",children:e.jsxs("div",{className:"relative mx-auto w-[360px] h-[360px] md:w-[480px] md:h-[480px] flex items-center justify-center mb-8",children:[e.jsx(W,{className:"absolute inset-0 z-0"}
17),e.jsx(B,{src:"/lovable-uploads/c56bf43d-7e36-430b-a1e2-613d3d7fe9a3.png",alt:"João Tomé"})]})}),e.jsx(l,{animation:"fade-in-delay-1",children:e.jsx("h1",{className:"text-4xl md:text-6xl font-serif font-bold mb-4 text-foreground text-balance",children:"João Tomé"})}),e.jsx(l,{animation:"fade-in-delay-2",children:e.jsx("div",{className:"h-12",children:e.jsxs("h2",{className:"text-xl md:text-2xl font-medium text-muted-foreground mb-6",children:[e.jsx("span",{className:"inline-block animate-fade-in",children:n[t]},t),n[t]!=="Journalist"&&e.jsx("span",{className:"text-cloudflare",children:" at Cloudflare"})]})})}),e.jsxs(l,{animation:"fade-in-delay-3",className:"max-w-2xl mx-auto",children:[e.jsx("p",{className:"text-lg text-muted-foreground mb-10 leading-relaxed",children:"I believe in the power of great stories â and in finding them. After almost two decades in journalism, I now work with technical teams at Cloudflare to turn complex Internet trends into multimedia narratives that inform, inspire, and reveal how the Internet works and where it's heading. At Cloudflare Radar, my work connects global Internet data to real-world narratives, helping us humans better understand how the online world is changing."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3 mb-12",children:[e.jsx("div",{className:"chip bg-cloudflare/10 text-foreground",children:"Technology"}),e.jsx("div",{className:"chip bg-madeInTech/10 text-foreground",children:"Data Storytelling"}),e.jsx("div",{className:"chip bg-dinheiroVivo/10 text-foreground",children:"Podcasting"}),e.jsx("div",{className:"chip bg-nova/10 text-foreground",children:"Media Production"}),e.jsx("div",{className:"chip",children:"Innovation"}),e.jsx("div",{className:"chip",children:"Journalism"})]})]})]}),e.jsx("button",{onClick:i,className:"absolute bottom-8 left-1/2 transform -translate-x-1/2 text-muted-foreground hover:text-foreground transition-colors duration-300 animate-float","aria-label":"Scroll to next section",children:e.jsx(N,{size:32})})]})},le=()=>{const[t,r]=a.useState(null),o=[{name:"Data Storytelling",level:90,icon:e.jsx(se,{className:"text-cloudflare"}),description:"Transforming complex data into compelling narratives that resonate with audiences",category:"technical"},{name:"Multimedia Production",level:85,icon:e.jsx(H,{className:"text-madeInTech"}),description:"Creating engaging visual and audio content across multiple platforms",category:"media"},{name:"Podcasting",level:90,icon:e.jsx(z,{className:"text-dinheiroVivo"}),description:"Hosting, producing, and editing podcast content with notable figures in technology and science",category:"media"},{name:"Multilingual Communication",level:80,icon:e.jsx(E,{className:"text-nova"}),description:"Fluent in English, with working knowledge of German and Spanish",category:"communication"},{name:"Film & Cinema Analysis",level:85,icon:e.jsx(A,{className:"text-muted-foreground"}),description:"Deep understanding of cinema with experience in film criticism and interviews",category:"media"},{name:"Plain-language tech writing",level:80,icon:e.jsx(O,{className:"text-muted-foreground"}),description:"Explaining complex technical concepts in accessible language",category:"technical"},{name:"Comms & Press Relations",level:85,icon:e.jsx(E,{className:"text-cloudflare"}),description:"Supporting communication strategies alongside C-level leaders during major announcements and crisis moments. Experienced in coordinating media outreach, setting up interviews, handling press inquiries, and organizing journalist briefings and media events.",category:"media"}],n=t?o.filter(s=>s.category===t):o,i=[{id:"media",name:"Media & Production"},{id:"technical",name:"Technical"},{id:"communication",name:"Communication"}];return e.jsx("section",{id:"skills",className:"py-20 px-6 bg-secondary/30 dark:bg-secondary/10",children:e.jsxs("div",{className:"max-w-5xl mx-auto",children:[e.jsx(l,{children:e.jsxs("div",{className:"mb-12 text-center",children:[e.jsxs("h2",{className:"section-title mx-auto group",children:[e.jsx("span",{children:"Skills & Expertise"}),e.jsx(g,{id:"skills"})]}),e.jsx("p",{className:"text-muted-foreground max-w-2xl mx-auto",children:"My diverse skill set spans media production, technology, and communication, allowing me to bridge the gap between complex data and engaging storytelling."})]})}),e.jsx(l,{className:"mb-10",children:e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsx("button",{onClick:()=>r(null),className:`chip ${t===null?"bg-foreground text-background":"hover:bg-secondary/80"}`,children:"All Skills"}),i.map(s=>e.jsx("button",{onClick:()=>r(s.id),className:`chip ${t===s.id?"bg-foreground text-background":"hover:bg-secondary/80"}`,children:s.name},s.id))]})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:n.map((s,d)=>e.jsx(l,{className:"h-full",children:e.jsxs("div",{className:"glass-card p-6 h-full flex flex-col dark:bg-card/70 dark:border-border",children:[e.jsxs("div",{className:"mb-4 flex items-center",children:[e.jsx("div",{className:"p-3 rounded-full bg-secondary mr-4",children:s.icon}),e.jsx("h3",{className:"font-medium text-foreground",children:s.name})]}),e.jsx("div",{className:"flex-1",children:e.jsx("p",{className:"text-muted-foreground text-sm",children:s.description})})]})},s.name))})]})})},ce=()=>{const[t,r]=a.useState(0),o=[{title:"This Week in NET podcast",description:"Weekly roundup of Cloudflare blog stories and expert analysis on the Internet's past, present, and future. We cover Internet trends, new tools, and product updates. Hosted by João Tomé, with a different guest each week.",image:"/lovable-uploads/38124457-b283-45b1-afb7-b801469df6dc.png",tags:["Podcast","Internet Trends","Weekly Analysis"],company:"Cloudflare",companyLogo:"/lovable-uploads/5f9d5c8a-2bb8-4b6f-8c9d-7e6f8a9b0c1d.svg",link:"https://ThisWeekInNET.com"},{title:"Data Visualization Series",description:"Conceived and led Radar Display as Product Manager and Data Editor â a real-time globe experience showing Internet traffic, outages, AI trends, and attacks by country, featured at Cloudflare office
17s and events worldwide. Also led data visualizations and analyses on global tech trends.",image:"/lovable-uploads/5aa376f7-7d48-44dc-92ba-86299092936b.png",tags:["Data Analysis","Visualization","Technology Trends"],company:"Cloudflare",companyLogo:"/lovable-uploads/5f9d5c8a-2bb8-4b6f-8c9d-7e6f8a9b0c1d.svg",link:"https://radar.cloudflare.com"},{title:"Made in Tech Podcast",description:"A podcast exploring technology's impact on society, featuring interviews with leading figures in tech and science.",image:"/lovable-uploads/af7cd708-04a2-4b85-9e80-5fdb95ddbd6c.png",tags:["Podcast","Technology","Innovation"],company:"Made in Tech",companyLogo:"/lovable-uploads/af7cd708-04a2-4b85-9e80-5fdb95ddbd6c.png"},{title:"Technology Events Moderation",description:"Moderation of panels and events in the technology and mobility sectors, facilitating discussions with industry leaders.",tags:["Events","Moderation","Technology","Mobility"],company:"Various"},{title:"Cinema Interview Series",description:"A series of interviews with actors and directors, exploring talent and storytelling in modern cinema.",tags:["Cinema","Interviews","Media"],company:"SIC (35mm show), Destak, Sábado, Negócios, Observador, Expresso",image:"/lovable-uploads/c56bf43d-7e36-430b-a1e2-613d3d7fe9a3.png"},{title:"Car Shows Host and Reviewer",description:"Participated in three TV shows about cars and motorcycles with reviews and road trip storytelling, including TV Turbo and Volante from SIC, from 2009 to 2021.",tags:["Television","Automotive","Reviews"],company:"SIC",image:"/lovable-uploads/car-show-host.jpg"}],n=()=>{r(s=>(s+1)%o.length)},i=()=>{r(s=>(s-1+o.length)%o.length)};return e.jsx("section",{id:"projects",className:"py-20 px-6 bg-background",children:e.jsxs("div",{className:"max-w-5xl mx-auto",children:[e.jsx(l,{children:e.jsxs("div",{className:"mb-12 text-center",children:[e.jsxs("h2",{className:"section-title mx-auto group",children:[e.jsx("span",{children:"Featured Projects"}),e.jsx(g,{id:"projects"})]}),e.jsx("p",{className:"text-muted-foreground max-w-2xl mx-auto",children:"Selected work showcasing my expertise in media production, data storytelling, and content creation."})]})}),e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:i,className:"absolute left-0 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-background/80 shadow-md hover:bg-background transition-colors md:-left-5 dark:bg-card/80 dark:hover:bg-card","aria-label":"Previous project",children:e.jsx(te,{size:24})}),e.jsx("button",{onClick:n,className:"absolute right-0 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-background/80 shadow-md hover:bg-background transition-colors md:-right-5 dark:bg-card/80 dark:hover:bg-card","aria-label":"Next project",children:e.jsx(Q,{size:24})}),e.jsx("div",{className:"overflow-hidden",children:e.jsx("div",{className:"flex transition-transform duration-500 ease-in-out",style:{transform:`translateX(-${t*100}%)`},children:o.map((s,d)=>e.jsx("div",{className:"w-full flex-shrink-0 px-4",children:e.jsx(l,{children:e.jsx("div",{className:"glass-card p-8 h-full dark:bg-card/70 dark:border-border",children:e.jsxs("div",{className:"flex flex-col md:flex-row gap-6",children:[e.jsx("div",{className:"md:w-1/3 flex justify-center items-start",children:s.image?e.jsx("img",{src:s.image,alt:s.title,className:"rounded-xl max-h-64 object-contain",loading:"lazy"}):s.companyLogo?e.jsx("img",{src:s.companyLogo,alt:s.company,className:"rounded-xl max-h-32 object-contain",loading:"lazy"}):e.jsx("div",{className:"w-32 h-32 bg-secondary rounded-xl flex items-center justify-center",children:e.jsx("span",{className:"text-muted-foreground text-sm",children:s.company})})}),e.jsxs("div",{className:"md:w-2/3",children:[e.jsxs("div",{className:"flex items-start justify-between mb-3",children:[e.jsx("h3",{className:"text-xl font-semibold text-foreground",children:s.title}),s.link&&e.jsx("a",{href:s.link,target:"_blank",rel:"noopener noreferrer",className:"text-cloudflare hover:text-cloudflare/80 transition-colors",children:e.jsx(w,{size:20})})]}),e.jsx("p",{className:"text-muted-foreground mb-4",children:s.description}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-4",children:s.tags.map(m=>e.jsx("span",{className:"chip",children:m},m))}),e.jsx("div",{className:"flex items-center text-sm text-muted-foreground",children:e.jsx("span",{children:s.company})})]})]})})})},s.title))})}),e.jsx("div",{className:"flex justify-center mt-6 space-x-2",children:o.map((s,d)=>e.jsx("button",{onClick:()=>r(d),className:`w-2 h-2 rounded-full transition-colors ${d===t?"bg-cloudflare":"bg-muted"}`,"aria-label":`Go to project ${d+1}`},d))})]})]})})},b=[{title:"ChatGPT's rivals, Kwai's quiet rise: the top Internet services of 2025",date:"Dec 2025",url:"https://blog.cloudflare.com/radar-2025-year-in-review-internet-services/"},{title:"The crawl-to-click gap: Cloudflare data on AI bots, training, and referrals",date:"Aug 2025",url:"https://blog.cloudflare.com/crawlers-click-ai-bots-training/"},{title:"How a volunteer-run wildfire site in Portugal stayed online during DDoS attacks",date:"Aug 2025",url:"https://blog.cloudflare.com/wildfire-fogos-pt-portugal-ddos-attack/"},{title:"From Googlebot to GPTBot: who's crawling your site in 2025",date:"Jul 2025",url:"https://blog.cloudflare.com/from-googlebot-to-gptbot-whos-crawling-your-site-in-2025/"},{title:"Chaos in Cloudflare's Lisbon office: securing the Internet with wave motion",date:"Mar 2025",url:"https://blog.cloudflare.com/chaos-in-cloudflare-lisbon-office-securing-the-internet-with-wave-motion/"},{title:"Global expansion in Generative AI",date:"Mar 2025",url:"https://blog.cloudflare.com/global-expansion-in-generative-ai-a-year-of-growth-newcomers-and-attacks/"},{title:"The fall and rise of TikTok (traffic)",date:"Jan 2025",url:"https://blog.cloudflare.com/the-fall-and-rise-of-tiktok-traffic/"},{title:"Global elections in 2024: Internet traffic and cyber threat trends",date:"Dec 2024",url:"https://blog.cloudflare.com/elections-2024-internet/"},{title:"From ChatGPT to Temu: ranking top Internet services in 2024",date:"Dec 2024",url:"https://blog.cloudflare.com/radar-2024-year-in-review-internet-services/"},{title:"Paris 2024 Olympics recap",date:"Aug 2024",url:"https://blog.cloudflare.com/paris-2024-olympics-recap/"}],j=5,de=()=>{const[t,r]=a.useState(!1),o=t?b:b.slice(0,j);return e.jsx("section",{id:"blog",className:"py-20 px-6 bg-secondary/30 dark:bg-secondary/10",children:e.jsxs("div",{className:"max-w-5xl mx-auto",children:[e.jsx(l,{children:e.jsxs("div",{className:"mb-10 text-center",children:[e.jsxs("h2",{className:"section-title mx-auto group",children:[e.jsx("span",{children:"Blog Posts I Wrote for Cloudflare"}),e.jsx(g,{id:"blog"})]}),e.jsx("p",{className:"text-muted-foreground",children:e.jsx("a",{href:"https://blog.cloudflare.com/author/joao-tome/",target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-4 hover:text-foreground transition-colors",children:"Full archive on the Cloudflare Blog â"})})]})}),e.jsx("div",{className:"space-y-0 divide-y divide-border",children:o.map((n,i)=>e.jsx(l,{children:e.jsxs("a",{href:n.url,target:"_blank",rel:"noopener noreferrer",className:"flex items-start justify-between gap-4 py-4 group hover:bg-secondary/40 dark:hover:bg-secondary/20 -mx-3 px-3 rounded-lg transition-colors",children:[e.jsx("span",{className:"text-foreground group-hover:text-cloudflare transition-colors text-sm sm:text-base leading-snug",children:n.title}),e.jsxs("span",{className:"text-muted-foreground text-sm whitespace-nowrap flex items-center gap-2 pt-0.5",children:[n.date,e.jsx(w,{size:14,className:"opacity-0 group-hover:opacity-100 transition-opacity"})]})]})},n.url))}),b.length>j&&e.jsx("div",{className:"mt-6 text-center",children:e.jsxs("button",{onClick:()=>r(!t),className:"inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[t?"Show less":`Show more (${b.length-j})`,t?e.jsx(M,{size:16}):e.jsx(N,{size:16})]})})]})})};function me(){const[t,r]=a.useState([]),[o,n]=a.useState(!0),[i,s]=a.useState(null);return a.useEffect(()=>{(async()=>{try{const m=await fetch("https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Femot.substack.com%2Ffeed");if(!m.ok)throw new Error("Failed to fetch feed");const x=((await m.json()).items||[]).filter(h=>!!(h.title&&h.link&&h.pubDate)).map(h=>({title:h.title,link:h.link,pubDate:h.pubDate}));r(x)}catch(m){s(m instanceof Error?m.message:"Failed to load feed")}finally{n(!1)}})()},[]),{items:t,loading:o,error:i}}const he=t=>new Date(t).toLocaleDateString("en-US",{month:"short",year:"numeric"}),v=5,ue=10,xe=()=>{const{items:t,loading:r,error:o}=me(),[n,i]=a.useState(!1),s=t.slice(0,ue),d=n?s:s.slice(0,v),m=s.length>v;return o?e.jsx("section",{id:"essays",className:"py-20 px-6 bg-secondary/30 dark:bg-secondary/10",children:e.jsx("div",{className:"max-w-5xl mx-auto text-center",children:e.jsxs(l,{children:[e.jsxs("h2",{className:"section-title mx-auto group",children:[e.jsx("span",{children:"Personal Essays"}),e.jsx(g,{id:"essays"})]}),e.jsx("p",{className:"text-muted-foreground mt-4",children:e.jsx("a",{href:"https://emot.substack.com",target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-4 hover:text-foreground transition-colors",children:"Read my essays on Substack â"})})]})})}):e.jsx("section",{id:"essays",className:"py-20 px-6 bg-secondary/30 dark:bg-secondary/10",children:e.jsxs("div",{className:"max-w-5xl mx-auto",children:[e.jsx(l,{children:e.jsxs("div",{className:"mb-10 text-center",children:[e.jsxs("h2",{className:"section-title mx-auto group",children:[e.jsx("span",{children:"Personal Essays"}),e.jsx(g,{id:"essays"})]}),e.jsx("p",{className:"text-muted-foreground",children:e.jsx("a",{href:"https://emot.substack.com",target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-4 hover:text-foreground transition-colors",children:"Read more on Substack â"})})]})}),e.jsx("div",{className:"space-y-0 divide-y divide-border",children:r?Array.from({length:v}).map((u,x)=>e.jsxs("div",{className:"flex items-start justify-between gap-4 py-4",children:[e.jsx(S,{className:"h-5 w-3/4"}),e.jsx(S,{className:"h-5 w-20"})]},x)):d.map(u=>e.jsx(l,{children:e.jsxs("a",{href:u.link,target:"_blank",rel:"noopener noreferrer",className:"flex items-start justify-between gap-4 py-4 group hover:bg-secondary/40 dark:hover:bg-secondary/20 -mx-3 px-3 rounded-lg transition-colors",children:[e.jsx("span",{className:"text-foreground group-hover:text-cloudflare transition-colors text-sm sm:text-base leading-snug",children:u.title}),e.jsxs("span",{className:"text-muted-foreground text-sm whitespace-nowrap flex items-center gap-2 pt-0.5",children:[he(u.pubDate),e.jsx(w,{size:14,className:"opacity-0 group-hover:opacity-100 transition-opacity"})]})]})},u.link))}),!r&&m&&e.jsx("div",{className:"mt-6 text-center",children:e.jsxs("button",{onClick:()=>i(!n),className:"inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[n?"Show less":`Show more (${s.length-v})`,n?e.jsx(M,{size:16}):e.jsx(N,{size:16})]})})]})})},ge=()=>{const[t,r]=a.useState(0),o=[{institution:"Universidade Nova de Lisboa",degree:"Master in Communication Sciences (Journalism, Cinema & Audiovisuals)",period:"1999 - 2003",logo:G},{institution:"Produções FictÃcias",degree:"Workshop in Screenwriting for Film and Television",period:"2009",logo:J},{institution:"Universidade do Porto",degree:"Workshop in Television Editing",period:"2013",logo:U},{institution:"FLAG",degree:"Workshop em Social Media",period:"2014",logo:"/lovable-uploads/951e283f-42b5-4b31-ae29-fef5a875b4f5.png"}
17,{institution:"Google Creative Campus",degree:"Workshop in Communication and Media",period:"2019",logo:$},{institution:"Facebook & Instagram (Meta)",degree:"Workshop in Social Media and Marketing",period:"2019"},{institution:"Cloudflare Internal Training",degree:"Hands-on training and day-to-day work with Figma, GitHub, SQL, Jupyter Notebooks, and Adobe Premiere, alongside internal courses in Data Visualization, Privacy, Product, Cybersecurity, and Compliance",period:"2021 â Jul 2026",logo:ee},{institution:"Udemy, Coursera & Professional Training",degree:"Ongoing learning through external courses, including Udemy and Coursera, focused on Data Visualization, related digital storytelling skills, and hands-on experimentation with Claude Code, Codex, OpenCode, and other token-based LLM tools",period:"2021 - Current"}],n=[{icon:e.jsx(A,{size:20}),title:"Cinema",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"As a former movie critic, I've developed a deep appreciation for cinema as both an art form and a powerful storytelling medium. My background in film criticism has given me unique insights into narrative structure and visual storytelling that I apply to my data editing and content creation work."}),e.jsx("p",{children:"Throughout my career, I've had the privilege of interviewing numerous actors and directors, gaining firsthand knowledge of the creative process behind filmmaking and storytelling."})]})},{icon:e.jsx(q,{size:20}),title:"Podcasting",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"My passion for audio storytelling led me to create and host the Made in Tech podcast, where I explore technology's impact on society through in-depth conversations with industry leaders and innovators."}),e.jsx("p",{children:"Podcasting allows me to combine my journalism background with my interest in technology, creating accessible and engaging content that bridges complex technical topics with everyday relevance."})]})},{icon:e.jsx(X,{size:20}),title:"Mobility",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"My experience as a TV host and car reviewer for SIC NotÃcias â first at TV Turbo, then at Volante â sparked my interest in mobility technology and its evolution, as well as in telling engaging stories along the way. I'm especially interested in how mobility is changing (and will continue to change with autonomous vehicles), and in how cars can still offer excitement and memorable experiences."}
17),e.jsx("p",{children:"This background has informed my approach to covering technology trends, helping me recognize the real-world applications and implications of emerging technologies in the mobility sector."})]})},{icon:e.jsx(Y,{size:20}),title:"History",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"History has been a thread weaving through all my professional endeavors. In my car reviews and TV shows, I've incorporated historical context about automotive innovation to enrich storytelling. At Cloudflare, I've contextualized data and computing developments within their historical evolution, helping audiences understand how past innovations shape current technologies."}),e.jsx("p",{children:"In the Made in Tech podcast, I frequently explore how understanding technological history helps us better evaluate emerging innovations and their potential societal impact. This historical perspective brings depth to technical discussions and helps listeners connect with complex topics through the familiar lens of human progress and innovation."})]})},{icon:e.jsx(Z,{size:20}),title:"Technology & Innovation",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"Consistent interest in emerging technologies, especially Internet infrastructure, AI, and computing history. Through my work at Cloudflare â from analysis and testing to writing â and on podcasts, I explore how innovation shapes society, policy, and communication."}),e.jsx("p",{children:"I'm particularly fascinated by the intersection of technology and human communication, and how digital infrastructure changes the way we connect and share information."})]})},{icon:e.jsx(z,{size:20}),title:"Public Speaking & Events",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"Moderated hundreds of conferences and events, both in Portuguese and English, across tech, mobility, and policy. I enjoy making complex topics relatable through live conversation and interviews."}),e.jsx("p",{children:"The energy of live events and the challenge of facilitating meaningful discussions between diverse stakeholders continues to be one of my favorite aspects of my work."})]})},{icon:e.jsx(K,{size:20}),title:"AI Projects & Vibe Coding",content:e.jsxs("div",{children:[e.jsxs("p",{className:"mb-4",children:["Exploring AI, coding simple interfaces, and turning curiosity into small working projects â usually somewhere between storytelling and data. I use tools like Claude Code and Codex to build sites and experiments for real audiences, including"," ",e.jsx("a",{href:"https://joaotome.com",target:"_blank",rel:"noopener noreferrer",className:"text-cloudflare hover:text-cloudflare/80 underline",children:"joaotome.com"})," and"," ",e.jsx("a",{href:"https://thisweekinnet.com",target:"_blank",rel:"noopener noreferrer",className:"text-cloudflare hover:text-cloudflare/80 underline",children:"ThisWeekinNET.com"}),"."]}),e.jsxs("p",{children:[e.jsx("a",{href:"https://seremot.com",target:"_blank",rel:"noopener noreferrer",className:"text-cloudflare hover:text-cloudflare/80 underline",children:"Visit seremot.com"})," to see some of these experiments in action."]})]})},{icon:e.jsx(P,{size:20}),title:"Languages",content:e.jsxs("div",{children:[e.jsx("p",{className:"mb-4",children:"I'm fluent in English (Native/Bilingual) and have working knowledge of German (Elementary) and Spanish (Limited Working). My language skills have been invaluable in my international work and reporting."}),e.jsx("p",{children:"Being able to communicate across language barriers has opened doors to diverse perspectives and stories, enriching my work as a data editor and storyteller."})]})}];return e.jsx("section",{id:"about",className:"py-20 px-6 bg-gradient-to-br from-gray-50 to-white dark:from-gray-900 dark:to-background",children:e.jsxs("div",{className:"max-w-5xl mx-auto",children:[e.jsx(l,{children:e.jsxs("div",{className:"mb-12 text-center",children:[e.jsxs("h2",{className:"section-title mx-auto group",children:[e.jsx("span",{children:"About Me"}),e.jsx(g,{id:"about"})]}),e.jsxs("div",{className:"max-w-3xl mx-auto mt-8",children:[e.jsx("p",{className:"text-muted-foreground leading-relaxed mb-6",children:"João Tomé leads storytelling and data editing at Cloudflare and contributes to product development for Cloudflare Radar, turning complex Internet trends into clear narratives and interactive experiences. He is the product manager for Radar Display, Cloudflare's globe-based visualization platform showcased at events and offices worldwide."}),e.jsx("div",{className:"text-center text-muted-foreground my-6",children:"ââ"}),e.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"With an extensive background in journalism and more than two decades of experience in media and technology, João hosts Cloudflare's weekly show This Week in NET, has authored numerous Cloudflare blog posts on traffic shifts, security incidents, and AI, and developed insights and analysis covered by CNN, New York Times, BBC and others that connect data to global events. Before joining Cloudflare in 2021, he worked as a journalist, editor, and coordinator for several newsp
17apers and magazines, and was also a television presenter in Portugal, covering technology, culture (cinema), and the automotive industry."})]})]})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-12",children:[e.jsx(l,{children:e.jsxs("div",{className:"glass-card p-6 dark:bg-card/70 dark:border-border",children:[e.jsx("h3",{className:"text-xl font-semibold text-foreground mb-6",children:"Education & Training"}),e.jsx("div",{className:"space-y-6",children:o.map((i,s)=>e.jsxs("div",{className:"flex gap-4",children:[i.logo?e.jsx("img",{src:i.logo,alt:i.institution,className:"w-12 h-12 object-contain rounded-md flex-shrink-0"}):e.jsx("div",{className:"w-12 h-12 bg-secondary rounded-md flex items-center justify-center flex-shrink-0",children:e.jsx(P,{size:20,className:"text-muted-foreground"})}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium text-foreground",children:i.institution}),e.jsx("p",{className:"text-muted-foreground text-sm",children:i.degree}),i.period&&e.jsx("p",{className:"text-cloudflare text-xs",children:i.period})]})]},s))})]})}),e.jsx(l,{children:e.jsxs("div",{className:"glass-card p-6 dark:bg-card/70 dark:border-border",children:[e.jsx("h3",{className:"text-xl font-semibold text-foreground mb-6",children:"Personal Interests"}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-6",children:n.map((i,s)=>e.jsxs("button",{onClick:()=>r(s),className:`flex items-center gap-2 px-3 py-2 rounded-full transition-colors ${t===s?"bg-cloudflare text-white":"bg-secondary text-secondary-foreground hover:bg-secondary/80"}`,children:[i.icon,e.jsx("span",{children:i.title})]},s))}),e.jsx("div",{className:"min-h-[200px] text-muted-foreground",children:n[t].content})]})})]})]})})},pe=a.lazy(()=>p(()=>import("./Experience-Def4GMEG.js"),__vite__mapDeps([0,1,2,3,4,5]))),fe=a.lazy(()=>p(()=>import("./ThisWeekInNET-B68PPVpz.js"),__vite__mapDeps([6,1,2,3,7,4]))),be=a.lazy(()=>p(()=>import("./InteractiveGlobe-Ck4trIOw.js"),__vite__mapDeps([8,1,2,3,4]))),ve=a.lazy(()=>p(()=>import("./Contact-BpmKIAdT.js"),__vite__mapDeps([9,1,2,3,4]))),je=a.lazy(()=>p(()=>import("./Closing-BO8NN_5W.js"),__vite__mapDeps([10,1,2,3]))),ye=a.lazy(()=>p(()=>import("./CloudSection-BeQbg5VF.js"),__vite__mapDeps([11,1,2,3,4]))),Pe=()=>(a.useEffect(()=>{document.title="João Tomé | Sr. Data Editor at Cloudflare, Writer, Storyteller"},[]),a.useEffect(()=>{const t=()=>{window.location.hash&&window.requestAnimationFrame(()=>{_(window.location.hash,"auto")})};return t(),window.addEventListener("hashchange",t),()=>window.removeEventListener("hashchange",t)},[]),e.jsxs("div",{className:"min-h-screen",children:[e.jsx(ie,{}),e.jsxs("main",{children:[e.jsx(re,{}),e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"py-20"}),children:e.jsx(pe,{})}),e.jsx(le,{}),e.jsx(ce,{}),e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"py-20"}),children:e.jsx(fe,{})}),e.jsx(de,{}),e.jsx(xe,{}),e.jsx(ge,{}),e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"py-20"}),children:e.jsx(be,{})}),e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"py-20"}),children:e.jsx(ve,{})}),e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"py-12"}),children:e.jsx(je,{})}),e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"h-[75vh]"}),children:e.jsx(ye,{})})]}),e.jsx(R,{})]}));export{Pe as default};
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.