Every time I see a mention of Ghost on HN I'm reminded of a 2018 interview the founder of the project did with a podcast (SE Daily) in which he said he wished, in retrospect, that he had chosen Laravel or some other PHP framework instead of NodeJS as they would have been "years further down the features pipeline by now." I wonder if he still feels that way.
I'm still on the fence about this one a bit! From a product PoV — god yes I wish we just used Laravel. We'd have been able to move about 8x as fast and get so much more built for users just because the ecosystem is so much better developed. When Ghost first launched in 2013, there wasn't even an off the shelf RSS lib!
That said, Ghost succeeded in large part because it was a new and interesting Node thing, and we might never have gotten as far as we have done without that :)
> When Ghost first launched in 2013, there wasn't even an off the shelf RSS lib!
Is there a blog post or retrospective about the things y'all had to invent/adapt/overcome in using NodeJS? Your interview was the topic of much conversation where I worked at the time; we were a C# shop instead of PHP/Node but we were moving into Big Data and there was agitation to adopt every trendy language for the various bits of the pipeline (Scala for Spark; Java for Storm; Python just because) and your comments about using a stack you know well and Dan KcKinley's "Choose Boring Technology" blog post[1] were the touchstones for the "let's not get too trendy with our language/tech choices" camp.
Having started a large project in 2012/13 (which is still running), I wish I had done the same. Although, if I remember correctly, the ecosystem around Laravel was still very young at the time.
Off-Topic but Ghost's recruitment process was an instant turn off for me. As much as I love the project and would have liked to work on it, I couldn't commit to spend 5 to 10 hours on a coding task without even talking to a human first [0]. I understand resources might be tight in small companies, but the prospect of having someone tell me "oh sorry, we already filled the role" after 10 hours of code was not something I wanted to get into.
On-Topic: Congrats for the new major release, always exciting to see what the team delivers!
I'm definitely sensitive to the unpaid labor thing, but idk how many hours I have spent working on cover letters and my resume anyway, trying desperately to get noticed, only to have no response at all, or just get filtered out in the first step. I have talked to maybe 4 humans total in my couple of years of trying to get a coding job! This makes me excited more than anything, to have something right out of the gate to test my skills on, to be slightly more assured that my work will actually be looked at before I get filtered out... That is absolutely enticing and huge to me, but I get that I am maybe more desperate than most.
Even after the 10h on code or cover letter there is no assurance your submission will be viewed by human. It's easier to filter out code submission than CV/CL. IME the code-first process is even less odds of humans
This isn't bad advice, I don't know why you people are downvoting it into oblivion.
If there is a coding challenge to advance in pursuit of an open position, and it is not paid, and it will take a significant amount of time (e.g. the 10 hours discussed here) then your choices are:
1.) decide yeah, nah, fuck that job and don't do it
2.) do it, but post it to your git[hub | lab | whatever] as open source, and refer them (and possibly, others in the future) to it
3.) whatever else you would do here, it's not as good as the above two ideas
You're being sarky? Maybe it's too obvious advice, especially my emphasis on a 'good' project but I've seen some pretty pathetic ones inc. someone here who complained no-one was impressed with his work. I looked at his github and it was crap and bulked up with 100s of megs of quite pointless (and uncompressed!) textual test data.
Maybe mine's a poor suggestion but I really do wish you the best, it's hard being in that position.
No no, I apologize, I didn't mean it like that at all. I thought you were being a tad snarky, implying that my efforts haven't succeeded because I haven't made something good yet. But I didn't take it in a bad way at all, we are all trying to make good things, and only sometimes succeeding :).
I coded and made things for a long time before I ever even considered getting a job doing it. So, for me it's always a little bit of a struggle trying to find the right "portfolio" project to attempt to spruce up and point to; but I experiment with showing off different things. But that is why the prompted project here is refreshing to me.
I don't know if I code better than that person, but I am very careful about what goes into version control.
Thank you for your well wishes, one day it will work out for me!
I went for a job, was given a vague programming task. I spent days on it and was rejected. When I asked why they told me it wasn't what they wanted. I asked what was. What they told me approximately (and that was pretty unfocussed) I was stunned, there was no way I could have got that. Partly a lack of domain knowledge (but the level of expertise expected wasn't stated, apparently telepathy should have been used or something) but mainly the spec was so utterly vague you could not IMO deduce anything useful from it. I resolved if I was ever given such a non-spec coding task ever again, I'd drop it immediately. I'd recommend to others do do the same.
tl;dr if they don't give you a reasonably clear spec, walk away.
Edit: the situation is very asymmetric. They can well afford to waste your time, where you is any number of candidates that apply. There's no comeback on them for being wankers. Another example, I applied for a job, told them I could do it even though I didn't have language X, but I sure knew Y. They asked me to prove I knew Y so I wrote a very detailed breakdown showing I had immense knowledge, maybe more than he had. He dismissed 12 hours work with 4 words "you don't have X". Draw your own conclusions.
Agreed. I think it’s appropriate to walk away from medium-interest opportunities over this because there are too many out there to consider.
With a high interest opportunity it’s less likely to come up, because those are worth the time to strategically target with custom projects, which works pretty well in my experience.
I don’t mind tech screening or leet code challenges at the right times, but an oversized amount right off the bat seems too inefficient, a ham handed way to connect with good candidates.
Wow ok that is a lot for any company to ask you. I technically couldn't do that as I'm not allowed to have a second job whilst working for my current company.
When this article notes “the product has evolved significantly from humble beginnings,” that’s in a certain amount of tension with the claim immediately before it: “Ghost’s mission from the start has been to create a focused platform for professional publishers.”
In fact, “humble beginnings” is a link to John O’Nolan’s original post introducing “Project Ghost,” and while that post talks about publishing it never mentions professional once. The entire argument being advanced in that post, in fact, is that WordPress evolved so far from its blogging platform roots that there was space for someone to create a new system that refocused on blogging. Ghost’s original slogan, as seen in that very first linked post, was “Just a blogging platform.”
Ghost 5.0 talks about the work being done in the last few major versions: introducing support for Patreon-esque membership tiers, Substack-esque email newsletters, support for videos, podcasts, and other “diverse types of content.” It now describes itself as “a modern CMS.”
To be clear, I’m not saying there’s anything wrong with that. But to paraphrase Mr. O’Nolan: Ghost, by anyone’s definition, is no longer “just a blogging platform.”
So is there space for someone to create a new system that refocuses on blogging? Maybe. Blogging isn’t exactly seeing a resurgence, but I think it’s seeing renewed interest. Hugo, Jekyll, et. al. aren’t that new system, because they’re very much targeted to, if not developers, the kinds of people who read Hacker News. I know I’d personally love a light blogging engine that wasn’t entirely static, and that did have things like a built-in editor and out-of-the-box support for Micropub (or even Metaweblog) APIs and other “IndieWeb” artifacts.
> “We're a team of 31 people now, spread all over the world, and Ghost's own revenue is now about $5M/year (up almost $2M from this time last year). We're still an independent, self-funded nonprofit organisation that can never be bought or sold. And, everything we do is still decentralised and open source.”
There’s a lot to unpack from this paragraph. Good for them.
Hi HN John from Ghost here. Excited to launch 5.0 today, 9 years after Ghost first got built thanks to a popular post right here on Hacker News. We're hanging out in the comments today if you have any questions or thoughts!
Off-topic: I really liked the previous homepage you had instead.
I completely realize that the copy is largely the same (which you have amazingly good copy), but I think you're confusing the potential buyer by having an Analytics Dashboard as your hero image.
You're not an analytics product. You're a publishing platform making it easy for people to make a livelihood using your platform. As such, the hero image should be about that person and/or publishing ... not about clicks and page views.
Agreed. I've never heard of Ghost, but my thought process was roughly this as I read the article (Based on comments here, I think most of my conclusions were wrong):
- Oh, an editor that's somehow optimized for professional flows. Maybe that's worth learning.
- Nope, wait. This is an analytics product for people with lots of readers. Meh. ...vague privacy concerns...
- Looks like a "call to ask for pricing" model or something.
- I wonder if this supports RSS, or if it'll break my reading flow if it catches on. (Scroll down, see there's no rss icon). Nope. Back button.
Anyway, congrats on the 5.0 release!
(Please take this as constructive criticism, and note that I'm not your target audience!.)
Same. Someone recommended Ghost to me for my blog, went on the site and immediately "hmm, this doesn't look like a blogging platform..." Took me a couple tries to dive below the slick marketing speak to find that it is, in fact, a publishing framework.
Would you consider adding support for PostgreSQL instead of just MySQL. I realize that it can greatly complicate things, but PostgreSQL is generally a much better DB.
This is answered in some detail in the post :) Ghost uses Knex and Bookshelf, and can work with any database that is fully supported and made interoperable by those packages. So if anyone contributes to the upstream repositories, the Postgres will work automatically. The core Ghost team focuses on MySQL because we're a small team and we can only really have the resources to document and support one environment properly.
Congrats on the 5.0 launch! A few questions below...(thanks)
Back in 2013, Ghost was promoted as just a blogging tool. In contrast, WordPress had become a general publishing tool i.e. a blog, a CMS, an e-commerce store, any type of website (portfolio, news website, etc.) Fast-forward today and Ghost is also a general publishing tool that can do many of the things WordPress does.
How do you see Ghost vs WordPress today? Is it fair to say that Ghost today has become what WordPress is (i.e. a publishing tool covering the same use cases as WordPress)? Or is Ghost's scope more narrow than WordPress?
I mean I kind of wrote 2,000 words answering this in the post that these comments are about. We've always been focused on a single core usecase: Publishing, and that is still true today. WordPress diverted away from blogging and became a tool for building general websites, ecommerce stores, job boards, real estate listings, social networks (bbpress), enterprise tools (altis), and even full blown applications. In terms of diversity of usecase, you really can't beat WP for how many different things it can do.
Ghost's scope has grown significantly relative to Ghost, but - as I outlined in the post in some detail - our target usecase for the platform has remained pretty consistent, and far narrower by comparison.
All that being said: Apps have to evolve with the market, and Ghost is no exception. It's no use making something and then never changing it, because the world around it doesn't stand still.
This might be a little more out there as a question, but what's your take on future trends and web technologies ? Static vs Dynamic Sites? Will AI/Machine Learning outmode the need for CMSs/platforms Ghost or Wordpress? Are Javascript and its derivatives here to stay or does Rust or some other language have a chance at taking the crown?
Personally speaking as a developer, I had not-so-great experience building a Ghost blog last year. The choice of Handlebars templates brought all the usual headaches of stringly typed language: no IDE feedback on what’s in scope, unclear variable declarations, and the ever present feeling of a temperamental magic.
The Ghost dev team has opted for a strict control over how local installs can be modified, or really, how they can’t. “Ghost Doctor” is more like a cop, and runs a level 3 diagnostic on startup, refusing to run if the engine has been tampered with in a way that the dev team deems unacceptable. And there is no off switch either.
You can’t, for example, modify any of the template data fetching helpers. The only real way to customize the template language is by switching Ghost to a headless mode and praying someone out there built a starter kit that looks good.
And don’t even think about changing the permissions of files within the engine. This especially burnt me when I tried to implement SVG placeholders that get generated on image upload. The suggested solution is to do all asset pipeline modifications via local web servers and shuttle data back and forth.
The last straw was when I wanted to add custom fields to posts. The ruling opinion at the time was to fork the engine, modify the schema, add the new fields to the admin UI, and then modify your custom templates. Just remember that you’ve now opted out of automatic updates and will be maintaining your fork indefinitely.
Believe me, I am sympathetic to why the Ghost devs chose this path. It’s easier to maintain a smaller and more predictable platform. I just couldn't help but feel silly using software with so many arbitrary and artificial restrictions.
> You can’t, for example, modify any of the template data fetching helpers.
how is this different from forking the engine? I'm not super familiar with Ghost's internals, but wouldn't this basically count as a fork anyway? Seems like you either have the option to change the internal engine code, or you don't. I think it makes sense that there aren't a lot of "in-between" options, because that's just asking for unannounced breakage when your "auto-update" system decides to overwrite whatever files you've already messed with, or change the files that are downstream from that one (breaking compatibility)
That’s pretty accurate. I suppose what I should’ve wrote was that there a some template data helpers that can’t be modified or reimplemented from the vantage point of non-Ghost contributor. And somewhat more painful, adding new Handlebars helpers can’t be done within a custom theme. This would mean either forking the engine or switching over to the headless API mode and building something like a Next.js front-end.
This was one of the first fully remote companies I applied for. I applied via workable on 2016-11-29 as a node.js developer. I think my application was immediately rejected (don't know why). I got a bit pissed and started to write a competitor app.
I gave up on that with the ringing sound in my head that somehow they managed to convince people to buy their blog service when there are many free alternatives out there.
That's the real interesting part about this story. How the f did you manage to get people to buy a commodity for a premium price.
And yes I'm still salty but I now work 100% remote due to the pandemic so that's lessened my hurt.
Edit: Since I'm being misread let me explain, I am saying that I tried and failed to write the same type of thing so hats off to them!
I'm a promoter of Ghost I think they are doing great work. Well done on v5.0!
Let's try to read that a bit more positively. Their trajectory was incredible impressive and really a little bit a wtf. They managed to create a product in a category everyone thought to be conquered by Wordpress and the Medium-of-the-time SV project, pivoted that from clearly a blog to something clearly more commercial. All while using a programming environment that was pretty obviously the wrong choice for the project plus starting with a severely feature-limited system. And even asking more for hosting than seemed remotely reasonable (unsure that this was true or just an impression back then, current pricing looks reasonable, but that might be a changed perspective).
Having worked on two blog engines at that time I can completely relate to the jealousness, without having applied :)
Thanks I've edited my OP to give a more clear indication of what I meant. Not sure why the downvotes it's quite incredible what they've managed to achieve far more than what I have in the 9 years to be honest!
> you have absolutely no idea what you're talking about
Huh? Why the personal attack?
I have no idea about me applying to Ghost and being Ghosted ?
> Ghost provides guarantees that no individual developer (including you) can
Where did I say that I was doing this ? If you mean that they provide an SLA and uptime guarantees and such yip and there are many and I mean many alternatives to this that give the same guarantees and always have done for the full course of the 9 years.
> they dedicated over 9 years to work on Ghost and built a company around hosting instances to fund the development
Yes and good on them ! My OP was how much of a miracle this is in software.
It's hard to sell $300/year managed hosting subscriptions to people who just want a blog. This is probably the same reason Automattic switched to an all-inclusive monoplan at $180/year and got rid of any language that suggested it was suitable for personal blogs.
Ghost starts at $9 per month though -- obviously depends on people's circumstances but I would say that's reasonable for many people as a personal blog
I tried it once. It's extremely limited with only being able to use their few built-in integrations and stock themes with no ability to edit them. $108/year is a lot of money to not be able to touch your theme. An extra $72/year will get you wordpress.com with custom theme and plugin support. Drop $3/month and you can get write.as.
This is really exciting. Congratulations, Ghost team!
To anyone who hasn’t tried ghost and is curious, you really should. I can’t think of many other products as long lived which have consistently improved and stayed true to their goals. Not only that though, it’s actually nice to use.
I got my start in blogging on ghost almost 9 years ago and I’ve tried probably a dozen things. Ghost doesn’t get everything right or do everything the best, it isn’t right for everyone, but it seems the most well rounded to me.
Neat. I thought Ghost was just a JS-based static site generator, but apparently they've built out a whole platform to help independent content creators build & monetize an audience. Great to see!
I wonder whether finally, there's a straightforward way to embed a Ghost subscription form in any other website. Love the product, but the lack of this is a show stopper for me.
Sure, but it's far from what I consider straightforward or streamlined. Why would I do this when I can simply embed a form with a copy-paste from the competitors?
Ghost seems interesting, but is it a Wordpress replacement?
If I wanted to create a simple site for an author, where they can sell a couple of books directly from the site. Can Ghost allow this?
With Wordpress, I can quickly grab a theme and install a couple of plugins to get this working for free, save hosting and maybe a single theme purchase.
I personally know two authors who have approached me about creating simple sites where they can sell their self-published books and blog about their book's content.
I am a Ghost user and there's a lot to like about it. One omission that I find strange is the lack of support for i18n. Both the payment flow (Portal), e-mail newsletters and transactional emails going out to subscribers have hard-coded English strings and you need to maintain a fork to translate it. Just seem strange to me in 2022.
Ive installed and used Ghost several times in the past, sadly, the versioning and resource hogging is just too much. (Im specially picky on resource utilization). Nevertheless, I may try the new features and see if its worth it now. Congrats on the release!
Maybe this is the wrong way to use ghost, but can you publish from a git repo of markdown files? Markdown in my favorite text editor with git as version control is by far my preferred writing methodology.
It's database-backed so not really a static site generator. Think of it more like a Wordpress competitor--it's a nice CMS and publishing platform you can host yourself or pay someone to use a hosted version. Ghost is known for having a great editor with a huge focus on ease of writing. Lots of bloggers and writers swear by it.
The long answer is it's absolutely everywhere in our codebases, with some code relying on catch-predicates, meaning we have to pull it out in exactly the right order else things will break in weird ways... and we haven't gotten around to tackling that yet.
I still use Bluebird library for things like property based promises resolutions and the map is a quick way to run only so many promises at a time instead of all of them or in series.
Wait, they’re saying that 4 of every 10 dollars made by a ghost customer goes to Ghost? I’m sure the product is good but that sounds like a large overhead.
The two numbers are entirely unrelated. Ghost does not take 40% of your earnings. If you take a platform such as Wordpress, you can pay $5 every month to have it hosted, and eventually set up a payment system on top. It's not Wordpress taking a cut of your payments, it's you paying them for a service you would have to pay them for anyways, payments setup or not.
If you're trying to run more than one application on a server you probably ought to install dependencies in such a way that different applications can use different versions. Either using a toolchain-specific version manager such as nodenv (or nvm or asdf), or a more general tool like Docker.
It's pretty reasonable for projects to require a specific language version. Especially in this case as 16 is still the latest LTS version of Node.js.
EDIT: They even say "Ghost can work with other operating systems, node versions, and databases (particularly those supported by Knex) - but as a small team, we only document and support one narrow stack that we know works really well."
This is not a production server. Just something I'm running for personal services.
And I would expect a new major release to run on the latest even version of nodejs. The uneven versions are for development purposes. Version 18 will become the active LTS in a few months.
Then we will support it in a few months. That's how LTS works. We can't just add support for Node 18 if all the upstream packages we depend on don't support Node 18.
What a time we live in where you don't have to worry about running software because your OS is too old, or you don't have a Pentium 2, or enough RAM. If they document their requirements and you can't meet them, then the software isn't for you right now. That's not really their fault.
Although, to throw some historically anecdotal salt into the fire, I was kinda forced to switch from Ghost to Hugo when firstly, the migration to v1.0 (late 2017) using the Docker images was a right old faff and secondly, a few months later (early 2018), said Docker image managed to wedge itself into an inoperable mess.
> said Docker image managed to wedge itself into an inoperable mess
Can you elaborate on the issue you encountered?
Most issues I've seen in the wild related to docker deployments is due to not specifying a version tag on the docker image, which means docker will pull the image with the `latest` tag. Fast forward a few years, when you need to restart the container, and for some reason you pull the `latest` image again (either accidentally or automatically by your container system), the new version is now too far ahead from your previous system and break spectacularly when run with your existing data. Some apps even attempt to migrate the data, but failed and leave the data in corrupted state so you can't go back to the previous version.
Link: https://softwareengineeringdaily.com/2018/07/26/ghost-open-s...
Edit: You can search for "Laravel" in the transcript and see an algorithmic attempt at transcribing that part of the conversation: https://softwareengineeringdaily.com/wp-content/uploads/2018...