> ## Content Index
> Fetch the complete content index at: https://www.magicpages.co/llms.txt
> Use this file to discover other available public pages before exploring further.

# “You can't do that on Ghost.” Yes, you can!
- URL: https://www.magicpages.co/podcast/episodes/episode-11-cathy-sarisky/
- Published: 2026-10-29T11:00:00.000Z
- Updated: 2026-10-29T11:00:00.000Z
- Description: Cathy Sarisky went from chemistry professor to full-time Ghost freelancer, building what clients were told Ghost can't do. She and Jannis talk newsrooms, 160 local Ghost installs, her toolbox of 25 tools, the Haunts events calendar, and an AI newsletter that spots what Ghost changes might break.
- Author: Jannis Fedoruk-Betschki
- Tags: #podcast

## About this episode

If you've ever asked a question on the [Ghost forum](https://forum.ghost.org/u/cathy%5Fsarisky/summary?ref=magicpages.co), chances are Cathy Sarisky answered it. She was also the most requested guest since this podcast started. Cathy stood up her first Ghost site in 2022 while she was still a chemistry professor, and today Ghost is her whole business: as [Spectral Web Services](https://www.spectralwebservices.com/?ref=magicpages.co) she builds themes, integrations and custom solutions, mostly for newsrooms, including the local publishers of the [Tiny News Collective](https://tinynewsco.org/?ref=magicpages.co).

Cathy and Jannis talk about the cartoon ghosts behind her branding, the OpenACS hosting company she ran long before Docker, and why so many of her clients were told "you can't do that on Ghost". She explains how repeated client work turned into her [toolbox](https://toolbox.spectralwebservices.com/?ref=magicpages.co) of 25 tools, including the Haunts events calendar that pulls 10,000 local events into a Ghost site, and why she started [What Did You Break This Week?](https://www.spectralwebservices.com/wdybtw/introducing-what-did-you-break-this-week/?ref=magicpages.co), an AI-written newsletter about Ghost changes that might break your integrations. They also get into how AI has changed freelance Ghost work, and why Cathy is most excited about apps inside Ghost admin.

## Chapters

- **0:00** — Welcome — Cathy Sarisky, the most requested guest
- **1:06** — Ghost as a whole business
- **2:07** — From chemistry professor to Ghost Expert
- **3:47** — A friendly face on the Ghost forum
- **5:38** — Why Spectral Web Services is full of cartoon ghosts
- **7:47** — Hosting OpenACS before Docker existed
- **10:01** — Old knowledge, a gap, and new knowledge
- **11:24** — Why Cathy doesn't miss teaching
- **12:45** — Who hires a Ghost freelancer? Mostly newsrooms
- **15:14** — "You can't do that on Ghost"
- **16:45** — 160 Ghost installs on one computer
- **17:24** — Fifty sites, one theme, and the case for child themes
- **20:34** — robots.txt, ads.txt and the in-browser theme editor
- **22:04** — From client work to a toolbox
- **23:23** — The search nobody uses
- **24:13** — One dashboard, 25 tools
- **26:12** — Haunts: an events calendar for local news
- **30:34** — A Linux laptop as the nightly runner
- **31:32** — Making the tools work together
- **33:56** — What the toolbox costs
- **35:51** — Calendars for shoestring newsrooms
- **36:48** — What Did You Break This Week?
- **40:16** — The JWKS change that broke comments on a Friday night
- **42:45** — The same bug at Magic Pages
- **43:41** — A tool every open-source project should have
- **45:57** — How AI changed freelance Ghost work
- **48:42** — "We're going to need a custom helper"
- **49:47** — Good at mechanical changes, bad at decisions
- **50:41** — Wishes for Ghost 7: apps inside Ghost admin
- **54:50** — Wrap-up

## Links & mentions

- [Spectral Web Services](https://www.spectralwebservices.com/?ref=magicpages.co) — Cathy's Ghost consultancy
- [Ghost Tools by Spectral Web Services](https://toolbox.spectralwebservices.com/?ref=magicpages.co) — the toolbox, with a free tier
- [Haunts](https://gethaunts.com/?ref=magicpages.co) — the events calendar that ingests local feeds (also part of the toolbox)
- [What Did You Break This Week?](https://www.spectralwebservices.com/wdybtw/introducing-what-did-you-break-this-week/?ref=magicpages.co) — Cathy's AI-written newsletter on breaking changes in Ghost
- [WDYBTW: Check your JWKS handling now](https://www.spectralwebservices.com/wdybtw/wdybtw-check-your-jwks-handling-now-ghost-rotates-signing-keys/?ref=magicpages.co) — the newsletter issue on Ghost rotating its signing keys
- [Heads up: the JWKS has changed](https://forum.ghost.org/t/heads-up-if-you-have-integrations-that-validate-members-the-jwks-has-changed/63905?ref=magicpages.co) — Cathy's forum post on the key change that broke her cached JWKS
- [Meet the split helper](https://www.spectralwebservices.com/blog/meet-the-split-helper/?ref=magicpages.co) — Cathy on the Ghost helper she leans on for themes
- [Spectral Web Services on Ghost Experts](https://ghost.org/experts/spectral-web-services/?ref=magicpages.co) — Cathy's certified Ghost Expert listing
- [Cathy on the Ghost forum](https://forum.ghost.org/u/cathy%5Fsarisky/summary?ref=magicpages.co)
- [Sponsor Cathy on GitHub](https://github.com/sponsors/cathysarisky?ref=magicpages.co) — funds her contributions to Ghost
- [Tiny News Collective](https://tinynewsco.org/?ref=magicpages.co) — supports small local newsrooms in the US; Cathy is their resident Ghost expert
- [Episode 9 — Meet the engineer behind self-hosted Ghost](https://www.magicpages.co/podcast/episodes/episode-9-austin-burdine/) — with Austin, whose key-change rollout Cathy talks about

## Transcript

**Jannis:** Hi, and welcome to the Magic Pages podcast, where we sit down with the people building, hosting, and publishing on Ghost. I'm Jannis, and today I'm here with Cathy. If you've ever asked a question on the Ghost forum, there's a good chance that she was there to help you out. Cathy has also been the most requested guest on this podcast so far, and I'm incredibly happy to have you here today. Hello, Cathy.

**Cathy:** Hello, Jannis. Thanks for having me. I didn't know I was the most requested guest. That's...

**Jannis:** Yeah, I kept that a surprise. But you were indeed. I think eight or nine people reached out over the last couple of weeks since I started the podcast and said, you definitely need to have Cathy on here.

**Cathy:** Thank you. It's so exciting. I've been watching the podcast and going, oh, he still hasn't invited me.

**Jannis:** You know, I wanted to have a little bit of room. There was lots of, let's say, stress with Indiecon in September, where we had to prepare lots of things. And I thought this is definitely something when all of this is over, so we can take a little bit more time and just see where that leads. And now we're here. Cathy, for those who don't know you, can you quickly introduce yourself and tell people what you do in the world of Ghost?

**Cathy:** Sure. My name is Cathy Sarisky. I am a certified Ghost Expert, which means I filled in a form a few years back. I'm sure there was some validation behind it. But Ghost is my whole business. I'm a freelancer or solopreneur. So I work with a variety of clients, mostly small. Sometimes people hire me for an hour. Sometimes they hire me for a couple of weeks. I have some ongoing relationships where people have me on retainer and have a few hours a month.

But it's all Ghost or sort of things that touch Ghost. So I build a lot of integrations and custom solutions. And yes, I'll make your logo 50% bigger and give you an extra setting so you can change the layout of your homepage the way you want. So it's a little bit of everything.

**Jannis:** So you're the true wizard of Ghost, basically?

**Cathy:** For anybody who hasn't seen it, I work as Spectral Web Services, which is a little cartoon ghost wearing a magic purple wizard hat. So I'm leaning into cute in terms of branding. So yes, maybe I am a wizard.

**Jannis:** Can you tell us how long you work with Ghost already? Because that's not always been the case, right?

**Cathy:** No, I stood up a portfolio site, I think it was in 2022, just for myself. At the time, I was a professor of chemistry teaching at a liberal arts college. I have a PhD in chemistry, yes, really. And so I stood up a portfolio site and I had some questions and I found the forum. And I like to hang out on fora; it's a feature or a bug, you take your pick. But yeah, so I was hanging out a lot on the forum and found myself answering a lot of questions. And I've been around for a few months just hanging out, asking my questions, answering other people's questions. And a member of the Ghost staff, it was Ryan Feigenbaum, who's no longer there, but he's handled a lot of the developer relations sort of stuff, said, you know, you should really apply to be a Ghost Expert.

And I put him off for a while and finally I said, OK, fine, I'll fill your form out, whatever. I was still working full time teaching, but we hadn't had a pay raise in a lot of years. And so it became, oh, yeah, I could do a few hours of work on Ghost. This is a nice addition to our income. We had two kids in private school and then eventually it became clear that actually there was probably enough work, this is before Claude, that there was enough work that really I could in fact do this as my full time job. And the environment teaching, it's not improving. So I guess this is three years of full time Ghost now for me. And it's been really fun to do lots of good stuff.

**Jannis:** Yeah, I remember, I think I joined the Ghost forum and it must have been 2023, early 2023, when I started developing Magic Pages, which wasn't meant as a hosting service back then. But I remember the first friendly face was your Ghost mascot, basically, and seeing you all around. And I always knew when Cathy was somewhere in there, it's going to be a good conversation. So I can only attest from coming in to the Ghost community after you, that you are very welcoming and that I think you eased a lot of people's way into the community and into Ghost a lot. And I can see that in everyday conversations I have with people, because whenever I recommend you to one of our customers who asks, hey, where can I get this and that customized?

And I say, go to Cathy, go to Spectral Web Services, they say, oh, yeah, she's the ghost I've seen around on the Ghost forum, right?

**Cathy:** That's fun. I work for Tiny News Collective, which supports small local newsrooms in the U.S. So I contract for them and then I do their member support and I had this really fun interaction. So we're always taking in new members and then I provide their Ghost tech support and some theme customization, just whatever they want to talk about Ghost. I'm their resident Ghost expert and they've got me on Slack and stuff. But anyway, I'm talking to somebody who's new to Tiny News and he says, I just realized you're the Cathy. And that was just the funniest moment. I'm like, he's like, you're like famous. But it's a very small fame, but OK.

**Jannis:** Yeah, I take that. And in the Ghost community, I would actually say that you're probably the most well recognized person in there just because of the entire branding and the way you have helped people with the questions all around Ghost. So I see that fame.

**Cathy:** Do you want to hear a funny story about my branding?

**Jannis:** Absolutely. I've always wondered about that.

**Cathy:** So when I first kind of started out freelancing, it was just I had a site under my name. I had cathysarisky.link or something stupid that I registered and immediately regretted my choices. But anyway, I was trying to work with this agency. They had bid the job with their big client and they were trying to hire me to actually do the job. But there was some transparency with this client about were they going to use me for the job or somebody else? And they inadvertently exposed an email chain in which this guy said she doesn't look like she's big enough to do this job, which is critical of my bona fides. And I'm like, if I'm going to land these bigger jobs, I need to look more like an agency, even though it's just me.

But the whole thought of having to look like an agency kind of made me mad. So I'm like, it's going to be a spoof of the standard agency site. Take just every agency template out there. What does it have? It has people doing these things and so on. I'm going to do it, but I'm going to do it with cartoon ghosts. And so that's how it started. The site has changed since then. It is not as obviously an agency spoof as it used to be, but that's how it happened. I had this great illustrator in the Philippines who is no longer taking work and it makes me so sad.

But I'd say, OK, I need a bunch of ghosts standing at a whiteboard with post-it notes. I need a bunch of ghosts standing around a wireframe having a conversation, you know, and she'd build these things for me. And that's where it started.

**Jannis:** I always wondered where the ghosts came from, whether you drew them yourself or whether you had somebody for it.

**Cathy:** Oh no, no skill, no skill.

**Jannis:** That sounds very familiar with our illustrations. It's one of those things where I think it was the best decision to hire somebody else with illustrations, because you can obviously get open source illustrations and everything. But looking at yours, looking at ours that we have now, there are people with real skills and it's amazing if you can hire them for stuff like this. And I do remember that agency site and I loved it back then. Cathy, you also ran a hosting service yourself, right?

**Cathy:** I got my first permanent job as a faculty member. I had built a site on OpenACS, which was an early community platform. It had memberships and interactions and comments. And this is super, super early. Just what is the data model for a dynamic website even look like? The big server at that point was Apache, but OpenACS ran on AOLserver. This was a server that, yes, AOL had open sourced. I'm really turning myself into a dinosaur here.

Anyway, it was really hard to get hosting for because all the small little you can host your little website here, things were set up for Apache. And so if you wanted to run AOLserver, you had to get your own dedicated server. And so now it was out of reach for lots of little sites. So I stood up what I think was the first virtual private server hosting kind of focused on AOLserver and OpenACS. Everybody's like, that's easy. You just spin up a Docker container, right? This is before Docker. This is before virtual servers. There was a rudimentary virtual server package and I would lease a dedicated server. And the first thing I'd have to do is compile a kernel to support the virtual private server stuff.

And I would knock that thing offline two or three times, sometimes before I'd get the kernel to boot. You call the data center and go, would you reboot it again? I'm sorry. But yeah, once upon a time. So, yeah, I ran a hosting company because there was this unmet need for OpenACS until I got a full time teaching job that had me busy and felt like I didn't want the pager going off at 3 a.m. And I was just done. So, yeah. I say hosting is for young people and we're not on video, but my hair is white and not a young person anymore. And I like the pager not going off. There are no pagers. I like my phone not going off at 3 a.m. So, yeah.

**Jannis:** Yeah. But when you first revealed that to me at some point, I think it was in a private message on the Ghost forum. It made so much sense, like the fact that you had all that hosting background, because lots of things have changed. We don't have to compile a kernel anymore. We rent a server. It's there. Maybe we have to install an operating system. And then we just in our case, we just make it all flat and install Docker. And that's it.

But lots of the fundamentals are still the same. And it really shines through in the way you can explain to somebody the hosting world in that sense. So it's really interesting that you have like all of this background. And you went into teaching and then you came back into the tech world, basically.

**Cathy:** So it's awkward. I have this really old knowledge and then I have this giant hole and then this new knowledge. I thought when I quit teaching that maybe I would look for and find a full time job. When I started thinking about this in 2022 or 2023, the market was really hot for developers, right? I thought, oh, yeah. And no, the market is not really hot for developers, especially not for 50 something year old developers who are maybe junior, maybe senior. Nobody can figure it out. I like what I do. I've landed in a good place.

But yeah, I'm not sure if you'd asked me in 2021 what I was going to do with my life. I don't think I'd have known where I was going to land.

**Jannis:** I can imagine. Do you ever wish to go back to teaching again? Do you ever have the feeling that maybe that's something you'd want to do again?

**Cathy:** I miss students. I don't miss grading. I don't miss administrative nonsense. The US is a mess in terms of higher education. So there's a demographic bust going on that you can see when you teach college, you can see 18 years in advance. What's your enrollment going to be? Because you just count heads. How many college age students will there be? Right. So we knew for, well, almost decades that we were going to be in trouble starting around 2023, 2024\. Just higher ed in the US was going to be in trouble because the birth rate had dipped 18 years earlier. And so there were going to be fewer people going to college. Then COVID hit. Then there's some shift in the US about what's the value of higher education.

It's political and half of the US is now kind of college isn't worth it. And it's liberal indoctrination. So a lot of colleges and universities are in sort of financial trouble and working in a place that's in financial trouble is not fun. The place I used to work, I still hear a lot about it, but I, and I'm really glad not to live it every day.

**Jannis:** Looking at the US from the outside in the last couple of years, I can totally see that. I kind of wanted to turn the question around, the question that everybody has on the forum all the time. Who should I hire for my Ghost job? Like who's the best Ghost expert out there? And I kind of want to turn this question around and hand it back to you and just ask who are the customers that hire you? What's the kind of work you do as a freelancer in Ghost that has carved your own space there? Who are the people that you work for every day?

**Cathy:** I didn't set out to do newsrooms specifically, but probably two thirds of my time ends up being newsrooms and journalists of some sort. I think it's partly some early customers who were really happy telling other people that they should hire me and just generally getting really comfortable in that space and in the kinds of things that newsrooms need. People who've never had a website before or who are moving websites, that's not something that somebody does regularly. They don't have any expertise in how do you move a website? How do you set a website up?

What are the kinds of things you're going to need? And so having gotten to work with a lot of journalists in newsrooms, I think makes me better at it that I can say, you haven't thought about this, but you're going to want to. Or you're telling me you're going to want this and I'll build that for you, but I don't think you're going to like it. I think what you're actually going to want is this. I don't want to talk people out of what they're sure they want. They can pay me to build it and then pay me to change it. That's fine.

But I can offer some pretty good advice about this is how other people have solved this problem or thought about this problem or, you know, everybody in existence wants to be able to pick on every theme. There's always a big featured image and some small ones. Everybody wants to be able to say what's in the big spot and what's in the small ones. Some of them want to be able to say what's in the first, second and third small slot individually. And everybody hates duplication between those sections. Right.

So you just know the client doesn't say anything about any of that, but you know that as soon as you stand that theme up, they're going to say, great. And how do I pin the post in the big spot? You forgot to tell me. At one point, I'd have said, yeah, your theme doesn't do that. And now I'm just like, it's a conversation you have at the beginning. I'm sure you need to be able to say, how do things end up in that top section? Right.

What are the rules? Help me understand the rules so I can build them. So I've gotten to build a lot of expertise there. So lots of newsrooms. I also enjoy thinking about and solving problems. So some fraction of the clients I get are people who were told, you can't do that on Ghost. And I'm like, yeah, we can do that on Ghost. Let's go do it.

**Jannis:** Do you have an example for that?

**Cathy:** Sure. I want to take PayPal payments on Ghost. I want to take one-time payments on Ghost. I want to use Ghost as the source of truth to log my members into some other site that speaks OAuth. Lots of things. Lots of just, Ghost doesn't do that. I want bookmarks on Ghost. So, yeah, it's always something. So I build a lot of integrations and I build a lot of things intended to save people time. Right. You find somebody whose process for getting a story online involves 12 steps that is, hold on, let's let's think about which of those things can we automate and save you some time so that you can do the part of your job that you actually need to do. Right.

**Jannis:** Yeah, that's really cool. You basically have the knowledge, the expertise, the experience, basically, that you say, OK, I've seen probably hundreds of Ghost sites grow. I know what you're going to want in the future. And here's my opinion how to do that. And then you are able to also find within the Ghost core or within Ghost itself as a CMS what that takes to actually be implemented.

**Cathy:** There are a lot of things that aren't in the docs that knowing kind of what the workarounds are, how it allows you to do a little more than the documentation might imply sometimes. So I have 160 development Ghost installs on my computer. Just if you want a sense of how many I've seen. Now, a few of those are me testing, but that's probably one per client.

**Jannis:** I do think that might be a record on local Ghost installations that somebody has. So, yeah,

**Cathy:** I don't even have one for each of my Tiny News clients. I have about 50, 60 publishers I support who use Ghost, who use the Tiny News theme, but they all use the same theme. So I have a few extra copies because people needed it forked. But add another 50 to that for how many Ghost clients I'm actually. Yeah, it's crazy.

**Jannis:** Cool. And I guess if you have 50 clients on more or less the same theme, you have one GitHub action that then pushes them out to their sites?

**Cathy:** Yes, this is complicated and it really makes me want child themes because the first time somebody says, I need this thing changed. If it's code injection, great, done. But sometimes it's I need these sections rearranged or this logic changed. So that theme has way too many slightly different templates and various sort of lots and lots of time. I'm using all 20 of my custom theme settings for toggle switches and five different dropdown options for the home page and just all sorts of crazy stuff to try to make it work.

But then you get I want the wording of the subscribe button to be different. I want it to say subscribe now it's free. Are we going to fork the theme for that? So I have a workaround that actually lets them change all the words on the site. I'm making really heavy use of the split helper and nobody's come to yell at me for it yet. So I'm going to keep doing it. Yeah, no, I read an entire custom variable that is all the strings on the site and what you want them to be. And it's basically layered on top of the existing t helper.

**Jannis:** Interesting. I've also run into the issue with child themes with one of our customers that has it's not 50 sites, it's three sites, but they all run on the same custom theme from Bright Themes, I think. Yeah, from Bright Themes. But she wanted to have three different versions of that on three different sites with all different home pages, with different layouts and so on. And that was one of the few custom projects that I take on from time to time and what we ended up doing. And I'm still not sure if that's good or not, but what we've been doing there was basically set up a GitHub repository where we say, hey, here's the base theme.

And then we have a folder for every single one of the three different sites. And we just say, OK, we have a GitHub action that takes the base theme and then uses basically the sub folders to copy those customized things into that on the deploy pipeline. So that way, I think it's handleable for three sites. I would not want to see that on 50, though. So there are different ways to get to that. But yeah, child themes, I'd love to see that.

**Cathy:** One of the agency clients I've worked for did something similar to what you're describing, where they had a build pipeline that built a series of related themes from the basic repo. The other thing I've done with Tiny News is I have a couple of branches and that allows me to make changes on the main branch. And then essentially I usually dictate to Claude, hey, would you please cherry pick this over to these other three or four branches?

And then so I have GitHub actions that deploy those branches to those specific sites when there's a push on those branches. And that works OK at this point. It's just, yeah, and please cherry pick that and Claude knows what I mean. That facilitates that process a little bit. But yeah, child themes would be nice. And we run into stuff like robots.txt and people wanting customized RSS, which is not you don't really think about that as being theme, but the way to work around the defaults is to put it in the theme. And so you run into problems there with everybody needs something slightly different or ads.txt.

So I have a PR open on the Ghost Core right now to make robots.txt editable outside of the theme because the new theme code editing breaks the GitHub workflow. And I had one client decided that they were going to edit using the new editor. And then they came back and asked me for changes. It was a team of five. I asked one of them, hey, just confirming nobody's made any changes, right? Oh, yeah, nobody's made any changes.

So I edited my changes, pushed my code to GitHub, which auto deployed, which wiped out his work. Since then, I ask and I grab a download copy that can just sit in my downloads folder for a while in case it turns out that there was something undisclosed. I love that it made it easier to edit themes, but I haven't worked out how to actually preserve that and still do the GitHub theme deploy that makes my life really nice for working with so many different sites.

**Jannis:** Cathy, when did your work with all of your clients turn into a toolbox? You productized your tools that you've built for the last couple of months. When did you decide that you say, okay, like I've seen this problem over and over again. I've done this multiple times. This is actually something that can be useful for people that don't hire me on an hourly basis.

**Cathy:** Yeah, really did seem like it was the same problem over and over. So one of the very, very first jobs I ever did, like back in 2022, was like an Algolia integration. Ghost provided a little bit of tooling, but it didn't handle membership sites with members only access. And it had a bug that every time you resynchronized, it wiped out your custom settings. So you went in and you changed your stop words and stuff, and then it would get wiped out on the next thing. There were a bunch of things.

So anyway, I kept building search integrations and they got better and better. And eventually I built a nicer looking app to sit on top. A little inspiration from the Magic Pages search, in fact. And but I didn't want to use Typesense because the problem for small clients who are not on Magic Pages and getting it for free is that the starting price for Typesense is too high. And Algolia gives you that free tier that a lot of small and medium sites can just sit in the free tier for free. Yeah, the free allowance is really big enough. Everybody says, oh, my gosh, we need a better search. The analytics on Algolia says nobody actually uses that search after I build it, except the site owner.

It is the funniest thing to actually look and go, we built this. We spent three or four hundred dollars of your money to build this really bespoke custom search for you and you had 50 search requests last month. And we're pretty sure half of them were you looking for articles you had written because you couldn't find them and you wanted to link to them, particularly before the built in linking functionality got added to Ghost where you could like search within the post. Right.

So anyway, at some point I said I'm building the same thing over and over or I keep customizing it or I fix a bug and then I need to roll it back out to somebody else. And this is a drag. So long story short, I just started out to do the newsletter digest. I'm going to put this newsletter digest builder online and then people can use it. But of course, to build a newsletter digest, you have to store an API key and you have to handle all the authentication.

So you have to know who's who and people work in teams. So now you need permissions. At some point after I'd done that, it became, oh, I did all the hard work. It wouldn't be all that hard to take this second tool that I built and plug it into the same dashboard. Oh, hey, here's this other tool I built. Let's plug that in, too. So I still have things I haven't hooked up into that dashboard that are sitting in with the 160 Ghost installs.

But at this point, I've got a search package. I've got that newsletter digest builder. I have an events calendar that maybe I'll tell you more about in a minute. Lots of tools, bulk actions, just lots of sort of things. I have an image library because I realized after building the Algolia search integration that the difference between searching for images and searching the front end of your site is not very much. It was like, oh, all the code's here, let's just rearrange it a little bit. So, yeah, I lost count.

I think it's sort of 25 tools, but one of those tools is like 15 different tools that produce embeds that work in email and on ActivityPub and on web. At this point, when I've got a client problem where I'm like, yeah, everybody has that problem, let's build a tool. So it's just become this slightly out of control collection of tools. I'm sorry to say that there are too many things in beta and I maybe at some point need to go back and polish a few of them a little bit more, but the beta is pretty good. Lots of people using the beta in production. Maybe my standards for beta are off.

**Jannis:** I know that feeling, yes.

**Cathy:** One of the tools that I'm pretty excited about, but also the one that costs me the most money is I built an events calendar. So lots of local news sites and just community sites in general want to share what events are going on. And for local news, they want to share everything that's happening in town. But you really don't want to manually enter all the events. You really can't do it in Ghost natively because you can't set a publication date to the future. And that would be how the workaround would be.

So the themes that are doing it are storing the publication date, like in the code injection footer for the post, and then they're using some JavaScript or now with split, you can do it without JavaScript and you can do it on the server side, make the server do the work. But anyway, there's not a great way to do that natively in Ghost. And it still means that newsroom has to somehow get those events into their Ghost site. Right. This is a big job. And so I call the calendar Haunts. It's a pun, right? It's about ghosts, although there's nothing in it that's Ghost-specific.

But it's also your local haunts is a place that you hang out, right? The bar down the road or the coffee shop down the road, a place that you haunt. OK, what I have behind it is a whole lot of ability to ingest ICS feeds, Google Calendar feeds, Squarespace events feeds. I've lost count of how many different calendar feeds, different types I can take in. But if it's a consistent feed and I can work out or Claude and I can work out, Claude is really good at this, Claude and I can work out how to get that data from whatever source is actually the source of truth, then we can put it all on your website and that can just happen. I'm going to say automagically.

But yeah, we launched somebody last week. They have 10,000 events pulled from their local community, from all these different sources. So two months with 10,000 events and yeah, they don't have to do anything. Those events just come in. That's the ideal. Of course, sometimes you look at something and go, oh, we don't want that event in our feed and you kick it back out of your feed. But the idea is that it would be automatic and that you would then have time to provide your journalistic take on the events or your collection of what to do this weekend, but that you wouldn't have to find all the events first, that they would just, the events would just show up. So that's been really fun.

**Jannis:** Yeah. And like you said, mostly like news outlets are using that.

**Cathy:** Yeah.

**Jannis:** It makes a lot of sense. So especially if you work with like smaller community news outlets and stuff like this is, at least from what I know about local news here in Austria, that is like a big part of what they publish or a big part of what they do for a community or to be like that hub to show like, hey, this is going on, this is what's happening. And I love the fact that you can pull it from all the different sources, because as you said, like it's usually scattered all around.

**Cathy:** It is. But so it's a nightmare because it comes in dozens of different formats and you get the same event from three different sources and recurring events built in lots of different ways. And all day events where the event has a flag that says all day on it from the source or where if it starts at midnight and ends at midnight, that means it is all day. Not that those are the actual times. It's yeah, every time we get a new kind of source, there's something and calendars that lie about what time zone they're in. The calendar announces it is in UTC. It is not. It is in wall clock time. Yeah. And vice versa. It gets really complicated really fast, but it saves these journalists a ton of time.

**Jannis:** Yeah. And it sounds like a whole toolbox in a toolbox that you've built there. De-duplication is like the obvious one. But then having to figure out time zones that are not what the calendar announces, that's like an entire different tool on its own.

**Cathy:** But the hope is you do it once, that you do it once per feed. And then once you've sorted out what is this feed doing, then you get all their events until they change platforms without having to do more work. I have my main computer, but then I have sitting next to me a laptop that runs Linux and its entire job is to run the ingest every night. I started out using GitHub Actions and then I realized that you only get two thousand minutes a month. And it takes a long time to ask every haunt that all of your sites have whether they have anything new today. And I ran out of GitHub Actions minutes.

Now I have a runner that runs locally on this old Linux laptop and it sits here and chugs through it. It starts about midnight or 1 a.m., because the quality of the Internet in my household goes down a little bit. So it's a good reason to go to bed because the runner is going to start and is going to tie up the traffic overnight a little bit.

**Jannis:** Yeah, cool. So you also have a little server in your home again.

**Cathy:** Server might be too strong, but yeah, the cat sits on it. It sits right next to my desk and the cat sits on it. It's not very warm, but it's always on. So it's just a little bit warm and it's a box. So she sits on it. But back to tools. One of the things about trying to pull all the tools into the same dashboard is that then you start saying, OK, how do these things work together? OK, so now we have Haunts, but we want to feed the Haunts into the newsletter digest builder. Right.

So they show up automatically. I built a tool that does polls. OK, you need to be able to pull a poll into your newsletter digest. It's just all these different pieces that need to connect together. And because all the tools live in the same dashboard has made it pretty easy to say, oh, this tool needs to go with that tool. What I was doing for fun this weekend was fixing a problem for a client. They have Slack and they have announcements on their website and they have emails with announcements and their various members don't want to look at all three places, but they're not doing a great job getting all the announcements in all three places.

And so this weekend I built a little tool and while I was building it, I said, somebody else will want this, too. So now it's in the toolbox, although it's really alpha. Maybe think before you turn it on automated. So now you can set up announcements and they go out on Slack. And since Discord uses the same webhooks, they would also work on Discord. And there's a little widget that can retrieve them for your Ghost site to put them on your home page. And they're searchable. You can index them with the built in search app so that you can actually have them show up in search results until they expire. And if you have the newsletter automation running to produce newsletter digest, they plug in there, too.

So it's being able to take all these different parts and say, let's make all these parts actually interoperate with each other. And so there's lots of services that do one or two of the things in the toolbox. But those things don't talk to each other and they don't work together. And so being able to say all these things should work with each other. It's not perfect. There are definitely spots where I have a tool and you can use that tool, but it doesn't work with this other tool yet. But trying to say, oh, this tool should talk to that tool and they should work together. It's been really cool.

**Jannis:** It sounds very familiar and seeing all the Ghost sites run on Magic Pages and then figuring out, oh, we could do this on top because we already have all of this built in anyway. And now the question that everybody is asking themselves now, how much do they have to spend on your toolbox every month?

**Cathy:** My goal on setting this up was for it to pay for itself and for it to pay for the work that I do. Maybe not the initial development. And sometimes clients will say, I need this thing. I'll pay you to build it, stick it in the toolbox. A lot of the stuff is on my free tier. You can use it. It doesn't cost me very much to run it. And then I have fifteen and thirty dollar a month tiers and I have a hundred dollar a month tier that somebody is subscribed to, which is very exciting. There was a little happy dance in my house when that happened that day.

And then for small newsrooms, I offer a 50 percent discount for two years so you can use a lot of my stuff for free because it doesn't cost me very much for you to have a few actions that run on my site to do something for your site every night. The calendar is really the only thing that costs me a lot of money. So there I got to be a little bit stricter about, OK, if you're going to use the calendar, you really do have to be on a paid plan because every night I am running this GitHub action that checks all the sites that you're using to supply your calendar feed. And I use AI deduplication and I use AI for categorization. And those things cost money.

It helps that I moved the GitHub actions into my house for free. But yeah, that Haunts calendar is really 90 percent of the cost. A lot of the other platforms that do what Haunts does cost one hundred and fifty dollars or more a month. So my price is missing a zero. Calling it in beta doesn't help, though.

**Jannis:** And from what I've seen, it's very usable. I've clicked around a couple of those calendars today. And honestly, compared to some of the event calendars I see here on local news site, it's like amazing UX that you have built there.

**Cathy:** I tried. I feel like some of those calendar packages out there are really expensive. And I wanted to offer something that a small local news site that was just getting started, that was maybe kind of on a shoestring budget could use. And the choices seem to be multiple hundreds of dollars a month to get the ingestion and autofill sort of functionality that everybody needs. Or you can use it cheap or for free, but you have to put your events in by hand. And a little bitty newsroom startup can't afford a couple hundred dollars a month and doesn't have the time to put the events in by hand.

**Jannis:** Yeah. And if anybody's interested in just seeing what other cool tools Cathy has in there, I'm going to link the toolbox in the show notes and you can click around and see what you can use for free and what costs a bit of money. Cathy, you also wrote or started a new newsletter that's called What Did You Break This Week? Can you tell us a little bit about that? Where did that come from? What is the idea with that?

**Cathy:** Sure. The title is a little bit cheeky and I should say I developed the title after patching broken code on a Friday night at 9 p.m., when I wanted to be thinking about going to bed. So that's where the title comes from. I hope that people will not find it offensive. It was meant to be sort of humorous. But where does it come from and what is it about? First of all, what is it about? It's an AI based newsletter. I am not doing this work. It's an AI based newsletter that scans the Ghost GitHub repo for changes that might break something for self-hosters, for theme creators, for third party integrations. I have a lot of third party integrations.

I've got the whole toolbox, but also lots and lots of just individual things that I've built for people that might include some assumptions about how does Ghost work and changes that then happen in Ghost risk breaking my things. I try to keep an eye on GitHub to see what's going on. I need to say up front, several members of the Ghost team have at various points while developing things reached out to me and said, hey, we're about to change how this works. Is that going to break your stuff? One of the security patches with path traversal and stuff, a member of the dev team while they were patching it said, hey, are we breaking your stuff when we fix this?

I'm like, oh, no, that's cool. But sometimes they miss me or sometimes and then there's the rest of the community building integrations and sometimes they just don't realize that something's going to break or I've built on something that wasn't really a public interface and with an assumption that interface was stationary when it wasn't. Right. So What Did You Break This Week? is a newsletter all about what's happened in the last week in the Ghost repository that might break things. And so it looks at all the merged PRs for the last week, looking for changes in interfaces, changes in API responses, changes in CORS, changes, just anything that looks like it might be a problem.

It also scans everything that's open. To limit that a little bit, it limits itself to actually people who are on the core team because that open stuff is moving fast and would be easy to miss. But yeah, so it scans all of that and then produces a triaged here are the things that might break and how and tries to pull what's important up to the top. I've run it live one week and I back calculated two weeks. It looks like it might be useful, but I don't know. I'd love to hear from you and from other people who might use it, whether it is useful. And I'm particularly interested in what did it miss?

So what did I cause you to miss on breakage? I used some historical data to tweak the prompts that I was using. I can't scan the entire code base. Right. Too big. OK, I could, but I would need a budget for that. I got it down to costing about two dollars a week to run in terms of tokens and that felt OK. But if it needs to be three dollars a week because there's another part of the code base it should watch. We could do that.

But yeah, where did it come from? For a long time, there's been this problem with how Ghost produces JWTs, which are the session tokens used for authentication, for proving you are who you say you are. Right. And the problem was that they were too short for jose, which is one of the main packages to actually validate them. And so then you had to roll your own tooling to do that. You should never roll your own tooling for authentication.

But there we were. So they fixed it. But when they fixed it, that meant that all the existing tokens needed to be regenerated and the key store changed and the format for the key store changed. And they clearly thought about it. Austin, who you had on recently, it was very clear he had thought about, OK, how is that rollout going to work and there's going to be the old ones and the new ones are both going to be valid and so on.

What he missed in there was some of us, I'm guilty, had an assumption that because the key store, the JWKS had not changed in the past five years, that it was not going to change and that one could safely cache it, oh, maybe forever. And so when this thing rolled out, yeah, the fact that keys were valid for an extra 24 hours and rolling is great, but if you had cached the old key store, you were broken. And so it was Friday night and one of my clients who uses Disqus for comments and has an SSO integration so that their logged in Ghost users are logged into Disqus and can comment through that platform. That integration broke because I had cached it because it was going to be a tremendous amount of server load every time anybody visited their site.

And I thought, I'm going to cache this thing. It never changes. It changed and it broke and it was Friday night that their comments went down. It was an easy fix. The patch fix was to load the new key store. Then I went and actually fixed it so that if we had a change in the key store again, that we could load the new one into cache, but automatically because I don't want to do that. I'm too old for hosting breakages at midnight. This at least was 9 p.m.

But yeah, so that's where What Did You Break This Week came from. It comes out Thursday mornings. I spun it up as its own separate newsletter. So if you just want that without all the various other meandering nonsense that shows up on my blog sometimes, feel free to subscribe. And I would love to hear from folks whether it feels like it's useful or not or whether I've saved you.

**Jannis:** It's definitely useful for us. Maybe not the newsletter, but the conversation you started with the whole key chain and everything changing, caught a bug on our end as well, which was exactly the same thing just in a different area of the code. It wasn't the public member authentication, but the same key store and the same length of a key was basically stored in Ghost's private and public keys, like the private and public keys of the entire site, which we use to authenticate our customer portal. If you didn't start that conversation, we would have missed that. And the impact would have probably been, I don't know, like in my personal view, very little.

It meant that all the Ghost sites would have been online and everybody could have published. They just couldn't access their customer portal, for example. And I'm pretty sure we would have fixed that pretty quickly. But the fact that you caught it helped us in that sense. And that's also why I'm now subscribed to your newsletter because it's just good to have that. And the one thing I thought and why I basically brought it up after the toolbox is that actually, this is a great tool that every open source repository should have. The fact that people build against open source software is amazing. There are so many integrations for Ghost, for WordPress, for all the other different, not only content management systems out there, but all different open source tools essentially have an ecosystem around them most of the time.

And there will be things that break. And some of the things are announced in changelogs and in breaking changes when an upgrade is rolled out. But some of them are not. And these are the things that you want to catch. And this is, I think, where you've built a tool that I'm excited to see how it develops in the next couple of weeks to see what that tool can actually catch. And it might not be something for a toolbox for Ghost users, but just something that is now, in my eyes, a prototype for open source in general, how people like you and me that build on top of open software should be aware of the fact that this is happening and, hey, here's a tool that you can use to spot stuff like this.

**Cathy:** I think it would be great if it were produced by the people developing Ghost, but I think there's something to be said for some AI here, too, because I think it's hard when you're working on your piece of code, on your project, to think through all of the little edges and you think, oh, this isn't going to break anything. And then it does little things in behavior that are assumed to be one way and then change can just break things.

**Jannis:** Yeah, absolutely. And I think this is a great use case of AI in that sense to just have more context than what we with our human brains can potentially understand and to just think not just one or two steps further, but just go through the entire chain and think semantically, what does that mean in the end? Not just mechanically, what does it produce in the end? But what could that in the context of, let's say, let's stick with Ghost, what can that mean in the ecosystem of Ghost where me as an LLM, or if I were an LLM, as an LLM, I have a certain context around the tool.

What could this change actually mean further down the line? And I loved the idea that you found there. Speaking of AI, I have a question that I noted down in the very beginning when you talked about the work you do as a freelancer for Ghost, solving different problems for Ghost. You mentioned that you started all of the work before AI, and I'm wondering how that has changed now that Claude and different AI agents are so prominent. Have you seen like a dip in inquiries that you receive or in the type of inquiries that you receive, like how has that changed for you in the last year or so?

**Cathy:** Yeah, so there are some people who used to be regular clients who are fairly tech savvy and who have figured out that they can prompt Claude and that Claude can just do whatever that thing is. There are definitely a few people who I used to work with who now I don't, or I only work with them when they break stuff or they come back to me and this is not working and I've tried to get Claude to do it and why? And I'm like, yeah, you're paying me for an hour, but this is what you need to tell Claude.

So sometimes for some more technical clients, I'm actually helping them. I don't want to say put me out of business, but I'm helping them not need me as much. You know, you need to go ahead and you need to get your local development environment set up so that Claude can have the whole context. You know, there's a, there's a build step on your theme CSS, and so you need to actually set that up and you need to set up your GitHub theme deploy so that you and Claude can make changes and then have version control, right?

So some more technical clients or some people who I would have gotten, I'm not getting now, but I'm still doing fine, got plenty of business. There are definitely things that I can do faster now than I could have before. The ability to just open a theme up and say to Claude, hey, the margins on the footer are wrong. It looks like they're about this. They need to be that. Go fix it. And then I'm going to look with my human eyes on a whole variety of devices. I've got this phone and this iPad and so that I can actually check that it really, the fix is there, but I'm no longer spending any time going, okay, which of these half a dozen partials has the footer so that I can figure out the class on the footer so that I can go and just so there are places where I'm a lot faster, which is nice because it means I can help people a little bit more.

Yeah. And I think lots of people, at least currently, aren't at a point where they know what they want well enough to prompt it and certainly aren't at a point where they know what they want and how it should work well enough to be able to say that's a bad idea. Don't do that. LLMs are a whole lot better at Ghost than they were a year ago, a whole lot better, but there are still times where you catch it proposing that what it needs to do is write a custom helper. I haven't seen that really recently, but for a long time, the LLM's solution for everything was, oh, we're going to need a custom helper. No, we can't do that. We can't load that on Ghost(Pro).

I don't need you to fix my local development environment. We need to come up with a solution here that works in managed hosting because you're on Ghost(Pro) or Magic Pages or Synaps. No, I think at this point it's about got it figured out. But I spend lots of time saying, OK, we need to do this and we're going to use the split helper here and we're going to do this way. And no, I don't want to do that with JavaScript. I want to do it this way. Just lots of things like that. Or no, your plan involves three extra calls to the backend server every time the page loads. Can't do that. Try again. So it's been interesting. It's been a really interesting time to be a software developer.

**Jannis:** Yeah, I think you managed to really put it in a nice framing how I think everybody that I've spoken to about this recently has come to this conclusion that Claude and all the other LLM or AI agents are really good at mechanical changes, but it is really bad at making decisions. It cannot make decisions. It just predicts what the next most likely outcome will be. And especially in a niche system like Ghost, it has definitely become better or the LLMs have become better at figuring out most of the things.

But from what I've seen, the good usage of an LLM, the good usage of an AI agent is still when you have a capable human being in front of the screen that can make those decisions, that can decide, OK, do I need to use JavaScript for this or a helper, a split helper? Cathy, to close this off, do you have any wishes for Ghost 7? Anything where you say if you had all the development resources in the world, this is the one thing from your experience that you would put in there?

**Cathy:** I'm going to tell you what I'm excited about right now, which is from some GitHub gazing. Of course, Ghost is open source, so you can watch what's coming, right? Sometimes you watch it and then it doesn't come and you get disappointed. But I am really excited about this idea of having installable plugin app-ish things. I'm not sure if that's for Ghost 7 or if we're going to get it sooner. I'm seeing code getting merged, so I don't think we're waiting for 7 because I think 7 is coming next year.

I think it's going to be just a little bump on Ghost 6\. I hope because it looks really cool. Again, all I'm doing is GitHub gazing. I don't have any special knowledge here, but I'm thinking the toolbox is picking up and moving into Ghost admin when this stuff gets released. Not all the first day. Bear with me. It's going to take a little while because there are 25 tools and some of them have 20 tools within them. But I am really excited about the ability to have a third party integration that's actually visible within Ghost. One of the things that I get asked a lot by people is make it easier for me to publish, make it easier for me to do this.

They're describing things they want in the dashboard. I need you to set up my newsletter so that it does blah, blah, blah. I get lots of requests that are really change the dashboard. They've worked in WordPress, which can totally change the dashboard in ways it shouldn't. And they're really always a little put off when I say this content for the home page is actually a separate page. And so you have to go into pages and you have to open the page in the editor and you have to put this specific tag on it and you have to set its canonical URL to this and you have to use the product card, which then I'm going to restyle to look it's a terrible experience.

So I'm really excited about not the ability to change the existing dashboard, but the ability for a third party integration to have a place on the existing dashboard because I think that's an expectation right or wrong that a lot of Ghost users have that they could hire a theme developer who could change their dashboard in ways that made it work better for them. And so part of why I stood up this whole third party toolbox dashboard was not because I wanted to stand up a whole third party toolbox thing, but because I wanted to at least collect all the parts in one place since they couldn't be in Ghost to make it easier for people to have all their things in two places, the Ghost dashboard and my dashboard, but at least that it would all be in two places.

So I'm really interested to see this code get released and to see how easy it is then to pick up these tools and put them into the dashboard. It's going to be really interesting. It's going to be fun times when that happens. I apologize in advance to any clients who want me for anything the week that they finally merge that code, because I think I'm just not going to get back to you that week. That's how excited I am. OK, I'll get back to you, but I might push you off a week.

**Jannis:** I think that's totally fair because it's probably speaking to some other people that work in the Ghost ecosystem. That is the one thing that everybody's excited about right now. My assumption is that it's probably going to end up somewhat similar than what we've seen with ActivityPub last year, that the big release is probably with Ghost 7, but there might be the one or two hackety hack ways that you can do it with Ghost 6 currently or with Ghost 5 back then with ActivityPub of just setting your own configuration and everything or activating Labs flags and everything. If that's the way we have to do it, then I think we're going to have a fun week.

**Cathy:** I think so, too. I think it's going to be really interesting. Yeah.

**Jannis:** Yeah, absolutely. Cathy, thank you for sharing all your insights about your toolbox, about the way publishers work, like news publishers work as well, and just sharing your ideas. It was super interesting for me as well to learn a little bit more about your background, to learn how you work with Tiny News Collective and everything. And for everybody that wants to have a look at what you do, can you just quickly share the URL where they can find you and your toolbox?

**Cathy:** So my main website is www.spectralwebservices.com, and then there's a link to the toolbox from there, or it's toolbox.spectralwebservices.com. I didn't take my own advice about picking a nice short domain name because I couldn't find one I liked.

**Jannis:** Perfect. Thank you. I'll also put those in the show notes. And thank you so much for spending your morning with me here. And wish you a lovely rest of your day, Cathy.

**Cathy:** Thank you so much. That was really fun. Appreciate you, Jannis.

**Jannis:** Anytime, Cathy.