Ghost Apps - Power to the People

I’m sure that I’m not the only one that thinks that this could be the major change for Ghost and might be the thing that will make Ghost a lot more popular.

Right now we have some Apps that are developed by Ghost organisation. There is no way to create a custom App without changing the core … and we all know that we should not touch the core.

There is a v0.0.2 implemented but I’m pretty sure it doesn’t work anymore. Even if it works it’s still pretty complicated to implement and very basic (v0.0.2).

Apps would be an amazing feature because it gives the developers the power to create amazing features that others can benefit from.

Apps offer unlimited possibilities.

I simply can’t wait for this. :slight_smile:

I would like to second this. The current app implementation is a nice start but falls down on the permissions side. Is there any plan on the road map for rekindling this effort? If the community works to implement some of the missing functionality, what is the likelihood of it being integrated in to Ghost?

The ability to appropriately seed a context with permissions from an app along with the existing ability to add custom routes to Ghost would allow for some highly requested items to be externalized and customized (contact forms, Zapier type integrations, etc.) for individual sites without muddying the core code base.

As mentioned, something like a contact form requires touching the core and re-integrating those changes after any updates.

2 Likes

In fact even simple helpers would be great to have at this stage but apps would cover that too.

2 Likes

Deprioritizing Ghost’s independent developer community is by far the greatest risk to the future growth of the platform. There is clearly no shortage of talent willing to contribute to Ghost’s core offering, but as years slip by it seems that pool of talent is fading. As true functional contribution feels more and more futile, much of the talent we have left seem be those bent on mass producing the same cliché bootstrap themes.

I love Ghost, and it would not be crazy to say I owe current engineering career to the things I learned from dissecting the platform. That said, the longer the community waits to shine, the sooner they realize that they too can build an express app which serves content.

3 Likes

I might be rambling here :slight_smile: but I was looking at the Apps section of my blog and I was wondering if it doesn’t make sense to add here several other standard app integrations that people might frequently use, such as:

  • Google Analytics & Tag Manager
  • GitHub (for people to manage and modify their themes or integrate their projects - I think this would be something cool to have for a theme, use it from github and sync your changes with the upstream theme updates)
  • <insert other sexy, cool and popular app that people use frenquently here)

Thinking about how these usually work it seems to be a “simple” authentication integration via the app auth api.

1 Like

Apps haven’t really been fleshed out at all. You have to do some hackery in the database to even allow adding new apps. I documented it in the old slack channel many moons ago.

TL;DR: Not worth the effort until they finalize the spec on app integration on the Ghost side.

1 Like

Hello guys,

Thinking on how busy the core team is, and how our requested features maybe are not like ideal for the future of “Ghost” as a project but at the same time they are a NEED for us (as Ghost users/developers), what do you think about implementing hooks?

This way, allow developers to build their own “logic” around the core without having to affect the actual Ghost core. The ideal scenario is to implement hooks (events) Before and After each “update” (create, update, delete) is performed; and this should be available for any kind of “content” that a Ghost user modify through the Ghost-Cli, API or Admin like, but not limited to: posts, settings, uploads, etc.

What do you guys think about it? I’m seriously starting to move a lot of my personal and customers projects from WP and custom CMSs to Ghost so thinking as Developer I see a lot of features that I can build for my customers and the open source community but are not a good fit to be a “must” in a core as the use case of my ideas are for limited scenarios so it would worth to build a solution as “an addon” to the core.

That said, I can just wait for your thoughts :smiley:

Hooks are an interesting idea! A problem I often have with authors is they tend to leave important things blank when posting, such as SEO metadata or tags. It would be cool to invoke a script when posts are published to clean up the nonsense as it goes live.

Right now I’ve using a few workarounds that help a lot. For instance, I’ve used the Zapier integration to send me a twilio SMS when authors save a draft, which allows me to intercept these things head-on.

Chances are I’ll stick to Zapier for now and write custom scripts to clean things up at a database level as I wouldn’t expect this kind of niche use to make it to the top of any backlogs soon.

1 Like

Hello All, I apologize for any break in etiquette. I’m new here.

I’ve started working with Ghost and I’m just a content person, not much on the technical side. Therefore, I’ve been talking with a developer to do some work for me on my ghost site.

I asked him to create a function that takes in a zip code and displays the 3 closest locations calculated from a spreadsheet of medical clinics I have. i.e. Just like if you goto ups.com and input your zip code and it shows you the nearest locations.

He and I thought it’d be easy but he wrote me the following and I would appreciate your advice on how to proceed.

I have read this thread I’m replying to right now, but it sounds like my developer’s concerns are still valid.

Thank you in advance!

I’m quoting him below:
I have searched about the requirement we need to accomplish. What i have found is we need to make an App for it. As of now Ghost structure is totally changes from last few months. And its apps will be made in its Core functionality (Folder). I don’t believe that is the best idea to go with. Maybe it was to force people to go to the pro version.

Even with the Free version of ghost very Basic functionalities can be working with some third party Apps. So overall its too costly to manage custom functionality.

About our requirement, Yes it can be feasible (With using Core folders) but its time consuming as well not reliable for Future. As when ever there is a Update for Core our app will be replaced/Vanish.

If you think its okey with you than we can proceed with making app using Core.

Also i request you to look into the link i am sharing here so that you can get to know about the reason why Making app with Core is not Secure.


Making app and using it for long time was only possible in Initial versions of Ghost.
6:52 AM EDT, 16 Apr 2019

Please let me know your thoughts about suggestions.

Sounds like you should get a new guy to do your work :slight_smile:

In all seriousness, this is possible. Though you do need access to your server files, so that you can store the excel sheet online on the server your site is hosted on, use PHP to read from the file and then push it back to Javascript to display a result in the browser.

Perhaps if you have Ghost Pro, you don’t have access to the server files, as far as I understand. Then you could use some other solution, perhaps an integration, to read from another server where you host the file.

If I had the time, I would help you, but I really don’t. Just wanted to tell you that it’s possible.

Thank you for your response!

The developer is estimating 40-50 hours for this. Seems like a lot to me.

It seems reasonable. You might think it sounds easy to make a textbox appear, where you can type in it and have it work like you’d expect, but it’s really not as easy as it sounds.

1 Like

I extend my website use Ghost by make an app.js file beside index.js file with this content and my server app can working like an internal app.

var startTime = Date.now(),
    debug = require('ghost-ignition').debug('boot:index'),
    ghost, common, urlService;

debug('First requires...');

ghost = require('./core');

debug('Required ghost');

common = require('./core/server/lib/common');
urlService = require('./core/server/services/url');

debug('Initialising Ghost');
ghost().then(function (ghostServer) {
    debug('Mount our app');
    const routingService = require('./core/server/services/routing');
    const appRouter = routingService.registry.getRouter('appRouter');
    appRouter.mountRouter('/', require('./server'));

    debug('Starting Ghost');
    return ghostServer.start()
        .then(function afterStart() {
            common.logging.info('Ghost boot', (Date.now() - startTime) / 1000 + 's');
        });
}).catch(function (err) {
    common.logging.error(err);
    setTimeout(() => {
        process.exit(-1);
    }, 100);
});