commit 629b15529792ae8a12de61004abb728163d4e86b Author: Parker Date: Sat Jan 25 23:28:04 2025 -0600 reupload diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fdddb29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000..9d49c2e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# [PKRM.DEV](https://pkrm.dev) + +Personal website, enspired partly by the "[Hello Friend NG](https://github.com/rhazdon/hugo-theme-hello-friend-ng)" theme. \ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..1409763 --- /dev/null +++ b/css/index.css @@ -0,0 +1,210 @@ +html { + font-family: "Open Sans", Arial; + color: #9F9FAA; + scroll-behavior: smooth; + background-color: #242528; +} + +html.light * { + color: #444; + background-color: #F0F0F0; +} + +html.light svg, +html.light #about a { + color: #444; + fill: #444; +} + +body { + margin: 0; + padding: 0; + display: flex; + justify-content: center; + min-height: 200vh; +} + +nav { + width: 100vw; + font-weight: 600; + position: absolute; + top: 30px; + left: 50%; + transform: translateX(-50%); + font-size: 1rem; + text-align: center; +} + +nav a { + margin: 0 1rem; + text-decoration: none; + color: #9F9FAA; +} + +nav a:hover { + text-decoration: underline; + cursor: pointer; + opacity: 0.6; + transition: opacity 0.25s ease-in-out; +} + +/* Nav media query for mobile */ +@media only screen and (max-width: 600px) { + nav a { + display: none; + text-align: right; + } + + nav #toggle { + display: block; + } +} + +#toggle { + /* Move to the top right of the screen */ + position: absolute; + top: 0; + right: 100px; + cursor: pointer; +} + +/* Toggle media query for mobile */ +@media only screen and (max-width: 600px) { + #toggle { + right: 50px; + } +} + +#moon, #sun { + position: absolute; + transition: opacity 0.1s ease; +} + +#moon { + opacity: 1; +} + +#sun { + opacity: 0; +} + +/* Header styles */ +header { + position: absolute; + top: 45%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; +} + +header h1 { + font-size: 45px; + width: 500px; +} + +header h2 { + font-size: 25px; + width: 500px; +} + +/* Header media query for mobile */ +@media only screen and (max-width: 600px) { + header h1 { + font-size: 33px; + width: 300px; + } + + header h2 { + font-size: 23px; + width: 300px; + } +} + +header a { + text-decoration: none; +} + +svg { + margin: 0 15px; + height: 50px; + width: 50px; +} + +/* Icons media query for mobile */ +@media only screen and (max-width: 600px) { + svg { + height: 40px; + width: 40px; + margin: 0 5px; + } +} + +svg:hover { + cursor: pointer; + opacity: 0.6; + transition: opacity 0.25s ease-in-out; +} + +#down-arrow { + position: absolute; + bottom: 30px; + left: 50%; + transform: translateX(-50%); + font-size: 2rem; +} + +#about { + margin-top: 100vh; + width: 1000px; +} + +#about h1 { + font-size: 25px; +} + +#about h2 { + font-size: 20px; +} + +#about p{ + font-size: 18px; +} + +#about ul li { + font-size: 18px; + margin-top: 7px; +} + +/* About media query for mobile */ +@media only screen and (max-width: 600px) { + #about { + width: 90%; + } + + #about h1 { + font-size: 1.5rem; + } + + #about h2 { + font-size: 1.25rem; + } + + #about p, #about ul li { + font-size: 1rem; + } + + #about ul li { + margin-top: 10px; + } +} + +#about a { + text-decoration: underline; + color: #9F9FAA; +} + +#about a:hover { + cursor: pointer; + opacity: 0.6; + transition: opacity 0.25s ease-in-out; +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..1793549 --- /dev/null +++ b/index.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + Parker M. + + + +
+

Hello, I'm Parker

+

A student with a strong passion for technology and privacy.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

About Me

+

I am a freshman in Computer Science at the University of Texas at Austin - also in FRI Quantum Computing. I manage a Debian based home server where I self-host everything I can. In addition to this, I actively work on personal projects, most of which are open-sourced.

+

View my projects on my personal Gitea instance, or my GitHub profile (mostly mirrors).

+
+

Things I run on my server

+
    +
  • WireGuard: Easy access to my home network when I'm away
  • +
  • Syncthing: Sync important files/databases across all of my machines
  • +
  • DNSCrypt: My own encrypted DNS resolver
  • +
  • AdGuard: DNS sinkhole to block ads + DNS hostnames
  • +
  • XMPP: I host my own personal XMPP server for people to contact me ( always use encryption )
  • +
  • Lavalink: Audio node for my Discord music bot
  • +
  • Guava: My open source and easily self-hostable Discord music bot
  • +
  • LinkLogger: My open source link shortener and IP logger
  • +
  • ... and a lot of media management services/tools
  • +
+
+

Personal Projects

+ +

Top 3

+
    +
  • Guava: Dead simple Discord music bot. Allows playing music from Spotify, Apple Music, SoundCloud, YouTube, Deezer, Bandcamp, and Twitch. Currently in >225 unique servers!
  • +
  • LinkLogger: Link shortener and IP logger. Features a full Web UI in React with a public API built on FastAPI.
  • +
  • EduStore (Closed Source): Inventory management for school districts. Developed during my internship at and for Mansfield ISD. Won 1st place in the Congressional App Challenge for Texas' 6th District.
  • +
+ +

Others

+
    +
  • CordArr: Request new content for Radarr/Sonarr libraries and create temporary Jellyfin accounts through Discord commands.
  • +
  • PeakPass Web-based password manager that checks user hashes against previosuly breached passwords. Features strong encryption algorithms, password hashing + salting, and a custom implementation of breach detection ( rather than using an API like HIBP )
  • +
+
+ + diff --git a/js/toggle.js b/js/toggle.js new file mode 100644 index 0000000..4a631ee --- /dev/null +++ b/js/toggle.js @@ -0,0 +1,61 @@ +const moon = document.getElementById('moon'); +const sun = document.getElementById('sun'); + +if (!document.cookie.includes('preference')) { + setPreference(false); +} else { + const preference = document.cookie.split(';').find(cookie => cookie.includes('preference')).split('=')[1]; + if (preference === 'true') { + turnLight(); + } else { + turnDark(); + } + +} + +function setPreference(value) { + if (typeof value === 'boolean') { + const expires = new Date(); + expires.setFullYear(expires.getFullYear() + 1); // 1 year + document.cookie = `preference=${value};expires=${expires.toUTCString()};path=/`; + turnLight(); + } +} + +function turnLight() { + document.documentElement.classList.add('light'); + + moon.style.opacity = '0'; + sun.style.opacity = '1'; + + setTimeout(() => { + moon.style.display = 'none'; + sun.style.display = 'block'; + } + , 100); +} + +function turnDark() { + document.documentElement.classList.remove('light'); + + sun.style.opacity = '0'; + moon.style.opacity = '1'; + + setTimeout(() => { + sun.style.display = 'none'; + moon.style.display = 'block'; + } + , 100); +} + +moon.addEventListener('click', () => { + document.documentElement.classList.add('light'); + setPreference(true); + turnLight(); +}); + +sun.addEventListener('click', () => { + document.documentElement.classList.remove('light'); + setPreference(false); + turnDark(); +}); diff --git a/parker.asc b/parker.asc new file mode 100644 index 0000000..860a45b --- /dev/null +++ b/parker.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZyMGlhYJKwYBBAHaRw8BAQdAoO/hA2S3fx16L55Bx+2bRN+zZe+8+wyME8vQ +7KANwn+0G1BhcmtlciBNIDxjb250YWN0QHBrcm0uZGV2PoiTBBMWCgA7AhsDBQsJ +CAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEE/Vx//4YLbpdwSeJ+UF7Tb8ErXV4F +AmcjB84ACgkQUF7Tb8ErXV5MGQD/Uxy3OwbaGmSDYcJks3fT2xrcwrTLHpYHDU/e +MgIrFnUBALJ9X18ugx6s3CPtNgnyvm6cLU/ttzeRoRWdG8PuODYFiJMEExYKADsW +IQT9XH//hgtul3BJ4n5QXtNvwStdXgUCZyMGlgIbAwULCQgHAgIiAgYVCgkICwIE +FgIDAQIeBwIXgAAKCRBQXtNvwStdXjeOAP9qQ4qg2k0WamMec/SdOchux/p8wzTo +F0Z9yXwIXsjmeAD/RxeHB8x9ZCfe1t1eNk+oVcPBmw/fLPr8OALpjJkG9Aq4OARn +IwaWEgorBgEEAZdVAQUBAQdAyDo44/FnbZMNqQUxYHgaQY1qImz9YsLSD/fmHzrA +ymIDAQgHiHgEGBYKACAWIQT9XH//hgtul3BJ4n5QXtNvwStdXgUCZyMGlgIbDAAK +CRBQXtNvwStdXiqSAP4/QwITUsUE6OLRKUQZ5JN4WQhjWto18vIZI/NlNVvibAEA +knJ7V0TYPjX8LhOCno47dDkwSWAHT/S9oMbRg9rCigk= +=oX5k +-----END PGP PUBLIC KEY BLOCK----- diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file