From 6a0c5e514b092810c83687d7f810f0621200fa04 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 17 Apr 2024 14:21:23 -0400 Subject: [PATCH 01/42] Move image to server instead of referring to ephemeral URL --- assets/google_cosplay.jpg | Bin 0 -> 59430 bytes src/how_to_run_a_journal.dj | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/google_cosplay.jpg diff --git a/assets/google_cosplay.jpg b/assets/google_cosplay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1eaf94368c74609bb54b63e9d26372b4bc1be95a GIT binary patch literal 59430 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 literal 0 HcmV?d00001 diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 6541ce2..0ab69a0 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -65,7 +65,7 @@ Because our CI tool is running this code, we can know which articles need compil Everything I've just described can be done in just ~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. -![Google cosplay is not business-critical](https://programming.dev/pictrs/image/e69b09e9-3ef6-40ff-b47b-e2ba2b4b633a.png) +![Google cosplay is not business-critical](assets/google_cosplay.jpg) My Rust code makes heavy use of git, a very simple yet amazing tool for adding functionality to plain text. From 47c9c65792670436bd264cce143ff3dd44d14f16 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 17 Apr 2024 14:23:40 -0400 Subject: [PATCH 02/42] Link image to the original Twitter status --- src/how_to_run_a_journal.dj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 0ab69a0..90ad010 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -65,7 +65,7 @@ Because our CI tool is running this code, we can know which articles need compil Everything I've just described can be done in just ~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. -![Google cosplay is not business-critical](assets/google_cosplay.jpg) +[![Google cosplay is not business-critical](assets/google_cosplay.jpg)](https://twitter.com/garybernhardt/status/1344341213575483399) My Rust code makes heavy use of git, a very simple yet amazing tool for adding functionality to plain text. From 45259fb38d82be2f0e1806cc2053e3eecf887789 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 20 Apr 2024 13:30:23 -0400 Subject: [PATCH 03/42] Add additional opengraph metadata --- templates/article.html | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/templates/article.html b/templates/article.html index 1c5757a..02847f5 100644 --- a/templates/article.html +++ b/templates/article.html @@ -1,14 +1,21 @@ - + - + {{title}} + + + + + + @@ -16,10 +23,16 @@ {% for author in authors %} + + + + {% endfor %} + + @@ -69,4 +82,4 @@ - + \ No newline at end of file From b97b91990d12d120e767a1ad4c21c7be1874de88 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 20 Apr 2024 16:21:21 -0400 Subject: [PATCH 04/42] Make articles rss compatible --- templates/article.html | 4 ++-- templates/raw.html | 32 -------------------------------- 2 files changed, 2 insertions(+), 34 deletions(-) delete mode 100644 templates/raw.html diff --git a/templates/article.html b/templates/article.html index 02847f5..59efb62 100644 --- a/templates/article.html +++ b/templates/article.html @@ -71,7 +71,7 @@

{{published}}

-
{{body}}
+
{{body}}

Read more from Compute

@@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/templates/raw.html b/templates/raw.html deleted file mode 100644 index 63f5415..0000000 --- a/templates/raw.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - {{title}} - - - - - - - - - - - {% for author in authors %} - - - - {% endfor %} - - - - - - -
View full webpage - {{body}} - - - From 6026c006db58108f251833536d8134a003fd7a12 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 20 Apr 2024 17:19:14 -0400 Subject: [PATCH 05/42] Add opengraph image generation --- .woodpecker.yml | 1 + templates/article.html | 10 +++--- templates/opengraph.svg | 78 ++++++++++++++++++++++++++++++++++++++++ templates/opengraph.toml | 10 ++++++ 4 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 templates/opengraph.svg create mode 100644 templates/opengraph.toml diff --git a/.woodpecker.yml b/.woodpecker.yml index 391c920..e89d049 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -7,3 +7,4 @@ steps: - bruin-journal-gen volumes: - /var/woodpecker:/var/woodpecker + - /usr/share/fonts:/usr/share/fonts diff --git a/templates/article.html b/templates/article.html index 59efb62..4b82aab 100644 --- a/templates/article.html +++ b/templates/article.html @@ -11,14 +11,14 @@ - + + - - - + + @@ -82,4 +82,4 @@ - + \ No newline at end of file diff --git a/templates/opengraph.svg b/templates/opengraph.svg new file mode 100644 index 0000000..333193b --- /dev/null +++ b/templates/opengraph.svg @@ -0,0 +1,78 @@ + + + + diff --git a/templates/opengraph.toml b/templates/opengraph.toml new file mode 100644 index 0000000..9930beb --- /dev/null +++ b/templates/opengraph.toml @@ -0,0 +1,10 @@ +faces = ["/usr/share/fonts/noto/NotoSans-Bold.ttf"] + +[[text]] +x = 435.15115 +y = 8.0 +width = 736.84885 +height = 594.60768 +value = "{{title}}" +font = "Noto Sans" +bold = true From 1ef9934d13f9c0033924433161de01a33ad5a621 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 20 Apr 2024 17:26:52 -0400 Subject: [PATCH 06/42] Update atom location --- templates/article.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/article.html b/templates/article.html index 4b82aab..fbce82f 100644 --- a/templates/article.html +++ b/templates/article.html @@ -6,7 +6,7 @@ {{title}} - + @@ -52,7 +52,7 @@ alt="Compute logo" height="64">
@@ -82,4 +82,4 @@ - \ No newline at end of file + From 1c5f748731b624878d2488f69048d0ab23bf0c43 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 20 Apr 2024 17:29:05 -0400 Subject: [PATCH 07/42] Fix opengraph description --- templates/article.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/article.html b/templates/article.html index fbce82f..4035619 100644 --- a/templates/article.html +++ b/templates/article.html @@ -7,7 +7,7 @@ {{title}} - + @@ -31,8 +31,8 @@ {% endfor %} - - + + @@ -82,4 +82,4 @@ - + \ No newline at end of file From 81d919f212490c1e96b6506989595691e86790db Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sat, 20 Apr 2024 17:52:25 -0400 Subject: [PATCH 08/42] Add twitter domain tags --- templates/article.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/article.html b/templates/article.html index 4035619..1cdd68d 100644 --- a/templates/article.html +++ b/templates/article.html @@ -14,6 +14,7 @@ + From 97c0f6f35c2496921b87cd08c18785ee036c8861 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 00:03:04 -0400 Subject: [PATCH 09/42] Increase margin on right side of opengraph image --- templates/opengraph.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/opengraph.toml b/templates/opengraph.toml index 9930beb..385f383 100644 --- a/templates/opengraph.toml +++ b/templates/opengraph.toml @@ -1,7 +1,7 @@ faces = ["/usr/share/fonts/noto/NotoSans-Bold.ttf"] [[text]] -x = 435.15115 +x = 425.15115 y = 8.0 width = 736.84885 height = 594.60768 From d58bc8d8311c6cf6eba2dd2bee39ee2ed3ece149 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 00:18:46 -0400 Subject: [PATCH 10/42] Add details about new image generation to article --- src/how_to_run_a_journal.dj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 90ad010..f2be194 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -63,7 +63,7 @@ Because our CI tool is running this code, we can know which articles need compil - Run a blame on new articles, which is how we figure out who wrote them - See if we are we have changed the production branch, and index new articles if so -Everything I've just described can be done in just ~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. +Everything I've described that the program can do thusfar can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) [![Google cosplay is not business-critical](assets/google_cosplay.jpg)](https://twitter.com/garybernhardt/status/1344341213575483399) From 78e59c0711042167f6847f2c729d82b72f2326e1 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 00:20:03 -0400 Subject: [PATCH 11/42] So far is better than thusfar --- src/how_to_run_a_journal.dj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index f2be194..1c69785 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -63,7 +63,7 @@ Because our CI tool is running this code, we can know which articles need compil - Run a blame on new articles, which is how we figure out who wrote them - See if we are we have changed the production branch, and index new articles if so -Everything I've described that the program can do thusfar can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) +Everything I've described that the program can do so far can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) [![Google cosplay is not business-critical](assets/google_cosplay.jpg)](https://twitter.com/garybernhardt/status/1344341213575483399) From 0372db4ae4c9f52b7a129c68126d30857d101754 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 00:22:50 -0400 Subject: [PATCH 12/42] Move bear to feel more centered in OpenGraph title card --- templates/opengraph.svg | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/templates/opengraph.svg b/templates/opengraph.svg index 333193b..e24194a 100644 --- a/templates/opengraph.svg +++ b/templates/opengraph.svg @@ -9,7 +9,7 @@ id="svg1" xml:space="preserve" inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" - sodipodi:docname="opengraph-image.svg" + sodipodi:docname="opengraph.svg" inkscape:export-filename="opengraph-image-export.svg" inkscape:export-xdpi="96" inkscape:export-ydpi="96" @@ -27,11 +27,11 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showguides="false" - inkscape:zoom="0.28834299" - inkscape:cx="603.44799" - inkscape:cy="554.8947" - inkscape:window-width="1054" - inkscape:window-height="1056" + inkscape:zoom="0.89422838" + inkscape:cx="617.85112" + inkscape:cy="208.00056" + inkscape:window-width="1920" + inkscape:window-height="1080" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="0" @@ -67,7 +67,7 @@ height="630" x="0" y="0" /> Date: Sun, 21 Apr 2024 00:24:37 -0400 Subject: [PATCH 13/42] Move bear slightly again --- templates/opengraph.svg | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/templates/opengraph.svg b/templates/opengraph.svg index e24194a..31a961d 100644 --- a/templates/opengraph.svg +++ b/templates/opengraph.svg @@ -27,11 +27,11 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showguides="false" - inkscape:zoom="0.89422838" - inkscape:cx="617.85112" - inkscape:cy="208.00056" - inkscape:window-width="1920" - inkscape:window-height="1080" + inkscape:zoom="0.61131147" + inkscape:cx="184.03057" + inkscape:cy="83.427193" + inkscape:window-width="1054" + inkscape:window-height="1056" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="0" @@ -67,7 +67,7 @@ height="630" x="0" y="0" /> Date: Sun, 21 Apr 2024 14:03:14 -0400 Subject: [PATCH 14/42] Fix a couple of grammar errors --- src/how_to_run_a_journal.dj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 1c69785..2dc320a 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -45,7 +45,7 @@ Consider the following: If I'm accepting untrusted code from the public into my Their pipeline checks if the library with your new code compiles to every platform it's compatible with, with every feature enabled. It also makes sure that your code is well-formatted, contains no conflicts of license, uses no libraries banned by the project, and contains no security advisories. The _only_ way this many checks can be done on every git commit, is through CI, GitHub Actions in egui's case. -The way I've described CI so far has probably made it seem like the least simplest thing you could add to your project, but CI is actually _quite_ simple, and it's an excellent example of how capable of a tool you can make by just building simple, on top of simple, on top of simple. Really, CI is just shell scripting with extra steps. Despite it's inherent simplicity, CI can not only serve as a means to filter bugs out of pull requests, but it can also be a simple way to communicate to open source developers _what a project wants_ out of their code. Instead of having to read a big `CONTRIBUTORS.md` file to get an idea of that, developers can know that their code is good quality if it just passes CI. +The way I've described CI so far has probably made it seem like the least simple thing you could add to your project, but CI is actually _quite_ simple, and it's an excellent example of how capable of a tool you can make by just building simple, on top of simple, on top of simple. Really, CI is just shell scripting with extra steps. Despite it's inherent simplicity, CI can serve not only as a means to filter bugs out of pull requests, but it can also be a simple way to communicate to open source developers _what a project wants_ out of their code. Instead of having to read a big `CONTRIBUTORS.md` file to get an idea of that, developers can know that their code is good quality if it just passes CI. Fortunately, the level of CI I've described above isn't required for journalism. Our CI simply compiles our journalists' unreviewed articles, and serves them on an un-indexed (not visible on production) web page so that they and the team can preview their work before merging it. Our CI is also responsible for indexing and publishing finished articles onto our production website. From bf9c790a468d173f50dd1dc9bed808b1b3c3f7e0 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 14:04:48 -0400 Subject: [PATCH 15/42] Fix a couple of grammar errors --- src/how_to_run_a_journal.dj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 2dc320a..14a12ae 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -61,7 +61,7 @@ Because our CI tool is running this code, we can know which articles need compil - Stat the changed files, which is how we know which files need to be compiled, and which files have been deleted - Run a blame on new articles, which is how we figure out who wrote them -- See if we are we have changed the production branch, and index new articles if so +- See if we have changed the production branch, and index new articles if so Everything I've described that the program can do so far can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) From 169659b54057103625bb9044d8e30aa3fa560027 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 16:31:19 -0400 Subject: [PATCH 16/42] Follow 80 characters per line rule --- templates/article.html | 24 ++++++++++++++---------- templates/css/compute-c23f91.webflow.css | 15 +++++++++++---- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/templates/article.html b/templates/article.html index 1cdd68d..28f1eab 100644 --- a/templates/article.html +++ b/templates/article.html @@ -40,7 +40,7 @@ + type="text/javascript">!function (o, c) { var n = c.documentElement, t = " w-mod-"; n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch") }(window, document); @@ -61,16 +61,20 @@
-
-

{{title}}

-
- {% for author in authors %} - {{author.full_name}}'s Avatar -
{{author.full_name}}
- {% endfor %} +
+
+

{{title}}

+
+ {% for author in authors %} + {{author.full_name}}'s Avatar +
{{author.full_name}}
+ {% endfor %} +
+

+ {{published}} +

-

{{published}}

{{body}}

diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 8587062..332d099 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -44,7 +44,15 @@ } article { - margin: 20px; + display: flex; + flex-direction: column; + align-items: center; +} + +article>* { + width: 96vw; + max-width: 575px; + line-height: 1.5; } h1 { @@ -97,12 +105,11 @@ li { } .flex-block-2.purple { - color: #333; - background-color: #552a85; flex-flow: column; justify-content: space-around; padding-top: 0; display: flex; + background-color: #552a85; overflow-x: hidden; } @@ -197,7 +204,7 @@ li { } .text-block-2 { - color: #fff; + color: white; font-size: 18px; } From 2b7bcb41229fa80f9fa62df5a09ae01eaa2ca3db Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 16:46:48 -0400 Subject: [PATCH 17/42] Increase readibility of articles --- templates/article.html | 2 +- templates/css/compute-c23f91.webflow.css | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/templates/article.html b/templates/article.html index 28f1eab..3025943 100644 --- a/templates/article.html +++ b/templates/article.html @@ -62,7 +62,7 @@
-
+

{{title}}

{% for author in authors %} diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 332d099..24cf453 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -50,8 +50,6 @@ article { } article>* { - width: 96vw; - max-width: 575px; line-height: 1.5; } @@ -208,12 +206,32 @@ li { font-size: 18px; } +article>* { + width: 96vw; + max-width: 940px; +} + +#header-elements { + width: 96vw; + max-width: 940px; +} + @media screen and (max-width: 991px) { .heading-3.unwrapped-compute.compute-gradiant { height: 22vw; min-height: 0%; } + article>* { + width: 96vw; + max-width: 575px; + } + + #header-elements { + width: 96vw; + max-width: 575px; + } + .grid { grid-template-columns: 1fr; } From 5f49ea1ed18fbf5d10b4c2568352de3011c629e4 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 18:31:58 -0400 Subject: [PATCH 18/42] Huge readability improvements --- templates/css/compute-c23f91.webflow.css | 30 +++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 24cf453..55a5fba 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -1,6 +1,7 @@ :root { --white: white; --black: black; + --gap: calc(1rem * 18 / 16); } .w-layout-vflex { @@ -47,10 +48,35 @@ article { display: flex; flex-direction: column; align-items: center; + margin: 25px; + gap: var(--gap); } -article>* { +.content section { + display: flex; + flex-direction: column; + gap: var(--gap); + word-wrap: break-word; + margin-top: calc(2 * var(--gap)); + margin-bottom: 0; +} + +.content img { + margin: var(--gap) 0; +} + +.content ul, +.content ol { + display: flex; + flex-direction: column; + padding: 0 0 0 2em; +} + + +.content * { line-height: 1.5; + margin: 0 0; + padding: 0 0; } h1 { @@ -60,8 +86,6 @@ h1 { } p { - margin-bottom: 10px; - margin-top: 10px; font-size: 18px; } From 3acd52fa266104d0a66e773171c001c9a683caed Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Sun, 21 Apr 2024 19:23:29 -0400 Subject: [PATCH 19/42] Huge readability improvements --- templates/css/compute-c23f91.webflow.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 55a5fba..7fee20c 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -1,7 +1,7 @@ :root { --white: white; --black: black; - --gap: calc(1rem * 18 / 16); + --gap: calc(1rem * 12.5 / 16); } .w-layout-vflex { From 0ba3ca97545595ae4fa23acbcc73f5c4abfd1e14 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Mon, 22 Apr 2024 09:13:46 -0400 Subject: [PATCH 20/42] Change the theme color --- templates/article.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/article.html b/templates/article.html index 3025943..3e5fa8e 100644 --- a/templates/article.html +++ b/templates/article.html @@ -8,7 +8,7 @@ {{title}} - + @@ -40,7 +40,7 @@ + type="text/javascript">!function (o, c) {var n = c.documentElement, t = " w-mod-"; n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch")}(window, document); From 7ef3ff51268307f65cfa4bcd77f865f656d393a3 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Mon, 22 Apr 2024 17:20:57 -0400 Subject: [PATCH 21/42] Change font to Arimo --- templates/article.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/article.html b/templates/article.html index 3e5fa8e..bd523be 100644 --- a/templates/article.html +++ b/templates/article.html @@ -43,6 +43,10 @@ type="text/javascript">!function (o, c) {var n = c.documentElement, t = " w-mod-"; n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch")}(window, document); + + + @@ -62,7 +66,7 @@
-
+

{{title}}

{% for author in authors %} From 2c4e4a17f00c68dddf79ac55b47f88ef729f4fd9 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Mon, 22 Apr 2024 17:26:22 -0400 Subject: [PATCH 22/42] Change font to Arimo --- templates/article.html | 4 ++-- templates/css/compute-c23f91.webflow.css | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/templates/article.html b/templates/article.html index bd523be..93885ce 100644 --- a/templates/article.html +++ b/templates/article.html @@ -65,8 +65,8 @@
-
-
+
+

{{title}}

{% for author in authors %} diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 7fee20c..4f8227c 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -4,6 +4,10 @@ --gap: calc(1rem * 12.5 / 16); } +body { + font-family: 'Arimo', sans-serif; +} + .w-layout-vflex { flex-direction: column; align-items: flex-start; From 0fc331b10fa02fc0ec8c6f847574e229dd546855 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Mon, 22 Apr 2024 23:11:04 -0400 Subject: [PATCH 23/42] Full compile-time code highlighting --- .helix/languages.toml | 25 +++ .woodpecker.yml | 3 + templates/article.html | 4 +- templates/assets | 2 +- templates/css/code-theme.css | 272 +++++++++++++++++++++++ templates/css/compute-c23f91.webflow.css | 4 + 6 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 .helix/languages.toml create mode 100644 templates/css/code-theme.css diff --git a/.helix/languages.toml b/.helix/languages.toml new file mode 100644 index 0000000..ab93542 --- /dev/null +++ b/.helix/languages.toml @@ -0,0 +1,25 @@ +[[language]] +name = "grz" +scope = "scope.grz" +injection-regex = "grz" +file-types = ["grz"] +roots = [] +auto-format = true +comment-token = "//" +indent = { tab-width = 4, unit = " " } +language-servers = ["grezi"] + +[[grammer]] +name = "grz" + +[[language]] +name = "djot" +scope = "scope.djot" +injection-regex = "dj|djot" +file-types = ["dj"] +roots = [] +comment-token = "{%" +indent = { tab-width = 4, unit = " " } + +[[grammar]] +name = "djot" diff --git a/.woodpecker.yml b/.woodpecker.yml index e89d049..8218473 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -3,8 +3,11 @@ steps: image: journal environment: BASE_URL: https://compute.nations.lol + CODE_THEME: emacs + HELIX_RUNTIME: /usr/lib/helix/runtime commands: - bruin-journal-gen volumes: - /var/woodpecker:/var/woodpecker - /usr/share/fonts:/usr/share/fonts + - /usr/lib/helix/runtime/:/usr/lib/helix/runtime/ diff --git a/templates/article.html b/templates/article.html index 93885ce..c30a34b 100644 --- a/templates/article.html +++ b/templates/article.html @@ -39,13 +39,15 @@ + - diff --git a/templates/assets b/templates/assets index ec2e4be..bae6859 120000 --- a/templates/assets +++ b/templates/assets @@ -1 +1 @@ -../assets \ No newline at end of file +../assets/ \ No newline at end of file diff --git a/templates/css/code-theme.css b/templates/css/code-theme.css new file mode 100644 index 0000000..50eeb33 --- /dev/null +++ b/templates/css/code-theme.css @@ -0,0 +1,272 @@ +.content code .a { + color: #483D8B; +} +.content code .b { + color: #B22222; +} +.content code .c { + color: #008B8B; +} +.content code .d { + color: #483D8B; +} +.content code .e { + color: #228B22; +} +.content code .f { + text-decoration-color: #FF0000; + text-decoration: underline wavy; +} +.content code .g { + text-decoration-color: #008B8B; + text-decoration: underline wavy; +} +.content code .h { + text-decoration-color: #228B22; + text-decoration: underline wavy; +} +.content code .i { + text-decoration-color: #FF8C00; + text-decoration: underline wavy; +} +.content code .j { + color: #EE9A00; +} +.content code .k { + color: #EE0000; +} +.content code .l { + color: #00CD00; +} +.content code .m { + color: #FF0000; +} +.content code .n { + color: #0000FF; +} +.content code .o { + color: #483D8B; +} +.content code .p { + color: #0000FF; +} +.content code .q { + color: #483D8B; +} +.content code .r { + color: #483D8B; +} +.content code .s { + color: #008B8B; +} +.content code .t { + color: #228B22; +} +.content code .u { + color: #A020F0; +} +.content code .v { + color: #483D8B; +} +.content code .w { + font-weight: bold; +} +.content code .x { + color: #FFD700; + font-weight: bold; +} +.content code .y { + color: #0000FF; +} +.content code .z { + color: #A0522D; +} +.content code .aa { + color: #A020F0; +} +.content code .ab { + color: #B22222; +} +.content code .ac { + color: #228B22; +} +.content code .ad { + color: #008B8B; +} +.content code .ae { + color: #999999; +} +.content code .af { + font-style: italic; +} +.content code .ag { + color: #3A5FCD; +} +.content code .ah { + color: #3A5FCD; + text-decoration: underline; +} +.content code .ai { + color: #000000; +} +.content code .aj { + color: #999999; +} +.content code .ak { + color: #008B8B; +} +.content code .al { + color: #008B8B; +} +.content code .am { +} +.content code .an { + color: #008B8B; +} +.content code .ao { + color: #008B8B; +} +.content code .ap { + color: #A020F0; +} +.content code .aq { + color: #000000; +} +.content code .ar { + color: #0000FF; +} +.content code .as { + color: #8B2252; +} +.content code .at { + color: #8B2252; + font-weight: bold; +} +.content code .au { + color: #0000FF; +} +.content code .av { + color: #228B22; +} +.content code .aw { + color: #483D8B; +} +pre { + color: #000000; + background-color: #FFFFFF; +} +.content code .ay { + color: #000000; + background-color: #FFFFFF; +} +.content code .az { + color: #5C5C5C; + background-color: #E5E5E5; + text-decoration: underline; +} +.content code .ba { + color: #000000; + background-color: #FCFCFC; +} +.content code .bb { + background-color: #BFBFBF; +} +.content code .bc { + color: #FFFFFF; + background-color: #B3B3B3; +} +.content code .bd { + color: #FF0000; + background-color: #000000; +} +.content code .be { + color: #000000; + background-color: #40E0D0; +} +.content code .bf { + color: #FFFFFF; + background-color: #000000; +} +.content code .bg { + color: #FFFFFF; + background-color: #000000; +} +.content code .bh { + background-color: #B4EEB4; +} +.content code .bi { + background-color: #B4EEB4; +} +.content code .bj { + color: #8B0000; + background-color: #FFF8DC; +} +.content code .bk { + color: #999999; +} +.content code .bl { + color: #CCCCCC; +} +.content code .bm { + color: #000000; + background-color: #FFF8DC; +} +.content code .bn { + color: #8B0000; + background-color: #ADD8E6; +} +.content code .bo { + color: #000000; + background-color: #F7F7F7; +} +.content code .bp { + color: #000000; + background-color: #F7F7F7; +} +.content code .bq { + background-color: #FFEC8B; +} +.content code .br { + background-color: #EEDC82; +} +.content code .bs { + color: #000000; + background-color: #BFBFBF; +} +.content code .bt { + color: #333333; + background-color: #E5E5E5; +} +.content pre code { + border: 1px solid #999; + display: block; + padding: 20px; + color: #000000; +} +.content code .bv { + color: #000000; + background-color: #B4EEB4; +} +.content code .bw { + color: #BFBFBF; +} +.content code .bx { + background-color: #F2F2F2; +} +.content code .by { +} +.content code .bz { + color: #000000; +} +.content code .ca { + color: #A0522D; +} +.content code .cb { + color: #483D8B; +} +.content code .cc { + color: #A0522D; +} +.content code .cd { + color: #FF8C00; +} diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 4f8227c..ba9163d 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -8,6 +8,10 @@ body { font-family: 'Arimo', sans-serif; } +code { + font-family: 'Fira Code', monospace; +} + .w-layout-vflex { flex-direction: column; align-items: flex-start; From 934892f81ae4b010ae9c99c46a13843070c1f1c0 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Mon, 22 Apr 2024 23:56:40 -0400 Subject: [PATCH 24/42] Fix code blocks --- templates/css/code-theme.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/templates/css/code-theme.css b/templates/css/code-theme.css index 50eeb33..ea7ff6b 100644 --- a/templates/css/code-theme.css +++ b/templates/css/code-theme.css @@ -151,7 +151,8 @@ .content code .aw { color: #483D8B; } -pre { +.content pre { + border: 1px solid #999; color: #000000; background-color: #FFFFFF; } @@ -238,9 +239,9 @@ pre { background-color: #E5E5E5; } .content pre code { - border: 1px solid #999; display: block; padding: 20px; + width: fit-content; color: #000000; } .content code .bv { From 4017705026c913287a4ed7e6b08cd50fcd61657c Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 00:03:36 -0400 Subject: [PATCH 25/42] Increase readability on mobile --- templates/css/compute-c23f91.webflow.css | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index ba9163d..f26d7d7 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -255,12 +255,10 @@ article>* { } article>* { - width: 96vw; - max-width: 575px; + max-width: min(575px, 85vw); } #header-elements { - width: 96vw; max-width: 575px; } @@ -330,4 +328,4 @@ article>* { .text-block { font-size: 6vw; } -} \ No newline at end of file +} From 47b613cf4339d22ae860ea4f06dad355548d20e5 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 08:12:30 -0400 Subject: [PATCH 26/42] Add code copy button --- templates/article.html | 1 + templates/css/compute-c23f91.webflow.css | 4 +-- templates/js/code_copy.js | 32 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 templates/js/code_copy.js diff --git a/templates/article.html b/templates/article.html index c30a34b..e5762c1 100644 --- a/templates/article.html +++ b/templates/article.html @@ -91,6 +91,7 @@ type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"> + \ No newline at end of file diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index f26d7d7..d0ee7d1 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -5,7 +5,7 @@ } body { - font-family: 'Arimo', sans-serif; + font-family: 'Arimo', 'Arial', sans-serif; } code { @@ -328,4 +328,4 @@ article>* { .text-block { font-size: 6vw; } -} +} \ No newline at end of file diff --git a/templates/js/code_copy.js b/templates/js/code_copy.js new file mode 100644 index 0000000..4a85af9 --- /dev/null +++ b/templates/js/code_copy.js @@ -0,0 +1,32 @@ +const copyButtonLabel = "Copy Code"; + +// use a class selector if available +let blocks = document.querySelectorAll("pre"); + +blocks.forEach((block) => { + // only add button if browser supports Clipboard API + if (navigator.clipboard) { + let button = document.createElement("button"); + + button.innerText = copyButtonLabel; + block.appendChild(button); + + button.addEventListener("click", async () => { + await copyCode(block); + }); + } +}); + +async function copyCode(block, button) { + let code = block.querySelector("code"); + let text = code.innerText; + + await navigator.clipboard.writeText(text); + + // visual feedback that task is completed + button.innerText = "Code Copied"; + + setTimeout(() => { + button.innerText = copyButtonLabel; + }, 700); +} From 437fab1fe0147ae4033b0c6596802ef937f8b869 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 08:20:26 -0400 Subject: [PATCH 27/42] Add code copy button --- templates/js/code_copy.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/js/code_copy.js b/templates/js/code_copy.js index 4a85af9..0924191 100644 --- a/templates/js/code_copy.js +++ b/templates/js/code_copy.js @@ -11,8 +11,8 @@ blocks.forEach((block) => { button.innerText = copyButtonLabel; block.appendChild(button); - button.addEventListener("click", async () => { - await copyCode(block); + button.addEventListener("click", async (event) => { + await copyCode(block, event.target); }); } }); From 90d78f9abbff09a35cdc18a5e0c7b86d790c52f2 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 08:25:47 -0400 Subject: [PATCH 28/42] Add code copy button --- templates/css/code-theme.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/css/code-theme.css b/templates/css/code-theme.css index ea7ff6b..60c0482 100644 --- a/templates/css/code-theme.css +++ b/templates/css/code-theme.css @@ -1,4 +1,7 @@ -.content code .a { +.content pre button { + position: absolute; + top: 5px; + right: 5px;}.content code .a { color: #483D8B; } .content code .b { @@ -152,6 +155,7 @@ color: #483D8B; } .content pre { + position: relative; border: 1px solid #999; color: #000000; background-color: #FFFFFF; From 7f6548e805d88f2c4fc2efeca2ccf821cc9959a8 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 08:44:25 -0400 Subject: [PATCH 29/42] Add code copy button --- templates/css/code-theme.css | 6 +----- templates/js/code_copy.js | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/templates/css/code-theme.css b/templates/css/code-theme.css index 60c0482..ea7ff6b 100644 --- a/templates/css/code-theme.css +++ b/templates/css/code-theme.css @@ -1,7 +1,4 @@ -.content pre button { - position: absolute; - top: 5px; - right: 5px;}.content code .a { +.content code .a { color: #483D8B; } .content code .b { @@ -155,7 +152,6 @@ color: #483D8B; } .content pre { - position: relative; border: 1px solid #999; color: #000000; background-color: #FFFFFF; diff --git a/templates/js/code_copy.js b/templates/js/code_copy.js index 0924191..3373856 100644 --- a/templates/js/code_copy.js +++ b/templates/js/code_copy.js @@ -1,21 +1,21 @@ const copyButtonLabel = "Copy Code"; // use a class selector if available -let blocks = document.querySelectorAll("pre"); +if (navigator.clipboard) { + let blocks = document.querySelectorAll("pre"); -blocks.forEach((block) => { - // only add button if browser supports Clipboard API - if (navigator.clipboard) { - let button = document.createElement("button"); + blocks.forEach((block) => { + // only add button if browser supports Clipboard API + let button = document.createElement("button"); - button.innerText = copyButtonLabel; - block.appendChild(button); + button.innerText = copyButtonLabel; + block.parentNode.insertBefore(button, block); - button.addEventListener("click", async (event) => { - await copyCode(block, event.target); - }); - } -}); + button.addEventListener("click", async (event) => { + await copyCode(block, event.target); + }); + }); +} async function copyCode(block, button) { let code = block.querySelector("code"); From 6f2a1fe0aa5f967dc4c73e2442eb6a67fa7866c1 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 09:09:30 -0400 Subject: [PATCH 30/42] Test inline code highlighting --- src/how_to_run_a_journal.dj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 14a12ae..5413bfb 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -4,6 +4,8 @@ Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In ## Plain text +`fn main() { println!("Hello World!") }`{lang=rust} + Plain text is as simple as it gets, yet it can be an extremely powerful tool. It's capable of being anything, and can also be transmuted into anything. Its infinite extensibility makes it a formidable tool that every developer should have in their arsenal. For our case, we use a lot of plain text. In fact, the article you're reading right now is written in plain text, _not with some web UI_. A while back, I found a markup language called [djot](https://djot.net). It was created by the same person who created CommonMark, a flavor of markdown, to be easier to parse and more featureful. Below is some example djot ```djot From 927495694efd34cf582504e5343c9c708622d0c3 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 09:19:09 -0400 Subject: [PATCH 31/42] revert Test inline code highlighting --- src/how_to_run_a_journal.dj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 5413bfb..14a12ae 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -4,8 +4,6 @@ Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In ## Plain text -`fn main() { println!("Hello World!") }`{lang=rust} - Plain text is as simple as it gets, yet it can be an extremely powerful tool. It's capable of being anything, and can also be transmuted into anything. Its infinite extensibility makes it a formidable tool that every developer should have in their arsenal. For our case, we use a lot of plain text. In fact, the article you're reading right now is written in plain text, _not with some web UI_. A while back, I found a markup language called [djot](https://djot.net). It was created by the same person who created CommonMark, a flavor of markdown, to be easier to parse and more featureful. Below is some example djot ```djot From bfb4e0e1f90c473ea15057a7ed974a37f1942011 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 10:24:41 -0400 Subject: [PATCH 32/42] Remove article from repo --- assets/giga_chad.jpg | Bin 9885 -> 0 bytes assets/google_cosplay.jpg | Bin 59430 -> 0 bytes assets/the_pipeline.svg | 1 - src/how_to_run_a_journal.dj | 96 ------------------------------------ 4 files changed, 97 deletions(-) delete mode 100644 assets/giga_chad.jpg delete mode 100644 assets/google_cosplay.jpg delete mode 100644 assets/the_pipeline.svg delete mode 100644 src/how_to_run_a_journal.dj diff --git a/assets/giga_chad.jpg b/assets/giga_chad.jpg deleted file mode 100644 index 7150f96a62943b91c98f0a2eca953a7dd7982df0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9885 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 diff --git a/assets/the_pipeline.svg b/assets/the_pipeline.svg deleted file mode 100644 index b8a8fb2..0000000 --- a/assets/the_pipeline.svg +++ /dev/null @@ -1 +0,0 @@ -
Articles are
served with
Articles are...
Search is powered
by
Search is powered...
Merges to prod
trigger CI
Merges to prod...
If article is good,
it gets merged
to prod
If article is good,...
Large assets
like images are
stored here
Large assets...
Forgejo
Compiles articles to HTML
Compiles articles to HTML
Woodpecker CI
Writers, editors, etc.
Write...
Articles are
statically
compressed
Articles are...
Articles are registered
and updated with
Articles are registered...
Pull requests are opened on
Pull requests are opened on

Djot

Articles are written in
Djot...
Uses git for incremental
rendering, and author
annotations
Uses git for incremental...
GitNGINXBrotli
Compressed articles
are written back to
server
Compressed articles...
MeilisearchGit LFS
\ No newline at end of file diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj deleted file mode 100644 index 14a12ae..0000000 --- a/src/how_to_run_a_journal.dj +++ /dev/null @@ -1,96 +0,0 @@ -# Web-dev, and the Power of Simplicity. - -Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In this article, I'd like to talk about just that: the infra behind this media outlet, how it all works, and why it is the way it is. - -## Plain text - -Plain text is as simple as it gets, yet it can be an extremely powerful tool. It's capable of being anything, and can also be transmuted into anything. Its infinite extensibility makes it a formidable tool that every developer should have in their arsenal. For our case, we use a lot of plain text. In fact, the article you're reading right now is written in plain text, _not with some web UI_. A while back, I found a markup language called [djot](https://djot.net). It was created by the same person who created CommonMark, a flavor of markdown, to be easier to parse and more featureful. Below is some example djot - -```djot -# Heading - -paragraph - -*bold* _italic_ _*bold italic*_ {-strikethorugh-} {+underline+} - -- list -- list - -1. list -2. list -3. list -``` - -The benefit of using djot is that it compiles directly to HTML, thus the jorunalists who have joined Compute don't need to learn HTML to write articles. They also don't need to learn a clunky slow website editor like Wix or Squarespace. - -This is another superpower of plain text, if we used Wix for our website, our journalists would need to learn how to use the Wix UI, and how to write articles _for_ that UI. If we needed to change our tooling at any time, they would need to re-learn everything for _that_ tool. Not only that, but we would need to port the entire website (_every_ article), to use that new tooling. This is not so with plain text, if things change in the pipeline, or even if you're just joining our publication, there's no need to re-learn how to write text. At worst, you just need to convert the plain text to another format of plain text (djot to HTML for example). All our journalists need to know how to do is write their articles in djot, and submit it to the team via the pipeline - -## The Pipeline - -![A flowchart of the pipeline](assets/the_pipeline.svg) - -Pictured above is the full pipeline that articles go through in order to reach you readers at home, it goes like this - -1. Articles are written by our journalists in a plain text format (djot in our case) -2. Once an article is done, the journalist who wrote the article opens a pull request on our git repository with their new article and associated assets -3. The article can be reviewed by the team and edits can be made by them. -4. Once the article has been edited, the pull request gets merged into the main branch of our git repository, which is where the articles you see live -5. From there, the article goes through CI and gets deployed (we'll get into that in more detail later) - -Basically, this is just the workflow you would use for code, but adapted for journalism. In other words, no learning curve for our journalists! And if they do need to learn it, then this is information that they *should* know _anyway_. The workflow you see above has been in the making since git was created in 2005, with the sole purpose of efficiently moving code from development, into production. In the places where this workflow is used, more overhead in the pipeline means time, and time means money. Thus the workflow used in those places should be as simple as possible to reduce overhead, and I see it no differently for our publication. If this workflow has worked for nearly 2 decades for a pathologically huge project like the Linux kernel (which git was tailor-made to handle), the better. - -## CI - -Consider the following: If I'm accepting untrusted code from the public into my open source project, and I need that code to be production ready, how can I ensure that the code I accept _is_ actually production ready. The answer is with _continuous integration_, or _CI_. The idea is that every piece of code submitted to an open source project would undergo automated testing, linting, and checking to ensure that nothing will break upon merging the code into the production code base. For a project like [`egui`](https://lib.rs/crates/egui), their CI pipeline contains 19 checks. - -Their pipeline checks if the library with your new code compiles to every platform it's compatible with, with every feature enabled. It also makes sure that your code is well-formatted, contains no conflicts of license, uses no libraries banned by the project, and contains no security advisories. The _only_ way this many checks can be done on every git commit, is through CI, GitHub Actions in egui's case. - -The way I've described CI so far has probably made it seem like the least simple thing you could add to your project, but CI is actually _quite_ simple, and it's an excellent example of how capable of a tool you can make by just building simple, on top of simple, on top of simple. Really, CI is just shell scripting with extra steps. Despite it's inherent simplicity, CI can serve not only as a means to filter bugs out of pull requests, but it can also be a simple way to communicate to open source developers _what a project wants_ out of their code. Instead of having to read a big `CONTRIBUTORS.md` file to get an idea of that, developers can know that their code is good quality if it just passes CI. - -Fortunately, the level of CI I've described above isn't required for journalism. Our CI simply compiles our journalists' unreviewed articles, and serves them on an un-indexed (not visible on production) web page so that they and the team can preview their work before merging it. Our CI is also responsible for indexing and publishing finished articles onto our production website. - -## Deployment - -Deployment is the most complex part of our pipeline; getting the written, production ready articles, onto the website _you_ are reading this on. As I said earlier in the article, we use CI to compile and index finished articles. The CI tool we use is called [Woodpecker CI](https://woodpecker-ci.org/), a self-hosted docker-based CI tool. Self-hosted basically means that we can run the CI tool on the same server we use to serve our website, making deployment to there as easy as moving the generated files into the directory that our web server is serving (NGINX in our case). What's important to know is that when a pull request is opened on this journal's git repository, and when a pull request is merged into production, Woodpecker CI will run a custom program that I wrote in Rust to... - -- Compile djot articles to HTML -- Minify and compress compiled HTML -- Index articles with our search engine - -Because our CI tool is running this code, we can know which articles need compilation, who wrote those articles, and if any articles need to be deleted. Our CI tools will put our code in the working directory of our git repo. And via environment variables, the CI tool will tell us which files have changed, how the pipeline was triggered (via pull request, code push, etc.), as well as which git branch production resides in, and which branch our code is currently in. Our code can then use this information to... - -- Stat the changed files, which is how we know which files need to be compiled, and which files have been deleted -- Run a blame on new articles, which is how we figure out who wrote them -- See if we have changed the production branch, and index new articles if so - -Everything I've described that the program can do so far can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) - -[![Google cosplay is not business-critical](assets/google_cosplay.jpg)](https://twitter.com/garybernhardt/status/1344341213575483399) - -My Rust code makes heavy use of git, a very simple yet amazing tool for adding functionality to plain text. - -- It allows us to separate the WIP and the finished articles -- It allows us to keep an accurate and automated reference of who wrote and edited each article -- It allows a copy of the entire publication to be stored in many different places as backups. -- It allows us to easily sync new articles and changes to any git-compatible software forge of our choice (we use [forgejo](https://forgejo.org/)) - -By taking advantage of the vast functionality that a simple tool like git gives us, our code can stay lean, while also being very mean. Speaking of staying lean... - -## Webpages (and staying based) - -![An image of the giga-chad](assets/giga_chad.jpg) - -There is no better example of the cons of complexity than the modern web. Most webpages are not only bloated with ads, cookie banners, autoplaying BS, popups and the like; but they are also inundated with copious amounts of JavaScript. We only use JavaScript in 2 places - -1. On our homepage to power the search bar and display articles -2. Our web design tool, Webflow, bundles a small amount of JavaScript in every page (more on that later) - -Other than that, the actual article pages, such as this one, depend on nothing but the JavaScript that Webflow bundles in. And for our homepage, it's built and optimized so it can be served statically with it's _one_ dependency. Basically, I wanted to make our website as [suckless](https://suckless.org/philosophy/) (as lightweight, and as free from bloat) as possible. I say _I_ wanted to because our founder wanted to use Wix originally, yuck. - -Instead of _that_, I used [Webflow](https://webflow.com/) to design our webpages. For a one-time fee of $24, you can have access to the Webflow editor for 1 month, and then export your web pages to HTML/CSS/JS. Webflow is very different from your average Wix/Squarespace, those editors are designed for non-programmers who don't know and don't want to know HTML or CSS. Webflow is an editor for _developers_ that know what they're doing. It gives you the full power of HTML and CSS in a responsive, visual editor; making it an incredibly flexible tool capable of generating very based and performant webpages. Unlike the latter tools which generate bloated and obfuscated garbage. - -In just HTML, CSS, and JS: The homepage of this journal compressed is around 152.42 KB large, whereas our old Wix website's homepage compressed is around 861.9 KB large. That's nearly a 6x size difference. That's the effect of building your website in a UI that attempts to match up to the flexibility of HTML and CSS... without actually exposing you to the HTML and CSS. This is where Webflow thrives, as it is literally just a simple graphical editor _for_ HTML and CSS. It's another excellent example of what building simple around simple can do! - -## In conclusion - -Computers have an inconcievable amount of potential, but they're only as smart as their programmer. When you're building something with a computer, it's often much better to do more with less, than less with more. Don't use 17 different JavaScript frameworks with your hypervisor GPU WEB2.0 interface-driven scripting framework to drive your map/reduce-aware proxy-oriented software API. Just start simple, build simple, and if you need complexity, build it with more simple. The point I'm trying to make here is that bloat is your enemy, and it's often better for you, your team, and your users to just KISS (Keep it simple, stupid!) From 3eef87e5c48d67413f0bbe90be4533cda37783a5 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 22:45:33 -0400 Subject: [PATCH 33/42] Re-add articles to test webp conversion --- assets/giga_chad.jpg | Bin 0 -> 9885 bytes assets/google_cosplay.jpg | Bin 0 -> 59430 bytes assets/the_pipeline.svg | 1 + src/how_to_run_a_journal.dj | 96 ++++++++++++++++++++++++++++++++++++ templates/article.html | 8 +-- 5 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 assets/giga_chad.jpg create mode 100644 assets/google_cosplay.jpg create mode 100644 assets/the_pipeline.svg create mode 100644 src/how_to_run_a_journal.dj diff --git a/assets/giga_chad.jpg b/assets/giga_chad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7150f96a62943b91c98f0a2eca953a7dd7982df0 GIT binary patch literal 9885 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 literal 0 HcmV?d00001 diff --git a/assets/the_pipeline.svg b/assets/the_pipeline.svg new file mode 100644 index 0000000..b8a8fb2 --- /dev/null +++ b/assets/the_pipeline.svg @@ -0,0 +1 @@ +
Articles are
served with
Articles are...
Search is powered
by
Search is powered...
Merges to prod
trigger CI
Merges to prod...
If article is good,
it gets merged
to prod
If article is good,...
Large assets
like images are
stored here
Large assets...
Forgejo
Compiles articles to HTML
Compiles articles to HTML
Woodpecker CI
Writers, editors, etc.
Write...
Articles are
statically
compressed
Articles are...
Articles are registered
and updated with
Articles are registered...
Pull requests are opened on
Pull requests are opened on

Djot

Articles are written in
Djot...
Uses git for incremental
rendering, and author
annotations
Uses git for incremental...
GitNGINXBrotli
Compressed articles
are written back to
server
Compressed articles...
MeilisearchGit LFS
\ No newline at end of file diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj new file mode 100644 index 0000000..14a12ae --- /dev/null +++ b/src/how_to_run_a_journal.dj @@ -0,0 +1,96 @@ +# Web-dev, and the Power of Simplicity. + +Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In this article, I'd like to talk about just that: the infra behind this media outlet, how it all works, and why it is the way it is. + +## Plain text + +Plain text is as simple as it gets, yet it can be an extremely powerful tool. It's capable of being anything, and can also be transmuted into anything. Its infinite extensibility makes it a formidable tool that every developer should have in their arsenal. For our case, we use a lot of plain text. In fact, the article you're reading right now is written in plain text, _not with some web UI_. A while back, I found a markup language called [djot](https://djot.net). It was created by the same person who created CommonMark, a flavor of markdown, to be easier to parse and more featureful. Below is some example djot + +```djot +# Heading + +paragraph + +*bold* _italic_ _*bold italic*_ {-strikethorugh-} {+underline+} + +- list +- list + +1. list +2. list +3. list +``` + +The benefit of using djot is that it compiles directly to HTML, thus the jorunalists who have joined Compute don't need to learn HTML to write articles. They also don't need to learn a clunky slow website editor like Wix or Squarespace. + +This is another superpower of plain text, if we used Wix for our website, our journalists would need to learn how to use the Wix UI, and how to write articles _for_ that UI. If we needed to change our tooling at any time, they would need to re-learn everything for _that_ tool. Not only that, but we would need to port the entire website (_every_ article), to use that new tooling. This is not so with plain text, if things change in the pipeline, or even if you're just joining our publication, there's no need to re-learn how to write text. At worst, you just need to convert the plain text to another format of plain text (djot to HTML for example). All our journalists need to know how to do is write their articles in djot, and submit it to the team via the pipeline + +## The Pipeline + +![A flowchart of the pipeline](assets/the_pipeline.svg) + +Pictured above is the full pipeline that articles go through in order to reach you readers at home, it goes like this + +1. Articles are written by our journalists in a plain text format (djot in our case) +2. Once an article is done, the journalist who wrote the article opens a pull request on our git repository with their new article and associated assets +3. The article can be reviewed by the team and edits can be made by them. +4. Once the article has been edited, the pull request gets merged into the main branch of our git repository, which is where the articles you see live +5. From there, the article goes through CI and gets deployed (we'll get into that in more detail later) + +Basically, this is just the workflow you would use for code, but adapted for journalism. In other words, no learning curve for our journalists! And if they do need to learn it, then this is information that they *should* know _anyway_. The workflow you see above has been in the making since git was created in 2005, with the sole purpose of efficiently moving code from development, into production. In the places where this workflow is used, more overhead in the pipeline means time, and time means money. Thus the workflow used in those places should be as simple as possible to reduce overhead, and I see it no differently for our publication. If this workflow has worked for nearly 2 decades for a pathologically huge project like the Linux kernel (which git was tailor-made to handle), the better. + +## CI + +Consider the following: If I'm accepting untrusted code from the public into my open source project, and I need that code to be production ready, how can I ensure that the code I accept _is_ actually production ready. The answer is with _continuous integration_, or _CI_. The idea is that every piece of code submitted to an open source project would undergo automated testing, linting, and checking to ensure that nothing will break upon merging the code into the production code base. For a project like [`egui`](https://lib.rs/crates/egui), their CI pipeline contains 19 checks. + +Their pipeline checks if the library with your new code compiles to every platform it's compatible with, with every feature enabled. It also makes sure that your code is well-formatted, contains no conflicts of license, uses no libraries banned by the project, and contains no security advisories. The _only_ way this many checks can be done on every git commit, is through CI, GitHub Actions in egui's case. + +The way I've described CI so far has probably made it seem like the least simple thing you could add to your project, but CI is actually _quite_ simple, and it's an excellent example of how capable of a tool you can make by just building simple, on top of simple, on top of simple. Really, CI is just shell scripting with extra steps. Despite it's inherent simplicity, CI can serve not only as a means to filter bugs out of pull requests, but it can also be a simple way to communicate to open source developers _what a project wants_ out of their code. Instead of having to read a big `CONTRIBUTORS.md` file to get an idea of that, developers can know that their code is good quality if it just passes CI. + +Fortunately, the level of CI I've described above isn't required for journalism. Our CI simply compiles our journalists' unreviewed articles, and serves them on an un-indexed (not visible on production) web page so that they and the team can preview their work before merging it. Our CI is also responsible for indexing and publishing finished articles onto our production website. + +## Deployment + +Deployment is the most complex part of our pipeline; getting the written, production ready articles, onto the website _you_ are reading this on. As I said earlier in the article, we use CI to compile and index finished articles. The CI tool we use is called [Woodpecker CI](https://woodpecker-ci.org/), a self-hosted docker-based CI tool. Self-hosted basically means that we can run the CI tool on the same server we use to serve our website, making deployment to there as easy as moving the generated files into the directory that our web server is serving (NGINX in our case). What's important to know is that when a pull request is opened on this journal's git repository, and when a pull request is merged into production, Woodpecker CI will run a custom program that I wrote in Rust to... + +- Compile djot articles to HTML +- Minify and compress compiled HTML +- Index articles with our search engine + +Because our CI tool is running this code, we can know which articles need compilation, who wrote those articles, and if any articles need to be deleted. Our CI tools will put our code in the working directory of our git repo. And via environment variables, the CI tool will tell us which files have changed, how the pipeline was triggered (via pull request, code push, etc.), as well as which git branch production resides in, and which branch our code is currently in. Our code can then use this information to... + +- Stat the changed files, which is how we know which files need to be compiled, and which files have been deleted +- Run a blame on new articles, which is how we figure out who wrote them +- See if we have changed the production branch, and index new articles if so + +Everything I've described that the program can do so far can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) + +[![Google cosplay is not business-critical](assets/google_cosplay.jpg)](https://twitter.com/garybernhardt/status/1344341213575483399) + +My Rust code makes heavy use of git, a very simple yet amazing tool for adding functionality to plain text. + +- It allows us to separate the WIP and the finished articles +- It allows us to keep an accurate and automated reference of who wrote and edited each article +- It allows a copy of the entire publication to be stored in many different places as backups. +- It allows us to easily sync new articles and changes to any git-compatible software forge of our choice (we use [forgejo](https://forgejo.org/)) + +By taking advantage of the vast functionality that a simple tool like git gives us, our code can stay lean, while also being very mean. Speaking of staying lean... + +## Webpages (and staying based) + +![An image of the giga-chad](assets/giga_chad.jpg) + +There is no better example of the cons of complexity than the modern web. Most webpages are not only bloated with ads, cookie banners, autoplaying BS, popups and the like; but they are also inundated with copious amounts of JavaScript. We only use JavaScript in 2 places + +1. On our homepage to power the search bar and display articles +2. Our web design tool, Webflow, bundles a small amount of JavaScript in every page (more on that later) + +Other than that, the actual article pages, such as this one, depend on nothing but the JavaScript that Webflow bundles in. And for our homepage, it's built and optimized so it can be served statically with it's _one_ dependency. Basically, I wanted to make our website as [suckless](https://suckless.org/philosophy/) (as lightweight, and as free from bloat) as possible. I say _I_ wanted to because our founder wanted to use Wix originally, yuck. + +Instead of _that_, I used [Webflow](https://webflow.com/) to design our webpages. For a one-time fee of $24, you can have access to the Webflow editor for 1 month, and then export your web pages to HTML/CSS/JS. Webflow is very different from your average Wix/Squarespace, those editors are designed for non-programmers who don't know and don't want to know HTML or CSS. Webflow is an editor for _developers_ that know what they're doing. It gives you the full power of HTML and CSS in a responsive, visual editor; making it an incredibly flexible tool capable of generating very based and performant webpages. Unlike the latter tools which generate bloated and obfuscated garbage. + +In just HTML, CSS, and JS: The homepage of this journal compressed is around 152.42 KB large, whereas our old Wix website's homepage compressed is around 861.9 KB large. That's nearly a 6x size difference. That's the effect of building your website in a UI that attempts to match up to the flexibility of HTML and CSS... without actually exposing you to the HTML and CSS. This is where Webflow thrives, as it is literally just a simple graphical editor _for_ HTML and CSS. It's another excellent example of what building simple around simple can do! + +## In conclusion + +Computers have an inconcievable amount of potential, but they're only as smart as their programmer. When you're building something with a computer, it's often much better to do more with less, than less with more. Don't use 17 different JavaScript frameworks with your hypervisor GPU WEB2.0 interface-driven scripting framework to drive your map/reduce-aware proxy-oriented software API. Just start simple, build simple, and if you need complexity, build it with more simple. The point I'm trying to make here is that bloat is your enemy, and it's often better for you, your team, and your users to just KISS (Keep it simple, stupid!) diff --git a/templates/article.html b/templates/article.html index e5762c1..2ed46e0 100644 --- a/templates/article.html +++ b/templates/article.html @@ -16,7 +16,7 @@ - + @@ -77,8 +77,8 @@
{{author.full_name}}
{% endfor %}
-

- {{published}} +

+ {{read_time}} minute read · {{published}}

@@ -94,4 +94,4 @@ - \ No newline at end of file + From d0ad4c3f7469818b3309451af8ebb3afc01469aa Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Tue, 23 Apr 2024 22:49:14 -0400 Subject: [PATCH 34/42] Specifically denote published time --- templates/article.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/article.html b/templates/article.html index 2ed46e0..1686ab2 100644 --- a/templates/article.html +++ b/templates/article.html @@ -78,7 +78,7 @@ {% endfor %}

- {{read_time}} minute read · {{published}} + {{read_time}} minute read · Published: {{published}}

@@ -94,4 +94,4 @@ - + \ No newline at end of file From ea4a9f3760f4771453c45b1bfbf5c1e6e37f81ed Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 00:17:07 -0400 Subject: [PATCH 35/42] Add published attribute to articles --- src/how_to_run_a_journal.dj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/how_to_run_a_journal.dj b/src/how_to_run_a_journal.dj index 14a12ae..ca600bd 100644 --- a/src/how_to_run_a_journal.dj +++ b/src/how_to_run_a_journal.dj @@ -1,3 +1,5 @@ +`attributes`{published="2024-04-23 12:11"} + # Web-dev, and the Power of Simplicity. Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In this article, I'd like to talk about just that: the infra behind this media outlet, how it all works, and why it is the way it is. From d866cf24cd24781b62afc2a2439347960b6580fe Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 08:52:09 -0400 Subject: [PATCH 36/42] Adjust margins on heading --- templates/article.html | 8 +++---- templates/css/compute-c23f91.webflow.css | 28 ++++++------------------ 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/templates/article.html b/templates/article.html index 1686ab2..b4dee1a 100644 --- a/templates/article.html +++ b/templates/article.html @@ -68,16 +68,16 @@
-
-

{{title}}

-
+
+

{{title}}

+
{% for author in authors %} {{author.full_name}}'s Avatar
{{author.full_name}}
{% endfor %}
-

+

{{read_time}} minute read · Published: {{published}}

diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index d0ee7d1..faf70e4 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -12,12 +12,6 @@ code { font-family: 'Fira Code', monospace; } -.w-layout-vflex { - flex-direction: column; - align-items: flex-start; - display: flex; -} - .w-layout-blockcontainer { max-width: 940px; margin-left: auto; @@ -135,9 +129,8 @@ li { } .flex-block-2.purple { - flex-flow: column; - justify-content: space-around; padding-top: 0; + align-items: center; display: flex; background-color: #552a85; overflow-x: hidden; @@ -214,9 +207,8 @@ li { background-image: linear-gradient(90deg, #f6c415, rgba(246, 196, 21, .3)); -webkit-background-clip: text; background-clip: text; + font-size: 64px; margin-bottom: 20px; - margin-left: 20px; - margin-right: 20px; } .image { @@ -224,7 +216,6 @@ li { background-clip: border-box; border-radius: 50%; margin-bottom: 0; - margin-left: 20px; margin-right: 10px; } @@ -244,8 +235,12 @@ article>* { } #header-elements { - width: 96vw; max-width: 940px; + display: flex; + justify-content: space-around; + flex-direction: column; + margin: 14px 20px; + align-items: flex-start; } @media screen and (max-width: 991px) { @@ -265,11 +260,6 @@ article>* { .grid { grid-template-columns: 1fr; } - - .heading-8 { - margin-bottom: 20px; - font-size: 64px; - } } @media screen and (max-width: 767px) { @@ -290,10 +280,6 @@ article>* { .heading-3.unwrapped-compute.compute-gradiant { display: none; } - - .heading-8 { - font-size: 64px; - } } @media screen and (max-width: 479px) { From 847fddc09bc5761db4ab44196d04fed81725d54a Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 09:10:04 -0400 Subject: [PATCH 37/42] Adjust margins on heading --- templates/article.html | 2 +- templates/css/compute-c23f91.webflow.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/article.html b/templates/article.html index b4dee1a..bd5a79f 100644 --- a/templates/article.html +++ b/templates/article.html @@ -77,7 +77,7 @@
{{author.full_name}}
{% endfor %}
-

+

{{read_time}} minute read · Published: {{published}}

diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index faf70e4..f88fc99 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -239,7 +239,7 @@ article>* { display: flex; justify-content: space-around; flex-direction: column; - margin: 14px 20px; + margin: 20px; align-items: flex-start; } From f4be152ca6436024aae5c93e4a55c86bb986abb3 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 09:16:17 -0400 Subject: [PATCH 38/42] Adjust margins on heading --- templates/css/compute-c23f91.webflow.css | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index f88fc99..942ca38 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -227,6 +227,7 @@ li { .text-block-2 { color: white; font-size: 18px; + margin-right: 20px; } article>* { From 3f6385f10967c0ded17c41e7e71ac2887c238938 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 09:20:59 -0400 Subject: [PATCH 39/42] Add published attribute to articles --- templates/article.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/article.html b/templates/article.html index bd5a79f..27044fb 100644 --- a/templates/article.html +++ b/templates/article.html @@ -77,7 +77,7 @@
{{author.full_name}}
{% endfor %}
-

+

{{read_time}} minute read · Published: {{published}}

@@ -94,4 +94,4 @@ - \ No newline at end of file + From 3c8d8dce6e127a9fcd358edb11c8604b59576005 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 09:30:12 -0400 Subject: [PATCH 40/42] Adjust margins in heading --- templates/article.html | 4 ++-- templates/css/compute-c23f91.webflow.css | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/article.html b/templates/article.html index 27044fb..ad1afc2 100644 --- a/templates/article.html +++ b/templates/article.html @@ -69,7 +69,7 @@
-

{{title}}

+

{{title}}

{% for author in authors %} {{author.full_name}}'s Avatar - + \ No newline at end of file diff --git a/templates/css/compute-c23f91.webflow.css b/templates/css/compute-c23f91.webflow.css index 942ca38..26163c8 100644 --- a/templates/css/compute-c23f91.webflow.css +++ b/templates/css/compute-c23f91.webflow.css @@ -221,7 +221,6 @@ li { .flex-block-3 { align-items: center; - margin-bottom: 20px; } .text-block-2 { @@ -242,6 +241,7 @@ article>* { flex-direction: column; margin: 20px; align-items: flex-start; + gap: 14px; } @media screen and (max-width: 991px) { @@ -315,4 +315,4 @@ article>* { .text-block { font-size: 6vw; } -} \ No newline at end of file +} From dfff82e45004871825711b23ec72a4d699c67f03 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Wed, 24 Apr 2024 09:43:17 -0400 Subject: [PATCH 41/42] Adjust margins in heading --- templates/article.html | 2 +- templates/css/compute-c23f91.webflow.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/article.html b/templates/article.html index ad1afc2..6ac52c8 100644 --- a/templates/article.html +++ b/templates/article.html @@ -69,7 +69,7 @@
-

{{title}}

+

{{title}}

{% for author in authors %} {{author.full_name}}'s Avatar* { .text-block { font-size: 6vw; } -} +} \ No newline at end of file From 005833e4c6aa6deb5f9c8ca63bf0213b9f52f306 Mon Sep 17 00:00:00 2001 From: Isaac Mills Date: Thu, 25 Apr 2024 11:05:59 -0400 Subject: [PATCH 42/42] Add notify footer to bottom of articles --- templates/article.html | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/templates/article.html b/templates/article.html index 6ac52c8..a01e9c5 100644 --- a/templates/article.html +++ b/templates/article.html @@ -84,9 +84,23 @@
{{body}}

- -

Read more from Compute

-
+
+

Get Notified of new articles! + + + +

+ +

Read more from Compute

+
+