301 Commits

Author SHA1 Message Date
c45a30675c feat: Finish updating resume template
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 1m12s
Build Docker / BuildImage (push) Successful in 1m24s
2025-11-04 17:24:28 +11:00
9e8e23165e feat: Start on new resume layout 2025-11-04 17:24:28 +11:00
53e05922bf fix: Add curl to dockerfiel for CD healthchecks
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 1m17s
Build Docker / BuildImage (push) Successful in 2m6s
2025-11-03 13:51:01 +11:00
0be0dad1b2 feat: Add new dockerfile to shrink image
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 2m57s
Build Docker / BuildImage (push) Successful in 3m42s
2025-11-03 13:44:19 +11:00
f404d55935 feat: Add phone number and city to resume
All checks were successful
Build Docker / BuildImage (push) Successful in 1m5s
Check Code Quality / RuffCheck (push) Successful in 1m8s
2025-11-01 18:03:03 +11:00
009c2b430c feat: Update projects
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 1m22s
Build Docker / BuildImage (push) Successful in 1m39s
2025-11-01 13:19:15 +11:00
ed96fbcc29 fix: Add curl to Dockerfile for coolify healthchecks
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 1m19s
Build Docker / BuildImage (push) Successful in 2m11s
2025-11-01 12:49:45 +11:00
4555ef5da2 Merge pull request 'Add new uv python3 manager' (#5) from feat/uv into main
All checks were successful
Build Docker / BuildImage (push) Successful in 1m0s
Check Code Quality / RuffCheck (push) Successful in 1m7s
Reviewed-on: #5
2025-11-01 12:41:28 +11:00
1335a73eb6 fix: Remove requirement.txt to stop nixpacks using pip
All checks were successful
Build Docker / BuildImage (push) Successful in 1m6s
Check Code Quality / RuffCheck (push) Successful in 1m17s
2025-11-01 12:31:47 +11:00
b8f3039629 feat: Update Dockerfile to use new UV system
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 2m44s
Build Docker / BuildImage (push) Successful in 3m15s
Also fixes error in spotify refreshing
2025-11-01 12:17:25 +11:00
1888160fa5 fix: Update pyproject version to match latest git tag 2025-11-01 11:50:51 +11:00
7dd0f839cf feat: Add initial uv package info 2025-11-01 11:44:44 +11:00
5a0068586a feat: Cleanup resume summary
All checks were successful
Build Docker / BuildImage (push) Successful in 1m3s
Check Code Quality / RuffCheck (push) Successful in 1m8s
2025-10-31 15:16:48 +11:00
8079780c08 Merge pull request 'Refactor blueprints to make them easier to import' (#4) from feat/blueprint_imports into main
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 1m5s
Build Docker / BuildImage (push) Successful in 1m10s
Reviewed-on: #4
2025-10-30 21:44:46 +11:00
72b8dae35e fix: Update curl tools page to use new demo data
All checks were successful
Build Docker / BuildImage (push) Successful in 1m0s
Check Code Quality / RuffCheck (push) Successful in 1m11s
2025-10-30 21:35:48 +11:00
323ace5775 feat: Remove old demo scripts
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 56s
Build Docker / BuildImage (push) Successful in 1m2s
2025-10-30 21:34:35 +11:00
c2803e372a feat: Dynamically load tool demos and start tracking BSdesign
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 58s
Build Docker / BuildImage (push) Successful in 1m0s
2025-10-30 21:29:27 +11:00
2a9e704f29 feat: Add zellij demo
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 59s
Build Docker / BuildImage (push) Successful in 1m4s
2025-10-30 20:52:20 +11:00
0c490625a9 fix: Add apt update before install python
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
Check Code Quality / RuffCheck (push) Successful in 58s
2025-10-30 20:39:27 +11:00
b9753617ad fix: Remove sudo from action
Some checks failed
Check Code Quality / RuffCheck (push) Failing after 17s
Build Docker / BuildImage (push) Successful in 1m2s
2025-10-30 20:38:09 +11:00
b87d19c5d9 fix: Manually install python3
Some checks failed
Check Code Quality / RuffCheck (push) Failing after 13s
Build Docker / BuildImage (push) Successful in 47s
2025-10-30 20:36:29 +11:00
67e8b4cf7e fix: Try using a new container
Some checks failed
Check Code Quality / RuffCheck (push) Failing after 31s
Build Docker / BuildImage (push) Successful in 58s
2025-10-30 20:33:02 +11:00
bfc6652f29 fix: Install python first
Some checks failed
Build Docker / BuildImage (push) Successful in 55s
Check Code Quality / RuffCheck (push) Failing after 1m35s
2025-10-30 20:28:31 +11:00
38372c0cff fix: Manually install ruff
Some checks failed
Check Code Quality / RuffCheck (push) Failing after 17s
Build Docker / BuildImage (push) Successful in 58s
2025-10-30 20:27:00 +11:00
dd64313006 fix: Set action git url
Some checks failed
Check Code Quality / RuffCheck (push) Failing after 22s
Build Docker / BuildImage (push) Successful in 47s
2025-10-30 20:19:56 +11:00
9e20a6171a feat: Add ruff check
Some checks failed
Check Code Quality / RuffCheck (push) Failing after 25s
Build Docker / BuildImage (push) Successful in 57s
2025-10-30 20:15:10 +11:00
da347fd860 feat: Add max width for Now page contents
All checks were successful
Build Docker / BuildImage (push) Successful in 54s
2025-10-30 20:06:32 +11:00
776b7de753 fix: Replace actions.json in the main server.py
All checks were successful
Build Docker / BuildImage (push) Successful in 1m0s
2025-10-30 19:58:29 +11:00
7b2b3659bb fix: Remove strict slashes from index routes
All checks were successful
Build Docker / BuildImage (push) Successful in 48s
2025-10-30 19:50:03 +11:00
872373dffd feat: Remove strict slashes for now pages 2025-10-30 19:44:01 +11:00
8d832372cd feat: Add curl support for now pages
All checks were successful
Build Docker / BuildImage (push) Successful in 48s
2025-10-30 19:36:43 +11:00
03dae87272 feat: Refactor blueprints to make them easier to import
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
2025-10-30 18:22:21 +11:00
4c654fcb78 feat: Add HTTPie to CLI agents
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2025-10-30 17:26:06 +11:00
c9542e4af7 fix: Remove X- headers
All checks were successful
Build Docker / BuildImage (push) Successful in 49s
2025-10-30 17:18:50 +11:00
e184375897 feat: Add Posting to CLI tools
All checks were successful
Build Docker / BuildImage (push) Successful in 59s
2025-10-30 17:12:43 +11:00
844f1b52e2 feat: Update isCurl to isCLI to allow more CLI agents 2025-10-30 17:07:20 +11:00
19c51c3665 feat: Add header route for troubleshooting 2025-10-30 17:03:17 +11:00
85ebd460ed feat: Add progress bar to spotify widget
All checks were successful
Build Docker / BuildImage (push) Successful in 1m57s
2025-10-30 11:45:04 +11:00
50879b4f0e feat: Add Vesktop to desktop applications
All checks were successful
Build Docker / BuildImage (push) Successful in 2m0s
2025-10-29 14:59:08 +11:00
6c09923281 feat: Add curl error page and new tests
All checks were successful
Build Docker / BuildImage (push) Successful in 52s
2025-10-28 15:04:21 +11:00
332c408b89 fix: Animation for spotify toggle
All checks were successful
Build Docker / BuildImage (push) Successful in 2m8s
2025-10-28 14:46:09 +11:00
4ae6f7bb99 feat: Optimise profile image
All checks were successful
Build Docker / BuildImage (push) Successful in 55s
2025-10-26 22:24:28 +11:00
d4d6b47225 feat: Add spotify to api routes
All checks were successful
Build Docker / BuildImage (push) Successful in 55s
2025-10-26 21:31:30 +11:00
9809fe0695 feat: Add spotify to curl route
All checks were successful
Build Docker / BuildImage (push) Successful in 48s
2025-10-26 21:14:55 +11:00
3522389422 fix: Improve Spotify widget visibility
All checks were successful
Build Docker / BuildImage (push) Successful in 2m55s
2025-10-26 21:00:12 +11:00
2979d3c4de feat: Update python version in docker
All checks were successful
Build Docker / BuildImage (push) Successful in 2m38s
2025-10-26 20:47:01 +11:00
a8b2c02164 feat: Add initial spotify widget
All checks were successful
Build Docker / BuildImage (push) Successful in 57s
2025-10-26 20:43:48 +11:00
372ba908b8 feat: Add tools to navbar
All checks were successful
Build Docker / BuildImage (push) Successful in 48s
2025-10-26 19:36:25 +11:00
1145b9205c Merge pull request 'Add initial ASCII art for curl connections' (#2) from feat/ascii_curl into main
All checks were successful
Build Docker / BuildImage (push) Successful in 50s
Reviewed-on: #2
2025-10-26 19:00:17 +11:00
a71c5b6663 feat: Update ascii templates to be nicer
All checks were successful
Build Docker / BuildImage (push) Successful in 54s
2025-10-26 18:47:25 +11:00
724e800201 feat: Update curl template for index
All checks were successful
Build Docker / BuildImage (push) Successful in 53s
2025-10-26 18:43:25 +11:00
abcaa9283d feat: Add tools curl page 2025-10-26 18:43:25 +11:00
e175f68d25 feat: Add initial ascii art for curl connections 2025-10-26 18:43:25 +11:00
80b6a9bf46 feat: Update index page
All checks were successful
Build Docker / BuildImage (push) Successful in 57s
2025-10-26 18:42:22 +11:00
b089b8c0a8 feat: Add new tools api route
All checks were successful
Build Docker / BuildImage (push) Successful in 52s
2025-10-26 18:27:36 +11:00
8f774ba8f0 feat: Added tools page
All checks were successful
Build Docker / BuildImage (push) Successful in 2m9s
2025-10-26 18:00:18 +11:00
f4f5f47ee7 feat: Cleanup software blog style
All checks were successful
Build Docker / BuildImage (push) Successful in 2m41s
2025-10-24 16:10:28 +11:00
16f17a9486 feat: Add Software I use blog post
All checks were successful
Build Docker / BuildImage (push) Successful in 1m0s
2025-10-23 15:00:05 +11:00
72483674f6 feat: Add now page for OCT
All checks were successful
Build Docker / BuildImage (push) Successful in 4m30s
2025-10-23 14:27:49 +11:00
b69c7f381b feat: Cleanup duplicate script code
All checks were successful
Build Docker / BuildImage (push) Successful in 59s
2025-10-16 17:37:48 +11:00
d7d4dbed8b feat: Add new status and ping route and update help menu
All checks were successful
Build Docker / BuildImage (push) Successful in 1m1s
2025-10-16 17:10:09 +11:00
2437b19836 feat: Add curl to container
All checks were successful
Build Docker / BuildImage (push) Successful in 4m33s
2025-10-16 16:57:41 +11:00
abd23e0eb8 fix: Add dateutil to requirements
All checks were successful
Build Docker / BuildImage (push) Successful in 2m59s
2025-10-16 16:54:16 +11:00
57a4b977ec feat: Add tool to estimate date of a webpage
All checks were successful
Build Docker / BuildImage (push) Successful in 2m34s
2025-10-16 16:48:26 +11:00
7f591e2724 fix: Cleanup blueprint names and add tests
All checks were successful
Build Docker / BuildImage (push) Successful in 2m17s
2025-10-13 15:32:31 +11:00
3d5c16f9cb fix: Verify legacy API redirects exist
All checks were successful
Build Docker / BuildImage (push) Successful in 54s
This fixes an infinite redirect loop
2025-10-11 22:45:06 +11:00
fdb5f84c92 feat: Update config pulled from cloud 2025-10-11 22:32:29 +11:00
eaf363ee27 feat: Add curl support for blog pages
All checks were successful
Build Docker / BuildImage (push) Successful in 53s
2025-10-11 19:35:35 +11:00
0ea9db3473 feat: Update api routes to use similar json format to other routes 2025-10-11 19:16:50 +11:00
8d6acca5e9 feat: Add error message to header for HTML error responses 2025-10-11 18:55:24 +11:00
bfc1f0839a feat: Move getGitCommit from api to tools
All checks were successful
Build Docker / BuildImage (push) Successful in 1m4s
2025-10-11 18:51:22 +11:00
258061c64d feat: Use tools.json_response in hosting route
All checks were successful
Build Docker / BuildImage (push) Successful in 49s
2025-10-11 18:14:20 +11:00
399ac5f0da feat: Move acme to blueprint and cleanup json responses
All checks were successful
Build Docker / BuildImage (push) Successful in 57s
2025-10-11 18:08:00 +11:00
74362de02a feat: Add better error messages to podcast routes
All checks were successful
Build Docker / BuildImage (push) Successful in 52s
2025-10-11 17:59:06 +11:00
9f7b93b8a1 feat: Move podcast routes to podcast blueprint
All checks were successful
Build Docker / BuildImage (push) Successful in 2m15s
2025-10-11 17:56:01 +11:00
665921d046 feat: Update about page info
All checks were successful
Build Docker / BuildImage (push) Successful in 58s
2025-10-11 17:47:03 +11:00
84cf772273 fix: Update index about section 2025-10-11 17:45:21 +11:00
22cd49a012 feat: Move error responses to new function in tools.py
All checks were successful
Build Docker / BuildImage (push) Successful in 1m6s
2025-10-11 17:39:46 +11:00
00d035a0e8 fix: Security issue in download route and cleanup
All checks were successful
Build Docker / BuildImage (push) Successful in 2m13s
2025-10-11 17:01:20 +11:00
fc56cafab8 feat: Split code into modules
All checks were successful
Build Docker / BuildImage (push) Successful in 4m7s
2025-10-10 22:58:06 +11:00
eee87e6ca7 fix: Cleanup code to follow linting 2025-10-10 21:35:47 +11:00
09852f19b6 feat: Move solana create transaction to new file
All checks were successful
Build Docker / BuildImage (push) Successful in 4m18s
2025-10-10 21:17:23 +11:00
8b464cd89d feat: Cleanup function names 2025-10-10 20:48:38 +11:00
98597768f3 feat: Update resume summary
All checks were successful
Build Docker / BuildImage (push) Successful in 2m31s
Make api endpoints more consistent
2025-10-09 16:04:07 +11:00
08f80ddb5c feat: Add some better checks
All checks were successful
Build Docker / BuildImage (push) Successful in 50s
2025-08-25 17:23:24 +10:00
33fd8136a7 feat: Add some more validation
All checks were successful
Build Docker / BuildImage (push) Successful in 1m2s
2025-08-24 21:26:14 +10:00
b2943bfeac feat: Add rate limits to exquiry
All checks were successful
Build Docker / BuildImage (push) Successful in 2m16s
2025-08-24 21:14:38 +10:00
c3c7c86a66 feat: Add now page for Aug 15
All checks were successful
Build Docker / BuildImage (push) Successful in 57s
2025-08-15 21:37:03 +10:00
8563a6857f feat: Update hosting to have presets
All checks were successful
Build Docker / BuildImage (push) Successful in 2m31s
2025-08-15 16:31:45 +10:00
1650d25d0f feat: Finish hosting enquiry page
All checks were successful
Build Docker / BuildImage (push) Successful in 2m12s
2025-08-14 16:01:46 +10:00
f4ee2297a7 feat: Add hosting page
All checks were successful
Build Docker / BuildImage (push) Successful in 6m14s
2025-08-13 12:46:43 +10:00
35ced02977 feat: Add new now page for July
All checks were successful
Build Docker / BuildImage (push) Successful in 4m4s
2025-07-21 11:15:36 +10:00
45709632d5 Merge branch 'feat/preloader'
All checks were successful
Build Docker / BuildImage (push) Successful in 1m13s
2025-07-03 14:19:46 +10:00
e65fe8cd30 fix: Load arg get returns None which causes exception
All checks were successful
Build Docker / BuildImage (push) Successful in 1m12s
2025-07-03 13:57:19 +10:00
21f725baf3 feat: Add option to force load page to show 2025-07-03 13:56:01 +10:00
c2a1995292 feat: Initial working preloader
All checks were successful
Build Docker / BuildImage (push) Successful in 1m1s
2025-07-03 13:37:51 +10:00
af93330bf5 feat: Preloader inital test 2025-07-03 13:17:38 +10:00
e43ae63d8a feat: Update resume dates
All checks were successful
Build Docker / BuildImage (push) Successful in 2m36s
2025-07-01 10:46:24 +10:00
add64ba889 fix: Update resume OG content
All checks were successful
Build Docker / BuildImage (push) Successful in 5m5s
2025-06-25 14:52:38 +10:00
8d13297cb0 feat: Update blog rendering
All checks were successful
Build Docker / BuildImage (push) Successful in 5m28s
2025-06-25 14:38:54 +10:00
eee95df47c feat: Redo some wording in the HNSDoH section
All checks were successful
Build Docker / BuildImage (push) Successful in 1m12s
2025-06-23 18:21:12 +10:00
1febeaf8a3 feat: Add HNSDoH to resume
All checks were successful
Build Docker / BuildImage (push) Successful in 1m17s
2025-06-23 18:17:59 +10:00
088be26b48 fix: Remove some unused fonts
All checks were successful
Build Docker / BuildImage (push) Successful in 1m17s
2025-06-23 17:47:12 +10:00
7f055f3607 fix: Shrink contact info on small screens
All checks were successful
Build Docker / BuildImage (push) Successful in 1m18s
2025-06-21 19:05:38 +10:00
5a455fcdca feat: Update index banner image
All checks were successful
Build Docker / BuildImage (push) Successful in 2m34s
2025-06-21 18:42:33 +10:00
846e28d92f fix: Update font
All checks were successful
Build Docker / BuildImage (push) Successful in 1m5s
2025-06-21 18:01:13 +10:00
ec3563093f feat: Add resume pdf route and fix some print formatting
All checks were successful
Build Docker / BuildImage (push) Successful in 1m11s
2025-06-21 17:54:06 +10:00
0ec96b4461 fix: Margin on print layout
All checks were successful
Build Docker / BuildImage (push) Successful in 2m21s
2025-06-21 15:56:58 +10:00
873504ecbf feat: Update resume page
Some checks failed
Build Docker / BuildImage (push) Has been cancelled
2025-06-21 15:55:42 +10:00
51f4a3462b feat: Add fallback version
All checks were successful
Build Docker / BuildImage (push) Successful in 1m6s
2025-06-20 22:20:42 +10:00
0656d8a95d feat: Add more api info
All checks were successful
Build Docker / BuildImage (push) Successful in 1m11s
2025-06-20 22:17:09 +10:00
a79c795672 feat: Add version to curl response
All checks were successful
Build Docker / BuildImage (push) Successful in 1m12s
2025-06-20 22:14:22 +10:00
159a40ecb5 feat: Cleanup unused prints
All checks were successful
Build Docker / BuildImage (push) Successful in 1m15s
2025-06-20 21:32:08 +10:00
9d359640d3 feat: Add FirePortal to sites
All checks were successful
Build Docker / BuildImage (push) Successful in 2m39s
2025-06-19 13:01:00 +10:00
f0c60a4cea feat: Add now page for Jun 19
All checks were successful
Build Docker / BuildImage (push) Successful in 2m44s
2025-06-19 12:53:32 +10:00
2c5ac7b475 feat: Refresh HNS address
All checks were successful
Build Docker / BuildImage (push) Successful in 2m21s
2025-06-04 14:40:44 +10:00
6a64de155d feat: Add new now page
All checks were successful
Build Docker / BuildImage (push) Successful in 2m7s
2025-05-28 12:05:02 +10:00
f5ba80fc16 feat: Update copyright date
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2025-04-22 16:53:30 +10:00
f8f48e9353 feat: Add Blog to navbar and write blog for Bobwallet + HNSAU nameserver
All checks were successful
Build Docker / BuildImage (push) Successful in 43s
2025-04-22 16:47:12 +10:00
f734e9ade4 fix: Use dynamic title for social embeds
All checks were successful
Build Docker / BuildImage (push) Successful in 43s
2025-04-21 22:20:43 +10:00
95e161aba9 feat: Update css for code blocks in blog
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2025-04-21 22:13:59 +10:00
e4331e712a feat: Add blogs and updated some python dependencies
All checks were successful
Build Docker / BuildImage (push) Successful in 2m18s
2025-04-21 22:05:41 +10:00
4804016fdf feat: Add now page for March
All checks were successful
Build Docker / BuildImage (push) Successful in 49s
2025-03-27 15:38:16 +11:00
ccb6cdb454 fix: Try to get correct IP from headers
All checks were successful
Build Docker / BuildImage (push) Successful in 2m10s
2025-02-21 11:04:53 +11:00
dade1f5d8d feat: Update podcast proxies
All checks were successful
Build Docker / BuildImage (push) Successful in 2m4s
2025-02-18 17:46:14 +11:00
cecfdea07f fix: Update now page to have a gap around text
All checks were successful
Build Docker / BuildImage (push) Successful in 44s
2025-01-30 14:39:42 +11:00
7bea502bdf feat: Add now page for Jan
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2025-01-30 13:00:28 +11:00
1fd539bcb9 feat: Update sha265 for asssetlinks
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2025-01-29 21:31:30 +11:00
f940f4418d feat: Add assetlinks.json
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2025-01-29 20:59:59 +11:00
de476eb7ab fix: Add more cached files to sw
All checks were successful
Build Docker / BuildImage (push) Successful in 50s
2025-01-29 20:53:46 +11:00
2fbf21eaaf feat: Update sw
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2025-01-29 18:57:07 +11:00
8ccbe2ebf1 feat: Add service worker
All checks were successful
Build Docker / BuildImage (push) Successful in 49s
2025-01-29 18:51:28 +11:00
d4136a396a feat: Update manifest
All checks were successful
Build Docker / BuildImage (push) Successful in 52s
2025-01-29 18:41:13 +11:00
622a4038ac feat: Add project api route
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2025-01-15 22:32:17 +11:00
a65896b80d feat: Add brand reveal to header
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2025-01-11 17:57:23 +11:00
415703e21b fix: Update timing for brand reveal on index
All checks were successful
Build Docker / BuildImage (push) Successful in 1m59s
2025-01-11 17:36:31 +11:00
89bf5eecd7 feat: Add stWDBRN token and name reveal
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
2025-01-06 16:26:37 +11:00
b4059910ec feat: Add fediverse creator tag
All checks were successful
Build Docker / BuildImage (push) Successful in 1m51s
2025-01-05 21:51:56 +11:00
7896f71534 fix: Update cleanSite hook to clean now page html files
All checks were successful
Build Docker / BuildImage (push) Successful in 1m9s
2025-01-04 20:11:35 +11:00
f9b30a3fe6 fix: Update sitemap to have 2024 now page
All checks were successful
Build Docker / BuildImage (push) Successful in 36s
2025-01-01 01:30:25 +11:00
31c80276de feat: Add 2024 overview now page
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2025-01-01 01:28:16 +11:00
840ba4c10c feat: Add log message for ACME requests
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2024-12-30 13:33:58 +11:00
53bf28b208 fix: Update cloudflare version
All checks were successful
Build Docker / BuildImage (push) Successful in 1m47s
2024-12-30 10:56:20 +11:00
d651e3a20c feat: Add new BTC address and fix file type of proofs
All checks were successful
Build Docker / BuildImage (push) Successful in 42s
2024-12-29 22:44:00 +11:00
fb376a4906 feat: Update HNS address
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-12-26 18:49:36 +11:00
cd69d86246 feat: Add new now page
All checks were successful
Build Docker / BuildImage (push) Successful in 1m48s
2024-12-19 12:33:56 +11:00
1ae1eeb159 feat: Update stWDBRN name
All checks were successful
Build Docker / BuildImage (push) Successful in 1m51s
2024-12-05 15:58:41 +11:00
5171fffab5 feat: Add stWDBRN metadata
All checks were successful
Build Docker / BuildImage (push) Successful in 44s
2024-12-04 15:57:25 +11:00
ca1e99013d fix: Update stWDBRN image size
All checks were successful
Build Docker / BuildImage (push) Successful in 41s
2024-12-04 15:54:28 +11:00
7c71c994f2 feat: Add stWDBRN firewallet logo
All checks were successful
Build Docker / BuildImage (push) Successful in 1m42s
2024-12-04 15:51:50 +11:00
70655a4d39 feat: Update print layout to make resume display nicer
All checks were successful
Build Docker / BuildImage (push) Successful in 32s
2024-12-03 14:00:39 +11:00
1551799b88 fix: Lock pydantic to fix cloudflare errors
All checks were successful
Build Docker / BuildImage (push) Successful in 1m34s
2024-12-03 13:32:47 +11:00
4ab0db973f feat: Update print css for resume
All checks were successful
Build Docker / BuildImage (push) Successful in 1m57s
2024-12-03 12:23:55 +11:00
a3a2748d15 feat: Add PYUSD SOL and ETH tokens
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2024-12-02 12:03:42 +11:00
ce8897d578 feat: Add solana action version and chain headers
All checks were successful
Build Docker / BuildImage (push) Successful in 1m40s
2024-11-19 15:18:10 +11:00
637562f920 feat: Add rss endpoints
All checks were successful
Build Docker / BuildImage (push) Successful in 1m42s
2024-11-12 14:08:30 +11:00
42aff1f455 feat: Add api routes for email and other basic info
All checks were successful
Build Docker / BuildImage (push) Successful in 39s
2024-10-31 21:11:13 +11:00
855f6b3c99 feat: Update BTC lightning address
All checks were successful
Build Docker / BuildImage (push) Successful in 1m46s
2024-10-24 10:52:00 +11:00
8a50ae7e32 feat: Add latest now page
All checks were successful
Build Docker / BuildImage (push) Successful in 1m35s
2024-10-22 17:41:06 +11:00
1a3572e64c feat: Add latest now page
All checks were successful
Build Docker / BuildImage (push) Successful in 1m20s
2024-10-15 17:48:24 +11:00
ad6e3fe9d8 fix: Update qr code function
All checks were successful
Build Docker / BuildImage (push) Successful in 1m32s
2024-10-09 16:50:40 +11:00
99b63592d0 fix: Add null check for headers
All checks were successful
Build Docker / BuildImage (push) Successful in 28s
2024-10-08 19:03:02 +11:00
6c004d14bd feat: Add now json endpoint
All checks were successful
Build Docker / BuildImage (push) Successful in 39s
2024-10-07 18:03:04 +11:00
a6b488d1a6 fix: Update now.rss to include better descriptions
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2024-10-07 17:44:42 +11:00
0cef259ecc feat: Add now page rss
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-10-07 17:39:25 +11:00
150bc17ed4 feat: Add Handypedia updates to latest now page
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2024-10-07 17:22:58 +11:00
c9e9c9be46 feat: Add new now page for 7_10_24
All checks were successful
Build Docker / BuildImage (push) Successful in 1m13s
2024-10-07 17:17:20 +11:00
90d8dc3428 feat: Add now to sitemap 2024-10-07 17:04:54 +11:00
863d11cffd fix: Add route for favicon.ico 2024-10-05 20:04:38 +10:00
b3d965d220 feat: Update sitemap and WVAC podcast link
All checks were successful
Build Docker / BuildImage (push) Successful in 49s
2024-10-02 12:23:57 +10:00
496205c6b4 feat: Add download option for PGP public key
All checks were successful
Build Docker / BuildImage (push) Successful in 43s
2024-09-30 16:19:49 +10:00
9552df4b4e feat: Add now page for 27_09
All checks were successful
Build Docker / BuildImage (push) Successful in 1m35s
2024-09-27 13:34:26 +10:00
9881584cdb fix: Update check for project images to correctly display
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-09-11 21:03:11 +10:00
867583d30c feat: Update resume
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-09-11 20:57:10 +10:00
125768b01e feat: Update manifest colour
All checks were successful
Build Docker / BuildImage (push) Successful in 1m24s
2024-09-11 17:25:55 +10:00
320538ad17 fix: Set the now image to have a max width of 95%
All checks were successful
Build Docker / BuildImage (push) Successful in 1m38s
2024-09-11 17:17:46 +10:00
56a5539106 feat: Add Now page 7 Sep
All checks were successful
Build Docker / BuildImage (push) Successful in 1m41s
2024-09-07 16:14:17 +10:00
56b1048622 feat: Add default nostr name and fix loading js
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-09-03 14:05:42 +10:00
3e4d5c2633 fix: Use header.get instead of user agent
All checks were successful
Build Docker / BuildImage (push) Successful in 44s
2024-09-02 19:56:57 +10:00
cdb7eb86a5 feat: Check if user_agent is a crawler before showing loading page
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-09-02 19:49:32 +10:00
6de2518f1f feat: Add APT, BCH, DASH and TRX coins
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
2024-08-27 10:21:40 +10:00
34580eeab4 feat: Remove unused nft data
All checks were successful
Build Docker / BuildImage (push) Successful in 42s
2024-08-24 10:51:53 +10:00
0dd03e544c feat: Add profile nft metadata
All checks were successful
Build Docker / BuildImage (push) Successful in 42s
2024-08-24 10:24:20 +10:00
84a6310189 feat: Add Woodburn ico favicon
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
2024-08-21 21:35:11 +10:00
68f8c55817 feat: Add option to get custom message from NC config
All checks were successful
Build Docker / BuildImage (push) Successful in 44s
2024-08-21 17:42:31 +10:00
9c0d592a24 feat: Add searching for files before returning a 404
All checks were successful
Build Docker / BuildImage (push) Successful in 42s
2024-08-21 11:49:03 +10:00
56349561f9 feat: Add better error messages on crypto selector
All checks were successful
Build Docker / BuildImage (push) Successful in 43s
2024-08-20 16:38:11 +10:00
702282d11f feat: Add Noble to wallet addresses
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2024-08-20 16:23:16 +10:00
46856a9399 fix: Update cloudflare to use new API
All checks were successful
Build Docker / BuildImage (push) Successful in 41s
2024-08-20 13:02:45 +10:00
eecf9b8db8 fix: Update TON address to use Keystone address
All checks were successful
Build Docker / BuildImage (push) Successful in 38s
2024-08-20 10:33:02 +10:00
1c891d971f feat: Update timing for profile hover blur
All checks were successful
Build Docker / BuildImage (push) Successful in 42s
2024-08-15 18:53:15 +10:00
6dfa664807 feat: Update the style of the clock to be more readable
All checks were successful
Build Docker / BuildImage (push) Successful in 43s
2024-08-15 18:37:02 +10:00
5a27be5a3c feat: Add meeting link
All checks were successful
Build Docker / BuildImage (push) Successful in 39s
Note this link is not fully integrated with calendar yet
2024-08-15 14:47:30 +10:00
8687daecfd fix: Update tooltip to say copied when you copy a crypto address
All checks were successful
Build Docker / BuildImage (push) Successful in 46s
2024-08-15 14:29:36 +10:00
6b5fe4bc2f fix: Don't show loading animation on mobiles
All checks were successful
Build Docker / BuildImage (push) Successful in 53s
2024-08-15 14:18:26 +10:00
c86bae36ad fix: Remove overflow on projects page
All checks were successful
Build Docker / BuildImage (push) Successful in 1m35s
2024-08-15 14:12:00 +10:00
ef40e8078c fix: Update social icons to work on small mobiles
All checks were successful
Build Docker / BuildImage (push) Successful in 59s
2024-08-15 14:02:35 +10:00
80fc1cdc4d feat: Add clock to home page
All checks were successful
Build Docker / BuildImage (push) Successful in 47s
2024-08-15 13:43:35 +10:00
331de40dfd fix: Update address max width to stop overflow on mobile
All checks were successful
Build Docker / BuildImage (push) Successful in 43s
2024-08-07 09:57:23 +10:00
f3ee6607e7 feat: Add now page for 5_8
All checks were successful
Build Docker / BuildImage (push) Successful in 1m45s
2024-08-05 14:27:53 +10:00
eec66b13ca feat: Add crypto address verifications
All checks were successful
Build Docker / BuildImage (push) Successful in 35s
2024-07-18 14:30:12 +10:00
9fc218feb1 feat: Add now page
All checks were successful
Build Docker / BuildImage (push) Successful in 4m37s
2024-07-15 12:16:56 +10:00
9ed68d1f0b fix: Manually add cors options header
All checks were successful
Build Docker / BuildImage (push) Successful in 37s
2024-07-10 19:52:43 +10:00
80cc8022eb feat: Add options using flask cors
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2024-07-10 19:20:27 +10:00
6bf45b9c2b fix: Add headers to options response
All checks were successful
Build Docker / BuildImage (push) Successful in 38s
2024-07-10 18:03:43 +10:00
860d070c55 feat: Add options route
All checks were successful
Build Docker / BuildImage (push) Successful in 44s
2024-07-10 17:59:47 +10:00
7e49d23736 fix: Add versions to requirements
All checks were successful
Build Docker / BuildImage (push) Successful in 1m12s
2024-07-03 15:24:41 +10:00
69fb34c2ba fix: Update to newest version of solana
All checks were successful
Build Docker / BuildImage (push) Successful in 34s
2024-07-03 15:07:27 +10:00
6664de6c07 feat: Add solana blinks
All checks were successful
Build Docker / BuildImage (push) Successful in 1m36s
2024-07-03 14:59:30 +10:00
b93515ff32 feat: Add XRP toml
All checks were successful
Build Docker / BuildImage (push) Successful in 34s
2024-07-02 13:48:16 +10:00
230042cc7b fix: Update dependencies
All checks were successful
Build Docker / BuildImage (push) Successful in 35s
2024-07-01 13:17:50 +10:00
98acc8543c fix: Try to fix error in requirements
All checks were successful
Build Docker / BuildImage (push) Successful in 1m11s
2024-07-01 13:05:20 +10:00
eea21cea1e fix: Don't show loader to google crawler
All checks were successful
Build Docker / BuildImage (push) Successful in 1m10s
2024-07-01 11:37:19 +10:00
fb8136f3b6 feat: Update default coins
All checks were successful
Build Docker / BuildImage (push) Successful in 34s
2024-06-27 12:11:02 +10:00
e84c39030d feat: Add XLM and update ADA address to use standard derivation
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2024-06-25 21:45:21 +10:00
75308cb264 feat: Add now page
All checks were successful
Build Docker / BuildImage (push) Successful in 45s
2024-06-24 13:47:11 +10:00
9b81a0bf18 fix: Added missing HNS assets for Handypedia and other HNS sites
All checks were successful
Build Docker / BuildImage (push) Successful in 49s
2024-06-20 17:22:42 +10:00
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
65dc5991c0 feat: Reorganise assets
All checks were successful
Build Docker / BuildImage (push) Successful in 32s
2024-06-17 21:29:57 +10:00
05be03225d feat: Add now page for 17_06
All checks were successful
Build Docker / BuildImage (push) Successful in 53s
2024-06-17 16:59:12 +10:00
52dd703fa6 feat: Add new now page
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2024-06-06 21:00:15 +10:00
e40ec28509 fix: Set background to black on now pages
All checks were successful
Build Docker / BuildImage (push) Successful in 36s
2024-05-28 14:49:21 +10:00
1cb8f3ea65 fix: Remove old TOR hidden service header
All checks were successful
Build Docker / BuildImage (push) Successful in 59s
2024-05-28 14:40:21 +10:00
922a0f5d47 feat: Add now page for 28th May
Some checks failed
Build Docker / BuildImage (push) Has been cancelled
2024-05-28 14:39:42 +10:00
94c32a3b30 feat: Add new now page
All checks were successful
Build Docker / Build Image (push) Successful in 37s
2024-05-20 14:31:57 +10:00
3024c3de32 fix: Podcast urls being misread
All checks were successful
Build Docker / Build Image (push) Successful in 43s
2024-05-19 22:46:32 +10:00
d936a8f96b fix: Remove old podcast viewer
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2024-05-19 22:37:13 +10:00
1eb32828ec feat: Add podcast xml
All checks were successful
Build Docker / Build Image (push) Successful in 50s
2024-05-19 22:05:03 +10:00
bf6236e60b feat: Add podcast home page
All checks were successful
Build Docker / Build Image (push) Successful in 50s
2024-05-19 21:53:10 +10:00
3bf9e043fe feat: Add sui
All checks were successful
Build Docker / Build Image (push) Successful in 1m19s
2024-04-25 10:51:38 +10:00
efc359459c feat: Add nostr.json route 2024-04-21 12:34:47 +10:00
095f74773c fix: Cleanup the ui for invalid cryptos 2024-04-19 20:23:22 +10:00
d58a6196eb feat: Add btc lightning to crypto options 2024-04-19 20:15:10 +10:00
a24a6b599e feat: Add near domain 2024-04-19 19:35:05 +10:00
f4409415d9 fix: Update now 2024-04-19 11:41:21 +10:00
d17b528baf feat: Add more coins 2024-04-19 11:28:11 +10:00
7f4f589d5b featL Add more coins and tokens and catch error with token 2024-04-16 12:56:16 +10:00
61d33381e8 feat: Add signal to socials list 2024-04-16 12:24:15 +10:00
3f1225a03a feat: Add more donation options 2024-04-15 21:01:43 +10:00
ad95fe796b feat: Add CORS
All checks were successful
Build Docker / Build Image (push) Successful in 42s
2024-02-28 17:36:18 +11:00
9e078387d8 feat: Add wvac logos
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2024-02-28 12:59:31 +11:00
fb81b24839 feat: Added now page for 25 Feb 24
All checks were successful
Build Docker / Build Image (push) Successful in 24s
2024-02-25 15:06:12 +11:00
f4295107a4 feat: Add now old page for previous now pages
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2024-02-23 21:19:00 +11:00
35e4ae222c feat: Add date to now page 2024-02-23 17:27:43 +11:00
12a51bbb54 fix: use global variable to stop issues
All checks were successful
Build Docker / Build Image (push) Successful in 21s
2024-02-22 16:43:45 +11:00
6d47ddf89f fix: Async hns script to fix site loading
All checks were successful
Build Docker / Build Image (push) Successful in 25s
2024-02-22 16:40:52 +11:00
2d56c89765 fix: Now page social embed
All checks were successful
Build Docker / Build Image (push) Successful in 22s
2024-02-18 22:01:34 +11:00
21aec406df feat: Added first now post
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-18 21:47:38 +11:00
6eb6299b3a fix: Update token name to have space
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-18 19:52:36 +11:00
c3f2714929 feat: Update metadata
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-18 18:48:00 +11:00
e98edf3de9 fix: Move wdbrn metadata to assets
All checks were successful
Build Docker / Build Image (push) Successful in 20s
2024-02-18 12:53:57 +11:00
cadece357b fix: Return minetype json
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2024-02-18 12:51:59 +11:00
da42f35ff0 feat: Add WDBRN token manifest
All checks were successful
Build Docker / Build Image (push) Successful in 23s
2024-02-18 12:50:17 +11:00
dcb07799e3 feat: Update website and socials
All checks were successful
Build Docker / Build Image (push) Successful in 22s
2024-02-13 14:21:30 +11:00
ece562caba feat: Added white HNS logos
All checks were successful
Build Docker / Build Image (push) Successful in 24s
2024-02-12 19:42:43 +11:00
23d44038ef feat: Add ico icon
All checks were successful
Build Docker / Build Image (push) Successful in 46s
2024-02-12 19:34:54 +11:00
31f93005b9 feat: Updated the rest of the HNS logos
All checks were successful
Build Docker / Build Image (push) Successful in 24s
2024-02-12 19:32:56 +11:00
8217a7fcd6 fix: Remove old files
All checks were successful
Build Docker / Build Image (push) Successful in 23s
2024-02-12 19:27:18 +11:00
00ac9881c3 fix: Move to shorter path
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2024-02-12 19:17:50 +11:00
1f54a882d8 feat: Add handshake favicons
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2024-02-12 18:44:27 +11:00
7a9fb9e08b feat: Add linkr and HNSDoH to projects
All checks were successful
Build Docker / Build Image (push) Successful in 34s
2024-01-08 02:31:00 +11:00
9305442c4b feat: Add acme server for HNSDoH
All checks were successful
Build Docker / Build Image (push) Successful in 47s
2023-12-22 15:07:24 +11:00
d67da4ad06 feat: Ad umami
All checks were successful
Build Docker / Build Image (push) Successful in 39s
2023-12-20 15:22:15 +11:00
d094784188 feat: Updated websites section
All checks were successful
Build Docker / Build Image (push) Successful in 35s
2023-12-18 15:02:13 +11:00
c2cd53dc78 feat: Added some projects and resume info
All checks were successful
Build Docker / Build Image (push) Successful in 47s
2023-12-18 11:24:41 +11:00
89ce365bd0 feat: Add pointer to downtime div
All checks were successful
Build Docker / Build Image (push) Successful in 38s
2023-12-16 16:33:31 +11:00
e6708dceaa feat: Add selfhosted tracking
All checks were successful
Build Docker / Build Image (push) Successful in 36s
2023-12-13 12:19:59 +11:00
2e463c626d fix: Typo with old address method
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2023-12-05 21:54:18 +11:00
797db5e1a9 feat: Add a manual address to stop issues with address index
All checks were successful
Build Docker / Build Image (push) Successful in 37s
2023-12-05 18:35:08 +11:00
12dd3dfedc feat: Set hip address to only update when the server restarts
All checks were successful
Build Docker / Build Image (push) Successful in 35s
2023-12-05 17:35:19 +11:00
682e732643 fix: Update Woodburn Reg logo for mobile
All checks were successful
Build Docker / Build Image (push) Successful in 28s
2023-11-08 12:39:06 +11:00
33158bdb57 feat: Add servers page
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2023-11-06 11:27:09 +11:00
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
699e9988f2 fix: Hide downtime notification on small screens
All checks were successful
Build Docker / Build Image (push) Successful in 28s
2023-11-03 14:14:41 +11:00
21bcb0464b feat: Add downtime notification
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-03 14:11:34 +11:00
6efcb43d23 fix: Remove volume mount
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-03 12:11:49 +11:00
dcbe034d2f feat: Add current project
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-03 11:51:10 +11:00
5f42fc3d8c Merge branch 'feature/python_server' into develop
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-02 23:52:48 +11:00
92f72accf9 fix: Hide onion address on mobile to stop scroll issue
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-02 23:30:06 +11:00
f419e28a5a fix: Update navbar on mobile
All checks were successful
Build Docker / Build Image (push) Successful in 28s
2023-11-02 23:22:24 +11:00
519d241b31 feat: Add copy wallet on click
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-02 22:53:08 +11:00
f1febd7823 feat: Use dynamic address in index
All checks were successful
Build Docker / Build Image (push) Successful in 29s
2023-11-02 22:12:15 +11:00
9dee5c24e4 feat: Get hip2 address from docker hip2server
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2023-11-02 22:05:48 +11:00
20d59f7820 fix: Set HNS address cache to 7 days
All checks were successful
Build Docker / Build Image (push) Successful in 34s
2023-11-02 21:53:23 +11:00
66acd69bec feat: Add wallet addresses
All checks were successful
Build Docker / Build Image (push) Successful in 37s
2023-11-02 21:51:49 +11:00
f001691283 fix: Old generator path
All checks were successful
Build Docker / Build Image (push) Successful in 26s
2023-11-02 21:37:18 +11:00
607e51c481 fix: Password generator location
All checks were successful
Build Docker / Build Image (push) Successful in 34s
2023-11-02 21:27:38 +11:00
1855e18315 fix: Add routes for handshake redirect scripts
All checks were successful
Build Docker / Build Image (push) Successful in 30s
2023-11-02 21:13:59 +11:00
0b6ba921ce feat: Add new backend
All checks were successful
Build Docker / Build Image (push) Successful in 36s
2023-11-02 21:06:43 +11:00
d32dcc701b fix: Update some routes
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2023-11-02 20:45:36 +11:00
5bed9dbbc8 feat: Add python server
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2023-11-02 20:26:15 +11:00
398 changed files with 11747 additions and 7419 deletions

33
.dockerignore Normal file
View File

@@ -0,0 +1,33 @@
# Bytecode and virtualenvs
__pycache__/
*.pyc
*.pyo
.venv/
.vscode/
.vs/
.ruff_check/
.env
# Pycache in subdirectories
**/__pycache__/
**/*.pyc
**/*.pyo
# Git and CI
.git/
.gitea/
testing/
tests/
# Build and docs
Dockerfile
NathanWoodburn.bsdesign
LICENSE.txt
README.md
# Development caches
*.tmp
*.log

View File

@@ -0,0 +1,41 @@
name: Build Docker
run-name: Build Docker Images
on:
push:
jobs:
BuildImage:
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

View File

@@ -0,0 +1,18 @@
name: Check Code Quality
run-name: Ruff CI
on:
push:
jobs:
RuffCheck:
runs-on: [ubuntu-latest, amd]
steps:
- uses: actions/checkout@v2
- name: Set up Python
run: |
apt update
apt install -y python3 python3-pip
- name: Install Ruff
run: pip install ruff
- name: Run Ruff
run: ruff check .

8
.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
__pycache__/
.env
.vs/
.venv/
*.tmp
testing/

1
.python-version Normal file
View File

@@ -0,0 +1 @@
3.13

View File

@@ -1,6 +0,0 @@
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}

Binary file not shown.

View File

@@ -0,0 +1,8 @@
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "au.woodburn.nathan",
"sha256_cert_fingerprints": ["D8:97:22:C4:C5:AA:AC:6D:7B:57:F0:19:FF:A1:E7:2A:92:71:EE:CF:1F:E1:AF:5A:87:22:0D:00:76:9D:83:80"]
}
}]

View File

@@ -0,0 +1,6 @@
I hereby confirm that I am the owner of the Bitcoin address bc1qzsp3wc2nwayl8awun57tggjn92w0awp9mzsn90.
Nathan.Woodburn/
--------------------
HzEsSV17nmbMwnz55sW6jW/AnmYxW0TAdgiJsYRUyWs7WjBaGlzrvXkH1R8qosQXSvQ1nZNe9dS5SUCZtbNZzuM=
--------------------
You can verify this signature by pasting it into a signature verification tool such as https://www.verifybitcoinmessage.com/. Don't forget to remove trailing newlines.

View File

@@ -0,0 +1,6 @@
I hereby confirm that I am the owner of the EVM address 0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e.
Nathan.Woodburn/
--------------------
0x254919e1f2035a4f04614da9e1fbc1f45dab31b03b0baf1bb3325a9f9e437f1f787b99ebc6716b822fc190284c2c678054c91835492ff0df239ec60f6166587f1c
--------------------
You can verify this signature by pasting it into a signature verification tool such as https://etherscan.io/verifiedSignatures

View File

@@ -0,0 +1,13 @@
I hereby confirm that I am the owner of the SOL address AJsPEEe6S7XSiVcdZKbeV8GRp1QuhFUsG8mLrqL4XgiU.
Nathan.Woodburn/
--------------------
[71,63,207,190,90,17,145,39,4,98,110,176,86,140,143,107,237,96,24,43,2,116,21,70,47,98,192,24,193,210,89,220,30,128,219,105,9,35,146,188,216,143,164,32,255,44,146,249,153,33,54,214,203,159,80,26,107,165,217,240,153,61,39,0]
--------------------
0x473fcfbe5a11912704626eb0568c8f6bed60182b027415462f62c018c1d259dc1e80db69092392bcd88fa420ff2c92f9992136d6cb9f501a6ba5d9f0993d2700
--------------------
2Rd2EkAUwC8u4DtCZ5BXTkJEvWxozrxmcEzn7VbJFFbL81YLQngH9V1bTu3vivaQz7ZGqs5YtpPWxomsYeE7Ws6F
--------------------
Rz/PvloRkScEYm6wVoyPa+1gGCsCdBVGL2LAGMHSWdwegNtpCSOSvNiPpCD/LJL5mSE21sufUBprpdnwmT0nAA==
--------------------
You can verify this signature by pasting it into a signature verification tool such as https://amacar.github.io/solana-tools/#verify-message
Please note I have included various formats for the signature to make it easier to verify.

View File

@@ -0,0 +1,32 @@
{
"ADA": "Cardano (ADA)",
"ATOM": "Cosmos (ATOM)",
"AVAX": "Avalanche (AVAX)",
"BNB": "Binance (BNB)",
"BTC": "Bitcoin (BTC)",
"CRO": "Crypto.com (CRO)",
"DOT": "Polkadot (DOT)",
"ETH": "Ethereum (ETH)",
"HNS": "Handshake (HNS)",
"MATIC": "Polygon (MATIC)",
"SOL": "Solana (SOL)",
"XMR": "Monero (XMR)",
"XRP": "Ripple (XRP)",
"OSMO": "Osmosis (OSMO)",
"STARS": "Stargaze (STARS)",
"INJ": "Injective (INJ)",
"LIKE": "LikeCoin (LIKE)",
"SCRT": "Secret Network (SCRT)",
"LTC": "Litecoin (LTC)",
"DOGE": "Dogecoin (DOGE)",
"ALGO": "Algorand (ALGO)",
"TON": "Toncoin (TON)",
"OP": "Optimism (OP)",
"IAA": "IRIS (IAA)",
"NEAR": "NEAR Protocol (NEAR)",
"KAS": "Kasper (KAS)",
"XLM": "Stellar (XLM)",
"APT": "Aptos (APT)",
"TRX": "Tron (TRX)",
"BCH": "Bitcoin Cash (BCH)"
}

View File

@@ -0,0 +1,32 @@
{
"ETH":"woodburn.au",
"HNS":"nathan.woodburn",
"SOL":"woodburn.sol",
"ADA": "$nathanwoodburn",
"MATIC": "woodburn.au",
"BNB": "woodburn.au",
"INJ": "woodburn.sol",
"ATOM": "woodburn_nathan.cosmos",
"OSMO": "woodburn_nathan.osmo",
"SCRT": "woodburn_nathan.secret",
"AKASH": "woodburn_nathan.akash",
"SIF": "woodburn_nathan.sif",
"SHENTU": "woodburn_nathan.shentu",
"IAA": "woodburn_nathan.iaa",
"REGEN": "woodburn_nathan.regen",
"PERSISTENCE": "woodburn_nathan.persistence",
"BOSTROM": "woodburn_nathan.bostrom",
"JUNO": "woodburn_nathan.juno",
"AXELAR": "woodburn_nathan.axelar",
"SOMM": "woodburn_nathan.somm",
"UMEE": "woodburn_nathan.umee",
"GRAVITY": "woodburn_nathan.gravity",
"STRIDE": "woodburn_nathan.stride",
"KAVA": "woodburn_nathan.kava",
"QUICK": "woodburn_nathan.quick",
"TERRA": "woodburn_nathan.terra",
"OMNIFLIX": "woodburn_nathan.omniflix",
"LIKE": "woodburn_nathan.like",
"CHIHUAHUA": "woodburn_nathan.chihuahua",
"NEAR": "woodburn.near"
}

View File

@@ -0,0 +1,88 @@
[
{
"symbol": "USDT",
"name": "Tether",
"chain": "ETH"
},
{
"symbol": "USDT",
"name": "Tether",
"chain": "SOL"
},
{
"symbol": "USDC",
"name": "USDC",
"chain": "ETH"
},
{
"symbol": "USDC",
"name": "USDC",
"chain": "SOL"
},
{
"symbol": "USDC",
"name": "USDC",
"chain": "NOBLE"
},
{
"symbol": "PYUSD",
"name": "PayPal USD",
"chain": "ETH"
},
{
"symbol": "PYUSD",
"name": "PayPal USD",
"chain": "SOL"
},
{
"symbol": "WDBRN",
"name": "Woodburn",
"chain": "SOL"
},
{
"symbol": "DAI",
"name": "DAI Stablecoin",
"chain": "ETH"
},
{
"symbol": "RAY",
"name": "Raydium",
"chain": "SOL"
},
{
"symbol": "UNI",
"name": "Uniswap",
"chain": "ETH"
},
{
"symbol": "AAVE",
"name": "AAVE",
"chain": "ETH"
},
{
"symbol": "1INCH",
"name": "1INCH",
"chain": "ETH"
},
{
"symbol": "PSP",
"name": "ParaSwap",
"chain": "ETH"
},
{
"symbol": "CAKE",
"name": "PancakeSwap",
"chain": "BNB"
},
{
"symbol": "BTC",
"name": "Bitcoin Lightning",
"chain": "null",
"address": "thinbadger6@primal.net"
},
{
"symbol": "stWDBRN",
"name": "Woodburn Vault",
"chain": "SOL"
}
]

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

@@ -0,0 +1 @@
addr1qy5l7vmx9l2uexv44hzjak4zmwecee4hht0k6shtk5jh7cjzu99z8vx5n467fquzradx7p42grdylv3zq2cgfw0f32fs443hxs

View File

@@ -0,0 +1 @@
akash1ugraczuyfmxy8k38nps4fu7e5derryzxpk2n77

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

@@ -0,0 +1 @@
OUWNGLRLAN56VTNI3F4EKISPDIFIF2HMCV3OYS3DER7WXF2LCFMEV2TWPI

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

@@ -0,0 +1 @@
0x372b3c513d149e5511912eba22e31f07d2b289e20ba84b2e0b7756e7a00295c3

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

@@ -0,0 +1 @@
cosmos1ugraczuyfmxy8k38nps4fu7e5derryzxvd858y

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

@@ -0,0 +1 @@
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e

View File

@@ -0,0 +1 @@
axelar1ugraczuyfmxy8k38nps4fu7e5derryzxgr3uv9

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

@@ -0,0 +1 @@
qpsgs9daa6e2mn4v0u02pfunsme68a5uayn7e8knug

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

@@ -0,0 +1 @@
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e

View File

@@ -0,0 +1 @@
bostrom1ugraczuyfmxy8k38nps4fu7e5derryzx07n8er

View File

@@ -1 +1 @@
bc1qhs94zzcw64qnwq4hvk056rwxwvgrkd7tq7d4xw bc1qzsp3wc2nwayl8awun57tggjn92w0awp9mzsn90

View File

@@ -0,0 +1 @@
chihuahua1ugraczuyfmxy8k38nps4fu7e5derryzx0c26xx

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

@@ -0,0 +1 @@
Xpr5auWs1waBmWT3XsWXwzu8Di32x8VfH2

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

@@ -0,0 +1 @@
DCrBQ3zoy3jBWwwT95tyjBVjYFXLgKS4MC

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

@@ -0,0 +1 @@
13KSjM7rxFu7SxAuqcNZ76wyjhfuV4Kx8pWfqpFAykSQeEn3

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

@@ -0,0 +1 @@
nwoodburn111

View File

@@ -0,0 +1 @@
gravity1ugraczuyfmxy8k38nps4fu7e5derryzxga4vzv

View File

@@ -1 +1 @@
hs1qk4sq6mk3kcshp02xgchukv09m38czdnq5qv76w hs1qh7uzytf2ftwkd9dmjjs7az9qfver5m7dd7x4ej

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

@@ -0,0 +1 @@
iaa1ugraczuyfmxy8k38nps4fu7e5derryzxe08994

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

@@ -0,0 +1 @@
inj1dj6t8xlvyw5jrjdzp5rphutageqtp5u7wflgv9

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

@@ -0,0 +1 @@
juno1ugraczuyfmxy8k38nps4fu7e5derryzx6ly0qc

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

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

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

@@ -0,0 +1 @@
kava1ugraczuyfmxy8k38nps4fu7e5derryzxscnf3r

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

@@ -0,0 +1 @@
like1ugraczuyfmxy8k38nps4fu7e5derryzxl3mkyl

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

@@ -0,0 +1 @@
ltc1qx79yxm2gwnsrch925343hg3zt3r085x725a0tw

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

@@ -0,0 +1 @@
3b06b5e91361739aed92707e888fbbd33f97b24a8a3f8fdd54a2c7e7fd7082a3

View File

@@ -0,0 +1 @@
noble1ugraczuyfmxy8k38nps4fu7e5derryzxywjul2

View File

@@ -0,0 +1 @@
omniflix1ugraczuyfmxy8k38nps4fu7e5derryzx3nkds6

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

@@ -0,0 +1 @@
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e

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

@@ -0,0 +1 @@
osmo1ugraczuyfmxy8k38nps4fu7e5derryzxyk5y3k

View File

@@ -0,0 +1 @@
persistence1ugraczuyfmxy8k38nps4fu7e5derryzxzpp8fq

View File

@@ -0,0 +1 @@
quick1ugraczuyfmxy8k38nps4fu7e5derryzx8fhx7k

View File

@@ -0,0 +1 @@
regen1ugraczuyfmxy8k38nps4fu7e5derryzxn0vg3q

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

@@ -0,0 +1 @@
secret1ugraczuyfmxy8k38nps4fu7e5derryzxwgna6c

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

@@ -0,0 +1 @@
sent1ugraczuyfmxy8k38nps4fu7e5derryzxhk3drt

View File

@@ -0,0 +1 @@
shentu1ugraczuyfmxy8k38nps4fu7e5derryzxyerd4e

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

@@ -0,0 +1 @@
sif1ugraczuyfmxy8k38nps4fu7e5derryzxfsgzg0

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

@@ -0,0 +1 @@
somm1ugraczuyfmxy8k38nps4fu7e5derryzxq3gckw

View File

@@ -0,0 +1 @@
stars1ugraczuyfmxy8k38nps4fu7e5derryzxc3sfv4

View File

@@ -0,0 +1 @@
stride1ugraczuyfmxy8k38nps4fu7e5derryzx0x8gng

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

@@ -0,0 +1 @@
0x9e14ca8b9bf9661fd8a67c2c147bb1f7ea81eb38eb10938b6a9cecb54419e3b2

View File

@@ -0,0 +1 @@
terra1ugraczuyfmxy8k38nps4fu7e5derryzx2fa59y

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

@@ -0,0 +1 @@
UQDqC1B0a3S9th8ncaQHYJ689dnu9c0zJXeV727UMak9WbBm

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

@@ -0,0 +1 @@
THjwavxGZahj1scVw75fhGP2HCAcjNxwsK

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

@@ -0,0 +1 @@
umee1ugraczuyfmxy8k38nps4fu7e5derryzx7m6trk

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

@@ -0,0 +1 @@
GCK4PA53V26MNP6U57EPK7EA42TBQMGJ4TUPMUPLLQNPZ64YX3XVLZGQ

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

@@ -0,0 +1 @@
rKzdnYvwDyeki5VCgMwjuofjBjAbg3DJnB

View File

@@ -0,0 +1,12 @@
[METADATA]
modified = 2024-07-02T00:00:00.000Z
expires = 2050-07-02T00:00:00.000Z
[[ACCOUNTS]]
address = "rKzdnYvwDyeki5VCgMwjuofjBjAbg3DJnB"
desc = "Nathan.Woodburn/ (Twitter: @nathanwoodburn)"
[[PRINCIPALS]]
name = "Nathan Woodburn"
email = "xrp@nathan.woodburn.au"
social_1 = "https://nathan.woodburn.au"

93
403.css
View File

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

View File

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

View File

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

446
404.js
View File

@@ -1,446 +0,0 @@
;(function() {
"use strict";
// General
var canvas,
screen,
gameSize,
game;
// Assets
var invaderCanvas,
invaderMultiplier,
invaderSize = 20,
initialOffsetInvader,
invaderAttackRate,
invaderSpeed,
invaderSpawnDelay = 250;
// Counter
var i = 0,
kills = 0,
spawnDelayCounter = invaderSpawnDelay;
var invaderDownTimer;
// Text
var blocks = [
[3, 4, 8, 9, 10, 15, 16],
[2, 4, 7, 11, 14, 16],
[1, 4, 7, 11, 13, 16],
[1, 2, 3, 4, 5, 7, 11, 13, 14, 15, 16, 17],
[4, 7, 11, 16],
[4, 8, 9, 10, 16]
];
// Game Controller
// ---------------
var Game = function() {
this.level = -1;
this.lost = false;
this.player = new Player();
this.invaders = [];
this.invaderShots = [];
if (invaderDownTimer === undefined) {
invaderDownTimer = setInterval(function() {
for (i = 0; i < game.invaders.length; i++) game.invaders[i].move();
}, 1000 - (this.level * 1.8));
};
}
Game.prototype = {
update: function() {
// Next level
if (game.invaders.length === 0) {
spawnDelayCounter += 1;
if (spawnDelayCounter < invaderSpawnDelay) return;
this.level += 1;
invaderAttackRate -= 0.002;
invaderSpeed += 10;
game.invaders = createInvaders();
spawnDelayCounter = 0;
}
if (!this.lost) {
// Collision
game.player.projectile.forEach(function(projectile) {
game.invaders.forEach(function(invader) {
if (collides(projectile, invader)) {
invader.destroy();
projectile.active = false;
}
});
});
this.invaderShots.forEach(function(invaderShots) {
if (collides(invaderShots, game.player)) {
game.player.destroy();
}
});
for (i = 0; i < game.invaders.length; i++) game.invaders[i].update();
}
// Don't stop player & projectiles.. they look nice
game.player.update();
for (i = 0; i < game.invaderShots.length; i++) game.invaderShots[i].update();
this.invaders = game.invaders.filter(function(invader) {
return invader.active;
});
},
draw: function() {
if (this.lost) {
screen.fillStyle = "rgba(0, 0, 0, 0.03)";
screen.fillRect(0, 0, gameSize.width, gameSize.height);
screen.font = "55px Lucida Console";
screen.textAlign = "center";
screen.fillStyle = "white";
screen.fillText("You lost", gameSize.width / 2, gameSize.height / 2);
screen.font = "20px Lucida Console";
screen.fillText("Points: " + kills, gameSize.width / 2, gameSize.height / 2 + 30);
} else {
screen.clearRect(0, 0, gameSize.width, gameSize.height);
screen.font = "10px Lucida Console";
screen.textAlign = "right";
screen.fillText("Points: " + kills, gameSize.width, gameSize.height - 12);
}
screen.beginPath();
var i;
this.player.draw();
if (!this.lost)
for (i = 0; i < this.invaders.length; i++) this.invaders[i].draw();
for (i = 0; i < this.invaderShots.length; i++) this.invaderShots[i].draw();
screen.fill();
},
invadersBelow: function(invader) {
return this.invaders.filter(function(b) {
return Math.abs(invader.coordinates.x - b.coordinates.x) === 0 &&
b.coordinates.y > invader.coordinates.y;
}).length > 0;
}
};
// Invaders
// --------
var Invader = function(coordinates) {
this.active = true;
this.coordinates = coordinates;
this.size = {
width: invaderSize,
height: invaderSize
};
this.patrolX = 0;
this.speedX = invaderSpeed;
};
Invader.prototype = {
update: function() {
if (Math.random() > invaderAttackRate && !game.invadersBelow(this)) {
var projectile = new Projectile({
x: this.coordinates.x + this.size.width / 2,
y: this.coordinates.y + this.size.height - 5
}, {
x: 0,
y: 2
});
game.invaderShots.push(projectile);
}
},
draw: function() {
if (this.active) screen.drawImage(invaderCanvas, this.coordinates.x, this.coordinates.y);
},
move: function() {
if (this.patrolX < 0 || this.patrolX > 100) {
this.speedX = -this.speedX;
this.patrolX += this.speedX;
this.coordinates.y += this.size.height;
if (this.coordinates.y + this.size.height * 2 > gameSize.height) game.lost = true;
} else {
this.coordinates.x += this.speedX;
this.patrolX += this.speedX;
}
},
destroy: function() {
this.active = false;
kills += 1;
}
};
// Player
// ------
var Player = function() {
this.active = true;
this.size = {
width: 16,
height: 8
};
this.shooterHeat = -3;
this.coordinates = {
x: gameSize.width / 2 - (this.size.width / 2) | 0,
y: gameSize.height - this.size.height * 2
};
this.projectile = [];
this.keyboarder = new KeyController();
};
Player.prototype = {
update: function() {
for (var i = 0; i < this.projectile.length; i++) this.projectile[i].update();
this.projectile = this.projectile.filter(function(projectile) {
return projectile.active;
});
if (!this.active) return;
if (this.keyboarder.isDown(this.keyboarder.KEYS.LEFT) && this.coordinates.x > 0) this.coordinates.x -= 2;
else if (this.keyboarder.isDown(this.keyboarder.KEYS.RIGHT) && this.coordinates.x < gameSize.width - this.size.width) this.coordinates.x += 2;
if (this.keyboarder.isDown(this.keyboarder.KEYS.Space)) {
this.shooterHeat += 1;
if (this.shooterHeat < 0) {
var projectile = new Projectile({
x: this.coordinates.x + this.size.width / 2 - 1,
y: this.coordinates.y - 1
}, {
x: 0,
y: -7
});
this.projectile.push(projectile);
} else if (this.shooterHeat > 12) this.shooterHeat = -3;
} else {
this.shooterHeat = -3;
}
},
draw: function() {
if (this.active) {
screen.rect(this.coordinates.x, this.coordinates.y, this.size.width, this.size.height);
screen.rect(this.coordinates.x - 2, this.coordinates.y + 2, 20, 6);
screen.rect(this.coordinates.x + 6, this.coordinates.y - 4, 4, 4);
}
for (var i = 0; i < this.projectile.length; i++) this.projectile[i].draw();
},
destroy: function() {
this.active = false;
game.lost = true;
}
};
// Projectile
// ------
var Projectile = function(coordinates, velocity) {
this.active = true;
this.coordinates = coordinates;
this.size = {
width: 3,
height: 3
};
this.velocity = velocity;
};
Projectile.prototype = {
update: function() {
this.coordinates.x += this.velocity.x;
this.coordinates.y += this.velocity.y;
if (this.coordinates.y > gameSize.height || this.coordinates.y < 0) this.active = false;
},
draw: function() {
if (this.active) screen.rect(this.coordinates.x, this.coordinates.y, this.size.width, this.size.height);
}
};
// Keyboard input tracking
// -----------------------
var KeyController = function() {
this.KEYS = {
LEFT: 37,
RIGHT: 39,
Space: 32
};
var keyCode = [37, 39, 32];
var keyState = {};
var counter;
window.addEventListener('keydown', function(e) {
for (counter = 0; counter < keyCode.length; counter++)
if (keyCode[counter] == e.keyCode) {
keyState[e.keyCode] = true;
e.preventDefault();
}
});
window.addEventListener('keyup', function(e) {
for (counter = 0; counter < keyCode.length; counter++)
if (keyCode[counter] == e.keyCode) {
keyState[e.keyCode] = false;
e.preventDefault();
}
});
this.isDown = function(keyCode) {
return keyState[keyCode] === true;
};
};
// Other functions
// ---------------
function collides(a, b) {
return a.coordinates.x < b.coordinates.x + b.size.width &&
a.coordinates.x + a.size.width > b.coordinates.x &&
a.coordinates.y < b.coordinates.y + b.size.height &&
a.coordinates.y + a.size.height > b.coordinates.y;
}
function getPixelRow(rowRaw) {
var textRow = [],
placer = 0,
row = Math.floor(rowRaw / invaderMultiplier);
if (row >= blocks.length) return [];
for (var i = 0; i < blocks[row].length; i++) {
var tmpContent = blocks[row][i] * invaderMultiplier;
for (var j = 0; j < invaderMultiplier; j++) textRow[placer + j] = tmpContent + j;
placer += invaderMultiplier;
}
return textRow;
}
// Write Text
// -----------
function createInvaders() {
var invaders = [];
var i = blocks.length * invaderMultiplier;
while (i--) {
var j = getPixelRow(i);
for (var k = 0; k < j.length; k++) {
invaders.push(new Invader({
x: j[k] * invaderSize,
y: i * invaderSize
}));
}
}
return invaders;
}
// Start game
// ----------
window.addEventListener('load', function() {
var invaderAsset = new Image;
invaderAsset.onload = function() {
invaderCanvas = document.createElement('canvas');
invaderCanvas.width = invaderSize;
invaderCanvas.height = invaderSize;
invaderCanvas.getContext("2d").drawImage(invaderAsset, 0, 0);
// Game Creation
canvas = document.getElementById("space-invaders");
screen = canvas.getContext('2d');
initGameStart();
loop();
};
invaderAsset.src = "/assets/img/invader.gif";
});
window.addEventListener('resize', function() {
initGameStart();
});
document.getElementById('restart').addEventListener('click', function() {
initGameStart();
});
function initGameStart() {
if (window.innerWidth > 1200) {
screen.canvas.width = 1200;
screen.canvas.height = 500;
gameSize = {
width: 1200,
height: 500
};
invaderMultiplier = 3;
initialOffsetInvader = 420;
} else if (window.innerWidth > 800) {
screen.canvas.width = 900;
screen.canvas.height = 600;
gameSize = {
width: 900,
height: 600
};
invaderMultiplier = 2;
initialOffsetInvader = 280;
} else {
screen.canvas.width = 600;
screen.canvas.height = 300;
gameSize = {
width: 600,
height: 300
};
invaderMultiplier = 1;
initialOffsetInvader = 140;
}
kills = 0;
invaderAttackRate = 0.999;
invaderSpeed = 20;
spawnDelayCounter = invaderSpawnDelay;
game = new Game();
}
function loop() {
game.update();
game.draw();
requestAnimationFrame(loop);
}
})();

293
404M.css
View File

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

View File

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

20
404M.js
View File

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

1
CNAME
View File

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

62
Dockerfile Normal file
View File

@@ -0,0 +1,62 @@
# syntax=docker/dockerfile:1
### Build stage ###
FROM python:3.13-alpine AS build
# Install build dependencies for Pillow and other native wheels
RUN apk add --no-cache \
build-base \
jpeg-dev zlib-dev freetype-dev
# Copy uv (fast Python package manager)
COPY --from=ghcr.io/astral-sh/uv:0.8.21 /uv /uvx /bin/
WORKDIR /app
COPY pyproject.toml uv.lock ./
# Install dependencies into a virtual environment
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --locked
# Copy only app source files
COPY blueprints blueprints
COPY main.py server.py curl.py tools.py mail.py ./
COPY templates templates
COPY data data
COPY pwa pwa
COPY .well-known .well-known
# Clean up caches and pycache
RUN rm -rf /root/.cache/uv
RUN find . -type d -name "__pycache__" -exec rm -rf {} +
### Runtime stage ###
FROM python:3.13-alpine AS runtime
ENV PATH="/app/.venv/bin:$PATH"
# Create non-root user
RUN addgroup -g 1001 appgroup && \
adduser -D -u 1001 -G appgroup -h /app appuser
WORKDIR /app
RUN apk add --no-cache curl
# Copy only whats needed for runtime
COPY --from=build --chown=appuser:appgroup /app/.venv /app/.venv
COPY --from=build --chown=appuser:appgroup /app/blueprints /app/blueprints
COPY --from=build --chown=appuser:appgroup /app/templates /app/templates
COPY --from=build --chown=appuser:appgroup /app/data /app/data
COPY --from=build --chown=appuser:appgroup /app/pwa /app/pwa
COPY --from=build --chown=appuser:appgroup /app/.well-known /app/.well-known
COPY --from=build --chown=appuser:appgroup /app/main.py /app/
COPY --from=build --chown=appuser:appgroup /app/server.py /app/
COPY --from=build --chown=appuser:appgroup /app/curl.py /app/
COPY --from=build --chown=appuser:appgroup /app/tools.py /app/
COPY --from=build --chown=appuser:appgroup /app/mail.py /app/
USER appuser
EXPOSE 5000
ENTRYPOINT ["python3", "main.py"]

BIN
NathanWoodburn.bsdesign Normal file

Binary file not shown.

View File

@@ -1 +0,0 @@
include: [".well-known"]

View File

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

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)

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1 +0,0 @@
.profile-container{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:0}img.profile{left:10px;width:150px;position:absolute;aspect-ratio:1;transform:scale(1);transition:.5s;z-index:2}img.background2{left:0;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,img.backgroundsml:hover{filter:blur(5px)}.spacer{height:100px}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.background2sml{width:170px!important;left:calc(50% - 10px);margin-top:-10px;pointer-events:none;z-index:0}@media print{div{color:#000!important}.noprintbreak{page-break-inside:avoid}.edu-main{page-break-before:always}}

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 KiB

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