Eddy Hernandez https://eddywashere.com Hi, I'm Eddy Hernandez, a Software Engineer based in San Francisco, California. I write about open source and the projects I'm working on. en Eddy Hernandez Copyright 2026 Tue, 17 Mar 2026 07:39:26 -0700 Eddy Hernandez Hi, I'm Eddy Hernandez, a Software Engineer based in San Francisco, California. I write about open source and the projects I'm working on. Your Name [email protected] no Ghost 6.19.1 released to fix SQL injection CVE-2026-26980 https://eddywashere.com/ghost-6-19-1-released-to-fix-sql-injection-cve-2026-26980/ Tue, 17 Feb 2026 14:10:29 -0800 A SQL injection vulnerability existed in Ghost's Content API that allowed unauthenticated attackers to read arbitrary data from the database.

If you run your own Ghost site, now is a great time to upgrade to version 6.19.1 or later. More info can be found in the Ghost Forum post below:

Security update available for Ghost 6.x
We’ve been made aware of a security vulnerability in Ghost versions up to v6.19.0. This is patched in v6.19.1, which has been released and rolled out on Ghost(Pro). Self-hosters should update to v6.19.1 as soon as possible. Details: A SQL injection vulnerability existed in Ghost’s Content API that allowed unauthenticated attackers to read arbitrary data from the database. Docker Image: The Docker image for v6.19.1 is available on Docker Hub here. We’re actively working on improving when and…

I just so happened to be looking at the Ghost forum today when I came across the security disclosure. Had I not been on the forum, my RSS reader would have at least picked up the release note here (See also Feed URL: https://github.com/TryGhost/Ghost/releases.atom).

If you have a better way to keep up with GitHub security advisories for projects, leave a comment to let me know. 🙏

]]>
Ghost 6.19.1 released to fix SQL injection CVE-2026-26980 Eddy Hernandez A SQL injection vulnerability existed in Ghost's Content API that allowed unauthenticated attackers to read arbitrary data from the database.

If you run your own Ghost site, now is a great time to upgrade to version 6.19.1 or later. More info can be found in the Ghost Forum post below:

Security update available for Ghost 6.x
We’ve been made aware of a security vulnerability in Ghost versions up to v6.19.0. This is patched in v6.19.1, which has been released and rolled out on Ghost(Pro). Self-hosters should update to v6.19.1 as soon as possible. Details: A SQL injection vulnerability existed in Ghost’s Content API that allowed unauthenticated attackers to read arbitrary data from the database. Docker Image: The Docker image for v6.19.1 is available on Docker Hub here. We’re actively working on improving when and…

I just so happened to be looking at the Ghost forum today when I came across the security disclosure. Had I not been on the forum, my RSS reader would have at least picked up the release note here (See also Feed URL: https://github.com/TryGhost/Ghost/releases.atom).

If you have a better way to keep up with GitHub security advisories for projects, leave a comment to let me know. 🙏

]]>
no
Is your Ghost site leaking its host IP address? https://eddywashere.com/is-your-ghost-site-leaking-its-host-ip-address/ And how not to end up in the spam folder Fri, 18 Apr 2025 10:42:19 -0700 Story time. I recently signed up for a newsletter powered by Ghost but the confirmation email ended up in my spam folder. I looked to see if there were any issues noted in the email headers.

Imagine my horror when I see the IP address of the vps the site is hosted on with an elevated risk score. Most cloud hosting IPs have been abused by everyone from script kiddies to folks in the major leagues. This means it's harder to end up with a clean IP address for your VPS or cloud server. It also means that folks who opt-in to multiyear hosting agreements, like I do for a discounted rate, it can be difficult or expensive to get a new IP allocated.

Luckily, there is a way to avoid this. To the forums!

Missing documentation for mail config options – Mailgun API support
I ran into some issues trying to set up transactional email with Ghost, and I think there’s a gap in the documentation that could use some clarification. I wanted to use Mailgun for sending transactional emails and followed the instructions here: I tried configuring SMTP as described, but it consistently timed out after 60 seconds (without any errors). I double-checked the ports, authentication details, and tried multiple variations without success. When I couldn’t get it working, I started…

This recent forum post helped confirm my suspicion. You can avoid leaking your IP by exclusively using the Mailgun API transport. You'll need to change the Ghost mail transport option for transactional emails like registrations, from smtp to mailgun. Note that it is the SMTP transport option that exposes the host IP address when sending things like registration emails. This is often the first touch point with subscribers. So let's avoid doing that.

If you're using docker, here are the env vars to set:

mail__transport: mailgun
mail__options__auth__api_key: ${MAILGUN_API}
mail__options__auth__domain: ${MAILGUN_DOMAIN}
mail__from: ${MAILGUN_FROM}
# mail__host: api.mailgun.net # us based
# mail__host: api.eu.mailgun.net # eu based

Hopefully this helps improve your subscriber confirmations.

Also worth noting is an easy to miss issue with your dmarc configuration. As you start sending your newsletter(s) to a larger audience, make sure your dmarc policy is set to something other than none. Read more about these sending requirements here:

💌 New email requirements in 2024: What you need to know
Beginning in February 2024, Google and Yahoo are introducing new requirements to make email more secure and less spammy. This doc discusses how these changes affect Ghost users. 💡 Ghost(Pro) has already implemented changes to comply with these requirements. See our help docs or reach out to support to learn more. Who does this affect? The new email requirements only affect Ghost publications which send newsletters to at least 5,000 recipients per day. If your publication falls under thi…

Last thing, this is my first post with a self-hosted ActivityPub service connected to my self-hosted Ghost site. Check out the feed over at https://mastodon.social/@[email protected] to see what this new integration looks like on the fediverse.

]]>
Is your Ghost site leaking its host IP address? Eddy Hernandez And how not to end up in the spam folder Story time. I recently signed up for a newsletter powered by Ghost but the confirmation email ended up in my spam folder. I looked to see if there were any issues noted in the email headers.

Imagine my horror when I see the IP address of the vps the site is hosted on with an elevated risk score. Most cloud hosting IPs have been abused by everyone from script kiddies to folks in the major leagues. This means it's harder to end up with a clean IP address for your VPS or cloud server. It also means that folks who opt-in to multiyear hosting agreements, like I do for a discounted rate, it can be difficult or expensive to get a new IP allocated.

Luckily, there is a way to avoid this. To the forums!

Missing documentation for mail config options – Mailgun API support
I ran into some issues trying to set up transactional email with Ghost, and I think there’s a gap in the documentation that could use some clarification. I wanted to use Mailgun for sending transactional emails and followed the instructions here: I tried configuring SMTP as described, but it consistently timed out after 60 seconds (without any errors). I double-checked the ports, authentication details, and tried multiple variations without success. When I couldn’t get it working, I started…

This recent forum post helped confirm my suspicion. You can avoid leaking your IP by exclusively using the Mailgun API transport. You'll need to change the Ghost mail transport option for transactional emails like registrations, from smtp to mailgun. Note that it is the SMTP transport option that exposes the host IP address when sending things like registration emails. This is often the first touch point with subscribers. So let's avoid doing that.

If you're using docker, here are the env vars to set:

mail__transport: mailgun
mail__options__auth__api_key: ${MAILGUN_API}
mail__options__auth__domain: ${MAILGUN_DOMAIN}
mail__from: ${MAILGUN_FROM}
# mail__host: api.mailgun.net # us based
# mail__host: api.eu.mailgun.net # eu based

Hopefully this helps improve your subscriber confirmations.

Also worth noting is an easy to miss issue with your dmarc configuration. As you start sending your newsletter(s) to a larger audience, make sure your dmarc policy is set to something other than none. Read more about these sending requirements here:

💌 New email requirements in 2024: What you need to know
Beginning in February 2024, Google and Yahoo are introducing new requirements to make email more secure and less spammy. This doc discusses how these changes affect Ghost users. 💡 Ghost(Pro) has already implemented changes to comply with these requirements. See our help docs or reach out to support to learn more. Who does this affect? The new email requirements only affect Ghost publications which send newsletters to at least 5,000 recipients per day. If your publication falls under thi…

Last thing, this is my first post with a self-hosted ActivityPub service connected to my self-hosted Ghost site. Check out the feed over at https://mastodon.social/@[email protected] to see what this new integration looks like on the fediverse.

]]>
no
Working through the backlog https://eddywashere.com/april-showers-2/ This morning, I took a field recorder to share some of the birds and other sounds in my neck of the woods. Then, as it does, the rain came. Tue, 01 Apr 2025 17:25:05 -0700 Hit the play button to soak in the sounds:

audio-thumbnail
April 1st
0:00
/292.56

On the work side, I've been shooting photos, building out documentation for running hybrid meetings to better support in-person and online organizing, and, of course, working through the rest of my side quest backlog. Right now, I'm wrapping up an email project and slowly pushing along some Ghost site migrations.

Speaking of surprises, one of them I found when migrating a site to Ghost was this tiny issue with alt-text images having a hard limit on the length of characters you can save. Not a huge deal, but it's something to think about if you're tasked with content parity during a site migration. I'm also trying to put together a list of platform fees across Substack, Patreon, and other services to compare what an alternative looks like and the trade-offs to consider.

But even with the work that keeps me busy, I know you can't post your way out of fascism. 404 Media's take on this deluge of news is worth the read.

...the point of this deluge is not to persuade, but to overwhelm and paralyze our capacity to act. More recently, researchers have found that the viral outrage disseminated on social media in response to these ridiculous claims actually reduces the effectiveness of collective action. The result is a media environment that keeps us in a state of debilitating fear and anger, endlessly reacting to our oppressors instead of organizing against them.

If 404 Media has been working to cover what corporate media would probably call political uncertainty at the national level, what do we have at the local level?

I'm based in San Francisco, and I turn to the following people and organizations to better understand what's going on.

The Phoenix Project
We rise from the ashes of buried truth, awoken to challenge and expose the covert corruption eating away at the pillars of our society.

The Phoenix Project

48 Hills | Independent daily San Francisco news + culture
SF Bay Area News, Arts, Culture, Life. Nonprofit daily site, locally published & completely independent.

48 Hills

El Tecolote - Latinx news, arts and culture in San Francisco
El Tecolote is the voice of San Francisco’s “pueblo.” We answer questions and report on news that shape the lives of Latinx people who live or work in the city. Located in the heart of Mission District, we document and amplify the community’s vibrant role in the city’s political, art and cultural scene.

El Tecolote

Get more from Sad Francisco on Patreon
a podcast

Sad Francisco

Get more from Doomloop Dispatch on Patreon
The show covering the worst parts of the San Francisco Bay Area.

Doomloop Dispatch

I still review the billionaire-owned blogs to see how the narrative is being shaped there, but there's no need to share those links here. Please let me know if I missed an outlet or group I should follow.

I'll end with a roundup of posts where my work has been featured in 2025 so far:

After Newsom abandons trans people, a fairly tepid response at SF City Hall - 48 hills
When Gov. Gavin Newsom threw the trans community under the bus last week, LGBTQ+ leaders in the state Legislature and statewide activist groups—many of them very politically moderate and cautious—were very quick to respond. Newsom introduced his new podcast by inviting Charlie Kirk, a right-wing provocateur, to chat with him. It’s hard to understand why […]
Note to Matt Dorsey: UCSF doctors support harm reduction - 48 hills
Plus: SFPD still seems to have problems with illegal searches. That’s The Agenda for March 31-April 6
Another War on Drugs measure passes, with only two dissenting votes - 48 hills
Fielder and Chan oppose plan that has serious flaws and could lead to more deaths. 9-2 votes are becoming a pattern.
Part 1: SF Rules Committee & BOS Meeting: What a fucking week!
Mandelman Reveals His Trumpian Self with Sunshine Task Force. Lead up to Dorsey’s associates and policy advisors targeting and harassing me again, the worst I’ve felt since 2023.
Supes vote 9-2 to let Lurie fire one of the best members of the Police Commission - 48 hills
The mayor wins a decisive victory, giving him the power to replace the police chief and choose the next person for the job.
]]>
Working through the backlog Eddy Hernandez This morning, I took a field recorder to share some of the birds and other sounds in my neck of the woods. Then, as it does, the rain came. Hit the play button to soak in the sounds:

audio-thumbnail
April 1st
0:00
/292.56

On the work side, I've been shooting photos, building out documentation for running hybrid meetings to better support in-person and online organizing, and, of course, working through the rest of my side quest backlog. Right now, I'm wrapping up an email project and slowly pushing along some Ghost site migrations.

Speaking of surprises, one of them I found when migrating a site to Ghost was this tiny issue with alt-text images having a hard limit on the length of characters you can save. Not a huge deal, but it's something to think about if you're tasked with content parity during a site migration. I'm also trying to put together a list of platform fees across Substack, Patreon, and other services to compare what an alternative looks like and the trade-offs to consider.

But even with the work that keeps me busy, I know you can't post your way out of fascism. 404 Media's take on this deluge of news is worth the read.

...the point of this deluge is not to persuade, but to overwhelm and paralyze our capacity to act. More recently, researchers have found that the viral outrage disseminated on social media in response to these ridiculous claims actually reduces the effectiveness of collective action. The result is a media environment that keeps us in a state of debilitating fear and anger, endlessly reacting to our oppressors instead of organizing against them.

If 404 Media has been working to cover what corporate media would probably call political uncertainty at the national level, what do we have at the local level?

I'm based in San Francisco, and I turn to the following people and organizations to better understand what's going on.

The Phoenix Project
We rise from the ashes of buried truth, awoken to challenge and expose the covert corruption eating away at the pillars of our society.

The Phoenix Project

48 Hills | Independent daily San Francisco news + culture
SF Bay Area News, Arts, Culture, Life. Nonprofit daily site, locally published & completely independent.

48 Hills

El Tecolote - Latinx news, arts and culture in San Francisco
El Tecolote is the voice of San Francisco’s “pueblo.” We answer questions and report on news that shape the lives of Latinx people who live or work in the city. Located in the heart of Mission District, we document and amplify the community’s vibrant role in the city’s political, art and cultural scene.

El Tecolote

Get more from Sad Francisco on Patreon
a podcast

Sad Francisco

Get more from Doomloop Dispatch on Patreon
The show covering the worst parts of the San Francisco Bay Area.

Doomloop Dispatch

I still review the billionaire-owned blogs to see how the narrative is being shaped there, but there's no need to share those links here. Please let me know if I missed an outlet or group I should follow.

I'll end with a roundup of posts where my work has been featured in 2025 so far:

After Newsom abandons trans people, a fairly tepid response at SF City Hall - 48 hills
When Gov. Gavin Newsom threw the trans community under the bus last week, LGBTQ+ leaders in the state Legislature and statewide activist groups—many of them very politically moderate and cautious—were very quick to respond. Newsom introduced his new podcast by inviting Charlie Kirk, a right-wing provocateur, to chat with him. It’s hard to understand why […]
Note to Matt Dorsey: UCSF doctors support harm reduction - 48 hills
Plus: SFPD still seems to have problems with illegal searches. That’s The Agenda for March 31-April 6
Another War on Drugs measure passes, with only two dissenting votes - 48 hills
Fielder and Chan oppose plan that has serious flaws and could lead to more deaths. 9-2 votes are becoming a pattern.
Part 1: SF Rules Committee & BOS Meeting: What a fucking week!
Mandelman Reveals His Trumpian Self with Sunshine Task Force. Lead up to Dorsey’s associates and policy advisors targeting and harassing me again, the worst I’ve felt since 2023.
Supes vote 9-2 to let Lurie fire one of the best members of the Police Commission - 48 hills
The mayor wins a decisive victory, giving him the power to replace the police chief and choose the next person for the job.
]]>
no
"For You" vs For Workers https://eddywashere.com/for-workers/ How do we get our news? Wed, 11 Dec 2024 10:40:23 -0800 I am revisiting my content creation and consumption practices, starting with Apple News. The U2 album of news readers baked into the iOS native setup. If you're curious about the power of a platform like Apple and iOS for their community of investors and readers, stick around.

For You

The Apple News algorithm provides a couple of news lists for me. That seems cool in theory, but what I can only describe as a trending investor news slate appears in front of me in my For You section.

That's not the content for me. I'm looking for something more along the lines of For Workers.

What does For Workers look like?

A screenshot of a puzzle. "condo" and "feat" were the novice words I could find.
A screenshot of a puzzle. "condo" and "feat" were the novice words I could find.

I'm not usually intrigued by puzzles but as I explore the Ghost platform, for workers, I'd like to start identifying the gaps that are currently distracting the work I should be doing. This morning started great, but as I looked for a recent healthcare article from 48 Hills on Apple News, I came across plenty of junk that isn't for workers.

We desperately need a kaleidoscope of art and consciousness when creating and consuming content for workers, abolitionists, and the community. And with that, I'm back to it. ✌

]]>
"For You" vs For Workers Eddy Hernandez How do we get our news? I am revisiting my content creation and consumption practices, starting with Apple News. The U2 album of news readers baked into the iOS native setup. If you're curious about the power of a platform like Apple and iOS for their community of investors and readers, stick around.

For You

The Apple News algorithm provides a couple of news lists for me. That seems cool in theory, but what I can only describe as a trending investor news slate appears in front of me in my For You section.

That's not the content for me. I'm looking for something more along the lines of For Workers.

What does For Workers look like?

A screenshot of a puzzle. "condo" and "feat" were the novice words I could find.
A screenshot of a puzzle. "condo" and "feat" were the novice words I could find.

I'm not usually intrigued by puzzles but as I explore the Ghost platform, for workers, I'd like to start identifying the gaps that are currently distracting the work I should be doing. This morning started great, but as I looked for a recent healthcare article from 48 Hills on Apple News, I came across plenty of junk that isn't for workers.

We desperately need a kaleidoscope of art and consciousness when creating and consuming content for workers, abolitionists, and the community. And with that, I'm back to it. ✌

]]>
no
A spectre haunts the corporate media machine https://eddywashere.com/a-ghost-haunts-the-corporate-media-machine/ The algorithms are with the bosses, worker owned platforms are with you. Mon, 09 Dec 2024 16:20:00 -0800 The Spectre is Ghost, a modest proposal to the unholy alliance of billionaire owned platforms. Ghost is a media platform for independent publishers and content creators with $7.5 million in annual revenue. That's an incredible achievement for a distributed non-profit foundation that has had a profitable and sustainable business for the last 12 years.

A screenshot of the ghost cms/crm with their quote highlighted: No Investors. No bullshit.
No Investors. No bullshit.

Ghost empowers workers to create their own alliances through their built-in growth strategy called "Recommendations", as well as their public "Explore" feature for catapulting new projects to the community. A simple way to say, if you like that, you'll love this. Here's what it looks like in practice:

Sure, Ghost is a blog like this one, powered by free and open-source software. But it's software built by a foundation with a mission to democratize publishing. Ghost is an alternative way to support the labor of content creation for the movement, not moments.

Community over commodity. There is no billionaire behind Ghost, just an organization that exists for purpose rather than for profit.

For a cardboard box company that might not mean much — but for a school, hospital, local news org, or open source project, it means a great deal.

Hi, it's me, your local news worker, open-source contributor, and organizer. As billionaires continue towards subscription models to help their dependent blogs blend in, a need rises for a worker owned alternative. I first started tracking Ghost while working on open-source projects and email reporting dashboards at Mailgun, currently the only bulk email sender for Ghost-based newsletters. Fast forward a decade later, I started exploring Ghost again as a digital organizing tool to replace mailchimp after their pricing changes for the Tech Workers Coalition Newsletter. I went with ActionNetwork.org at the time, but I won't ever make that choice again.

🫡

I see the potential behind Ghost, as a platform and ecosystem to build collective power. I see it as a creative outlet for artists, writers, photographers, organizers, community groups and of course, independent news. I'm not not saying to abandon your current platforms. But consider the social labor involved, what cut your current platform takes, and consider an open alternative for the people, not the powerful.

What are the next steps?

I'm going to start building out prototypes to share with the first groups I've already reached out to.

Don't despair, you can try the managed hosted version of Ghost here. It's currently the least painful way to get started, or you can find a Ghost expert to help run this on Open Source Application Hosting for $1.90 or be on the look out for worker-owned platforms that support this work.

And you'd want go through all that because it's worth the following at the end of the day:

  • Own Your Content
  • Memberships & Monetization
  • Email Newsletters & List-Building
  • Scalable & Adaptable

Ghost isn’t a new kid on the block that's a response to anything current, but it represents an exit to private capitalist owned platforms and the media barons behind the curtain. Just as open-source redefined how we build software, Ghost and similar models can redefine how we build communities, tell stories, and support local journalism and organizing.

I'll be writing and documenting my journey from here on out with Ghost, to provide digital organizing signals. If this interests you, let's connect. If you'd like to get D.O.S. content like this in your inbox, subscribe below:

Changelog: 
- 12/10/24 docs(explore): added changelog and platform exploration notes
- 12/13/24 docs(ghost): more screenshots of ghost
]]>
A spectre haunts the corporate media machine Eddy Hernandez The algorithms are with the bosses, worker owned platforms are with you. The Spectre is Ghost, a modest proposal to the unholy alliance of billionaire owned platforms. Ghost is a media platform for independent publishers and content creators with $7.5 million in annual revenue. That's an incredible achievement for a distributed non-profit foundation that has had a profitable and sustainable business for the last 12 years.

A screenshot of the ghost cms/crm with their quote highlighted: No Investors. No bullshit.
No Investors. No bullshit.

Ghost empowers workers to create their own alliances through their built-in growth strategy called "Recommendations", as well as their public "Explore" feature for catapulting new projects to the community. A simple way to say, if you like that, you'll love this. Here's what it looks like in practice:

Sure, Ghost is a blog like this one, powered by free and open-source software. But it's software built by a foundation with a mission to democratize publishing. Ghost is an alternative way to support the labor of content creation for the movement, not moments.

Community over commodity. There is no billionaire behind Ghost, just an organization that exists for purpose rather than for profit.

For a cardboard box company that might not mean much — but for a school, hospital, local news org, or open source project, it means a great deal.

Hi, it's me, your local news worker, open-source contributor, and organizer. As billionaires continue towards subscription models to help their dependent blogs blend in, a need rises for a worker owned alternative. I first started tracking Ghost while working on open-source projects and email reporting dashboards at Mailgun, currently the only bulk email sender for Ghost-based newsletters. Fast forward a decade later, I started exploring Ghost again as a digital organizing tool to replace mailchimp after their pricing changes for the Tech Workers Coalition Newsletter. I went with ActionNetwork.org at the time, but I won't ever make that choice again.

🫡

I see the potential behind Ghost, as a platform and ecosystem to build collective power. I see it as a creative outlet for artists, writers, photographers, organizers, community groups and of course, independent news. I'm not not saying to abandon your current platforms. But consider the social labor involved, what cut your current platform takes, and consider an open alternative for the people, not the powerful.

What are the next steps?

I'm going to start building out prototypes to share with the first groups I've already reached out to.

Don't despair, you can try the managed hosted version of Ghost here. It's currently the least painful way to get started, or you can find a Ghost expert to help run this on Open Source Application Hosting for $1.90 or be on the look out for worker-owned platforms that support this work.

And you'd want go through all that because it's worth the following at the end of the day:

  • Own Your Content
  • Memberships & Monetization
  • Email Newsletters & List-Building
  • Scalable & Adaptable

Ghost isn’t a new kid on the block that's a response to anything current, but it represents an exit to private capitalist owned platforms and the media barons behind the curtain. Just as open-source redefined how we build software, Ghost and similar models can redefine how we build communities, tell stories, and support local journalism and organizing.

I'll be writing and documenting my journey from here on out with Ghost, to provide digital organizing signals. If this interests you, let's connect. If you'd like to get D.O.S. content like this in your inbox, subscribe below:

Changelog: 
- 12/10/24 docs(explore): added changelog and platform exploration notes
- 12/13/24 docs(ghost): more screenshots of ghost
]]>
no
Digital Organizing Signals https://eddywashere.com/coming-soon/ coming soon Mon, 02 Dec 2024 16:43:19 -0800 Currently exploring worker owned and operated platforms.

]]>
Digital Organizing Signals Eddy Hernandez coming soon Currently exploring worker owned and operated platforms.

]]>
no