Compare commits
11 Commits
a10e9e7291
...
167cc952e1
Author | SHA1 | Date | |
---|---|---|---|
167cc952e1 | |||
ec233989b2 | |||
c44357b398 | |||
40620b9835 | |||
b9a079396a | |||
214692db21 | |||
c58b58d36a | |||
270d4e17d0 | |||
1163c9e75b | |||
ef84204725 | |||
a03c433277 |
7
.gitignore
vendored
7
.gitignore
vendored
@ -137,6 +137,11 @@ config.json
|
||||
.db_init
|
||||
public/
|
||||
src/css/main.css
|
||||
.njs.provider
|
||||
|
||||
# exclude idea folder
|
||||
.idea/
|
||||
.idea/
|
||||
|
||||
# bun
|
||||
bun.lock
|
||||
bun.lockb
|
83
README.md
83
README.md
@ -1,4 +1,5 @@
|
||||
# aidxnFUN
|
||||
|
||||
[](http://creativecommons.org/publicdomain/zero/1.0/)
|
||||
[](https://github.com/ihatenodejs/aidxnFUN/releases)
|
||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN?ref=badge_shield&issueType=license)
|
||||
@ -8,52 +9,88 @@
|
||||
|
||||
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 NodeJS.
|
||||
During this process, `node` (20.08.0), `npm`, and `netcat` will be installed. If you use Windows, you must manually install Node.js.
|
||||
|
||||
**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-based distributions (Ubuntu, etc.)
|
||||
### Debian/Ubuntu/Arch Linux
|
||||
|
||||
1. Clone the repo
|
||||
```bash
|
||||
git clone https://github.com/ihatenodejs/aidxnFUN
|
||||
cd aidxnFUN
|
||||
```
|
||||
2. Setup `manage`
|
||||
|
||||
2. Setup `manage` (installs everything you need)
|
||||
|
||||
```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 NodeJS and NPM for Windows from [nodejs.org](https://nodejs.org/)
|
||||
1. Install Node.js and NPM (or Bun) for Windows from [Node.js.org](https://nodejs.org/) or [bun.sh](https://bun.sh/)
|
||||
|
||||
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
|
||||
npm run winbuild
|
||||
bun run build:win:bun
|
||||
```
|
||||
5. Run the app on port 5566
|
||||
|
||||
**NPM**
|
||||
|
||||
```bat
|
||||
set PORT=5566 && node app.js
|
||||
npm run build:win:npm
|
||||
```
|
||||
|
||||
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
|
||||
This website uses Node.js, Express.js for a server, EJS for templating, and Tailwind CSS for the frontend CSS.
|
||||
## How it works
|
||||
|
||||
### Stack/Technical Stuff
|
||||
|
||||
This website uses Node.js, Express.js, EJS for templating, and Tailwind CSS.
|
||||
|
||||
The `manage` script uses all of those tools to manage the server for you executes the repetitive tasks for you automatically.
|
||||
|
||||
@ -61,9 +98,14 @@ 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).
|
||||
|
||||
# Using the `manage` script
|
||||
I'm in the process of migrating this project over to MusicBrainz.
|
||||
|
||||
## 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:
|
||||
@ -74,28 +116,31 @@ 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
|
||||
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.
|
||||
## Troubleshooting
|
||||
|
||||
# To-Do
|
||||
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)
|
||||
- [ ] Add status tracking for main server
|
||||
- [ ] Fix status tracking and add tracking for latest servers
|
||||
- [X] 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
|
||||
|
||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fihatenodejs%2FaidxnFUN?ref=badge_large)
|
||||
|
306
manage
306
manage
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
SC_VERSION=1.3.0
|
||||
SC_CODENAME="bionic"
|
||||
SC_VERSION=1.4.0
|
||||
SC_CODENAME="seahorse"
|
||||
PORT=5566
|
||||
SETUP_FILE=".setup_complete"
|
||||
COLOR_RESET="\033[0m"
|
||||
@ -10,65 +10,145 @@ 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() {
|
||||
# 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"
|
||||
# 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"
|
||||
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}"
|
||||
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
|
||||
sudo apt-get install netcat-traditional
|
||||
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 "\n${COLOR_GREEN}Netcat installed successfully.${COLOR_RESET}\n"
|
||||
else
|
||||
echo -e "${COLOR_GREEN}Netcat is installed.${COLOR_RESET}"
|
||||
fi
|
||||
|
||||
# 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
|
||||
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
|
||||
# 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}NPM is installed. Version: $(npm -v)${COLOR_RESET}"
|
||||
touch $SETUP_FILE
|
||||
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}"
|
||||
else
|
||||
cp config.json.example config.json
|
||||
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
|
||||
fi
|
||||
else
|
||||
echo -e "${COLOR_GREEN}Config file already exists, skipping.${COLOR_RESET}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Show help message
|
||||
function show_help() {
|
||||
echo -e "${COLOR_GREEN}manage version:${COLOR_RESET} ${COLOR_BLUE}${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}"
|
||||
echo -e "${COLOR_GREEN}manage for aidxnFUN:${COLOR_RESET} ${COLOR_BLUE}v${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."
|
||||
@ -93,11 +173,10 @@ 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_GREEN}Done.${COLOR_RESET}"
|
||||
echo -e "${COLOR_YELLOW}Done, nothing created.${COLOR_RESET}"
|
||||
fi
|
||||
|
||||
elif [ "$action" == "delete" ]; then
|
||||
if [ -d "./public" ]; then
|
||||
echo -e "${COLOR_BLUE}Deleting public directory...${COLOR_RESET}"
|
||||
@ -106,9 +185,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_GREEN}Done.${COLOR_RESET}"
|
||||
echo -e "${COLOR_YELLOW}Done, nothing deleted.${COLOR_RESET}"
|
||||
fi
|
||||
else
|
||||
echo -e "${COLOR_RED}Invalid action: $action. Use 'create' or 'delete'.${COLOR_RESET}"
|
||||
@ -120,14 +199,13 @@ 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)
|
||||
@ -135,38 +213,53 @@ function restart_server() {
|
||||
if [ -n "$PIDS" ]; then
|
||||
echo -e "${COLOR_BLUE}Stopping server...${COLOR_RESET}"
|
||||
for PID in $PIDS; do
|
||||
kill "$PID" || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
|
||||
kill "$PID" >> /dev/null || 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 ! npm run build > node.log 2>&1; then
|
||||
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
|
||||
exit 1
|
||||
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_GREEN}Done!${COLOR_RESET}"
|
||||
echo -e "${COLOR_RED}NodeJS is somehow not installed, exiting.${COLOR_RESET}"
|
||||
exit 1
|
||||
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}"
|
||||
npm start > node.log 2>&1 &
|
||||
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
|
||||
|
||||
MAX_RETRIES=10
|
||||
RETRY_INTERVAL=1
|
||||
@ -174,10 +267,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 to start on port $PORT... Attempt $i/${MAX_RETRIES}${COLOR_RESET}"
|
||||
echo -e "${COLOR_YELLOW}[WAITING FOR SERVER]${COLOR_RESET} Attempt $i/${MAX_RETRIES}"
|
||||
sleep $RETRY_INTERVAL
|
||||
fi
|
||||
done
|
||||
@ -203,37 +296,52 @@ 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 ! npm run build > node.log 2>&1; then
|
||||
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
|
||||
exit 1
|
||||
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_GREEN}Done!${COLOR_RESET}"
|
||||
echo -e "${COLOR_RED}NodeJS is somehow not installed, exiting.${COLOR_RESET}"
|
||||
exit 1
|
||||
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}"
|
||||
npm start > node.log 2>&1 &
|
||||
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
|
||||
|
||||
MAX_RETRIES=10
|
||||
RETRY_INTERVAL=1
|
||||
@ -241,10 +349,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 to start on port $PORT... Attempt $i/${MAX_RETRIES}${COLOR_RESET}"
|
||||
echo -e "${COLOR_YELLOW}[WAITING FOR SERVER]${COLOR_RESET} Attempt $i/${MAX_RETRIES}"
|
||||
sleep $RETRY_INTERVAL
|
||||
fi
|
||||
done
|
||||
@ -264,20 +372,19 @@ 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)
|
||||
@ -285,9 +392,9 @@ function stop_server() {
|
||||
if [ -n "$PIDS" ]; then
|
||||
echo -e "${COLOR_BLUE}Stopping server...${COLOR_RESET}"
|
||||
for PID in $PIDS; do
|
||||
kill "$PID" || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
|
||||
kill "$PID" >> /dev/null || 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
|
||||
@ -298,46 +405,82 @@ 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 running with PID: $PID${COLOR_RESET}"
|
||||
echo -e "${COLOR_GREEN}[SERVER]${COLOR_RESET} Running with PID: $PID"
|
||||
else
|
||||
echo -e "${COLOR_RED}Server not running.${COLOR_RESET}"
|
||||
echo -e "${COLOR_RED}[SERVER]${COLOR_RESET} Down${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 ${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 v${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 "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 "${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 "\nPress any key to continue with tool installation..."
|
||||
read -n 1 -s -r -p ""
|
||||
clear
|
||||
|
||||
# Execute install tool script
|
||||
install_tools
|
||||
# Install NPM dependencies
|
||||
npm install
|
||||
|
||||
# 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
|
||||
|
||||
echo -e "\n${COLOR_GREEN}Dependency installation complete!${COLOR_RESET}"
|
||||
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"
|
||||
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."
|
||||
read -n 1 -s -r -p ""
|
||||
clear
|
||||
|
||||
echo -e "${COLOR_GREEN}Now, take a look at the commands you can use with this script:${COLOR_RESET}\n"
|
||||
echo -e "${COLOR_GREEN}Take a look at the tasks you can perform automatically with manage:${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}"
|
||||
@ -346,6 +489,7 @@ 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
|
||||
}
|
||||
|
||||
|
71
package.json
71
package.json
@ -1,32 +1,36 @@
|
||||
{
|
||||
"name": "aidxnfun",
|
||||
"version": "1.0.0",
|
||||
"version": "1.4.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build:css:linux": "npx tailwindcss -i ./src/css/base.css -o ./src/css/main.css && cp -r ./src/css ./public/",
|
||||
"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: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 tailwindcss -i ./src/css/base.css -o ./src/css/main.css && xcopy /E /I /Y \"./src/css\" \"./public/css\"",
|
||||
"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: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 run build:css:linux && npm run build:js:linux && npm run build:img:linux && npm run build:pgp:linux && npm run copy:favicon:linux",
|
||||
"build:win": "npm run build:css:win && npm run build:js:win && npm run build:img:win && npm run build:pgp:win && npm run copy:favicon:win",
|
||||
"build": "npm run build:linux",
|
||||
"winbuild": "npm run build:win",
|
||||
"start": "node app.js"
|
||||
"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": "npm app.js"
|
||||
},
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.20",
|
||||
"postcss": "^8.4.47",
|
||||
"tailwindcss": "^3.4.13"
|
||||
"postcss": "^8.5.3",
|
||||
"tailwindcss": "^4.0.12"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.6.0",
|
||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||
"@tailwindcss/cli": "^4.0.12",
|
||||
"ansi-regex": "^6.1.0",
|
||||
"ansi-styles": "^6.2.1",
|
||||
"any-promise": "^1.3.0",
|
||||
@ -37,35 +41,35 @@
|
||||
"brace-expansion": "^4.0.0",
|
||||
"braces": "^3.0.3",
|
||||
"camelcase-css": "^2.0.1",
|
||||
"chokidar": "^4.0.1",
|
||||
"chokidar": "^4.0.3",
|
||||
"color-convert": "^2.0.1",
|
||||
"color-name": "^2.0.0",
|
||||
"commander": "^13.0.0",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"commander": "^13.1.0",
|
||||
"cross-spawn": "^7.0.6",
|
||||
"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.1",
|
||||
"fast-glob": "^3.3.2",
|
||||
"fastq": "^1.17.1",
|
||||
"express": "^4.21.2",
|
||||
"fast-glob": "^3.3.3",
|
||||
"fastq": "^1.19.1",
|
||||
"fill-range": "^7.1.1",
|
||||
"foreground-child": "^3.3.0",
|
||||
"foreground-child": "^3.3.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"glob": "^11.0.0",
|
||||
"glob": "^11.0.1",
|
||||
"glob-parent": "^6.0.2",
|
||||
"hasown": "^2.0.2",
|
||||
"is-binary-path": "^3.0.0",
|
||||
"is-core-module": "^2.15.1",
|
||||
"is-core-module": "^2.16.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.0.2",
|
||||
"jiti": "^2.4.1",
|
||||
"jackspeak": "^4.1.0",
|
||||
"jiti": "^2.4.2",
|
||||
"lilconfig": "^3.1.3",
|
||||
"lines-and-columns": "^2.0.4",
|
||||
"lru-cache": "^11.0.2",
|
||||
@ -73,18 +77,18 @@
|
||||
"micromatch": "^4.0.8",
|
||||
"minimatch": "^10.0.1",
|
||||
"minipass": "^7.1.2",
|
||||
"mysql2": "^3.11.3",
|
||||
"mysql2": "^3.13.0",
|
||||
"mz": "^2.7.0",
|
||||
"nanoid": "^5.0.9",
|
||||
"nanoid": "^5.1.3",
|
||||
"normalize-path": "^3.0.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"object-hash": "^3.0.0",
|
||||
"openpgp": "^6.0.0",
|
||||
"openpgp": "^6.1.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.0",
|
||||
"picocolors": "^1.1.1",
|
||||
"picomatch": "^4.0.2",
|
||||
"pify": "^6.1.0",
|
||||
"pirates": "^4.0.6",
|
||||
@ -92,13 +96,13 @@
|
||||
"postcss-js": "^4.0.1",
|
||||
"postcss-load-config": "^6.0.1",
|
||||
"postcss-nested": "^7.0.2",
|
||||
"postcss-selector-parser": "^7.0.0",
|
||||
"postcss-selector-parser": "^7.1.0",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
"queue-microtask": "^1.2.3",
|
||||
"read-cache": "^1.0.0",
|
||||
"readdirp": "^4.0.2",
|
||||
"resolve": "^1.22.8",
|
||||
"reusify": "^1.0.4",
|
||||
"readdirp": "^4.1.2",
|
||||
"resolve": "^1.22.10",
|
||||
"reusify": "^1.1.0",
|
||||
"run-parallel": "^1.2.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
"shebang-regex": "^4.0.0",
|
||||
@ -118,10 +122,13 @@
|
||||
"which": "^5.0.0",
|
||||
"wrap-ansi": "^9.0.0",
|
||||
"wrap-ansi-cjs": "^8.0.0",
|
||||
"yaml": "^2.5.1"
|
||||
"yaml": "^2.7.0"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "ihatenodejs",
|
||||
"license": "CC0-1.0",
|
||||
"description": "The full code of my website"
|
||||
"description": "The full code of my website",
|
||||
"trustedDependencies": [
|
||||
"@parcel/watcher"
|
||||
]
|
||||
}
|
||||
|
@ -1,6 +1,26 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@import 'tailwindcss';
|
||||
|
||||
@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);
|
||||
|
@ -1,13 +0,0 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ["./views/**/*.{ejs,js}"],
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
'afacad-flux': ['"Afacad Flux"', 'sans-serif'],
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
};
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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-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 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">
|
||||
<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>
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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-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 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">
|
||||
<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>
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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-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 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">
|
||||
<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>
|
||||
|
@ -20,7 +20,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 p-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">
|
||||
<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">
|
||||
<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-gradient-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-linear-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-gradient-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-linear-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-gradient-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-linear-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>
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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-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 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">
|
||||
<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">
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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-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 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">
|
||||
<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>
|
||||
|
@ -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-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 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>
|
||||
<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-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">→</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-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">→</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,7 +48,7 @@
|
||||
<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-none 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-hidden mt-5 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>
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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">
|
||||
@ -23,7 +23,7 @@
|
||||
<h1 class="text-2xl font-bold">Testing pings...</h1>
|
||||
</div>
|
||||
|
||||
<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 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">
|
||||
<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>
|
||||
|
@ -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-gradient-to-br from-slate-900 to-black text-white font-afacad-flux">
|
||||
<body class="bg-linear-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-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 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">
|
||||
<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">Verify</button>
|
||||
<button type="submit" class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded-sm">Verify</button>
|
||||
</form>
|
||||
<% if (verifyResult) { %>
|
||||
<div class="mt-4 p-4 rounded bg-slate-800 text-white">
|
||||
<div class="mt-4 p-4 rounded-sm bg-slate-800 text-white">
|
||||
<p><%= verifyResult %></p>
|
||||
</div>
|
||||
<% } %>
|
||||
|
Loading…
x
Reference in New Issue
Block a user