2023-08-26 11:17:16 -07:00
<!DOCTYPE html>
< html >
< head >
< title > Carya Software< / title >
< meta charset = "utf-8" >
<!-- <link rel="stylesheet" type="text/css" href="css/theme.css"> -->
< link rel = "stylesheet" href = "./css/theme-compiled.css"
< / head >
< body class = "bg-[#efe9f4]" >
< div class = "flex justify-center" >
<!-- <div class="mx - 4 order - last"> -->
<!-- <img class="logo" src="img/logo.svg" alt="carya.software logo"> -->
<!-- </div> -->
2023-08-26 12:39:16 -07:00
< div class = "mx-4 self-center mt-16 max-w-xl min-w-xl" >
2023-08-26 11:17:16 -07:00
< h1 class = "title text-center" > carya.software< / h1 >
< div class = "justify-center" >
< div class = "flex justify-center" >
2023-09-23 14:26:55 -07:00
< button onclick = "toggleSections(this)" class = "text-xl text-[#14591e] px-6 mx-8 pt-2 mb-2" > about< / button >
< button onclick = "toggleSections(this)" class = "text-xl text-[#14591e] px-6 mx-8 pt-2 mb-2" > projects< / button >
< button onclick = "toggleSections(this)" class = "text-xl text-[#14591e] px-6 mx-8 pt-2 mb-2" > contact< / button >
2023-08-26 11:17:16 -07:00
< / div >
2023-09-23 14:26:55 -07:00
< div id = "about" class = "hidden" >
2023-08-26 11:17:16 -07:00
< h2 class = "font-semibold text-[#0a210f] p-2" > What is this site?< / h2 >
< div class = "text-left" >
2023-08-26 12:39:16 -07:00
< p class = "p-2" >
2023-08-26 11:17:16 -07:00
This is my personal website.
< / p >
2023-08-26 12:39:16 -07:00
< p class = "p-2" >
2023-08-26 11:17:16 -07:00
I do not use my real name here for privacy reasons — < br > and because I like < span class = "italic" > carya.software< / span > a lot more than < span class = "italic" > first-last.tld< / span > .
< / p >
2023-08-26 12:39:16 -07:00
< p class = "p-2" >
If you got here from my resume you may want to look at the projects tab or head to my < a class = "underline" href = "https://forge.carya.software/explore/repos" > Forgejo instance< / a > (a lightweight FOSS git software forge) directly.
< / p >
< p class = "p-2" >
If you need to contact me you can find my various account addresses in the contact tab. I would be happy to chat once I know you aren't a web scraper!
2023-08-26 11:17:16 -07:00
< / p >
< / div >
< h2 class = "font-semibold text-[#0a210f] p-2" > Who are you?< / h2 >
< div class = "text-left" >
2023-08-26 12:39:16 -07:00
< p class = "p-2" >
2023-08-26 11:17:16 -07:00
I am a software engineer based on the East Coast of the USA. Professionally I have mostly worked with microsoft technology (.NET, SQL Server, et al) but for personal use I prefer < a class = "underline text-[#4e2a8e]" href = "https://elixir-lang.org/" > Elixir< / a > .
< / p >
2023-08-26 12:39:16 -07:00
< p class = "p-2" >
2023-09-23 14:27:06 -07:00
Outside of spending time with family, church, and community I garden, work on personal projects, read, and attempt to identify the < a class = "underline" href = "mushrooms.html" > various fungi< / a > I find growing in my yard.
2023-08-26 11:17:16 -07:00
< / p >
< / div >
< h2 class = "font-semibold text-[#0a210f] p-2" > What does "carya" mean?< / h2 >
< div class = "text-left" >
< p class = "p-1" >
It is the genus name for < a class = "underline" href = "https://en.wikipedia.org/wiki/Hickory" > Hickory trees< / a > , which I am fond of.
< / p >
< / div >
< / div >
< div id = "projects" class = "hidden" >
2023-09-23 14:26:55 -07:00
< ul class = "p-2 list-none list-inside" >
2023-08-26 12:39:16 -07:00
< li >
< a class = "underline font-semibold" href = "https://forge.carya.software/Public/carya.software" > Carya.software< / a > — the source code for this site.
2023-09-23 14:26:55 -07:00
< ul class = "p-2 list-disc list-inside" >
2023-08-26 12:39:16 -07:00
< li > Built using basic HTML, TailwindCSS, and vanilla JavaScript. Hosted on a VPS with Nginx running on Debian.< / li >
< li > I have additional services running on subdomains on the same server. For example, I host my public repositories at forge.carya.software, and I have a pleroma instance on pleroma.carya.software< / li >
< li > SSL certificates managed using Certbot< / li >
< / ul >
< / li >
2023-08-26 11:17:16 -07:00
< / ul >
< / div >
< div id = "contact" class = "hidden" >
2023-08-26 12:39:16 -07:00
< div class = "" >
< table class = "table-auto mx-auto my-8 font-[#0a210f]" >
< tbody >
< tr >
< td class = "p-2" >
< label class = "font-semibold text-[#0a210f]" > Email:< / label >
< / td >
< td class = "p-2" >
TBD, redacted due to spambots.
< / td >
< / tr >
< tr >
< td class = "p-2" >
< label class = "font-semibold text-[#0a210f]" > Matrix:< / label >
< / td >
< td class = "p-2" >
TBD
< / td >
< / tr >
< / tbody >
< / table >
< / div >
2023-08-26 11:17:16 -07:00
< / div >
< / div >
< / div >
< / div >
< / body >
< html >
< script >
function toggleSections(button){
2023-09-23 14:27:21 -07:00
// Constants
2023-08-26 11:17:16 -07:00
hiddenClass = "hidden";
revealedClass = "visible";
2023-09-23 14:27:21 -07:00
ids = ["about", "projects", "contact"];
selectedClasses = ["border-[#14591e]" , "border-b-2"]
// Helper functions
2023-08-26 11:17:16 -07:00
function switchClasses(element, toRemove, toInsert){
element.classList.remove(toRemove);
element.classList.add(toInsert);
}
2023-09-23 14:27:21 -07:00
function removeClasses(element, classes){
element.classList.forEach()
}
2023-08-26 11:17:16 -07:00
function hide(id) {
switchClasses(document.getElementById(id), revealedClass, hiddenClass);
}
function show(id) {
switchClasses(document.getElementById(id), hiddenClass, revealedClass);
}
2023-09-23 14:27:21 -07:00
function hasClasses(element, classes){
return classes.map(c => element.classList.contains(c)).reduce((acc, b) => acc & & b, true);
}
// Handle underline for tab buttons
parent = button.parentElement;
// Remove selection classes from other buttons
// If button clicked already selected, unselect
// Otherwise select
// Manage hiding/showing content
2023-08-26 11:17:16 -07:00
id = button.textContent;
ids.filter(i => i !== id).forEach(hide);
element = document.getElementById(id);
2023-09-23 14:27:21 -07:00
if(hasClasses(element, [revealedClass])){
2023-08-26 11:17:16 -07:00
switchClasses(element, revealedClass, hiddenClass);
return;
}
ids.filter(i => i === id).forEach(show);
};
< / script >