+
+ src={post.data.image}
+ alt={post.data.title}
+ class="absolute object-contain h-full mb-6 rounded drop-shadow-lg"
+ />
@@ -83,16 +82,17 @@ const truncatedBody = truncateMarkdown(post.body, {
- {truncatedBody}
+
+ {truncatedBody}
- {
- post.data.tags && Array.isArray(post.data.tags) ? (
-
- ) : (
-
- )
- }
+ {
+ post.data.tags && Array.isArray(post.data.tags) ? (
+
+ ) : (
+
+ )
+ }
diff --git a/src/content/clients/caepe.md b/src/content/clients/caepe.md
new file mode 100644
index 00000000..27f55abc
--- /dev/null
+++ b/src/content/clients/caepe.md
@@ -0,0 +1,16 @@
+---
+type: Technical writing
+title: CAEPE
+layout: "../../layouts/Client.astro"
+company_url: 'https://docker.com'
+image: "~/assets/images/clients/caepe.png"
+start_date: 2022
+end_date: 2023
+tags:
+- Kubernetes
+- containers
+---
+
+CAEPE is a Comprehensive Control Plane for Kubernetes Application Deployments
+
+I helped the company create its documentation tooling, documentation, and technical video content.
\ No newline at end of file
diff --git a/src/content/clients/docker.md b/src/content/clients/docker.md
new file mode 100644
index 00000000..0e87e6e4
--- /dev/null
+++ b/src/content/clients/docker.md
@@ -0,0 +1,21 @@
+---
+type: Technical writing
+title: Docker
+layout: "../../layouts/Client.astro"
+company_url: 'https://docker.com'
+image: "~/assets/images/clients/docker.svg"
+start_date: 2023
+end_date: 2023
+tags:
+- docker
+- containers
+---
+
+Docker Inc is a major contributor to many container-related technologies and its own commercial offerings. I was a staff technical writer on the documentation team and was attached to working on a number of commercial products. My responsibilities included:
+
+- Working with product managers, engineers, and designers to create and maintain documentation for new and existing products
+- Proposing and steering new improvement projects
+- Editing and reviewing submissions from internal and external contributors
+- Liaising and working with our developer relations and marketing teams for collaboration ideas
+- Writing technical blog posts for products
+- Providing guidance, mentorship, and feedback
\ No newline at end of file
diff --git a/src/content/clients/kilt.md b/src/content/clients/kilt.md
new file mode 100644
index 00000000..20fd869e
--- /dev/null
+++ b/src/content/clients/kilt.md
@@ -0,0 +1,15 @@
+---
+type: Technical writing
+title: KILT
+layout: "../../layouts/Client.astro"
+company_url: 'https://www.kilt.io'
+image: "~/assets/images/clients/kilt.png"
+start_date: 2023
+end_date: 2024
+tags:
+- identity
+- sdk
+- blockchain
+---
+
+KILT provides secure, practical identity solutions for enterprises and consumers. I helped the team overhaul documentation and platform as well as documenting new features and creating video content.
\ No newline at end of file
diff --git a/src/content/clients/n8n.md b/src/content/clients/n8n.md
new file mode 100644
index 00000000..bc810c42
--- /dev/null
+++ b/src/content/clients/n8n.md
@@ -0,0 +1,18 @@
+---
+type: Technical writing
+title: n8n
+image: ~/assets/images/clients/n8n.svg
+category: Chris
+tags:
+- documentation
+- automation
+- hosting
+- Containers
+layout: "../../layouts/Client.astro"
+company_url: 'https://n8n.io'
+work_link: https://n8n.io
+start_date: 2023
+end_date: 2023
+---
+
+I helped the n8n team with creating self-hosting guides for their automation platform.
\ No newline at end of file
diff --git a/src/content/clients/revecom.md b/src/content/clients/revecom.md
new file mode 100644
index 00000000..e2551411
--- /dev/null
+++ b/src/content/clients/revecom.md
@@ -0,0 +1,16 @@
+---
+type: Blogging
+title: ReveCom
+image: ~/assets/images/clients/revecom.png
+category: Chris
+tags:
+- DevOps
+- WASM
+- Containers
+layout: "../../layouts/Client.astro"
+company_url: 'https://revecom.io'
+start_date: 2020
+end_date: Ongoing
+---
+
+I write and edit posts for several ReveCom clients including Cosmonic, Kasten, and Speedscale.
\ No newline at end of file
diff --git a/src/content/clients/sentry.md b/src/content/clients/sentry.md
new file mode 100644
index 00000000..beb2508a
--- /dev/null
+++ b/src/content/clients/sentry.md
@@ -0,0 +1,16 @@
+---
+type: Blogging
+title: Sentry
+image: ~/assets/images/clients/sentry.png
+category: Chris
+tags:
+- security
+- debug
+- programming
+layout: "../../layouts/Client.astro"
+company_url: 'https://sentry.io/welcome/'
+start_date: 2023
+end_date: 2023
+---
+
+I wrote blog posts on how to debug with certain languages.
\ No newline at end of file
diff --git a/src/content/clients/slint.md b/src/content/clients/slint.md
new file mode 100644
index 00000000..bf66e21b
--- /dev/null
+++ b/src/content/clients/slint.md
@@ -0,0 +1,15 @@
+---
+type: Technical writing
+title: Slint
+layout: "../../layouts/Client.astro"
+company_url: 'https://slint.dev'
+image: "~/assets/images/clients/slint.svg"
+start_date: 2023
+end_date: 2024
+tags:
+- cross-platform
+- sdk
+- API
+---
+
+Slint is a cross-platform SDK for building UIs. I helped the team overhaul their documentation tooling and rewrote their quickstart guides.
\ No newline at end of file
diff --git a/src/content/games/aberrations.md b/src/content/games/aberrations.md
new file mode 100644
index 00000000..b8c4db1c
--- /dev/null
+++ b/src/content/games/aberrations.md
@@ -0,0 +1,12 @@
+---
+title: Aberrations - Inflection Point - A Monster Horror Adventure In Icewind Dale
+image: "~/assets/images/games/463789.jpg"
+publisher: Art of Karthik
+publish_date: 2023-12-27
+role: Proofreader
+store_urls:
+ - label: Dungeon Masters Guild
+ url: https://www.dmsguild.com/product/463789/Aberrations-Inflection-Point--A-Monster-Horror-Adventure-In-Icewind-Dale
+---
+
+In the frigid heart of Icewind Dale, a distress call has been heard from a mining expedition sent to the outpost of Inflection Point. But this is no ordinary cry for help – it originates from the shattered remnants of a once-soaring castle that now lies broken and buried in the snow. Within its frozen depths, an elder mindflayer conducts grotesque experiments, melding aberration biology with creatures of the North, creating hybrid abominations that defy the natural order.
\ No newline at end of file
diff --git a/src/content/games/aipokalypse.md b/src/content/games/aipokalypse.md
new file mode 100644
index 00000000..01984c65
--- /dev/null
+++ b/src/content/games/aipokalypse.md
@@ -0,0 +1,12 @@
+---
+title: A.I.Pokalypse
+image: "~/assets/images/games/aipokalypse.jpeg"
+publisher: Owly Mowly
+publish_date: 2024-07-10
+role: English rules editor
+store_urls:
+ - label: Kickstarter
+ url: https://www.kickstarter.com/projects/aipokalypse/aipokalypse-the-expert-auto-battle-card-game
+---
+
+After the A.I.POKALYPSE you are left to fend for yourself. Hire your best mercenaries, survive the combat zone and be the sole faction to make it out alive. Build your engine and fight for your life in this epic game in a small box! Raised €54,000 on Kickstarter in 2024.
diff --git a/src/content/games/and-then-there-were-none.md b/src/content/games/and-then-there-were-none.md
new file mode 100644
index 00000000..d97dd408
--- /dev/null
+++ b/src/content/games/and-then-there-were-none.md
@@ -0,0 +1,12 @@
+---
+title: Fairytale Fables of the Feywild
+image: "~/assets/images/games/473859.jpg"
+publisher: Art of Karthik
+publish_date: 2024-03-23
+role: Proofreader
+store_urls:
+ - label: Dungeon Masters Guild
+ url: https://www.dmsguild.com/product/473859/Fairytale-Fables-of-the-Feywild
+---
+
+Step into the enchanting realm of the Feywild, where the boundary between reality and fantasy blurs, and classic fairytales come to life in unexpected ways. Join the cunning Puss in Boots, the mysterious Little Miss Muffet, the porridge escapades of Goldilocks, the enigmatic Little Red Riding Hood, and the harrowed Cinderella, culminating in a climactic confrontation with the condescending Cloud Giant, leaving behind a trail of riddles and whimsical challenges!
\ No newline at end of file
diff --git a/src/content/games/moons-millions.md b/src/content/games/moons-millions.md
new file mode 100644
index 00000000..6265c4a8
--- /dev/null
+++ b/src/content/games/moons-millions.md
@@ -0,0 +1,12 @@
+---
+title: Moon's Millions - A Phandalin Adventure!
+image: "~/assets/images/games/407574.jpg"
+publisher: Art of Karthik
+publish_date: 2022-08-30
+role: Proofreader
+store_urls:
+ - label: Dungeon Masters Guild
+ url: https://www.dmsguild.com/product/407574/Moons-Millions-A-Phandalin-Adventure
+---
+
+Once adventurers reach a high enough level, typical combat isn't that challenging. Puzzles and traps only get so far. They're probably rolling in money so they probably don't care for more of it as a reward.
\ No newline at end of file
diff --git a/src/content/games/oculus-prime.md b/src/content/games/oculus-prime.md
new file mode 100644
index 00000000..a3510a16
--- /dev/null
+++ b/src/content/games/oculus-prime.md
@@ -0,0 +1,12 @@
+---
+title: Oculus Prime - A Bizarre Mystery Adventure
+image: "~/assets/images/games/483011.jpg"
+publisher: Art of Karthik
+publish_date: 2023-07-17
+role: Proofreader
+store_urls:
+ - label: Dungeon Masters Guild
+ url: https://www.dmsguild.com/product/483011/Oculus-Prime--A-Bizarre-Mystery-Adventure
+---
+
+In a bustling metropolis plagued by a string of mysterious disappearances, a sinister alliance between a clandestine death cult and a malevolent beholder unfolds.
\ No newline at end of file
diff --git a/src/content/games/pioneers-path.md b/src/content/games/pioneers-path.md
new file mode 100644
index 00000000..e1f7fc5c
--- /dev/null
+++ b/src/content/games/pioneers-path.md
@@ -0,0 +1,12 @@
+---
+title: Pioneer's Path To Port Luxus - An Urban Mystery Adventure!
+image: "~/assets/images/games/408396.jpg"
+publisher: Art of Karthik
+publish_date: 2022-09-04
+role: Proofreader
+store_urls:
+ - label: Dungeon Masters Guild
+ url: https://www.dmsguild.com/product/408396/Pioneers-Path-To-Port-Luxus-An-Urban-Mystery-Adventure
+---
+
+Dungeon Masters of the world, have you ever thrown a dragon at your party and found the resulting combat to be repetitive slugfest? Has your game of Dungeons & Dragons been reduced to a dull series of dice rolls resulting in "Hit" or "Miss"? Or conversely, is your dragon way too powerful, forcing you to make it weaker or risk a TPK? Would you like to spice up your dragon encounters with a little more personality? Would you like your dragons to be long-term threats whose actions have far-reaching consequences? Would you like to give your players more choices in what they want to do?
\ No newline at end of file
diff --git a/src/content/posts/2023/apple-shortcuts-obsidian.md b/src/content/posts/2023/apple-shortcuts-obsidian.md
new file mode 100644
index 00000000..27d5ee9a
--- /dev/null
+++ b/src/content/posts/2023/apple-shortcuts-obsidian.md
@@ -0,0 +1,15 @@
+---
+title: Bring the power of Apple Shortcuts to Obsidian
+publishDate: 2023-12-13
+author: "Chris Ward"
+publication_url: "https://medium.com/macoclock/bring-the-power-of-apple-shortcuts-to-obsidian-8cc84949e50e"
+categories:
+ - writing
+tags:
+ - Automation
+ - Apple
+ - Shortcuts
+image: "../../../assets/images/articles/1*Soys68WY2ihqz-qiTHI_Ng.webp"
+---
+
+I’ve mentioned before that I have been using Obsidian more and more, and from a knowledge management perspective, it’s fantastic, with a plethora of plugins that extend its functionality to connect to many external services. But as a cross-platform Electron application, integration with the host operating system is one of the places it fails. As the underlying data store is a folder of files, some integration is possible there, but Obsidian has minimal awareness of changes that happen.
\ No newline at end of file
diff --git a/src/content/posts/2023/runme.md b/src/content/posts/2023/runme.md
new file mode 100644
index 00000000..acec193d
--- /dev/null
+++ b/src/content/posts/2023/runme.md
@@ -0,0 +1,14 @@
+---
+title: Making Markdown Interactive with Runme
+publishDate: 2023-12-22
+author: "Chris Ward"
+publication_url: "https://blog.stackademic.com/making-markdown-interactive-with-runme-654afb7a942b"
+categories:
+ - writing
+tags:
+ - Markdown
+ - Interactivity
+image: "../../../assets/images/articles/1*m42kZBxdjFjcrAByDXGB6A.webp"
+---
+
+Markdown may be popular for its simplicity and “plainness”, but it’s often full of information. Whether for internal or external consumption, that information often contains code snippets for running certain commands or code examples. Wouldn’t it be great if you could run that code directly as you read from within the markdown?
\ No newline at end of file
diff --git a/src/content/posts/2024/eu-cloud-native.md b/src/content/posts/2024/eu-cloud-native.md
new file mode 100644
index 00000000..9636a666
--- /dev/null
+++ b/src/content/posts/2024/eu-cloud-native.md
@@ -0,0 +1,15 @@
+---
+title: "As Kubernetes turns 10, experts predict the future of cloud-native"
+publishDate: 2024-05-02
+author: "Chris Ward"
+publication_url: "https://thenextweb.com/news/the-future-of-cloud-native-kubernetes"
+categories:
+ - writing
+tags:
+ - Kubernetes
+ - KubeCon
+ - Cloud-native
+image: "../../../assets/images/articles/kceu.jpeg"
+---
+
+In June, Kubernetes celebrates its tenth birthday. The system is now so widely used by hundreds of thousands of companies worldwide to scale their applications to meet demand it’s hard even to remember a time before it existed. But there was a time when other options were available, and I even remember using some of them.
\ No newline at end of file
diff --git a/src/content/posts/2024/homebrew.md b/src/content/posts/2024/homebrew.md
new file mode 100644
index 00000000..c36ba7f1
--- /dev/null
+++ b/src/content/posts/2024/homebrew.md
@@ -0,0 +1,16 @@
+---
+title: "After 15 years, the maintainer of Homebrew plans to make a living"
+publishDate: 2024-07-26
+author: "Chris Ward"
+publication_url: "https://thenextweb.com/news/homebrew-maintainer-make-a-living-15-weeks"
+categories:
+ - writing
+tags:
+ - macOS
+ - Homebrew
+image: "../../../assets/images/articles/hb.jpeg"
+---
+
+Installing and updating applications and other dependencies on a computer really should be a solved problem by now. Yet almost every major desktop operating system provides multiple options, with no real clear answer to “which is best.”
+
+Linux, despite long-established package managers such as apt, deb, and rpm, just to name a few, still suffers from confusion and inconsistency between open source vs proprietary instals, as well as between developer tools and more user-focussed tools. Additionally, many package developers don’t even distribute to any package managers, or the versions you find in them are outdated.
\ No newline at end of file
diff --git a/src/content/posts/2024/loss-death.md b/src/content/posts/2024/loss-death.md
new file mode 100644
index 00000000..18809737
--- /dev/null
+++ b/src/content/posts/2024/loss-death.md
@@ -0,0 +1,14 @@
+---
+title: Loss and absence in death
+publishDate: 2024-01-06
+author: "Chris Ward"
+publication_url: "https://chrischinchilla.medium.com/loss-and-absence-in-death-6c41d86be448"
+categories:
+ - writing
+tags:
+ - Death
+ - Loss
+image: "../../../assets/images/articles/1*Q5JULI5RlYh4apVdQa-N1w.webp"
+---
+
+We had to put our 17-year-old cat to sleep last week. First, why does English have such terrible words for this action? “Putting down”, “putting to sleep”. They are both terrible ways to describe such an action, but I’m not sure I have any better ideas…
\ No newline at end of file
diff --git a/src/content/posts/2024/open-source-europe.md b/src/content/posts/2024/open-source-europe.md
new file mode 100644
index 00000000..0edff1dc
--- /dev/null
+++ b/src/content/posts/2024/open-source-europe.md
@@ -0,0 +1,17 @@
+---
+title: "The state of open source in Europe"
+publishDate: 2024-04-11
+author: "Chris Ward"
+publication_url: "https://thenextweb.com/news/state-open-source-europe"
+categories:
+ - writing
+tags:
+ - Open source
+ - Europe
+ - FOSDEM
+image: "../../../assets/images/articles/oseu.jpeg"
+---
+
+Open source is at a crossroads. For the past few years, venture capital has directly or indirectly paid for many of the contributors and much of the infrastructure it needed to keep going.
+
+That was until the past 24 months or so, when funding started to slow down, leading to less internal development or funding resources going toward open source.
\ No newline at end of file
diff --git a/src/content/posts/2024/tracking-with-wordcounter.md b/src/content/posts/2024/tracking-with-wordcounter.md
new file mode 100644
index 00000000..a7eaa4d1
--- /dev/null
+++ b/src/content/posts/2024/tracking-with-wordcounter.md
@@ -0,0 +1,14 @@
+---
+title: Tracking the words you write with WordCounter
+publishDate: 2024-02-19
+author: "Chris Ward"
+publication_url: "https://medium.com/macoclock/tracking-the-words-you-write-with-wordcounter-e7e08cbe50d7"
+categories:
+ - writing
+tags:
+ - Prodictivity
+ - Writing
+image: "../../../assets/images/articles/1*StgPE0QKkMOWm96uUFCFCQ.webp"
+---
+
+How many words do you write every day? Think about it. Every time you send an email, post in Slack, or comment on an Instagram post. Oh, you thought I would mention those wondrous words you pour into your latest novel, blog post, marketing copy, or script?
\ No newline at end of file
diff --git a/src/content/posts/2024/writing-for-robots.md b/src/content/posts/2024/writing-for-robots.md
new file mode 100644
index 00000000..e6ad4dc4
--- /dev/null
+++ b/src/content/posts/2024/writing-for-robots.md
@@ -0,0 +1,16 @@
+---
+title: Writing for robots – How to optimise your writing for LLMs
+publishDate: 2024-04-23
+author: "Chris Ward"
+publication_url: "https://chrischinchilla.medium.com/writing-for-robots-e051da7567e6"
+categories:
+ - writing
+tags:
+ - AI
+ - LLM
+ - Writing
+image: "../../../assets/images/articles/1*WUfhLdT4ewEz0_trgoqFow.webp"
+---
+
+Who do you think reads most of your technical writing? Customers? Potential customers?
+If your work is public and not behind a log-in, I hate to disappoint you, but your most frequent reader probably isn’t human. And this is nothing new.
\ No newline at end of file
diff --git a/src/pages/books/[...slug].astro b/src/pages/books/[...slug].astro
deleted file mode 100644
index 7040750d..00000000
--- a/src/pages/books/[...slug].astro
+++ /dev/null
@@ -1,19 +0,0 @@
----
-import MarkdownPostLayout from "../../layouts/MarkdownLayout.astro";
-
-import { getCollection } from 'astro:content';
-// 1. Generate a new path for every collection entry
-export async function getStaticPaths() {
- const bookEntries = await getCollection('books');
- return bookEntries.map(entry => ({
- params: { slug: entry.slug }, props: { entry },
- }));
-}
-// 2. When it's time to render, you can get the entry directly from the prop
-const { entry } = Astro.props;
-const { Content } = await entry.render();
----
-
-
-
-
diff --git a/src/pages/clients.astro b/src/pages/clients.astro
deleted file mode 100644
index a625a992..00000000
--- a/src/pages/clients.astro
+++ /dev/null
@@ -1,38 +0,0 @@
----
-import Layout from "~/layouts/PageLayoutNoBG.astro";
-import Headline from '~/components/blog/Headline.astro';
-
-import Client from "../components/Client.astro";
-import { getCollection } from 'astro:content';
-const allClients = await getCollection('clients');
-
-const meta = {
- title: "Clients",
- description: "Clients",
- // canonical: post.canonical || url,
- // image: await findImage(post.image),
- // noindex: BLOG?.post?.noindex,
- // ogType: 'article',
-};
----
-
-
-
-
- {meta.title}
-
-
- {
- allClients.map((client) => (
- -
-
-
- ))
- }
-
-
-
\ No newline at end of file
diff --git a/src/pages/clients/[...page].astro b/src/pages/clients/[...page].astro
new file mode 100644
index 00000000..9be3595e
--- /dev/null
+++ b/src/pages/clients/[...page].astro
@@ -0,0 +1,46 @@
+---
+import Layout from '~/layouts/PageLayoutNoBG.astro';
+import Headline from '~/components/blog/Headline.astro';
+
+import Client from '~/components/Client.astro';
+import { getCollection } from 'astro:content';
+// const allClients = await getCollection('clients');
+
+export async function getStaticPaths({ paginate }) {
+ let allClients = await getCollection('clients');
+// allGames = allGames.sort( (a, b) => new Date(b.data.publish_date).valueOf() - new Date(a.data.publish_date).valueOf()
+// );
+
+ return paginate(allClients, {
+ pageSize: 25,
+ });
+}
+
+const { page } = Astro.props;
+
+const meta = {
+ title: 'Clients',
+ description: 'I\'ve worked with dozens of clients over the past 10 years. Small to large and spread across multiple industries. If you\'re looking for technical or creative text, audio, or video creation or editing:
Get in touch
',
+ // canonical: post.canonical || url,
+ // image: await findImage(post.image),
+ // noindex: BLOG?.post?.noindex,
+ // ogType: 'article',
+};
+---
+
+
+
+
+ {meta.title}
+
+
+ {
+ page.data.map((client) => (
+ -
+
+
+ ))
+ }
+
+
+
diff --git a/src/pages/cv.md b/src/pages/cv.md
index 19f08ae5..04077bf4 100644
--- a/src/pages/cv.md
+++ b/src/pages/cv.md
@@ -92,7 +92,7 @@ As a freelance writer and blogger, I have contributed to the blogs and documenta
- **libcamera**: Documentation of an open-source camera stack and framework for Linux, Android, and ChromeOS.
- **Dev Spotlight**: Technical blog posts for Salesforce, Kong, and others.
-- **RevCom**: Technical blog post editing for high-profile clients.
+- **ReveCom**: Technical blog post editing for high-profile clients.
- **Sky Word**: Technical whitepaper writing for high-profile clients.
- **Unity**: Documentation for the MARS AR development plugin.
- **GitLab**: Technical blog posts.
diff --git a/src/pages/games/[...page].astro b/src/pages/games/[...page].astro
index 97513078..0d462308 100644
--- a/src/pages/games/[...page].astro
+++ b/src/pages/games/[...page].astro
@@ -18,7 +18,7 @@ export async function getStaticPaths({ paginate }) {
const { page } = Astro.props;
const meta = {
title: "Games",
- description: "I create and edit roleplay and board games and everything in-between.",
+ description: 'I create and edit roleplay and board games and everything in-between. If you\'re looking for a game writer, editor, or proofreader:
Get in touch
',
// canonical: post.canonical || url,
// image: await findImage(post.image),
// noindex: BLOG?.post?.noindex,
diff --git a/src/pages/games/[...slug].astro b/src/pages/games/[...slug].astro
deleted file mode 100644
index 5ff1910c..00000000
--- a/src/pages/games/[...slug].astro
+++ /dev/null
@@ -1,34 +0,0 @@
----
-import MarkdownPostLayout from '../../layouts/MarkdownLayout.astro';
-import { Image } from 'astro:assets';
-// import { findImage } from '~/utils/images';
-import { getCollection } from 'astro:content';
-// 1. Generate a new path for every collection entry
-export async function getStaticPaths() {
- const bookEntries = await getCollection('games');
- return bookEntries.map((entry) => ({
- params: { slug: entry.slug },
- props: { entry },
- }));
-}
-// 2. When it's time to render, you can get the entry directly from the prop
-const { entry } = Astro.props;
-// const featured_image = await findImage(entry.data.image);
-const { Content } = await entry.render();
----
-
-
-
-
-
-
\ No newline at end of file