Compare commits

..

No commits in common. "main" and "v1.3.0" have entirely different histories.
main ... v1.3.0

15 changed files with 192 additions and 405 deletions

5
.gitignore vendored
View File

@ -137,11 +137,6 @@ config.json
.db_init
public/
src/css/main.css
.njs.provider
# exclude idea folder
.idea/
# bun
bun.lock
bun.lockb

View File

@ -1,94 +1,57 @@
# aidxnFUN
[![License: CC0-1.0](https://img.shields.io/badge/License-CC0_1.0-lightgrey.svg)](http://creativecommons.org/publicdomain/zero/1.0/)
[![Latest Release](https://img.shields.io/badge/latest_version-v.1.40-purple)](https://github.com/ihatenodejs/aidxnFUN/releases)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN.svg?type=shield&issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN?ref=badge_shield&issueType=license)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN.svg?type=shield&issueType=security)](https://app.fossa.com/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN?ref=badge_shield&issueType=security)
<a href="https://512kb.club"><img src="https://512kb.club/assets/images/orange-team.svg" alt="a proud member of the orange team of 512KB club" /></a>
The full code of my website, under the CC0-1.0 license (public domain). Built with Tailwind CSS, EJS, Express.js, and Node.js
## Install and self-host
# Install and self-host
Have a weird obsession? Want a pre-built site you can use for free? Host aidxnFUN! As the code is available under the CC0-1.0 license, which means you should feel free and encouraged to change content, design, whatever!
During this process, `node` (20.08.0), `npm`, and `netcat` will be installed. If you use Windows, you must manually install Node.js.
During this process, `node` (20.08.0), `npm`, and `netcat` will be installed. If you use Windows, you must manually install NodeJS.
**Please note:** The /status endpoint will be broken with default servers (ones I own) as CORS will block requests not made from aidxn.fun
### Debian/Ubuntu/Arch Linux
## Debian/Ubuntu/Other Debian-based systems
1. Clone the repo
```bash
git clone https://github.com/ihatenodejs/aidxnFUN
cd aidxnFUN
```
2. Setup `manage` (installs everything you need)
2. Setup `manage`
```bash
./manage setup
```
3. Start the server
```bash
./manage up
```
A server will now start on port :5566, and be accessible from your web browser at http://localhost:5566/. I highly suggest creating a NGINX reverse proxy for this, especially if you plan to point this to a domain.
### Windows
## Windows
Windows-based hosts are only partially supported. I have no plans to write a script for Windows as of now, though that may change in the future, based on demand. However, `package.json` have bundled scripts to allow hosting on Windows. If you plan to host this website, I **STRONGLY** recommend that you use Linux.
**Windows hosting has not been tested in a while, and may not work perfectly.**
1. Install Node.js and NPM (or Bun) for Windows from [Node.js.org](https://nodejs.org/) or [bun.sh](https://bun.sh/)
1. Install NodeJS and NPM for Windows from [nodejs.org](https://nodejs.org/)
2. Open a Node.js command prompt
3. Clone the repo
```bat
git clone https://github.com/ihatenodejs/aidxnFUN
cd aidxnFUN
```
4. Build the app
**Bun**
```bat
bun run build:win:bun
npm run winbuild
```
**NPM**
5. Run the app on port 5566
```bat
npm run build:win:npm
set PORT=5566 && node app.js
```
5. Run the app
**Bun**
```bat
set PORT=5566 && bun run start:win:bun
```
**NPM**
```bat
set PORT=5566 && npm run start:win:npm
```
You may use the `PORT` variable to set a custom port. While Windows tends to default to 3000, we will use 5566, which is the default for aidxnFUN on Linux.
## How it works
### Stack/Technical Stuff
This website uses Node.js, Express.js, EJS for templating, and Tailwind CSS.
# How it works
This website uses Node.js, Express.js for a server, EJS for templating, and Tailwind CSS for the frontend CSS.
The `manage` script uses all of those tools to manage the server for you executes the repetitive tasks for you automatically.
@ -96,14 +59,9 @@ The views contain both regular page shards (full-ish pages) and generic shards (
Thus far, shards are included for a music widget, the header, and the footer of the pages.
### Music
Music (as featured on the home page) is fetched from an API (hosted on https://biancarosa.com.br), which I am in the process of setting up for myself. It works with a LastFM account (I linked this to my Spotify) and can track your live listening with amazing accuracy. The repo can be found at [biancarosa/lastfm-last-played](https://github.com/biancarosa/lastfm-last-played).
I'm in the process of migrating this project over to MusicBrainz.
## Using the `manage` script
# Using the `manage` script
You may have noticed you have a `manage` file after cloning. `manage` is a command-line tool to manage the server. It can automatically start, stop, and restart your instance. This script only supports Linux-based systems.
First, you must complete the setup with the following commands:
@ -114,27 +72,26 @@ chmod +x manage
After doing that, you are now ready to use the script.
### `manage` usage
## `manage` usage
`./manage [command] [options]`
### `manage` commands
## `manage` commands
+ `./manage up` - Builds the project and starts the server
+ `./manage down` - Stops the server
+ `./manage restart` - Restarts the server
+ `./manage status, -s, --status` - Checks if the server is running
+ `./manage help, -h, --help` - Shows the help message
## Troubleshooting
# Troubleshooting
I highly suggest you take a peek at the `node.log` file's contents. It's in the same directory as the `manage` script. This file contains the NodeJS server logs, which can be very helpful for debugging and/or troubleshooting.
I highly suggest you take a peek at the `node.log` file's contents. It's in the same directory as the `manage` script. This file contains the Node.js server logs, which can be very helpful for debugging and/or troubleshooting.
## To-Do
- [ ] Add instructions for setting up without `manage`
- [ ] Fix spacing issues with footer (not the same size across pages)
- [ ] Fix status tracking and add tracking for latest servers
- [X] Improve dropdown menu style
# To-Do
- [ ] Improve dropdown menu style
- [X] Add link to pontus.aidxn.fun in menu
- [X] Restructure menu with dropdowns
- [X] Implement PGP message verification
- [X] Add menu link to tilde website
- [X] Update projects page to latest information
# License
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN?ref=badge_large)

302
manage
View File

@ -1,7 +1,7 @@
#!/bin/bash
SC_VERSION=1.4.0
SC_CODENAME="seahorse"
SC_VERSION=1.3.0
SC_CODENAME="bionic"
PORT=5566
SETUP_FILE=".setup_complete"
COLOR_RESET="\033[0m"
@ -10,145 +10,65 @@ COLOR_RED="\033[1;31m"
COLOR_YELLOW="\033[1;33m"
COLOR_BLUE="\033[1;34m"
COLOR_CYAN="\033[1;36m"
DISTRO=$(grep '^NAME=' /etc/os-release | cut -d '=' -f2 | tr -d '"')
NOB="inactive"
function command_exists() {
command -v "$1" &> /dev/null
}
function install_tools() {
# Perform updates
echo -e "${COLOR_BLUE}Updating package lists...${COLOR_RESET}"
if [ "$DISTRO" == "Ubuntu" ]; then
# shellcheck disable=SC2024
sudo apt-get update >> install.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}\n"
elif [ "$DISTRO" == "Arch Linux" ]; then
# shellcheck disable=SC2024
sudo pacman -Sy >> install.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}\n"
fi
echo -e "${COLOR_BLUE}Starting system dependency install...${COLOR_RESET}"
# Check for curl, and install if not found
if ! command_exists curl; then
echo -e "${COLOR_RED}curl is not installed. Installing now...${COLOR_RESET}"
if [ "$DISTRO" == "Ubuntu" ]; then
# shellcheck disable=SC2024
sudo apt-get install curl -y >> install.log
elif [ "$DISTRO" == "Arch Linux" ]; then
# shellcheck disable=SC2024
sudo pacman -S --noconfirm curl >> install.log
fi
echo -e "\n${COLOR_GREEN}curl installed successfully.${COLOR_RESET}\n"
# Check for NodeJS, and install if not found
if ! command_exists node; then
echo -e "${COLOR_RED}NodeJS is not installed. Installing now...${COLOR_RESET}"
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# shellcheck disable=SC2155
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 20.18.0
echo -e "\n${COLOR_GREEN}NodeJS installed successfully.${COLOR_RESET}\n"
else
echo -e "${COLOR_GREEN}curl is installed.${COLOR_RESET}"
fi
# Check for NodeJS/Bun and install if not found
if ! command_exists node && ! command_exists bun; then
for i in {1..3}; do
echo -e "${COLOR_BLUE}Do you want to install and use Node.js or Bun? (node/bun)${COLOR_RESET}"
read -r -p "" NOB
if [ "$NOB" == "node" ]; then
curl -o .install.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh >> install.log
chmod +x .install.sh
bash .install.sh >> install.log
rm .install.sh # cleanup
# shellcheck disable=SC2155
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 23 >> install.log
echo -e "\n${COLOR_GREEN}NodeJS installed successfully.${COLOR_RESET}\n"
NOB="node_installed"
if ! command_exists npm; then
echo -e "${COLOR_RED}NPM is not installed. Installing now...${COLOR_RESET}"
if [ "$DISTRO" == "Ubuntu" ]; then
# shellcheck disable=SC2024
sudo apt-get install npm -y >> install.log
elif [ "$DISTRO" == "Arch Linux" ]; then
# shellcheck disable=SC2024
sudo pacman -S --noconfirm npm >> install.log
fi
echo -e "\n${COLOR_GREEN}NPM installed successfully.${COLOR_RESET}\n"
else
echo -e "${COLOR_GREEN}NPM is installed. Version: $(npm -v)${COLOR_RESET}"
fi
break
elif [ "$NOB" == "bun" ]; then
curl -fsSL --output .install.sh https://bun.sh/install >> install.log
chmod +x .install.sh
bash .install.sh >> install.log
rm .install.sh # cleanup
# this puts bun in the path for the initial install, we later instruct the user to add it to their shell profile
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
echo -e "\n${COLOR_GREEN}Bun installed successfully.${COLOR_RESET}\n"
NOB="bun_installed"
break
else
echo -e "${COLOR_RED}Invalid option, please enter 'node' or 'bun'${COLOR_RESET}"
fi
done
if [ "$NOB" != "node_installed" ] && [ "$NOB" != "bun_installed" ]; then
# this is mainly intended to catch the case where the user doesn't enter anything 3+ times
echo -e "${COLOR_RED}[!] Failed to install, exiting.${COLOR_RESET}"
exit 1
fi
elif command_exists bun; then
echo -e "${COLOR_GREEN}NodeJS is installed (provided through Bun). Version: $(bun -v)${COLOR_RESET}"
elif command_exists node; then
echo -e "${COLOR_GREEN}NodeJS is installed. Version: $(node -v)${COLOR_RESET}"
fi
# Check for Netcat, and install if not found
if ! command_exists nc; then
echo -e "${COLOR_RED}Netcat is not installed. Installing now...${COLOR_RESET}"
if [ "$DISTRO" == "Ubuntu" ]; then
# shellcheck disable=SC2024
sudo apt-get install netcat-traditional -y >> install.log
elif [ "$DISTRO" == "Arch Linux" ]; then
# shellcheck disable=SC2024
sudo pacman -S --noconfirm netcat >> install.log
fi
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
sudo apt-get install netcat-traditional
echo -e "\n${COLOR_GREEN}Netcat installed successfully.${COLOR_RESET}\n"
else
echo -e "${COLOR_GREEN}Netcat is installed.${COLOR_RESET}"
fi
# Check for lsof, and install if not found
if ! command_exists lsof && [ "$DISTRO" == "Arch Linux" ]; then
echo -e "${COLOR_RED}lsof is not installed. Installing now...${COLOR_RESET}"
# shellcheck disable=SC2024
sudo pacman -S --noconfirm lsof >> install.log
echo -e "\n${COLOR_GREEN}lsof installed successfully.${COLOR_RESET}\n"
else
echo -e "${COLOR_GREEN}lsof is installed.${COLOR_RESET}"
fi
}
# Checks if a config.json file exists
function check_config() {
if [ ! -f "config.json" ]; then
echo -e "\n${COLOR_BLUE}Copying config file...${COLOR_RESET}"
if [ ! -f "config.json.example" ]; then
echo -e "${COLOR_RED}[!] Couldn't find example config file${COLOR_RESET}"
# Check for NPM, and install if not found
if ! command_exists npm; then
echo -e "${COLOR_RED}NPM is not installed. Installing now...${COLOR_RESET}"
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
sudo apt-get update
sudo apt-get install npm
if [ ! -f "config.json" ]; then
echo -e "${COLOR_BLUE}Copying config file...${COLOR_RESET}"
if [ ! -f "config.json.example" ]; then
echo "Couldn't find example config file"
else
cp config.json.example config.json
fi
else
cp config.json.example config.json
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}config file already exists, skipping.${COLOR_RESET}"
fi
echo -e "${COLOR_BLUE}Installing NPM deps...${COLOR_RESET}"
npm install
echo -e "\n${COLOR_GREEN}NPM installed successfully.${COLOR_RESET}\n"
touch $SETUP_FILE
else
echo -e "${COLOR_GREEN}Config file already exists, skipping.${COLOR_RESET}"
echo -e "${COLOR_GREEN}NPM is installed. Version: $(npm -v)${COLOR_RESET}"
touch $SETUP_FILE
fi
}
# Show help message
function show_help() {
echo -e "${COLOR_GREEN}manage for aidxnFUN:${COLOR_RESET} ${COLOR_BLUE}v${SC_VERSION} (${SC_CODENAME})${COLOR_RESET}"
echo -e "${COLOR_GREEN}manage version:${COLOR_RESET} ${COLOR_BLUE}${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}"
echo -e "${COLOR_BLUE}Usage:${COLOR_RESET} ./manage [command]\n"
echo -e "${COLOR_YELLOW}Commands:${COLOR_RESET}"
echo -e " ${COLOR_CYAN}help, -h, --help${COLOR_RESET} Shows this help message."
@ -173,10 +93,11 @@ function check_dirs() {
fi
done
if [ "$created_count" -gt 0 ]; then
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
else
echo -e "${COLOR_YELLOW}Done, nothing created.${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
elif [ "$action" == "delete" ]; then
if [ -d "./public" ]; then
echo -e "${COLOR_BLUE}Deleting public directory...${COLOR_RESET}"
@ -185,9 +106,9 @@ function check_dirs() {
fi
if [ "$deleted_count" -gt 0 ]; then
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
else
echo -e "${COLOR_YELLOW}Done, nothing deleted.${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
else
echo -e "${COLOR_RED}Invalid action: $action. Use 'create' or 'delete'.${COLOR_RESET}"
@ -199,13 +120,14 @@ function restart_server() {
check_setup
if [ -d './public' ]; then
echo -e "${COLOR_BLUE}Deleting public directories...${COLOR_RESET}"
check_dirs "delete"
fi
if [ -f './src/css/main.css' ]; then
echo -e "${COLOR_BLUE}Deleting old Tailwind CSS...${COLOR_RESET}"
rm ./src/css/main.css
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
PIDS=$(lsof -t -i:$PORT)
@ -213,53 +135,38 @@ function restart_server() {
if [ -n "$PIDS" ]; then
echo -e "${COLOR_BLUE}Stopping server...${COLOR_RESET}"
for PID in $PIDS; do
kill "$PID" >> /dev/null || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
kill "$PID" || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
done
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
else
echo -e "${COLOR_YELLOW}No process found on port $PORT.${COLOR_RESET}"
fi
echo -e "${COLOR_BLUE}Creating public directories...${COLOR_RESET}"
check_dirs "create"
echo -e "${COLOR_BLUE}Building project...${COLOR_RESET}"
if command_exists bun && command_exists bunx; then
if ! bun run build:linux:bun > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
exit 1
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
fi
elif command_exists npm; then
if ! npm run build:linux:npm > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
exit 1
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
fi
else
echo -e "${COLOR_RED}NodeJS is somehow not installed, exiting.${COLOR_RESET}"
if ! npm run build > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
exit 1
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
fi
if [ -f './public/css/base.css' ]; then
echo -e "${COLOR_BLUE}Cleaning up base Tailwind CSS file...${COLOR_RESET}"
rm ./public/css/base.css
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
if [ -f './node.log' ]; then
echo -e "${COLOR_BLUE}Deleting node log...${COLOR_RESET}"
rm ./node.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
echo -e "${COLOR_BLUE}Starting server...${COLOR_RESET}"
if command_exists bun; then
bun run start:bun > node.log 2>&1 &
elif command_exists npm; then
npm run start:npm > node.log 2>&1 &
fi
npm start > node.log 2>&1 &
MAX_RETRIES=10
RETRY_INTERVAL=1
@ -267,10 +174,10 @@ function restart_server() {
for ((i=1; i<=MAX_RETRIES; i++)); do
PIDS=$(lsof -t -i:$PORT)
if [ -n "$PIDS" ]; then
echo -e "${COLOR_GREEN}\nDone! Server up and running on port $PORT!\n${COLOR_RESET}"
echo -e "${COLOR_GREEN}\nDone. Server up and running on port $PORT!\n${COLOR_RESET}"
break
else
echo -e "${COLOR_YELLOW}[WAITING FOR SERVER]${COLOR_RESET} Attempt $i/${MAX_RETRIES}"
echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT... Attempt $i/${MAX_RETRIES}${COLOR_RESET}"
sleep $RETRY_INTERVAL
fi
done
@ -296,52 +203,37 @@ function start_server() {
return
fi
echo -e "${COLOR_BLUE}Creating public directories...${COLOR_RESET}"
check_dirs "create"
if [ -f './src/css/main.css' ]; then
echo -e "${COLOR_BLUE}Deleting old Tailwind CSS...${COLOR_RESET}"
rm ./src/css/main.css
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
if [ -f './node.log' ]; then
echo -e "${COLOR_BLUE}Deleting node log...${COLOR_RESET}"
rm ./node.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
echo -e "${COLOR_BLUE}Building project...${COLOR_RESET}"
if command_exists bun && command_exists bunx; then
if ! bun run build:linux:bun > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
exit 1
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
fi
elif command_exists npm; then
if ! npm run build:linux:npm > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
exit 1
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
fi
else
echo -e "${COLOR_RED}NodeJS is somehow not installed, exiting.${COLOR_RESET}"
if ! npm run build > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
exit 1
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
fi
if [ -f './public/css/base.css' ]; then
echo -e "${COLOR_BLUE}Cleaning up base Tailwind CSS file...${COLOR_RESET}"
rm ./public/css/base.css
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
echo -e "${COLOR_BLUE}Starting server...${COLOR_RESET}"
if command_exists bun; then
bun run start:bun > node.log 2>&1 &
elif command_exists npm; then
npm run start:npm > node.log 2>&1 &
fi
npm start > node.log 2>&1 &
MAX_RETRIES=10
RETRY_INTERVAL=1
@ -349,10 +241,10 @@ function start_server() {
for ((i=1; i<=MAX_RETRIES; i++)); do
PIDS=$(lsof -t -i:$PORT)
if [ -n "$PIDS" ]; then
echo -e "${COLOR_GREEN}\nDone! Server up and running on port $PORT!\n${COLOR_RESET}"
echo -e "${COLOR_GREEN}\nDone. Server up and running on port $PORT!\n${COLOR_RESET}"
break
else
echo -e "${COLOR_YELLOW}[WAITING FOR SERVER]${COLOR_RESET} Attempt $i/${MAX_RETRIES}"
echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT... Attempt $i/${MAX_RETRIES}${COLOR_RESET}"
sleep $RETRY_INTERVAL
fi
done
@ -372,19 +264,20 @@ function stop_server() {
PID=$(lsof -t -i:$PORT)
if [ -d './public' ]; then
echo -e "${COLOR_BLUE}Deleting public directories...${COLOR_RESET}"
check_dirs "delete"
fi
if [ -f './src/css/main.css' ]; then
echo -e "${COLOR_BLUE}Deleting Tailwind CSS...${COLOR_RESET}"
rm ./src/css/main.css
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
if [ -f './node.log' ]; then
echo -e "${COLOR_BLUE}Deleting node log...${COLOR_RESET}"
rm ./node.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
PIDS=$(lsof -t -i:$PORT)
@ -392,9 +285,9 @@ function stop_server() {
if [ -n "$PIDS" ]; then
echo -e "${COLOR_BLUE}Stopping server...${COLOR_RESET}"
for PID in $PIDS; do
kill "$PID" >> /dev/null || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
kill "$PID" || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
done
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
else
echo -e "${COLOR_YELLOW}No process found on port $PORT.${COLOR_RESET}"
fi
@ -405,82 +298,46 @@ function check_status() {
check_setup
PID=$(lsof -t -i:$PORT)
echo -e "${COLOR_GREEN}manage for aidxnFUN:${COLOR_RESET} ${COLOR_BLUE}v${SC_VERSION} (${SC_CODENAME})${COLOR_RESET}"
if [ -n "$PID" ]; then
echo -e "${COLOR_GREEN}[SERVER]${COLOR_RESET} Running with PID: $PID"
echo -e "${COLOR_GREEN}Server running with PID: $PID${COLOR_RESET}"
else
echo -e "${COLOR_RED}[SERVER]${COLOR_RESET} Down${COLOR_RESET}"
echo -e "${COLOR_RED}Server not running.${COLOR_RESET}"
fi
}
# Master setup function/process
function setup() {
if [ "$DISTRO" != "Ubuntu" ] && [ "$DISTRO" != "Arch Linux" ]; then
echo -e "${COLOR_RED}This script is only supported on Ubuntu and Arch Linux${COLOR_RESET}"
exit 1
fi
clear
echo -e "${COLOR_BLUE}Welcome to the aidxnFUN 'manage' script setup!\n${COLOR_RESET}${COLOR_CYAN}You are running manage v${SC_VERSION} (${SC_CODENAME})${COLOR_RESET}\n"
echo -e "${COLOR_BLUE}Welcome to the aidxnFUN 'manage' script setup!\n${COLOR_RESET}${COLOR_CYAN}You are running manage ${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}\n"
echo -e "${COLOR_GREEN}A custom script built by ihatenodejs${COLOR_RESET}"
echo -e "${COLOR_YELLOW}and presented by forkers like you...${COLOR_RESET}"
echo -e "\nPress any key to continue..."
read -n 1 -s -r -p ""
clear
echo -e "${COLOR_BLUE}This script requires Node.js+NPM/Bun, curl, lsof, and Netcat to be installed on your system.${COLOR_RESET}"
echo -e "${COLOR_BLUE}It will attempt to install all of the required dependencies, although this might not work every time.${COLOR_RESET}"
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}"
echo -e "This script requires Node.js, NPM, and Netcat to be installed on your system."
echo "Please ensure you have these tools installed before proceeding."
echo -e "\nPress any key to continue with tool installation..."
read -n 1 -s -r -p ""
clear
# Execute install tool script
install_tools
# Check if config file exists
check_config
# Configure provider and install Node dependencies
if command_exists bun; then
echo -e "\n${COLOR_BLUE}Setting provider to Bun...${COLOR_RESET}"
echo "DO NOT EDIT THIS: bun" > .njs.provider
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "\n${COLOR_BLUE}Installing dependencies with Bun...${COLOR_RESET}"
bun install >> install.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
elif command_exists npm; then
echo -e "\n${COLOR_BLUE}Setting provider to Node/NPM...${COLOR_RESET}"
echo "DO NOT EDIT THIS: node" > .njs.provider
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
echo -e "\n${COLOR_BLUE}Installing dependencies with NPM...${COLOR_RESET}"
npm install >> install.log
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
else
echo -e "${COLOR_RED}NodeJS is somehow not installed, exiting.${COLOR_RESET}"
exit 1
fi
# Install NPM dependencies
npm install
echo -e "\n${COLOR_GREEN}Dependency installation complete!${COLOR_RESET}"
echo -e "${COLOR_BLUE}You can view the complete log of the installation process in the install.log file${COLOR_RESET}"
if [ "$NOB" == "bun_installed" ]; then
echo -e "\n${COLOR_RED}Make sure to add this to your shell profile (most likely ~/.bashrc):${COLOR_RESET}"
echo -e "${COLOR_GREEN}export BUN_INSTALL=\"$HOME/.bun\"${COLOR_RESET}"
echo -e "${COLOR_GREEN}export PATH=\"\$BUN_INSTALL/bin:\$PATH\"${COLOR_RESET}"
fi
echo -e "\nPress [ENTER] to continue to the next step."
echo -e "\n${COLOR_BLUE}If you would like to view the install logs, please do so, or click [ENTER] to continue to the next step.${COLOR_RESET}\n"
read -n 1 -s -r -p ""
clear
echo -e "${COLOR_GREEN}Take a look at the tasks you can perform automatically with manage:${COLOR_RESET}\n"
echo -e "${COLOR_GREEN}Now, take a look at the commands you can use with this script:${COLOR_RESET}\n"
# Show the user help message
show_help
echo -e "\nPress any key to continue to the final step..."
read -n 1 -s -r -p ""
clear
# Quick commands
echo -e "${COLOR_BLUE}Now, you may start the server with this command:${COLOR_RESET}"
echo -e "${COLOR_GREEN}./manage up${COLOR_RESET}\n"
echo -e "\n${COLOR_BLUE}If you need help, or to get info about other commands, simply use:${COLOR_RESET}"
@ -489,7 +346,6 @@ function setup() {
read -n 1 -s -r -p ""
clear
echo -e "${COLOR_GREEN}Thank you for using manage ${SC_VERSION} ${SC_CODENAME}!${COLOR_RESET}\n"
touch $SETUP_FILE
exit 0
}

View File

@ -1,36 +1,30 @@
{
"name": "aidxnfun",
"version": "1.4.0",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"build:css:linux:npx": "npx @tailwindcss/cli -i ./src/css/base.css -o ./src/css/main.css && cp -r ./src/css ./public/",
"build:css:linux:bunx": "bunx @tailwindcss/cli -i ./src/css/base.css -o ./src/css/main.css && cp -r ./src/css ./public/",
"build:css:linux": "npx tailwindcss -i ./src/css/base.css -o ./src/css/main.css && cp -r ./src/css ./public/",
"build:js:linux": "cp -r ./src/js ./public/",
"build:img:linux": "cp -r ./src/img ./public/",
"build:pgp:linux": "cp -r ./src/pgp ./public/",
"copy:favicon:linux": "cp ./src/favicon.ico ./public/",
"build:css:win:npx": "npx @tailwindcss/cli -i ./src/css/base.css -o ./src/css/main.css && xcopy /E /I /Y \"./src/css\" \"./public/css\"",
"build:css:win:bunx": "npx @tailwindcss/cli -i ./src/css/base.css -o ./src/css/main.css && xcopy /E /I /Y \"./src/css\" \"./public/css\"",
"build:css:win": "npx tailwindcss -i ./src/css/base.css -o ./src/css/main.css && xcopy /E /I /Y \"./src/css\" \"./public/css\"",
"build:js:win": "xcopy /E /I /Y \"./src/js\" \"./public/js\"",
"build:img:win": "xcopy /E /I /Y \"./src/img\" \"./public/img\"",
"build:pgp:win": "xcopy /E /I /Y \"./src/pgp\" \"./public/pgp\"",
"copy:favicon:win": "copy /Y \"./src/favicon.ico\" \"./public/\"",
"build:linux:npm": "npm run build:css:linux:npx && npm run build:js:linux && npm run build:img:linux && npm run build:pgp:linux && npm run copy:favicon:linux",
"build:linux:bun": "bun run build:css:linux:bunx && bun run build:js:linux && bun run build:img:linux && bun run build:pgp:linux && bun run copy:favicon:linux",
"build:win:npm": "npm run build:css:win:npx && npm run build:js:win && npm run build:img:win && npm run build:pgp:win && npm run copy:favicon:win",
"build:win:bun": "bun run build:css:win:bunx && bun run build:js:win && bun run build:img:win && bun run build:pgp:win && bun run copy:favicon:win",
"start:bun": "bun app.js",
"start:npm": "node app.js"
"build:linux": "npm run build:css:linux && npm run build:js:linux && npm run build:img:linux && npm run build:pgp:linux",
"build:win": "npm run build:css:win && npm run build:js:win && npm run build:img:win && npm run build:pgp:win",
"build": "npm run build:linux",
"winbuild": "npm run build:win",
"start": "node app.js"
},
"private": true,
"devDependencies": {
"autoprefixer": "^10.4.20",
"postcss": "^8.5.3",
"tailwindcss": "^4.0.12"
"postcss": "^8.4.47",
"tailwindcss": "^3.4.13"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.7.2",
"@tailwindcss/cli": "^4.0.12",
"@fortawesome/fontawesome-free": "^6.6.0",
"ansi-regex": "^6.1.0",
"ansi-styles": "^6.2.1",
"any-promise": "^1.3.0",
@ -41,35 +35,35 @@
"brace-expansion": "^4.0.0",
"braces": "^3.0.3",
"camelcase-css": "^2.0.1",
"chokidar": "^4.0.3",
"chokidar": "^4.0.1",
"color-convert": "^2.0.1",
"color-name": "^2.0.0",
"commander": "^13.1.0",
"cross-spawn": "^7.0.6",
"commander": "^12.1.0",
"cross-spawn": "^7.0.3",
"cssesc": "^3.0.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
"eastasianwidth": "^0.3.0",
"ejs": "^3.1.10",
"emoji-regex": "^10.4.0",
"express": "^4.21.2",
"fast-glob": "^3.3.3",
"fastq": "^1.19.1",
"express": "^4.21.1",
"fast-glob": "^3.3.2",
"fastq": "^1.17.1",
"fill-range": "^7.1.1",
"foreground-child": "^3.3.1",
"foreground-child": "^3.3.0",
"function-bind": "^1.1.2",
"glob": "^11.0.1",
"glob": "^11.0.0",
"glob-parent": "^6.0.2",
"hasown": "^2.0.2",
"is-binary-path": "^3.0.0",
"is-core-module": "^2.16.1",
"is-core-module": "^2.15.1",
"is-extglob": "^2.1.1",
"is-fullwidth-code-point": "^5.0.0",
"is-glob": "^4.0.3",
"is-number": "^7.0.0",
"isexe": "^3.1.1",
"jackspeak": "^4.1.0",
"jiti": "^2.4.2",
"jackspeak": "^4.0.2",
"jiti": "^2.4.1",
"lilconfig": "^3.1.3",
"lines-and-columns": "^2.0.4",
"lru-cache": "^11.0.2",
@ -77,18 +71,18 @@
"micromatch": "^4.0.8",
"minimatch": "^10.0.1",
"minipass": "^7.1.2",
"mysql2": "^3.13.0",
"mysql2": "^3.11.3",
"mz": "^2.7.0",
"nanoid": "^5.1.3",
"nanoid": "^5.0.9",
"normalize-path": "^3.0.0",
"object-assign": "^4.1.1",
"object-hash": "^3.0.0",
"openpgp": "^6.1.0",
"openpgp": "^6.0.0",
"package-json-from-dist": "^1.0.1",
"path-key": "^4.0.0",
"path-parse": "^1.0.7",
"path-scurry": "^2.0.0",
"picocolors": "^1.1.1",
"picocolors": "^1.1.0",
"picomatch": "^4.0.2",
"pify": "^6.1.0",
"pirates": "^4.0.6",
@ -96,13 +90,13 @@
"postcss-js": "^4.0.1",
"postcss-load-config": "^6.0.1",
"postcss-nested": "^7.0.2",
"postcss-selector-parser": "^7.1.0",
"postcss-selector-parser": "^7.0.0",
"postcss-value-parser": "^4.2.0",
"queue-microtask": "^1.2.3",
"read-cache": "^1.0.0",
"readdirp": "^4.1.2",
"resolve": "^1.22.10",
"reusify": "^1.1.0",
"readdirp": "^4.0.2",
"resolve": "^1.22.8",
"reusify": "^1.0.4",
"run-parallel": "^1.2.0",
"shebang-command": "^2.0.0",
"shebang-regex": "^4.0.0",
@ -122,13 +116,10 @@
"which": "^5.0.0",
"wrap-ansi": "^9.0.0",
"wrap-ansi-cjs": "^8.0.0",
"yaml": "^2.7.0"
"yaml": "^2.5.1"
},
"keywords": [],
"author": "ihatenodejs",
"license": "CC0-1.0",
"description": "The full code of my website",
"trustedDependencies": [
"@parcel/watcher"
]
"description": "The full code of my website"
}

View File

@ -1,29 +1,9 @@
@import 'tailwindcss';
@tailwind base;
@tailwind components;
@tailwind utilities;
@theme {
--font-afacad-flux: 'Afacad Flux', sans-serif;
}
/*
The default border color has changed to `currentColor` in Tailwind CSS v4,
so we've added these compatibility styles to make sure everything still
looks the same as it did with Tailwind CSS v3.
If we ever want to remove these styles, we need to add an explicit border
color utility to any element that depends on these defaults.
*/
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}
.glow-txt {
text-shadow: 0 0 10px rgba(255, 255, 255, 0.7), 0 0 20px rgba(255, 255, 255, 0.5), 0 0 30px rgba(255, 255, 255, 0.3);
.glow {
box-shadow: 0 0 15px rgba(255, 255, 255, 0.5);
}
body {

13
tailwind.config.js Normal file
View File

@ -0,0 +1,13 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./views/**/*.{ejs,js}"],
theme: {
extend: {
fontFamily: {
'afacad-flux': ['"Afacad Flux"', 'sans-serif'],
},
},
},
plugins: [],
};

View File

@ -9,13 +9,13 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
<h1 class="text-5xl font-bold mb-2 text-center">About Me</h1>
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Looking to learn more?</p>
</header>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<h3 class="text-2xl font-bold mb-4 text-white">What you're looking for</h3>
<p class="text-slate-300 mb-4">Heyo! I'm Aidan, and I'm a human being, like you. I'm a Wikipedia editor, hobbyist programmer (Python, Node.js and PHP) and student. I am a troubled teen industry survivor and I also <i>love</i> music! I love walking (pretty much anywhere), particularly Boston and some Mass suburbs. I'm a cryptocurrency user and love it way more than credit cards/cash. However, I am strongly opposed to the adoption of Web3 technology.</p>
<p class="text-slate-300 mb-4">I archive adverts and culture items (especially digital media) over on my secondary website for my online personality, <a href="https://p0ntus.com" class="underline">p0ntus.com</a>. Maybe give it a peek! Most items are uploaded in full quality, and files are served from a server in Michigan.</p>
@ -26,16 +26,12 @@
<h3 class="text-2xl font-bold mt-6 mb-4 text-white">Technology Experience</h3>
<p class="text-slate-300 mb-4">I have a lot of experience with varying types of technologies. From servers to old XP machines, I've tried it all. I currently administer three Linux servers, all running Ubuntu.</p>
<p class="text-slate-300 mb-4">I take great pride in my laptops, as I believe they have been pivotal to helping me learn Linux, programming, and helping to entertaining myself. I look at my dedication to these laptops as people who are passionate about their car(s). We both take great interest in customizing and maintaining our devices/cars.</p>
<p class="text-slate-300 mb-4">At home, I have three MacBook Air laptops. However, I do not like Apple devices. The two older MacBooks are base model Air's with a 9" screen. One runs Arch Linux, and the other runs Gentoo Linux. The third Mac is an M1 2020 base model, which is my school laptop, and runs macOS.</p>
<p class="text-slate-300 mb-4">I take great pride in my riced Arch and Gentoo laptops, as I believe they have been pivotal to helping me learn Linux, programming, and helping to entertaining myself. I look at my dedication to these laptops as people who are interested in cars. We both take great interest in customizing and maintaining our devices/cars.</p>
<p class="text-slate-300 mb-4">In terms of phones, I use a rooted Pixel 7 Pro on the stock ROM with many modifications. I also use a Samsung Galaxy A32 5G as my backup phone, which is unable to be rooted due to restrictions put in place by T-Mobile.</p>
<p class="text-slate-300 mb-4">A lot of my projects include programming, which I keep on GitHub. In fact, this is one of my many free-and-open-source projects! Most of the code and content I create is released into the public domain.</p>
<p class="text-slate-300 mb-4">While this isn't the most common practice, I despise copyright and believe public domain content (whether it be code or images) has a heightened meaning.</p>
<h3 class="text-2xl font-bold mt-6 mb-4 text-white">My Setup</h3>
<p class="text-slate-300 mb-4">I have a pretty basic setup, hardware-wise (I'm not a millionaire, after all), although I like to say I put my things to good use. I own a lot of Apple devices, actually, despite despising them with all my heart. However, they do not run Apple software.</p>
<p class="text-slate-300 mb-4">My main laptop is a Thinkpad T470s. I have made upgrades to the memory (16GB), storage (2TB NVMe), and installed a new secondary battery. It is my pride and joy, and runs Arch Linux. I daily drive Xfce on it (I like the design) alongside GNOME and KDE Plasma. Depending on what I am doing with this laptop (programming, school, etc) defines which DE I use. I am a DWM warrior, so it may be installed on this laptop. I have had this laptop since December 2024.</p>
<p class="text-slate-300 mb-4">I also own three MacBook Air laptops. I purchased two (a 2013 and a 2015) for $15 each, and they were in rough shape, although functional. One is currently running Ubuntu 24.10 for Home Assistant, and the other runs Gentoo Linux. The system is not dependent on a server for building packages, and does it all on its own (4GB of RAM and a crappy CPU FTW!). The third MacBook Air is a 2020 M1 MacBook Air, which is used for school and runs macOS due to school policy.</p>
<p class="text-slate-300 mb-4">In terms of mobile technology, I own a Pixel 7 Pro and a Samsung A32 5G. The Pixel phone is rooted and runs crDroid Android 11.0 Beta, which is Android 15. The Samsung A32 5G is stuck on Android 14, and cannot be rooted due to restrictions on the bootloader unlocking, put in place by T-Mobile.
<h3 class="text-2xl font-bold mt-6 mb-4 text-white">Linux Distro Experience</h3>
<ul class="space-y-3">
<li class="flex items-center">
@ -69,8 +65,7 @@
<h3 class="text-2xl font-bold mt-6 mb-4 text-white">Cloud</h3>
<p class="text-slate-300 mb-4">I also work a <i class="mr-1">LOT</i> in the cloud, but not the type you might be thinking about. I almost have an obsession with enterprise cloud computing. Hell, you're actually connected to one... right now! Here are some of my favorite platforms, ranked.</p>
<p class="text-slate-300 mb-4">I currently manage four servers, all operating in the cloud. They are from various providers, two coming from Oracle Cloud, one coming from Liquid Web, and another from Azure. They all have verying specifications, although my highest powered server has an 8vCPU Xeon paired with 24GB of RAM and ~400GB of SSD storage.</p>
<p class="text-slate-300 mb-4">As much as I would like to rant about cloud all day, I will opt keep it short. Here are my favorite cloud platforms, ranked:</p>
<p class="text-slate-300 mb-4">This section is a work in progress, for those who don't know cloud computing. I'm working to make the wording clearer, so the non-technical folk can still understand everything here!</p>
<ol class="list-decimal list-inside space-y-3">
<li class="text-slate-300">Oracle Cloud</li>

View File

@ -9,13 +9,13 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
<h1 class="text-5xl font-bold mb-2 text-center">Cloud</h1>
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Looking to learn about my experience with the cloud?</p>
</header>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<h3 class="text-2xl font-bold mb-4 text-white">Platforms</h3>
<p class="text-slate-300 mb-4">I also work a <i>LOT</i> in the cloud, but not the type you might be thinking about. I almost have an obsession to enterprise cloud computing. Hell, you're actually connected to one... right now! Here are some of my favorite platforms, ranked.</p>
<p class="text-slate-300 mb-4">This section is a work in progress, for those who don't know cloud computing. I'm working to make the wording clearer, so the non-technical folk can still understand everything here!</p>

View File

@ -10,7 +10,7 @@
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" integrity="sha512-Kc323vGBEqzTmouAECnVceyQqyqdsSiqLQISBL29aUW4U/M7pSPA/gEUZQqv1cwx4OnYxTxve5UMg5GT6L4JJg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
@ -18,7 +18,7 @@
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Looking to contact me? You found it!</p>
</header>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<h3 class="text-2xl font-bold mb-4 text-white">Contact Details</h3>
<p class="text-slate-300 mb-4">This one can be a hard one for most people, as I'm not a fan of modern social media, albeit I give in here and there.</p>
<p class="text-slate-300 mb-4">If you're looking for my email, simply replace the brackets with the character it's referencing, like so: test[at]test[dot]com becomes test@test.com. This is in order to prevent bots from contacting me!</p>
@ -31,6 +31,10 @@
<i class="fas fa-envelope text-pink-500 mr-2"></i>
<b>Email:</b> <span class="text-slate-300 ml-1">aidan[at]p0ntus[dot]com (PGP encryption preferred)</span>
</li>
<li class="flex items-center">
<i class="fas fa-envelope text-pink-500 mr-2"></i>
<b>Email:</b> <span class="text-slate-300 ml-1">aidan.honor[at]androidintegrity[dot]org (PGP encryption preferred)</span>
</li>
<li class="flex items-center">
<i class="fas fa-comments text-blue-400 mr-2"></i>
<b>Signal:</b> <span class="text-slate-300 ml-1">[at]iusearchbtw.17</span>
@ -41,7 +45,7 @@
</li>
<li class="flex items-center">
<i class="fab fa-telegram-plane text-blue-400 mr-2"></i>
<b>Telegram:</b> <span class="text-slate-300 ml-1">[at]p0ntu5</span>
<b>Telegram:</b> <span class="text-slate-300 ml-1">[at]iusearchbtw42</span>
</li>
<li class="flex items-center">
<i class="fas fa-phone-alt text-yellow-400 mr-2"></i>

View File

@ -14,13 +14,13 @@
<div class="relative isolate px-6 pt-13 lg:px-8">
<div class="mx-auto py-32 sm:py-48 lg:py-56">
<div class="text-center">
<h1 class="text-balance text-4xl font-bold tracking-tight text-slate-200 sm:text-6xl mb-2 glow-txt">Aidan | lxu | pontus</h1>
<h1 class="text-balance text-4xl font-bold tracking-tight text-slate-200 sm:text-6xl mb-2">Aidan | lxu | pontus</h1>
<p class="mt-6 text-lg leading-8 text-slate-200">Personal systems administrator, hardcore Linux user, and casual developer.</p>
</div>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 p-4">
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<h1 class="text-4xl font-bold mb-4 text-white">Welcome!</h1>
<p class="text-slate-300">Outside of the internet, I am known as Aidan. If you are a <a class="underline" href="https://tilde.club">tilde.club</a> user, you will know me as <a class="underline" href="https://tilde.club/~lxu">~lxu</a>! I am a technology enthusiast, Wikipedia editor, personal systems administator, and Linux user.</p>
<p class="text-slate-300 mt-3">Here, you can learn more about me, put my programming skills to the test, and even have some fun along the way!</p>
@ -28,13 +28,13 @@
<p class="text-slate-300 mt-3">This website is currently hosted in Frankfurt, Germany. Page load speeds may be impacted, however my website's data is hosted under stricter data protection laws. I'm not a millionaire, and hosting out of Germany helps me save money on hosting, and serve a wider range of countries with better speeds.</p>
<p class="text-slate-300 mt-3">The content and code of this website is hereby released under the public domain. You are free to use this servers content for whatever you please, and you can additionally view this website's source code on GitHub <a class="underline" href="https://github.com/ihatenodejs/aidxnFUN/">here</a>.</p>
</div>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<h1 class="text-4xl font-bold mb-4 text-white">Where to start</h1>
<p class="text-slate-300">This website has a lot of content, albeit spread apart. If you're interested in learning about me as a person, I'd obviously suggest <a class="underline" href="/about">my about page</a>. For opinionated content, my <a class="underline" href="https://blog.aidxn.fun">blog</a> (currently down) is a great place to check out. I also write casually on my <a class="underline" href="https://tilde.club/~lxu">tilde site</a> hosted on <a class="underline" href="https://tilde.club/">tilde.club</a>.</p>
<p class="text-slate-300 mt-3">If you merely need to contact me, check out the <a class="underline" href="/contact">contact page</a> on the sidebar (or you could click that link).</p>
<p class="text-slate-300 mt-3">This website is always a work in progress, and not every page is going to be finished, however I aim for every page to be functional and relevant. Content is always being added, as I progress through my life. Why not start early?</p>
</div>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<h1 class="text-4xl font-bold mb-4 text-white">Music</h1>
<%- include('shards/music.ejs') %>
<h1 class="text-3xl text-white py-3.5">My Music Taste</h1>
@ -42,7 +42,7 @@
<p class="text-slate-300 mt-3">Some of my favorite artists include tobi lou, Flyana Boss, and Kali Uchis. Some of my "classics" are Mike Stud (before his name change to "mike."), Skizzy Mars, tobi lou, The Neighbourhood, and Ryan Caraveo.</p>
<p class="text-slate-300 mt-3">If you are interested, you can check out my LastFM profile <a class="underline" href="https://www.last.fm/user/aidxn_">here</a>.
</div>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8">
<h1 class="text-4xl font-bold mb-4 text-white">About the design</h1>
<p class="text-slate-300">With this revision, I was aiming to provide a modern design, with an easy-to-navigate interface. I always appreciate dark-themed websites, and decided to add some subtle gradients with glass effects to spice the design up. While I am a developer more than I am a designer, I quite favor this design and it has become the pinnacle of my design work.</p>
<p class="text-slate-300 mt-3">For this design, I chose Tailwind CSS. I appreciate their flexibility, although it appears their documentation poorly written on purpose. They encourage purchasing their components subscription (which costs a lot of money!) all over the documentation, especially in confusing ways. While it has been a poor experience there, I have been able to figure it out with the help of their free elements, documentation, prior knowledge, and the docs.</p>

View File

@ -9,13 +9,13 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
<h1 class="text-5xl font-bold mb-2 text-center">Digital Manifesto</h1>
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">A commitment from me for a better Internet space.</p>
</header>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<h3 class="text-2xl font-bold mb-4 text-white">1. Empathy and Understanding</h3>
<p class="text-slate-300 mb-4">We live in a distant world. People I meet are from all over, which can be hard to understand for others. I aim to utilize my ability to connect by understanding and getting <i>interested</i> in people's lives. I pledge to:</p>
<ul class="list-disc pl-5 space-y-2">

View File

@ -9,13 +9,13 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
<h1 class="text-5xl font-bold mb-2 text-center">Projects</h1>
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Looking to learn more about my projects?</p>
</header>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<h3 class="text-2xl font-bold mb-4 text-white">Currently working on</h3>
<p class="text-slate-300 mb-4">You can check out my GitHub account right <a href="https://github.com/ihatenodejs">here</a>.</p>
<p class="text-slate-300 mb-4">I am currently working on the following projects (in order of activity):</p>

View File

@ -1,7 +1,7 @@
<!-- The body/head/html tag is purposely not included here, as it gives the user easier freedom to control the stying and details of the page (such as title) -->
<div id="notification-banner" class="relative isolate flex items-center gap-x-6 overflow-hidden bg-gray-800/50 backdrop-blur-md px-6 py-2.5 rounded-lg shadow-lg">
<div class="absolute left-0 top-1/2 -z-10 -translate-y-1/2 transform-gpu blur-2xl">
<div class="aspect-577/310 w-[36.0625rem] bg-linear-to-r from-[#ff80b5] to-[#9089fc] opacity-30" style="clip-path: polygon(74.8% 41.9%, 97.2% 73.2%, 100% 34.9%, 92.5% 0.4%, 87.5% 0%, 75% 28.6%, 58.5% 54.6%, 50.1% 56.8%, 46.9% 44%, 48.3% 17.4%, 24.7% 53.9%, 0% 27.9%, 11.9% 74.2%, 24.9% 54.1%, 68.6% 100%, 74.8% 41.9%)"></div>
<div class="aspect-[577/310] w-[36.0625rem] bg-gradient-to-r from-[#ff80b5] to-[#9089fc] opacity-30" style="clip-path: polygon(74.8% 41.9%, 97.2% 73.2%, 100% 34.9%, 92.5% 0.4%, 87.5% 0%, 75% 28.6%, 58.5% 54.6%, 50.1% 56.8%, 46.9% 44%, 48.3% 17.4%, 24.7% 53.9%, 0% 27.9%, 11.9% 74.2%, 24.9% 54.1%, 68.6% 100%, 74.8% 41.9%)"></div>
</div>
<div class="flex flex-wrap items-center gap-x-4 gap-y-2">
<p class="text-sm leading-6 text-gray-100">
@ -11,7 +11,7 @@
</svg>
Check out old.aidxn.fun for a retro experience!
</p>
<a href="https://old.aidxn.fun" class="flex-none rounded-full bg-gray-900 px-3.5 py-1 text-sm font-semibold text-white shadow-xs hover:bg-gray-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-700">Go retro <span aria-hidden="true">&rarr;</span></a>
<a href="https://old.aidxn.fun" class="flex-none rounded-full bg-gray-900 px-3.5 py-1 text-sm font-semibold text-white shadow-sm hover:bg-gray-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-700">Go retro <span aria-hidden="true">&rarr;</span></a>
</div>
<div class="flex flex-1 justify-end">
<button type="button" id="dismiss-btn" class="-m-3 p-3 focus-visible:outline-offset-[-4px]">
@ -48,10 +48,8 @@
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
</svg>
</a>
<div class="absolute right-0 z-10 w-56 origin-top-right rounded-md bg-gray-800 shadow-lg ring-1 ring-gray-700 focus:outline-hidden mt-5 hidden" role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1">
<div class="absolute right-0 z-10 w-56 origin-top-right rounded-md bg-gray-800 shadow-lg ring-1 ring-gray-700 focus:outline-none hidden" role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1">
<div class="py-1" role="none">
<a href="https://aidxn.cc" class="block px-4 py-2 text-sm text-gray-100 hover:bg-gray-700" role="menuitem" tabindex="-1" id="menu-item-1">Main Site</a>
<a href="https://blog.aidxn.fun" class="block px-4 py-2 text-sm text-gray-100 hover:bg-gray-700" role="menuitem" tabindex="-1" id="menu-item-1">Blog</a>
<a href="https://tilde.club/~lxu" class="block px-4 py-2 text-sm text-gray-100 hover:bg-gray-700" role="menuitem" tabindex="-1" id="menu-item-0">Tilde</a>
<a href="https://p0ntus.com" class="block px-4 py-2 text-sm text-gray-100 hover:bg-gray-700" role="menuitem" tabindex="-1" id="menu-item-1">Archive</a>
</div>
@ -84,8 +82,6 @@
<div class="space-y-2 py-6">
<a href="/" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">Home</a>
<a href="/about" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">About</a>
<a href="https://aidxn.cc/" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">Main Website</a>
<a href="https://blog.aidxn.fun/" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">Blog</a>
<a href="https://tilde.club/~lxu" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">Tilde</a>
<a href="https://p0ntus.com" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">Archive</a>
<a href="/contact" class="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-slate-200 hover:bg-gray-900">Contact</a>

View File

@ -10,20 +10,20 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
<h1 class="text-5xl font-bold mb-2 text-center">Status</h1>
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Interested in my server uptime? Take a peek!</p>
</header>
<div id="loading" class="flex flex-col items-center justify-center h-[40vh] p-6">
<i class="fas fa-spinner fa-spin text-5xl mb-4"></i>
<h1 class="text-2xl font-bold">Testing pings...</h1>
</div>
<div id="content" class="hidden bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
<h1 class="text-5xl font-bold mb-2 text-center">Status</h1>
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Interested in my server uptime? Take a peek!</p>
</header>
<div id="content" class="hidden bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div>
<h3 class="text-2xl font-bold mb-4 text-white">What is this page?</h3>
<p class="text-slate-300 mb-4">This page displays information about the status of my personal servers. This excludes private servers, which are used for projects such as my "home" lab (it's hosted in the cloud).</p>

View File

@ -10,7 +10,7 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap" rel="stylesheet">
</head>
<body class="bg-linear-to-br from-slate-900 to-black text-white font-afacad-flux">
<body class="bg-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
<%- include('shards/header.ejs', { req: req }) %>
<header class="flex flex-col items-center justify-center h-[40vh] p-6">
@ -18,7 +18,7 @@
<p class="text-lg text-gray-300 max-w-xl text-center mt-3">Let's check if that message really came from me!</p>
</header>
<div class="bg-linear-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<div class="bg-gradient-to-br from-slate-800/80 to-slate-900/80 border border-slate-800 backdrop-blur-md shadow-xl rounded-2xl p-8 mx-4">
<h3 class="text-2xl font-bold mb-4 text-white">Introduction</h3>
<p class="text-slate-300 mb-4">Did I send you a PGP signed message? Let's check it's actually from me! The form below will verify the message was signed by my key.</p>
<p class="text-slate-300 mb-4"><span class="font-bold">Remember</span>, if you have confirmed my key in person, you should always trust that key over this page.</p>
@ -27,10 +27,10 @@
<form action="/verify" method="POST" class="space-y-4">
<label for="pgpMessage" class="block text-slate-300">PGP Message:</label>
<textarea id="pgpMessage" name="pgpMessage" class="w-full p-2 bg-slate-800 text-slate-300 rounded-md" rows="10" placeholder="Paste a PGP-signed message here"></textarea>
<button type="submit" class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded-sm">Verify</button>
<button type="submit" class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded">Verify</button>
</form>
<% if (verifyResult) { %>
<div class="mt-4 p-4 rounded-sm bg-slate-800 text-white">
<div class="mt-4 p-4 rounded bg-slate-800 text-white">
<p><%= verifyResult %></p>
</div>
<% } %>