12 Commits

Author SHA1 Message Date
005a306fc6 fix: Update reverse proxy causing manifest breaking
All checks were successful
Build Docker / BuildImage (push) Successful in 36s
2024-06-19 21:23:52 +10:00
cb13ca0a3b feat: Add Kasper coin 2024-06-19 16:58:35 +10:00
5685830cba fix: Cleanup index variables
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2024-06-19 13:16:30 +10:00
1f9b38306c fix: Index page 2024-06-19 13:12:45 +10:00
9568cfe177 fix: Use global cache for projects list
All checks were successful
Build Docker / BuildImage (push) Successful in 31s
2024-06-19 12:50:48 +10:00
18619efe39 feat: Add recent projects to index and updated projects page
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2024-06-18 12:44:26 +10:00
719221d74f feat: Remove onion link
All checks were successful
Build Docker / BuildImage (push) Successful in 32s
2024-06-17 22:05:41 +10:00
5d95307ae2 fix: Manifest should use host automatically 2024-06-17 22:04:12 +10:00
1b017d919a feat: Don't show loading screen to redirect from icann to hns
All checks were successful
Build Docker / BuildImage (push) Successful in 39s
2024-06-17 21:51:32 +10:00
ce5ec9aace feat: Test for referrers
All checks were successful
Build Docker / BuildImage (push) Successful in 56s
2024-06-17 21:47:44 +10:00
668dc8683b Merge branch 'develop'
All checks were successful
Build Docker / BuildImage (push) Successful in 32s
2024-06-17 21:30:33 +10:00
26c91c030a Merge branch 'release/v1.0' into main
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-03 14:15:55 +11:00
29 changed files with 208 additions and 167 deletions

View File

@@ -23,5 +23,6 @@
"TON": "Toncoin (TON)",
"OP": "Optimism (OP)",
"IAA": "IRIS (IAA)",
"NEAR": "NEAR Protocol (NEAR)"
"NEAR": "NEAR Protocol (NEAR)",
"KAS": "Kasper (KAS)"
}

1
.well-known/wallets/KAS Normal file
View File

@@ -0,0 +1 @@
kaspa:qzl7av7gq5j594pcs2gn6zf2xadpmhdm90nygjstvte0n6gt9f4fgx0w2dhm8

35
addCoin.py Normal file
View File

@@ -0,0 +1,35 @@
import os
import json
if not os.path.exists('.well-known/wallets'):
os.makedirs('.well-known/wallets')
def addCoin(token:str, name:str, address:str):
with open('.well-known/wallets/'+token.upper(),'w') as f:
f.write(address)
with open('.well-known/wallets/.coins','r') as f:
coins = json.load(f)
coins[token.upper()] = f'{name} ({token.upper()})'
with open('.well-known/wallets/.coins','w') as f:
f.write(json.dumps(coins, indent=4))
def addDomain(token:str, domain:str):
with open('.well-known/wallets/.domains','r') as f:
domains = json.load(f)
domains[token.upper()] = domain
with open('.well-known/wallets/.domains','w') as f:
f.write(json.dumps(domains, indent=4))
if __name__ == '__main__':
# Ask user for token
token = input('Enter token symbol: ')
name = input('Enter token name: ')
address = input('Enter wallet address: ')
addCoin(token, name, address)
if input('Do you want to add a domain? (y/n): ').lower() == 'y':
domain = input('Enter domain: ')
addDomain(token, domain)

29
cleanSite.py Normal file
View File

@@ -0,0 +1,29 @@
import os
# Read all files in the templates directory
for file in os.listdir('templates'):
# Check if the file is sitemap.xml
if file == 'sitemap.xml':
# Open the file
with open('templates/sitemap.xml', 'r') as f:
# Read the content
content = f.read()
# Replace all .html with empty string
content = content.replace('.html', '')
# Write the content back to the file
with open('templates/sitemap.xml', 'w') as f:
f.write(content)
# Skip the file
continue
# If the file is not an html file, skip it
if not file.endswith('.html'):
continue
# Open the file
with open('templates/' + file, 'r') as f:
# Read and remove all .html
content = f.read().replace('.html"', '"')
# Write the cleaned content back to the file
with open('templates/' + file, 'w') as f:
f.write(content)

View File

@@ -3,7 +3,8 @@
"url": "https://nathan3dprinting.au",
"img": "/assets/img/external/nathan3dprinting.webp",
"name": "Nathan 3D Printing",
"description": "Offering 3D Printing and CAD modelling services to the Canberra region"
"description": "Offering 3D Printing and CAD modelling services to the Canberra region",
"enabled": false
},
{
"url": "https://domains.hns.au",
@@ -46,5 +47,17 @@
"img": "/favicon.png",
"name": "LINKR/",
"description": "A free link shortener with a Handshake TLD and using DNS for authentication"
},
{
"url": "https://faucet.woodburn.au",
"img": "/favicon.png",
"name": "HNS Domain Faucet",
"description": "A service providing free Handshake TLDs to allow for quick testing for new users"
},
{
"url":"https://hnsdoh.com",
"img": "/assets/img/external/HNS.png",
"name": "HNS DoH",
"description": "A DNS over HTTPS resolver for Handshake domains"
}
]

126
server.py
View File

@@ -24,7 +24,18 @@ sites = []
if os.path.isfile('data/sites.json'):
with open('data/sites.json') as file:
sites = json.load(file)
# Remove any sites that are not enabled
sites = [site for site in sites if 'enabled' not in site or site['enabled'] == True]
projects = []
projectsUpdated = 0
def getAddress():
global address
if address == '':
address = 'hs1qv3uu4amv87g7p7h49xez2pmzwjf92am0wzpnh4'
return address
#Assets routes
@app.route('/assets/<path:path>')
@@ -32,8 +43,20 @@ def send_report(path):
if path.endswith('.json'):
return send_from_directory('templates/assets', path, mimetype='application/json')
if os.path.isfile('templates/assets/' + path):
return send_from_directory('templates/assets', path)
# Try looking in one of the directories
filename:str = path.split('/')[-1]
if filename.endswith('.png') or filename.endswith('.jpg') \
or filename.endswith('.jpeg') or filename.endswith('.svg'):
if os.path.isfile('templates/assets/img/' + filename):
return send_from_directory('templates/assets/img', filename)
if os.path.isfile('templates/assets/img/favicon/' + filename):
return send_from_directory('templates/assets/img/favicon', filename)
return render_template('404.html'), 404
# Special routes
@app.route('/links')
@@ -112,16 +135,38 @@ def nostr():
})
# Main routes
@app.route('/manifest.json')
def manifest():
host = request.host
if host == 'nathan.woodburn.au':
return send_from_directory('templates', 'manifest.json')
# Read as json
with open('templates/manifest.json') as file:
manifest = json.load(file)
if host != 'localhost:5000' and host != '127.0.0.1:5000':
manifest['start_url'] = f'https://{host}/'
else:
manifest['start_url'] = 'http://127.0.0.1:5000/'
return jsonify(manifest)
# region Main routes
@app.route('/')
def index():
# Check if host if podcast.woodburn.au
if "podcast.woodburn.au" in request.host:
return render_template('podcast.html')
loaded = False
if request.referrer:
# Check if referrer includes nathan.woodburn.au
if "nathan.woodburn.au" in request.referrer:
loaded = True
# Check if cookie is set
if not request.cookies.get('loaded'):
if not request.cookies.get('loaded') and not loaded:
# Set cookie
resp = make_response(render_template('loading.html'), 200, {'Content-Type': 'text/html'})
resp.set_cookie('loaded', 'true', max_age=604800)
@@ -130,8 +175,12 @@ def index():
global address
global handshake_scripts
global projects
global projectsUpdated
try:
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=requests.get('https://git.woodburn.au/api/v1/users/nathanwoodburn/activities/feeds?only-performed-by=true&limit=1',
headers={'Authorization': os.getenv('git_token')})
git = git.json()
git = git[0]
repo_name=git['repo']['name']
@@ -141,8 +190,39 @@ def index():
repo_name = "nathanwoodburn.github.io"
repo_description = "Personal website"
git = {'repo': {'html_url': 'https://nathan.woodburn.au', 'name': 'nathanwoodburn.github.io', 'description': 'Personal website'}}
custom = ""
print("Error getting git data")
# Get only repo names for the newest updates
if projects == [] or projectsUpdated < datetime.datetime.now() - datetime.timedelta(hours=2):
projectsreq = requests.get('https://git.woodburn.au/api/v1/users/nathanwoodburn/repos')
projects = projectsreq.json()
# Check for next page
pageNum = 1
while 'rel="next"' in projectsreq.headers['link']:
projectsreq = requests.get('https://git.woodburn.au/api/v1/users/nathanwoodburn/repos?page=' + str(pageNum))
projects += projectsreq.json()
pageNum += 1
for project in projects:
if project['avatar_url'] == 'https://git.woodburn.au/':
project['avatar_url'] = '/favicon.png'
project['name'] = project['name'].replace('_', ' ').replace('-', ' ')
# Sort by last updated
projectsList = sorted(projects, key=lambda x: x['updated_at'], reverse=True)
projects = []
projectNames = []
projectNum = 0
while len(projects) < 3:
if projectsList[projectNum]['name'] not in projectNames:
projects.append(projectsList[projectNum])
projectNames.append(projectsList[projectNum]['name'])
projectNum += 1
projectsUpdated = datetime.datetime.now()
custom = ""
# Check for downtime
uptime = requests.get('https://uptime.woodburn.au/api/status-page/main/badge')
uptime = uptime.content.count(b'Up') > 1
@@ -161,17 +241,18 @@ def index():
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,sites=sites)
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,sites=sites), 200, {'Content-Type': 'text/html'})
# Cookie should last 1 week
resp.set_cookie('HNS', address, max_age=604800)
resp = make_response(render_template('index.html', handshake_scripts=handshake_scripts,
HNS=address, repo=repo,
repo_description=repo_description,
custom=custom,sites=sites,projects=projects), 200, {'Content-Type': 'text/html'})
resp.set_cookie('loaded', 'true', max_age=604800)
return resp
# region Now Pages
@app.route('/now')
@app.route('/now/')
def now():
@@ -244,6 +325,7 @@ def now_old():
html += '</ul>'
return render_template('now/old.html', handshake_scripts=handshake_scripts,now_pages=html)
# endregion
@app.route('/donate')
@@ -388,24 +470,19 @@ def catch_all(path):
return render_template('404.html'), 404
# If file exists, load it
if os.path.isfile('templates/' + path):
return render_template(path, handshake_scripts=handshake_scripts)
return render_template(path, handshake_scripts=handshake_scripts,sites=sites)
# Try with .html
if os.path.isfile('templates/' + path + '.html'):
return render_template(path + '.html', handshake_scripts=handshake_scripts)
return render_template(path + '.html', handshake_scripts=handshake_scripts,sites=sites)
if os.path.isfile('templates/' + path.strip('/') + '.html'):
return render_template(path.strip('/') + '.html', handshake_scripts=handshake_scripts)
return render_template(path.strip('/') + '.html', handshake_scripts=handshake_scripts,sites=sites)
return render_template('404.html'), 404
# endregion
def getAddress():
global address
if address == '':
address = 'hs1qv3uu4amv87g7p7h49xez2pmzwjf92am0wzpnh4'
return address
#region ACME
@app.route('/hnsdoh-acme', methods=['POST'])
def hnsdoh_acme():
# Get the TXT record from the request
@@ -436,7 +513,9 @@ def hnsdoh_acme():
record = cf.zones.dns_records.post(zone_id, data={'type': 'TXT', 'name': '_acme-challenge', 'content': txt})
print(record)
return jsonify({'status': 'success'})
#endregion
#region Podcast
@app.route('/ID1')
def ID1():
# Proxy to ID1 url
@@ -452,7 +531,6 @@ def ID1_slash():
@app.route('/ID1/<path:path>')
def ID1_path(path):
# Proxy to ID1 url
print('https://id1.woodburn.au/ID1/' + path)
req = requests.get('https://id1.woodburn.au/ID1/' + path)
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
@@ -466,13 +544,15 @@ def ID1_xml():
def podsync():
req = requests.get('https://id1.woodburn.au/podsync.opml')
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
#endregion
#region Error Catching
# 404 catch all
@app.errorhandler(404)
def not_found(e):
return render_template('404.html'), 404
#endregion
if __name__ == '__main__':
app.run(debug=True, port=5000, host='0.0.0.0')

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/404">
<meta property="og:url" content="https://nathan.woodburn.au/404">
<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/">

View File

@@ -8,7 +8,6 @@
<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/">

View File

@@ -1 +1 @@
document.addEventListener("DOMContentLoaded",(function(){const n=document.getElementById("loading-screen"),e=[{pre:'┌──(<span class="blue">nathan@NWTux</span>)-[<span class="white">~</span>]',message:"cd Git"},{pre:'┌──(<span class="blue">nathan@NWTux</span>)-[<span class="white">~/Git</span>]',message:"cd Nathanwoodburn.github.io"},{pre:'┌──(<span class="blue">nathan@NWTux</span>)-[<span class="white">~/Git/Nathanwoodburn.github.io</span>]',message:"python3 main.py"}],t=["Starting server with 1 workers and 2 threads","+0000] [1] [INFO] Starting gunicorn 22.0.0","+0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)","+0000] [1] [INFO] Using worker: gthread","+0000] [8] [INFO] Booting worker with pid: 8"];let a=0;function s(e,t){const a=function(){const n=new Date;return`${n.getUTCFullYear()}-${String(n.getUTCMonth()+1).padStart(2,"0")}-${String(n.getUTCDate()).padStart(2,"0")} ${String(n.getUTCHours()).padStart(2,"0")}:${String(n.getUTCMinutes()).padStart(2,"0")}:${String(n.getUTCSeconds()).padStart(2,"0")}`}();console.log(a);for(let t=0;t<e.length;t++){const s=document.createElement("div");s.classList.add("loading-line"),s.innerHTML=0!==t?"["+a+e[t]:e[t],n.appendChild(s)}t()}function r(){window.location.reload()}!function i(){a<e.length?function(e,t){const a=document.createElement("div");a.classList.add("loading-pre"),a.innerHTML=e.pre,n.appendChild(a);const s=document.createElement("div");s.classList.add("loading-line"),s.innerHTML='└─<span class="blue">$</span> <span class="cursor"></span>',n.appendChild(s);let r=0;const i=setInterval((()=>{s.removeChild(s.querySelector(".cursor")),s.innerHTML+=e.message[r]+'<span class="cursor"></span>',r++,r===e.message.length&&(s.removeChild(s.querySelector(".cursor")),clearInterval(i),t())}),50)}(e[a],(()=>{a++,setTimeout(i,200)})):s(t,(()=>{setTimeout(r,200)}))}()}));
document.addEventListener("DOMContentLoaded",(function(){const n=document.getElementById("loading-screen"),e=[{pre:'┌──(<span class="blue">nathan@NWTux</span>)-[<span class="white">~</span>]',message:"cd Git"},{pre:'┌──(<span class="blue">nathan@NWTux</span>)-[<span class="white">~/Git</span>]',message:"cd Nathanwoodburn.github.io"},{pre:'┌──(<span class="blue">nathan@NWTux</span>)-[<span class="white">~/Git/Nathanwoodburn.github.io</span>]',message:"python3 main.py"}],t=["Starting server with 1 workers and 2 threads","+0000] [1] [INFO] Starting gunicorn 22.0.0","+0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)","+0000] [1] [INFO] Using worker: gthread","+0000] [8] [INFO] Booting worker with pid: 8"];let a=0;function s(e,t){const a=function(){const n=new Date;return`${n.getUTCFullYear()}-${String(n.getUTCMonth()+1).padStart(2,"0")}-${String(n.getUTCDate()).padStart(2,"0")} ${String(n.getUTCHours()).padStart(2,"0")}:${String(n.getUTCMinutes()).padStart(2,"0")}:${String(n.getUTCSeconds()).padStart(2,"0")}`}();for(let t=0;t<e.length;t++){const s=document.createElement("div");s.classList.add("loading-line"),s.innerHTML=0!==t?"["+a+e[t]:e[t],n.appendChild(s)}t()}function r(){window.location.reload()}!function i(){a<e.length?function(e,t){const a=document.createElement("div");a.classList.add("loading-pre"),a.innerHTML=e.pre,n.appendChild(a);const s=document.createElement("div");s.classList.add("loading-line"),s.innerHTML='└─<span class="blue">$</span> <span class="cursor"></span>',n.appendChild(s);let r=0;const i=setInterval((()=>{s.removeChild(s.querySelector(".cursor")),s.innerHTML+=e.message[r]+'<span class="cursor"></span>',r++,r===e.message.length&&(s.removeChild(s.querySelector(".cursor")),clearInterval(i),t())}),50)}(e[a],(()=>{a++,setTimeout(i,200)})):s(t,(()=>{setTimeout(r,200)}))}()}));

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/donate">
<meta property="og:url" content="https://nathan.woodburn.au/donate">
<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/">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/gitpgp">
<meta property="og:url" content="https://nathan.woodburn.au/gitpgp">
<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/">

View File

@@ -8,7 +8,6 @@
<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/">
@@ -99,24 +98,15 @@ Check them out here!</blockquote><img class="img-fluid" src="/assets/img/pfront.
</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="site-container">
<h1>My Websites</h1>
<h1>Some recent projects</h1>
<div class="swiper">
<div class="swiper-wrapper"><!-- <div class="swiper-slide site" data-url="https://nathan3dprinting.au"><img class="site-img" src="/assets/img/external/nathan3dprinting.webp" />
<div class="swiper-wrapper">{% for project in projects %}
<div class="swiper-slide site" data-url="{{ project.html_url }}">
<img class="site-img" src="{{ project.avatar_url }}" />
<div class="site-body">
<div class="site-detail" style="width: 100%;">
<h2 class="site-name" style="text-align: left;">Nathan 3D Printing</h2>
<p class="text-start site-author">Offering 3D Printing and CAD modelling services to the Canberra region</p>
</div>
</div>
</div> -->
{% for site in sites %}
<div class="swiper-slide site" data-url="{{ site.url }}">
<img class="site-img" src="{{ site.img }}" />
<div class="site-body">
<div class="site-detail" style="width: 100%;">
<h2 class="site-name" style="text-align: left;">{{ site.name }}</h2>
<p class="text-start site-author">{{ site.description }}</p>
<h2 class="site-name" style="text-align: left;">{{ project.name }}</h2>
<p class="text-start site-author">{{ project.description }}</p>
</div>
</div>
</div>

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/link">
<meta property="og:url" content="https://nathan.woodburn.au/link">
<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/">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/loading">
<meta property="og:url" content="https://nathan.woodburn.au/loading">
<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/">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_02_18.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_02_18.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_02_25.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_02_25.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_04_19.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_04_19.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_05_20.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_05_20.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_05_28.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_05_28.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_06_06.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_06_06.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/24_06_17.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/24_06_17.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/old.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/old.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/now/template.html">
<meta property="og:url" content="https://nathan.woodburn.au/now/template.html">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/pgp">
<meta property="og:url" content="https://nathan.woodburn.au/pgp">
<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/">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/podcast">
<meta property="og:url" content="https://nathan.woodburn.au/podcast">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<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.">
<meta property="og:type" content="website">
<meta property="og:title" content="Alliance Church Woden Valley Podcast">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/projects">
<meta property="og:url" content="https://nathan.woodburn.au/projects">
<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 property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
@@ -37,21 +36,19 @@
<script async src="https://umami.woodburn.au/script.js" data-website-id="6a55028e-aad3-481c-9a37-3e096ff75589"></script>
</head>
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="77"><!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns?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">
<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>
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="77">
<nav class="navbar navbar-expand-md fixed-top navbar-light" id="mainNav" style="background: var(--bs-navbar-hover-color);">
<div class="container-fluid"><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>
<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="/now">Now</a></li>
</ul>
</div>
</div>
</nav>
<header class="masthead" style="height: auto;background: url(&quot;/assets/img/bg/projects.webp&quot;) bottom / cover no-repeat;">
<header class="masthead" style="background: url(&quot;/assets/img/bg/projects.webp&quot;) bottom / cover no-repeat;height: auto;padding-top: 20px;">
<div style="margin-top: 150px;margin-bottom: 100px;">
<div class="container">
<div class="row">
@@ -62,61 +59,17 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
</div>
</div>
</header>
<section class="text-center content-section" id="projects" style="padding-bottom: 100px;">
<p style="font-size: 28px;">Check out my <a href="https://git.woodburn.au/nathanwoodburn" target="_blank">Git</a>&nbsp;for all my projects</p>
<section class="text-center content-section" id="sites" style="padding-bottom: 100px;">
<div class="container">
<div class="row">
<div class="row gx-5 row-cols-1 row-cols-sm-1 row-cols-md-2 row-cols-lg-3 row-cols-xl-3 row-cols-xxl-4">{% for site in sites %}
<div class="col" style="padding-top: 20px;">
<h2>ShakeCities</h2>
<p>A single page website creator where each user's page on their free HNS domain</p><a class="btn btn-primary" role="button" href="https://shakecities.com" target="_blank">More Info</a>
</div>
<div class="col" style="padding-top: 20px;">
<h2>Woodburn Faucet</h2>
<p>A service providing free Handshake TLDs to allow for quick testing for new users</p><a class="btn btn-primary" role="button" href="https://faucet.woodburn.au" target="_blank">More Info</a>
</div>
</div>
<div class="row">
<div class="col" style="padding-top: 20px;">
<h2>Linkr</h2>
<p>A shortlinks service on the Handshake domain Linkr/</p><a class="btn btn-primary" role="button" href="https://linkr" target="_blank">More Info</a>
</div>
<div class="col" style="padding-top: 20px;">
<h2>HNSDoh</h2>
<p>A DNS server with support for Handshake domains using multiple upstream providers to provide as little downtime as possible.</p><a class="btn btn-primary" role="button" href="https://hnsdoh.com" target="_blank">More Info</a>
</div>
</div>
<div class="row">
<div class="col" style="padding-top: 20px;">
<h2>FireWallet</h2>
<p><span style="background-color: initial;">The Handshake wallet that is Fire.</span><br><span style="background-color: initial;">A new frontend to HSD or Bob Wallet</span></p><a class="btn btn-primary" role="button" target="_blank" href="https://firewallet.au">More Info</a>
</div>
<div class="col" style="padding-top: 20px;">
<h2>HNS HOSting</h2>
<p>A hosting service for Handshake domains<br><br></p><a class="btn btn-primary" role="button" href="https://hnshosting.au" target="_blank">More Info</a>
</div>
</div>
<div class="row">
<div class="col" style="padding-top: 20px;">
<h2>HNS AU</h2>
<p><span style="background-color: initial;">The home of Australians using the decentralized web, built on Handshake.</span><br></p><a class="btn btn-primary" role="button" href="https://hns.au" target="_blank">More Info</a>
</div>
<div class="col" style="padding-top: 20px;">
<h2>HNS Proxy</h2>
<p><span style="background-color: initial;">A Proxy to access Handshake domains over SSL.</span><br></p><a class="btn btn-primary" role="button" href="https://hnsproxy.au" target="_blank">More Info</a>
</div>
</div>
<div class="row">
<div class="col" style="padding-top: 20px;">
<h2>Woodburn Registry</h2>
<p>Selling SLDs off domains secured on the Handshake blockchain.</p><a class="btn btn-primary" role="button" href="https://reg.woodburn.au" target="_blank">More Info</a>
</div>
<div class="col" style="padding-top: 20px;">
<h2>HSD Batcher</h2>
<p><span style="background-color: initial;">A GUI to send transaction batches to the Handshake chain.</span></p><a class="btn btn-primary" role="button" target="_blank" href="https://github.com/Nathanwoodburn/HSDBatcherGUI">More Info</a>
</div>
<h2>{{site.name}}</h2>
<p>{{site.description}}</p><a class="btn btn-primary" role="button" href="{{site.url}}" target="_blank">More Info</a>
</div>
{% endfor %}</div>
</div>
</section>
<p class="text-center" style="font-size: 28px;">Check out my <a href="https://git.woodburn.au/nathanwoodburn" target="_blank">Git</a>&nbsp;for all my projects</p>
<footer>
<div class="container text-center">
<p class="copyright">Copyright ©&nbsp;Nathan.Woodburn/ 2024</p>

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/resume">
<meta property="og:url" content="https://nathan.woodburn.au/resume">
<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/">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/servers">
<meta property="og:url" content="https://nathan.woodburn.au/servers">
<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 property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
@@ -30,27 +29,13 @@
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="/assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="/assets/css/styles.min.css">
<link rel="stylesheet" href="/assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
<script async src="https://umami.woodburn.au/script.js" data-website-id="6a55028e-aad3-481c-9a37-3e096ff75589"></script>
</head>
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="77"><!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns?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">
<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>
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="77">
<header class="masthead" style="background-image:url('/assets/img/bg/projects.webp');">
<div class="intro-body">
<div class="container">
@@ -226,33 +211,6 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
</div>
</div>
<div class="row row-cols-1 row-cols-sm-1 row-cols-md-1 row-cols-lg-1 row-cols-xl-3 row-cols-xxl-3">
<div class="col">
<div class="card" style="margin-top: 10px;margin-bottom: 10px;">
<div class="card-body text-primary text-bg-dark">
<h4 class="card-title">Potato2 (3D Printer)</h4>CPU<br>
<iframe
src="https://potato2dash.woodburn.au/?graph=cpu&showPercentage=true&surface=212529"
style="border-radius: 20px"
allowtransparency="true"
frameborder="0"
></iframe>
<br>MEM<br>
<iframe
src="https://potato2dash.woodburn.au/?graph=ram&showPercentage=true&surface=212529"
style="border-radius: 20px"
allowtransparency="true"
frameborder="0"
></iframe>
<br>Storage<br>
<iframe
src="https://potato2dash.woodburn.au/?graph=storage&showPercentage=true&surface=212529"
style="border-radius: 20px"
allowtransparency="true"
frameborder="0"
></iframe>
</div>
</div>
</div>
<div class="col">
<div class="card" style="margin-top: 10px;margin-bottom: 10px;">
<div class="card-body text-primary text-bg-dark">

View File

@@ -8,7 +8,6 @@
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/signalQR">
<meta property="og:url" content="https://nathan.woodburn.au/signalQR">
<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/">