]> git.otsuka.systems Git - cotsuka.github.io/commitdiff
create missive and marginalia article types, add badges
authorCameron Otsuka <cameron@otsuka.haus>
Tue, 14 Apr 2026 06:24:26 +0000 (23:24 -0700)
committerCameron Otsuka <cameron@otsuka.haus>
Tue, 14 Apr 2026 06:24:26 +0000 (23:24 -0700)
70 files changed:
content/articles/bitcoin-mempools-cleared-is-nobody-using-bitcoin/index.mdx
content/articles/minimum-utxo-value/index.mdx
content/articles/monetary-system-enshittification/index.mdx
content/articles/r1-vs-o1-ai-as-commodity-or-moat/index.mdx
content/articles/removing-a-drive-from-a-btrfs-array.mdx
content/reviews/28-days-later.md
content/reviews/a-cinderella-story.md
content/reviews/a-complete-unknown.mdx
content/reviews/boiling-point.md
content/reviews/bugonia.md
content/reviews/burning.md
content/reviews/call-me-by-your-name.md
content/reviews/casino-royale.md
content/reviews/caught-stealing.md
content/reviews/challengers.md
content/reviews/chef.md
content/reviews/conclave.md
content/reviews/death-becomes-her.md
content/reviews/den-of-thieves-pantera.md
content/reviews/donnie-darko.md
content/reviews/f1-the-movie.md
content/reviews/fallen-angels/index.mdx
content/reviews/gnomeo-juliet.md
content/reviews/hamnet.md
content/reviews/house-of-huawei.md
content/reviews/hunchback-of-notre-dame.md
content/reviews/its-whats-inside.md
content/reviews/jurassic-park.md
content/reviews/marty-supreme.md
content/reviews/materialists.md
content/reviews/moulin-rouge.md
content/reviews/mulholland-drive.md
content/reviews/noah.md
content/reviews/nosferatu.md
content/reviews/one-battle-after-another.mdx
content/reviews/patlabor-the-movie.md
content/reviews/people-we-meet-on-vacation.md
content/reviews/perfect-days.md
content/reviews/problemista.md
content/reviews/sinners.md
content/reviews/star-wars-episode-iii-revenge-of-the-sith.md
content/reviews/subservience.md
content/reviews/superman.mdx
content/reviews/taipei-story.md
content/reviews/the-apprentice.md
content/reviews/the-boy-and-the-heron.md
content/reviews/the-godfather.md
content/reviews/the-little-mermaid.md
content/reviews/the-lord-of-the-rings-the-fellowship-of-the-ring.md
content/reviews/the-pianist.md
content/reviews/the-social-network.md
content/reviews/the-swan-princess.md
content/reviews/thunderbolts.md
content/reviews/tick-tick-boom.md
content/reviews/wake up dead man.md
content/reviews/warfare.md
content/reviews/when-harry-met-sally.md
content/reviews/wicked-for-good.mdx
content/reviews/wicked.md
src/components/metadata.astro
src/components/ui/badge.astro [new file with mode: 0644]
src/components/ui/contentlist.astro
src/content.config.ts
src/pages/feed.xml.ts
src/pages/index.astro
src/pages/reviews/[type]/[id]/index.astro [moved from src/pages/reviews/[category]/[id]/index.astro with 92% similarity]
src/pages/reviews/[type]/[id]/opengraph.png.ts [moved from src/pages/reviews/[category]/[id]/opengraph.png.ts with 90% similarity]
src/pages/reviews/index.astro
src/pages/search.astro
src/utils/generateContentUrl.ts

index e71ef363d825dbf188984d840b698df361287463..c931b5f6b6e8c1af83f1c925963756ded4f957b1 100644 (file)
@@ -1,5 +1,6 @@
 ---
 title: 'Bitcoin Mempools Cleared: Is Nobody Using Bitcoin?'
+type: missive
 date: 2025-02-09
 modified: 2025-10-24
 description: Bitcoin mempools have cleared before and there's no immediate reason to panic.
index 1e76262da2411abfbe5000baa6c0b547ce1a1691..6e679bdd789f5e419ef8619e2fc0847479e68dfd 100644 (file)
@@ -1,5 +1,6 @@
 ---
 title: Minimum UTXO Value
+type: missive
 date: 2023-08-04
 modified: 2025-02-07
 description: A look at what Bitcoin dust is, historical fee rates, how fees are calculated, and a decision on a minimum UTXO value to stay above the dust threshold.
index 291ec22429cbf9a10137b2b04f8ee050c14e5e70..c93d303c44844797d1414495b583c4e01c3eaf18 100644 (file)
@@ -1,5 +1,6 @@
 ---
 title: Monetary System Enshittification
+type: missive
 date: 2024-03-01
 modified: 2025-01-27
 description: Is the US monetary system experiencing enshittification? And how do we solve it?
index d4110a5935fd163ffa0a3c9aff48871988eddc01..e3086d5a8935206684d70f0b835c19597cc2cdff 100644 (file)
@@ -1,5 +1,6 @@
 ---
 title: 'R1 vs. o1: AI as Commodity or Moat'
+type: missive
 date: 2025-01-27
 modified: 2025-10-24
 description: Is DeepSeek's R1 an existential threat to OpenAI?
index df09719d1eeadeea357dbcfb0674675d0223d492..c5c765f0ec34ddecb9a71bd7f4bf05342865cc9b 100644 (file)
@@ -1,5 +1,6 @@
 ---
 title: 'Removing a Drive from a Btrfs Array'
+type: marginalia
 date: 2023-07-05
 modified: 2024-12-23
 description: If a drive is failing in an array, Btrfs could block attempts at removing the drive due to corrupted files. A quick write-up of how to get it removed.
index e00e3a23f98b1135fa2750badc09d60764dbd029..fc9218f961f4d2b8c34919a77b58ee29134c8019 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 28 Days Later
 date: 2025-06-06
 modified: 2025-12-07
index b2fc03d6e0bf216811cfd3287cccf79fbe3ba189..84158bb699915867b26332e11f11ca6417baa736 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: A Cinderella Story
 date: 2026-03-15
 modified: 2026-03-16
index ee11b0e5d7ff1ce11b4c490ea0e14d32caa94280..06ed3fd025517849b890a85ca1bb68d1f475ad6c 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: A Complete Unknown
 date: 2025-06-04
 modified: 2025-06-04
index 93bc683c5be4115e6287f14158763950e63090c6..eff4abc86ad4636a0e77782cd81232a6e2ddae85 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Boiling Point
 date: 2026-04-11
 modified: 2026-04-11
index 5f0f8186eb960c93dc9f5407613ea20747a81577..b638bccabb87548db5b72871f37ef56c4d7d6b42 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Bugonia
 date: 2025-10-30
 modified: 2025-11-01
index f1bee46c44102142f780e5ea1ed2c48b8b9db24d..04ca35ceb9745b90c3cda53c0a9c3db75d89fe15 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Burning
 date: 2025-02-28
 modified: 2025-03-02
index adaecb71f586bb21abdf1e88b9e1088a23d754c4..9848405b02cd749afcaca9e95a0ba6e8a0a28046 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Call Me By Your Name
 date: 2026-03-22
 modified: 2026-03-23
index 00786cbcff2e76223244fe46af5ae67bfc49ce34..7b4a4f9f52f59cb0af8a67b5d2378c6d46384375 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Casino Royale
 date: 2025-12-14
 modified: 2025-12-16
index f69da80f043a1e0b9235e171df453c9d9b664f9c..42758e6a4a604081f4e278bd3f0f2484c43b7f3a 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Caught Stealing
 date: 2025-09-12
 modified: 2025-09-13
index 4ec9100eea5114d3c819a3b99326fd2eb7046582..53c65948e68fd27d781dbe48213e6a219c88c9ed 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Challengers
 date: 2024-12-24
 modified: 2024-12-26
index 4959c5a95f7986e5d7f3137ddfd533df7a9e6872..2eb6330779f420e190477843e0deaa6e10a1813b 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Chef
 date: 2026-03-14
 modified: 2026-03-16
index 3097f36b2fbfbec238a13eb0f4d12e23a9542812..f44e43f91e876d9a84971707acc474375f585b76 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Conclave
 date: 2025-03-02
 modified: 2025-03-18
index f1f9e63fffe52e8b47850e854033d9dc93f09217..c424d185d44cd27c1636f88a34cbe6fb7f87f02f 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Death Becomes Her
 date: 2025-10-02
 modified: 2025-10-07
index b8ac9f7a43664e0e77b2cd254e60214119174c0e..464cf37cb25ae2d0d11241ff1a048af02bfffd94 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 'Den of Thieves: Pantera'
 date: 2025-10-18
 modified: 2025-10-19
index cc811116f103b80189690ba8aa1d816ac031d0b3..0c39ac1783db29534c3d60a5e13f3762939a14a5 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Donnie Darko
 date: 2026-01-07
 modified: 2026-01-09
index affcc80a253888657331f71c3ce3e037e22a5003..45d8cbcd0aefbe422f32f0b5d35c483fcb068da8 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 'F1: The Movie'
 date: 2025-10-16
 modified: 2025-10-17
index e426289ae064c6b7e9215fb1cfbc625614808a41..0ce7345447376c7ae58604815cb934bb1a1f2d30 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Fallen Angels
 date: 2025-08-02
 modified: 2025-10-24
index 324a38814a35dd32c7ded36369a106d99b21cafe..427a1cc51d744e77ba532df7e80f9523457d82a0 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Gnomeo & Juliet
 date: 2026-03-01
 modified: 2026-03-02
index b90e3011f16287b8b9dea10bd6df3e4aa87d3126..5a1dae8637f0f741f5b10a4ae22dee8e0dd8e20a 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Hamnet
 date: 2026-02-13
 modified: 2026-02-14
index ea534557b4345bf3bf7b57c19bd264bab9eefabe..9785819cdcba2779098fe6d76dacd55be479231b 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: book
+type: book
 title: House of Huawei
 date: 2025-07-13
 modified: 2025-12-27
index 2b8b17f9edbfd695cc926b708dcde60d1ef09370..f4076af532f08842edc01d7d8d9272242a4acec5 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Hunchback of Notre Dame
 date: 2025-03-04
 modified: 2025-03-22
index a7ba9b1bc50467e6577fe89c63a5293d302f4c72..259e1d39c6b426b4e8308234411a7929a1724c8f 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: It's What's Inside
 date: 2025-03-01
 modified: 2025-03-02
index 648435f4089c57bf32fe50d4fd014fea827e213a..ee5433773a98c8f299b5464da47e08d5c230b9c6 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Jurassic Park
 date: 2025-09-10
 modified: 2025-09-13
index 6a764485220c5edbb5245b35f261edd1bb5fb455..d148b604ae9a9ffee1489cac2b126ff84bae3e2e 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Marty Supreme
 date: 2026-01-21
 modified: 2026-01-23
index ffa18588628eb9745e48e7ce121f2460368468cf..81750d0faf5d1c854e99c97a71285464123fdabc 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Materialists
 date: 2025-08-14
 modified: 2025-08-15
index 511b60f3884ecde4acd9bb9527ab27ff3bc7759a..f876cc3da92a3a4e19e83e6a201ce7d161a66acd 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Moulin Rouge!
 date: 2025-12-25
 modified: 2025-12-26
index d5708a83c469d75366c99e58ecd139983c5f5562..0e220ea11a919f9a38af4a51e746fef1cf244fbe 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Mulholland Drive
 date: 2025-12-06
 modified: 2025-12-07
index dc7ff24872251099e4c0e51114443d15f72cc934..063faec6a2be3ddd660fcd622d3f647a020869d9 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Noah
 date: 2025-12-24
 modified: 2025-12-25
index 2312939ceccbc1a5531d38ad3a1c0540049a5ae5..b0f907b0fa88bd54fe2323b6b9b55982f021c75c 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Nosferatu
 date: 2025-09-09
 modified: 2025-09-13
index c64f64e34586d25ee25c4de682fe2d5442d4f3d8..7e5cd2db5f6c31aa2ef407d7a670d3447124f183 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: One Battle After Another
 date: 2025-10-01
 modified: 2025-10-04
index 330d6258d44cd4db40322658b35dc378fee9f576..7518d3468692c75e8a4501063bf89bd42b2d669a 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 'Patlabor: The Movie'
 date: 2026-01-11
 modified: 2026-01-11
index 2ebc2704e2f76b2e34b9d67055193c1fe40af983..3092f465bb967db0e0ade82e6365e1253439d08c 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: People We Meet on Vacation
 date: 2026-02-12
 modified: 2026-02-14
index 192288bf10c52f06b933fe0ee5699a9c0ce1103b..6b4bc4c891bef752cc82795e8fc9a448e072fa11 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Perfect Days
 date: 2025-02-15
 modified: 2025-02-15
index d40d0d483277e0783fbf426c81041f151297fcf4..f19c27bbf6e3add98429503fe9b138c2717ce4e7 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Problemista
 date: 2025-11-04
 modified: 2025-11-06
index f5bb57008d30a03e48618c5e8c5315a64699dc29..452618971393f281605c1dc7e46ab92b355cdf3c 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Sinners
 date: 2025-05-02
 modified: 2025-05-02
index 1a7cbfadf31fec02d71e4bf70401dcb8feb59d1d..5158034e3024fa5754b70e268756fc609c9035d6 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 'Star Wars: Episode III - Revenge of the Sith'
 date: 2025-09-05
 modified: 2025-09-07
index 7ea01e4a71e3a50ff9033ae6077ba3cc9782f299..b10701fb3ad798663e0ef3cc0e0d6987cb3462ae 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Subservience
 date: 2024-12-25
 modified: 2024-12-26
index e40bab1553416a1537a93f8c42f662b08cdaf837..c1affe627062c712a330f0384ad1eb9bb9666cc9 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Superman
 date: 2025-10-04
 modified: 2025-10-04
index 37f2b17ced9aebabb035cf69dc2dbe61663fbfca..e260153f7805ab4dc2b7f7fa33727463a9687607 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Taipei Story
 date: 2025-12-27
 modified: 2025-12-28
index 906239eb6652d3e208f915d694f044d48a0dfefe..4fc5620ca58d38269c81d7a3bfc3c972fc8e1c8d 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Apprentice
 date: 2025-09-06
 modified: 2025-09-07
index d7e526d84ddeaee6144ce3bb45ff989a531f7834..b6ae5b4ecf8f68bc806a8c6c655c0f4b8e46262a 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Boy and the Heron
 date: 2024-12-21
 modified: 2024-12-23
index 187e9577bf7cdd4fa7184ea7398290ebde111dc8..1f77edc6769148defabcf0f291fd572fdf2edbc8 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Godfather
 date: 2025-11-16
 modified: 2025-11-19
index 8e6b582653386b927c1a3f56a0442304b8715be5..21314332ec8166b748109c2d77581db4d243c45b 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Little Mermaid
 date: 2026-01-01
 modified: 2026-01-01
index f50bd24963666363d5428560d8d559917a8599ff..d5c902410db1c7d738312b126db5ed2b41dafba8 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 'The Lord of the Rings: The Fellowship of the Ring'
 date: 2025-11-26
 modified: 2025-11-30
index abfe280d26ed52edac0d9571d9f8495fedfc180e..9c33f3d0fe68fcc6547a7768c4d7222e85df70bc 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Pianist
 date: 2026-04-11
 modified: 2026-04-11
index 6edf6b37bad2121440c54876d4ff9510ef5a404d..1c110f012be04c28efb94aa218f4739336aa3af8 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Social Network
 date: 2025-12-28
 modified: 2025-12-29
index 04cdabc4a416a34f52cf09a982cb39e01cb2fb48..73200ac0dcd14a52b10ddf8647cb783cba155ad7 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: The Swan Princess
 date: 2026-03-17
 modified: 2026-03-18
index fe9649fba5096851a6393c4c7d0b6536a669a003..044e4097276a877d233f321142e10ecd5615fba5 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Thunderbolts*
 date: 2026-01-01
 modified: 2026-01-01
index 002824ce758ae8715b09167c1ff9d66684d2c569..732cda1fc30897a470f4b45a93836cf2794b36c4 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Tick, Tick... Boom!
 date: 2025-12-27
 modified: 2025-12-28
index 20f91bd44fd6c1c35ee16cc7426317f8f68b51fe..c8284e694b759ee1057f9fe60a85bafe0314bdc3 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Wake Up Dead Man
 date: 2025-12-15
 modified: 2025-12-16
index 19ed383159ac74e70a05d2f60b0303f6f7c16dca..7c983b304fc7eb3ff87afceab0cbc5f5f0616df1 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Warfare
 date: 2025-04-11
 modified: 2025-04-11
index 0d752ca33f9ce4a3ec36f2abeed98c8695a31517..ba3a01533221579381258712e3273c06b2cad1c5 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: When Harry Met Sally...
 date: 2025-12-30
 modified: 2026-01-01
index 7d4d49879009d59182f099b6e73a06c5f66ba69b..511a05a2bea9f77fde6c29597af36a166f97d5a4 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: 'Wicked: For Good'
 date: 2025-11-25
 modified: 2025-11-25
index 4bc74af331fd0966b47049769a11e679f68425b1..cee81b18e54795853adcf0578b0e01620ba1e186 100644 (file)
@@ -1,5 +1,5 @@
 ---
-category: movie
+type: movie
 title: Wicked
 date: 2024-11-29
 modified: 2025-06-04
index 76616f09faee8b79cb82659d7a64459975c99d6d..ffd94a31fc518a1c198916feef0a4723c6c8a91a 100644 (file)
@@ -31,6 +31,12 @@ const modifiedDate = entryData.modified
         >{modifiedDate}</time
       >
     </li>
+    <li
+      data-pagefind-meta={`type:${entryData.type}`}
+      data-pagefind-filter={`type:${entryData.type}`}
+    >
+      Type: {entryData.type}
+    </li>
     {entryData.tags && <li>Tags: {entryData.tags.join(', ')}</li>}
     {
       entryData.posse && (
diff --git a/src/components/ui/badge.astro b/src/components/ui/badge.astro
new file mode 100644 (file)
index 0000000..8954d55
--- /dev/null
@@ -0,0 +1,19 @@
+<span class="badge">
+  <slot />
+</span>
+
+<style>
+  .badge {
+    margin-inline-end: 0.5rem;
+    display: inline-block;
+    padding: 0.15rem 0.5rem;
+    color: var(--color-text);
+    background-color: transparent;
+    border: 1px solid var(--color-border);
+    border-radius: 0;
+    font-family: var(--font-sans);
+    font-size: 0.8rem;
+    line-height: 1.2;
+    white-space: nowrap;
+  }
+</style>
index a252a10839fbd0e8f680dd7a1ab6c084a82ed858..06d43fe70be8c4b76098145bd40f1535070545fe 100644 (file)
@@ -1,27 +1,34 @@
 ---
 import { getCollection, type CollectionKey } from 'astro:content';
+import Badge from '@components/ui/badge.astro';
 import sortByDate from '@utils/sortByDate';
 import generateContentUrl from '@utils/generateContentUrl';
 
 interface Props {
   collection: CollectionKey;
+  limit?: number;
 }
 
-const { collection } = Astro.props;
+const { collection, limit } = Astro.props;
 const entries = await getCollection(collection);
 const sorted = sortByDate(entries);
+const displayedEntries =
+  typeof limit === 'number' ? sorted.slice(0, limit) : sorted;
 ---
 
 <dl>
   {
-    sorted.map((entry) => (
+    displayedEntries.map((entry) => (
       <>
         <dt>
           <a href={generateContentUrl(entry)}>
             <h4>{entry.data.title}</h4>
           </a>
         </dt>
-        {entry.data.description && <dd>{entry.data.description}</dd>}
+        <dd>
+          <Badge>{entry.data.type}</Badge>
+          {entry.data.description && entry.data.description}
+        </dd>
       </>
     ))
   }
index 141781d34e49987b3fab8956d40ad3f42f2d5d95..f0a9f88e3830a2de912e9a87d3b6be559f98cf71 100644 (file)
@@ -13,7 +13,9 @@ const baseSchema = z.object({
 
 const articles = defineCollection({
   loader: glob({ pattern: '**/*.{md,mdx}', base: 'content/articles' }),
-  schema: baseSchema,
+  schema: baseSchema.extend({
+    type: z.enum(['marginalia', 'missive']),
+  }),
 });
 
 const podcasts = defineCollection({
@@ -34,7 +36,7 @@ const reviews = defineCollection({
   loader: glob({ pattern: '**/*.{md,mdx}', base: 'content/reviews' }),
   schema: baseSchema.extend({
     rating: z.int().gt(0).lte(5),
-    category: z.enum(['book', 'game', 'movie', 'music', 'show']),
+    type: z.enum(['book', 'game', 'movie', 'music', 'show']),
   }),
 });
 
index cdf230c9cdd5b43e6995327a6787a32acffc4715..e58ce1df1b05d8b3db0dc4992d1fec93b931c3af 100644 (file)
@@ -29,9 +29,7 @@ export async function GET(context: APIContext) {
         const { Content } = await render(item);
         const content = await container.renderToString(Content);
         const categories = (item.data.tags ?? []).concat(item.collection);
-        if (item.collection === 'reviews') {
-          categories.push(item.data.category);
-        }
+        categories.push(item.data.type);
 
         let title: string;
         let description: string;
index ff32067cc398b73a99225d16ba46b92352e3e2a4..ab4b90a03719177f7390bf890ac8c9f98fdef123 100644 (file)
@@ -1,28 +1,6 @@
 ---
 import Base from '@layouts/base.astro';
-
-const contributions = [
-  {
-    title: 'Git',
-    url: 'https://git.otsuka.systems',
-  },
-  {
-    title: 'Arch User Repository',
-    url: 'https://aur.archlinux.org/packages?O=0&SeB=M&K=cotsuka&outdated=&SB=p&SO=d&PP=50&submit=Go',
-  },
-  {
-    title: 'ArchWiki',
-    url: 'https://wiki.archlinux.org/title/Special:Contributions/Cotsuka',
-  },
-  {
-    title: 'GitHub',
-    url: 'https://github.com/search?q=author%3Acotsuka&type=pullrequests',
-  },
-  {
-    title: 'Wikipedia',
-    url: 'https://en.wikipedia.org/wiki/Special:Contributions/Cotsuka',
-  },
-];
+import ContentList from '@components/ui/contentlist.astro';
 ---
 
 <Base
@@ -44,19 +22,9 @@ const contributions = [
         vehicles, and built the internal tech stack that glues everything together.
       </p>
     </section>
-    <section data-pagefind-body>
-      <h2>Contributions</h2>
-      <ul>
-        {
-          contributions.map((contribution) => {
-            return (
-              <li>
-                <a href={contribution.url}>{contribution.title}</a>
-              </li>
-            );
-          })
-        }
-      </ul>
+    <section data-pagefind-ignore>
+      <h2>Latest Articles</h2>
+      <ContentList collection="articles" limit={5} />
     </section>
   </article>
 </Base>
similarity index 92%
rename from src/pages/reviews/[category]/[id]/index.astro
rename to src/pages/reviews/[type]/[id]/index.astro
index e98d605555fa22da32e7b10520c9d815d120bbfb..c634180a036e4905b554e8bab6a5635684357df3 100644 (file)
@@ -6,7 +6,7 @@ import Metadata from '@components/metadata.astro';
 export async function getStaticPaths() {
   const reviews = await getCollection('reviews');
   return reviews.map((review) => ({
-    params: { category: review.data.category, id: review.id },
+    params: { type: review.data.type, id: review.id },
     props: { entry: review },
   }));
 }
similarity index 90%
rename from src/pages/reviews/[category]/[id]/opengraph.png.ts
rename to src/pages/reviews/[type]/[id]/opengraph.png.ts
index ffcc5551b85a43a34c5ca1fcc0d5b31ddd2ddaa0..6d7df3491b952fa10eebbd31904494210d8c5099 100644 (file)
@@ -15,7 +15,7 @@ export const GET = (async ({ props, url }) => {
 export async function getStaticPaths() {
   const reviews = await getCollection('reviews');
   return reviews.map((review) => ({
-    params: { category: review.data.category, id: review.id },
+    params: { type: review.data.type, id: review.id },
     props: { entry: review },
   }));
 }
index 875a7dca2f6ccbb68fd04f2a43f773cb1e8ffa82..988fbee5e42a069c86ab005217eb4582230fb88c 100644 (file)
@@ -23,7 +23,7 @@ const sortedReviews = sortByDate(reviews);
     <table>
       <thead>
         <tr>
-          <th scope="col">Category</th>
+          <th scope="col">Type</th>
           <th scope="col">Title</th>
           <th scope="col">Rating</th>
         </tr>
@@ -32,7 +32,7 @@ const sortedReviews = sortByDate(reviews);
         {
           sortedReviews.map((review) => (
             <tr>
-              <td>{review.data.category}</td>
+              <td>{review.data.type}</td>
               <td>
                 <h4>
                   <a href={generateContentUrl(review)}>{review.data.title}</a>
index 7d0af54be59a3a9d617b06122607859862a0859f..47c0567351dd592b81d634e550079881e270c8cc 100644 (file)
@@ -29,6 +29,8 @@ const pagefindResultTemplate = String.raw`
     <div class="searchFilters" aria-label="Search result filters">
       <pagefind-filter-dropdown filter="category" label="Category"
       ></pagefind-filter-dropdown>
+      <pagefind-filter-dropdown filter="type" label="Type"
+      ></pagefind-filter-dropdown>
       <pagefind-filter-dropdown
         filter="tag"
         label="Tag"
@@ -75,7 +77,7 @@ const pagefindResultTemplate = String.raw`
 
   .searchFilters {
     display: grid;
-    grid-template-columns: repeat(2, minmax(0, 1fr));
+    grid-template-columns: repeat(3, minmax(0, 1fr));
     gap: 1rem;
     margin-block: 1rem;
   }
index a97c0b9421c8b5d82dd359396271ed9aafb1be22..1b40046852a8e4dccfe57ac2b3da8523d34ccc26 100644 (file)
@@ -8,6 +8,6 @@ export default function generateContentUrl(item: SiteCollectionEntry): string {
     case 'podcasts':
       return `/podcasts/${item.id}/`;
     case 'reviews':
-      return `/reviews/${item.data.category}/${item.id}/`;
+      return `/reviews/${item.data.type}/${item.id}/`;
   }
 }