RFC: 4 steps to a more newcomer friendly Neos

In the past but also in recent discussion it became clear that the experience for
new developers that check out Neos is not as good as we would like it to be.

Since it is quite hard for us as a team of experienced developers to create special
tooling for newcomers i suggest to rethink this a bit and try to create
tools that we would use ourself in the day to day work. I also think that it would
make sense to focus on cli tools instead since anyone has to use composer anyways.

We may actually be closer to a smooth developer experience than we think if we apply the following principles:

  1. Embrace the cli, since composer is required anyways we can stick to that.
  2. Create cli-tools we use ourself (not a web setup we rarely ever test)
  3. Ensure the cli-tools add suggestions for the next steps.

In total this would allow us to define good new developer experience as follows:

Mission: "A new custom Neos distribution should be created and configured just via cli by reading the output of the cli-commands carefully and following the next suggested steps."

The missing building blocks to achieve this are as follows:

1. A CLI based setup command

By creating a setup command ./flow neos:setup we can add a dialog based way to
configure the database and imagine and to apply the migrations.

2. A kickstarter for Document and Content

Currently a kickstart command exists that creates a new site package. We should
improve that and add commands to create Documents and Nodes.

  • The result should be self explaining in a way that the rendered html says where
    yaml files and fusion files are and where css ans js can be placed.
  • The generated code should be good enogh that we use those tools ourself.

3. A cli tool to configure content dimensions

If you adjust the dimensions you are currently running against quite a hurdle.
We should add commands to add and remove content dimensions.

4. Adjust the base distribution setup to end with a description of the next steps

With the first steps in place the base-distribution setup could be adjusted to
not require Neos.Demo but instead show a description about the required steps to
get to a working site at the end.

5 Likes

I personally want to work on the Kickstart Site/Documen/Content topic. It would be great if we could find volunteers for each of the tasks or identify other missing blocks.

1 Like

I really like all your ideas :wink: and think they would make many things for a beginner easier.
Even if you don’t really understand how to create a node with a title - you would have a starting point and learn the code on the run. I think it’s important, when auto generating files, that teir location is logged to the console - then one could know what happened.

kickstarter content

Funny I had this discussion lately Wizard for creating (basic content) node types (like Typo3 → Mask) - Using Neos & Flow / Frontend & Integration - Discuss Neos – the official forum of the Neos project but I agree that embracing the CLI is the best solution for all.

the site create function via web doesn’t work sometimes on my pc - but I think it’s wasted energy to fix this ; ) FULL CLI MODE xD

presets for kickstart:content?

maybe some presets in yaml files could be helpfull.
./flow kickstart:content Vendor.Site Image --preset Image

kickstarter collection (Sliders, Tabs)

Maybe we also need some type of kickstarter for Sliders, Tabs … (with childNodes and constrains) but this would be quite complex to generate on demand. Maybe something like creating these files and rendering variables via fluid is doable.

console “help” output

I also think it’s a good idea to have some console “help” output.
When you are using the flow kickstart:site you still need to import that site via flow site:import. This was confusing to me at first.

./flow neos:setup --auto?

If I find the time, I like to help with the ./flow neos:setup. As i often setup new neos installs by hand for testing things out, a CLI would speed things up.

Especially, I would like a quick setup command like:

./flow neos:setup --auto

which could be configured via a Settings.yaml somewhere with

  • db name, host, user, pw
  • preferred image driver
  • admin user to create / name / pw

maybe even the command could have defaults so that if to settings are found, x setting would be used. (but that would be quite opinionated)

If no db name is given, it could be asked for one which is the one of the distribution + the date.

… just some ideas pouring out of my mind ^^

I remember that when I set up ghost CMS, I didn’t need to configure anything - even the database (SQLite) was delivered via two commands and the server was running! - I’d like such experience with Neos for beginners.

2 Likes

I am playing around with a kickstarter interface like this:

./flow kickstart:content Vendor.Site Card image:image title:richtext description:richtext link:url linklabel:string

Where the arguments after the nodeType are name:preset groups. And yes i think it is important to tell wich files are created and also to add lots of comments with explanations and links to the documentation to the generated code.

2 Likes

this looks really great :grinning_face_with_smiling_eyes: (found the package on github :innocent: i really like that there is also some fusion generated - and that you have lots of controll over the properties :wink:

i also think that something like this could come in handy:

  • kickstart:useFusion My.Package // will create a root.fusion and add the autoInclude option in to the (existing) yaml
  • kickstart:fusionEelHelper My.Package Helper // will add a Helper.php file with boilerplate and register it in the (existing) yaml under defaultContext
  • kickstart:neosUiPlugin My.Package PluginName // adds the necessary boilerplate code and registers the javascript in yaml.

To use the above commands one needs to have the package created already. The package:create command would do a good job.

Just for transparency this is the mentioned wip code https://github.com/mficzel/Flowpack.SiteKickstarter still highly experimental. Once it gets more mature i plan to move the package to Flowpack for further seasoning.