figbert.com-website

[ACTIVE] the website and home of figbert on the clearnet
git clone git://git.figbert.com/figbert.com-website.git
Log | Files | Refs | README | LICENSE

commit a895222184ce47be24d9018a21aa627d75dfb502
parent 057754f67620bf64be8f2c8623281982f7e8cd5a
Author: FIGBERT <figbert@figbert.com>
Date:   Sat, 31 Aug 2024 16:48:40 -0700

Redesign site

Inspired by:
  https://blog.jim-nielsen.com/2024/my-failed-peronsal-site-redesign/

TODO:
  - Adapt for mobile devices
  - Complete `/work` stub articles
  - Add rotating humorous descriptions to index
    - Select favorite turns of phrase that were eliminated when the
      index was changed from paragraphs to more structured data
    - Tongue-in-cheek over-the-top adjectives (see: Drake business card)
  - Explore additional sections?
    - /about, /now, /using

Diffstat:
Dcontent/_index.md | 74--------------------------------------------------------------------------
Rcontent/ketamine/_index.md -> content/ketamine/index.md | 0
Mcontent/posts/a-very-convincing-terraria-review/index.md | 2++
Mcontent/posts/aggregation-theory-nitter.md | 2++
Mcontent/posts/backups-update-internet-celebrity.md | 2++
Mcontent/posts/camera-roll-quotes.md | 2++
Acontent/posts/friendly-google-and-enemy-remedies.md | 22++++++++++++++++++++++
Mcontent/posts/going-full-static.md | 2++
Mcontent/posts/hoffmann-bellwether.md | 2++
Mcontent/posts/how-to-mirror-your-iphone-to-your-mac.md | 2++
Mcontent/posts/how-to-replace-keybase-in-three-easy-steps/index.md | 2++
Mcontent/posts/i-wrote-this-one/index.md | 2++
Mcontent/posts/i-wrote-this-three/index.md | 4+++-
Mcontent/posts/i-wrote-this-two/index.md | 2++
Mcontent/posts/ideating-tragit.md | 6++++--
Mcontent/posts/keybase-hidden-address.md | 2++
Mcontent/posts/mac-control-center-is-better/index.md | 2++
Mcontent/posts/moving-to-hetzner-from-digitalocean/index.md | 2++
Mcontent/posts/my-first-regex.md | 2++
Mcontent/posts/naftali-bennett-inspirations.md | 2++
Mcontent/posts/package-in-the-bush.md | 3++-
Mcontent/posts/pebkac-txtodo-rewrite/index.md | 4+++-
Mcontent/posts/people-watching-on-the-plane.md | 2++
Mcontent/posts/pomegranate-ux.md | 2++
Mcontent/posts/remarkable-tablet.md | 2++
Mcontent/posts/sass-style-update.md | 2++
Mcontent/posts/some-quality-shitposting.md | 2++
Mcontent/posts/stanford-quarterly-reflection-01/index.md | 2++
Mcontent/posts/stanford-quarterly-reflection-02.md | 2++
Mcontent/posts/stanford-quarterly-reflection-03.md | 2++
Mcontent/posts/tangible-deliverables.md | 2++
Mcontent/posts/wrong-way-to-switch-server-os.md | 2++
Mcontent/projects/_index.md | 2+-
Mcontent/projects/caret/index.md | 7++++---
Mcontent/projects/css-system-colors.md | 7++++---
Mcontent/projects/d3c3nt.md | 7++++---
Mcontent/projects/mabel/index.md | 9+++++----
Mcontent/projects/privacy-redirect-for-safari/index.md | 9+++++----
Mcontent/projects/running-out-of-time/index.md | 7++++---
Mcontent/projects/simply-translate.md | 7++++---
Mcontent/projects/tofu/index.md | 7++++---
Mcontent/projects/txtodo/index.md | 7++++---
Acontent/work/_index.md | 6++++++
Acontent/work/beeper.md | 26++++++++++++++++++++++++++
Acontent/work/envelope.md | 9+++++++++
Astatic/fonts/tobias.woff2 | 0
Mstatic/global.css | 227+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mtemplates/anchor-link.html | 2+-
Mtemplates/article.html | 44+++++++++++++++++++++++---------------------
Atemplates/base.html | 39+++++++++++++++++++++++++++++++++++++++
Mtemplates/index.html | 328++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Mtemplates/page.html | 11+++++++++--
Mtemplates/section.html | 77+++++++++++++++++++++++++++++++++++++++++++++--------------------------------
53 files changed, 725 insertions(+), 276 deletions(-)

diff --git a/content/_index.md b/content/_index.md @@ -1,74 +0,0 @@ -+++ -insert_anchor_links = "left" -+++ - -I'm Benji, an Israeli-American programmer building secure, clean, and -effective systems. I use modern technologies to build software that -avoids bloat and unnecessary complexity. I want to work on real and -interesting problems in challenging areas that matter. I am an -undergraduate student at Stanford University. - -### My Work -To see some of the things I do, you can: - -- Read my writing [on this site] or in the [Atom feed]. -- Check out the [projects I've shipped] and the [code I did it with]. -- Sporadically tune in to my [Owncast] livestreams. -- Witness me tentatively embrace social media on [Mastodon]. - -### Hire Me - -For the next three years, I'm available for in-person work anywhere in -the world from June through mid-September. I'm interested in joining -great teams who are pushing the envelope and want to give me a voice in -designing product while I code my ass off. - -During the school year, I'm looking for remote-first work, on projects -both long- and short-term, concurrent with my studies. - -If any of this speaks to you, [give my CV a once-over][cv]. - -### Contact -You can contact me via email at: [figbert@figbert.com]. Encrypt your -messages, if you would like, with [age] or [PGP]. If I am signing my -messages I will use [minisign]. - -Money can go to my [Bitcoin], [Monero], or [ZCash] addresses, where I -will never see it again because I forgot how to use them. - -### Elsewhere on the Net -I have some friends. Some of them have blogs: - -- [Burning Silicon] has content on machine learning, biotechnology, and cool - research on many subjects coming out of Pittsburgh. -- [Jacob Neplokh] co-founded [SMMR Software] and introduced me to [Tame - Impala]. -- [R. Miles McCain] is a schoolmate of mine and quick to remind you that - it is not a matter of skill but rather will. - -![The top-half of a traffic light, bordered in yellow, and a U-turn -sign, contrasted against a light blue sky](/banner.jpeg) - -[on this site]: @/posts/_index.md -[Atom feed]: /atom.xml -[projects I've shipped]: @/projects/_index.md -[code I did it with]: https://git.figbert.com -[Owncast]: https://live.figbert.com -[Mastodon]: https://fosstodon.org/@figbert - -[cv]: /files/cv.pdf - -[figbert@figbert.com]: mailto:figbert@figbert.com -[PGP]: /files/publickey-pgp.asc -[age]: /files/age.txt -[minisign]: /files/minisign.pub - -[Bitcoin]: /files/bitcoin.txt -[Monero]: /files/monero.txt -[ZCash]: /files/zcash.txt - -[Burning Silicon]: https://burningsilicon.dev/ -[Jacob Neplokh]: https://jacobneplokh.com -[SMMR Software]: https://smmr.software -[Tame Impala]: https://en.wikipedia.org/wiki/Tame_Impala -[R. Miles McCain]: https://miles.land diff --git a/content/ketamine/_index.md b/content/ketamine/index.md diff --git a/content/posts/a-very-convincing-terraria-review/index.md b/content/posts/a-very-convincing-terraria-review/index.md @@ -2,6 +2,8 @@ title = "A Very Convincing Review of Terraria" description = "If I wasn't certain I wanted this game before, I am now." date = 2020-11-16 +[extra] +type = "post" +++ !["I have never hated a game more in my life, i would rather get the skin on my diff --git a/content/posts/aggregation-theory-nitter.md b/content/posts/aggregation-theory-nitter.md @@ -1,6 +1,8 @@ +++ title = "Aggregation Theory, Virtuous Cycles, and Nitter" date = 2022-06-27 +[extra] +type = "post" +++ In 2015, Ben Thompson first proposed [Aggregation Theory] in an article diff --git a/content/posts/backups-update-internet-celebrity.md b/content/posts/backups-update-internet-celebrity.md @@ -2,6 +2,8 @@ title = "An Update on Bad Backups and Internet Celebrity" date = 2021-06-27 updated = 2022-06-15 +[extra] +type = "post" +++ My recent post on the [Great Alpine Migration Tragedy] of 2021 garnered diff --git a/content/posts/camera-roll-quotes.md b/content/posts/camera-roll-quotes.md @@ -1,6 +1,8 @@ +++ title = "Quotes from My Camera Roll" date = 2023-12-19 +[extra] +type = "post" +++ I have been collecting fun little writings in Photos with the intent of diff --git a/content/posts/friendly-google-and-enemy-remedies.md b/content/posts/friendly-google-and-enemy-remedies.md @@ -0,0 +1,22 @@ ++++ +title = "Stratchery on EU Antitrust" +date = 2024-08-26 +[extra] +type = "link" +link = "https://stratechery.com/2024/friendly-google-and-enemy-remedies/" ++++ + +> I would also note that the behavior I am calling for — more innovation +> and competition, not just from Google’s competitors, but Google itself +> — is the exact opposite of what [the European Union is pushing for], +> which is [product stasis]. I think the E.U. is mistaken for the exact +> same reasons I think Judge Mehta is right. + +Though I have more complex thoughts as to the actual anti-trust case +against Google itself, I do endorse this framing of the European +thinking on Big Tech regulation. + +<!-- more --> + +[the European Union is pushing for]: https://stratechery.com/2024/crashes-and-competition/ +[product stasis]: https://stratechery.com/2024/tech-ceos-on-trump-x-and-the-e-u-apple-settles-with-e-u-over-nfc/ diff --git a/content/posts/going-full-static.md b/content/posts/going-full-static.md @@ -2,6 +2,8 @@ title = "Going Full Static with Zola" date = 2020-08-22 updated = 2022-06-14 +[extra] +type = "post" +++ Those of you who read [my last "I Wrote This" post] will know that I was diff --git a/content/posts/hoffmann-bellwether.md b/content/posts/hoffmann-bellwether.md @@ -1,6 +1,8 @@ +++ title = "James Hoffmann x Bellwether Coffee" date = 2023-08-18 +[extra] +type = "post" +++ Today, I'm going to talk about [this video][vid]. diff --git a/content/posts/how-to-mirror-your-iphone-to-your-mac.md b/content/posts/how-to-mirror-your-iphone-to-your-mac.md @@ -2,6 +2,8 @@ title = "How to Mirror Your iDevice to your Mac" date = 2020-12-31 updated = 2022-06-14 +[extra] +type = "post" +++ I recently found myself debugging a mobile game I'm working on ([sneak diff --git a/content/posts/how-to-replace-keybase-in-three-easy-steps/index.md b/content/posts/how-to-replace-keybase-in-three-easy-steps/index.md @@ -2,6 +2,8 @@ title = "How to Replace Keybase in 3 Easy Steps" date = 2020-07-03 updated = 2021-04-12 +[extra] +type = "post" +++ Ever since [Keybase was acquired by Zoom][keybase-joins-zoom], a diff --git a/content/posts/i-wrote-this-one/index.md b/content/posts/i-wrote-this-one/index.md @@ -2,6 +2,8 @@ title = "I Wrote This #1" date = 2020-06-13 updated = 2022-06-15 +[extra] +type = "post" +++ So, I'm FIGBERT – I wrote this. ~~nailed that intro.~~ I'm a diff --git a/content/posts/i-wrote-this-three/index.md b/content/posts/i-wrote-this-three/index.md @@ -2,6 +2,8 @@ title = "I Wrote This #3" date = 2020-07-04 updated = 2022-06-14 +[extra] +type = "post" +++ It appears I'm not that great at keeping a weekly schedule. Right after @@ -278,7 +280,7 @@ but the site has been down for years now and I neglected to archive it. Such is [macOS malware]: https://www.wired.com/story/new-mac-ransomware-thiefquest-evilquest/ -[Mastodon account]: https://fosstodon.org/@figbert +[Mastodon account]: https://fosstodon.org/@figbert [Mast]: https://apps.apple.com/us/app/mast/id1437429129 [open source]: https://github.com/tiagomartinho/Mast2 diff --git a/content/posts/i-wrote-this-two/index.md b/content/posts/i-wrote-this-two/index.md @@ -2,6 +2,8 @@ title = "I Wrote This #2" date = 2020-06-27 updated = 2022-06-15 +[extra] +type = "post" +++ Hi! So, I just started this series and I already missed a week. Oh well. diff --git a/content/posts/ideating-tragit.md b/content/posts/ideating-tragit.md @@ -1,6 +1,8 @@ +++ title = "Ideating Tragit" date = 2024-07-30 +[extra] +type = "post" +++ There are many, many `git` forges to pick from. I'm going to make @@ -79,7 +81,7 @@ bearing on security or access rights. [dovecot]: https://www.dovecot.org [mailcow]: https://mailcow.email -[maddy]: https://maddy.email +[maddy]: https://maddy.email [GitHub]: https://github.com [email-based method]: https://git-send-email.io [My own setup]: https://git.figbert.com @@ -87,5 +89,5 @@ bearing on security or access rights. [`git-daemon`]: https://git-scm.com/docs/git-daemon [crabmail]: https://crabmail.flounder.online [tangible]: @/posts/tangible-deliverables.md -[deliverable]: https://fosstodon.org/@FIGBERT/112734909021642855 +[deliverable]: https://fosstodon.org/@FIGBERT/112734909021642855 [facilitate collaboration]: https://pr.pico.sh diff --git a/content/posts/keybase-hidden-address.md b/content/posts/keybase-hidden-address.md @@ -2,6 +2,8 @@ title = "Keybase Has an Onion Address" date = 2020-07-03 updated = 2022-06-15 +[extra] +type = "post" +++ Little known fact about [Keybase]: it has two onion addresses. diff --git a/content/posts/mac-control-center-is-better/index.md b/content/posts/mac-control-center-is-better/index.md @@ -1,6 +1,8 @@ +++ title = "MacOS Control Center is Better" date = 2020-10-07 +[extra] +type = "post" +++ I've been using the macOS Big Sur Beta for a couple of months now. So diff --git a/content/posts/moving-to-hetzner-from-digitalocean/index.md b/content/posts/moving-to-hetzner-from-digitalocean/index.md @@ -1,6 +1,8 @@ +++ title = "Moving To Hetzner Cloud from DigitalOcean" date = 2020-11-01 +[extra] +type = "post" +++ Since I began working on self-hosting, I've been using a diff --git a/content/posts/my-first-regex.md b/content/posts/my-first-regex.md @@ -1,6 +1,8 @@ +++ title = "My First RegEx" date = 2021-01-21 +[extra] +type = "post" +++ `(?<=\.\/IssuerIcons\/).*(?=\.png)` diff --git a/content/posts/naftali-bennett-inspirations.md b/content/posts/naftali-bennett-inspirations.md @@ -1,6 +1,8 @@ +++ title = "Naftali Bennett's Inspirations" date = 2023-01-20 +[extra] +type = "post" +++ I recently had the opportunity to meet former Israeli prime minister diff --git a/content/posts/package-in-the-bush.md b/content/posts/package-in-the-bush.md @@ -1,6 +1,8 @@ +++ title = "A Package in the Bush" date = 2021-03-19 +[extra] +type = "post" +++ A little more than a month ago, I noticed that my computer charger had @@ -39,4 +41,3 @@ Now I've got two chargers, for the price of one. One from Amazon. One from the bush. [NYT]: https://www.nytimes.com/wirecutter/ - diff --git a/content/posts/pebkac-txtodo-rewrite/index.md b/content/posts/pebkac-txtodo-rewrite/index.md @@ -2,6 +2,8 @@ title = "Problem Exists Between Keyboard and Chair: How I Spent 2 Days Chasing a Bug that Didn't Exist" date = 2020-07-28 updated = 2022-06-14 +[extra] +type = "post" +++ Post-[WWDC2020], I decided to rewrite the backend of txtodo in SwiftUI @@ -13,7 +15,7 @@ exist. This is the story of that last bit. <!-- more --> -## Structural Changes +## Structural Changes The new app, so far, was mostly the same as the old version but without the `AppDelegate.swift` or `SceneDelegate.swift` files (using the new diff --git a/content/posts/people-watching-on-the-plane.md b/content/posts/people-watching-on-the-plane.md @@ -2,6 +2,8 @@ title = "Movies I Saw Other People Watching on the Plane" date = 2023-01-21 updated = 2023-02-18 +[extra] +type = "post" +++ Everybody has to entertain themselves somehow on fifteen hour flights. diff --git a/content/posts/pomegranate-ux.md b/content/posts/pomegranate-ux.md @@ -1,6 +1,8 @@ +++ title = "Pomegranate Seeds" date = 2022-09-29 +[extra] +type = "post" +++ Just before the start of Rosh Hashanah, I found myself standing over a diff --git a/content/posts/remarkable-tablet.md b/content/posts/remarkable-tablet.md @@ -2,6 +2,8 @@ title = "Quite the reMarkable Device" date = 2021-01-22 updated = 2021-08-10 +[extra] +type = "post" +++ Lately, there's been renewed interest in clean, simple technology diff --git a/content/posts/sass-style-update.md b/content/posts/sass-style-update.md @@ -2,6 +2,8 @@ title = "SASS and Light Mode" date = 2021-01-02 updated = 2022-06-15 +[extra] +type = "post" +++ I'm on a roll! A second blog post in less than a month! Crazy. Anyway, diff --git a/content/posts/some-quality-shitposting.md b/content/posts/some-quality-shitposting.md @@ -2,6 +2,8 @@ title = "Some quality shitposting" date = 2021-02-10 updated = 2022-06-15 +[extra] +type = "post" +++ I was doing my daily HN and Lobster trawling, when I stumbled on [a diff --git a/content/posts/stanford-quarterly-reflection-01/index.md b/content/posts/stanford-quarterly-reflection-01/index.md @@ -1,6 +1,8 @@ +++ title = "Stanford Quarterly Reflection (Y1Q1)" date = 2024-01-09 +[extra] +type = "post" +++ Life changes slowly and then all at once. I started at Stanford diff --git a/content/posts/stanford-quarterly-reflection-02.md b/content/posts/stanford-quarterly-reflection-02.md @@ -1,6 +1,8 @@ +++ title = "Stanford Quarterly Reflection (Y1Q2)" date = 2024-04-20 +[extra] +type = "post" +++ In this quarter, Stanford became my default. As such, my memory of my diff --git a/content/posts/stanford-quarterly-reflection-03.md b/content/posts/stanford-quarterly-reflection-03.md @@ -2,6 +2,8 @@ title = "Stanford Quarterly Reflection (Y1Q3)" date = 2024-07-18 updated = 2024-07-22 +[extra] +type = "post" +++ This quarter was a radical departure from the previous two. It was diff --git a/content/posts/tangible-deliverables.md b/content/posts/tangible-deliverables.md @@ -1,6 +1,8 @@ +++ title = "Toward Tangible Deliverables" date = 2024-02-05 +[extra] +type = "post" +++ I would like to become the kind of person who consistently produces diff --git a/content/posts/wrong-way-to-switch-server-os.md b/content/posts/wrong-way-to-switch-server-os.md @@ -2,6 +2,8 @@ title = "The Wrong Way to Switch Operating Systems on Your Server" date = 2021-06-17 updated = 2022-06-15 +[extra] +type = "post" +++ After [moving my server to Hetzner][mv], I built up a large collection diff --git a/content/projects/_index.md b/content/projects/_index.md @@ -1,6 +1,6 @@ +++ title = "Projects" page_template = "article.html" -sort_by = "weight" +sort_by = "date" insert_anchor_links = "left" +++ diff --git a/content/projects/caret/index.md b/content/projects/caret/index.md @@ -1,15 +1,16 @@ +++ title = "Caret" +description = "A command line tool for browsing Lobsters in your terminal." date = 2024-05-22 -weight = 3 +[extra] +type = "project" +done = true +++ [**Caret**][crt] is a command line tool for browsing Lobsters in your terminal. It brings the Hacker News alternative just a few keystrokes away in the environment that you're probably already using. -<!-- more --> - ![A view of the Lobsters homepage in Caret](list.png) Caret is heavily inspired by the excellent [`circumflex`][clx]. It diff --git a/content/projects/css-system-colors.md b/content/projects/css-system-colors.md @@ -1,7 +1,10 @@ +++ title = "CSS System Colors Dashboard" +description = "A website that gives developers a visual preview of CSS' underused system-color data type." date = 2024-05-20 -weight = 2 +[extra] +type = "project" +done = true +++ [**CSS System Colors Dashboard**][dash] is a website that gives @@ -10,8 +13,6 @@ These colors are context-dependent, changing between operating systems and browsers; the dashboard provides effective visualization of the colors across environments. -<!-- more --> - I discovered native colors in CSS through [Jim Nielsen][jim]. These colors are extremely useful for developing "along the grain" of a platform. I now use them all the time! [This new dashboard][dash] lists diff --git a/content/projects/d3c3nt.md b/content/projects/d3c3nt.md @@ -1,16 +1,17 @@ +++ title = "d3c3nt" +description = "A simple, clean, and flexible theme for Zola." date = 2022-02-19 updated = 2022-06-15 -weight = 6 +[extra] +type = "project" +done = true +++ [**d3c3nt**] is a simple, clean, and flexible theme for [Zola]. The theme evolved from use on my site, made with vanilla CSS and HTML – and completely sans Javascript. All in all, it's fairly... decent. -<!-- more --> - d3c3nt styles common HTML elements like headers, paragraphs, and lists; plus semantic elements like blockquotes, tables, abbreviations, [and more]. It also provides [custom shortcodes] to incorporate modern web diff --git a/content/projects/mabel/index.md b/content/projects/mabel/index.md @@ -1,15 +1,16 @@ +++ title = "Mabel" +description = "A fancy BitTorrent client for the terminal." date = 2022-09-29 -weight = 0 +[extra] +type = "project" +done = true +++ [**Mabel**] is a fancy BitTorrent client for the terminal. Programmed in performant and memory-safe [Go], the TUI is the torrenting state-of-the-art on macOS and Linux (and anywhere UNIX-y). -<!-- more --> - ![Mabel downloading several Linux distros] Keyboard-centric, terminal-based workflows provide developers with a @@ -38,5 +39,5 @@ the source code [on GitHub][**Mabel**]. [Charm]: https://charm.sh [anacrolix]: https://github.com/anacrolix/torrent [SMMR Software]: https://smmr.software/ -[FIGBERT]: @/_index.md +[FIGBERT]: / [Jacob Neplokh]: https://jacobneplokh.com/ diff --git a/content/projects/privacy-redirect-for-safari/index.md b/content/projects/privacy-redirect-for-safari/index.md @@ -1,8 +1,11 @@ +++ title = "Privacy Redirect for Safari" +description = "A web extension that automatically redirects sites to alternative front-ends like Nitter and Teddit." date = 2021-08-14 updated = 2022-09-22 -weight = 1 +[extra] +type = "project" +done = true +++ [**Privacy Redirect for Safari**] is a web extension that automatically @@ -13,8 +16,6 @@ now, extensions that could redirect to these front-ends were limited to users of Chrome and Firefox. Privacy Redirect for Safari expands this functionality to Apple's native browser. -<!-- more --> - ![Privacy Redirect for Safari running on MacOS Monterey][native-app] Unlike other browsers, for many years Safari did not encourage the @@ -51,6 +52,6 @@ code [on GitHub][**Privacy Redirect for Safari**]. [twitter]: twitter.jpg [Chrome and Firefox extension]: https://github.com/SimonBrazell/privacy-redirect [SMMR Software]: https://smmr.software/ -[FIGBERT]: @/_index.md +[FIGBERT]: / [Jacob Neplokh]: https://jacobneplokh.com/ [on the App Store]: https://apps.apple.com/us/app/privacy-redirect/id1578144015 diff --git a/content/projects/running-out-of-time/index.md b/content/projects/running-out-of-time/index.md @@ -1,13 +1,14 @@ +++ title = "Running Out of Time Wallpaper" date = 2024-07-05 -weight = 4 +description = "A minimalist macOS wallpaper to remind you that time is ticking." +[extra] +type = "project" +done = true +++ A minimalist macOS wallpaper to remind you that time is ticking. -<!-- more --> - ![A canvas with the words "You are running out of time" written across it in all-caps](preview.png) diff --git a/content/projects/simply-translate.md b/content/projects/simply-translate.md @@ -1,8 +1,11 @@ +++ title = "SimplyTranslate" +description = "A collection of translation scrapers with interfaces for gemini and the web." date = 2021-07-02 updated = 2022-09-22 -weight = 8 +[extra] +type = "project" +done = true +++ [**SimplyTranslate**][st] is a collection of "translation scrapers with @@ -12,8 +15,6 @@ Twitter's [Nitter]. Over the course of a couple days – and one synchronous hacking session – I containerized the program to make it easier to deploy on servers worldwide. -<!-- more --> - When I first found the program, I immediately wanted to add it to my collection of self-hosted front ends. I had only one problem: I run my services with Docker, and SimplyTranslate had no Dockerfile. I tried diff --git a/content/projects/tofu/index.md b/content/projects/tofu/index.md @@ -1,7 +1,10 @@ +++ title = "Tofu" date = 2021-04-07 -weight = 7 +description = "An easy-to-use, open-source, two-factor authentication app designed specifically for iOS." +[extra] +type = "project" +done = true +++ [**Tofu**][tofu] is an easy-to-use, open-source, two-factor @@ -9,8 +12,6 @@ authentication app designed specifically for iOS, made by [Calle Luks][calle]. I adopted it after migrating from Authy, and ended up overhauling its icon system. -<!-- more --> - It's a really well designed app: ![A screenshot of Tofu in action][sc] diff --git a/content/projects/txtodo/index.md b/content/projects/txtodo/index.md @@ -2,7 +2,10 @@ title = "txtodo" date = 2020-05-20 updated = 2022-06-14 -weight = 5 +description = "A minimalist open-source todo list app." +[extra] +type = "project" +done = true +++ [**txtodo**] is a minimalist open-source todo list app inspired by Jeff @@ -10,8 +13,6 @@ Huang's [*One File to Rule Them All*] and [Mac-assed Mac apps] like [IINA], [Sketch], and Safari. It's available for download on iOS and macOS via the App Store. -<!-- more --> - ![txtodo on MacOS Big Sur, with no tasks][macos] txtodo lists your immediate, short-term tasks to help you get things diff --git a/content/work/_index.md b/content/work/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Work" +page_template = "article.html" +sort_by = "date" +insert_anchor_links = "left" ++++ diff --git a/content/work/beeper.md b/content/work/beeper.md @@ -0,0 +1,26 @@ ++++ +title = "Beeper" +description = "The best damn chat app on Earth" +date = 2023-06-05 ++++ + +Finally going to write this up. + +## Main notes +- How I found them + - Golang + - Matrix +- Technology + - Bridges + - Beepy +- Missed opportunities + - Humane/B2B + - Beeper Rewind + +## Bonus round from this year +Talked with an a mentor of mine—an successful startup founder, +executive, and angle investor of some reknown—who said that people +don't want message aggregation. Separation of concerns through distinct +apps is actually a feature. Benji insight derived from that: the +super-app that aggregates your different messaging platforms already +exists and is just the operating system. diff --git a/content/work/envelope.md b/content/work/envelope.md @@ -0,0 +1,9 @@ ++++ +title = "Envelope" +description = "The banking platform with built-in budgeting" +date = 2024-06-17 ++++ + +So much swag. + +Josh is brilliant. Working a 9-5. Frontend? Startups? diff --git a/static/fonts/tobias.woff2 b/static/fonts/tobias.woff2 Binary files differ. diff --git a/static/global.css b/static/global.css @@ -1,68 +1,164 @@ +@font-face { + font-family: "Tobias"; + src: url("/fonts/tobias.woff2") format("woff2"); +} + :root { - color-scheme: light dark; - font-family: - -apple-system, - BlinkMacSystemFont, - avenir next, - avenir, - segoe ui, - helvetica neue, - helvetica, - Cantarell, - Ubuntu, - roboto, - noto, - arial, - sans-serif; + --serif-font-family: "Tobias", Iowan Old Style, Apple Garamond, Baskerville, + Times New Roman, Droid Serif, Times, Source Serif Pro, serif, + Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; + --sans-serif-font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", + avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, + roboto, noto, arial, sans-serif; + --primary-color: light-dark(#333, #fafafa); + --secondary-color: light-dark(#999, #c7c7c7); + --background-color: light-dark(#fafafa, #333); + + font-family: var(--sans-serif-font-family); line-height: 1.618; + + color-scheme: light dark; + color: var(--primary-color); + background-color: var(--background-color); +} + +header { + padding-block-start: 2em; + padding-inline: 2em; + margin-inline: auto; + + #back svg { + width: 3ch; + } + + h1 { + text-transform: uppercase; + } + + .index { + display: none; + } + + &:has(div.index) { + display: flex; + justify-content: space-between; + + width: 100%; + max-width: 92ch; + padding-inline: 0; + + svg { + width: 12em; + } + } } -body { +main { width: 75%; max-width: 72ch; - margin: 2rem auto 2rem auto; -} + margin: 2em; -nav { - width: 100%; - display: flex; - flex-wrap: wrap; - justify-content: space-around; - gap: 1ch; + &:has(div.index) { + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-template-rows: 0.5fr 1fr 1fr 0.75fr 1.25fr; + grid-template-areas: + "par par par par par par" + "writing writing writing projects projects projects" + "about about reviews reviews reviews reviews" + "about about links links links links" + "work work work work work work"; + gap: 2ch; + width: 100%; + margin-inline: auto; - background-color: CanvasText; - color: Canvas; - font-weight: bold; + section { + padding: 1.5em; + border-style: solid; + border-width: 10px; + place-self: start; - padding-block: 1ch; - margin-block-end: 2ch; + border-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 491 209"><path fill="SelectedItem" d="m449.708 208.766 16.795-1.736 1.971.822 4.08.01 4.631-2.575 3.839-2.816 3.269-4.294 2.573-5.618-.014-3.085-.837-1.978-.001-6.99 4.972-26.013v-40.986l-1.98-23.958-3.022-15.691-2.813-33.781-5.956-18.546-2.699-6.463-2.292-3.318-7.095-2.785-28.636-3.951-4.019.133-.974.652-2.004-.784h-29.993l-3.066.853-34.738-2.463-12.206-1.391-15.993-.013-20.547 2.123-26.41 1.719-2.047-.828-8.996-.014-2.026.147-1.978.837-7.989.001L210.5.001 190.786 1.92 171.18 4.484l-13.094 2.03-6.552 1.465-.375.497.338 1.504.977.871 5.019.135 44.014-5.972 16.993-.013 38.007 4.985 19.989-.001 3.031-.828 1.976.828 21.997.014 37-3.97 40.007 3.957 28.989-.001 3.067-.854 36.405 1.904 15.706 2.856 4.551 1.86 2.086 3.027 1.904 4.753 4.144 12.187 1.7 6.784 2.95 35.702 2.909 14.332 2.068 38.971v18.986l-4.031 23.453-1.766 20.359-3.263 4.828-3.896 2.766-32.537 3.087-35-1.972-24.99.001-3.066.854-76.938-1.858-26.275-1.53-16.724-1.48-39.993.013-35.431 1.94L171.5 202l-38.993-.014-27.007-2.957-59.993 2.956-22.975-1.94-8.908-1.819-3.809-1.938-3.1-3.098-1.577-2.636-.124-10.047 1.856-8.945L7 168.5l-1.986-17.007L5 145.5l2.573-24.65 1.398-9.35-1.957-37.007V46.507l3.767-18.329 2.884-8.323 58.842-4.841 16.99.001 1.977.837L95.5 16l42.996-.015 1.978-.837 3.02-.134 3.952 1.848 2.05.122 2.007-1.004.472-1.541-4.449-3.29-1.03-.134h-17.993l-3.007.97L116.5 12l-4.026-.148-1.978-.836-2.022.131-.974.652-.974-.652-4.023-.132-2.003.784-2.004-.784-40.989-.001-22.944 2.853-2.106-.709-18.967 1.919-3.65 1.613-1.167 2.14-1.892 6.348-4.767 24.329v9.986l1.972 27.014v28.986l-2.972 20.014.001 21.989.97 3.007.001 13.99-1.855 7.945-.117 5.056 3.062 8.638 4.74 4.156 4.027 2.061 8.095 1.886 12.57 1.751h31.985l18.014-1.972 25.993-.013 14.509 1.194 34.484 1.791 33.777-2.11 53.23-1.875 79.007 4.985 3.989-.001 1.978-.837 2.026-.147 7 .999 7.996-.015 1.977-.828 3.031.828h16.992l1.978-.837 4.022-.133 1.978.837 3.026.148 4.026-.148 1.977-.837 8.997-.014 25.007 1.985"/></svg>') + 10 10 10 10 stretch stretch; - > a { - text-decoration: none; + h2 { + text-transform: uppercase; + } + + h3 { + font-family: var(--serif-font-family); + font-weight: 500; + } + + a { + text-decoration: none; + } + + .content { + display: flex; + flex-wrap: wrap; + row-gap: 2ch; + column-gap: 8ch; + } + + .caption { + color: var(--secondary-color); + } + + .more svg { + width: 14ch; + } + } + + #par { + grid-area: par; + padding-inline: 4ch; + text-align: center; + font-style: italic; + place-self: center; + } + #writing { + grid-area: writing; + } + #reviews { + grid-area: reviews; + } + #projects { + grid-area: projects; + } + #work { + grid-area: work; + } + #about { + grid-area: about; + } + #links { + grid-area: links; + } } } footer { - width: 100%; - color: GrayText; - text-align: center; + margin: 2em; + + .index { + display: none; + } - & > section { - width: 30%; + &:has(div.index) { display: flex; - margin-inline: auto; justify-content: center; - align-items: center; + } - & > * { - padding-inline: 1ch; - text-decoration: none; - } + svg { + color: var(--secondary-color); + width: 3ch; } } a { color: inherit; + &:hover, &:focus { color: #8e60a7; @@ -84,7 +180,7 @@ h6 { margin: 0; position: relative; - & > a { + a { text-decoration: none; } @@ -104,43 +200,58 @@ img { } small { - color: GrayText; + color: var(--secondary-color); + font-family: var(--serif-font-family); font-size: 100%; - & > a { + a { text-decoration: none; } } +blockquote { + margin-inline: 0; + padding-inline-start: 1em; + + border-left: 20px solid; + border-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 50 517"><path fill="SelectedItem" fill-rule="evenodd" d="m36.64 516.8.113-28.62.998-46.39 1.531-19.77 7.165-66.88 2.748-43.05-.057-66.405-1.687-18.46-1.916-12.444-7.503-30.777-6.584-21.107-15.946-39.892-6.928-20.626-2.075-8.16-1.753-10.401-1.012-17.45.998-18.632.746-2.84 2.112-6.127 2.434-4.714 16.154-27.66 1.988.344-2.224-5.82-6.466 11.74L8.996 29.23l-4.4 8.511-1.989 5.893-.856 4.138-1.015 18.61 1.991 24.452 3.836 16.481 3.99 11.788 16.945 42.892 6.927 20.626 8.012 34.851 2.825 22.139 1.058 38.369-1.068 38.04-3.73 49.45-5.882 50.35-1.779 19.91.424 72.54m.398-17.52h-.366l.183-18.61" clip-rule="evenodd"/></svg>') + 1 10 1 10 stretch stretch; +} + .zola-anchor { - opacity: 0; + opacity: 0%; position: absolute; - top: -1ch; - right: 100.5%; - width: 2ch; + top: -0.5em; + right: 100%; + width: 1em; transition: opacity 0.3s cubic-bezier(1, 0, 0, 1); + + &.visible { + opacity: 100%; + } } -.section-list { +.plain-list { list-style: none; margin: 0; - padding-inline-start: 0; + + li { + position: relative; + } } .section-title { + font-family: var(--serif-font-family); text-decoration: none; } .summary { - color: GrayText; + color: var(--secondary-color); font-size: 90%; - - & > p { - margin-block-start: 0; - } } -#article-header { - margin-block-end: 1ch; +.icon svg { + padding-inline-start: 0.5ch; + width: 1ch; } diff --git a/templates/anchor-link.html b/templates/anchor-link.html @@ -1,3 +1,3 @@ <a class="zola-anchor" href="#{{ id }}" aria-label="Anchor link for: {{ id }}"> - <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 70 71"><path fill="currentColor" d="m56.874 31.996-2.19 2.161-1.483 7.94-.105 10.197-1.451 1.45-11.61.105-4.397.781-2.234 4.49.075.946.741.741.952.075 6.322-2.788 13.824-.03 2.02-1.528.105-10.196 1.38-9.058.005-3.263-.717-1.378M45.073 41.12 34.58 33.948l-15.908-9.863-4.365-4.202-.807-1.99-1.452-1.45-1.867.005-.745.745-.006 3.281 8.404 8.595 16.463 10.068L49.35 50.569l1.625-1.81v-1.874"/></svg> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 50 41"><path fill="currentColor" d="m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578"/></svg> </a> diff --git a/templates/article.html b/templates/article.html @@ -1,21 +1,23 @@ -{% extends "index.html" %} -{% block content %} - <article> - <section id="article-header"> - <h1><a href="{{ current_url }}">{{ page.title }}</a></h1> - <small> - {% if page.extra is containing("book") %} - <i>{{ page.extra.book }}</i> by {{ page.extra.author }}. <br/> - Finished on {{ page.extra.finished | date(format="%B %d, %Y") }}. <br/> - Rating: {{ page.extra.rating }} <br/> - {% else %} - Published by <a href="{{ config.base_url }}">{{ config.title }}</a> on - <time datetime="{{ page.date }}">{{ page.date | date(format="%B %d, %Y") }}</time> - <br/> - {% endif %} - <a href="..">&lt; Back</a> - </small> - </section> - {{ page.content | safe }} - </article> -{% endblock content %} +{% extends "page.html" %} + +{% block header %} + <a href=".." id="back"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 62 37"><path fill="currentColor" d="m17.83 36.55.021-3.077-4.566-6.663-7.136-7.284v-2.052l8.136-8.284 2.557-3.661L15.247.775l-.723-.616h-1.048l-.725.62-2.5 6.442-9.753 9.797-.35 2.508 7.137 7.284 5.43 7.38 2.303 2.312 1.48.467m3.226-15.214 12.49-2.35 18.224-4.275 6.058-.115 1.978.837 2.052-.001 1.316-1.324v-1.054l-2.316-2.324-12.02-.135-18.76 4.522-18.728 2.561.13 2.429 1.326 1.325"/></svg> + </a> + {% if page.extra.type and page.extra.type == "link" %} + <h1><a href="{{ page.extra.link }}">{{ page.title }}</a></h1> + {% else %} + <h1><a href="{{ current_url }}">{{ page.title }}</a></h1> + {% endif %} + <small> + {% if page.extra is containing("book") %} + <i>{{ page.extra.book }}</i> by {{ page.extra.author }}. <br/> + Finished on {{ page.extra.finished | date(format="%B %d, %Y") }}. <br/> + Rating: {{ page.extra.rating }} <br/> + {% else %} + Published by <a href="{{ config.base_url }}">{{ config.title }}</a> on + <time datetime="{{ page.date }}">{{ page.date | date(format="%B %d, %Y") }}</time> + <br/> + {% endif %} + </small> +{% endblock header %} diff --git a/templates/base.html b/templates/base.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>{% if page.title %}{{ page.title }} :: {% endif %}{{ config.title }}</title> + + <link rel="stylesheet" href="{{ get_url(path="global.css") }}"> + <link rel="me" href="https://fosstodon.org/@FIGBERT"> + + <link type="application/atom+xml" rel="alternate" href="{{ get_url(path="atom.xml", trailing_slash=false) }}" title="{{ config.title }}"> + + <meta name="description" content="{% if page.description %}{{ page.description | safe }}{% else %}{{ config.description }}{% endif %}"> + <meta property="og:title" content="{% if page.title %}{{ page.title | safe }} :: {% endif %}{{ config.title }}"> + <meta property="og:description" content="{% if page.description %}{{ page.description | safe }}{% else %}{{ config.description }}{% endif %}"> + <meta property="og:type" content="website"> + + {% if current_url %} + <meta property="og:url" content="{{ current_url }}"> + <link rel="canonical" href="{{ current_url }}"> + {% endif %} + + <link rel="icon" href="{{ get_url(path="icon.png") }}"> + </head> + <body> + <header> + {% block header %}{% endblock header %} + </header> + <main> + {% block content %}{% endblock content %} + </main> + <footer> + {% block footer %}{% endblock footer %} + <!-- ✡ --> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 68 55"><path fill="currentColor" d="m40.81 54.37.845-1.02-.655-.97-.015-2.09 1.66-4.89 3.96-8.77.724-.63 9.017-.14 5.946 1.86 2.403-.34.008-2.05-5.135-4.29-3.43-5.38L53 22.38l-.133-2.02.3-1.32 3.71-6.18 6.146-2.71 4.72-3.16-.049-2.67-1.346-.45-3.05.12-4.63 2.57-2.557 2.51-5.698 1.65-5.058.11-1.485-.48-3.828-3.78-4.612-2.83-6.04-1.86L27.378 0h-4.053L22 1.32l-.132 3.03.478 1.3 1.655-.87 1.706-1.8.637.01 3.073 2.04 8.62 3.53 2.508 2.51-10.132 2.65-2.083-.03-.154-.63 1.538-2.66.122-1.06-.142-2.02-1.368-.31-.76.66-3.524 6.46-5.663 2.54-2-1.67-1.03-.13-7.05.12-2.892 1.72-1.06.12-2.02-.13-.975-.65L.01 17.32l.642 2.03-.652.97.01 3.06 1.37.31 1.458-1.75 13.51-2.93 2.694 1.56.632.81-7.068 12.24-1.504 3.46-1.092 1.24v1.06l1.316 1.32 3.02.14 15.946-3.86 2.703-.02 3.86 7.01 1.797 10.16.677.56m.809-12.17-3.17-5.71L40.351 35l3.252 1.57M15.43 37.7l-1.401-.37 4.538-8.67 3.144-4.67 1.125.36 3.04 3.03 1.693 2.66 3.082 3.31-.554.73-4.36 1.27m10.692-1.65-1.71.05-4.15-4.71-1.43-2.38-4.788-4.83-.354-1.53 1.634-2.71 10.662-2.61 7.087.02 2.758 2.66 2.557 3.66-2.343 7.48-1.975 3.9h-3.05l-.945-.69-1.084-.02m17.1.68-6.04.16-1.347-.45-.023-2.09 2.57-5.15 3.578 4.52 1.543 2.67m-6.544-14.81-2.78-2.69-.026-.82 3.02-.14 1.339.45-.157 1.34m.844-2.02-.026-.59z"/></svg> + </footer> + </body> +</html> diff --git a/templates/index.html b/templates/index.html @@ -1,53 +1,275 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>{% if page.title %}{{ page.title }} :: {% endif %}{{ config.title }}</title> - - <link rel="stylesheet" href="{{ get_url(path="global.css") }}"> - <link rel="me" href="https://fosstodon.org/@FIGBERT"> - - <link type="application/atom+xml" rel="alternate" href="{{ get_url(path="atom.xml", trailing_slash=false) }}" title="{{ config.title }}"> - - <meta name="description" content="{% if page.description %}{{ page.description | safe }}{% else %}{{ config.description }}{% endif %}"> - <meta property="og:title" content="{% if page.title %}{{ page.title | safe }} :: {% endif %}{{ config.title }}"> - <meta property="og:description" content="{% if page.description %}{{ page.description | safe }}{% else %}{{ config.description }}{% endif %}"> - <meta property="og:type" content="website"> - - {% if current_url %} - <meta property="og:url" content="{{ current_url }}"> - <link rel="canonical" href="{{ current_url }}"> - {% endif %} - - <link rel="icon" href="{{ get_url(path="icon.png") }}"> - </head> - <body> - <header> - <nav> - <a href="{{ config.base_url }}">/</a> - <a href="{{ get_url(path="@/posts/_index.md") }}">/posts</a> - <a href="{{ get_url(path="@/projects/_index.md") }}">/projects</a> - <a href="{{ get_url(path="@/reading/_index.md") }}">/reading</a> - <a href="{{ get_url(path="@/ketamine/_index.md") }}">/ketamine</a> - </nav> - </header> - <main> - {% block content %}{{ section.content | safe }}{% endblock content %} - </main> - <footer> - <section> - <a href="https://hotlinewebring.club/FIGBERT/previous" target="_blank" rel="noopener">&#x3C;</a> - <a href="https://hotlinewebring.club/" target="_blank" rel="noopener">Hotline Webring</a> - <a href="https://hotlinewebring.club/FIGBERT/next" target="_blank" rel="noopener">&#x3E;</a> - </section> - <section> - <a href="http://geekring.net/site/79/previous" target="_blank" rel="noopener">&#x3C;</a> - <a href="https://geekring.net/" target="_blank" rel="noopener">geekring</a> - <a href="http://geekring.net/site/79/next" target="_blank" rel="noopener">&#x3E;</a> - </section> - <section>✡︎</section> - </footer> - </body> -</html> +{% extends "base.html" %} + +{% block header %} + <div class="index"></div> + <!-- Benji Welner --> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 384 133"><path fill="currentColor" d="m122.975 132.53 1.172-.61 2.715-4.37.124-12.04-4.67-29.03-2.069-8.99-2.959-6.67-1.362-1.95-2.372-1.73-2.078.01-2.314 3.35 3.155 5.3 1.953 5.72 1.132 5.24 4.467 26.68-.031 12.08-.813-.02-3.159-2.57-3.154-3.75-4.03-7.93-3.691-8.74-1.49.75-1.353-.81-.014 10.11 5.578 11.62 4.816 4.84 5.918 3.84 3.05.12M16.766 93.72l5.411-2.43 6.989-4.98 1.549-2.5 3.57-3.62 7.045-12.03 4.54-17.6-.008-5.11-2.696-4.76-2.612-1.55-1.06-.13-7.991.01-1.976.82-1.328-.33 4.086-5.32 3.026-4.97 3.558-10.66v-8.12l-2.567-7.6L33.526.15l-3.08-.01-6.578 3.94-4.583 6.11-5.57 5.62-8.001 12L.138 39.45l.011 9.08 3.353 3.49.482 1.48-1.97 21.01.118 11.05 1.636 4.69 3.706 3.6m75.486-3.33 1.333-1.34 1.018-1.96 3.951-10.79 3.547 7.85 3.632 1.59L99.5 86l2.054-.14 2.342-1.73-.047-1.66-.666-.76-5.25-2.77-5.664-19.15-2.741-1.61-3.001 2.66-1.508-.34-2.493-2.35-1.03-.13-2.022.13-2.316 2.32.34 1.51 2.353 2.49.134 1.03.001 9.99-1.856 8.95.019 4.09 2.325 2.32m-21.977.03 9.687-4.59 3.101-3.1 1.537-2.67-1.323.28-1.023-.84 1.242-1.64-1.28-.18-4.862 1.67-8.016 4.05-1.362-.17-2.388-1.41-1.661-1.75-.133-4.03.506-1.32 2.924 1.68h6.108l2.756-1.7 3.21-6.22 2.348-6.38-.006-3.11-1.838-2.92-3.47-2.39-6.08.01-4.476 3.35-3.283 3.31-2.006 3.01-3.577 9.62.002 7.12 1.617 3.67 4.065 4.06 4.63 2.57m-39.909-3.88-5.063-.13-1.325-1.32-.134-15.03.97-3 .117-8.63 7.714-7.16 6.935-3.94 4.688-1.64 9.089.03.456 1.34.002 2.99-1.791 8.24-1.873 5.5-4.035 7.96-5.002 7-3.813 3.83-5.922 3.84M188.457 84l2.064-.15 3.767-3.67 1.929-3.78 2.613-9.94.817-1.51 2.638 2.86 1.549 2.5 3.982 2.98 6.368 3.42 1.29 1.14h5.05l2-2.94 3.345-11.35.001-5.12-3.662-15.87-4.915-10.75-2.767-2.67h-2.052l-1.517.9-1.81 3.46 2.843 20.41 1.764 4.31 3.459 4.46 1.654-6.25.001 8.12-1.896 5.39-1.529-.09-4.627-2.57-4.101-4.1-11.572-20.08-2.667.04-2.338 3.3-.108 1.05 1.956 5.01-.118 15.05-2.579 7.61-1.136 1.69-1.136-.36-1.309-1.32-2.064-4.94-6.288-26.48-2.433-5.89-2.368-1.73-1.084.02-2.322 2.31-.011 3.08 2.363 6.54 3.992 17.84 3.189 10.26 4.128 6.09 2.636 1.58m-49.479-.35 1.899-3.95v-4.12l-4.573-10.62-1.367-1.95-2.37-1.73h-1.112l-2.921 1.85-.492 1.51.467 1.48 1.795 1.84 3.569 7.63-.01 4.08-.675 1 2.299 3.32 2.019.13m118.463-2.46 6.514-4.5 10.03-10.04.332-1.51-2.69-2.34-.636.01-8.698 5.58-4.62 4.56-2.636 1.58-4.078-.01-.759-.66-1.579-2.64-.03-2.69 6.076-3.57 5.104-5.11 1.918-3.73 1.64-4.94-1.561-2.7-2.06-2.06-3.664-1.61h-1.124l-5.696 1.64-4.256 6.29-3.351 8.37-.12 9.05 1.672 4.74 2.402 3.93 5.353 2.71 5.055.11m48.469-3.47 1.189-2.82 3.072-12.76 2.478 5.24 1.071 1.08 3.666 1.62h2.117l4.642-1.96 1.282-1.12 2.494 3.68 3.47 2.39h6.108l2.636-1.58 5.095-5.09 6.064-9.28 3.417 11.33 1.707 1.6h1.054l1.672-.95.758-1.14 2.513-10.61 2.023-5.11 2.219-4.21 3.817-4.84 2.046-1.17 4.863-1.67 6.001 1.73h2.121l4.134-1.64-.491-.73.595-1-6.272-4.35-11.08-.01-6.753 3.69-7.402 10.88-2.765-2.56h-2.052l-2.763 2.67-2.422 4.36-1.762 1.66-1.361-.31.147-1.33 1.549-2.65.123-1.06-.123-2.04-1.554-2.62-2.754-1.69-5.113-.01-3.666 1.62-4.067 4.07-3.576 9.62-.169 2.5-7.297 1.85-3.824-12.91-1.633-8.16-1.227-1.22-2.508-.35-1.766 1.67-3.471 8.65-2.952-4.66-2.759-2.66h-4.052l-1.325 1.32v3.06l3.138 3.28 1.781 3.48 2.736 22.01 1.67 1.55 2.021.13m-16.529-5.47 1.872-3.01-1.823-2.48-2.807-29.1-2.818-14.21-5.137-18.93-2.028-2.03-3.691-1.58-2.385 2.3-.011 2.08 2.11 3.23 2.007 5.67 5.296 24.85 2.561 28.76 1.595 4.11.769.68 3.02.13M56.503 69.85 54.5 67.98v-.96l3.334-4.33 2.612-1.55 2.082.02.332 1.4-2.376 5.38-1.342 1.95m270.407-3.05h-2.07l.046-.84 5.68-3.68.648.19m-14.312 2.31-1.346-.32 1.329-.33m14.998-2.38-.027-.59zm1-1-.027-.59zm1-1-.027-.59zm-91 0-.38-1.34 2.569-4.63 1.763-1.67 2.048.01.153.63-1.39 2.4m87.237 2.6-.027-.59zm1-1-.027-.59zm-10 0-.366-1.31 3.349-3.28.337 1.33m-114.315 2.26-.525-2.29.498-2.3.498 2.3m114.524-1.71-.027-.59zm-221.657.04 1.111-.32 2.047-2.04 1.8-2.94-.621-1.03.506-.78-3.182-2.57-1.03-.13-2.478.48-1.869 1.97-.119 1.03 1.687 3.69m2.805 1.6-.027-.59zm13.947-2.83 1.339-.28 2.089-1.55-.045-2.66-.926-1.6-3.4-2.72h-4.052l-1.325 1.32v4.05l5.329 3.33m-112.302-1.3-.045-3.11 1.855-7.95-.001-3.99-.827-3.03 8.557-11.66 8.571-8.52 1.576 2.16.124 8.04-3.737 9.73-8.964 11.97-6.309 6.31"/></svg> + <!-- figbert.com --> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 400 138"><path fill="currentColor" d="m100.501 137.87 2.971-1.85 1.825-1.85.922-1.84 2.651-11.77-.001-3.12-3.362-10.41-3.22-6.22-4.002-6-6-8-2.574-2.63-6.423-11.36-1.52-1.57-1.75-4.72-1.522-.51-2.022.13-1.705 1.6-3.265 9.03-1.369-2.22.003-3.11 2.553-4.61 3.861-2.05 5.579-1.87 1.731-2.37.036-3.68-2.344-1.73-2.08.01-1.29 1.14-8.368 4.42-4.13 4.14-.656 1.28-2.024 8.71-5.718-11.02-1.761-1.66h-1.054l-1.758 1.65-1.571 2.63v1.12l2.143 3.25 4.047 7.99 3.509 11.59 1.155 1.6 2.62 13.1 5.094 10.09 5.573 6.63 1.692 2.66 4.833 4.81 4.006 3.01 11.625 5.58m1.103-7.04-1.353-.15-8.375-4.39-10.101-10.1-5.221-8.23-5.36-11.4-.24-2.72-1.605-1.55.696-1.79-.133-4.03-.694-.94.363-1.35 3.95 2.66 1.084.02 3.73-2.67 3.399-5.24 5.027 8.23 5.574 6.63 3.43 5.38 1.57 1.62 5.235 9.25 2.348 6.38.001 6.12-1.763 6.02M39.971 95.53l1.165-.6 1.546-2.13.174-1.36-2.107-3.22-7.609-22.66.357-1.54 2.003-2.04.365-1.11-2.309-1.73-1.608-.22-2.808-6.36.36-1.43 5.452-7.22 2.033-11.42-1.936-10.26-3.764-6.42-3.359-3.94-5.372-3.73-3.08.01-3.325 3.32-.135 14.02 2.577 14.66 3.051 11.15 3.223 9.14.031 1.69-6.086 4.59-4.626 4.57-8.656 4.53-1.001-.66H3.473l-1.606.91-1.723 2.38.014 1.08.888 1.51 3.396 1.83 2.112-.01 12.63-6.57 5.834-5.79 2.034-.42 7.7 21.14 2.082 3.09 2.643 1.52m80.02-11.98 2.752-2.62 1.617-3.67.001-9.12-1.639-4.69-1.943-2.94-3.283-3.31-3.448-2.36h-4.108l-2.613 1.55-1.549 2.01-.498-.44-5.525-23.79-5.125-18.91.724-3.12-2.76-9.03-1.079-1.88L89.526.15h-3.052l-2.325 2.32-.014 2.09 3.063 9.69 10.297 42.68 2.365 7.51-.354 1.36-.98-.65h-2.052l-1.977 1.87-.481 1.48.122 2.05 1.577 2.64 2.095 2.09 6.225 4.23 9.406 4.36M141.457 81l2.093-.14 2.64-1.58 3.098-3.1 5.4-12.4 1.542-2.47 2.245 5.6 2.027 3.09.972.85 1.03.13 2.019-.13.724-.63 4.077-8.96 6.673-21.2 5.136-.16 1.689-2.37-3.84-4.03-1.486-.48-4.022.13-3.776 3.69-4.196 14.13-2.384 5.95-1.428-2.64-1.461-4.53-.706-.6-2.019-.13-1.486.48-1.306 1.32-3.03 5.23-1.655-2.52-2.837-2.81-5.636-3.58h-3.108l-3.731 2.67-1.943 2.94-1.64 4.69.002 11.12 4.556 10.6 2.756 1.7m-21.896-4.03-3.104.03-3.297-2.34-.016-8.08 1.872-4.34 1.278.71 3.579 5.64.122 7.05m94.481.48 10.705-3.68 2.64-2.58 2.38-1.44 2.884-3.41 4.949-4.4 2.776-3.97-1.3.3-3.027-2.62-6.662 4.54-8.633 7.57-5.642 2.54-.831-.66-2.572-6.61.016-10.09.703-.94.225-1.58 6.114-3.67 5.059-5.05 1.617-3.67.118-4.06-.455-1.33h-1.054l.05 1.66-1.81-.54-6.525 6.99-2.668 1.54-.359-.3-.148-10.02.97-3-.123-21.05-2.88-3.95-2.478-.48-1.485.48-.87.97-.134 1.03.133 3.03.837 1.97.014 21-.147 2.03-.837 1.97-.108 6.58-10.135 2.67-1.629 2.69.015 1.09 2.316 2.32 6.022.13 2.392-.92 2.839 21.15 1.251 2.26 3.04 3.03m49.412-1.66 2.613-.89 1.8-3.44-1.558-2.7-1.758-1.65-2.66.91-1.723 2.38.956 3.68m-114.531 1.71-1.405-.31.308-1.37 3.243.15m-43.188-4.52-.359-1.31.332-.28.332 1.33m41.672-1.72L138.062 64l.076-6.55 2.364-3.25 4.349 4.27v5.06m-46.373 2.68.027.59zm-47.503-7.68 1.161-.6 1.686-2.4-3.296-3.38-2.659-.05-1.729 2.35.011 3.08 1.325 1.32 2.022.13m270.252-1.24 6.421-2.44 3.329-3.3 2.749-3.77 2.615-5.68v-10.1l-1.696-2.76-2.938-1.94-3.737-1.6-8.247 1.77-10.428 4.79-2.066 2.06-1.616 3.67v5.12l2.574 5.62 2.007 3.01 2.095 2.09 2.941 1.95 4.687 1.63m-34.641-1.17 3.227-2.22 1.838-2.92-.009-4.1-1.695 1.41-.655-.01V47.2l-3.975 2.62-.504-.32-.875-.97-.134-1.03.134-7.03 4.325-4.32 2.659-.25 1.729-2.35-.011-3.08-1.325-1.32-4.08-.01-2.638 1.58-2.998 2-2.308 2.28-2.364 3.45-.004 10.11 2.573 5.62 2.767 2.67M52.522 55.79l-.027-.59zm184.268-1.27-.593-.02zm83.76-3.68-3.077.01-3.758-3.66-2.567-3.66.01-5.06.973-.33 1.73 2.3.239 1.69 2.346 1.73 3.101-.01-1.26-1.55.928-1.03 1.529-6.49 2.702-1.64h2.108l3.296 2.34.017 2.08-1.66 4.89-1.919 3.73m28.676 3.33 3.355-7.23 3.953-10.87 3.472 11.8 1.73 1.64h2.052l1.724-1.63 2.458-5.4 2.578-3.63 3.65-8.11 6.756 9.09 6.754 4.69h5.107l2.155-1.55-.749-.36-1.802-3.27-4.341-2.39-2.101-2.1-8.002-11-3.427-6.37-.762-.67h-3.05l-1.683 1.57-2.527 12.7-1.971 4.28-1.449-2.97-1.803-7.44-1.517-2.14h-4.05l-2.766 2.67-2.061 4.91-2.316 7.43-1.544 2.53-2.575-11.96-.69-.58h-3.046l-2.338 3.3-.008 2.11 2.599 11.92 1.953 5.72 1.296 2.27 1.496 1.38 2.021.13M26.71 42.71l-2.019-6.28-2.562-16.87.374-2.42 4.795 4.69 2.57 6.61-.017 11.09m369.939-3.01-.593-.02z"/></svg> +{% endblock header %} + +{% macro first_from_grouped(path, limit, att, val) %} + {% set section = get_section(path=path) %} + {% set pages = section.pages | filter(attribute="extra." ~ att, value=val) %} + {% if pages | length > 0 %} + <ul class="plain-list"> + {% for page in pages %} + {% if loop.index > limit %}{% break %}{% endif %} + <li><a href="{{ page.permalink }}">{{ page.title }}</a></li> + {% endfor %} + </ul> + {% else %} + <div class="caption">Coming soon...</div> + {% endif %} +{% endmacro first_from_grouped %} + +{% macro first_from(path, limit) %} + {% set section = get_section(path=path) %} + <ul class="plain-list"> + {% for page in section.pages %} + {% if loop.index > limit %}{% break %}{% endif %} + <li> + {% if page.extra is containing("book") %} + {% if page.extra is containing("no_link") %} + <span>{{ page.extra.book }} {{ page.extra.rating }}</span> + {% else %} + <a href="{{ page.permalink }}">{{ page.extra.book }} {{ page.extra.rating }}</span></a> + {% endif %} + {% else %} + <a href="{{ page.permalink }}">{{ page.title }}</a> + {% endif %} + </li> + {% endfor %} + </ul> +{% endmacro first_from %} + +{% block content %} + <div class="index"></div> + + <p id="par"> + I’m Benji, an Israeli-American programmer building secure, clean, and + effective systems. I use modern technologies to build software that avoids + bloat and unnecessary complexity. I want to work on real and interesting + problems in challenging areas that matter. + </p> + + <section id="writing"> + <h2>Blog</h2> + <div class="content"> + <div> + <h3>Long-form</h3> + <div class="caption"> + {{ self::first_from_grouped(path="posts/_index.md", limit=2, att="type", val="post") }} + </div> + </div> + + <div> + <h3>Link commentary</h3> + <div class="caption"> + {{ self::first_from_grouped(path="posts/_index.md", limit=2, att="type", val="link") }} + </div> + </div> + + <div class="caption"> + <a href="{{ get_url(path="@/posts/_index.md") }}" class="more"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 304 58"><path fill="currentColor" fill-rule="evenodd" d="m270.651 37.19 4.296-2.059 4.56-3.465 3.245-3.33-2.111-.643-1.154-3.39-1.488-2.324-2.255-1.244-5.988.84-3.611 1.202-5.58 5.735 1.368 7.586m4.347-7.397.067-.479 1.868-1.163 6.546-1.718-2.172 1.982M267 33.5l-.5-.5-.5.5.5.5zm22.605 16.816 6.715-5.77 5.103-9.364 1.809-5.332-.015-8.687-1.834-6.521-1.141-2.383-8.993-8.695-4.97-.805-.754 1.403 1.977 2.466 8.689 7.539 2.067 5.671-.762 13.23-9.269 16.553m-36.534-13.482 1.732-2.971 2.798-8.823 2.327 1.076.831 1.335 1.989-1.136-.944-3.725-2.004-2.161-5.882 2.268-1.269 2.396-6.813.358-2.403.914-4.626-3.11-4.597.21-4.507 2.806-2.838 5.253-1.161-4.326.035-3.662-.661-.978-4.1 4.206-2.717 6.008-2.342-2.677-2.186-5.012-3.824 4.032-1.037 2.418-1.12-4.159-.634-.831-3.338 3.986-.081 1.695 1.294 5.251 2.013 5.099 1.92.255 2.924-4.335 1.006-2.618 3.537 3.644 7.284-4.233 3.761 1.873 5.701 1.852 4.665.125 4.368-4.626.971-2.552 4.625-1.662 3.248 6.289m-17.398-5.158-.973-.973 1.266-1.136m-49.299-3.873-1.951-3.097-3.644-.113-3.249 2.902-2.662 4.264-.57-.182-.543-1.273-1.842.977-1.583 3.332-5.349-5.206-5.746-.622-10.942 5.684-5.63.311-1.828-15.327.949-8.319 2.021-2.842 2.317 3.911 2.334 12.611 1.527-14.851-1.619-2.77-4.468-3.764-1.812.026-3.39 3.261-1.694 6.182-.57 22.315-4.478-1.481-2.888.769-.369.599 4.429 4.844 7.727 4.204 4.195-3.593 5.691-2.253 4.853 5.158 7.282-.065 7.932-7.105 1.958 4.788 2.745-.001 4.551-9.074M161 30.5l-.5-.5-.5.5.5.5zm-2.165 5.026-5.986-.953-.12-.913 2.579-1.218M74.559 46.897l3.364-3.116-2.101-1.123-4.759.949-3.63-5.758 7.401-3.466.478-.591-4.456-3.079-3.891.511-3.406 3.435-.767 8.277 4.649 4.471m41.577-2.124.785-2.818-4.751-2.249-3.698-4.984-.547-2.333-3.597.702 1.83-3.47 4.171-3.935 3.073.92 2.659-2.234-3.819-3.223-5.224.99-3.91 3.965-3.18 5.983-.5.152-3.114-21.297-.925.355-.655 23.239.174 8.649 4.007.444 3.53-6.88 4.61 4.836 1.329.796 6.06 2.398m-49.598 5.88.527-3.928-1.278-9.236-2.77-.184-1.583 6.123.295 5.749m-15.555-3.176 3.187-1.941.627-3.959-3.699.771-5.094 2.006-1.73-2.368 1.2-2.928 7.158-5.111-1.592-3.1-.93-.524-2.049.671-6.658 6.184-.917 1.974.055 8.846M60.1 32.947l-2.472-4.596-3.39-.38-.205 2.796m-7.472 16.811 1.618-.75 1.031-5.023-.175-26.638-2.678 2.068-.719 20.66M18.534 57.372l1.839-1.893-.938-1.198-9.008-1.879-3.322-3.369-1.36-4.874.075-11.26 2.733-6.847 1.986-3.577 10.213-9.916 8.343-3.504-5.576-2.248-5.471 2.061-4.175 3.155-7.16 8.174-4.137 8.631-1.904 6.967.825 10.43L2.74 50.88l5.843 5.609" clip-rule="evenodd"/></svg> + </a> + </div> + </div> + </section> + + <section id="reviews"> + <h2>Reviews</h2> + + <div class="content"> + <div> + <h3>Reading</h3> + <div class="caption"> + {{ self::first_from(path="reading/_index.md", limit=3) }} + </div> + + <div class="caption"> + <a href="{{ get_url(path="@/reading/_index.md") }}" class="more"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 304 58"><path fill="currentColor" fill-rule="evenodd" d="m270.651 37.19 4.296-2.059 4.56-3.465 3.245-3.33-2.111-.643-1.154-3.39-1.488-2.324-2.255-1.244-5.988.84-3.611 1.202-5.58 5.735 1.368 7.586m4.347-7.397.067-.479 1.868-1.163 6.546-1.718-2.172 1.982M267 33.5l-.5-.5-.5.5.5.5zm22.605 16.816 6.715-5.77 5.103-9.364 1.809-5.332-.015-8.687-1.834-6.521-1.141-2.383-8.993-8.695-4.97-.805-.754 1.403 1.977 2.466 8.689 7.539 2.067 5.671-.762 13.23-9.269 16.553m-36.534-13.482 1.732-2.971 2.798-8.823 2.327 1.076.831 1.335 1.989-1.136-.944-3.725-2.004-2.161-5.882 2.268-1.269 2.396-6.813.358-2.403.914-4.626-3.11-4.597.21-4.507 2.806-2.838 5.253-1.161-4.326.035-3.662-.661-.978-4.1 4.206-2.717 6.008-2.342-2.677-2.186-5.012-3.824 4.032-1.037 2.418-1.12-4.159-.634-.831-3.338 3.986-.081 1.695 1.294 5.251 2.013 5.099 1.92.255 2.924-4.335 1.006-2.618 3.537 3.644 7.284-4.233 3.761 1.873 5.701 1.852 4.665.125 4.368-4.626.971-2.552 4.625-1.662 3.248 6.289m-17.398-5.158-.973-.973 1.266-1.136m-49.299-3.873-1.951-3.097-3.644-.113-3.249 2.902-2.662 4.264-.57-.182-.543-1.273-1.842.977-1.583 3.332-5.349-5.206-5.746-.622-10.942 5.684-5.63.311-1.828-15.327.949-8.319 2.021-2.842 2.317 3.911 2.334 12.611 1.527-14.851-1.619-2.77-4.468-3.764-1.812.026-3.39 3.261-1.694 6.182-.57 22.315-4.478-1.481-2.888.769-.369.599 4.429 4.844 7.727 4.204 4.195-3.593 5.691-2.253 4.853 5.158 7.282-.065 7.932-7.105 1.958 4.788 2.745-.001 4.551-9.074M161 30.5l-.5-.5-.5.5.5.5zm-2.165 5.026-5.986-.953-.12-.913 2.579-1.218M74.559 46.897l3.364-3.116-2.101-1.123-4.759.949-3.63-5.758 7.401-3.466.478-.591-4.456-3.079-3.891.511-3.406 3.435-.767 8.277 4.649 4.471m41.577-2.124.785-2.818-4.751-2.249-3.698-4.984-.547-2.333-3.597.702 1.83-3.47 4.171-3.935 3.073.92 2.659-2.234-3.819-3.223-5.224.99-3.91 3.965-3.18 5.983-.5.152-3.114-21.297-.925.355-.655 23.239.174 8.649 4.007.444 3.53-6.88 4.61 4.836 1.329.796 6.06 2.398m-49.598 5.88.527-3.928-1.278-9.236-2.77-.184-1.583 6.123.295 5.749m-15.555-3.176 3.187-1.941.627-3.959-3.699.771-5.094 2.006-1.73-2.368 1.2-2.928 7.158-5.111-1.592-3.1-.93-.524-2.049.671-6.658 6.184-.917 1.974.055 8.846M60.1 32.947l-2.472-4.596-3.39-.38-.205 2.796m-7.472 16.811 1.618-.75 1.031-5.023-.175-26.638-2.678 2.068-.719 20.66M18.534 57.372l1.839-1.893-.938-1.198-9.008-1.879-3.322-3.369-1.36-4.874.075-11.26 2.733-6.847 1.986-3.577 10.213-9.916 8.343-3.504-5.576-2.248-5.471 2.061-4.175 3.155-7.16 8.174-4.137 8.631-1.904 6.967.825 10.43L2.74 50.88l5.843 5.609" clip-rule="evenodd"/></svg> + </a> + </div> + </div> + + <div> + <h3>Video</h3> + <div class="caption"> + <a href="https://letterboxd.com/figbert">Letterboxd</a> + </div> + </div> + + <div> + <h3>Places</h3> + <div class="caption"> + <a href="https://www.corner.inc/figbert">Corner</a> + </div> + </div> + </div> + </section> + + <section id="projects"> + <h2>Projects</h2> + + <div class="content"> + <div> + <h3>Current</h3> + <div class="caption"> + {{ self::first_from_grouped(path="projects/_index.md", limit=2, att="done", val=false) }} + </div> + </div> + + <div> + <h3>Done</h3> + <div class="caption"> + {{ self::first_from_grouped(path="projects/_index.md", limit=3, att="done", val=true) }} + </div> + </div> + + <div class="caption"> + <a href="{{ get_url(path="@/projects/_index.md") }}" class="more"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 304 58"><path fill="currentColor" fill-rule="evenodd" d="m270.651 37.19 4.296-2.059 4.56-3.465 3.245-3.33-2.111-.643-1.154-3.39-1.488-2.324-2.255-1.244-5.988.84-3.611 1.202-5.58 5.735 1.368 7.586m4.347-7.397.067-.479 1.868-1.163 6.546-1.718-2.172 1.982M267 33.5l-.5-.5-.5.5.5.5zm22.605 16.816 6.715-5.77 5.103-9.364 1.809-5.332-.015-8.687-1.834-6.521-1.141-2.383-8.993-8.695-4.97-.805-.754 1.403 1.977 2.466 8.689 7.539 2.067 5.671-.762 13.23-9.269 16.553m-36.534-13.482 1.732-2.971 2.798-8.823 2.327 1.076.831 1.335 1.989-1.136-.944-3.725-2.004-2.161-5.882 2.268-1.269 2.396-6.813.358-2.403.914-4.626-3.11-4.597.21-4.507 2.806-2.838 5.253-1.161-4.326.035-3.662-.661-.978-4.1 4.206-2.717 6.008-2.342-2.677-2.186-5.012-3.824 4.032-1.037 2.418-1.12-4.159-.634-.831-3.338 3.986-.081 1.695 1.294 5.251 2.013 5.099 1.92.255 2.924-4.335 1.006-2.618 3.537 3.644 7.284-4.233 3.761 1.873 5.701 1.852 4.665.125 4.368-4.626.971-2.552 4.625-1.662 3.248 6.289m-17.398-5.158-.973-.973 1.266-1.136m-49.299-3.873-1.951-3.097-3.644-.113-3.249 2.902-2.662 4.264-.57-.182-.543-1.273-1.842.977-1.583 3.332-5.349-5.206-5.746-.622-10.942 5.684-5.63.311-1.828-15.327.949-8.319 2.021-2.842 2.317 3.911 2.334 12.611 1.527-14.851-1.619-2.77-4.468-3.764-1.812.026-3.39 3.261-1.694 6.182-.57 22.315-4.478-1.481-2.888.769-.369.599 4.429 4.844 7.727 4.204 4.195-3.593 5.691-2.253 4.853 5.158 7.282-.065 7.932-7.105 1.958 4.788 2.745-.001 4.551-9.074M161 30.5l-.5-.5-.5.5.5.5zm-2.165 5.026-5.986-.953-.12-.913 2.579-1.218M74.559 46.897l3.364-3.116-2.101-1.123-4.759.949-3.63-5.758 7.401-3.466.478-.591-4.456-3.079-3.891.511-3.406 3.435-.767 8.277 4.649 4.471m41.577-2.124.785-2.818-4.751-2.249-3.698-4.984-.547-2.333-3.597.702 1.83-3.47 4.171-3.935 3.073.92 2.659-2.234-3.819-3.223-5.224.99-3.91 3.965-3.18 5.983-.5.152-3.114-21.297-.925.355-.655 23.239.174 8.649 4.007.444 3.53-6.88 4.61 4.836 1.329.796 6.06 2.398m-49.598 5.88.527-3.928-1.278-9.236-2.77-.184-1.583 6.123.295 5.749m-15.555-3.176 3.187-1.941.627-3.959-3.699.771-5.094 2.006-1.73-2.368 1.2-2.928 7.158-5.111-1.592-3.1-.93-.524-2.049.671-6.658 6.184-.917 1.974.055 8.846M60.1 32.947l-2.472-4.596-3.39-.38-.205 2.796m-7.472 16.811 1.618-.75 1.031-5.023-.175-26.638-2.678 2.068-.719 20.66M18.534 57.372l1.839-1.893-.938-1.198-9.008-1.879-3.322-3.369-1.36-4.874.075-11.26 2.733-6.847 1.986-3.577 10.213-9.916 8.343-3.504-5.576-2.248-5.471 2.061-4.175 3.155-7.16 8.174-4.137 8.631-1.904 6.967.825 10.43L2.74 50.88l5.843 5.609" clip-rule="evenodd"/></svg> + </a> + </div> + </div> + </section> + + <section id="about"> + <h2>About</h2> + + <div class="content"> + <div> + <h3>Social links</h3> + <div class="caption"> + <ul class="plain-list"> + <li><a href="https://fosstodon.org/@figbert">Mastodon</a></li> + <li><a href="https://live.figbert.com/">Owncast</a></li> + <li><a href="https://git.figbert.com">Git</a></li> + </ul> + </div> + </div> + + <div> + <h3>Stanford</h3> + <div class="caption"> + <a href="https://profiles.stanford.edu/benji">I go here.</a> + Currently a sophomore working on a BS in Design and MS in + Computer Science. + <a href="https://miles.land/posts/stanford-is-a-platform/"> + Having a blast. + </a> + </div> + </div> + + <div> + <h3>Email</h3> + <div class="caption"> + <a href="mailto:figbert@figbert.com">figbert@figbert.com</a> + </div> + <div class="caption"> + <a href="/files/publickey-pgp.asc">PGP</a> • + <a href="/files/age.txt">age</a> • + <a href="/files/minisign.pub">minisign</a> + </div> + </div> + + <div> + <h3>Crypto</h3> + <div class="caption"> + <a href="/files/bitcoin.txt">Bitcoin</a> • + <a href="/files/monero.txt">Monero</a> • + <a href="/files/zcash.txt">ZCash</a> + </div> + </div> + </div> + </section> + + <section id="work"> + <h2>Work</h2> + + <div class="content"> + <div> + <h3>Hire me</h3> + <p class="caption"> + I am available for in-person work anywhere in the world from June + through mid-September, and remote-first projects (long- and short-term) + concurrent with my studies during the rest of the year. + </p> + <p class="caption"> + I mesh well with great teams who are pushing the envelope and want to + give me a voice in designing product while I code my ass off. + </p> + </div> + + <div> + <h3>Job history</h3> + <div class="caption"> + {{ self::first_from(path="work/_index.md", limit=3) }} + </div> + <div class="caption"> + <a href="{{ get_url(path="@/work/_index.md") }}" class="more"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 304 58"><path fill="currentColor" fill-rule="evenodd" d="m270.651 37.19 4.296-2.059 4.56-3.465 3.245-3.33-2.111-.643-1.154-3.39-1.488-2.324-2.255-1.244-5.988.84-3.611 1.202-5.58 5.735 1.368 7.586m4.347-7.397.067-.479 1.868-1.163 6.546-1.718-2.172 1.982M267 33.5l-.5-.5-.5.5.5.5zm22.605 16.816 6.715-5.77 5.103-9.364 1.809-5.332-.015-8.687-1.834-6.521-1.141-2.383-8.993-8.695-4.97-.805-.754 1.403 1.977 2.466 8.689 7.539 2.067 5.671-.762 13.23-9.269 16.553m-36.534-13.482 1.732-2.971 2.798-8.823 2.327 1.076.831 1.335 1.989-1.136-.944-3.725-2.004-2.161-5.882 2.268-1.269 2.396-6.813.358-2.403.914-4.626-3.11-4.597.21-4.507 2.806-2.838 5.253-1.161-4.326.035-3.662-.661-.978-4.1 4.206-2.717 6.008-2.342-2.677-2.186-5.012-3.824 4.032-1.037 2.418-1.12-4.159-.634-.831-3.338 3.986-.081 1.695 1.294 5.251 2.013 5.099 1.92.255 2.924-4.335 1.006-2.618 3.537 3.644 7.284-4.233 3.761 1.873 5.701 1.852 4.665.125 4.368-4.626.971-2.552 4.625-1.662 3.248 6.289m-17.398-5.158-.973-.973 1.266-1.136m-49.299-3.873-1.951-3.097-3.644-.113-3.249 2.902-2.662 4.264-.57-.182-.543-1.273-1.842.977-1.583 3.332-5.349-5.206-5.746-.622-10.942 5.684-5.63.311-1.828-15.327.949-8.319 2.021-2.842 2.317 3.911 2.334 12.611 1.527-14.851-1.619-2.77-4.468-3.764-1.812.026-3.39 3.261-1.694 6.182-.57 22.315-4.478-1.481-2.888.769-.369.599 4.429 4.844 7.727 4.204 4.195-3.593 5.691-2.253 4.853 5.158 7.282-.065 7.932-7.105 1.958 4.788 2.745-.001 4.551-9.074M161 30.5l-.5-.5-.5.5.5.5zm-2.165 5.026-5.986-.953-.12-.913 2.579-1.218M74.559 46.897l3.364-3.116-2.101-1.123-4.759.949-3.63-5.758 7.401-3.466.478-.591-4.456-3.079-3.891.511-3.406 3.435-.767 8.277 4.649 4.471m41.577-2.124.785-2.818-4.751-2.249-3.698-4.984-.547-2.333-3.597.702 1.83-3.47 4.171-3.935 3.073.92 2.659-2.234-3.819-3.223-5.224.99-3.91 3.965-3.18 5.983-.5.152-3.114-21.297-.925.355-.655 23.239.174 8.649 4.007.444 3.53-6.88 4.61 4.836 1.329.796 6.06 2.398m-49.598 5.88.527-3.928-1.278-9.236-2.77-.184-1.583 6.123.295 5.749m-15.555-3.176 3.187-1.941.627-3.959-3.699.771-5.094 2.006-1.73-2.368 1.2-2.928 7.158-5.111-1.592-3.1-.93-.524-2.049.671-6.658 6.184-.917 1.974.055 8.846M60.1 32.947l-2.472-4.596-3.39-.38-.205 2.796m-7.472 16.811 1.618-.75 1.031-5.023-.175-26.638-2.678 2.068-.719 20.66M18.534 57.372l1.839-1.893-.938-1.198-9.008-1.879-3.322-3.369-1.36-4.874.075-11.26 2.733-6.847 1.986-3.577 10.213-9.916 8.343-3.504-5.576-2.248-5.471 2.061-4.175 3.155-7.16 8.174-4.137 8.631-1.904 6.967.825 10.43L2.74 50.88l5.843 5.609" clip-rule="evenodd"/></svg> + </a> + </div> + </div> + + <div> + <h3>CV</h3> + <div class="caption"> + <a href="/files/cv.pdf"> + Click here for the coolest one-page PDF on the net. + </a> + </div> + </div> + </div> + </section> + + <section id="links"> + <h2>Links</h2> + + <div class="content"> + <div> + <h3>Friends</h3> + <div class="caption"> + <ul class="plain-list"> + <li><a href="https://burningsilicon.dev/">Mira Welner</a></li> + <li><a href="https://jacobneplokh.com/">Jacob Neplokh</a></li> + <li><a href="https://miles.land/">R. Miles McCain</a></li> + </ul> + </div> + </div> + + <div> + <h3>Webrings</h3> + <div class="caption"> + Hotline + <a href="https://hotlinewebring.club/FIGBERT/previous" class="icon"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 47 47"><path fill="currentColor" d="m26.462 46.85 6.678-2.58 5.013-3.01 3.104-3.11 3.058-6.01 2.639-9.68-.123-2.04-6.612-15.67-2.004-2.01-6.75-2.75L21.41.1l-3.666 1.62-1.849 2.38-2.236 1.71-2.898 5.71-1.762 5.95.822 1.97.226 3.58 3.392 1.94.056.84-1.297-.11-3.454-1.47-2.585-2.53-3.662-2.56-1.508.34-.871.97L0 21.47l.467 1.48 4.317 4.31 3.737 1.92 4.695 1.56 2.226 2.07h1.054l4.758-4.65 5.577-8.64.123-1.06-.134-2.02-1.351-1.27-1.645.88-4.722 6.82-1.661-.05-.972-.65-1.001.6-.473-.3-.877-.97-.134-1.03.123-6.05 2.573-4.63 4.043-4.05 4.685-1.64 4.115.01 5.911 2.83L38.476 12l3.359 8.41v6.12l-4.7 9.75-7.917 4.92-4.688 1.63-3.088-.7-1.324 1.31v2.06l1.325 1.32"/></svg> + </a> + <a href="https://hotlinewebring.club/FIGBERT/next" class="icon"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 45 42"><path fill="currentColor" d="m19.44 41.95 1.506-.47.874-.98v-2.06l-1.626-1.72-3.45-1.5-7.063-7.07-2.92-5.73-1.66-4.89-.03-7.69 2.713-2.16 4.657-2.53 1.001.66h1.054l1.97-.81 6.766 1.75 4.921 2.93 1.066 1.07 1.616 3.66-.024 7.09-1.37.31-2.282-2.12-2.662-1.54-2.37 2.29v1.06l3.127 3.28 4.191 6.04 4.021.13 1.511-.5 4.707-6.67 3.593-2.64 1.556-3.3-2.365-1.71-2.689 1.56-3.026 2.97-3.467-11.89-2.093-3.05-7.273-3.68L12.487.12l-5.745 2.6L3.78 4.69 1.72 6.74.103 10.41.1 14.53l2.35 9.31 4.231 8.31 11.143 9.72m17.668-20.11-.027-.59Z"/></svg> + </a> + </div> + <div class="caption"> + geekring + <a href="https://geekring.net/site/79/previous" class="icon"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 47 47"><path fill="currentColor" d="m26.462 46.85 6.678-2.58 5.013-3.01 3.104-3.11 3.058-6.01 2.639-9.68-.123-2.04-6.612-15.67-2.004-2.01-6.75-2.75L21.41.1l-3.666 1.62-1.849 2.38-2.236 1.71-2.898 5.71-1.762 5.95.822 1.97.226 3.58 3.392 1.94.056.84-1.297-.11-3.454-1.47-2.585-2.53-3.662-2.56-1.508.34-.871.97L0 21.47l.467 1.48 4.317 4.31 3.737 1.92 4.695 1.56 2.226 2.07h1.054l4.758-4.65 5.577-8.64.123-1.06-.134-2.02-1.351-1.27-1.645.88-4.722 6.82-1.661-.05-.972-.65-1.001.6-.473-.3-.877-.97-.134-1.03.123-6.05 2.573-4.63 4.043-4.05 4.685-1.64 4.115.01 5.911 2.83L38.476 12l3.359 8.41v6.12l-4.7 9.75-7.917 4.92-4.688 1.63-3.088-.7-1.324 1.31v2.06l1.325 1.32"/></svg> + </a> + <a href="https://geekring.net/site/79/random" class="icon"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 49 57"><path fill="currentColor" d="m33.938 56.5 1.035-.56 2.743-7.19 6.094-4.25-.868-2.53-4.27-1.82-1.57-3.62.029-3.08 2.362.36.705-.59 2.518-7.47 2.327-2.91 2.233-1.7 1.53-2.67-4.035-5.21-1.6-10.58L40.495.12 39.469 0l-1.48.47-.82 1 .785 2-.134 5.03-4.322 4.32-1.662.25-1.723 2.35.354 1.53 1.752 1.8 2.997 5.99 1.613 3.67-.005 1.12-1.724 2.34-1.262.2-1.73 2.35.009 2.08.68 1-2.537 5.65-.793.62-1-.6-2.34 2.27.155 1.33 1.404 2.39 1.416.88 1.729 2.38.24 2.68 2.376 1.7m-15.542-3.86 3.532-14.88 2.244-4.27 1.063-1.07 3.45-1.5.744-1.75-.492-1.51-2.667-1.71-3.103-3.1-2.911-5.9-2.472-9.04-2.58 1.54-2.062 7.91-2.39 5.49-3.766 3.67-2.66.25-2.717 3.37-.133 2.03.48 1.48.977.86 1.508-.34 1.492-1.34 1.508.34 1.307 1.32 3.047 5.98 3.375 10.37 1.74 1.81m18.072-7.19-.027-.59Zm1.268-2.31-.593.02Zm-20.071-4.78-3.431-5.88-2.13-2.29v-1.06l4.133-4.29 2.207-3.95 3.214 5.95 1.997 2.11-2.021 1.55-2.374 5.38m19.208-3.43-.027-.59ZM39.2 21.62l-2.092-4.09.359-1.54 1.788-1.73 2.513 3.21"/></svg> + </a> + <a href="https://geekring.net/site/79/next" class="icon"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 45 42"><path fill="currentColor" d="m19.44 41.95 1.506-.47.874-.98v-2.06l-1.626-1.72-3.45-1.5-7.063-7.07-2.92-5.73-1.66-4.89-.03-7.69 2.713-2.16 4.657-2.53 1.001.66h1.054l1.97-.81 6.766 1.75 4.921 2.93 1.066 1.07 1.616 3.66-.024 7.09-1.37.31-2.282-2.12-2.662-1.54-2.37 2.29v1.06l3.127 3.28 4.191 6.04 4.021.13 1.511-.5 4.707-6.67 3.593-2.64 1.556-3.3-2.365-1.71-2.689 1.56-3.026 2.97-3.467-11.89-2.093-3.05-7.273-3.68L12.487.12l-5.745 2.6L3.78 4.69 1.72 6.74.103 10.41.1 14.53l2.35 9.31 4.231 8.31 11.143 9.72m17.668-20.11-.027-.59Z"/></svg> + </a> + </div> + </div> + </div> + </section> +{% endblock content %} + +{% block footer %} + <div class="index"></div> +{% endblock footer %} diff --git a/templates/page.html b/templates/page.html @@ -1,4 +1,11 @@ -{% extends "index.html" %} +{% extends "base.html" %} + +{% block header %} + <a href=".." id="back"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 62 37"><path fill="currentColor" d="m17.83 36.55.021-3.077-4.566-6.663-7.136-7.284v-2.052l8.136-8.284 2.557-3.661L15.247.775l-.723-.616h-1.048l-.725.62-2.5 6.442-9.753 9.797-.35 2.508 7.137 7.284 5.43 7.38 2.303 2.312 1.48.467m3.226-15.214 12.49-2.35 18.224-4.275 6.058-.115 1.978.837 2.052-.001 1.316-1.324v-1.054l-2.316-2.324-12.02-.135-18.76 4.522-18.728 2.561.13 2.429 1.326 1.325"/></svg> + </a> +{% endblock header %} + {% block content %} - {{ page.content | safe }} + {{ page.content | safe }} {% endblock content %} diff --git a/templates/section.html b/templates/section.html @@ -1,36 +1,49 @@ -{% extends "index.html" %} +{% extends "base.html" %} + +{% block header %} + <a href=".." id="back"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 62 37"><path fill="currentColor" d="m17.83 36.55.021-3.077-4.566-6.663-7.136-7.284v-2.052l8.136-8.284 2.557-3.661L15.247.775l-.723-.616h-1.048l-.725.62-2.5 6.442-9.753 9.797-.35 2.508 7.137 7.284 5.43 7.38 2.303 2.312 1.48.467m3.226-15.214 12.49-2.35 18.224-4.275 6.058-.115 1.978.837 2.052-.001 1.316-1.324v-1.054l-2.316-2.324-12.02-.135-18.76 4.522-18.728 2.561.13 2.429 1.326 1.325"/></svg> + </a> + <h1>{{ section.title }}</h1> +{% endblock header %} + {% block content %} - {% if section.content %} - {{ section.content | safe }} + {% if section.content %} + {{ section.content | safe }} + {% endif %} + <ul class="plain-list"> + {% for page in section.pages %} + <li> + {% if page.extra is containing("book") %} + {% if page.extra is containing("no_link") %} + <span class="section-title">{{ page.extra.book }}</span> + {% else %} + <a href="{{ page.permalink }}" class="section-title">{{ page.extra.book }}</a> + {% endif %} + {% elif page.extra.type and page.extra.type == "link" %} + <a href="{{ page.permalink }}" class="zola-anchor visible"> + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 50 41"><path fill="currentColor" d="m31.314 40.785 1.506-.455 1.309-1.322 1.842-3.584 2.553-7.752 9.495-4.556 1.688-1.802-2.376-2.336-4.937 1.639-3.804 1.95-1.525-7.05 11.994-4.443.624-.727.001-1.051-1.316-1.324-4.02-.135-7.551 2.868L34.093 4.6l-1.325-1.91L30.342.985 27.944 2.69l-.084 2.678 2.289 2.289 1.554 2.61.024 1.712-5.349 2.672-.746-.56-1.706-6.962-2.774-5.468L18.371 0l-1.662.897-1.705 2.426 1.556 2.689.782.607.793-.506.974 1.463 1.599 3.688-.015 5.082-.627.724-8.083 3.138L.566 22.617l-.565.682L0 24.349l1.316 1.325 8.02.135 10.947-3.846 1.089.026.453 1.338-.117 2.055-1.713 3.759-14.069 5.63.067 1.58 1.323 1.323 3.023.134 3.03-.827 1.944 1.684 1.084.014 2.635-1.571 2.633-2.578L32.321 30l.381 1.382-2.845 6.947.142 2.02m-3.604-12.71-.535-1.312.131-6.027.627-.724 5.492-2.501 1.564 4.21-.685 1.012-.229 2.578"/></svg> + </a> + <a href="{{ page.extra.link }}" class="section-title">{{ page.title }}</a> + {% else %} + <a href="{{ page.permalink }}" class="section-title">{{ page.title }}</a> {% endif %} - <ul class="section-list"> - {% for page in section.pages %} - <li> - {% if page.extra is containing("book") %} - {% if page.extra is containing("no_link") %} - <span>{{ page.extra.book }}</span> - {% else %} - <a href="{{ page.permalink }}">{{ page.extra.book }}</a> - {% endif %} - {% else %} - <a href="{{ page.permalink }}" class="section-title">{{ page.title }}</a> + {% if page.extra is containing("book") %} + <p class="summary"> + By: {{ page.extra.author }} <br/> + {% if page.extra is containing("no_link") %} + Finished: {{ page.extra.finished | date(format="%B %d, %Y") }} <br/> {% endif %} - {% if page.extra is containing("book") %} - <p class="summary"> - By: {{ page.extra.author }} <br/> - {% if page.extra is containing("no_link") %} - Finished: {{ page.extra.finished | date(format="%B %d, %Y") }} <br/> - {% endif %} - Rating: {{ page.extra.rating }} - </p> - {% else %} - {% if page.summary %} - <div class="summary">{{ page.summary | safe }}</div> - {% else %} - <p class="summary">{{ page.description }}</p> - {% endif %} - {% endif %} - </li> - {% endfor %} - </ul> + Rating: {{ page.extra.rating }} + </p> + {% else %} + {% if page.summary %} + <div class="summary">{{ page.summary | safe }}</div> + {% else %} + <p class="summary">{{ page.description }}</p> + {% endif %} + {% endif %} + </li> + {% endfor %} + </ul> {% endblock content %}