diff options
| author | Filip Wandzio <contact@philw.dev> | 2025-08-20 16:57:38 +0200 |
|---|---|---|
| committer | Filip Wandzio <contact@philw.dev> | 2025-08-20 16:57:38 +0200 |
| commit | 74eea9c13a4bd9846fd82bbaae841322cf5650fc (patch) | |
| tree | e2f1d62adbdd1030b2b4d01f53a800021c6c48ab | |
| parent | a812cfd2053b2a4b0d1ba904ef22f4945f649bb2 (diff) | |
| download | philw.dev-74eea9c13a4bd9846fd82bbaae841322cf5650fc.tar.gz philw.dev-74eea9c13a4bd9846fd82bbaae841322cf5650fc.zip | |
Make website more accessible, fix color schemes, update research information, optimize css
Signed-off-by: Filip Wandzio <contact@philw.dev>
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | .rsyncignore | 9 | ||||
| -rw-r--r-- | index.css | 267 | ||||
| -rw-r--r-- | index.html | 145 |
4 files changed, 217 insertions, 205 deletions
| @@ -1,4 +1,5 @@ | |||
| 1 | .svelte-kit/ | 1 | .svelte-kit/ |
| 2 | deploy.sh | ||
| 2 | package | 3 | package |
| 3 | .env | 4 | .env |
| 4 | .env.production | 5 | .env.production |
diff --git a/.rsyncignore b/.rsyncignore new file mode 100644 index 0000000..2479e96 --- /dev/null +++ b/.rsyncignore | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | |||
| 2 | .git/ | ||
| 3 | .gitignore | ||
| 4 | README.md | ||
| 5 | node_modules/ | ||
| 6 | *.log | ||
| 7 | .env | ||
| 8 | deploy.sh | ||
| 9 | .rsyncignore | ||
| @@ -1,138 +1,129 @@ | |||
| 1 | * { | 1 | * { box-sizing: border-box; } |
| 2 | box-sizing: border-box; | 2 | body { |
| 3 | } | 3 | margin: 0; |
| 4 | 4 | font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, | |
| 5 | body { | 5 | Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; |
| 6 | margin: 0; | 6 | font-size: 1.125rem; /* 18px base */ |
| 7 | background: #fcfdfe; /* base07 - light background */ | 7 | line-height: 1.8; |
| 8 | color: #000c18; /* base00 - dark text */ | 8 | background: #fcfdfe; |
| 9 | line-height: 1.75; | 9 | color: #000c18; |
| 10 | font-size: 1rem; | 10 | display: flex; |
| 11 | display: flex; | 11 | flex-direction: column; |
| 12 | flex-direction: column; | 12 | min-height: 100vh; |
| 13 | min-height: 100vh; | 13 | overflow-x: hidden; |
| 14 | overflow-x: hidden; | 14 | } |
| 15 | font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, | 15 | |
| 16 | Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; | 16 | header, footer { padding: 2em; } |
| 17 | } | 17 | |
| 18 | 18 | main { | |
| 19 | header, footer { | 19 | flex-grow: 1; |
| 20 | padding: 2em; | 20 | max-width: 900px; |
| 21 | text-align: center; | 21 | margin: 0 auto; |
| 22 | } | 22 | padding: 2em; |
| 23 | 23 | } | |
| 24 | main { | 24 | |
| 25 | flex-grow: 1; | 25 | footer { |
| 26 | padding: 2em; | 26 | border-top: 1px solid currentColor; |
| 27 | width: 100%; | 27 | text-align: center; |
| 28 | box-sizing: border-box; | 28 | font-size: 1.05rem; |
| 29 | max-width: 900px; | 29 | } |
| 30 | margin: 0 auto; | 30 | |
| 31 | } | 31 | h2 { |
| 32 | 32 | margin: 0 0 0.75em; | |
| 33 | footer { | 33 | font-weight: 700; |
| 34 | border-top: 1px solid #000c18; /* base00 */ | 34 | line-height: 1.3; |
| 35 | color: #000c18; /* base00 */ | 35 | } |
| 36 | } | 36 | |
| 37 | 37 | h1 { font-size: 2.5rem; } | |
| 38 | h1, h2 { | 38 | h2 { font-size: 2rem; } |
| 39 | font-weight: normal; | 39 | |
| 40 | margin: 0; | 40 | header h1 { font-size: 2rem; } |
| 41 | font-size: 2.25rem; | 41 | section { margin-bottom: 3em; padding: 0 2%; } |
| 42 | color: inherit; /* inherit from body */ | 42 | a { |
| 43 | } | 43 | color: #22aa44; |
| 44 | 44 | font-weight: 700; | |
| 45 | section { | 45 | text-decoration: underline; |
| 46 | margin-bottom: 3em; | 46 | text-decoration-color: transparent; |
| 47 | color: inherit; /* inherit from body */ | 47 | text-underline-offset: 4px; |
| 48 | width: 100%; | 48 | text-decoration-thickness: 2px; |
| 49 | padding: 0 2%; | 49 | transition: color .3s, text-decoration-color .3s; |
| 50 | } | 50 | } |
| 51 | 51 | a:hover, | |
| 52 | a { | 52 | a:focus { |
| 53 | color: #22aa44; /* base0B - green */ | 53 | color: #9966b8; |
| 54 | text-decoration: underline; | 54 | text-decoration-color: currentColor; |
| 55 | font-weight: 700; | 55 | } |
| 56 | transition: color 0.3s ease, text-decoration-color 0.3s ease; | 56 | a:focus-visible { |
| 57 | text-underline-offset: 3px; | 57 | outline: 3px solid #22aa44; |
| 58 | text-decoration-thickness: 2px; | 58 | outline-offset: 4px; |
| 59 | text-decoration-color: transparent; | 59 | border-radius: 3px; |
| 60 | } | 60 | } |
| 61 | 61 | header { text-align: center; } | |
| 62 | a:hover, | 62 | |
| 63 | a:focus { | 63 | .header-top { |
| 64 | color: #9966b8; /* base08 - purple */ | 64 | display: flex; |
| 65 | text-decoration-color: currentColor; | 65 | justify-content: center; |
| 66 | outline-offset: 3px; | 66 | align-items: center; |
| 67 | outline: 2px solid #22aa44; | 67 | gap: 2rem; |
| 68 | outline-radius: 3px; | 68 | } |
| 69 | } | 69 | |
| 70 | 70 | nav ul { | |
| 71 | a:focus-visible { | 71 | list-style: none; |
| 72 | outline-offset: 4px; | 72 | margin: 0; |
| 73 | outline: 3px solid #22aa44; /* base0B */ | 73 | padding: 0; |
| 74 | outline-radius: 3px; | 74 | display: flex; |
| 75 | } | 75 | gap: 2rem; |
| 76 | 76 | justify-content: center; | |
| 77 | .links a { | 77 | flex-wrap: wrap; |
| 78 | color: #22aa44; /* base0B */ | 78 | } |
| 79 | } | 79 | nav a { |
| 80 | 80 | font-weight: 600; | |
| 81 | .links a:hover { | 81 | font-size: 1.125rem; |
| 82 | color: #e6550d; /* base09 */ | 82 | } |
| 83 | } | 83 | .menu-toggle { |
| 84 | 84 | display: none; | |
| 85 | @media (max-width: 768px) { | 85 | background: none; |
| 86 | h1 { | 86 | border: 0; |
| 87 | font-size: 1.8rem; | 87 | font-size: 1.75rem; |
| 88 | } | 88 | cursor: pointer; |
| 89 | 89 | color: inherit; | |
| 90 | h2 { | 90 | } |
| 91 | font-size: 1.6rem; | 91 | .sr-only { |
| 92 | } | 92 | position: absolute; |
| 93 | 93 | width: 1px; height: 1px; | |
| 94 | footer { | 94 | margin: -1px; padding: 0; |
| 95 | font-size: 0.9em; | 95 | overflow: hidden; |
| 96 | } | 96 | clip: rect(0 0 0 0); |
| 97 | 97 | border: 0; | |
| 98 | .privacy { | 98 | } |
| 99 | font-size: 0.8em; | 99 | @media (max-width: 768px) { |
| 100 | } | 100 | h1 { font-size: 2rem; } |
| 101 | 101 | h2 { font-size: 1.75rem; } | |
| 102 | main { | 102 | main { padding: 1.5em; } |
| 103 | padding: 1.5em; | 103 | |
| 104 | } | 104 | .header-top { |
| 105 | } | 105 | justify-content: space-between; |
| 106 | 106 | text-align: left; | |
| 107 | @media (prefers-color-scheme: dark) { | 107 | } |
| 108 | body { | 108 | nav ul { |
| 109 | background: #000c18; /* base00 */ | 109 | flex-direction: column; |
| 110 | color: #b7b8b9; /* base05 */ | 110 | align-items: center; |
| 111 | } | 111 | gap: 1.25rem; |
| 112 | 112 | display: none; | |
| 113 | footer { | 113 | } |
| 114 | border-color: #fcfdfe; /* base07 */ | 114 | nav ul.open { display: flex; } |
| 115 | color: #fcfdfe; /* base07 */ | 115 | .menu-toggle { display: block; } |
| 116 | } | 116 | header { |
| 117 | 117 | position: sticky; | |
| 118 | a { | 118 | top: 0; |
| 119 | color: #22aa44; /* keep green links in dark mode */ | 119 | z-index: 1000; |
| 120 | text-decoration-color: transparent; | 120 | background: inherit; |
| 121 | } | 121 | } |
| 122 | 122 | } | |
| 123 | a:hover, | 123 | @media (prefers-color-scheme: dark) { |
| 124 | a:focus { | 124 | body { background: #000c18; color: #b7b8b9; } |
| 125 | color: #9966b8; /* base08 */ | 125 | footer { border-color: #fcfdfe; color: #fcfdfe; } |
| 126 | text-decoration-color: currentColor; | 126 | a { color: #22aa44; } |
| 127 | } | 127 | a:hover, a:focus { color: #9966b8; } |
| 128 | } | 128 | } |
| 129 | 129 | .highlight { background: #9966b8; color: #fcfdfe; } | |
| 130 | .high-contrast { | ||
| 131 | background-color: #fcfdfe; /* base07 */ | ||
| 132 | color: #000c18; /* base00 */ | ||
| 133 | } | ||
| 134 | |||
| 135 | .highlight { | ||
| 136 | background-color: #9966b8; /* base08 */ | ||
| 137 | color: #fcfdfe; /* base07 */ | ||
| 138 | } | ||
| @@ -1,91 +1,102 @@ | |||
| 1 | <!doctype html> | 1 | <!doctype html> |
| 2 | <html lang="en"> | 2 | <html lang="en"> |
| 3 | <head> | 3 | <head> |
| 4 | <meta charset="UTF-8" /> | 4 | <meta charset="utf-8" /> |
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1" /> | 5 | <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| 6 | <title>Filip Wandzio</title> | 6 | <title>Filip Wandzio β Software Engineer | Web & Mobile Development</title> |
| 7 | <meta name="description" content="Filip Wandzio β Software Engineer specializing in web technologies, mobile apps, and software design. Discover projects, research, presentations, and blog posts." /> | 7 | <meta name="description" content="Filip Wandzio β software engineer building web apps, mobile tools, and software with a focus on clarity and usefulness. Explore projects, research, and writing." /> |
| 8 | <meta name="keywords" content="Software Engineer, Web Technologies, Mobile Apps, Presentations, Blog, Filip Wandzio" /> | 8 | <meta name="keywords" content="software engineer, web technologies, mobile apps, projects, research, blog, filip wandzio" /> |
| 9 | <link rel="icon" type="image/x-icon" href="./public/favicon.ico" /> | 9 | <meta name="robots" content="index, follow" /> |
| 10 | <link rel="icon" type="image/png" href="./public/favicon.ico" /> | ||
| 11 | <link rel="apple-touch-icon" href="./public/favicon.ico" /> | ||
| 10 | <link rel="stylesheet" href="./index.css"> | 12 | <link rel="stylesheet" href="./index.css"> |
| 11 | <link rel="canonical" href="https://philw.dev" /> | 13 | <link rel="canonical" href="https://philw.dev" /> |
| 12 | |||
| 13 | <meta property="og:title" content="Filip Wandzio - Software Engineer" /> | 14 | <meta property="og:title" content="Filip Wandzio - Software Engineer" /> |
| 14 | <meta property="og:description" content="Software engineer specializing in web technologies, mobile apps, and software design." /> | 15 | <meta property="og:description" content="Software engineer building web apps, mobile tools, and software with a focus on clarity and usefulness." /> |
| 15 | <meta property="og:type" content="website" /> | 16 | <meta property="og:type" content="website" /> |
| 16 | <meta property="og:url" content="https://philw.dev" /> | 17 | <meta property="og:url" content="https://philw.dev" /> |
| 17 | <meta property="og:image" content="https://philw.dev/preview.webp" /> | 18 | <meta property="og:image" content="https://philw.dev/preview.webp" /> |
| 18 | 19 | <meta property="og:locale" content="en_US" /> | |
| 19 | <meta name="twitter:card" content="summary_large_image" /> | 20 | <meta name="theme-color" content="#000c18" /> |
| 20 | <meta name="twitter:title" content="Filip Wandzio - Software Engineer" /> | 21 | <script type="application/ld+json"> |
| 21 | <meta name="twitter:description" content="Software engineer specializing in web technologies, mobile apps, and software design." /> | 22 | { |
| 22 | <meta name="twitter:image" content="https://philw.dev/public/preview.webp" /> | 23 | "@context": "https://schema.org", |
| 23 | 24 | "@type": "Person", | |
| 24 | <meta name="theme-color" content="#22aa44" /> | 25 | "name": "Filip Wandzio", |
| 25 | 26 | "url": "https://philw.dev", | |
| 26 | <!-- <script type="application/ld+json"> --> | 27 | "jobTitle": "Software Engineer", |
| 27 | <!-- { --> | 28 | } |
| 28 | <!-- "@context": "https://schema.org", --> | 29 | </script> |
| 29 | <!-- "@type": "Event", --> | ||
| 30 | <!-- "name": "Enter The Matrix", --> | ||
| 31 | <!-- "startDate": "2025-11-11", --> | ||
| 32 | <!-- "location": { --> | ||
| 33 | <!-- "@type": "Place", --> | ||
| 34 | <!-- "name": "MacMeeting" --> | ||
| 35 | <!-- }, --> | ||
| 36 | <!-- "organizer": { --> | ||
| 37 | <!-- "@type": "Person", --> | ||
| 38 | <!-- "name": "Filip Wandzio" --> | ||
| 39 | <!-- } --> | ||
| 40 | <!-- } --> | ||
| 41 | <!-- </script> --> | ||
| 42 | </head> | 30 | </head> |
| 43 | <body> | 31 | <body> |
| 44 | <header aria-label="Website header"> | 32 | <header> |
| 45 | <h1>Filip Wandzio</h1> | 33 | <div class="header-top"> |
| 34 | <h1>Filip Wandzio</h1> | ||
| 35 | <button class="menu-toggle" aria-expanded="false" aria-controls="main-nav"> | ||
| 36 | β° <span class="sr-only">Menu</span> | ||
| 37 | </button> | ||
| 38 | </div> | ||
| 39 | <nav id="main-nav" aria-label="Main navigation"> | ||
| 40 | <ul> | ||
| 41 | <li><a href="#about">About</a></li> | ||
| 42 | <li><a href="#projects">Projects</a></li> | ||
| 43 | <li><a href="#research">Research</a></li> | ||
| 44 | <li><a href="#contact">Contact</a></li> | ||
| 45 | </ul> | ||
| 46 | </nav> | ||
| 46 | </header> | 47 | </header> |
| 48 | |||
| 47 | <main> | 49 | <main> |
| 48 | <section id="about" aria-labelledby="about"> | 50 | <section id="about" aria-labelledby="about-heading"> |
| 49 | <h2>About Me</h2> | 51 | <h2 id="about-heading">π‘ About</h2> |
| 50 | <p>Software engineer focused on practical tools and solving real-world problems with minimal overhead. Currently working with web technologies, mobile applications, and software design.</p> | 52 | <p>Iβm a software engineer who makes tools that are simple, practical, and useful. Right now I mostly work with web applications, mobile development, and general software design.</p> |
| 51 | <p>In my free time, I enjoy music β both listening and producing my own pieces.</p> | 53 | <p>Outside of programming, I spend time with music β listening, exploring, and creating my own pieces.</p> |
| 52 | </section> | 54 | </section> |
| 53 | 55 | ||
| 54 | <section id="projects" aria-labelledby="projects"> | 56 | <section id="projects" aria-labelledby="projects-heading"> |
| 55 | <h2>Projects</h2> | 57 | <h2 id="projects-heading">π¨βπ» Projects</h2> |
| 56 | <p>Personal projects are available <a href="https://git.philw.dev" target="_blank" rel="noopener noreferrer" aria-label="Visit Filip Wandzio's Git repository">here</a>.</p> | 58 | <p>Side projects are hosted on my <a href="https://www.git.philw.dev" target="_blank" rel="noopener noreferrer" aria-label="visit filip wandzio's git repository">git repository</a>. They are experiments, prototypes, and actual working solutions used on my personal machine. Here you can also find materials used on my prelections.</p> |
| 57 | </section> | 59 | </section> |
| 58 | 60 | ||
| 59 | <!-- <section id="presentations" aria-labelledby="presentations"> --> | 61 | <section id="research" aria-labelledby="research-heading"> |
| 60 | <!-- <h2>Upcoming Presentations</h2> --> | 62 | <h2 id="research-heading">π¬ Research</h2> |
| 61 | <!-- <ul> --> | 63 | <p> |
| 62 | <!-- <li><strong>Enter The Matrix</strong> β <em>MacMeeting</em> β 11.11.2025</li> --> | 64 | Currently I am an undergraduate / masterβs student in Computer Science with a interest in |
| 63 | <!-- </ul> --> | 65 | <strong>Cybersecurity, Operating Systems and Network Engineering</strong>. |
| 64 | <!-- </section> --> | 66 | My academic work has focused on learning core concepts, exploring how technology can be made |
| 67 | more accessible, and experimenting with practical projects that bridge theory and application. | ||
| 68 | </p> | ||
| 69 | <p> | ||
| 70 | I am not yet a professional researcher, but I enjoy reviewing academic papers, | ||
| 71 | and building prototypes. My long-term goal is to pursue further graduate studies where I can deepen my | ||
| 72 | expertise. | ||
| 73 | </p> | ||
| 74 | </section> | ||
| 65 | 75 | ||
| 66 | <section id="research" aria-labelledby="research"> | 76 | <section id="contact" aria-labelledby="contact-heading"> |
| 67 | <h2>Research</h2> | 77 | <h2 id="contact-heading">βοΈ Contact</h2> |
| 68 | <ul> | 78 | <p>If youβd like to get in touch, send me an email: <a href="mailto:contact@philw.dev" aria-label="email filip wandzio">contact@philw.dev</a>.</p> |
| 69 | <li><a href="#" aria-label="Bachelor's thesis details">Bachelor's thesis</a></li> | ||
| 70 | <li><a href="#" aria-label="Master's thesis details">Master's thesis</a> β work in progress</li> | ||
| 71 | </ul> | ||
| 72 | </section> | 79 | </section> |
| 80 | </main> | ||
| 81 | <script> | ||
| 82 | |||
| 83 | const toggleButton = document.querySelector('.menu-toggle'); | ||
| 84 | const navMenu = document.querySelector('#main-nav ul'); | ||
| 73 | 85 | ||
| 74 | <!-- <section id="blog" aria-labelledby="blog"> --> | 86 | toggleButton.addEventListener('click', () => { |
| 75 | <!-- <h2>Blog</h2> --> | 87 | const expanded = toggleButton.getAttribute('aria-expanded') === 'true'; |
| 76 | <!-- <ul> --> | 88 | toggleButton.setAttribute('aria-expanded', String(!expanded)); |
| 77 | <!-- <li><a href="#" aria-label="My approach to web technologies article">Web Technologies</a> β work in progress</li> --> | 89 | navMenu.classList.toggle('open'); |
| 78 | <!-- <li><a href="#" aria-label="My experience with music production article">Music production and GNU/Linux</a> β work in progress</li> --> | 90 | }); |
| 79 | <!-- </ul> --> | ||
| 80 | <!-- </section> --> | ||
| 81 | 91 | ||
| 82 | <section id="contact" aria-labelledby="contact"> | 92 | document.querySelectorAll('#main-nav a').forEach(link => { |
| 83 | <h2>Contact</h2> | 93 | link.addEventListener('click', () => { |
| 84 | <p>Reach out via <a href="mailto:contact@philw.dev" aria-label="Email Filip Wandzio">contact@philw.dev</a>.</p> | 94 | if (navMenu.classList.contains('open')) { |
| 85 | </section> | 95 | navMenu.classList.remove('open'); |
| 86 | </main> | 96 | toggleButton.setAttribute('aria-expanded', 'false'); |
| 87 | <footer aria-label="Footer with privacy statement"> | 97 | } |
| 88 | <p class="privacy">This website does not collect any data or track visitors.</p> | 98 | }); |
| 89 | </footer> | 99 | }); |
| 100 | </script> | ||
| 90 | </body> | 101 | </body> |
| 91 | </html> | 102 | </html> |
