48 Commits

Author SHA1 Message Date
f4295107a4 feat: Add now old page for previous now pages
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2024-02-23 21:19:00 +11:00
35e4ae222c feat: Add date to now page 2024-02-23 17:27:43 +11:00
12a51bbb54 fix: use global variable to stop issues
All checks were successful
Build Docker / Build Image (push) Successful in 21s
2024-02-22 16:43:45 +11:00
6d47ddf89f fix: Async hns script to fix site loading
All checks were successful
Build Docker / Build Image (push) Successful in 25s
2024-02-22 16:40:52 +11:00
2d56c89765 fix: Now page social embed
All checks were successful
Build Docker / Build Image (push) Successful in 22s
2024-02-18 22:01:34 +11:00
21aec406df feat: Added first now post
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-18 21:47:38 +11:00
6eb6299b3a fix: Update token name to have space
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-18 19:52:36 +11:00
c3f2714929 feat: Update metadata
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-18 18:48:00 +11:00
e98edf3de9 fix: Move wdbrn metadata to assets
All checks were successful
Build Docker / Build Image (push) Successful in 20s
2024-02-18 12:53:57 +11:00
cadece357b fix: Return minetype json
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2024-02-18 12:51:59 +11:00
da42f35ff0 feat: Add WDBRN token manifest
All checks were successful
Build Docker / Build Image (push) Successful in 23s
2024-02-18 12:50:17 +11:00
dcb07799e3 feat: Update website and socials
All checks were successful
Build Docker / Build Image (push) Successful in 22s
2024-02-13 14:21:30 +11:00
ece562caba feat: Added white HNS logos
All checks were successful
Build Docker / Build Image (push) Successful in 24s
2024-02-12 19:42:43 +11:00
23d44038ef feat: Add ico icon
All checks were successful
Build Docker / Build Image (push) Successful in 46s
2024-02-12 19:34:54 +11:00
31f93005b9 feat: Updated the rest of the HNS logos
All checks were successful
Build Docker / Build Image (push) Successful in 24s
2024-02-12 19:32:56 +11:00
8217a7fcd6 fix: Remove old files
All checks were successful
Build Docker / Build Image (push) Successful in 23s
2024-02-12 19:27:18 +11:00
00ac9881c3 fix: Move to shorter path
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2024-02-12 19:17:50 +11:00
1f54a882d8 feat: Add handshake favicons
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-12 18:44:27 +11:00
7a9fb9e08b feat: Add linkr and HNSDoH to projects
All checks were successful
Build Docker / Build Image (push) Successful in 34s
2024-01-08 02:31:00 +11:00
9305442c4b feat: Add acme server for HNSDoH
All checks were successful
Build Docker / Build Image (push) Successful in 47s
2023-12-22 15:07:24 +11:00
d67da4ad06 feat: Ad umami
All checks were successful
Build Docker / Build Image (push) Successful in 39s
2023-12-20 15:22:15 +11:00
d094784188 feat: Updated websites section
All checks were successful
Build Docker / Build Image (push) Successful in 35s
2023-12-18 15:02:13 +11:00
c2cd53dc78 feat: Added some projects and resume info
All checks were successful
Build Docker / Build Image (push) Successful in 47s
2023-12-18 11:24:41 +11:00
89ce365bd0 feat: Add pointer to downtime div
All checks were successful
Build Docker / Build Image (push) Successful in 38s
2023-12-16 16:33:31 +11:00
e6708dceaa feat: Add selfhosted tracking
All checks were successful
Build Docker / Build Image (push) Successful in 36s
2023-12-13 12:19:59 +11:00
2e463c626d fix: Typo with old address method
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2023-12-05 21:54:18 +11:00
797db5e1a9 feat: Add a manual address to stop issues with address index
All checks were successful
Build Docker / Build Image (push) Successful in 37s
2023-12-05 18:35:08 +11:00
12dd3dfedc feat: Set hip address to only update when the server restarts
All checks were successful
Build Docker / Build Image (push) Successful in 35s
2023-12-05 17:35:19 +11:00
682e732643 fix: Update Woodburn Reg logo for mobile
All checks were successful
Build Docker / Build Image (push) Successful in 28s
2023-11-08 12:39:06 +11:00
33158bdb57 feat: Add servers page
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2023-11-06 11:27:09 +11:00
699e9988f2 fix: Hide downtime notification on small screens
All checks were successful
Build Docker / Build Image (push) Successful in 28s
2023-11-03 14:14:41 +11:00
21bcb0464b feat: Add downtime notification
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-03 14:11:34 +11:00
6efcb43d23 fix: Remove volume mount
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-03 12:11:49 +11:00
dcbe034d2f feat: Add current project
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-03 11:51:10 +11:00
5f42fc3d8c Merge branch 'feature/python_server' into develop
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-02 23:52:48 +11:00
92f72accf9 fix: Hide onion address on mobile to stop scroll issue
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-02 23:30:06 +11:00
f419e28a5a fix: Update navbar on mobile
All checks were successful
Build Docker / Build Image (push) Successful in 28s
2023-11-02 23:22:24 +11:00
519d241b31 feat: Add copy wallet on click
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-02 22:53:08 +11:00
f1febd7823 feat: Use dynamic address in index
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-02 22:12:15 +11:00
9dee5c24e4 feat: Get hip2 address from docker hip2server
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-02 22:05:48 +11:00
20d59f7820 fix: Set HNS address cache to 7 days
All checks were successful
Build Docker / Build Image (push) Successful in 34s
2023-11-02 21:53:23 +11:00
66acd69bec feat: Add wallet addresses
All checks were successful
Build Docker / Build Image (push) Successful in 37s
2023-11-02 21:51:49 +11:00
f001691283 fix: Old generator path
All checks were successful
Build Docker / Build Image (push) Successful in 26s
2023-11-02 21:37:18 +11:00
607e51c481 fix: Password generator location
All checks were successful
Build Docker / Build Image (push) Successful in 34s
2023-11-02 21:27:38 +11:00
1855e18315 fix: Add routes for handshake redirect scripts
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2023-11-02 21:13:59 +11:00
0b6ba921ce feat: Add new backend
All checks were successful
Build Docker / Build Image (push) Successful in 36s
2023-11-02 21:06:43 +11:00
d32dcc701b fix: Update some routes
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2023-11-02 20:45:36 +11:00
5bed9dbbc8 feat: Add python server
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2023-11-02 20:26:15 +11:00
216 changed files with 1925 additions and 3778 deletions

View File

@@ -0,0 +1,41 @@
name: Build Docker
run-name: Build Docker Images
on:
push:
jobs:
Build Image:
runs-on: [ubuntu-latest, amd]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Docker
run : |
apt-get install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce-cli -y
- name: Build Docker image
run : |
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
tag=${tag//\//-}
tag_num=${GITHUB_RUN_NUMBER}
echo "tag_num=$tag_num"
if [[ "$tag" == "main" ]]; then
tag="latest"
else
tag_num="${tag}-${tag_num}"
fi
docker build -t nathanwoodburn:$tag_num .
docker tag nathanwoodburn:$tag_num git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag_num
docker push git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag_num
docker tag nathanwoodburn:$tag_num git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag
docker push git.woodburn.au/nathanwoodburn/nathanwoodburn:$tag

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
__pycache__/
.env

93
403.css
View File

@@ -1,93 +0,0 @@
html {
height: 100%;
}
body {
/* width: 100%; */
height: 99%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
family: "Poppins", sans-serif;
background-image: linear-gradient(45deg, #f6d200 25%, #181617 25%, #181617 50%, #f6d200 50%, #f6d200 75%, #181617 75%, #181617 100%);
}
h1 {
text-transform: uppercase;
background: repeating-linear-gradient(45deg, #f6d200, #f6d200 10px, #181617 10px, #181617 20px);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
animation: move 5s ease infinite;
font-size: 384px;
margin: 0;
line-height: 0.7;
position: relative;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
h1:before, h1:after {
content: "Caution";
background-color: #f6d200;
color: #181617;
border-radius: 10px;
font-size: 35px;
position: absolute;
padding: 31px;
text-transform: uppercase;
font-weight: bold;
-webkit-text-fill-color: #181617;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) rotate(20deg);
}
h1:before {
content: "";
padding: 70px 130px;
background: repeating-linear-gradient(45deg, #f6d200, #f6d200 10px, #181617 10px, #181617 20px);
box-shadow: 0px 0px 10px #181617;
}
h1 span:before, h1 span:after {
content: "";
width: 8px;
height: 8px;
background: #757575;
color: #757575;
border-radius: 50%;
position: absolute;
bottom: 0;
margin: auto;
top: 20%;
z-index: 3;
box-shadow: 0px 60px 0 0px;
}
h1 span:before {
left: 37%;
transform: rotate(22deg);
top: -44%;
}
h1 span:after {
right: 34%;
transform: rotate(22deg);
top: 3%;
}
input {
margin-top: 3em;
background: #f6d200;
color: #181617;
border: 0;
padding: 20px 40px;
font-size: 20px;
font-weight: bold;
text-transform: uppercase;
border-radius: 10px;
box-shadow: 0px 0px 10px #181617;
cursor: pointer;
transition: all 0.3s ease;
}

View File

@@ -1,17 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>403 | Woodburn</title>
<link rel="stylesheet" href="403.css">
</head>
<body>
<h1 class="text"><span>403</span></h1>
<br>
<form action="https://id.woodburn.au/logout">
<input type="submit" value="Logout" />
</form>
</body>
</html>

View File

@@ -1,24 +0,0 @@
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Nathan Woodburn</title>
<link rel="icon" type="image/png" href="../assets/img/NJW Icon 512.png"/>
<link rel="icon" type="image/png" href="https://nathan.woodburn.id.au/assets/img/NJW Icon 512.png"/>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css'><link rel="stylesheet" href="https://nathan.woodburn.id.au/404.css">
</head>
<body style="background-color:white;">
<!-- partial:index.partial.html -->
<p><br><br><br></p>
<h1 style="text-align:center">Space Invaders destroyed this page!</h1>
<t2 style="text-align:center">Take revenge on them!</t2>
<p class="mobile"><br><br><br><br><br><br></p>
<p class="center"><br><br><br>Use <span class="label label-danger">Space</span> to shoot and <span class="label label-danger"></span>&#160;<span class="label label-danger"></span> to move!&#160;&#160;&#160;<button class="btn btn-default btn-xs" id="restart">Restart</button> or <button class="btn btn-default btn-xs" onclick="location.href='javascript:history.back()'" type="button">
Retreat</button></p>
<canvas id="space-invaders">
<!-- partial -->
<script src="https://nathan.woodburn.id.au/404.js"></script>
</body>
</html>

293
404M.css
View File

@@ -1,293 +0,0 @@
@import url(https://fonts.googleapis.com/css?family=Ubuntu);
html, body {
background: #28254C;
font-family: 'Ubuntu';
}
* {
box-sizing: border-box;
}
.box {
width: 350px;
height: 100%;
max-height: 600px;
min-height: 450px;
background: #332F63;
border-radius: 20px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
padding: 30px 50px;
}
.box .box__ghost {
padding: 15px 25px 25px;
position: absolute;
left: 50%;
top: 30%;
transform: translate(-50%, -30%);
}
.box .box__ghost .symbol:nth-child(1) {
opacity: .2;
animation: shine 4s ease-in-out 3s infinite;
}
.box .box__ghost .symbol:nth-child(1):before, .box .box__ghost .symbol:nth-child(1):after {
content: '';
width: 12px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
bottom: 65px;
left: 0;
}
.box .box__ghost .symbol:nth-child(1):before {
transform: rotate(45deg);
}
.box .box__ghost .symbol:nth-child(1):after {
transform: rotate(-45deg);
}
.box .box__ghost .symbol:nth-child(2) {
position: absolute;
left: -5px;
top: 30px;
height: 18px;
width: 18px;
border: 4px solid;
border-radius: 50%;
border-color: #fff;
opacity: .2;
animation: shine 4s ease-in-out 1.3s infinite;
}
.box .box__ghost .symbol:nth-child(3) {
opacity: .2;
animation: shine 3s ease-in-out .5s infinite;
}
.box .box__ghost .symbol:nth-child(3):before, .box .box__ghost .symbol:nth-child(3):after {
content: '';
width: 12px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
top: 5px;
left: 40px;
}
.box .box__ghost .symbol:nth-child(3):before {
transform: rotate(90deg);
}
.box .box__ghost .symbol:nth-child(3):after {
transform: rotate(180deg);
}
.box .box__ghost .symbol:nth-child(4) {
opacity: .2;
animation: shine 6s ease-in-out 1.6s infinite;
}
.box .box__ghost .symbol:nth-child(4):before, .box .box__ghost .symbol:nth-child(4):after {
content: '';
width: 15px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
top: 10px;
right: 30px;
}
.box .box__ghost .symbol:nth-child(4):before {
transform: rotate(45deg);
}
.box .box__ghost .symbol:nth-child(4):after {
transform: rotate(-45deg);
}
.box .box__ghost .symbol:nth-child(5) {
position: absolute;
right: 5px;
top: 40px;
height: 12px;
width: 12px;
border: 3px solid;
border-radius: 50%;
border-color: #fff;
opacity: .2;
animation: shine 1.7s ease-in-out 7s infinite;
}
.box .box__ghost .symbol:nth-child(6) {
opacity: .2;
animation: shine 2s ease-in-out 6s infinite;
}
.box .box__ghost .symbol:nth-child(6):before, .box .box__ghost .symbol:nth-child(6):after {
content: '';
width: 15px;
height: 4px;
background: #fff;
position: absolute;
border-radius: 5px;
bottom: 65px;
right: -5px;
}
.box .box__ghost .symbol:nth-child(6):before {
transform: rotate(90deg);
}
.box .box__ghost .symbol:nth-child(6):after {
transform: rotate(180deg);
}
.box .box__ghost .box__ghost-container {
background: #fff;
width: 100px;
height: 100px;
border-radius: 100px 100px 0 0;
position: relative;
margin: 0 auto;
animation: upndown 3s ease-in-out infinite;
}
.box .box__ghost .box__ghost-container .box__ghost-eyes {
position: absolute;
left: 50%;
top: 45%;
height: 12px;
width: 70px;
}
.box .box__ghost .box__ghost-container .box__ghost-eyes .box__eye-left {
width: 12px;
height: 12px;
background: #332F63;
border-radius: 50%;
margin: 0 10px;
position: absolute;
left: 0;
}
.box .box__ghost .box__ghost-container .box__ghost-eyes .box__eye-right {
width: 12px;
height: 12px;
background: #332F63;
border-radius: 50%;
margin: 0 10px;
position: absolute;
right: 0;
}
.box .box__ghost .box__ghost-container .box__ghost-bottom {
display: flex;
position: absolute;
top: 100%;
left: 0;
right: 0;
}
.box .box__ghost .box__ghost-container .box__ghost-bottom div {
flex-grow: 1;
position: relative;
top: -10px;
height: 20px;
border-radius: 100%;
background-color: #fff;
}
.box .box__ghost .box__ghost-container .box__ghost-bottom div:nth-child(2n) {
top: -12px;
margin: 0 -0px;
border-top: 15px solid #332F63;
background: transparent;
}
.box .box__ghost .box__ghost-shadow {
height: 20px;
box-shadow: 0 50px 15px 5px #3B3769;
border-radius: 50%;
margin: 0 auto;
animation: smallnbig 3s ease-in-out infinite;
}
.box .box__description {
position: absolute;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
}
.box .box__description .box__description-container {
color: #fff;
text-align: center;
width: 200px;
font-size: 16px;
margin: 0 auto;
}
.box .box__description .box__description-container .box__description-title {
font-size: 24px;
letter-spacing: .5px;
}
.box .box__description .box__description-container .box__description-text {
color: #8C8AA7;
line-height: 20px;
margin-top: 20px;
}
.box .box__description .box__button {
display: block;
position: relative;
background: #FF5E65;
border: 1px solid transparent;
border-radius: 50px;
height: 50px;
text-align: center;
text-decoration: none;
color: #fff;
line-height: 50px;
font-size: 18px;
padding: 0 70px;
white-space: nowrap;
margin-top: 25px;
transition: background .5s ease;
overflow: hidden;
-webkit-mask-image: -webkit-radial-gradient(white, black);
}
.box .box__description .box__button:before {
content: '';
position: absolute;
width: 20px;
height: 100px;
background: #fff;
bottom: -25px;
left: 0;
border: 2px solid #fff;
transform: translateX(-50px) rotate(45deg);
transition: transform .5s ease;
}
.box .box__description .box__button:hover {
background: transparent;
border-color: #fff;
}
.box .box__description .box__button:hover:before {
transform: translateX(250px) rotate(45deg);
}
@keyframes upndown {
0% {
transform: translateY(5px);
}
50% {
transform: translateY(15px);
}
100% {
transform: translateY(5px);
}
}
@keyframes smallnbig {
0% {
width: 90px;
}
50% {
width: 100px;
}
100% {
width: 90px;
}
}
@keyframes shine {
0% {
opacity: .2;
}
25% {
opacity: .1;
}
50% {
opacity: .2;
}
100% {
opacity: .2;
}
}

View File

@@ -1,53 +0,0 @@
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Nathan Woodburn</title>
<link rel="icon" type="image/png" href="../images/favicon.png"/>
<link rel="icon" type="image/png" href="https://www.nathanwoodburn.tk/images/favicon.png"/>
<link rel="stylesheet" href="./404M.css">
</head>
<body>
<!-- partial:index.partial.html -->
<div class="box">
<div class="box__ghost">
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="symbol"></div>
<div class="box__ghost-container">
<div class="box__ghost-eyes">
<div class="box__eye-left"></div>
<div class="box__eye-right"></div>
</div>
<div class="box__ghost-bottom">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="box__ghost-shadow"></div>
</div>
<div class="box__description">
<div class="box__description-container">
<div class="box__description-title">Whoops!</div>
<div class="box__description-text">It seems like we couldn't find the page you were looking for</div>
</div>
<a href="https://www.nathanwoodburn.tk" class="box__button">Go back</a>
</div>
</div>
<!-- partial -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script><script src="./404M.js"></script>
</body>
</html>

20
404M.js
View File

@@ -1,20 +0,0 @@
//based on https://dribbble.com/shots/3913847-404-page
var pageX = $(document).width();
var pageY = $(document).height();
var mouseY=0;
var mouseX=0;
$(document).mousemove(function( event ) {
//verticalAxis
mouseY = event.pageY;
yAxis = (pageY/2-mouseY)/pageY*300;
//horizontalAxis
mouseX = event.pageX / -pageX;
xAxis = -mouseX * 100 - 100;
$('.box__ghost-eyes').css({ 'transform': 'translate('+ xAxis +'%,-'+ yAxis +'%)' });
//console.log('X: ' + xAxis);
});

1
CNAME
View File

@@ -1 +0,0 @@
nathan.woodburn.au

17
Dockerfile Normal file
View File

@@ -0,0 +1,17 @@
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
WORKDIR /app
COPY requirements.txt /app
RUN --mount=type=cache,target=/root/.cache/pip \
pip3 install -r requirements.txt
COPY . /app
# Add mount point for data volume
# VOLUME /data
ENTRYPOINT ["python3"]
CMD ["main.py"]
FROM builder as dev-envs

View File

@@ -1,60 +0,0 @@
<!DOCTYPE html>
<html data-bs-theme="light" lang="en-au" style="background: url(&quot;assets/img/intro-bg.webp&quot;) bottom / cover no-repeat, black;">
<head>
<meta charset="utf-8">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-NNXTCKW');</script>
<!-- End Google Tag Manager -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Nathan.Woodburn/</title>
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/about.html">
<meta property="og:url" content="https://nathan.woodburn.au/about.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<meta name="twitter:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta name="description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/android-chrome-512x512.png">
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="manifest.json">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="assets/fonts/fontawesome-all.min.css">
<link rel="stylesheet" href="assets/fonts/ionicons.min.css">
<link rel="stylesheet" href="assets/css/styles.min.css">
<link rel="stylesheet" href="assets/css/fixes.min.css">
<link rel="stylesheet" href="assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
</head>
<body class="about-body" style="text-align: center;color: rgb(255,255,255);background: transparent;"><script src="https://nathan.woodburn/handshake.js" domain="nathan.woodburn"></script>
<script src="https://nathan.woodburn/https.js"></script>
<div class="profile-container" style="margin-bottom: 2em;margin-top: 5em;"><img class="profile background" src="assets/img/profile.jpg" style="border-radius: 50%;"><img class="profile foreground" src="assets/img/pfront.webp"></div>
<h1 class="nathanwoodburn" style="margin-bottom: 0.5em;">Nathan.Woodburn/</h1>
<div class="social-icons" style="background: rgba(255,255,255,0);color: rgb(255,255,255);padding: 0px;"><a href="https://www.facebook.com/nathanjwoodburn" target="_blank"><i class="icon ion-social-facebook facebook social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a target="_blank" href="https://twitter.com/woodburn_nathan"><i class="icon ion-social-twitter twitter social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="https://www.linkedin.com/in/nathanwoodburn/" target="_blank"><i class="icon ion-social-linkedin linkedin social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="https://github.com/Nathanwoodburn" target="_blank"><i class="icon ion-social-github github social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="mailto:contact@nathan.woodburn.au" target="_blank"><i class="icon ion-email email social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a><a href="https://keybase.io/nathanwoodburn" target="_blank"><i class="fab fa-keybase keybase social-icons-hidden" style="border-color: #ffffff;color: rgb(255,255,255);font-size: 35px;margin-top: 0.5em;margin-bottom: 0.5em;"></i></a></div>
<p style="margin-top: 1em;">Hi, I am Nathan Woodburn and I live in Canberra<br>I am currently studying at the Australian National University<br>I enjoy 3D printing and CAD<br>I code stuff with C#, Linux Bash<br>I can code in a ton of other languages with Google's help<br>I'm a co-founder of <a href="https://hns.au" target="_blank">Handshake Australia</a><br>I currently work for <a href="https://learn.namebase.io" target="_blank">Namebase</a><br><br></p><i class="fas fa-arrow-down" style="font-size: 50px;" onclick="slideout()"></i>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/script.min.js"></script>
<script src="assets/js/about.min.js"></script>
<script src="assets/js/hacker.min.js"></script>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 KiB

View File

@@ -1,57 +0,0 @@
.bs-icon {
--bs-icon-size: .75rem;
display: flex;
flex-shrink: 0;
justify-content: center;
align-items: center;
font-size: var(--bs-icon-size);
width: calc(var(--bs-icon-size) * 2);
height: calc(var(--bs-icon-size) * 2);
color: var(--bs-primary);
}
.bs-icon-xs {
--bs-icon-size: 1rem;
width: calc(var(--bs-icon-size) * 1.5);
height: calc(var(--bs-icon-size) * 1.5);
}
.bs-icon-sm {
--bs-icon-size: 1rem;
}
.bs-icon-md {
--bs-icon-size: 1.5rem;
}
.bs-icon-lg {
--bs-icon-size: 2rem;
}
.bs-icon-xl {
--bs-icon-size: 2.5rem;
}
.bs-icon.bs-icon-primary {
color: var(--bs-white);
background: var(--bs-primary);
}
.bs-icon.bs-icon-primary-light {
color: var(--bs-primary);
background: rgba(var(--bs-primary-rgb), .2);
}
.bs-icon.bs-icon-semi-white {
color: var(--bs-primary);
background: rgba(255, 255, 255, .5);
}
.bs-icon.bs-icon-rounded {
border-radius: .5rem;
}
.bs-icon.bs-icon-circle {
border-radius: 50%;
}

View File

@@ -1,43 +0,0 @@
.text2-center {
text-align: center;
margin: 1.25rem 0;
border-top: 1px solid #dadada;
padding: 1.25rem 0;
}
.text-center1 {
text-align: center;
margin: 1.25rem 0;
border-bottom: 1px solid #dadada;
padding: 1.25rem 0;
}
.col-md-3 {
margin: 1.25rem 0;
}
.shadow {
box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;
}
.rounded {
border-radius: .25rem !important;
}
.border {
border: 0px !important;
}
h1 {
color: #2c3134;
}
h2 {
color: #2c3134;
}
.btn:hover {
color: black !important;
background-color: white !important;
}

View File

@@ -1,38 +0,0 @@
.social-icons {
color: #313437;
background-color: #fff;
padding: 70px 0;
}
@media (max-width:767px) {
.social-icons {
padding: 50px 0;
}
}
@media (max-width:500px) {
img.profile {
width: 200px;
margin-left: -100px;
}
}
@media (max-width:500px) {
.profile-container {
height: 200px;
margin-top: 2em !important;
}
}
.social-icons i {
color: #757980;
margin: 0 10px;
width: 60px;
height: 60px;
border: 1px solid #c8ced7;
text-align: center;
border-radius: 50%;
line-height: 60px;
display: inline-block;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +0,0 @@
body.about-body {
position: absolute;
top: 0;
transition: 2s;
height: 101%;
}
::-webkit-scrollbar {
display: none;
}

View File

@@ -1,13 +0,0 @@
img.no-drag {
pointer-events: none;
}
img.fog {
pointer-events: none;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}

View File

@@ -1 +0,0 @@
img.no-drag{pointer-events:none}img.fog{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%}

View File

@@ -1 +0,0 @@
.main{position:relative;height:100vh;width:99vw;overflow:hidden}.parallax{pointer-events:none;transition:none}.bg-img{position:absolute;width:194.44%;top:1.86%;left:50.69%;z-index:1}.fog-7{position:absolute;z-index:2;top:37.7%;left:70.8%;width:132%}.mountain-10{position:absolute;z-index:3;top:63.58%;width:71.52%;left:67.84%}.fog-6{position:absolute;z-index:4;top:62.09%;left:50.4%;width:129.3%}.mountain-9{position:absolute;z-index:5;top:63.95%;width:32.63%;left:18.3%}.mountain-8{position:absolute;z-index:6;top:60.6%;width:56.25%;left:36%}.fog-5{position:absolute;z-index:7;top:69.7%;left:51.3%;width:31.25%}.mountain-7{position:absolute;z-index:8;width:37.36%;top:65.18%;left:71.18%}.text{position:absolute;z-index:9;top:34%;left:50%;text-align:center;text-transform:uppercase;color:#fff;pointer-events:auto}.text .para1{font-weight:100;line-height:.88}.text .para2{font-weight:800}.mountain-6{position:absolute;z-index:10;top:57.4%;width:28.33%;left:90.97%}.fog-4{position:absolute;z-index:11;top:77.7%;left:45.84%;width:40.27%}.mountain-5{position:absolute;z-index:12;top:80.86%;width:43.4%;left:59%}.fog-3{position:absolute;z-index:13;top:63.58%;left:48.27%;width:107.63%}.mountain-4{position:absolute;z-index:14;top:74.19%;width:54.16%;left:23.55%}.mountain-3{position:absolute;z-index:15;top:61.35%;left:101.11%;width:32.22%}.fog-2{position:absolute;z-index:16;top:68.14%;left:48%;width:108.33%}.mountain-2{position:absolute;z-index:17;top:69.01%;left:78.61%;width:47.91%}.mountain-1{position:absolute;z-index:18;top:52%;left:8.27%;width:37.15%}.sun-rays{position:absolute;z-index:19;top:0;right:0;width:41.31%;pointer-events:none}.black-shadow{position:absolute;z-index:20;bottom:0;right:0;pointer-events:none;width:100%}.fog-1{position:absolute;z-index:21;top:59.26%;left:50.69%;width:111.8%}.vignette{position:absolute;z-index:100;width:100%;height:100%;top:0;left:0;background:radial-gradient(ellipse at center,rgba(0,0,0,0) 65%,rgba(0,0,0,.7));pointer-events:none}@media (max-width:1100px){.text h1{font-size:5.8rem}.text h2{display:none}}@media (max-width:725px){.bg-img{width:initial;height:208.1%}.fog-7{width:initial;height:146.17%}.mountain-10{width:initial;height:77.59%}.fog-6{width:initial;height:73.11%}.mountain-9{height:87.64%;width:initial}.mountain-8{height:84.33%;width:initial}.fog-5{width:initial;height:54.16%}.mountain-7{width:initial;height:72.26%}.mountain-6{width:initial;height:56.78%}.fog-4{width:initial;height:104.5%}.mountain-5{width:initial;height:60.64%}.fog-3{width:initial;height:90.78%}.mountain-4{width:initial;height:71.42%}.mountain-3{width:initial;height:96.86%}.fog-2{width:initial;height:84.73%}.mountain-2{display:none}.mountain-1{width:initial;height:100.03%}.fog-1{width:initial;height:89.86%}}@media (max-width:520px){.text h1{font-size:3.3rem}.text h2{font-size:2.6rem}}

View File

@@ -1,28 +0,0 @@
.hide_underline {
text-decoration: none;
}
.invert {
filter: invert(1);
}
@media screen and (max-width: 800px) {
.masthead {
padding-top: 0 !important;
}
}
/* For screen under 450 px set the nav icon width 100% */
@media screen and (max-width: 450px) {
img.navicon {
width: 100%;
}
}
@media screen and (max-width: 450px) {
#navbar {
padding-left: 0 !important;
}
}

View File

@@ -1,24 +0,0 @@
.profile-container {
height: 300px;
}
img.profile {
width: 300px;
position: absolute;
left: 50%;
margin-left: -150px;
aspect-ratio: 1;
padding-top: calc(var(--s)/5);
transform: scale(1);
transition: .5s;
}
img.foreground {
border-radius: 50%;
pointer-events: none;
}
img.background:hover {
filter: blur(5px);
}

View File

@@ -1,104 +0,0 @@
.profile-container {
/*margin-left: calc(10% - 10px);*/
height: 170px;
width: 170px;
z-index: 2;
left: 10%;
}
.title {
position: absolute;
margin-left: calc(100px);
width: calc(100% - 100px);
padding: 1em;
margin-top: -225px;
z-index: 0;
}
.title > * {
width: 100%;
margin-bottom: 0px;
}
img.profile {
left: 10px;
width: 150px;
position: absolute;
aspect-ratio: 1;
transform: scale(1);
transition: .5s;
z-index: 2;
}
img.background2 {
left: 0px;
width: 170px !important;
margin-top: -10px;
pointer-events: none;
z-index: 1;
}
img.foreground {
border-radius: 50%;
pointer-events: none;
z-index: 3;
}
img.background:hover {
filter: blur(5px);
}
.spacer {
height: 100px;
}
/* For small screens */
img.profilesml {
width: 150px;
position: absolute;
left: 50%;
margin-left: -75px;
aspect-ratio: 1;
padding-top: calc(var(--s)/5);
transform: scale(1);
transition: .5s;
}
img.foregroundsml {
border-radius: 50%;
pointer-events: none;
}
img.backgroundsml:hover {
filter: blur(5px);
}
img.background2sml {
width: 170px !important;
left: calc(50% - 10px);
margin-top: -10px;
pointer-events: none;
z-index: 0;
}
/* For printing set colour to black */
@media print {
div {
color: black !important;
}
}
@media print {
.noprintbreak {
page-break-inside: avoid;
}
}
@media print {
.edu-main {
page-break-before: always;
}
}

View File

@@ -1 +0,0 @@
.social-icons{color:#313437;background-color:#fff;padding:70px 0}@media (max-width:767px){.social-icons{padding:50px 0}}@media (max-width:500px){img.profile{width:200px;margin-left:-100px}.profile-container{height:200px;margin-top:2em!important}}.social-icons i{color:#757980;margin:0 10px;width:60px;height:60px;border:1px solid #c8ced7;text-align:center;border-radius:50%;line-height:60px;display:inline-block}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -1,30 +0,0 @@
function slideout() {
bodydiv = document.querySelector("body");
bodydiv.style.top = "-100%";
setTimeout(function() {
window.location.href = "/#about"
bodydiv.style.top = "0px";
}, 1000)
}
// jQuery(document).ready(function(){
// function resizeForm(){
// var width = (window.innerWidth > 0) ? window.innerWidth : document.documentElement.clientWidth;
// if(width > 1024){
// } else {
// }
// }
// window.onresize = resizeForm;
// resizeForm();
// });
document.addEventListener("scroll", scroll);
function scroll() {
var width = (window.innerWidth > 0) ? window.innerWidth : document.documentElement.clientWidth;
if(width > 1024){
slideout();
}
}

View File

@@ -1 +0,0 @@
const parallax_el=document.querySelectorAll(".parallax"),main=document.querySelector(".main");let xValue=0,yValue=0,rotateDegree=0;function update(e){parallax_el.forEach((t=>{let a=t.dataset.speedx,i=t.dataset.speedy,n=t.dataset.speedz,r=t.dataset.rotation,l=parseFloat(getComputedStyle(t).left)<window.innerWidth/2?1:-1,o=(e-parseFloat(getComputedStyle(t).left))*l*.1;t.style.transform=`perspective(2300px) translateZ(${o*n}px) rotateY(${rotateDegree*r}deg) translateX(calc(-50% + ${-xValue*a}px)) translateY(calc(-50% + ${yValue*i}px))`}))}update(0),window.addEventListener("mousemove",(e=>{timeline.isActive()||(xValue=e.clientX-window.innerWidth/2,yValue=e.clientY-window.innerHeight/2,rotateDegree=xValue/(window.innerWidth/2)*20,update(e.clientX))})),window.innerWidth>=725?main.style.maxHeight=.6*window.innerWidth+"px":main.style.maxHeight=1.6*window.innerWidth+"px";let timeline=gsap.timeline();setTimeout((()=>{parallax_el.forEach((e=>{e.style.transition="0.45s cubic-bezier(0.2, 0.49, 0.32, 0.99)"}))}),1e3*timeline.endTime()),Array.from(parallax_el).filter((e=>!e.classList.contains("text"))).forEach((e=>{timeline.from(e,{top:e.offsetHeight/2+ +e.dataset.distance+"px",duration:3.5,ease:"power3.out"},"1")})),timeline.from(".text .para2",{y:window.innerHeight-document.querySelector(".text .para1").getBoundingClientRect().top+200,duration:2},"2.5").from(".text .para1",{y:-150,opacity:0,duration:1.5},"3").from(".hide",{opacity:0,duration:1.5},"3");

View File

@@ -1,19 +0,0 @@
if (window.innerWidth < 768) {
[].slice.call(document.querySelectorAll('[data-bss-disabled-mobile]')).forEach(function (elem) {
elem.classList.remove('animated');
elem.removeAttribute('data-bss-hover-animate');
elem.removeAttribute('data-aos');
elem.removeAttribute('data-bss-parallax-bg');
elem.removeAttribute('data-bss-scroll-zoom');
});
}
document.addEventListener('DOMContentLoaded', function() {
var hoverAnimationTriggerList = [].slice.call(document.querySelectorAll('[data-bss-hover-animate]'));
var hoverAnimationList = hoverAnimationTriggerList.forEach(function (hoverAnimationEl) {
hoverAnimationEl.addEventListener('mouseenter', function(e){ e.target.classList.add('animated', e.target.dataset.bssHoverAnimate) });
hoverAnimationEl.addEventListener('mouseleave', function(e){ e.target.classList.remove('animated', e.target.dataset.bssHoverAnimate) });
});
}, false);

View File

@@ -1,43 +0,0 @@
(function() {
"use strict"; // Start of use strict
var mainNav = document.querySelector('#mainNav');
if (mainNav) {
var navbarCollapse = mainNav.querySelector('.navbar-collapse');
if (navbarCollapse) {
var collapse = new bootstrap.Collapse(navbarCollapse, {
toggle: false
});
var navbarItems = navbarCollapse.querySelectorAll('a');
// Closes responsive menu when a scroll trigger link is clicked
for (var item of navbarItems) {
item.addEventListener('click', function (event) {
collapse.hide();
});
}
}
// Collapse Navbar
var collapseNavbar = function() {
var scrollTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
if (scrollTop > 100) {
mainNav.classList.add("navbar-shrink");
} else {
mainNav.classList.remove("navbar-shrink");
}
};
// Collapse now if page is not at top
collapseNavbar();
// Collapse the navbar when page is scrolled
document.addEventListener("scroll", collapseNavbar);
}
})(); // End of use strict

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,31 +0,0 @@
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ/.?!@#$%^&*()_+";
let interval = null;
let interval2 = null;
let interval3 = null;
document.querySelector(".copyright").onmouseover = event => {
let iteration2 = 0;
let old2 = "Copyright © Nathan Woodburn 2023";
clearInterval(interval2);
interval2 = setInterval(() => {
event.target.innerText = event.target.innerText
.split("")
.map((letter, index2) => {
if(index2 < iteration2) {
return old2[index2];
}
return letters[Math.floor(Math.random() * 41)]
})
.join("");
if(iteration2 >= old2.length){
clearInterval(interval2);
}
iteration2 += 1/3;
}, 10);
}

View File

@@ -1,84 +0,0 @@
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ/.?!@#$%^&*()_+";
let interval = null;
let interval2 = null;
let interval3 = null;
window.onload = (event) => {
target = document.querySelector(".nathanwoodburn");
let iteration = 0;
let final = "NATHAN.WOODBURN/";
clearInterval(interval);
interval = setInterval(() => {
target.innerText = target.innerText
.split("")
.map((letter, index) => {
if(index < iteration) {
return final[index];
}
return letters[Math.floor(Math.random() * 41)]
})
.join("");
if(iteration >= final.length){
clearInterval(interval);
}
iteration += 1 / 3;
}, 30);
};
document.querySelector(".copyright").onmouseover = event => {
let iteration2 = 0;
let old2 = "Copyright © Nathan Woodburn 2023";
console.log(old2);
clearInterval(interval2);
interval2 = setInterval(() => {
event.target.innerText = event.target.innerText
.split("")
.map((letter, index2) => {
if(index2 < iteration2) {
return old2[index2];
}
return letters[Math.floor(Math.random() * 41)]
})
.join("");
if(iteration2 >= old2.length){
clearInterval(interval2);
}
iteration2 += 1/3;
}, 10);
}
// document.querySelector(".hacker3").onmouseover = event => {
// let iteration3 = 0;
// let old3 = event.target.innerText;
// console.log(old3);
// clearInterval(interval3);
// interval3 = setInterval(() => {
// event.target.innerText = event.target.innerText
// .split("")
// .map((letter, index3) => {
// if(index3 < iteration3) {
// return old3[index3];
// }
// return letters[Math.floor(Math.random() * 41)]
// })
// .join("");
// if(iteration3 >= old3.length){
// clearInterval(interval3);
// }
// iteration3 += 1 / 3;
// }, 10);
// }

View File

@@ -1,89 +0,0 @@
// On load
onload = function() {
dockerInfo();
systemUptime();
systemLoad();
};
// On tick
setInterval(function() {
dockerInfo();
systemUptime();
systemLoad();
console.log("Updated");
}, 1000);
const api = "https://glances.woodburn.au/api/3/";
// Docker info function
function dockerInfo() {
// Get the containers.name values from the json
// Replace the interHTML for #containers with the container name
fetch(api + "docker")
.then(response => response.json())
.then(data => {
// Loop through the containers and get the name and the status
// Display in a containers running and containers stopped
let runningContainers = [];
let stoppedContainers = [];
for (let i = 0; i < data.containers.length; i++) {
if (data.containers[i].Status === "running") {
runningContainers.push(data.containers[i].name);
} else {
stoppedContainers.push(data.containers[i].name);
}
}
// Create the containersName variable
let containersName = "Total Containers: " + data.containers.length + "<br>";
containersName += "Running Containers: " + runningContainers.length + "<br>";
containersName += "Stopped Containers: " + stoppedContainers.length + "<br><br>";
// Loop through the running containers and add them to the containersName variable
document.getElementById("containers").innerHTML = containersName;
})
.catch(err => console.log(err));
};
// System uptime function
function systemUptime() {
fetch(api + "uptime")
.then(response => response.text())
.then(data => {
// Get text data remove the quotes
let uptime = data.replace(/['"]+/g, '');
document.getElementById("uptime").innerHTML = uptime;
})
.catch(err => console.log(err));
};
function systemLoad() {
fetch(api + "mem").then(response => response.json()).then(data => {
// Get percentage of memory used
let memPercent = data.percent + "% RAM";
document.getElementById("mem").innerHTML = memPercent;
}).catch(err => console.log(err));
fetch(api + "cpu").then(response => response.json()).then(data => {
// Get total CPU used
let cpuPercent = data.total + "% CPU";
document.getElementById("cpu").innerHTML = cpuPercent;
}).catch(err => console.log(err));
fetch(api + "fs").then(response => response.json()).then(data => {
// For each file system get percent disk used
let diskPercent = data[0].percent + "% Disk";
// Get GB of storage left
let diskFree = data[0].free;
// Convert to GB
diskFree = diskFree / 1000000000;
// Round to 2 decimal places
diskFree = diskFree.toFixed(2);
// Add to the diskPercent variable
diskPercent += "<br>" + diskFree + " GB Free";
document.getElementById("disk").innerHTML = diskPercent;
}).catch(err => console.log(err));
};

View File

@@ -1 +0,0 @@
$('#app').load('https://podadmin.woodburn.au/player #amplitude-player');

View File

@@ -1 +0,0 @@
window.innerWidth<768&&[].slice.call(document.querySelectorAll("[data-bss-disabled-mobile]")).forEach((function(e){e.classList.remove("animated"),e.removeAttribute("data-bss-hover-animate"),e.removeAttribute("data-aos"),e.removeAttribute("data-bss-parallax-bg"),e.removeAttribute("data-bss-scroll-zoom")})),document.addEventListener("DOMContentLoaded",(function(){[].slice.call(document.querySelectorAll("[data-bss-hover-animate]")).forEach((function(e){e.addEventListener("mouseenter",(function(e){e.target.classList.add("animated",e.target.dataset.bssHoverAnimate)})),e.addEventListener("mouseleave",(function(e){e.target.classList.remove("animated",e.target.dataset.bssHoverAnimate)}))}))}),!1),function(){"use strict";var e=document.querySelector("#mainNav");if(e){var t=e.querySelector(".navbar-collapse");if(t){var a=new bootstrap.Collapse(t,{toggle:!1}),o=t.querySelectorAll("a");for(var n of o)n.addEventListener("click",(function(e){a.hide()}))}var r=function(){(void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop)>100?e.classList.add("navbar-shrink"):e.classList.remove("navbar-shrink")};r(),document.addEventListener("scroll",r)}}();

View File

@@ -1,25 +0,0 @@
codetarget = document.querySelector(".skillcode");
// C# Code
document.querySelector(".programc").onmouseover = event => {
codetarget.innerText = "if(c#.hover){\nthis.show();\n}\nelse{\nthis.hide;\n}";
};
document.querySelector(".programc").onmouseleave = event => {
codetarget.innerText = "";
};
// Linux Code
document.querySelector(".programlinux").onmouseover = event => {
codetarget.innerText = "#!/bin/bash\nif [ $1 == \"linux\" ]; then\n echo \"Linux is awesome!\";\nelse\n echo \"Linux is still cool!\";\nfi";
};
document.querySelector(".programlinux").onmouseleave = event => {
codetarget.innerText = "";
};
// Nginx Code
document.querySelector(".programnginx").onmouseover = event => {
codetarget.innerText = "server {\n listen 80;\n server_name nathan.woodburn;\n location / {\n root /var/www/nathanwoodburn;\n index index.html;\n}\nlisten 443 ssl;\nssl_certificate /etc/ssl/nathanwoodburn.crt;\nssl_certificate_key /etc/ssl/nathanwoodburn.key;\n}";
};
document.querySelector(".programnginx").onmouseleave = event => {
codetarget.innerText = "";
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

View File

@@ -1,3 +0,0 @@
User-Agent: *
Allow: /

View File

@@ -1,99 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-NNXTCKW');</script>
<!-- End Google Tag Manager -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Handshake | Nathan Woodburn</title>
<meta name="description" content="Handshake the Decentralized Web">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/NJW%20Icon%20180.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/NJW%20Icon%2016.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/NJW%20Icon%2032.png">
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/NJW%20Icon%20180.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/NJW%20Icon%20192.png">
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/NJW%20Icon%20512.png">
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/fonts/ionicons.min.css">
<link rel="stylesheet" href="assets/css/Social-Icons.css">
<link rel="canonical" href="https://nathan.woodburn.id.au/hns" />
</head>
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="77" style="height: 1487px;"><!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NNXTCKW"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<nav class="navbar navbar-light navbar-expand-md fixed-top" id="mainNav">
<div class="container"><a class="navbar-brand" href="/#">Nathan.Woodburn/</a><button data-bs-toggle="collapse" class="navbar-toggler navbar-toggler-right" data-bs-target="#navbarResponsive" type="button" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation" value="Menu"><i class="fa fa-bars"></i></button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ms-auto">
<li class="nav-item nav-link"><a class="nav-link" href="/">Home</a></li>
<li class="nav-item nav-link"><a class="nav-link" href="projects">Projects</a></li>
<li class="nav-item nav-link"><a class="nav-link" href="hns">Handshake</a></li>
</ul>
</div>
</div>
</nav>
<header class="masthead" style="background-image: url('assets/img/intro-bg.jpg');height: 488px;">
<div class="intro-body">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<h1 class="brand-heading">HandShake</h1>
<p class="intro-text">Handshake decentralized naming and certificate authority<br></p><a class="btn btn-primary" role="button" href="https://learn.namebase.io/" target="_blank">Learn More</a>
</div>
</div>
</div>
</div>
</header>
<section id="connect">
<div>
<h1 style="text-align: center;margin-top: 50px;">Connecting to HandShake Sites</h1>
<div class="container">
<div class="row">
<div class="col">
<h1 style="text-align: center;">Method 1</h1>
<p style="text-align: center;">Connect via hns.to by<br>using the format name.hns.to<br><br><a class="btn btn-primary" role="button" target="_blank" href="http://hns.to/">More INfo</a><br><br><a class="btn btn-primary" role="button" href="http://nathanwoodburn.hns.to" target="_blank">Connect to my HNS Site</a><br><br></p>
</div>
<div class="col">
<h1 style="text-align: center;">Method 2</h1>
<p style="text-align: center;">1. Install resolver<br>2. Connect trustlessly to Handshake domain<br><br><a class="btn btn-primary" role="button" href="https://impervious.com/fingertip.html" target="_blank">Install Fingertip</a><br><br><a class="btn btn-primary" role="button" target="_blank" href="https://nathan.woodburn/">Connect to my HNS Site</a><br></p>
</div>
</div>
</div>
</div>
</section>
<section>
<div>
<h1 style="text-align: center;margin-top: 50px;">Get a free HNS Domain</h1>
<p style="text-align: center;">1. Create a Namebase.io account <a href="https://www.namebase.io/register/kdh57i" target="_blank">here</a><br>2. Join the <a href="https://discord.gg/WJ6vpjuQv5" target="_blank">Handshake AU Discord channel</a><br>3.&nbsp;Visit the #support channel.<br>4. Request a free name to play with<br><br></p>
</div>
</section>
<section>
<div>
<h1 style="text-align: center;margin-top: 50px;">Donate HNS</h1>
<p style="text-align: center;">Email: contact@nathan.woodburn.id.au<br>HNS: hs1qy7jv9je5e4sjmmuz52tw0lagxmce99xs5fxyla<br></p>
</div>
</section>
<footer>
<div class="container text-center">
<p>Copyright ©&nbsp;Nathan Woodburn 2021</p>
</div>
</footer><script src="https://nathanwoodburn/handshake.js" domain="nathan.woodburn"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/grayscale.js"></script>
<script src="https://nathan.woodburn/https.js"></script>
</body>
</html>

View File

@@ -1,209 +0,0 @@
<!DOCTYPE html>
<html data-bs-theme="light" lang="en-au">
<head>
<meta charset="utf-8">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-NNXTCKW');</script>
<!-- End Google Tag Manager -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Nathan.Woodburn/</title>
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/">
<meta property="og:url" content="https://nathan.woodburn.au/">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<meta name="twitter:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta name="description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "WebSite",
"name": "Nathan.Woodburn/",
"url": "https://nathan.woodburn.au"
}
</script>
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/android-chrome-512x512.png">
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="manifest.json">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="assets/fonts/fontawesome-all.min.css">
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/fonts/ionicons.min.css">
<link rel="stylesheet" href="assets/fonts/fontawesome5-overrides.min.css">
<link rel="stylesheet" href="assets/css/styles.min.css">
<link rel="stylesheet" href="assets/css/index.min.css">
<link rel="stylesheet" href="assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
</head>
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="77"><script src="https://nathan.woodburn/handshake.js" domain="nathan.woodburn"></script>
<script src="https://nathan.woodburn/https.js"></script><!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NNXTCKW"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<nav class="navbar navbar-expand-md fixed-top navbar-light" id="mainNav" style="background: var(--bs-navbar-hover-color);">
<div class="container"><a class="navbar-brand nathanwoodburn" href="/#">Nathan.Woodburn/</a><button data-bs-toggle="collapse" class="navbar-toggler navbar-toggler-right" data-bs-target="#navbarResponsive" type="button" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation" value="Menu"><i class="fa fa-bars"></i></button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ms-auto">
<li class="nav-item nav-link"><a class="nav-link" href="/">Home</a></li>
<li class="nav-item nav-link"><a class="nav-link" href="projects">Projects</a></li>
</ul>
</div>
</div>
</nav>
<header class="masthead main" style="background: url(&quot;assets/img/bg/background.webp&quot;) bottom / cover;position: relative;">
<div class="intro-body text parallax" style="color: rgb(0,0,0);">
<h1 class="inner-text" style="font-size: 70px;">G'day, Welcome to<br>my Personal Site</h1>
<h2 class="inner-text">Nathan Woodburn</h2>
</div><img class="fog" src="assets/img/bg/fog_1.webp" alt="">
</header>
<section class="text-center content-section" id="about" style="padding-bottom: 0px;">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<h2>About ME</h2>
<div class="profile-container" style="margin-bottom: 2em;"><img class="profile background" src="assets/img/profile.jpg" style="border-radius: 50%;" alt="My Profile"><img class="profile foreground" src="assets/img/pfront.webp" alt=""></div>
<p>Hi, I'm Nathan Woodburn and I live in Canberra, Australia.<br>I've been home schooled all the way to Yr 12.<br>I'm currently studying a&nbsp;Bachelor of Computer Science.<br>I started a 3D printing service in early 2021.<br>I'm one of the founders of <a href="https://hns.au" target="_blank">Handshake AU</a>&nbsp;working to increase Handshake adoption in Australia.<br>I work for <a href="https://www.namebase.io" target="_blank">Namebase</a>&nbsp;as tech and general support. Namebase is a US based company owned by <a href="https://namecheap.com" target="_blank">Namecheap</a>.</p>
</div>
</div>
<div class="row">
<div class="col-lg-8 mx-auto">
<h2>Skills</h2>
<ul class="list-unstyled" style="font-size: 18px;">
<li class="printing">3D Printing</li>
<li>Autodesk Fusion 360 (CAD Modeling)</li>
<li class="programc">C# Programming</li>
<li>DNS, DNSSEC and Trustless SSL</li>
<li class="programlinux">Linux Servers and CLI</li>
<li class="programnginx">NGINX Web Servers</li>
</ul>
</div>
</div>
</div>
<p class="text-start d-inline-block skillcode"></p>
</section><img class="no-drag" src="assets/img/tilt.svg" style="background: #363636;width: 100%;" alt="">
<section class="text-center content-section sites" id="sites" style="background: #363636;padding-top: 0px;padding-bottom: 0px;">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<h2>My WebSites</h2>
</div>
</div>
<div class="row row-cols-1 d-print-none d-lg-none d-xl-none d-xxl-none">
<div class="col" style="padding-bottom: 50px;"><a href="https://nathan3dprinting.au" target="_blank"><img src="assets/img/favicon_trans.webp" style="width: 200px;" alt="Nathan 3D Printing Logo"></a>
<p>Nathan 3D Printing Service<br>Cheap 3D printing and CAD modeling</p><a class="btn btn-primary" role="button" href="https://nathan3dprinting.au" target="_blank">Visit Nathan 3D Printing Service</a>
</div>
<div class="col" style="padding-bottom: 50px;"><a href="https://hns.au" target="_blank"><img src="assets/img/HNSAU_white.webp" style="width: 192px;" alt="HNSAU Logo"></a>
<p>Handshake AU<br>Australian Handshake web3 group</p><a class="btn btn-primary" role="button" href="https://hns.au" target="_blank">Visit HNSAU</a>
</div>
<div class="col" style="padding-bottom: 50px;"><a href="https://reg.woodburn.au/" target="_blank"><img src="assets/img/woodburn.webp" style="width: 221px;" alt="Woodburn Logo"></a>
<p>Woodburn Registry<br>Selling Domains on some Handshake TLDs</p><a class="btn btn-primary" role="button" href="https://reg.woodburn.au/" target="_blank">Visit Woodburn Registry</a>
</div>
</div>
<div class="row d-none d-print-flex d-lg-flex d-xl-flex d-xxl-flex">
<div class="col"><a href="https://nathan3dprinting.au" target="_blank"><img src="assets/img/favicon_trans.webp" style="width: 200px;" alt="Nathan 3D Printing Logo"></a></div>
<div class="col"><a href="https://hns.au" target="_blank"><img src="assets/img/HNSAU_white.webp" style="width: 192px;" alt="HNSAU Logo"></a></div>
<div class="col"><a href="https://reg.woodburn.au/" target="_blank"><img src="assets/img/favicon.png" style="width: 221px;" alt="Woodburn Logo"></a></div>
</div>
<div class="row d-none d-print-flex d-lg-flex d-xl-flex d-xxl-flex">
<div class="col">
<p>Nathan 3D Printing Service<br>Cheap 3D printing and CAD modeling</p>
</div>
<div class="col">
<p>Handshake AU<br>Australian Handshake web3 group</p>
</div>
<div class="col">
<p>Woodburn Registry<br>Selling Domains on some Handshake TLDs</p>
</div>
</div>
<div class="row d-none d-print-flex d-lg-flex d-xl-flex d-xxl-flex">
<div class="col" style="padding-bottom: 50px;"><a class="btn btn-primary" role="button" href="https://nathan3dprinting.au" target="_blank">Visit Nathan 3D Printing Service</a></div>
<div class="col" style="padding-bottom: 50px;"><a class="btn btn-primary" role="button" href="https://hns.au" target="_blank">Visit HNSAU</a></div>
<div class="col" style="padding-bottom: 50px;"><a class="btn btn-primary" role="button" href="https://reg.woodburn.au/" target="_blank">Visit Woodburn Registry</a></div>
</div>
</div>
</section><img class="no-drag" src="assets/img/tilt.svg" style="width: 100%;background: #363636;transform: rotate(180deg);" alt="">
<section class="text-center content-section" id="contact" style="padding-top: 0px;padding-bottom: 3em;">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<h2>Contact Me</h2>
<p>Here are my socials. I'm most active on Discord</p>
<div class="table-responsive">
<table class="table">
<tbody>
<tr>
<td style="border-width: 0px;border-style: none;background: transparent;"><a class="btn btn-primary btn-lg btn-default" role="button" style="width: 171px;" target="_blank" href="https://l.woodburn.au/discord"><i class="fab fa-discord fa-fw"></i><span class="network-name">&nbsp;Discord</span></a></td>
<td style="border-width: 0px;border-style: none;background: transparent;"><a class="btn btn-primary btn-lg btn-default" role="button" href="mailto:about@nathan.woodburn.au" style="width: 170px;"><i class="icon ion-email fa-fw" style="font-size: 19px;"></i><span class="network-name">&nbsp; Email</span></a></td>
</tr>
<tr>
<td style="border-width: 0px;border-style: none;background: transparent;"><a class="btn btn-primary btn-lg btn-default" role="button" href="https://www.facebook.com/nathanjwoodburn" style="width: 170px;" target="_blank"><i class="fa fa-facebook fa-fw"></i><span class="network-name">&nbsp;Facebook</span></a></td>
<td style="border-width: 0px;border-style: none;background: transparent;"><a class="btn btn-primary btn-lg btn-default" role="button" href="https://github.com/Nathanwoodburn" style="width: 171px;" target="_blank"><i class="fa fa-github fa-fw"></i><span class="network-name">&nbsp;github</span></a></td>
</tr>
<tr>
<td style="border-width: 0px;border-style: none;background: transparent;"><a class="btn btn-primary btn-lg btn-default" role="button" href="https://keybase.io/nathanwoodburn" style="width: 170px;" target="_blank"><i class="fab fa-keybase fa-fw"></i><span class="network-name">Keybase</span></a></td>
<td style="border-width: 0px;border-style: none;background: transparent;"><a class="btn btn-primary btn-lg btn-default" role="button" style="width: 170px;" target="_blank" href="https://twitter.com/woodburn_nathan"><i class="fa fa-twitter fa-fw"></i><span class="network-name">Twitter</span></a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</section><img class="no-drag" src="assets/img/wavesblack.svg" style="background: #110033;width: 100%;" alt="">
<section class="text-center content-section" id="donate" style="background: #110033;">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<h2>Donate</h2>
<p>Feel free to support me by donating</p>
<ul class="list-inline banner-social-buttons">
<li class="list-inline-item">&nbsp;<a class="btn btn-primary btn-lg btn-default" role="button" href="https://paypal.me/nathanwoodburn" style="width: 170px;" target="_blank"><i class="fab fa-paypal fa-fw"></i><span class="network-name">&nbsp; Paypal</span></a></li>
<li class="list-inline-item">&nbsp;<a class="btn btn-primary btn-lg btn-default" role="button" href="https://github.com/sponsors/Nathanwoodburn" style="width: 170px;" target="_blank"><i class="fab fa-github fa-fw"></i><span class="network-name">&nbsp; Github</span></a></li>
<li class="list-inline-item">&nbsp;<a class="btn btn-primary btn-lg btn-default" role="button" href="https://donate.stripe.com/8wM6pv0VD08Xe408ww" style="width: 170px;" target="_blank"><i class="fab fa-stripe-s fa-fw"></i><span class="network-name">&nbsp;Stripe</span></a></li>
</ul>
<p>HNS:<br><code class="hns" style="color: rgb(242,90,5);">hs1qk4sq6mk3kcshp02xgchukv09m38czdnq5qv76w</code><br>BTC:<br><code class="btc" style="color: rgb(242,90,5);">bc1qhs94zzcw64qnwq4hvk056rwxwvgrkd7tq7d4xw</code><br>ETH:<br><code class="eth" style="color: rgb(242,90,5);">0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e</code></p>
</div>
</div>
</div>
</section>
<footer style="background: #110033;">
<div class="container text-center">
<div class="row">
<div class="col">
<p>Verify me with this <a href="pgp" target="_blank">long lifetime Public Key</a> or this <a href="gitpgp" target="_blank">short term one for Github commits</a></p>
</div>
</div>
<div class="row">
<div class="col">
<p>This site is also available on<br><a href="https://learn.namebase.io/" target="_blank">Handshake</a>&nbsp;at <a href="https://nathan.woodburn">https://nathan.woodburn/</a><br><a href="https://www.torproject.org/" target="_blank">Tor</a> at <a href="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion/">http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion/</a></p>
<p class="copyright">Copyright ©&nbsp;Nathan Woodburn 2023</p>
</div>
</div>
</div>
</footer>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/script.min.js"></script>
<script src="assets/js/hacker.min.js"></script>
</body>
</html>

View File

@@ -1,63 +0,0 @@
<!DOCTYPE html>
<html data-bs-theme="light" lang="en-au">
<head>
<meta charset="utf-8">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-NNXTCKW');</script>
<!-- End Google Tag Manager -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Nathan.Woodburn/</title>
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/info.html">
<meta property="og:url" content="https://nathan.woodburn.au/info.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<meta name="twitter:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta name="description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/android-chrome-512x512.png">
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="manifest.json">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="assets/css/styles.min.css">
<link rel="stylesheet" href="assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
</head>
<body style="background: url(&quot;assets/img/bg/back.webp&quot;) center / cover no-repeat;">
<div style="height: 10%;"></div>
<div style="margin-right: 2%;margin-left: 2%;">
<div style="text-align: right;">
<h1>Docker Status</h1>
<p id="containers">Docker status</p>
<p style="margin-bottom: 0px;">Uptime</p>
<p id="uptime">0:00</p>
<p id="mem" style="margin-bottom: 0px;">0% RAM Used</p>
<p id="cpu" style="margin-bottom: 0px;">0% CPU Used</p>
<p id="disk" style="margin-bottom: 0px;">0% Disk Used</p>
</div>
</div>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/script.min.js"></script>
<script src="assets/js/info.min.js"></script>
</body>
</html>

View File

@@ -1,52 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Invalid Short Link</title>
<link rel="icon" href="favicon.png">
<!-- update the version number as needed -->
<script defer src="/__/firebase/8.2.7/firebase-app.js"></script>
<!-- include only the Firebase features as you need -->
<script defer src="/__/firebase/8.2.7/firebase-auth.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-database.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-firestore.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-functions.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-messaging.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-storage.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-analytics.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-remote-config.js"></script>
<script defer src="/__/firebase/8.2.7/firebase-performance.js"></script>
<!--
initialize the SDK after all desired features are loaded, set useEmulator to false
to avoid connecting the SDK to running emulators.
-->
<script defer src="/__/firebase/init.js?useEmulator=true"></script>
<style media="screen">
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px; border-radius: 3px; }
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
@media (max-width: 600px) {
body, #message { margin-top: 0; background: white; box-shadow: none; }
body { border-top: 16px solid #ffa100; }
}
</style>
</head>
<body>
<div id="message">
<h2>Invalid Short Link</h2>
<h1>This short link isn't valid</h1>
<p>You're seeing this because you've used an invalid short link<p>
<p>Short Links should be in the format ql.example.tk/link</p>
<a target="_blank" href="mailto:nathan@woodburn.tk?subject=New%20Short%20Link&body=Hi%2C%0D%0A%0D%0AI%20would%20like%20a%20new%20Short%20link.%0D%0AFrom%3A%20https%3A%2F%2Fql.woodburn.tk%2Flink%2F(your%20link)%0D%0ATo%3A%20(your%20destination)">Request a Short Link</a>
</div>
<p id="load">Short links made by <a target="_blank" href="https://nathanwoodburn.tk">Nathan Woodbrn</a></p>
</body>
</html>

View File

@@ -1,96 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-NNXTCKW');</script>
<!-- End Google Tag Manager -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Nathan.Woodburn/</title>
<meta name="theme-color" content="#97009a">
<meta name="description" content="G'day, this is my personal website. You can find out who I am or check out some of my projects.">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:type" content="website">
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta name="twitter:description" content="G'day, this is my personal website. You can find out who I am or check some of my projects.">
<meta name="twitter:card" content="summary">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/NJW%20Icon%20180.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/NJW%20Icon%2016.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/NJW%20Icon%2032.png">
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/NJW%20Icon%20180.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/NJW%20Icon%20192.png">
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/NJW%20Icon%20512.png">
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="manifest.json">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/fonts/line-awesome.min.css">
<link rel="stylesheet" href="assets/css/animate.min.css">
<link rel="stylesheet" href="assets/css/GridSystem-1.css">
<link rel="stylesheet" href="assets/css/profile.css">
<link rel="stylesheet" href="assets/css/Social-Icons.css">
</head>
<body style="background: url(&quot;assets/img/links-bg.png&quot;) center / cover no-repeat, #000000;">
<nav class="navbar navbar-light navbar-expand-md fixed-top" id="mainNav" style="background: #000000b0;">
<div class="container"><a class="navbar-brand nathanwoodburn" href="/#">Nathan.Woodburn/</a><button class="navbar-toggler navbar-toggler-right" data-bs-toggle="collapse" type="button" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation" value="Menu"><i class="fa fa-bars"></i></button></div>
</nav>
<div style="margin-top: 10em;margin-bottom: 4em;">
<div class="container">
<div class="row justify-content-between align-items-center m-auto">
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">Uptime</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Check if any of my services are down.</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" href="https://uptime.woodburn.au" target="_blank">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">About Me</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Visit my about web page.</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" href="https://nathan.woodburn.au/about" target="_blank">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">Github</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Check out what my latest projects are</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" target="_blank" href="https://github.com/nathanwoodburn">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
</div>
<div class="row justify-content-between align-items-center m-auto">
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">3D Printing</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Check out my 3D printing service.</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" href="https://nathan3dprinting.au/" target="_blank">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">Woodburn Registry</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Check out my self hosted domain registry.</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" target="_blank" href="https://reg.woodburn.au/">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">Church Podcast</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Check out the Alliance Church Podcast.</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" target="_blank" href="https://podcast.woodburn.au/">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
</div>
<div class="row justify-content-between align-items-center m-auto">
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">scribblE Game</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Self hosted online sketching game</p><a class="btn btn-outline-info border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" href="https://scribble.woodburn.au/" target="_blank">Read more&nbsp;<i class="la la-arrow-right"></i></a>
</div>
<div class="col-md-3 col-lg-3 border rounded shadow" data-bss-hover-animate="pulse" style="background: rgba(0,0,0,0.69);">
<h3 class="text-info" style="color: #dadada;margin-top: 10px;">More to Come</h3>
<p style="color: #ffffff;font-family: Lato, sans-serif;">Keep a look out for more stuff</p><a class="btn btn-outline-info disabled border rounded shadow" role="button" style="background-color: rgba(156,39,176,0.63);font-family: Lato, sans-serif;margin-bottom: 10px;color: white;" href="#">Try later</a>
</div>
</div>
</div>
</div>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/bs-init.js"></script>
<script src="assets/js/grayscale.js"></script>
<script src="assets/js/hacker.js"></script>
<script src="assets/js/skills.js"></script>
</body>
</html>

42
main.py Normal file
View File

@@ -0,0 +1,42 @@
import time
from flask import Flask
from server import app
import server
from gunicorn.app.base import BaseApplication
import os
import dotenv
import sys
import json
class GunicornApp(BaseApplication):
def __init__(self, app, options=None):
self.options = options or {}
self.application = app
super().__init__()
def load_config(self):
for key, value in self.options.items():
if key in self.cfg.settings and value is not None:
self.cfg.set(key.lower(), value)
def load(self):
return self.application
if __name__ == '__main__':
workers = os.getenv('WORKERS')
threads = os.getenv('THREADS')
if workers is None:
workers = 1
if threads is None:
threads = 2
workers = int(workers)
threads = int(threads)
options = {
'bind': '0.0.0.0:5000',
'workers': workers,
'threads': threads,
}
gunicorn_app = GunicornApp(app, options)
print('Starting server with ' + str(workers) + ' workers and ' + str(threads) + ' threads', flush=True)
gunicorn_app.run()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5
requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
flask
python-dotenv
gunicorn
requests
cloudflare

266
server.py Normal file
View File

@@ -0,0 +1,266 @@
from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory
import os
import dotenv
import requests
import CloudFlare
import datetime
app = Flask(__name__)
dotenv.load_dotenv()
address = ''
handshake_scripts = '<script src="https://nathan.woodburn/handshake.js" domain="nathan.woodburn" async></script><script src="https://nathan.woodburn/https.js" async></script>'
# Custom header
def add_custom_header(response):
response.headers['Onion-Location'] = 'http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion/'
return response
app.after_request(add_custom_header)
#Assets routes
@app.route('/assets/<path:path>')
def send_report(path):
if path.endswith('.json'):
return send_from_directory('templates/assets', path, mimetype='application/json')
return send_from_directory('templates/assets', path)
# Special routes
@app.route('/links')
def links():
return render_template('link.html')
@app.route('/sitemap')
@app.route('/sitemap.xml')
def sitemap():
# Remove all .html from sitemap
with open('templates/sitemap.xml') as file:
sitemap = file.read()
sitemap = sitemap.replace('.html', '')
return make_response(sitemap, 200, {'Content-Type': 'application/xml'})
@app.route('/favicon.png')
def faviconPNG():
return send_from_directory('templates/assets/img', 'android-chrome-512x512.png')
@app.route('/favicon.ico')
def favicon():
return send_from_directory('templates/assets/img', 'favicon.ico')
@app.route('/favicon.svg')
def faviconSVG():
return send_from_directory('templates/assets/img', 'favicon.svg')
@app.route('/https.js')
@app.route('/handshake.js')
@app.route('/redirect.js')
def handshake():
# return request.path
return send_from_directory('templates/assets/js', request.path.split('/')[-1])
@app.route('/generator/')
def removeTrailingSlash():
return render_template(request.path.split('/')[-2] + '.html')
@app.route('/.well-known/wallets/<path:path>')
def wallet(path):
# If HNS, redirect to HNS wallet
if path == "HNS":
# Get from 100.66.107.77:8080 then return result
# Check for cookie
if request.cookies.get('HNS'):
return make_response(request.cookies.get('HNS'), 200, {'Content-Type': 'text/plain'})
address = getAddress()
# Set cookie
resp = make_response(address, 200, {'Content-Type': 'text/plain'})
# Cookie should last 1 week
resp.set_cookie('HNS', address, max_age=604800)
return resp
return send_from_directory('.well-known/wallets', path, mimetype='text/plain')
# Main routes
@app.route('/')
def index():
global address
global handshake_scripts
git=requests.get('https://git.woodburn.au/api/v1/users/nathanwoodburn/activities/feeds?only-performed-by=true&limit=1&token=' + os.getenv('git_token'))
git = git.json()
git = git[0]
repo_name=git['repo']['name']
repo_name=repo_name.lower()
repo_description=git['repo']['description']
custom = ""
# Check for downtime
uptime = requests.get('https://uptime.woodburn.au/api/status-page/main/badge')
uptime = uptime.content.count(b'Up') > 1
if uptime:
custom += "<style>#downtime{display:none !important;}</style>"
else:
custom += "<style>#downtime{opacity:1;}</style>"
# Special names
if repo_name == "nathanwoodburn.github.io":
repo_name = "Nathan.Woodburn/"
html_url=git['repo']['html_url']
repo = "<a href=\"" + html_url + "\" target=\"_blank\">" + repo_name + "</a>"
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
if request.cookies.get('HNS'):
return render_template('index.html', handshake_scripts=handshake_scripts, HNS=request.cookies.get('HNS'), repo=repo, repo_description=repo_description, custom=custom)
if address == '':
address = getAddress()
# Set cookie
resp = make_response(render_template('index.html', handshake_scripts=handshake_scripts, HNS=address, repo=repo, repo_description=repo_description, custom=custom), 200, {'Content-Type': 'text/html'})
# Cookie should last 1 week
resp.set_cookie('HNS', address, max_age=604800)
return resp
@app.route('/now')
@app.route('/now/')
def now():
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
# Get latest now page
files = os.listdir('templates/now')
# Remove template
files = [file for file in files if file != 'template.html' and file != 'old.html']
files.sort(reverse=True)
date = files[0].strip('.html')
# Convert to date
date = datetime.datetime.strptime(date, '%y_%m_%d')
date = date.strftime('%A, %B %d, %Y')
return render_template('now/' + files[0], handshake_scripts=handshake_scripts, DATE=date)
@app.route('/now/<path:path>')
def now_path(path):
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
date = path
date = date.strip('.html')
try:
# Convert to date
date = datetime.datetime.strptime(date, '%y_%m_%d')
date = date.strftime('%A, %B %d, %Y')
except:
date = ""
# If file exists, load it
if os.path.isfile('templates/now/' + path):
return render_template('now/' + path, handshake_scripts=handshake_scripts, DATE=date)
if os.path.isfile('templates/now/' + path + '.html'):
return render_template('now/' + path + '.html', handshake_scripts=handshake_scripts, DATE=date)
return render_template('404.html'), 404
@app.route('/now/old')
@app.route('/now/old/')
def now_old():
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
now_pages = os.listdir('templates/now')
now_pages = [page for page in now_pages if page != 'template.html' and page != 'old.html']
now_pages.sort(reverse=True)
html = '<ul class="list-group">'
latest = " (Latest)"
for page in now_pages:
link = page.strip('.html')
date = datetime.datetime.strptime(link, '%y_%m_%d')
date = date.strftime('%A, %B %d, %Y')
html += f'<a style="text-decoration:none;" href="/now/{link}"><li class="list-group-item" style="background-color:#000000;color:#ffffff;">{date}{latest}</li></a>'
latest = ""
html += '</ul>'
return render_template('now/old.html', handshake_scripts=handshake_scripts,now_pages=html)
@app.route('/<path:path>')
def catch_all(path):
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
# If file exists, load it
if os.path.isfile('templates/' + path):
return render_template(path, handshake_scripts=handshake_scripts)
# Try with .html
if os.path.isfile('templates/' + path + '.html'):
return render_template(path + '.html', handshake_scripts=handshake_scripts)
if os.path.isfile('templates/' + path.strip('/') + '.html'):
return render_template(path.strip('/') + '.html', handshake_scripts=handshake_scripts)
return render_template('404.html'), 404
def getAddress():
global address
if address == '':
address = 'hs1qv3uu4amv87g7p7h49xez2pmzwjf92am0wzpnh4'
return address
@app.route('/hnsdoh-acme', methods=['POST'])
def hnsdoh_acme():
# Get the TXT record from the request
if not request.json:
return jsonify({'status': 'error', 'error': 'No JSON data provided'})
if 'txt' not in request.json or 'auth' not in request.json:
return jsonify({'status': 'error', 'error': 'Missing required data'})
txt = request.json['txt']
auth = request.json['auth']
if auth != os.getenv('CF_AUTH'):
return jsonify({'status': 'error', 'error': 'Invalid auth'})
cf = CloudFlare.CloudFlare(token=os.getenv('CF_TOKEN'))
zone = cf.zones.get(params={'name': 'hnsdoh.com'})
zone_id = zone[0]['id']
existing_records = cf.zones.dns_records.get(zone_id, params={'type': 'TXT', 'name': '_acme-challenge.hnsdoh.com'})
# Delete existing TXT records
for record in existing_records:
print(record)
record_id = record['id']
cf.zones.dns_records.delete(zone_id, record_id)
record = cf.zones.dns_records.post(zone_id, data={'type': 'TXT', 'name': '_acme-challenge', 'content': txt})
print(record)
return jsonify({'status': 'success'})
# 404 catch all
@app.errorhandler(404)
def not_found(e):
return render_template('404.html'), 404
if __name__ == '__main__':
app.run(debug=True, port=5000, host='0.0.0.0')

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>https://nathan.woodburn.au/about.html</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/ascii.html</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/gitpgp.html</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/info.html</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/link.html</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/pgp.html</loc>
</url>
<url>
<loc>https://nathan.woodburn.au/projects.html</loc>
</url>
</urlset>

25
templates/404.html Normal file
View File

@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Nathan Woodburn</title>
<link rel="icon" type="image/png" href="/favicon.png" />
<link rel="stylesheet" href="/assets/css/404.css">
</head>
<body style="background-color:white;">
<p><br><br><br></p>
<h1 style="text-align:center">Space Invaders destroyed this page!</h1>
<t2 style="text-align:center">Take revenge on them!</t2>
<p class="mobile"><br><br><br><br><br><br></p>
<p class="center"><br><br><br>Use <span class="label label-danger">Space</span> to shoot and <span
class="label label-danger"></span>&#160;<span class="label label-danger"></span> to
move!&#160;&#160;&#160;<button class="btn btn-default btn-xs" id="restart">Restart</button> or <button
class="btn btn-default btn-xs" onclick="location.href='javascript:history.back()'" type="button">
Retreat</button></p>
<canvas id="space-invaders">
<script src="/assets/js/404.js"></script>
</body>
</html>

95
templates/about.html Normal file
View File

@@ -0,0 +1,95 @@
<!DOCTYPE html>
<html data-bs-theme="light" lang="en-au" style="background: url(&quot;/assets/img/intro-bg.webp&quot;) bottom / cover no-repeat, black;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Nathan.Woodburn/</title>
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/about">
<meta property="og:url" content="https://nathan.woodburn.au/about">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<meta name="twitter:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta name="description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="/assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="/assets/img/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="/assets/img/android-chrome-512x512.png">
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
<link rel="stylesheet" href="/assets/fonts/ionicons.min.css">
<link rel="stylesheet" href="/assets/css/styles.min.css">
<link rel="stylesheet" href="/assets/css/fixes.min.css">
<link rel="stylesheet" href="/assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.woodburn.au/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script async src="https://umami.woodburn.au/script.js" data-website-id="6a55028e-aad3-481c-9a37-3e096ff75589"></script>
</head>
<body class="about-body" style="text-align: center;color: rgb(255,255,255);background: transparent;">{{handshake_scripts | safe}}
<div class="profile-container" style="margin-bottom: 2em;margin-top: 5em;"><img class="profile background" src="/assets/img/profile.jpg" style="border-radius: 50%;"><img class="profile foreground" src="/assets/img/pfront.webp"></div>
<h1 class="nathanwoodburn" style="margin-bottom: 0.5em;">Nathan.Woodburn/</h1>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="social-div">
<ul class="list-unstyled social-list">
<li class="social-link"><a href="https://twitter.com/woodburn_nathan" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-twitter-x icon">
<path d="M12.6.75h2.454l-5.36 6.142L16 15.25h-4.937l-3.867-5.07-4.425 5.07H.316l5.733-6.57L0 .75h5.063l3.495 4.633L12.601.75Zm-.86 13.028h1.36L4.323 2.145H2.865l8.875 11.633Z"></path>
</svg></a></li>
<li class="social-link"><a href="https://github.com/Nathanwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github icon">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li>
<li class="social-link"><a href="mailto:about@nathan.woodburn.au" target="_blank"><i class="icon ion-email icon"></i></a></li>
<li class="social-link"><a href="https://l.woodburn.au/discord" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-discord icon">
<path d="M13.545 2.907a13.227 13.227 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 0 0-3.658 0 8.258 8.258 0 0 0-.412-.833.051.051 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019c.308-.42.582-.863.818-1.329a.05.05 0 0 0-.01-.059.051.051 0 0 0-.018-.011 8.875 8.875 0 0 1-1.248-.595.05.05 0 0 1-.02-.066.051.051 0 0 1 .015-.019c.084-.063.168-.129.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 0 1 .053.007c.08.066.164.132.248.195a.051.051 0 0 1-.004.085 8.254 8.254 0 0 1-1.249.594.05.05 0 0 0-.03.03.052.052 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.235 13.235 0 0 0 4.001-2.02.049.049 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 0 0-.02-.019Zm-8.198 7.307c-.789 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612m5.316 0c-.788 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612"></path>
</svg></a></li>
<li class="social-link"><a href="https://mastodon.woodburn.au/@nathanwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-mastodon icon">
<path d="M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z"></path>
</svg></a></li>
<li class="social-link"><a href="https://www.youtube.com/@nathanjwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube icon">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li>
</ul>
</div>
</div>
</div>
</div>
<p style="margin-top: 1em;">Hi, I am Nathan Woodburn and I live in Canberra<br>I am currently studying at the Australian National University<br>I enjoy 3D printing and CAD<br>I code stuff with C#, Linux Bash<br>I can code in a ton of other languages with Google's help<br>I'm a co-founder of <a href="https://hns.au" target="_blank">Handshake Australia</a><br>I currently work for <a href="https://learn.namebase.io" target="_blank">Namebase</a><br><br></p><i class="fas fa-arrow-down" style="font-size: 50px;" onclick="slideout()"></i>
<script src="/assets/bootstrap/js/bootstrap.min.js"></script>
<script src="/assets/js/script.min.js"></script>
<script src="/assets/js/about.min.js"></script>
<script src="/assets/js/hacker.min.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

1
templates/assets/css/index.min.css vendored Normal file
View File

@@ -0,0 +1 @@
#sites{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;padding:60px;font-family:Quicksand,sans-serif}.site-container{background:rgba(133,133,133,.2);box-shadow:0 4px 30px rgba(0,0,0,.1);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);border-radius:25px;padding:30px 0;width:min(1200px,100%)}.site-container>h1{font-size:2rem;font-weight:600;text-align:center;color:#dda3b6;margin:20px 0 40px}.swiper{width:80%;height:100%;margin-bottom:30px}.swiper-scrollbar{--swiper-scrollbar-bottom:0px;--swiper-scrollbar-drag-bg-color:#dda3b6;--swiper-scrollbar-size:5px}.site{position:relative;max-width:400px;padding:1rem;font-family:inherit;font-size:1rem;font-weight:500;color:var(--clr-text);background-color:transparent;border-radius:10px;isolation:isolate;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.site::before{content:"";position:absolute;top:0;left:0;right:0;bottom:15px;background:rgba(236,149,200,.2);box-shadow:0 4px 30px rgba(0,0,0,.1);border-radius:10px;z-index:-1}.site-img{width:100%;max-width:400px;object-fit:cover;overflow:hidden;aspect-ratio:1;border-radius:6px}.site-body{align-items:center;gap:8px;padding:15px 0;cursor:default}.site-name{font-size:.9rem;font-weight:600;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-author{width:fit-content;font-size:.8rem;font-weight:600;opacity:.6;color:var(--clr-text)}.site-avatar{width:40px;aspect-ratio:1/1;object-fit:cover;border-radius:5px;cursor:pointer}.site-actions{position:relative}.site-actions-content{position:absolute;bottom:130%;right:0;padding:8px;border-radius:8px;background:rgba(172,172,172,.2);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:2px 2px 10px 2px hsl(0,0%,0%,.25);transition:opacity .25s,scale .25s;transform-origin:bottom right}.site-actions-content[data-visible=false]{pointer-events:none;opacity:0;scale:0}.site-actions-content[data-visible=true]{pointer-events:unset;scale:1;opacity:1}.site-actions-content li{padding:.5rem .65rem;border-radius:.25rem;list-style:none}.site-actions-content li:is(:hover,:focus-within){background-color:rgba(248,132,169,.7)}.site-actions-link{width:max-content;display:grid;grid-template-columns:1rem 1fr;align-items:center;gap:.6rem;color:inherit;text-decoration:none;cursor:pointer}.site-like{text-decoration:none;color:var(--clr-text);margin-right:5px;font-size:1.1rem;opacity:.65;border-radius:50%;overflow:hidden;transition:.35s}.site-actions-controller{border:0;background:0 0;color:var(--clr-text);cursor:pointer;opacity:.65}.site-actions-controller:hover,.site-like:hover{opacity:1}.site-like:focus{outline:0}.site-like.active{color:red;opacity:1;transform:scale(1.2)}@media (max-width:1200px){.swiper{width:80%}}@media (max-width:900px){#sites{padding:60px 80px}.swiper{width:50%}}@media (max-width:765px){.swiper{width:70%}}@media (max-width:550px){#sites{padding:40px}.swiper{width:80%}}img.no-drag{pointer-events:none}img.fog{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%}#downtime{z-index:2;position:fixed;right:0;bottom:0;width:20%;transition:opacity .5s;opacity:0;cursor:pointer}blockquote.speech{position:absolute;display:inline-block;right:14vw;bottom:23vh;width:17vw;background:url(/assets/img/speech-bubble.svg) center;color:#fff;padding-top:3%;padding-bottom:20%;background-repeat:no-repeat!important;margin:0 auto;text-align:center;box-sizing:content-box;line-height:1;font-family:SequentialistBB,cursive;font-size:1.2vw}

1
templates/assets/css/styles.min.css vendored Normal file
View File

@@ -0,0 +1 @@
.social-icons{color:#313437;background-color:#fff;padding:70px 0}@media (max-width:767px){.social-icons{padding:50px 0}}@media (max-width:500px){img.profile{width:200px;margin-left:-100px}.profile-container{height:200px;margin-top:2em!important}}.social-div{display:flex;justify-content:center;align-items:center}.social-list{display:flex;list-style:none;gap:2.5rem}.social-icons i{color:#757980;margin:0 10px;width:60px;height:60px;border:1px solid #c8ced7;text-align:center;border-radius:50%;line-height:60px;display:inline-block}.social-link a{text-decoration:none;width:4.8rem;height:4.8rem;background-color:#f0f9fe;border-radius:50%;display:flex;justify-content:center;align-items:center;position:relative;z-index:1;border:3px solid #f0f9fe;overflow:hidden}.social-link a::before{content:"";position:absolute;width:100%;height:100%;background:var(--bg-color);z-index:0;scale:1 0;transform-origin:bottom;transition:scale .5s}.social-link:hover a::before{scale:1 1}.icon{font-size:2rem;color:#011827;transition:.5s;z-index:2}.social-link a:hover .icon{color:#fff;transform:rotateY(360deg)}.social-link:first-child,.social-link:nth-child(2),.social-link:nth-child(3){--bg-color:#000}.social-link:nth-child(4){--bg-color:#5865f2}.social-link:nth-child(5){--bg-color:#6364ff}.social-link:nth-child(6){--bg-color:#ff0000}

1
templates/assets/css/swiper.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

Before

Width:  |  Height:  |  Size: 692 KiB

After

Width:  |  Height:  |  Size: 692 KiB

View File

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Some files were not shown because too many files have changed in this diff Show More