<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0r3vj_0.mr1nr.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/0fkgggni7cm6c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/10za8590982g2.js"/><script src="/_next/static/chunks/141l0ii_c2s0..js" async=""></script><script src="/_next/static/chunks/0fs-lua__io87.js" async=""></script><script src="/_next/static/chunks/0aqpm5mabssqz.js" async=""></script><script src="/_next/static/chunks/128aahewwf1we.js" async=""></script><script src="/_next/static/chunks/turbopack-0muv7teea8ak4.js" async=""></script><script src="/_next/static/chunks/0x.73w57rn4ou.js" async=""></script><script src="/_next/static/chunks/0i.l9589uvx0j.js" async=""></script><script src="/_next/static/chunks/0v_f9h2hd.d2t.js" async=""></script><script src="/_next/static/chunks/09qva55uwckjm.js" async=""></script><meta name="next-size-adjust" content=""/><meta name="color-scheme" content="dark light"/><title>Rudov - https://rudov.com</title><meta name="description" content="Fullstack Software Developer proficient in TypeScript, JavaScript, React.js, Next.js, Tailwind, React Native, and more. Skilled in modern state management (Recoil, Joitai, Redux) and data fetching (GraphQL, Hasura). Experienced with testing (Jest, Cypress), deployment (Docker), and cloud infrastructure (Firebase). Strong foundation in Git and Linux."/><link rel="manifest" href="/site.webmanifest"/><meta name="robots" content="index, follow"/><meta property="og:title" content="Rudov - https://rudov.com"/><meta property="og:description" content="Fullstack Software Developer proficient in TypeScript, JavaScript, React.js, Next.js, Tailwind, React Native, and more. Skilled in modern state management (Recoil, Joitai, Redux) and data fetching (GraphQL, Hasura). Experienced with testing (Jest, Cypress), deployment (Docker), and cloud infrastructure (Firebase). Strong foundation in Git and Linux."/><meta property="og:image" content="https://rudov.com/opengraph-image.png?opengraph-image.0-rkr16z1w7be.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:width" content="512"/><meta property="og:image:height" content="512"/><meta property="og:image:alt" content="Denis Rudov | Software developer
"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Rudov - https://rudov.com"/><meta name="twitter:description" content="Fullstack Software Developer proficient in TypeScript, JavaScript, React.js, Next.js, Tailwind, React Native, and more. Skilled in modern state management (Recoil, Joitai, Redux) and data fetching (GraphQL, Hasura). Experienced with testing (Jest, Cypress), deployment (Docker), and cloud infrastructure (Firebase). Strong foundation in Git and Linux."/><meta name="twitter:image" content="https://rudov.com/twitter-image.png?twitter-image.0-rkr16z1w7be.png"/><meta name="twitter:image:alt" content="Denis Rudov | Software developer
"/><meta name="twitter:image:type" content="image/png"/><meta name="twitter:image:width" content="512"/><meta name="twitter:image:height" content="512"/><link rel="icon" href="/favicon-32x32.png" type="image/png" sizes="32x32"/><link rel="icon" href="/favicon-16x16.png" type="image/png" sizes="16x16"/><link rel="apple-touch-icon" href="/favicon-32x32.png" sizes="32x32"/><meta name="robots" content="noindex"/><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="bg-page-gradient min-h-dvh bg-none acme_22b7fa30-module__5N8uxG__variable"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("data-theme","theme","system","dark",["light","dark"],null,true,true)</script><!--$!--><template data-dgst="NEXT_HTTP_ERROR_FALLBACK;404"></template><!--/$--><script src="/_next/static/chunks/10za8590982g2.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[339756,[\"/_next/static/chunks/0x.73w57rn4ou.js\",\"/_next/static/chunks/0i.l9589uvx0j.js\"],\"default\"]\n3:I[837457,[\"/_next/static/chunks/0x.73w57rn4ou.js\",\"/_next/static/chunks/0i.l9589uvx0j.js\"],\"default\"]\n6:I[897367,[\"/_next/static/chunks/0x.73w57rn4ou.js\",\"/_next/static/chunks/0i.l9589uvx0j.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[897367,[\"/_next/static/chunks/0x.73w57rn4ou.js\",\"/_next/static/chunks/0i.l9589uvx0j.js\"],\"ViewportBoundary\"]\nc:I[897367,[\"/_next/static/chunks/0x.73w57rn4ou.js\",\"/_next/static/chunks/0i.l9589uvx0j.js\"],\"MetadataBoundary\"]\ne:I[168027,[],\"default\",1]\n10:I[363178,[\"/_next/static/chunks/0v_f9h2hd.d2t.js\",\"/_next/static/chunks/09qva55uwckjm.js\"],\"ThemeProvider\"]\n12:I[175696,[\"/_next/static/chunks/0v_f9h2hd.d2t.js\",\"/_next/static/chunks/09qva55uwckjm.js\"],\"default\"]\n13:I[27201,[\"/_next/static/chunks/0x.73w57rn4ou.js\",\"/_next/static/chunks/0i.l9589uvx0j.js\"],\"IconMark\"]\n:HL[\"/_next/static/chunks/0r3vj_0.mr1nr.css\",\"style\"]\n:HL[\"/_next/static/chunks/0fkgggni7cm6c.css\",\"style\"]\n:HL[\"/_next/static/media/61b159a623dd5ba4-s.p.0yh29k-wt5832.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"feed\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[[\"locale\",\"en\",\"d\",null],{\"children\":[[\"rest\",\"feed\",\"c\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0r3vj_0.mr1nr.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0fkgggni7cm6c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0v_f9h2hd.d2t.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/09qva55uwckjm.js\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L4\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0r3vj_0.mr1nr.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"e5Y_O6d6rk1H0Y1pTcSDf\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n4:[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-page-gradient min-h-dvh bg-none acme_22b7fa30-module__5N8uxG__variable\",\"children\":[\"$\",\"$L10\",null,{\"enableSystem\":true,\"disableTransitionOnChange\":true,\"defaultTheme\":\"system\",\"attribute\":\"data-theme\",\"forcedTheme\":\"dark\",\"children\":[\"$\",\"$7\",null,{\"children\":\"$L11\"}]}]}]}]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"$L12\",null,{\"formats\":\"$undefined\",\"locale\":\"en\",\"messages\":{\"HomePage\":{\"title\":\"rudov.com\",\"eyebrow\":\"routes\",\"headline\":\"Built simple. Made to move.\",\"description\":\"A couple of focused tools: one for the ride, one for your images.\",\"rideCta\":\"Ride page\",\"exifCta\":\"EXIF reader\",\"rideTag\":\"Quick contact\",\"rideTitle\":\"Ride\",\"rideDescription\":\"A simple page for anyone who found the motorbike to get in touch fast from mobile.\",\"exifTag\":\"Image tool\",\"exifTitle\":\"EXIF Reader\",\"exifDescription\":\"Upload a photo and inspect camera, GPS and timestamp metadata without extra noise.\"},\"ExifPage\":{\"backHome\":\"Back home\",\"eyebrow\":\"image metadata\",\"description\":\"Extract and view metadata from your photos. Upload a JPG, JPEG, or TIFF image to see camera settings, GPS coordinates, date taken, and other EXIF information.\",\"aboutTitle\":\"What is EXIF Data?\",\"aboutText\":\"EXIF (Exchangeable Image File Format) is a standard that stores metadata in images from digital cameras and phones. It can include camera model, exposure settings, GPS location, date taken, and other technical details.\",\"home\":\"rudov.com\"},\"RidePage\":{\"title\":\"You found my motobike\",\"instagram\":\"Instagram\",\"messageMe\":\"Message me\",\"copyEmail\":\"Copy email\",\"copied\":\"Copied\",\"backHome\":\"Back home\",\"signoff\":\"Ride safe\",\"home\":\"rudov.com\"},\"common\":{\"backHome\":\"Back home\"},\"MironPage\":{\"greeting\":\"Hey, {name}! 👋\",\"description\":\"You're invited to an epic paintball battle at an awesome venue with great company. Miron's party isn't just a birthday — it's an adventure! 📅 07.06.2026 at 10:00\",\"button\":\"I'm in\",\"waiting\":\"We're waiting for you!\",\"popupTitle\":\"Amazing, see you at the birthday party!\",\"popupClose\":\"Close\",\"mapLabel\":\"Location on map\",\"consentLabel\":\"Parental consent for participation in activities\",\"consentWarning\":\"Without a signed consent form the child will not be able to participate in the activities. Print, sign and bring it with you.\",\"consentPrint\":\"Print consent form\",\"directionsTitle\":\"How to get there?\",\"directionsCar\":\"🚗 By car to FORT PRZYGODY via ul. Redycka 77 only — at the bus loop near Fonbud, turn onto the training ground. Then follow the signs along the cobblestone road for about 800 m to the car park.\",\"directionsTransit\":\"🚌 By public transport: bus lines 116 and 119 to the last stop. Then walk about 1 km through the training ground following the signs.\"}},\"now\":\"$undefined\",\"timeZone\":\"Europe/Warsaw\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"grid place-items-center min-h-svh\",\"children\":[\"$\",\"h2\",null,{\"className\":\"text-3xl tracking-tight\",\"children\":\"4⛔️4   |   Oops...\"}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"color-scheme\",\"content\":\"dark light\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"title\",\"0\",{\"children\":\"Rudov - https://rudov.com\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Fullstack Software Developer proficient in TypeScript, JavaScript, React.js, Next.js, Tailwind, React Native, and more. Skilled in modern state management (Recoil, Joitai, Redux) and data fetching (GraphQL, Hasura). Experienced with testing (Jest, Cypress), deployment (Docker), and cloud infrastructure (Firebase). Strong foundation in Git and Linux.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:title\",\"content\":\"Rudov - https://rudov.com\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:description\",\"content\":\"Fullstack Software Developer proficient in TypeScript, JavaScript, React.js, Next.js, Tailwind, React Native, and more. Skilled in modern state management (Recoil, Joitai, Redux) and data fetching (GraphQL, Hasura). Experienced with testing (Jest, Cypress), deployment (Docker), and cloud infrastructure (Firebase). Strong foundation in Git and Linux.\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image\",\"content\":\"https://rudov.com/opengraph-image.png?opengraph-image.0-rkr16z1w7be.png\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:height\",\"content\":\"512\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:alt\",\"content\":\"Denis Rudov | Software developer\\n\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"Rudov - https://rudov.com\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"Fullstack Software Developer proficient in TypeScript, JavaScript, React.js, Next.js, Tailwind, React Native, and more. Skilled in modern state management (Recoil, Joitai, Redux) and data fetching (GraphQL, Hasura). Experienced with testing (Jest, Cypress), deployment (Docker), and cloud infrastructure (Firebase). Strong foundation in Git and Linux.\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:image\",\"content\":\"https://rudov.com/twitter-image.png?twitter-image.0-rkr16z1w7be.png\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:image:alt\",\"content\":\"Denis Rudov | Software developer\\n\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:image:height\",\"content\":\"512\"}],[\"$\",\"link\",\"19\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"type\":\"image/png\",\"sizes\":\"32x32\"}],[\"$\",\"link\",\"20\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"type\":\"image/png\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"21\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\"}],[\"$\",\"$L13\",\"22\",{}]]\n"])</script><script>self.__next_f.push([1,"5:E{\"digest\":\"NEXT_HTTP_ERROR_FALLBACK;404\"}\n"])</script></body></html>