SlideShare a Scribd company logo
First Alchemy CMS User Group
Welcome to the first Alchemy CMS UG
• Who are we?
• What is Alchemy?
• Alchemy 3.0
• Roadmap for 2014 / 2015
Who are we?
• magic labs* GmbH
• Berlin & Hamburg
• Core maintainers: @tvdeyen & @robinboening
• Also here with us: @dweinhardt, Niels, @moritzs
• Deep investment in the Open Source community
OMFGPNAOSCMSWAHX*
!
!
*Oh my f*#&ing god, please not another opensource CMS, we already have X!
• Motivation: flexible like Typo3, but easy to use and w/o PHP
• 2007 to 2010 as proprietary software:
• Maintenance / New Features
• Warranty
• Exploitation Rights
• Since 2010 OpenSource
History
„Open Source makes me a better developer — since my
work is open to the public I always strive to deliver high
quality code and double-check it“
@tvdeyen
• Rails 3 & 4 Engine
• Mountable in any Rails App
• SQL Database
• ImageMagick
• BSD New License
• 95% Test Coverage
Facts
• Alchemy speichert Inhalte einer Web-Seite in kleinsten
Einheiten:
• Atome
• Moleküle
• Zellen
Was macht Alchemy?
@page.body = <<BODY
<h1>Welcome</h1>
<p>
Lorem ipsum dolor
<img style="float: right" src="image.jpg">
</p>
BODY
@page.meta_description = "fancy rails cms"
@page.save
What Alchemy does not do:
• Alchemy saves Contents of a website in the smallest objects:
• Essences
• Elements
• Cells
What Alchemy actually does:
• 100% Trennung zwischen Inhalt und Styling
• Extrem flexible Anpassungsmöglichkeiten
• Wie in einem Chemiebaukasten liefert Alchemy nur die
grundlegenden Essenzen
• Welche Elemente daraus zusammengestellt werden ist
komplett dem Entwickler überlassen
What you need is what you get
Rendering Tree
• Application Layout
➡ app/views/layouts/application.html.erb
• Page
➡ app/views/alchemy/page_layouts/_standard.html.erb
• Cell
➡ app/views/alchemy/cells/_right_column.html.erb
• Element
➡ app/views/alchemy/elements/_article_view.html.erb
• Essence
➡ app/views/alchemy/essences/_essence_text_view.html.erb
RussianDoll
Caching
Code!
Example page_layouts.yml
#config/alchemy/page_layouts.yml
- name: standard
elements: [headline, article, gallery]
autogenerate: [headline]
!
- name: news
feed: true
elements: [news]
!
- name: contact
unique: true
cache: false
elements: [contactform]
autogenerate: [contactform]
Example elements.yml
#config/alchemy/elements.yml
- name: article
contents:
- name: headline
type: EssenceText
validate:
- presence
- format: headline_formatter
- name: text
type: EssenceRichtext
- name: image
type: EssencePicture
!
- name: news
contents:
- name: title
type: EssenceText
- name: date
type: EssenceDate
- name: body
type: EssenceRichtext
Example layout:
# app/views/layouts/pages.html.erb
<!DOCTYPE>
<html>
<head>
<%= stylesheet_link_tag "application" %>
</head>
<body>
<div id="page">
<div id="navigation">
<%= render_navigation %>
</div>
<div id="content">
<%= yield %>
</div>
</div>
</body>
</html>
Example page layout partial:
# app/views/alchemy/page_layouts/_standard.html.erb
<div id="main_content">
<%= render_elements(:except => 'right_info') %>
</div>
<div id="right_column">
<%= render_elements(:only => 'right_info') %>
</div>
Example elements view partial:
# app/views/alchemy/elements/_article_view.html.erb
<% cache element do %>
<%= element_view_for element, tag: 'article' do |el| %>
<h1><%= el.render 'headline' %></h1>
<p>
<%= el.render 'image',
image_size: '80x120',
crop: true %>
<%= el.render 'text' %>
</p>
<% end %>
<% end %>
Example elements editor partial:
# app/views/alchemy/elements/_article_editor.html.erb
<%= element_editor_for element do |el| %>
<%= el.edit :headline %>
<%= el.edit :text %>
<%= render_picture_editor element,
image_size: "80x120",
crop: true %>
<% end %>
There is a task for that!
• Create new project
➡ alchemy new fancypage -d postgresql
• Install into existing Rails app
➡ rake alchemy:install
➡ rake -T alchemy
• Upgrade Alchemy
➡ rake alchemy:upgrade
• Deploy script
➡ rails g alchemy:deploy_script
➡ bundle exec cap -T alchemy
➡ bundle exec cap alchemy:import:all
We want your help <3
We love contributors:
• Development
• Documentation
• Testing
• Bug Reporting
• Community Support
!
!
!
!
https://github.com/magiclabs/alchemy_cms
!
Follow me: @alchemy_cms
Help us!
Alchemy 3.0 - Key facts
• Rails 4 compatibility
• Removes action caching
• Extracts the User class
• Changes authorization library
• Extracts ferret based full text search
• Upgrades to TinyMCE 4.0
• New public JSON API
• Enhances the User Interface
3.0 - Last task before we release
• Changed interface:

Add button has new

position
• This leads to 

inconsistent / changed

user experience
Discussion
Roadmap 2014 / 2015
• Rewrite Alchemy to a content storage API
• Rewrite of admin UI
• Redesign
Feature whish list
• Versioning
• Editorial publishing workflow 
• Visual Element builder
• Element exchange platform
• SOLR/ElasticSearch Integration
• … What would you like?
Thanks!
@alchemy_cms
First Alchemy CMS User Group

More Related Content

Alchemy CMS: First User Group (Berlin)

  • 1. First Alchemy CMS User Group
  • 2. Welcome to the first Alchemy CMS UG • Who are we? • What is Alchemy? • Alchemy 3.0 • Roadmap for 2014 / 2015
  • 3. Who are we? • magic labs* GmbH • Berlin & Hamburg • Core maintainers: @tvdeyen & @robinboening • Also here with us: @dweinhardt, Niels, @moritzs • Deep investment in the Open Source community
  • 4. OMFGPNAOSCMSWAHX* ! ! *Oh my f*#&ing god, please not another opensource CMS, we already have X!
  • 5. • Motivation: flexible like Typo3, but easy to use and w/o PHP • 2007 to 2010 as proprietary software: • Maintenance / New Features • Warranty • Exploitation Rights • Since 2010 OpenSource History
  • 6. „Open Source makes me a better developer — since my work is open to the public I always strive to deliver high quality code and double-check it“ @tvdeyen
  • 7. • Rails 3 & 4 Engine • Mountable in any Rails App • SQL Database • ImageMagick • BSD New License • 95% Test Coverage Facts
  • 8. • Alchemy speichert Inhalte einer Web-Seite in kleinsten Einheiten: • Atome • Moleküle • Zellen Was macht Alchemy? @page.body = <<BODY <h1>Welcome</h1> <p> Lorem ipsum dolor <img style="float: right" src="image.jpg"> </p> BODY @page.meta_description = "fancy rails cms" @page.save What Alchemy does not do:
  • 9. • Alchemy saves Contents of a website in the smallest objects: • Essences • Elements • Cells What Alchemy actually does:
  • 10. • 100% Trennung zwischen Inhalt und Styling • Extrem flexible Anpassungsmöglichkeiten • Wie in einem Chemiebaukasten liefert Alchemy nur die grundlegenden Essenzen • Welche Elemente daraus zusammengestellt werden ist komplett dem Entwickler überlassen What you need is what you get
  • 11. Rendering Tree • Application Layout ➡ app/views/layouts/application.html.erb • Page ➡ app/views/alchemy/page_layouts/_standard.html.erb • Cell ➡ app/views/alchemy/cells/_right_column.html.erb • Element ➡ app/views/alchemy/elements/_article_view.html.erb • Essence ➡ app/views/alchemy/essences/_essence_text_view.html.erb RussianDoll Caching
  • 12. Code!
  • 13. Example page_layouts.yml #config/alchemy/page_layouts.yml - name: standard elements: [headline, article, gallery] autogenerate: [headline] ! - name: news feed: true elements: [news] ! - name: contact unique: true cache: false elements: [contactform] autogenerate: [contactform]
  • 14. Example elements.yml #config/alchemy/elements.yml - name: article contents: - name: headline type: EssenceText validate: - presence - format: headline_formatter - name: text type: EssenceRichtext - name: image type: EssencePicture ! - name: news contents: - name: title type: EssenceText - name: date type: EssenceDate - name: body type: EssenceRichtext
  • 15. Example layout: # app/views/layouts/pages.html.erb <!DOCTYPE> <html> <head> <%= stylesheet_link_tag "application" %> </head> <body> <div id="page"> <div id="navigation"> <%= render_navigation %> </div> <div id="content"> <%= yield %> </div> </div> </body> </html>
  • 16. Example page layout partial: # app/views/alchemy/page_layouts/_standard.html.erb <div id="main_content"> <%= render_elements(:except => 'right_info') %> </div> <div id="right_column"> <%= render_elements(:only => 'right_info') %> </div>
  • 17. Example elements view partial: # app/views/alchemy/elements/_article_view.html.erb <% cache element do %> <%= element_view_for element, tag: 'article' do |el| %> <h1><%= el.render 'headline' %></h1> <p> <%= el.render 'image', image_size: '80x120', crop: true %> <%= el.render 'text' %> </p> <% end %> <% end %>
  • 18. Example elements editor partial: # app/views/alchemy/elements/_article_editor.html.erb <%= element_editor_for element do |el| %> <%= el.edit :headline %> <%= el.edit :text %> <%= render_picture_editor element, image_size: "80x120", crop: true %> <% end %>
  • 19. There is a task for that! • Create new project ➡ alchemy new fancypage -d postgresql • Install into existing Rails app ➡ rake alchemy:install ➡ rake -T alchemy • Upgrade Alchemy ➡ rake alchemy:upgrade • Deploy script ➡ rails g alchemy:deploy_script ➡ bundle exec cap -T alchemy ➡ bundle exec cap alchemy:import:all
  • 20. We want your help <3 We love contributors: • Development • Documentation • Testing • Bug Reporting • Community Support
  • 22. Alchemy 3.0 - Key facts • Rails 4 compatibility • Removes action caching • Extracts the User class • Changes authorization library • Extracts ferret based full text search • Upgrades to TinyMCE 4.0 • New public JSON API • Enhances the User Interface
  • 23. 3.0 - Last task before we release • Changed interface:
 Add button has new
 position • This leads to 
 inconsistent / changed
 user experience
  • 25. Roadmap 2014 / 2015 • Rewrite Alchemy to a content storage API • Rewrite of admin UI • Redesign
  • 26. Feature whish list • Versioning • Editorial publishing workflow • Visual Element builder • Element exchange platform • SOLR/ElasticSearch Integration • … What would you like?
  • 28. First Alchemy CMS User Group