
Show HN: Urubu – A micro CMS for static websites - jandecaluwe
http://urubu.jandecaluwe.com/
======
jandecaluwe
Hello:

I created this project because I needed a generator for a static website - not
just a blog.

To accomplish this, the website structure matches the source structure
exactly. In a subdirectory, you use the index.md file to specify the content,
either explicitly by listing it, or implicitly by specifying the ordering key
and direction. A blog would be reverse order by date, but any other scheme is
possible.

In addition, this structure makes it possible to refer to other pages in the
project using a wiki-like syntax. Basically, Urubu resolves the Markdown
syntax for reference links over the project, instead of just within a page.
This is a unique feature afaik.

Furthermore, there is support for tags, search, and templating constructs
within pages. And it works well with Bootstrap.

It works great for a number of sites that I manage.

Interested to hear your feedback!

~~~
stackpush
This is very similar to Hugo [http://gohugo.io](http://gohugo.io), my current
website solution. The content organization is virtually identical. The
approach of viewing a website as more than a blog is the same. Hugo also
benefits from tons of themes, a large community and a ton of additional
features.

~~~
herbst
Or nanoc and yekyll if you look into the Ruby world. I think everyone chooses
a static site generator in their favorite language anyway.

------
jordanlev
How exactly does one specify / configure which content fields exist on a page?
The problem I run into with most static site generators and flat-file CMS's is
that even the ones claiming to "not be for blogging" still assume a very blog-
like "one main content area per page"... which just doesn't fit the use-case
of most sites I've built.

Didn't see anything in the docs about defining the content fields per
page/template type, so figured I'd ask.

~~~
ensignavenger
Check out lektor (getlektor.com). It allows you to define your content fields
in ini files-
[https://www.getlektor.com/docs/models/](https://www.getlektor.com/docs/models/)

I have been using it on a side project for the last week and I really like it!

------
m_mueller
I might have used this if I knew about it 2 months ago. Instead I built this:
[https://github.com/muellermichel/guetzli](https://github.com/muellermichel/guetzli)

How do you handle multilanguage content? Also, may I suggest implementing
autopulling on github webhooks (if you haven't already)? It's a great way to
keep a site in sync with what people push to a repository or even edit in the
github web interface.

~~~
jandecaluwe
No multilanguage support.

I do use autopulling for some websites, works great indeed.

------
fiatjaf
I like the idea that it is not for blogs, wiki links and focus on navigation.
That is great.

On the other hand, it seems to require a lot of configuration.

~~~
jandecaluwe
Compared to others, I believe configuration is minimal. Also, there is a
companion site to get started immediately, and update as you go:

[http://urubu-quickstart.jandecaluwe.com](http://urubu-
quickstart.jandecaluwe.com)

------
mitchtbaum
Pelican is another Python-based static site generator with a large
userbase[0]. It has these features plus a few more years worth of development,
in many cases adapting from an original author's narrow set of use cases to
fit more general needs (that seems like how these pieces of software tend to
evolve). It has a kind community, lots more good development plans, and many
useful plugins. I believe a lot of people pass it by, simply because it still
needs some help putting its best foot forward[1].

0:
[https://github.com/getpelican/pelican/](https://github.com/getpelican/pelican/)

1:
[https://github.com/getpelican/pelican/issues/1065#issuecomme...](https://github.com/getpelican/pelican/issues/1065#issuecomment-73397069)

~~~
jandecaluwe
A showstopper feature for me is that it should be straightforward to use the
tool to write its own manual. Surprisingly few static generators, including
Pelican, do that however.

But Urubu's manual is written using Urubu:
[http://urubu.jandecaluwe.com/manual/](http://urubu.jandecaluwe.com/manual/)

------
diego_moita
> Urubu is also the 10th album of Antonio Carlos Jobim, one of my favorite
> song composers.

As a Tom Jobim fan, this warmed my heart. Thank you.

But, I still prefer Stone Flower [0]

[0]
[https://en.wikipedia.org/wiki/Stone_Flower_%28album%29](https://en.wikipedia.org/wiki/Stone_Flower_%28album%29)

~~~
jandecaluwe
[http://music.jandecaluwe.com/bossanova/chega-de-
saudade.html](http://music.jandecaluwe.com/bossanova/chega-de-saudade.html)

~~~
diego_moita
Awesome guitar technique!

And you like Bach too? Man, you know something about good taste!

------
abhv
Main question: how is this better than Hugo (really simple one-binary
application), and how is this better than jekyll?

Just saying that it is not "just for blogs" doesn't really explain how it is
better for a use-case. Maybe pinpoint the issue?

~~~
jandecaluwe
My main use case are technical-oriented websites.

So I need to support content like a manual, a faq, news, feature requests,
essays, and yes, also a blog. I also want good navigation support, and an easy
way to refer to other project pages. Furthermore, I want programmatorial
flexibility, which because of my background means Python and Jinja2 templates.

I wrote this because I didn't find an existing solution that met those
requirements. I am not claiming it is "better" in a general sense than
anything else - I think it all depends on your requirements and background.

~~~
mappu
_> I need to support content like ... feature requests_

How do you accept feature requests with only a static backend?

~~~
jandecaluwe
The sites are typically in a git repo, so content updates are through commits
or pull requests.

For an example of feature requests that are ordered by status and number, see
[http://dev.myhdl.org/meps/](http://dev.myhdl.org/meps/)

------
Gladdyu
How does this compare to Jekyll?

~~~
jandecaluwe
It is heavily inspired by some Jekyll features, and I have tried to add
recognition for this in the docs. However, it is not blog-oriented and it is
in Python ;-).

The distinguishing feature is that the the website structure matches the
source structure exactly, which enables a number of other features such as
flexible ordering and wiki-links.

------
dmichulke
Urubu is used in Brazilian Portuguese as synonym for ugly

~~~
luso_brazilian
Yeah, and not only. Urubu is the brazilian name for the black vulture [1], a
scavenger bird commonly seen when there are dead animals.

Urubu as an insult can also mean two things: first, as they eat corpses people
presume they are smelly themselves hence people can be called one as an insult
for smelly; then, as they are black, it can also be used as a racially charged
insult.

But they are also a synonymous for doing something without effort as they fly
for hours using as little energy as they can, gliding in circles in the hot
air drifts.

They are also portrayed in fiction as a street smart hustler, preying on the
innocent protagonists, like Buzz Buzzard [2], named in Brazil "Zeca Urubu".

A majestic bird, if you ask me, and I doubt naming the CMS after it would
carry any negative connotation.

[1]
[https://en.m.wikipedia.org/wiki/Black_vulture](https://en.m.wikipedia.org/wiki/Black_vulture)

[2]
[https://en.m.wikipedia.org/wiki/Buzz_Buzzard](https://en.m.wikipedia.org/wiki/Buzz_Buzzard)

~~~
fiatjaf
Majestic? It's a black chicken that eats garbage in the streets.

------
TsomArp
Why Python 2.7?

~~~
jandecaluwe
Urubu is for Python 3 also, from a single codebase. The regression suite
currently tests for 2.7 and 3.4.

Update: I see where the question is coming from - the Quickstart site suggest
2.7 only. Thanks - will update.

------
type0
Great work, nice documentation!

