Compare commits
46 Commits
master
...
12a51bbb54
| Author | SHA1 | Date | |
|---|---|---|---|
|
12a51bbb54
|
|||
|
6d47ddf89f
|
|||
|
2d56c89765
|
|||
|
21aec406df
|
|||
|
6eb6299b3a
|
|||
|
c3f2714929
|
|||
|
e98edf3de9
|
|||
|
cadece357b
|
|||
|
da42f35ff0
|
|||
|
dcb07799e3
|
|||
|
ece562caba
|
|||
|
23d44038ef
|
|||
|
31f93005b9
|
|||
|
8217a7fcd6
|
|||
|
00ac9881c3
|
|||
|
1f54a882d8
|
|||
|
7a9fb9e08b
|
|||
|
9305442c4b
|
|||
|
d67da4ad06
|
|||
|
d094784188
|
|||
|
c2cd53dc78
|
|||
|
89ce365bd0
|
|||
|
e6708dceaa
|
|||
|
2e463c626d
|
|||
|
797db5e1a9
|
|||
|
12dd3dfedc
|
|||
|
682e732643
|
|||
|
33158bdb57
|
|||
|
699e9988f2
|
|||
|
21bcb0464b
|
|||
|
6efcb43d23
|
|||
|
dcbe034d2f
|
|||
|
5f42fc3d8c
|
|||
|
92f72accf9
|
|||
|
f419e28a5a
|
|||
|
519d241b31
|
|||
|
f1febd7823
|
|||
|
9dee5c24e4
|
|||
|
20d59f7820
|
|||
|
66acd69bec
|
|||
|
f001691283
|
|||
|
607e51c481
|
|||
|
1855e18315
|
|||
|
0b6ba921ce
|
|||
|
d32dcc701b
|
|||
|
5bed9dbbc8
|
41
.gitea/workflows/build.yml
Normal 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
@@ -0,0 +1,4 @@
|
||||
|
||||
__pycache__/
|
||||
|
||||
.env
|
||||
93
403.css
@@ -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;
|
||||
}
|
||||
17
403.html
@@ -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>
|
||||
24
404.html
@@ -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> <span class="label label-danger">→</span> to move!   <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
@@ -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;
|
||||
}
|
||||
}
|
||||
53
404M.html
@@ -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
@@ -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);
|
||||
|
||||
});
|
||||
17
Dockerfile
Normal 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
|
||||
60
about.html
@@ -1,60 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en-au" style="background: url("assets/img/intro-bg.webp") 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&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&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>
|
||||
BIN
assets/WDBRN.png
|
Before Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 300 KiB |
@@ -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%;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
1742
assets/css/animate.min.css
vendored
@@ -1,11 +0,0 @@
|
||||
body.about-body {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transition: 2s;
|
||||
height: 101%;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -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%;
|
||||
}
|
||||
|
||||
1
assets/css/index.min.css
vendored
@@ -1 +0,0 @@
|
||||
img.no-drag{pointer-events:none}img.fog{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%}
|
||||
1
assets/css/parallax.min.css
vendored
@@ -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}}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
1
assets/css/styles.min.css
vendored
@@ -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}
|
||||
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 340 KiB |
|
Before Width: | Height: | Size: 13 MiB |
|
Before Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 3.5 MiB |
|
Before Width: | Height: | Size: 313 B |
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 2.7 MiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 126 KiB |
@@ -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();
|
||||
}
|
||||
}
|
||||
1
assets/js/app.min.js
vendored
@@ -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");
|
||||
@@ -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);
|
||||
@@ -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
|
||||
9
assets/js/gsap.min.js
vendored
9
assets/js/gsap.min.min.js
vendored
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
// }
|
||||
@@ -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));
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
$('#app').load('https://podadmin.woodburn.au/player #amplitude-player');
|
||||
1
assets/js/script.min.js
vendored
@@ -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)}}();
|
||||
@@ -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 = "";
|
||||
};
|
||||
BIN
assets/logo.png
|
Before Width: | Height: | Size: 336 KiB |
@@ -1,3 +0,0 @@
|
||||
User-Agent: *
|
||||
Allow: /
|
||||
|
||||
99
hns.html
@@ -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&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. 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 © 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>
|
||||
209
index.html
@@ -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&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&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("assets/img/bg/background.webp") 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 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> working to increase Handshake adoption in Australia.<br>I work for <a href="https://www.namebase.io" target="_blank">Namebase</a> 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"> 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"> 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"> 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"> 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"> <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"> Paypal</span></a></li>
|
||||
<li class="list-inline-item"> <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"> Github</span></a></li>
|
||||
<li class="list-inline-item"> <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"> 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> 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 © 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>
|
||||
63
info.html
@@ -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&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&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("assets/img/bg/back.webp") 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>
|
||||
@@ -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>
|
||||
96
links.html
@@ -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&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&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("assets/img/links-bg.png") 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 <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 <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 <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 <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 <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 <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 <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
@@ -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()
|
||||
29
proxy2.pac
5
requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
flask
|
||||
python-dotenv
|
||||
gunicorn
|
||||
requests
|
||||
cloudflare
|
||||
210
server.py
Normal file
@@ -0,0 +1,210 @@
|
||||
from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory
|
||||
import os
|
||||
import dotenv
|
||||
import requests
|
||||
import CloudFlare
|
||||
|
||||
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')
|
||||
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']
|
||||
files.sort(reverse=True)
|
||||
return render_template('now/' + files[0], handshake_scripts=handshake_scripts)
|
||||
|
||||
|
||||
@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)
|
||||
|
||||
return render_template('404.html'), 404
|
||||
|
||||
def getAddress():
|
||||
global address
|
||||
if address == '':
|
||||
address = 'hs1qv3uu4amv87g7p7h49xez2pmzwjf92am0wzpnh4'
|
||||
# address = requests.get('http://hip02-server:3000').text?
|
||||
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')
|
||||
25
templates/404.html
Normal 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> <span class="label label-danger">→</span> to
|
||||
move!   <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
@@ -0,0 +1,95 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en-au" style="background: url("/assets/img/intro-bg.webp") 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&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&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>
|
||||
1
templates/assets/css/index.min.css
vendored
Normal 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
@@ -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
|
Before Width: | Height: | Size: 692 KiB After Width: | Height: | Size: 692 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |