<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: cms</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/cms.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2020-01-03T01:13:01+00:00</updated><author><name>Simon Willison</name></author><entry><title>What do you call the parts of a story? Or: why can’t journalists spell “lead”?</title><link href="https://simonwillison.net/2020/Jan/3/what-do-you-call-the-parts-of-a-story/#atom-tag" rel="alternate"/><published>2020-01-03T01:13:01+00:00</published><updated>2020-01-03T01:13:01+00:00</updated><id>https://simonwillison.net/2020/Jan/3/what-do-you-call-the-parts-of-a-story/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.carlmjohnson.net/post/2020/article-bits/"&gt;What do you call the parts of a story? Or: why can’t journalists spell “lead”?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Carl M. Johnson’s analysis of what journalists call different elements of a story, useful for data modeling a CMS for a news organization.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/knowtheory/status/1212895885509713932"&gt;Ted Han&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/journalism"&gt;journalism&lt;/a&gt;&lt;/p&gt;



</summary><category term="cms"/><category term="journalism"/></entry><entry><title>react-jsonschema-form</title><link href="https://simonwillison.net/2018/Apr/23/react-jsonschema-form/#atom-tag" rel="alternate"/><published>2018-04-23T21:38:10+00:00</published><updated>2018-04-23T21:38:10+00:00</updated><id>https://simonwillison.net/2018/Apr/23/react-jsonschema-form/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/mozilla-services/react-jsonschema-form"&gt;react-jsonschema-form&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Exciting library from the Mozilla Services team: given a JSON Schema definition, react-jsonschema-form can produce a cleanly designed React-powered form for adding and editing data that matches that schema. Includes support for adding multiple items in a nested array, re-ordering them, custom form widgets and more.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/forms"&gt;forms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonschema"&gt;jsonschema&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mozilla"&gt;mozilla&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/react"&gt;react&lt;/a&gt;&lt;/p&gt;



</summary><category term="cms"/><category term="forms"/><category term="json"/><category term="jsonschema"/><category term="mozilla"/><category term="react"/></entry><entry><title>Quoting The Zen of Wagtail</title><link href="https://simonwillison.net/2018/Mar/1/zen-wagtail/#atom-tag" rel="alternate"/><published>2018-03-01T16:10:11+00:00</published><updated>2018-03-01T16:10:11+00:00</updated><id>https://simonwillison.net/2018/Mar/1/zen-wagtail/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://docs.wagtail.io/en/v2.0/getting_started/the_zen_of_wagtail.html"&gt;&lt;p&gt;The key to using Wagtail effectively is to recognise that there are multiple roles involved in creating a website: the content author, site administrator, developer and designer. These may well be different people, but they don’t have to be - if you’re using Wagtail to build your personal blog, you’ll probably find yourself hopping between those different roles. Either way, it’s important to be aware of which of those hats you’re wearing at any moment, and to use the right tools for that job. A content author or site administrator will do the bulk of their work through the Wagtail admin interface; a developer or designer will spend most of their time writing Python, HTML or CSS code. This is a good thing: Wagtail isn’t designed to replace the job of programming. Maybe one day someone will come up with a drag-and-drop UI for building websites that’s as powerful as writing code, but Wagtail is not that tool, and does not try to be.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://docs.wagtail.io/en/v2.0/getting_started/the_zen_of_wagtail.html"&gt;The Zen of Wagtail&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wagtail"&gt;wagtail&lt;/a&gt;&lt;/p&gt;



</summary><category term="cms"/><category term="django"/><category term="wagtail"/></entry><entry><title>Wagtail 2.0</title><link href="https://simonwillison.net/2018/Mar/1/wagtail/#atom-tag" rel="alternate"/><published>2018-03-01T16:06:12+00:00</published><updated>2018-03-01T16:06:12+00:00</updated><id>https://simonwillison.net/2018/Mar/1/wagtail/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://wagtail.io/blog/wagtail-2/"&gt;Wagtail 2.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The leading Django content management system just released it’s 2.0 version—now Django 2.0 and Python 3 only, and with a new rich text editor based on Draft.js. I really like Wagtail—it’s full-feature,d mature, well-documented and philosophically aligned with how I think a CMS should work. I also like this line about the new Python 3 requirement: “Call us reckless neophiles, but we think that, nine years in, Python 3 is looking pretty solid.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python3"&gt;python3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wagtail"&gt;wagtail&lt;/a&gt;&lt;/p&gt;



</summary><category term="cms"/><category term="django"/><category term="python3"/><category term="wagtail"/></entry><entry><title>A Complete CMS with No Server and 18 Lines of Code | Netlify</title><link href="https://simonwillison.net/2017/Nov/26/netlify/#atom-tag" rel="alternate"/><published>2017-11-26T17:53:49+00:00</published><updated>2017-11-26T17:53:49+00:00</updated><id>https://simonwillison.net/2017/Nov/26/netlify/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.netlify.com/blog/2017/08/17/a-complete-cms-with-no-server-and-18-lines-of-code/"&gt;A Complete CMS with No Server and 18 Lines of Code | Netlify&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Slightly hyperbolic title, but there’s something really interesting going on here. Netlify is a CDN/hosting provider optimized for static site builders—it can hook up to a GitHub repository and build and deploy your site on every commit. Netlify CMS is their open-source CMS tool which works in a fascinating way: it’s a single page React app which stores structured content (as Markdown files with embedded key/value pairs) directly to your GitHub repository. Fire up Chrome DevTools and you can watch it using the GitHub API to construct new commits every time you hit “save”.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/react"&gt;react&lt;/a&gt;&lt;/p&gt;



</summary><category term="cms"/><category term="github"/><category term="react"/></entry><entry><title>Should I store markdown instead of HTML into database fields?</title><link href="https://simonwillison.net/2013/Sep/8/should-i-store-markdown/#atom-tag" rel="alternate"/><published>2013-09-08T15:57:00+00:00</published><updated>2013-09-08T15:57:00+00:00</updated><id>https://simonwillison.net/2013/Sep/8/should-i-store-markdown/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Should-I-store-markdown-instead-of-HTML-into-database-fields/answer/Simon-Willison"&gt;Should I store markdown instead of HTML into database fields?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You should store the exact format that was entered by the user.&lt;/p&gt;

&lt;p&gt;- This lets you offer an "edit" feature without round-tripping between two formats.&lt;br /&gt;- This makes debugging much easier&lt;br /&gt;- Related: if you need to investigate a security bug, having the original input is essential.&lt;/p&gt;

&lt;p&gt;If you're worried about performance, you can cache the transformed HTML somewhere - or even denormalize it to an extra table column. Just make sure you always have the original input available.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html"&gt;html&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mysql"&gt;mysql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/markdown"&gt;markdown&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="cms"/><category term="databases"/><category term="html"/><category term="mysql"/><category term="quora"/><category term="markdown"/></entry><entry><title>Using Git as a versioned data store in Python</title><link href="https://simonwillison.net/2008/May/15/using/#atom-tag" rel="alternate"/><published>2008-05-15T15:25:21+00:00</published><updated>2008-05-15T15:25:21+00:00</updated><id>https://simonwillison.net/2008/May/15/using/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.newartisans.com/blog_files/git.versioned.data.store.php"&gt;Using Git as a versioned data store in Python&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
gitshelve supports the same interface as Python’s built-in shelve module but stores things to a versioned Git repository instead of just a pickled dictionary. I’ve been casually wondering what a Git-powered CMS would look like.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/git"&gt;git&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gitshelve"&gt;gitshelve&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="cms"/><category term="git"/><category term="gitshelve"/><category term="python"/></entry><entry><title>Website for the masses!</title><link href="https://simonwillison.net/2007/Aug/14/website-for-the-masses/#atom-tag" rel="alternate"/><published>2007-08-14T08:44:00+00:00</published><updated>2007-08-14T08:44:00+00:00</updated><id>https://simonwillison.net/2007/Aug/14/website-for-the-masses/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="http://ask.metafilter.com/69276/Website-for-the-masses#1035251"&gt;Website for the masses!&lt;/a&gt; on Ask MetaFilter&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You could try building it on top of a wiki engine, like MediaWiki - see &lt;a href="http://ask.metafilter.com/55146/How-can-my-nontechsavvy-Mum-maintain-her-own-website#829862"&gt;my comment on this older question&lt;/a&gt;.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ask-metafilter"&gt;ask-metafilter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/enterprise"&gt;enterprise&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/content"&gt;content&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/movable"&gt;movable&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/type"&gt;type&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/expression"&gt;expression&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/engine"&gt;engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/blog"&gt;blog&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/noblog"&gt;noblog&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/corporate"&gt;corporate&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/plone"&gt;plone&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ask-metafilter"/><category term="cms"/><category term="enterprise"/><category term="management"/><category term="content"/><category term="movable"/><category term="type"/><category term="expression"/><category term="engine"/><category term="blog"/><category term="noblog"/><category term="corporate"/><category term="plone"/></entry><entry><title>How can my non-tech-savvy Mum maintain her own website?</title><link href="https://simonwillison.net/2007/Jan/16/how-can-my-nontechsavvy-mum/#atom-tag" rel="alternate"/><published>2007-01-16T12:35:00+00:00</published><updated>2007-01-16T12:35:00+00:00</updated><id>https://simonwillison.net/2007/Jan/16/how-can-my-nontechsavvy-mum/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="http://ask.metafilter.com/55146/How-can-my-nontechsavvy-Mum-maintain-her-own-website#829862"&gt;How can my non-tech-savvy Mum maintain her own website?&lt;/a&gt; on Ask MetaFilter&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here's a trick I've used in the past. Find a simple wiki package (I used &lt;a href="http://tavi.sourceforge.net/"&gt;Tavi&lt;/a&gt;). Install it, &lt;strong&gt;twice&lt;/strong&gt;. Point both installations at the same backend database. Now password protect one of them with .htaccess - that's the one that gets used to edit her site. Make some simple template modifications to the other one to make it &lt;em&gt;not&lt;/em&gt; look like a wiki - remove the edit links (and delete the edit saving code for good measure), configure it to display WikiLinks with spaces in the middle, then add the site's navigation around the top. This wiki will be the public site.&lt;/p&gt;
&lt;p&gt;If you're even mildly comfortable with PHP the above modifications shouldn't take more than twenty minutes or so. In return for that time investment you get a top class content management system with (hopefully) simple non-HTML markup and full revision tracking - so your Mum doesn't have to worry about screwing anything up as she'll always be able to get back to the old version.&lt;/p&gt;
&lt;p&gt;This trick works especially well for sites that have more than one person collaborating on them thanks to the revision tracking, but it should be fine for just one person as well.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ask-metafilter"&gt;ask-metafilter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/website"&gt;website&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ask-metafilter"/><category term="cms"/><category term="website"/></entry><entry><title>Do Content Management Systems really work?</title><link href="https://simonwillison.net/2005/Feb/17/do-content-management-systems-really/#atom-tag" rel="alternate"/><published>2005-02-17T22:28:00+00:00</published><updated>2005-02-17T22:28:00+00:00</updated><id>https://simonwillison.net/2005/Feb/17/do-content-management-systems-really/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="http://ask.metafilter.com/15300/Do-Content-Management-Systems-really-work#262960"&gt;Do Content Management Systems really work?&lt;/a&gt; on Ask MetaFilter&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Have you considered trying a Wiki? In my experience, the more permissions / workflow / etc you have in a CMS the more likely it is that people won't use it. Wikis may be a little unconventional but the barrier to entry is fantastically low and they can work extremely well (I like MediaWiki or TaviWiki myself).&lt;/p&gt;
&lt;p&gt;I'm very skeptical of the idea that the people who update an intranet should be limited. If you have an employee who can't be trusted to edit information on an intranet, why did you hire them in the first place? In my opinion the presence of a revision log should be enough to deter any abuse - if someone screws up, just revert their change and have a word with them about it.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ask-metafilter"&gt;ask-metafilter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/business"&gt;business&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cms"&gt;cms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/information"&gt;information&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software"&gt;software&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/administration"&gt;administration&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training"&gt;training&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ask-metafilter"/><category term="business"/><category term="cms"/><category term="information"/><category term="software"/><category term="management"/><category term="administration"/><category term="training"/></entry></feed>