Skip to content

Instantly share code, notes, and snippets.

Making @neos UI great

Dmitri Pisarev dimaip

Making @neos UI great
Block or report user

Report or block dimaip

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
dimaip /
Last active Jan 17, 2018
Elevator pitch for a stateless Github + Docker Swarm based PaaS

Here's a quick idea for a stateless PaaS on top of Github and docker swarm.

  1. You mark Github repos that you want to deploy to your Docker swarm with a certain tag, say "my-server".
  2. Each repo has a docker-compose.yml file defining the stack needed to run it.
  3. You have a daemon that periodically queries Github API for repos with given tag name (and from a certain user, for security reason). For every found repo it would do docker stack deploy RepoName --compose-file "...". Stacks would be deployed according to given service's deploy policy, utilizing its healthchecks etc.

So if you need to add a new repo to the swarm, you just mark it with a tag and wait a few min. If you need to update a service, you just edit its docker-compose.yml file and wait a few min. Secrets would be managed via docker secrets.

Advantages over plain swarm cluster?

dimaip / Recursion.fusion
Last active Jan 18, 2018
Recursive rendering of menus with Fusion
View Recursion.fusion
prototype(Flowpack.FusionBP:RecursiveMenu) < prototype(Neos.Fusion:Array) {
@process.tmpl = ${'<li>' + value + '</li>'}
title = ${ || '<em>' + + '</em>'}
nextLevel = Neos.Fusion:Collection {
@process.tmpl = ${'<ul>' + value + '</ul>'}
@process.tmpl.@if.notEmpty = ${q(node).children().count() > 0}
collection = ${q(node).children().get()}
itemName = 'node'
itemRenderer = Flowpack.FusionBP:RecursiveMenu

Dear community,

Neos CMS team is currently in the middle of UI rewrite on top of React. This project will have immediate benefits like improved performance, correctly working media-queries and higher robustness of the UI due to the use of iframe for site content. But main aim for it is to support ambitious plans of our project (such as structured editing of content) that would require a modern foundation.

Currently we have reached an alpha phase, where almost all basic functionality is in place, but everything needs A LOT of polish. And that's where I want to ask for your support.

I have been a part of this project since its early prototype days, and was able to spend quite some time working on it, including joining 3 code sprints fully focusing on it. But right now I can not afford to work on my spare time as much as the project currently requires it. So **I'm looking for sponsors that would allow me to relocate some of my freelancing time

dimaip / ImageUri.ts2
Created Sep 28, 2016
Handy way to show dummy image if no image is selected
View ImageUri.ts2
prototype(Sfi.Site:ImageUri) < prototype(TYPO3.TypoScript:Case) {
image {
condition = ${asset}
renderer = ImageUri {
asset = ${asset}
width = ${width}
height = ${height}
maximumWidth = ${maximumWidth}
maximumHeight = ${maximumHeight}
allowCropping = ${allowCropping}
dimaip / NodeType.html
Created Apr 8, 2016
Imagine you have a nodetype named `Your:NodeType` and a node of that nodetype, with property1 set to `123456`.
View NodeType.html
Quess what's in here: {property1}
View gist:d466dfb93c8914a83abd1136ee745bf6
# Data in content repository would look like this:
nodeType: "My:Page",
properties: {
title: "hello world title"
children: [
nodeType: "My:Text"
properties: {

Dear Neos community!

I'm just back from the Dresden sprint, in which I was able to participate thanks to your kind help.

We managed to do quite a lot of work on the new React UI for Neos CMS, and I pesonally was able to do some focused work on replicating the dialog for creating new nodes. See my writeup on the current progress of the UI rewrite.

We don't want to loose momentum going, so we are organizing another sprint before the Inspiring Conference, 18th to 23rd of April. My employer,, is ready to send me there as part of my working time. I will try to find a place to stay via, to save some team budget (though if you live in Rosenheim and want host me, I'll be more than happy), but yet again, I can't pay from personal budget for the plain tickets.

Currently I found cheap tickets from Moscow to Munich and back for only 160EUR + 30EUR for the train to Rosenheim. If your company i

dimaip /
Created Oct 2, 2015
Audio transcription service

I have a project idea, that is very well needed in our church, but I wonder if it would be interesting for wider circles. We often need to transcribe (i.e. turn audio into text) of sermons, interviews, conferences etc for our websites our newspapers. Usually volunteers help out with it. Current workflow is:

  1. Convert some weird audio format into mp3
  2. Split mp3 into, let's say, 10 minute pieces
  3. Distribute those pieces among volunteers
  4. Volunteers have to download some audio player that supports keyboard shortcuts, slowing down speed and setting volume to more than 100%
  5. Track progress and then collect transcribed texts from volunteers
  6. Stich those texts into one file and proofread it, edit it etc

You get the point... Perfect place to introduce some automation: I want all of this to be automated in an online service.

dimaip / shri.js
Last active Aug 29, 2015 — forked from verkholantsev/shri.js
Задание на ШРИ 2015
View shri.js
* Реализация API, не изменяйте ее
* @param {string} url
* @param {function} callback
function getData(url, callback) {
'/countries': [
{name: 'Cameroon', continent: 'Africa'},
{name :'Fiji Islands', continent: 'Oceania'},
dimaip / gist:d89ff6c5f3b656207f9d
Last active Nov 21, 2016
actionsOnNodeCreation and wizard examples
View gist:d89ff6c5f3b656207f9d
# Set document node title on creation
type: 'setNodeProperties'
'title': '${data.title}'
enabled: '${true}' # Possibility to bypass action based on some conditions
You can’t perform that action at this time.