PageSourceSearch

https://emanuelzhupa.netlify.app/projects/

html emanuelzhupa.netlify.app collected 2026-10-03 10:41:40 UTC 14,673 bytes, 22 lines download raw bytes

1<!DOCTYPE html><html lang="en" data-critters-container><head>
2  <meta charset="utf-8">
3  <title>Emanuel Zhupa | Portfolio</title>
4  <meta name="description" content="This is my portfolio page, and it contains what I do, my profile and every link that you can connect with me.">
5  <meta name="og:title" content="This is my portfolio page, and it contains what I do, my profile and every link that you can connect with me.">
6  <meta name="og:description" content="Emanuel Zhupa | Portfolio">
7  <base href="/">
8  <meta name="viewport" content="width=device-width, initial-scale=1">
9  <link rel="icon" type="image/x-icon" href="favicon.ico">
10  <link rel="preconnect" href="https://fonts.googleapis.com">
11  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12  <style type="text/css">@font-face{font-family:'Poppins';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2');unicode-range:U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;}@font-face{font-family:'Poppins';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Poppins';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Space Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE58RWq7.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Space Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE98RWq7.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Space Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
13
14<style>*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:Poppins,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1{margin:0}img{display:block;vertical-align:middle}img{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.left-0{left:0}.top-0{top:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-14{margin-bottom:3.5rem}.mb-4{margin-bottom:1rem}.mt-14{margin-top:3.5rem}
14.flex{display:flex}.inline-flex{display:inline-flex}.h-12{height:3rem}.h-14{height:3.5rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-screen{width:100vw}.max-w-screen-sm{max-width:640px}.flex-1{flex:1 1 0%}@keyframes slideDownFade{0%{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}.animate-slideDownFade{animation:slideDownFade .6s ease-in-out both}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-3{gap:.75rem}.gap-40{gap:10rem}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-scroll{overflow-y:scroll}.scroll-smooth{scroll-behavior:smooth}.rounded-\[14px\]{border-radius:14px}.rounded-\[6px\]{border-radius:6px}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}.bg-neutral-100{--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity))}.bg-opacity-10{--tw-bg-opacity: .1}.bg-opacity-50{--tw-bg-opacity: .5}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pb-8{padding-bottom:2rem}.pt-20{padding-top:5rem}.text-center{text-align:center}.font-sans{font-family:Poppins,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-sm{font-size:.875rem;line-height:1.25rem}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.backdrop-blur-lg{--tw-backdrop-blur: blur(16px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.\[-webkit-mask-image\:linear-gradient\(to_bottom\,black\,transparent\)\]{-webkit-mask-image:linear-gradient(to bottom,black,transparent)}.\[animation-delay\:calc\(var\(--animation-delay\)\*2\)\]{animation-delay:calc(var(--animation-delay) * 2)}:root{--animation-delay: 90ms}.selection\:bg-purple-600 *::selection{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.selection\:text-white *::selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.selection\:bg-purple-600::selection{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.selection\:text-white::selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:overflow-y-visible{overflow-y:visible}.sm\:p-2{padding:.5rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width: 768px){.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (prefers-color-scheme: dark){.dark\:bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity))}}
15</style><link rel="stylesheet" href="styles-EE63ADBC.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-EE63ADBC.css"></noscript><link rel="modulepreload" href="chunk-VN3JXZUY.js"><link rel="modulepreload" href="chunk-SQIJGMR7.js"><link rel="modulepreload" href="chunk-T3JADRVA.js"><link rel="modulepreload" href="chunk-5K2QSYQD.js"><style ng-app-id="ng">.soon[_ngcontent-ng-c4131806677]{position:relative;cursor:not-allowed}.soon[_ngcontent-ng-c4131806677]:after{content:"";position:absolute;width:70%;height:2px;background-color:#ff0000b3;transform:skewY(15deg) translateY(50%)}.soon[_ngcontent-ng-c4131806677]:before{content:"soon";font-size:11px;position:absolute;right:3px;top:0;background:-webkit-linear-gradient(90deg,rgba(255,0,0,1) 0%,rgba(102,51,153,1) 60%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;transform:translateY(-50%)}</style></head>
16
17<body class="scroll-smooth overflow-x-hidden bg-gray-950 font-sans selection:bg-purple-600 selection:text-white"><!--nghm-->
18  <ez-root ng-version="17.2.3" ngh="3" ng-server-context="ssg"><router-outlet></router-outlet><ez-layout ngh="2"><div class="relative flex min-h-screen w-screen flex-col items-center"><ez-top-shade ngh="0"><div class="pointer-events-none fixed left-0 top-0 z-50 h-12 w-full bg-neutral-100 to-transparent backdrop-blur-xl [-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] dark:bg-neutral-900"></div></ez-top-shade><main class="mx-auto mb-14 w-full max-w-screen-sm flex-1 px-4 pb-8 pt-20 text-gray-400"><router-outlet></router-outlet><ng-component ngh="1"><div class="mt-14 flex flex-col gap-40"><a target="_blank" class="[animation-delay:calc(var(--animation-delay)*0)] animate-slideDownFade flex flex-col gap-3 items-center w-full" href="https://llogaritpagen.ezzh.org"><h1 class="md:text-xl">LlogaritPagen</h1><img alt="project image" src="assets/images/projects/llogaritpagen.png"></a><a target="_blank" class="[animation-delay:calc(var(--animation-delay)*1)] animate-slideDownFade flex flex-col gap-3 items-center w-full" href="https://chromewebstore.google.com/detail/filma24/jmkgalgjcajmnaffhhccaialhephchei"><h1 class="md:text-xl">Filma24</h1><img alt="project image" src="assets/images/projects/filma24.png"></a><a target="_blank" class="[animation-delay:calc(var(--animation-delay)*2)] animate-slideDownFade flex flex-col gap-3 items-center w-full" href="https://bookmark-explorer.netlify.app/"><h1 class="md:text-xl">BookmarkExplorer</h1><img alt="project image" src="assets/images/projects/bookmarkexplorer.png"></a><!----></div></ng-component><!----></main><ez-floating-menu _nghost-ng-c4131806677 ngh="0"><div _ngcontent-ng-c4131806677 class="fixed inset-x-0 bottom-0 z-20 mx-auto mb-4 flex h-14 px-6"><div _ngcontent-ng-c4131806677 class="relative mx-auto flex h-full items-center overflow-y-scroll roun
18ded-[14px] border border-gray-700 sm:overflow-y-visible backdrop-filter backdrop-blur-lg bg-opacity-10"><a _ngcontent-ng-c4131806677 routerlink="/home" routerlinkactive="active" href="/home" class="cursor-pointer font-base inline-flex items-center justify-center px-4 rounded-full sm:text-base text-center text-gray-200 text-sm transition z-20">Home</a><a _ngcontent-ng-c4131806677 routerlink="/projects" routerlinkactive="active" href="/projects" class="cursor-pointer font-base inline-flex items-center justify-center px-4 rounded-full sm:text-base text-center text-gray-200 text-sm transition z-20 active">Projects</a><a _ngcontent-ng-c4131806677 class="soon cursor-pointer font-base inline-flex items-center justify-center px-4 rounded-full sm:text-base text-center text-gray-200 text-sm transition z-20">Blog</a><a _ngcontent-ng-c4131806677 class="soon cursor-pointer font-base inline-flex items-center justify-center px-4 rounded-full sm:text-base text-center text-gray-200 text-sm transition z-20">Lab</a><span _ngcontent-ng-c4131806677 class="absolute bottom-0 top-0 z-10 flex overflow-hidden rounded-[6px] p-2 transition-all duration-300 sm:p-2" style="left: 0;"><span _ngcontent-ng-c4131806677 class="h-full w-full rounded-[6px] bg-gray-800 bg-opacity-50"></span></span></div></div></ez-floating-menu></div></ez-layout><!----></ez-root>
19<script src="polyfills-RT5I6R6G.js" type="module"></script>
19<script src="main-HH324CLU.js" type="module"></script>
19
20
21
22<script id="ng-state" type="application/json">{"__nghData__":[{},{"t":{"2":"t0"},"c":{"2":[{"i":"t0","r":1,"x":3}]}},{"c":{"3":[{"i":"c698004123","r":1}]}},{"c":{"0":[{"i":"c2705719326","r":1}]}}]}</script>
22</body></html>

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.