commit 6449151d7a4db2c9f891d7ad6d209a171d7eb985 Author: Parker TenBroeck <51721964+ParkerTenBroeck@users.noreply.github.com> Date: Fri Jan 16 22:02:02 2026 -0500 First diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..9c23f5e --- /dev/null +++ b/config.toml @@ -0,0 +1,38 @@ +# The URL the site will be built for +base_url = "https://parkertenbroeck.com/" + +# The site title and description; used in feeds by default. +title = "Parker TenBroeck" +description = "Personal website" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# The default language; used in feeds. +default_language = "en" + +# When set to "true", a feed is automatically generated. +generate_feeds = true + +# The default author for pages +author = "Parker TenBroeck" + +# The filename to use for the feed. Used as the template filename, too. +# Defaults to "atom.xml", which has a built-in template that renders an Atom 1.0 feed. +# There is also a built-in template "rss.xml" that renders an RSS 2.0 feed. +feed_filenames = ["rss.xml", "atom.xml"] + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = true + +taxonomies = [ + {name = "tags", feed=true} +] + +[markdown] +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = true +render_emoji = true +bottom_footnotes = true +github_alerts = true diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..3f84557 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Blogs" +sort_by = "date" +template = "blog.html" +page_template = "blog-page.html" ++++ \ No newline at end of file diff --git a/content/blog/first.md b/content/blog/first.md new file mode 100644 index 0000000..223047f --- /dev/null +++ b/content/blog/first.md @@ -0,0 +1,10 @@ ++++ +title = "My first post" +description = "moving from an abandond react website which hasn't been updated in over 4 years to Zola" +date = 2026-01-16 + +[taxonomies] +tags = ["web", "zola"] ++++ + + diff --git a/content/crafts/_index.md b/content/crafts/_index.md new file mode 100644 index 0000000..a94c1ff --- /dev/null +++ b/content/crafts/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Crafts" +sort_by = "date" +template = "blog.html" +page_template = "blog-page.html" ++++ \ No newline at end of file diff --git a/content/crafts/qtip-cube.md b/content/crafts/qtip-cube.md new file mode 100644 index 0000000..8da1f2b --- /dev/null +++ b/content/crafts/qtip-cube.md @@ -0,0 +1,10 @@ ++++ +title = "QTip-Cube" +description = "Boredom can lead to wonderful discoveries. One such discovery is the fact that Qtips can be carefully arranged in such a way that they form a strong(ish) cube held together by nothing but pure Qtip" +date = 2025-05-12 + +[taxonomies] +tags = ["6-sided", "crafty"] ++++ + +I'm so sorry for whoever opened this page expecting to see such a object. Unfortunately I have not yet uploaded the image. Please yell at me if needed \ No newline at end of file diff --git a/content/crafts/spoon.md b/content/crafts/spoon.md new file mode 100644 index 0000000..16d465f --- /dev/null +++ b/content/crafts/spoon.md @@ -0,0 +1,9 @@ ++++ +title = "Spoon" +description = "I went from a tree all the way to a spoon in a few weeks" +date = 2026-01-16 + +[taxonomies] +tags = ["wooden", "crafty"] ++++ + diff --git a/content/pictures/_index.md b/content/pictures/_index.md new file mode 100644 index 0000000..7d2daae --- /dev/null +++ b/content/pictures/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Pictures" +sort_by = "date" +template = "blog.html" +page_template = "blog-page.html" ++++ \ No newline at end of file diff --git a/content/projects/_index.md b/content/projects/_index.md new file mode 100644 index 0000000..a9b244b --- /dev/null +++ b/content/projects/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Projects" +sort_by = "date" +template = "blog.html" +page_template = "blog-page.html" ++++ \ No newline at end of file diff --git a/content/projects/ansi.md b/content/projects/ansi.md new file mode 100644 index 0000000..35ce7f2 --- /dev/null +++ b/content/projects/ansi.md @@ -0,0 +1,10 @@ ++++ +title = "Ansi" +description = "A `no_std` incremental, panic free, allocationless ansi parser" +date = 2025-09-23 + +[taxonomies] +tags = ["embedded", "rust"] ++++ + +https://github.com/ParkerTenBroeck/ansi \ No newline at end of file diff --git a/content/projects/automata.md b/content/projects/automata.md new file mode 100644 index 0000000..ab6fc96 --- /dev/null +++ b/content/projects/automata.md @@ -0,0 +1,12 @@ ++++ +title = "Automata" +description = "A compiler, visualizer, and simulator for different classes of automata" +date = 2026-01-14 + +[taxonomies] +tags = ["web", "deno", "rust"] ++++ + +https://github.com/ParkerTenBroeck/automata + +parkertenbroeck.com/automata/ \ No newline at end of file diff --git a/content/projects/brainfuck.md b/content/projects/brainfuck.md new file mode 100644 index 0000000..4674989 --- /dev/null +++ b/content/projects/brainfuck.md @@ -0,0 +1,9 @@ ++++ +title = "Brainfuck" +description = "A brainfuck parser, interpreter, compiler, and optimizer" +date = 2024-05-09 + +[taxonomies] +tags = ["rust", "x86"] ++++ +https://github.com/ParkerTenBroeck/brainfuck_compiler \ No newline at end of file diff --git a/content/projects/fastexpr.md b/content/projects/fastexpr.md new file mode 100644 index 0000000..43d1c05 --- /dev/null +++ b/content/projects/fastexpr.md @@ -0,0 +1,9 @@ ++++ +title = "FastExpr" +description = "A java 24 library that runtime compiled math expressions into native JVM bytecode. Also supporting expression simplification and operations such as derivatives" +date = 2025-04-03 + +[taxonomies] +tags = ["java", "bytecode"] ++++ +https://github.com/ParkerTenBroeck/fastexpr \ No newline at end of file diff --git a/content/projects/generators.md b/content/projects/generators.md new file mode 100644 index 0000000..27fe7c0 --- /dev/null +++ b/content/projects/generators.md @@ -0,0 +1,9 @@ ++++ +title = "Generators" +description = "A java 24 library that adds stackless coroutines to standard java code by transforming method bytecode into state machines at load time" +date = 2025-05-07 + +[taxonomies] +tags = ["java", "bytecode"] ++++ +https://github.com/ParkerTenBroeck/generators \ No newline at end of file diff --git a/content/projects/highschool.md b/content/projects/highschool.md new file mode 100644 index 0000000..a98e3e6 --- /dev/null +++ b/content/projects/highschool.md @@ -0,0 +1,10 @@ ++++ +title = "Highschool Programs" +description = "A collection of programs I made while in highschool. Don't look too hard at the code ;)" +date = 2020-01-01 + +[taxonomies] +tags = ["java", "fun", "highschool"] ++++ + +https://github.com/ParkerTenBroeck/HighSchoolPrograms \ No newline at end of file diff --git a/content/projects/kernel.md b/content/projects/kernel.md new file mode 100644 index 0000000..3083576 --- /dev/null +++ b/content/projects/kernel.md @@ -0,0 +1,9 @@ ++++ +title = "Kernel" +description = "A from scratch bootloader, and kernel for the milkv-duos development board. Featuring VGA output, virtual memory support, rudimentary scheduling, UART, and kernel image loading through UART" +date = 2024-08-08 + +[taxonomies] +tags = ["rust", "embedded", "risc-v"] ++++ +https://github.com/ParkerTenBroeck/milkv-duos-rs \ No newline at end of file diff --git a/content/projects/legend-of-xor.md b/content/projects/legend-of-xor.md new file mode 100644 index 0000000..fdfaba4 --- /dev/null +++ b/content/projects/legend-of-xor.md @@ -0,0 +1,10 @@ ++++ +title = "Legend Of XOR" +description = "A 'game' but mostly game engine I wrote in a group that is surprisingly 'ok' for what it is" +date = 2020-01-16 + +[taxonomies] +tags = ["java", "fun", "game", "highschool"] ++++ + +https://github.com/ParkerTenBroeck/Legend-of-Xor \ No newline at end of file diff --git a/content/projects/my_cpu.md b/content/projects/my_cpu.md new file mode 100644 index 0000000..23f8b56 --- /dev/null +++ b/content/projects/my_cpu.md @@ -0,0 +1,10 @@ ++++ +title = "My CPU" +description = "A CPU I designed based off a SAP-1 CPU but expanded to be a much more 'capable' 16 bit CPU. THE ISA is about as good as you'd expect" +date = 2018-01-16 + +[taxonomies] +tags = ["hardware", "logic gates", "highschool"] ++++ + +https://github.com/ParkerTenBroeck/MyCPU_16bit \ No newline at end of file diff --git a/content/projects/qc-backend.md b/content/projects/qc-backend.md new file mode 100644 index 0000000..106df95 --- /dev/null +++ b/content/projects/qc-backend.md @@ -0,0 +1,9 @@ ++++ +title = "QC Backend" +description = "A quality control tool for RCT - Niagara I developed while working for them. Despite the name it is also the frontend" +date = 2024-04-21 + +[taxonomies] +tags = ["rust", "sql", "web"] ++++ +https://github.com/ParkerTenBroeck/qc-backend \ No newline at end of file diff --git a/content/projects/software-renderer.md b/content/projects/software-renderer.md new file mode 100644 index 0000000..a3a1286 --- /dev/null +++ b/content/projects/software-renderer.md @@ -0,0 +1,9 @@ ++++ +title = "Software Rasterizer" +description = "A software rasterizer written in C++ for a parallel computing class. Using OpenMP and OpenMPI together to support multi threaded rendering of single frames and distributed rendering of multiple frames across networks. With dynamic coloured lighting, normal, diffuse, ambient, specular, roughness, and shininess maps supported using Blinn-Phong shading." +date = 2025-12-12 + +[taxonomies] +tags = ["C++", "graphics"] ++++ +https://github.com/ParkerTenBroeck/3P93 \ No newline at end of file diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..572abd3 --- /dev/null +++ b/default.nix @@ -0,0 +1,5 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = [ pkgs.zola ]; +} diff --git a/sass/blog.scss b/sass/blog.scss new file mode 100644 index 0000000..3a538cd --- /dev/null +++ b/sass/blog.scss @@ -0,0 +1,8 @@ +.blog-page { + .title { + h1 { + font-size: 2.2em; + } + padding-bottom: 2em; + } +} \ No newline at end of file diff --git a/sass/footer.scss b/sass/footer.scss new file mode 100644 index 0000000..cabf4d0 --- /dev/null +++ b/sass/footer.scss @@ -0,0 +1,9 @@ +footer { + display: flex; + flex-wrap: wrap; + margin: 1em 0; + + border-top-style: solid; + border-top-width: 4px; + border-top-color: var(--grey); +} \ No newline at end of file diff --git a/sass/header.scss b/sass/header.scss new file mode 100644 index 0000000..c11f73e --- /dev/null +++ b/sass/header.scss @@ -0,0 +1,28 @@ + + +header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin: 1em 0; + font-size: large; + + .title * { + font-size: xx-large; + + + text-decoration-color: var(--primary)!important; + &:hover { + text-decoration-color: var(--grey)!important; + } + } + + nav { + a { + margin-right: 0.5rem; + } + } + + padding-bottom: 1em; +} + diff --git a/sass/style.scss b/sass/style.scss new file mode 100644 index 0000000..a9a5d4b --- /dev/null +++ b/sass/style.scss @@ -0,0 +1,87 @@ +@use "theme.scss"; +@use "header.scss"; +@use "footer.scss"; +@use "blog.scss"; + +body { + background: var(--bg-0); + color: var(--fg-1); + + font-size: 16px; + line-height: 1.6em; + letter-spacing: .5px; +} + +.content { + margin-bottom: 4em; + margin-left: auto; + margin-right: auto; + max-width: 800px; + padding: 0 0.5em; +} + +@media screen and (min-width: 978px) { + .content { + margin-left: 4rem; + } +} + +a { + color: var(--fg-0); + font-weight: bold; + + text-decoration: underline; + text-decoration-thickness: 0.30ex; + text-decoration-color: var(--grey); + + &:hover { + text-decoration-color: var(--primary); + } +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--fg-0); + font-weight: bold; + margin-top: 2em; +} + +h1 { + font-size: 2rem; +} + +h2 { + font-size: 1.4rem; +} + +h3 { + font-size: 1.2rem; +} + +h4 { + font-size: 1.1rem; +} + +h5 { + font-size: 1rem; +} + +h6 { + font-size: 1rem; +} + +code { + background: var(--bg-1); + border-radius: 3px; + font-family: 'Berkeley Mono'; + padding: .15rem .3rem; +} + +time { + padding-bottom: 1em; + color: var(--fg-2); +} \ No newline at end of file diff --git a/sass/theme.scss b/sass/theme.scss new file mode 100644 index 0000000..27ca2a4 --- /dev/null +++ b/sass/theme.scss @@ -0,0 +1,14 @@ + + +:root { + --bg-0: #1d1d1d; + --bg-1: #131313; + + --grey: #777; + + --fg-0: #eee; + --fg-1: #ccc; + --fg-2: #999; + + --primary: #daa520 +} \ No newline at end of file diff --git a/static/resume.pdf b/static/resume.pdf new file mode 100644 index 0000000..84b7a38 Binary files /dev/null and b/static/resume.pdf differ diff --git a/templates/404.html b/templates/404.html new file mode 100644 index 0000000..e300d76 --- /dev/null +++ b/templates/404.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} + + +{%- block title -%}Page not found{%- endblock -%} + +{%- block robots -%} + +{%- endblock -%} + +{%- block main -%} +{%- filter indent -%}{%- filter indent -%} +
+

Page not found...

+

Sorry, this page doesn't exist. Go back home?

+
+{%- endfilter -%}{%- endfilter -%} +{%- endblock -%} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..0a470ef --- /dev/null +++ b/templates/base.html @@ -0,0 +1,137 @@ + + + + + + + + + {%- block title -%} + {% if page.title %}{{ page.title }} + {% elif section.title %}{{ section.title }} + {% elif config.title %}{{ config.title }} + {% endif %} + {%- endblock -%} + + + {% block feeds %} + + + {% endblock %} + + + + {%- if page.extra.stylesheets or section.extra.stylesheets %} + {%- for stylesheet in page.extra.stylesheets | default(value=section.extra.stylesheets) %} + + {% endfor -%} + {%- endif %} + + {%- if config.extra.favicon %} + {% set image_meta = get_image_metadata(path=config.extra.favicon) -%} + + {%- if image_meta.mime is ending_with("png") %} + {% set resized_image = resize_image(path=config.extra.favicon, width=180, height=180, op="fit") -%} + + {%- endif -%} + {%- elif config.extra.favicon_emoji %} + + {%- endif %} + + {% if current_url %} + + + {% endif %} + + {% if page -%} + + {% else -%} + + {% endif -%} + + {% if page.title %} + + + {% endif %} + + + {% if page.extra.preview_img %} + + + {% endif %} + + + + {%- if page.authors -%} + {%- for author in page.authors %} + + {%- endfor -%} + {%- elif page and config.author %} + + {%- endif %} + + {%- block description -%} + {%- if config.description %} + + {%- endif %} + {%- endblock %} + + + + + {%- if page.description -%} + + {% elif page.summary -%} + {%- set inline_summary = page.summary | linebreaksbr | replace(from="
", to=" ") | striptags -%} + + {%- elif section.description -%} + + {% elif config.description -%} + + {% endif -%} + + + + + {%- if page.date %} + + {%- endif -%} + + {%- if page.updated %} + + {%- endif -%} + + {%- if page.taxonomies and page.taxonomies.categories %} + + {%- endif -%} + + {%- if page.taxonomies and page.taxonomies.tags -%} + {%- for tag in page.taxonomies.tags %} + + {%- endfor -%} + {%- endif -%} + + + +
+
+ {% filter indent -%}{%- filter indent -%} + {%- block header -%} + {% include "partials/header.html" %} + {%- endblock -%} + {%- endfilter -%}{%- endfilter %} +
+
+ {% block main %}{% endblock %} +
+
+ {% filter indent -%}{%- filter indent -%} + {%- block footer -%} + {% include "partials/footer.html" %} + {%- endblock -%} + {%- endfilter -%}{%- endfilter %} +
+
+ + + \ No newline at end of file diff --git a/templates/blog-page.html b/templates/blog-page.html new file mode 100644 index 0000000..d9f708c --- /dev/null +++ b/templates/blog-page.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% block main %} + +
+
+

{{ page.title }}

+

+ {% if page.taxonomies %}{% if page.taxonomies.tags %} + {% for tag in page.taxonomies.tags %} • #{{tag}} {% endfor %} + {% endif %}{% endif %} +

+
+ {{ page.content | safe }} +
+ + + +{% endblock main %} \ No newline at end of file diff --git a/templates/blog.html b/templates/blog.html new file mode 100644 index 0000000..34ff1bf --- /dev/null +++ b/templates/blog.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% import "macros/post.html" as posts %} + +{% block main %} + + +
+ {% for page in section.pages %} + {{ posts::excerpt(page=page) }} + {% endfor %} +
+ + +{% endblock main %} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..d8d494f --- /dev/null +++ b/templates/index.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} + +{% import "macros/post.html" as posts %} + +{% block main %} +

+ Hi, I'm Parker. I like to talk about silly computer things and whatever else comes to mind. +

+

+ You can find Posts, +Projects, +Crafts, +Pictures, and +Tags up above on any page. +

+ +

Please note that this page is currently under construction; not all content is finished.

+ +

If you'd like to employ me please take a look at my resume.

+ +
+ + + +

Heres a list of stuff I'd like you to checkout:

+ + +{% endblock main %} \ No newline at end of file diff --git a/templates/macros/post.html b/templates/macros/post.html new file mode 100644 index 0000000..2484864 --- /dev/null +++ b/templates/macros/post.html @@ -0,0 +1,28 @@ +{%- macro excerpt(page) -%} +
+

{{ page.title }}

+

+ {% if page.taxonomies %}{% if page.taxonomies.tags %} + + {% for tag in page.taxonomies.tags %} + {% set url = get_taxonomy_url(kind="tags", name=tag, lang=page.lang) %} + • #{{tag}} + {% endfor %} + {% endif %}{% endif %} +

+
+ {{page.description | markdown | safe}} +
+
+{%- endmacro -%} + + +{% macro page_link(path) %} + {% set p = get_page(path=path) %} + {{ p.title }} + {% if p.date %} + + {% endif %} +{% endmacro %} \ No newline at end of file diff --git a/templates/macros/taxonomy.html b/templates/macros/taxonomy.html new file mode 100644 index 0000000..62db18d --- /dev/null +++ b/templates/macros/taxonomy.html @@ -0,0 +1,9 @@ +{%- macro prettify(term) -%} + {%- if taxonomy.name == "categories" -%} + {{- "{" ~ term ~ "}" | safe -}} + {%- elif taxonomy.name == "tags" -%} + {{- "#" ~ term | safe -}} + {%- else -%} + {{- term | safe -}} + {%- endif -%} +{%- endmacro -%} \ No newline at end of file diff --git a/templates/partials/footer.html b/templates/partials/footer.html new file mode 100644 index 0000000..12ff7d8 --- /dev/null +++ b/templates/partials/footer.html @@ -0,0 +1,8 @@ + +

ParkerTenBroeck on GitHub + | +parker@parkertenbroeck.ca +| +RSS +| +Atom \ No newline at end of file diff --git a/templates/partials/header.html b/templates/partials/header.html new file mode 100644 index 0000000..9e5b1cc --- /dev/null +++ b/templates/partials/header.html @@ -0,0 +1,10 @@ +

+ Hey! it's Grey +
+ \ No newline at end of file diff --git a/templates/robots.txt b/templates/robots.txt new file mode 100644 index 0000000..3de0097 --- /dev/null +++ b/templates/robots.txt @@ -0,0 +1,95 @@ +User-agent: TurnitinBot +Disallow: / + +User-agent: Google-Extended +Disallow: / + +User-agent: GPTBot +Disallow: / + +User-agent: CCBot +Disallow: / + +User-agent: Omgilibot +Disallow: / + +User-agent: 008 +Disallow: / + +User-agent: voltron +Disallow: / + +User-agent: Bytespider +Disallow: / + +User-agent: AdsBot-Google +Disallow: / + +User-agent: Amazonbot +Disallow: / + +User-agent: Anthropic-ai +Disallow: / + +User-agent: AwarioRssBot +Disallow: / + +User-agent: AwarioSmartBot +Disallow: / + +User-agent: Bytespider +Disallow: / + +User-agent: CCBot +Disallow: / + +User-agent: ChatGPT-User +Disallow: / + +User-agent: ClaudeBot +Disallow: / + +User-agent: Claude-Web +Disallow: / + +User-agent: Cohere-ai +Disallow: / + +User-agent: DataForSeoBot +Disallow: / + +User-agent: FacebookBot +Disallow: / + +User-agent: Google-Extended +Disallow: / + +User-agent: GPTBot +Disallow: / + +User-agent: ImagesiftBot +Disallow: / + +User-agent: Magpie-crawler +Disallow: / + +User-agent: Omgili +Disallow: / + +User-agent: Omgilibot +Disallow: / + +User-agent: Peer39_crawler +Disallow: / + +User-agent: Peer39_crawler/1.0 +Disallow: / + +User-agent: PerplexityBot +Disallow: / + +User-agent: YouBot +Disallow: / + + +Sitemap: {{ get_url(path="sitemap.xml") }} \ No newline at end of file diff --git a/templates/taxonomy_list.html b/templates/taxonomy_list.html new file mode 100644 index 0000000..3d51872 --- /dev/null +++ b/templates/taxonomy_list.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} +{% import "macros/taxonomy.html" as macros %} + +{% block main %} + + +

{{ taxonomy.name | title }}

+ +{%- set num_terms = terms | length %} + + + +{% endblock main %} \ No newline at end of file diff --git a/templates/taxonomy_single.html b/templates/taxonomy_single.html new file mode 100644 index 0000000..03410c7 --- /dev/null +++ b/templates/taxonomy_single.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% import "macros/taxonomy.html" as macros %} +{% import "macros/post.html" as posts %} + +{%- block title -%} +{{ term.name | title }} | {{ config.title }} +{%- endblock -%} + +{# {%- block feeds -%} + {%- if taxonomy.feed -%} + {%- for filename in config.feed_filenames -%} + + {%- if taxonomy.name is ending_with("ies") -%} + {%- set singular_name = taxonomy.name | replace(from="ies", to="y") -%} + {%- else -%} + {%- set singular_name = taxonomy.name | trim_end_matches(pat="s") -%} + {%- endif -%} + {%- set feed_title = config.title ~ " | Posts in the '" ~ term.name ~ "' " ~ singular_name -%} + {%- set feed_filename = taxonomy.name ~ "/" ~ term.name ~ "/" ~ filename -%} + {{ feed_macros::link_alternate(filename=feed_filename, title=feed_title) }} + {% endfor -%} + {%- endif -%} +{%- endblock -%} #} + +{% block rss %} + {% set rss_path = "tags/" ~ term.name ~ "/rss.xml" %} + +{% endblock rss %} + +{%- block main -%} + +

{{ macros::prettify(term=term.name) }}

+
+{%- for page in paginator.pages | default(value=term.pages) %} + {{ posts::excerpt(page=page) }} +{%- endfor %} +
+ +{%- endblock -%} \ No newline at end of file