Announcing the Magic Pages Open House. Quarterly calls with our team!

A very clean Frankenstein

Designer Jan Persiel backed Ghost on Kickstarter in 2013 and has kept a Ghost site running ever since. He and Jannis talk podcasting on Ghost, themes that misuse Ghost's fields, why Ghost isn't an everything CMS, and how his Casual Friday Club splits the work between Statamic and Ghost.

  • 46 min read
  • with Jannis Fedoruk-Betschki
0:00 0:00

About this episode

Jan Persiel is a designer and UI engineer from Hamburg. He backed Ghost on Kickstarter in 2013, and there has been a Ghost site somewhere in his life ever since: his own blog, a brand manual for a client, and now two new projects on Magic Pages. One is AllesOkAI, a German podcast about AI in everyday life that he hosts with Dennis Reimann on the Pod theme. The other is the Casual Friday Club, his cocktail and mocktail site.

Jan and Jannis compare notes on running a podcast on Ghost. Both ended up scripting most of the work, and both arrived at the same next step: creating the Ghost draft through the Admin API. They talk about themes that hide settings in Twitter fields, why Pod keeps its episode data in code injection, and why Ghost is not an everything CMS. Then Jan explains why his gin catalogue GinGinGin needs a CMS built for structured data, and how the Casual Friday Club splits the work: Statamic serves the site and the recipes, Ghost runs the magazine and the Friday newsletter from a subdirectory, and webhooks keep a single search across both.

🍸
A message from Jan regarding the coupon code:
To make it easier for those of you who want to become a home mixmaster for mocktails and cocktails, just sign up for the newsletter at CasualFriday.Club, no code required. The first 100 will automatically get upgraded to a premium tier once it is live, no hidden cost or other shenanigans. You'll enjoy the benefits of being part of the early 100 bunch in the Casual Friday Club. Yes, we do have a virtual booth reserved for you as well. Take a seat and join the fun! Oh, and drop me a line once you signed up to let me know Jannis sent you 🙂

Chapters

  • 0:00 — Welcome — Jan Persiel, designer from Hamburg
  • 0:30 — From graphic design to the early web
  • 1:27 — Art director for a World Cup site, knowing nothing about football
  • 3:09 — A gin blog and close to 2,000 bottles
  • 3:50 — Backing Ghost on Kickstarter
  • 4:36 — Posterous, and why Ghost's simplicity sold him
  • 6:33 — Always a Ghost install somewhere
  • 7:32 — "Friends don't let friends use WordPress"
  • 8:30 — A brand manual in Ghost
  • 9:32 — Markdown makes you think
  • 10:55 — Magic Pages' internal docs on a private Ghost site
  • 12:44 — iA Writer at beyond tellerrand
  • 14:17 — Talking podcasts at Indiecon
  • 15:17 — From the UI Engineering podcast to AllesOkAI
  • 17:33 — Can a Ghost site handle a podcast feed?
  • 20:33 — Where AllesOkAI drifted from the Pod defaults
  • 21:57 — Podcast themes that only look like podcast themes
  • 23:45 — Dennis's monster script, and no media library
  • 25:57 — The first real Pod users
  • 27:23 — How the Magic Pages podcast gets made
  • 30:58 — Themes that misuse Ghost's fields
  • 34:42 — Why Pod keeps episode data in code injection
  • 37:26 — WordPress habits, and a law firm moves to Ghost
  • 41:56 — Ghost is not an everything CMS
  • 44:48 — GinGinGin: too much data for Ghost
  • 49:32 — Why Statamic
  • 50:25 — The Casual Friday Club
  • 51:56 — Ghost in a subdirectory
  • 53:50 — One search across Statamic and Ghost
  • 57:38 — Webhooks: the developer way, by accident
  • 59:06 — Why headless Ghost would have been the wrong call
  • 1:03:16 — Next time: privacy and accessibility
  • 1:05:02 — A confession about the subdirectory move

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 Jan Persiel, a designer from Hamburg, who has been using Ghost for longer than most people know it exists. Jan runs a much-loved gin blog, and on Ghost, he publishes a cocktail magazine and has just started a podcast. Jan, great to have you here.

Jan: Hello, Jannis. I'm pleased to be here in this elaborate virtual room with you.

Jannis: It's very good to have you, Jan.

Jan: Thank you.

Jannis: Jan, can you quickly introduce yourself to the people who don't know, who haven't met you at Indiecon and haven't seen you around online? Who are you and what do you do?

Jan: All right. I try my very best because I usually fail doing that, and my wife always says, I have no idea what you're doing. So I'm trying to summarize it in the best possible way. So I studied graphic design, classical graphic design, and actually, you can tell my age. Luckily, we don't have video, and I'm not supposed to mention anything with a 1900 in front of it, so I won't do that. But back then, I actually started working while studying, and then I figured, oh, there's this thing called the internet, and started actually doing trainings for my co-students for web design, as far as you could call it, design back then, more like table stacking.

And that kind of got me into this digital area. I just worked in a design agency for three years as an art director for websites. I think the pinnacle in terms of branding was that I was the art director online for the FIFA World Cup with no understanding of football at all. So everyone hated me for that. But that was that part, and then actually, that was a very intense three years with sleeping on cardboard boxes, and I actually founded my own studio.

So not the typical thing to have better work-life balance to start your own company, but in that situation, it actually was. So yeah, that's how I got into the digital space. I worked with all kinds of things. I always thought, being a designer, that I should learn as much as possible about coding in order to be in the position to do my own projects. And that's what I've done all the time. I've never actually sold anything in terms of code to clients, because that's simply not my offer.

But yeah, basically brand design work, lots of user interface design work. For the last 12 to 14 years, I've been working heavily in e-commerce, optimizing of large sites. And if you speak German and listen to this, you could probably find some of the things I've done on the UI Engineering podcast, which I ran with my, back then, co-worker Dennis. And actually, Dennis is the person I'm starting this new podcast just now, as you mentioned.

So I think that's that. And you mentioned my gin blog. That's one of those stupid things where I think I need to document something and then make it accessible to everyone and put it on the web. And then you end up with close to 2,000 bottles in your office. And it becomes a hazard to some extent, but it grows. And here we are.

Jannis: I'll definitely link to your German UI podcast for those who want to have a listen there. And those stupid things that you want to document. Your gin stuff has definitely shown us some nice sights of Hamburg when you welcomed us there back in September. So I think it was useful, a useful little hobby on the side.

Jan: Yeah, good to see. At least finally it pays off.

Jannis: Jan, I think you are one of the, let's say, people that I know that has used Ghost for the longest so far. When was the first time that you encountered Ghost as a content management system? And what were your first impressions back then?

Jan: My first encounter was on Kickstarter because I'm actually a founding member of the Ghost project. It still sits as one of my early projects in my profile. So that was my first encounter with it. I'm that old that I actually even used WordPress when it was still called cafelog or something like that. So I tried even those things. Actually, I built a couple of WordPress themes back in the day. And actually that's an exception to what I said earlier. I actually sold those to two or three people.

And then I saw Ghost and I was a user of Posterous back in the day. I don't know whether you've actually seen that. It was a very simple email to website or email to blog service. And I actually used it while working in India, for example, and with lots of my students. I'm actually a trainer as well. And I did a lot of development work and have been training journalists since 19 something. And I like the simplicity of Posterous back then. Just chuck your stuff into an email, send it off. Then have a very simple post and no shenanigans around it. Either it was just audio or video or just an image.

And then I saw this Kickstarter project called Ghost. And I guess like everyone back then, I was totally happy with the way it presented itself in a super simple way. I think back then we had writing and Markdown on one side and then a preview on the right side, if I recall it properly. And that was one thing I guess what was even cooler was and that was very sneaky and smart at that time. I think there was a dashboard which had a fancy curvy colored thing, and it didn't look like the crappy WordPress dashboard where you had like widgets and it just looked like awful open source. It's not even designed to some extent, but just functionality.

And that kind of got me. Then I saw, oh great, it works on mobile and it's simple. That was it. And I was kind of sold. Yeah, I loved it. And was actually going back to the Kickstarter site every day and looking at what was happening and very keen to get my hands on it. And I think I actually downloaded it exactly the day when 0.2 or 0.3 came out and installed it.

Jannis: So since let's say 2013-ish when the Kickstarter was active, have you always used Ghost since or did you also try other things?

Jan: I think there was probably some Ghost install in use at any point in time. My personal blog, which is really some weird way sandwiched into my regular site. So I have that one, which will be janpersiel.com. That is Ghost and it's actually just SEO functionality. You shouldn't look at that, but it's really just a sub part of my main studio website. And I guess we might even have a pattern here that we might be talking about a little later. Yeah, there was always something. And as I said, having been busy doing WordPress things at certain points in time, I always held on to Ghost whenever I could. There was a time when I actually did a lot of things in ExpressionEngine because that had very nice and clean setups for content and fields were properly designed and you didn't just chuck data and stuff into a page, which I think I told you that this friend of mine, Dennis, had this wonderful saying at one point when I needed something and it wouldn't quite work the way I was doing it.

And I said, yeah, or I could just put it on WordPress and then be done with it. And there's a plugin for it. And he had this nice sentence where he said, listen, I'll help you. Friends don't let friends use WordPress. And I think that's very close to a good t-shirt print. And yeah, he helped me with that. And there was always that Ghost thing. I even had clients, even back in the day when it was still horrible to install it, but a very simple Ghost back then and even had it with, I remember that was one client. They used it for, we used Ghost basically for a brand manual. And I remember the guys who were, it was basically a hosting company more or less, and they were doing lots of e-commerce, et cetera.

And they were looking at it and installing it on their systems because we wouldn't just have it at Ghost(Pro), the official Ghost provider back then. And I remember that the guys who installed it, they were furious about it because they were basically doing nothing else but sitting on the terminal all day. And they hated it from the very first second and said, what is this? Why are we doing this? This is weird.

Jannis: Did they come up with the idea of using Ghost or did you come up with the idea of using Ghost for them?

Jan: I think it's that far back in the past that I can say it was me.

Jannis: Okay.

Jan: I didn't really worry too much about it because the thing we wanted, and that's probably what always kept me around some Ghost install was it was super simple. Once you got people to the point where they understood what Markdown is, which I personally try to bring forward whenever possible, because I think Markdown is a way of having people writing things down, which makes them think. And they're not being distracted. They focus on the main things. They can just have an outline first and then their outline turns into level two headings and then they can add stuff underneath.

So that's very close to actually the thinking process and it cuts away all the bullshit. So I don't know how clean this podcast is. Pardon my French. Otherwise just bleep it out.

Jannis: No bleeping here. As long as it's the truth.

Jan: So that was one thing and that always helped. And in that situation, it was the same things. We wrote very simple Markdown pages, basically in Ghost, had this brand manual inside of it and that way we could all access it at the same time without any complicated building processes or anything like that. And we just placed stuff there. That was it. That helped. Yeah.

Jannis: It's really interesting because we went through the same thing now at Magic Pages here. We had, so since Sviatoslav joined in February [corrected from “March”] this year and then Mariia joined in April officially, we had the need to have a knowledge base of some sort to document the knowledge that I had in my head that I had in different documents that we just had flying around. And we tried all kinds of tools. We tried at some point a tool called Outline. Then we had a self-hosted AFFiNE instance, like lots of those things that come from the Notion world of things or try to imitate Notion in a certain way. And at some point we got so annoyed and Sviatoslav just suggested and said, why are we not just using a Ghost site, like a private Ghost site?

We all have access to Ghost. We can install our own search engine there and this can be our documentation. And I was just sitting there for a couple of seconds and thinking, yeah, why not? Because everybody knows how to use it. The issue was always with all those other tools that one person in the team knew how to use it. The others didn't. It didn't work on certain configurations and stuff like this. Even though they were all browser-based, they were slow.

So now for the last like what, one and a half months or so, we're also just using a Ghost site for that internal documentation, also for like brand documentation, but just processes and everything. And honestly, I think since then we all have the joy back to document our work and to document processes and what we do and stuff we want to share with whoever comes after us in that sense, whoever joins us in a couple of months or years or so.

So I find it really funny how like those different teams come to the same conclusion at some point and just say it might be a little bit hard to set up, but in the end, once you bring everybody on there and once they start writing, they have the feeling that they can just write the documentation without thinking about things left and everything.

Jan: It's something you can maybe just put the link into the show notes. There's a last, was it this year or last year? I think this year at the lovely beyond tellerrand conference in Düsseldorf, there was one talk or a presentation of the founder of iA Writer. And he talked about how he's been doing this Markdown editor for Mac for years and what has happened to it in the AI age. There's the, that's actually nasty. And then branding it iA Writer and then the AI age.

Anyway, there are overlaps. And that was always to me a little bit like using Ghost to some extent because it's so clean, there's not much about it. It's really about the content and focusing. And if someone is really interested in that process, how that program got created and the thoughts behind it, I think there's a lot of overlap when it comes to working in Ghost or as you described it, misusing to some extent, Ghost in order to do things. And we actually, fun fact, when we talked about writing down notes for our new podcast, we were like, yeah, why don't we put this? And essentially I said, let's make it a draft of the episode and write into it.

It's just Markdown. And we both have access just like you described it and said, yeah, good. One tool less to worry about.

Jannis: Yeah. Let's actually talk about your podcast. I remember the first time we talked about it was I think the first day at Indiecon where we were setting up our booth and you were there to support us. And at some point we got talking about the fact that you wanted to start a new podcast. And I obviously had our podcast, the Magic Pages podcast as a proof of concept for this new theme that we created like earlier this year, it's called Pod. And the idea was, hey, like we have Ghost, Ghost can do RSS. A podcast is essentially just an RSS feed with a few fancy fields that, yeah, different people, mostly Apple to this extent came up with to populate it.

And you were looking for a solution to do a podcast. And I remember back then you were skeptical. You weren't quite sure whether you wanted to use Ghost or not, but now you ended up hosting your podcast on Ghost itself. Can you quickly just give us an introduction of what your podcast is and how you ended up in that decision of hosting it with Ghost or hosting it on a Ghost site?

Jan: Yes. So first of all, as I mentioned, it's like the, a resurrection of what we did before. So our first podcast, the UI Engineering podcast was about developers and designers working together and basically trying to eliminate friction in between two different team or basically what's the English word, Gewerke in German, the different types of people working together. We did conferences on all kinds of things and we had people and interviewed them and got some insights out of it. And we wanted to share what we experienced in bigger projects because we thought there are so many people who don't get the chance to work on large scale projects as we did.

So we wanted to share our experiences and thought if we share that, it's good for everyone to learn from that. So that was back then. And we had a couple of episodes where we, Dennis and I, we were just like calling each other and talking about stuff because he lives in Bremen and I'm in Hamburg. And we're just chatting. And at some point we said, we're discussing things here. We might as well just hop on some video conferencing thing and just record it. And those were the additional ones. We called them something like, I don't know, it's not kurz und schmerzlos, but the quickies or something like that. And they sometimes actually, they weren't that quick.

They took quite some time, but they were just sharing things. And yeah, we didn't work on the same projects for quite some time. Dennis was very busy in the Bitcoin spheres for some time. I was still doing the e-commerce world to some extent and branding. And then we got to call each other again and talked about experiences with using AI. And then we said, we're talking again. We should be recording this once again.

So we basically got the band back together to some extent and started hitting record. And yeah, so the name is AllesOkAI, and OkAI with AI instead of A-Y. So you can find the podcast at allesokai.de and that's obviously hosted on Magic Pages. Where else would we go? And yeah, set it up there. And I remember one of the things that I asked you at the very beginning, because when you said, okay, yeah, we're hosting it obviously on our servers. One of the biggest things I remembered from our podcast back then was that we couldn't just put it on some small virtual machine because back then podcasts were a little bit more of a typical polling things, people really subscribing via RSS.

And when you published something and our podcast actually got a little bit of traction after some time, you had a pretty heavy load on your servers because basically the moment you published or updated your RSS feed, all of these clients were starting to pull. And that was one of the things where we actually got a CDN hooked up back then, actually Dennis did. And that was one of the things I was wondering about whether that would be even a thing that would be possible and whether it would kill us if we put things on Magic Pages and how the whole thing would actually hold out. Not that I wouldn't trust the service, but I didn't feel like breaching any fair use policies or anything like that.

The idea of using Ghost was somehow a natural thing because I often look at whether it makes sense because I just feel comfortable using it. It sounds stupid, but after all, I'm just a designer. It's a lot prettier than a lot of the other tools and it just works. So muscle memory, all these kinds of things come into play. So yeah, when you said, no, that shouldn't be a problem. And so far it shouldn't be because I think the numbers are not that crazy yet. We thought, yeah, why not use that?

But there's a different thing as well. It's not just about setting up episodes quickly. We wanted to actually collect email addresses and not for the sake of collecting them, but we said there's so much that we will be talking about. And there's so much stuff that we might actually want to do potentially in the future, getting people together, maybe doing tutorials and live sessions, et cetera. We should actually give people the chance to subscribe to a newsletter at some point and maybe just offer something to our community and maybe have a couple of not necessarily closed posts, but actually guide people and do summaries and point people towards things that we find.

For that reason, Ghost was a good choice as well because we got newsletter functionalities for free, basically, and that's why we ended up using it. We've actually drifted away from it to some extent, but we can talk about that in a second. So those were the thinking moments or the things we were thinking about when we chose it.

Jannis: But let's talk about this. Where did you drift away from it?

Jan: So we're doing a video version on YouTube, which is basically just recording us in Proton Meet at the moment. And we recorded a new episode yesterday and tried a new tool, which did not work that well. So one of the recordings broke, at least the video ones. And there's a lot of stuff to do when it comes to podcasts. It's not just the editing. It takes a lot of time. It's easy to listen to a podcast, but there's a lot of stuff happening.

So the very first thing that was great was that you had this podcasting theme ready, right? So we didn't have to do much. I basically created a logo and a little bit of a brand identity. We created little applications to automatically generate our covers, social images that we could share and stuff like that. So build little applications for that. And the Pod theme that you created has a lot of the things one needs to just put the episode on the web, right? And you integrated a lot of the Podcasting 2.0 things in it.

So wonderful. That's very forward thinking and not like a lot of the Ghost themes out there. And I've used Ghost themes before for podcasts. So for example, my short-lived gin interview podcast, the Gin Show, The Fabulous Gin.Show, sorry, was actually on Ghost for a little while. At least I thought so. And I could never get podcast themes to work on Ghost because basically those weren't podcast themes. They just looked like podcast themes and they basically pretended to be something.

And then there were like weird workarounds to actually make episodes work and the feeds did not work properly, etc. And feeds are really, it sounds so simple, but feeds can really act up. There's one thing that doesn't work and feeds fail. You get these notifications from Apple and Spotify, and it's like, there's something wrong. And you think that's impossible. I don't know why. And then it ends up that there's one digit short of something and okay, that thing doesn't generate the full length, etc, etc.

So it was great that it was there. However, you have to use certain things even in the Pod theme, obviously, to make it work as having the episode player there and having all the data in the right slots. And I think that is one of the things where drifting away is the thing that happened. And we're actually thinking about this at the moment. It's the first time sharing this with you and everyone else.

Jannis: I feel honored.

Jan: See, maybe we can't even publish this. This just comes up.

Jannis: No. Whatever you say now will nail you down on it, okay?

Jan: Yeah, exactly. Okay. So we have this huge script. So Dennis actually compiled a little monster, which does a lot of things. It takes our video recordings. It automatically does the transcripts. It generates certain metadata, etc, etc. And all of that is there. You offer to put in metadata. I don't even know where it is. It says somewhere in the Pod documentation, and then you can put some things in and upload your episode or put the URL there and you get the length, etc. All of that is there already from our monster script, right?

So why do we need to copy paste it somewhere? So I guess the next thing we will be doing to some extent, and we just had a couple of Signal messages back and forth this morning, was maybe we would just create posts on Ghost automatically from that script as well, and just get all the data in there instead of just copy pasting data from a TXT file that is being generated. So that's obviously the next thing. Now, what everybody does not see in the audio version is that Jannis is looking like, yeah, Captain Obvious. Of course you do.

But the thing is, see, Dennis doesn't come from the has never used Ghost before, really. And questions like, see, I've uploaded images here. Where's that media manager thing? Where can I see what I've uploaded? And I was like, it's not there. It doesn't exist. It's something you would expect, but it's not there. It might come at some point, but just deal with it for now. If you still know where it is or have a tab open, copy paste the URL. Oh, okay. And not knowing that, he didn't even know that there was an API, or at least wasn't aware of it. So that's why we're moving towards that yet one more automated step.

Jannis: Yeah, I'm Captain Obvious here. I'm just nodding on this side, because that's exactly how I publish our episodes. Because I…

Jan: So we don't need a proof of concept anymore. We have it.

Jannis: You technically have it, and you're on it right now. When people are listening to us talking about this, then we have the proof of concept for the 12th time, yes. No, because I think it's super interesting because I am absolutely sure, and I mentioned that to you before when I invited you for the recording today, I'm absolutely sure that the two of you are the first people outside of Magic Pages or outside of me essentially that is really testing the Pod theme. I know that there are a couple of installations and people have uploaded like one episode of a podcast like here and there, but nobody has actually gone out and said, I'm going to do this regularly now.

I love the fact that we have the option now that there is a theme in the Ghost ecosystem and people in a year or two or three can come back to this theme and use it. That's the entire reason why I've done it. But it was super valuable to also hear from Dennis specifically, like what didn't go right for you guys. He submitted pull requests on GitHub and through them he found a couple of bugs that, like, I didn't notice because I'm using it differently than you guys were using it. And it's super interesting for me to now hear that you also went through the exact same steps at the exact same episode counts that I went through because the first one or two episodes of our podcast, I uploaded the same way.

I said, I built this nice tool here. I can put all my data in there, the structured data I need for an episode to basically be populated. And then at the third episode, I remember I got really annoyed with this and I thought if I'm already doing all the processing on my computer, I basically have, so I'll be recording here in a tool that's called Descript, which I'm mainly using because it automatically transcribes our audio.

And then I can go in and basically edit based on the words that we say instead of having to deal with audio waveforms and everything. That's for my brain at least a lot easier. I know there are other people around that hate that. For me, that's the easiest way to essentially edit a podcast. I see what Jan said, what I said, I can edit it. Then I download the audio file and I run it through a local LLM to transcribe it again, because the transcription of Descript is sometimes really buggy.

So I transcribe it locally on my computer and that is running through a script. So I say, here is the audio file, transcribe it. Then I have the same as you, something that generates the episode covers. And again, the natural steps similar to you, or the same thing as you experienced, the natural step is to then not say, okay, I want to copy and paste this into my Ghost editor, but to just say, okay, put this into Ghost as a draft for me. And I have it in there.

And then I look at the draft in my Ghost editor and I go over it and I say, okay, you even managed from the transcript itself to find the links for the show notes, all the things we mentioned. Hopefully they will all be there. Hopefully it will find all the things that we mentioned with weird names that sometimes it might mistranscribe and everything. But this was a game changer for me as well. And I find it really interesting that you came to the same conclusion. And it makes me wonder how we can improve this workflow because actual, let's say, podcast hosting services that do that, they obviously have that process somewhere in there. You drag an episode in there, it automatically transcribes it for you.

You have everything in there. And we're misusing Ghost here a little bit. Ghost wasn't meant to host podcasts. It can create RSS feeds and we're using that feature. So I will take this as a hint to think about improving the tooling here so that it's even easier for us and for other people to use Ghost for podcasts, to include podcasts into existing sites that we have. Because if let's say two parties in here are using the same theme and come to the same conclusion, I think that's a very strong signal.

Jan: Yeah. Some people might argue the sample size is a little small, but yeah, at least we have a very strong indication at this very moment. Totally agree. To be honest with you, and I think it's fair to say and mention that as well, I am extremely happy that you basically made this theme available within or to... No, actually it's even publicly available, I think, right? It's not even just limited to Magic Pages. There's a lot of things which simply I didn't have the time to do anything. As you mentioned, you got the pull request from Dennis because he was basically taking care of that while I was doing other things. And there's a lot of stuff that just popped up here and there.

And I think in order to make this theme a little bit more comfortable in certain situations, there's probably some stuff we will be just chatting about outside of this or beyond this call, and maybe they find their way into that. But I'm really happy to support getting this thing to a level that works because it works already and it's actually a real podcast suitable theme. And as I said, it's the first one I've been using that actually does that. And maybe that's one thing to mention as well. It is something that doesn't misuse Ghost in the weirdest way. And when I'm talking about misuse, I don't know whether I should actually get started, but I'll mention it anyway.

So I've purchased quite a good portion of Ghost themes myself. I've probably used 10% of them at some point and basically bought a lot of the others and looked at them, studied them and tried to figure out how they work, not really just as a training thing, but actually seeing whether I could make them work for me. And sometimes you see these themes out there, which they look incredible and you think, is that really Ghost?

What is going on here? There's a lot of stuff. And then you download it and you first you buy it and you download it and then you go into the documentation and maybe sometimes you might go into the documentation beforehand, but I like actually playing around with it. And then you find the way you set up the homepage. And I've actually just looked at the toolset from the last or previous, depending on whenever this airs episode where you talk to Cathy.

So I need to look deeper into what she's been doing there. But a lot of these themes are misusing so many things. Place something in the Twitter field A and Twitter field B and all of these Open Graph things are being misused in order to reshuffle your home page. You need to put in some pipe character here and then write down exactly the slug of the pages you want to include here and there. This is very creative and that's good. And I've been doing things like that myself, and I hate it. I hate it for one thing, not that I feel guilty that I'm using a form field which has a label that is something else. It's actually one of the bigger beefs I always had with Ghost that there's no let me call it custom field.

And I'm not talking about these custom things in WordPress where you just open all gates to hell and nothing will work anymore. I'd be happy to have one thing in there and that you could use at some point and make something out of it. I think the limitation within themes themselves and just having these, I think it's 20 fields at the moment, that's great. It makes people think what you want to do and it stops you from building something which is again like some spawning thing from hell that tries to be everything. And I think it actually helps when a theme is focused on something. Variations, that's fine, but you can do variations in a lot smarter ways than a lot of the themes are doing it.

So coming back to the podcast thing, I like it, that it is a dedicated thing. It's clear, it's not mucking around with any fields that are not supposed to take these kinds of data. And yeah, should you ever share something on, I almost said Twitter, on X, whoever might still be doing that, is then you're not surprised that something weird gets shared, right? Because you've got it in the theme field, supposed to be there for Twitter. That's why I like the Pod theme and I think it needs support just for being clean and doing what it's supposed to do in the places where it's supposed to get these things and not just somewhere because it's a way of doing it the sloppy way.

Jannis: Yeah, I appreciate that because that was kind of the intention going in as well, that we say we have a need to get different data and we have no way of storing all the XML that you need for a proper podcast feed in that sense. And there were two thoughts I had from that. You can obviously use like a normal HTML card and put it in there as like a JSON or any other form. But what I've started doing, I don't remember when that was, I think it was for a custom project for a client that I did for a theme where we had a similar issue where the client asked, okay, we have custom theme settings, can we extend them? We need more of them. And I said, no, there's a certain reason why we only have 20 of them.

It's obviously what you mentioned, that's the fact that you want to focus something. You want people to focus on what's important and to make decisions, what is really necessary to change and what is not. Otherwise we'd end up with a WordPress kind of Frankenstein monster that has 500 different settings and you have those everything themes that are so popular with WordPress and not performing at all. And what I started thinking is all I need really is a JSON. It's just a JSON. Where can I put this? If this wasn't a Ghost site, where would I put a JSON? Simple JSON structure. Where would I put it? I wouldn't put it somewhere in the middle of the post or the content.

I would put it at the end near the footer. And then I realized, wait, we do have code injections, one for the header, one for the footer. So let's just use them. And that's essentially what we're doing with the Pod theme that we say, hey, we have this data that we need that we can generate in the Pod metadata generator, which I'm also linking in the show notes, or you can have it generated by a script like you guys do, like I do for our podcast. And the only thing we need is that this structured data that we have created here is somewhere on the page. Pod, the theme, will pick it up. Ideally you put it in the footer of the page, of the post so that Ghost can render everything first.

And then it picks it up from the footer and it says, okay, I now know that this is this field. I now need to render this field this way. And yeah, that was pretty much the intention of that. Not reuse any fields, not apply like weird hidden tags, not have a HTML card in the middle of the page that loads all of this, but just to put things where it makes sense, where it's not disturbing and coming from the thought of where would I actually put this if this wasn't a Ghost site. If I would just create this site from scratch by hand, write the HTML, where would I put this? And it wouldn't be in the middle of the page somewhere.

Jan: Yeah, true. And one thing you mentioned, maybe I'd just chime in on that point. WordPress is like everywhere. And of course, everyone has some, at some point in time, people have somehow interacted with WordPress at some point. And you can go to any company and people will always say, oh, yeah, yeah, I've worked on the website. And what I mean is they've placed things on WordPress very often. And that's the mind they, or the state of mind they have when they approach Ghost and the questions they ask.

So what you just mentioned, limit these options is something, sometimes it feels annoying to some extent because you need to explain things and people just want more and more things and it gets complicated. And that's why a lot of the sites end up being relaunched and actually fully relaunched because they're not, they're beyond repair, right? Because they're totally screwed up and things are being welded on left and right and cables going from left to right. And it's just a mess. And I had this experience where one of my longtime clients actually got a website, I guess like maybe 13, 14 years ago. And they started off on a WordPress site back then because the guy I actually brought into the game was doing all kinds of things and they agreed on using WordPress back then.

And then we actually had it on Grav for a while because the WordPress thing didn't work so well and the hosting they had to use wasn't really working with WordPress. Long story short, 10 years go by or maybe even 12. And now they came back to the point where they actually wanted to write something and wanted to have their little law firm website at the same time. And that's actually where Ghost came back in again. And because we're talking about these fields of data and settings for design, that was something where I actually learned a lot about this mentality people have because they came from this weird world of WordPress and having this perception of everything.

And we agreed that actually a lot of the things would make sense for them to move to Ghost. And so we did. And I said, I'll actually create a theme and I'll do it in a general way, but you guys would be my proof of concept that people can use it. And that's not just whether the content can be moved over or whether the design will fit, et cetera, but how we can improve it and how this process could work. And I think that's something doing this discussion and bringing them in early and showing them prototypes of the first things that could be there helped a lot for them to understand how certain things worked and do work and to actually come to terms with, okay, we're limited.

And yes, they said, move this thing up and down. The typical homepage thing that I just talked about where it usually would be just one thing, I had to move it up and down in the theme. And then we discussed whether it would make sense and whether it was just their idea or whether it would make sense for everyone. And that helped a lot. And I think this discussion is valuable to lead with clients and to talk to them, with them, of what they actually want to achieve. Cathy said that she's listening to how people are programming their websites, right? And why certain things show up somewhere when she customizes themes.

I think that's a very valuable thing. And once you've agreed on something, you actually come to the point where you see, there's not that much I want to change every day. Once it's up and running, I might need to tweak certain things because the content type is different or it's from a different category. But beyond that, there's usually very little to touch, to change and to do. And for that reason, I think it's sometimes it just feels like a huge marketing thing to have all these change it around kind of things. I sometimes wish there was just two versions of something instead of having 15 toggles to compensate for just one change.

Jannis: Yeah. I think that's a very good way of putting how I always present Ghost to a certain extent. When people reach out to us and our support inbox before they start using Ghost and they say, Hey, we currently have a WordPress site or we have a Webflow site or something like this. They ask, this is our use case. Do you think Ghost would be a good fit? And my answer is usually you can make it work with Ghost, especially for something that for publications that publish something regularly.

I think it's a great fit, but you need to know that Ghost is not an everything CMS, like Webflow or WordPress. But it's also fair if people then say, okay, then it doesn't work for us. But on the other hand, from a developer's end, probably also from a designer's perspective, saying, this is how we intend it to be used. And if we want to be cruel about it, you either take it or leave it. That's probably the intention that the Ghost team had to a certain extent as well to just say, I know that this was one of the intentions of creating Ghost where they said WordPress is developing into this everything CMS. We want to be focused on back then blogging right now into a software for publishers to regularly publish work.

It can now be a newsletter. It can be just long form content. It can also be short form content now with the social web and ActivityPub integration. But it is focused on one thing, that's publications. It's not event scheduling, even though Cathy has a great tool for making events in your local community visible. It is not something for, let's say, having elaborate think pieces with the fancy New York Times graphic elements where you scroll through investigative stories and you have those elaborate visual storylines going on. No, it's a software for publishers. It's a software for people that publish something. I do like the way you framed it to just say, yeah, sometimes having those limitations gives you maybe an outlook, forcing a decision maybe, and forcing a decision on how certain things should be.

And in my eyes, having seen sites, really huge sites sometimes go from this nearly unlimited WordPress thing that they had to a Ghost theme and say, okay, how do we actually fit this content that we have built over the last 20 years sometimes into this theme and into this content management system that is Ghost? And how do we make this fit and how do we go forward with our publication process? It's sometimes a very interesting process to look at, both from the outside, but also from the inside to see what decisions are made and where people sit together in a room and then say, actually, we just did this because we could, but nobody actually looked at this data or that data.

It sometimes goes in both ways that you realize with the limitation that certain things you just use because you could without any intention behind it, so to say.

Jan: True. And that's actually a point where I could probably talk about this cocktail thing.

Jannis: Yeah, I was wondering how we can get the segue to that. Talk about your cocktail thing.

Jan: Actually, it doesn't even need one because we're right in the middle of it. I probably have to explain it. I, as you said early on, I have this gin website or gin blog. And one of the things when I did this back then was that I started it at the probably height of the gin craze. Not really because I wanted to write about it, but because I thought, yeah, I should just note down those tonic and gin combinations. And if I try them and think they are good or not, then why not share it? Okay, that got out of hand. We dealt with that and talked about it.

But one thing I did, and by the way, that started, I'm not quite sure. It might've started on WordPress because I had a very nice magazine style theme there, which was actually suitable for what I wanted to do. And not the typical thing, oh, it looks wonderful. And you look at this restaurant theme and because it's lunchtime, you think it's the perfect theme for you to do. And then when you meet again the next day in the morning, you think, what have we been smoking to pick this theme? We don't even have the content that fills 10% of what it's supposed to be.

So now back then, that was great. I got super annoyed with WordPress in the shortest time I could think about again, because I knew what I could have on the clean other side of things. And then my focus shifted a little bit. I started doing less of the blogging kind of style because that somehow moved to Instagram. And I started getting my data about gins and these tonic combinations a little bit more organized and in place and wrote down things and thought, yeah, I can just take a nice pretty picture of a gin tonic and put the bottle there and just talk about it on Instagram until I run into the caption length limits or I do it properly.

And then I thought, if I do it properly, I should think about this in a way that I might be able to make it an app later on, because I want to have this with me when I check things. And maybe a website is theoretically a way that has the lowest barrier to things, but maybe you don't have network at a bar where they have different gins, et cetera. So that was the thinking. I thought keeping it clean in terms of the right data at the right point would be smart anyway.

So I moved away from both WordPress and Ghost because neither of them, WordPress could somehow do it to some extent, but then it would be again, it would be some WordPress thing, some kind of data and some sub sub database table, which no one could get out again. And I would have had to program it myself if there wasn't a plugin like that. And I'm not a good, I'm simply not a developer, full stop. I can write HTML and CSS, and I tend to forget every kind of little bit of JavaScript. I start courses every four years and then I don't use it.

And then I forget everything and I start with the beginner course again. So back then, no AI, no code helper, but I had this loaded thing of data. And today I think on GinGinGin, there's 300 and something bottles of gin catalogued. Some of them just have rudimentary data, like who's doing it. There's always a picture, a high quality one. There's how much alcohol is in there, who's producing it, some basics, but some are really elaborate. Sometimes I take 13 tonics and match that with a gin. I try them, I taste them. I write down what these combinations are like, their taste and aroma wheels, how I call them, where you can basically visually see what the gin tastes like, because that's one of the biggest problems.

You see something and you judge things just like the book by the cover is the gin and the wine by the label and the bottle. And I tried to figure out a few things, but that's pure data. And that's actually valuable in terms of wanting to access it somewhere. And that could never go into Ghost, for example. So that's why I started looking into something there. And I ended up using Statamic because that felt like a really nice, fast thing. It's PHP based, but it can be run as a flat-file CMS. Der Spiegel, for example, is using it. And actually a lot of companies and publications use it now as well. And the idea there is simple. It's you basically build your templates around what you want and you set up your data first or have it properly structured.

That's something you can't do. A Ghost post is basically a Markdown blob with the little bits and pieces of like taxonomy and maybe a couple of hidden tags, et cetera. But that's not enough. And some of these gin profiles have close to 100 data fields when you look at one of those, when you look at it, accumulate it. So that's what I use there. And now when I moved on to this cocktail website, I wanted to send this out to people again. It's called the Casual Friday Club.

So casualfriday.club. And that started off as a publication for a consulting agency. So every Friday I would write something. They would have their consulting topics, which were sometimes a little bit drier. Let's put it that way. And they were happy to get some Friday casual kind of content. So there it was. The Casual Friday Club was born as a thing I would put onto their Mailchimp mailing list back then. So that thing doesn't exist anymore, but I kept the Casual Friday Club alive and thought, okay, that's where I put my mocktails and cocktail things. And I wanted to go back to sending this thing out every Friday, keeping the connection, being a publisher again to some extent, but still having recipe data properly so that search engines and today agents would understand it.

I was going back and forth first in my head, then with one AI, then with another and pondering what I should do. And at some point I thought, you're crazy. You can't just do too many things again. I was actually limiting myself down from, as you've heard, there's way too many projects I'm doing. And I thought, why don't I take the best of each world and let each tool do their job. Then I researched a little bit and then I found one of these articles on Magic Pages. So, surprise. And it said, oh, you can run your Ghost publication in a subdirectory. And that was the moment where a lot of time got burned about back and forth and eventually building.

But if you go to casualfriday.club today, which is a website which is being served by Statamic, actually, so if you're listening to this and you're on the homepage, hopefully it's loaded super fast already. You're looking at Statamic, but if you scroll down on the page, then you see that there's certain things which come from the magazine. And Ghost actually sits behind the slash magazine part. So whatever is being served from slash magazine is actually Magic Pages running a Ghost instance and serving both the newsletter every Friday. It serves all the magazine content like tutorials, like how-tos, et cetera, et cetera.

So there's more coming. There will be bar reviews and stuff. It's basically just a week old now or basically public for a week. And this actually got me into this API thing that we talked about a little earlier for the podcast as well. So what I'm doing is actually Statamic pulls the data from Ghost currently and populates four teasers on the homepage. That's one thing. And then I got to work on this and actually took me two months to get it to where it is with heavy AI usage because I don't really know anything about the Laravel PHP stuff that is going on there, which held me back for years previously. And I had one big problem, which was making me go back and forth while I should do it.

And that was search. And search is obviously a problem if you have two systems because Statamic could search Statamic and Ghost could search Ghost, at least out of the box. And what is happening now is while I was working on that and with those two little helpers in some data center, giving me code snippets and working on my code now is that I could actually get Ghost to serve all the data over to Statamic and Statamic can now search both sides.

So just like Ghost handing out the teasers to the homepage, Ghost is actually handing out the data to my Statamic search. And when you search for something, you're actually searching Statamic, but it has all the Ghost data in there. And every single time I update something or publish something in Ghost, it actually gets pushed over to Statamic or pulled over. And I have a unique search, which is the biggest problem I had. And that way, I really, without knowing what I was doing, but spending time going back and forth, I created this system, which is now it is a Frankenstein kind of thing, but at least it's a very clean Frankenstein. It's just one, one thing, one thread that I needed to bring them together.

And it's a very clean Frankenstein, not, yeah, sewings everywhere, but it's every system is doing what it's good at. And now it's really fun to write stuff again. Now I can actually just focus on the newsletter and I can just write down an article and that's in a nice and clean environment. And if I need to do my recipes, which is like that form to fill out a recipe or to put in bottle data is I think if you want to envision it, think of an Airbus A320neo or something like that and think of every little thing that you see in the cockpit as one input field. That's what this organized data area is like.

So everything is in the right position. But I just see after having published this now, Google seems to love it already. So it's like really going in and it's picking up certain things. And I see the first AI agents coming in, doing a couple of things and pulling stuff. So, and people can search for it. I can build all kinds of filters later on, which Ghost wouldn't have given me. And as of today, I'm super happy that I've split the organized data part into one system, which is good at doing that and having the publishing and fun part on the other side. That's how this weird thing came to life. And it was a back and forth, and I was even happier to what was possible than what I would have thought it might be.

Jannis: I think that's the best conclusion from this to say, yeah, different systems have different strengths. And I'm absolutely sure you could have figured out a way how you can get all the recipe data into Ghost. But I think you would have ended up at a point similar to the podcast data to a certain degree where you just say, yeah, we can make it work somehow. But it's a difference whether you add the same data about every podcast episode.

What is the length of it? How big is the file? Like where is the audio file? Et cetera, et cetera. Or whether you have potentially a hundred fields for a bottle of gin, potentially just two or three, because maybe there isn't more. I don't know gin that much, but that's how I imagine it. You mentioned before that Statamic is pulling Ghost for the update of the search index, or is Ghost actively pushing through a webhook into Statamic?

Jan: A good question. I have an integration in Ghost and that I have these, I have four actions set and those are, I guess it's probably pushing, isn't it? Because when I publish, when I delete, when I, yeah, the typical actions that would change what is publicly available and that's when it happens. So if it's pushing, I simply forgot. I have, I was just, I had these three repos open and juggling with all kinds of agents to keep them there. But yeah, it's probably that.

Jannis: It sounds like you were just using the webhooks, yeah. Because that's, that would have been my question if Statamic can pull Ghost, whether they have some kind of integration with using the RSS feed or something. But it makes a lot more sense if you're using basically a custom integration in Ghost to push that because that's also how, if we look at, let's say non-native search integrations for Ghost, Algolia, also the Ghost Typesense search that we have set up on Magic Pages. If you self host this, then you obviously also need to get the updates for posts into that search index somehow. And that's usually done the exact same way with webhooks. As a non-developer, you have found the developer way of doing it. That's what I'm trying to say.

Jan: I remember that you, when we talked just before this went live, not this episode, but before the site went live, you asked like, so why didn't you use Ghost as a headless system to do all of that? And this was one of the typical ways. And I think the way you describe it, you found it to do it the developer way by chance, basically. I thought, yeah, I could have done it that way if it would have appeared to me at that point. And the mere fact that I actually got, I could have been thinking about it and figuring out that there are certain ways to bring it back and forth. And I knew about the content API, which exists forever, right?

I think certain functionality is basically, well, that's a core thing there. When you have that many things on your plate and doing things like from the interface, doing the design, updating the branding, working on the structure, getting the code right, juggling with these agents, getting super annoyed of their output and what they're doing. And you're thinking, what the heck are you doing here, guys? Then you are happy when it works in the end. And now it's obvious, yes. And I could have done it that way.

Jannis: You know, actually I think the typical headless way would have been that Ghost is just there and you're kind of just rendering it. But now thinking about it or listening to you in more detail, because before we've kind of spoke about it in passing and everything and I knew what we were doing and I had a look at it. But now understanding where you come from, I would actually disagree with myself. When was that? Three-ish weeks ago or so, when we met in Hamburg again, where I suggested to do Ghost in a headless way, I would actually disagree with myself back there. I would say the way you're doing it now to actually split them cleanly and not have Ghost as this hidden headless kind of thing that just serves an API is probably the better way because the point of Ghost in that stack for you is to send newsletters, to get the message out there, to publish something.

And if you had Ghost in a headless way, which basically means it runs in private mode, so to say, and you're just using the API, you could send newsletters and then somebody would click on a link in a newsletter and they end up on a private Ghost site. This is where, yeah, I would have to disagree with myself and the way you've put this together with Statamic doing its thing and Ghost doing its thing on its own, like separately, and then they have this very loose connection in the middle is probably the way it should be done.

So I love how this came together and it underlines the fact that Ghost is not an everything CMS, that there is a certain way where it's good at, or there are certain bits and pieces where it's really good at, and there are certain parts where it's not good at. And I think as a community, we also need to be that honest with ourselves to just say, not everybody should use Ghost and Ghost isn't meant to be used for everything in the world.

So I love the conclusion you came there with the Casual Friday Club, and I'm looking forward to seeing how it develops over the next couple of weeks and months and hopefully years.

Jan: Yeah, me too. I think what we'll do is I'll give you a code because since there will be parts on the Casual Friday Club, so if you are an aspiring home bartender while you're listening to this, or you're not, but you're thinking, maybe I give it a shot, then you're more than happily welcomed at the club, not just on Fridays. We're open 24/7 on the website and Jannis does his job to actually fulfill that 24/7. And there'll be a code for the people who are listening because the first 100 people to subscribe will actually get access to the premium content, which will be coming later on as well. We'll just put this in here. Jannis will put the code in the show notes.

And then if you feel like it, just subscribe it. There's basically no cost. You're one of the early birds. It's happy hour, so to say. Subscriber happy hour, not just cheap, but for free, freeloading time.

Jannis: Thank you very much, Jan. We still wanted to talk about privacy, but looking at the clock, I think we have to do episode two at some point to talk about how we feel about data privacy on the web. I really enjoyed our conversation. I always love talking to you and listening to how you shape up your websites, your different projects. I also feel like there are never too many projects. I'm exactly the same as you.

Jan: Not helping, Jannis. Not helping.

Jannis: It's not a self-help club here. It's a podcast, okay?

Jan: Okay. Good. All right. Okay. Okay.

Jannis: So thank you for taking the time on a Friday, on a casual Friday. And yeah, I've enjoyed this. What is it? On the recording, it says one hour 17. I'll probably cut that down a little bit, but I think it will be a very nice episode that we will release on next Thursday, hopefully, so that people can start into Friday and then get inspiration for the weekend from your blogs. So thank you for coming on, Jan.

Jan: Jannis, it's been a pleasure, and I'd be happy to come back to talk privacy because I think that's a huge issue, and we need to talk about that at some point. And there's another big topic I'll just put on our little notepad for that whenever it is episode, and that would be accessibility. And I think we should talk about that as well because it's yet another one of those topics, which I'm really not just interested in.

I think we need more accessibility, and we need to talk about it. And the state of what accessibility in Ghost is up to at the moment. And yeah, well, I think we'll find more to chat about in that episode for sure. I'm happy to come back. And until then, I wish you all the best. Thank you very much for doing this outstanding service and being there all the time. Last little confession. I was a little bit afraid when I moved all of that to the subdirectory because the directions on Magic Pages say, only do it when you know what you're doing. And I knew I had two developer guys who would help me if the shit would hit the fan. And when I handed it over to you and said, there it is, and it didn't work in the very first moment, I was frantic.

And then it turned out that was just a caching problem, as you said, and it worked out. You really helped me. I was on the brink of a breakdown there for a second, but it worked out. Thanks a lot.

Jannis: You're very welcome. And I think I have never seen a subdirectory set up that just worked the first time. That's why we have that little note on there, as it always.

Jan: That's good. That's good. It makes you check three times.

Jannis: Yes, exactly. But yeah, I'm looking forward to episode two in a couple of weeks. Let's see when we can slot that in. And as I said, thank you and have a lovely rest of your Friday, Jan.

Jan: And you. All the best. And catch you very soon.

Jannis: Yes. Speak to you soon, Jan. Bye bye.

Jan: Bye bye.

More episodes

“You can't do that on Ghost.” Yes, you can!

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.

42 min

The writer who built his own editor

Writer Justin Cox once told readers to stop hunting for the perfect writing app. Then he built one with Claude: em, a Markdown editor that publishes to Ghost. Jannis and Justin talk owning your domain, lost drafts, on-device AI as an editor, not a ghostwriter, and choosing your own line on AI.

35 min

Meet the engineer behind self-hosted Ghost

Austin Burdine built Ghost CLI as an open source contributor, joined Ghost's platform team ten years later, and one of his first jobs is to retire his creation. Jannis and Austin talk Docker, technical debt, getting a PR reviewed, AI-found security bugs, and what Ghost 7.0 is meant to fix.

31 min