A new Siteleaf is here, upgrade to v2 →

Siteleaf

Menu

Join our team

We are seeking a talented Backend Developer, our first ever full-time Siteleaf hire. This is a super rare opportunity to join our small, tight-knit team and contribute to the future of Siteleaf in a meaningful and rewarding way.

Siteleaf powers thousands of websites from independent blogs to Fortune 500 companies, with a passionate following among developers (we are a product for developers, made by developers). We are currently working on an all-new Siteleaf v2, and have big ideas for the future. Right now is the perfect time to join our team, and help reimagine the future of static websites.

Read more →

Siteleaf v2 is coming

Siteleaf v2 is coming

We’re currently hard at work on version 2 of Siteleaf, which brings a bunch of new features and improvements that we’re eager to show off. We’ve taken everything you love about v1 and made it more open, more customizable, and easier to develop.

For a tour of the new features, check out v2.siteleaf.com.

While we wrap things up, we’re also inviting a small batch of good people to try things out and provide feedback. If you are interesting, sign up to join the beta.

Publishing via the API

For the last week publishing in the Siteleaf interface has been powered by our API. This has been a requested feature by some of our users and ourselves. Its behavior is bit different than some of our other API endpoints, so let’s go over it.

Just want to use the Siteleaf gem? Skip to the bottom!

To initiate a publish, make an authenticated POST request to the /sites/:id/publish endpoint.

$ curl -u "$API_KEY:$API_SECRET" -X POST \
  http://api.siteleaf.com/v1/sites/$SITE_ID/publish

{"job_id":"e79af12c79ccd8866902d3dd"} 

This triggers a publish and immediately returns a job ID (or returns an already running job ID if one exists). You can stop here if you’d like and Siteleaf will happily chug away in the background.

But the fun doesn’t stop there. You can optionally check in on publish progress using your job_id from above by making an authenticated GET request to the new /jobs/:id endpoint.

$ curl -u "$API_KEY:$API_SECRET" \
  http://api.siteleaf.com/api/v1/jobs/e79af12c79ccd8866902d3dd

event:publish
data:{"status":"working","message":"Checking... /home","updated_at":"1435159120"}

[etc…]

event:publish
data:{"status":"complete","message":"Published","updated_at":"1435159121"}

This endpoint, unlike our others, consistently returns Server Sent Events (SSE) instead of JSON documents (including errors). The data field is JSON encoded however. SSE is supported in all modern browsers and there are client libraries in a number of programming languages.

Additionally, job ID’s are kept for at least 30 minutes after completion so you can check in on a publish immediately or wait a bit.

Can’t wait to see what uses you come up with!

Publishing from the gem

First install the latest gem (0.9.23 as of writing)

$ gem install siteleaf

And then…

$ siteleaf publish
Fetching inventory...
Compiling...
[etc…]
Published
=> Publish completed.

Or if you don’t care about progress, you can use either of the following:

$ siteleaf publish -q
$ siteleaf publish --quiet

=> Publish queued.

🎉🎉

Advanced Liquid: Group By

Advanced Liquid: Group By

Following sort and where, this Advanced Liquid post introduces another handy new filter to Siteleaf: group_by.

As the name suggests, this filter allows you to group your content by a certain property.

For example, here’s how we could group all posts by year published:

{% assign posts_by_year = site.posts | group_by:"year" %}

You can group by any property like date, title, slug, even metadata and taxonomy. Here are a few real-world examples you may want to apply to your theme.

Read more →

Advanced Liquid: Where

Advanced Liquid: Where

Now that you are sorting like a pro, we’ll move on to another new and exciting Liquid filter: where.

Where allows us to find content based on a parameter. If you are coming from Jekyll, you’ll be happy to know it follows the same syntax.

For example, here’s how we could find all pages titled “Foo”:

{% assign foo_pages = site.pages | where:"title","Foo" %}

As with sort, you can use any property like date, title, slug, even metadata and taxonomy. Below are few real-world examples you might find useful.

Read more →

Advanced Liquid: Sort

Advanced Liquid: Sort

Liquid is the flexible templating language that powers themes on Siteleaf. While simple at first glance, there’s a lot of power under the hood for those wanting a greater level of control. In this new blog series, we’ll dive deeper and take a look at some advanced Liquid code and examples.

First up in this post, we’ll take a look at the sort filter.

With any site, Siteleaf makes some general assumptions about your content. For example, posts are sorted by date (newest post shows first) and pages are sorted manually. In cases where this doesn’t fit your design, you can utilize the sort filter to order content any way you wish.

For example, here’s how we might sort pages by date:

{% assign sorted = pages | sort:"date" %}

This will sort in ascending order, but we could also choose descending order by adding reverse:

{% assign sorted = pages | sort:"date" | reverse %}

You can sort on any property like date, title, slug, even metadata and taxonomy. Below are few real-world examples you might find useful.

Read more →

Using AWS S3 and Route 53

After building Siteleaf we took it upon ourselves to each rebuild our site using the service. I had previously used S3 with Jeykll and wanted to continue using it, but getting set up can be a bit of a mystery.

I’m assuming that you’re using Route 53 for DNS, and want to serve content from the root domain while having www redirect to it.

Amazon S3

Head to your S3 Console where you’ll make one bucket named after your root domain, and another with the www subdomain (e.g. example.com and www.example.com). Take note of the region you choose.

s3-1

Read more →

Improvements to page and post management

Improvements to page and post management

If you’re a heavy Siteleaf user, you might notice a few tweaks here and there that we recently introduced.

Improved page menu

new-menu

The first thing you might notice is a redesigned page menu in the sidebar. After building large sites with Siteleaf, we realized the original design didn’t accommodate subpages and posts as well as it could. Now, it’s a lot easier to dive into and sort multiple levels of subpages while still keeping things looking clean.

Quickly search and browse posts

Another new thing we’ve introduced is the posts sidebar. Now you can dive straight into a page’s posts by clicking the posts icon posts-icon next to the page link in the sidebar, or by clicking the “other posts” link on the post itself. From the posts sidebar you can now search and filter the posts list by title.

Footnotes & Highlights

In addition to the Markdown basics, Siteleaf supports some advanced syntax to make formatting your content easier. Here is a sentence showing off a highlight and also a footnote1.

Footnotes are great for citing and referencing sources, or for expanding on ideas. They are created like this:

A cool sentence[^1].

[^1]: A cool footnote.

  1. This is a footnote in Siteleaf! 

Read more →

Stickers now available

Stickers now available

Siteleaf stickers are now available from Sticker Mule!

Make your laptop happy and pick one up today. Available at cost with free shipping in quantities of 1-1000 (in case you have a lot of friends).

We also have a number of stickers available for FREE, let us know if you want one!

Read more →

Now publishing to SFTP

Siteleaf now supports publishing to SFTP!

Also known as Secure or SSH File Transfer Protocol, SFTP joins our extensive publishing options including FTP, Amazon S3, Rackspace Cloud Files, GitHub Pages and our free Siteleaf Hosting.

SFTP settings

Read more →

Quick tip: Assets in meta fields

Siteleaf makes it easy to assign assets in your metadata fields, just drag and drop (as shown above).

Now in your theme, you can easily link to your asset:

<a href="{{ meta['project_link'] }}">
  {{ meta['project_link_title'] }}
</a>

This is a great way to reference special assets like featured images or PDF downloads.

To learn more about metadata see our tutorial Metadata in Siteleaf.

Siteleaf turns one

It’s time to celebrate, today is Siteleaf’s first birthday!

Here’s what we’ve been up to lately:

If you’re just joining us, we now have free Developer accounts available. You can sign up for free, try out our tutorials, and get a feel for the service before going live.

Follow @siteleaf on Twitter for more updates.

Now publishing to GitHub Pages

Now publishing to GitHub Pages

Exciting news! Starting today you can now publish your sites from Siteleaf to GitHub Pages.

GitHub Pages is a solid choice for static web hosting, especially if you already use GitHub to manage your theme code—and it’s clear a lot of our users already do.

Why GitHub Pages?

Every publish from Siteleaf shows as a commit on GitHub.com

Read more →

Introducing user roles

Introducing user roles

Today we’re happy to introduce a highly requested feature: user roles. Since day one you’ve been able to invite collaborators to your site. With the introduction of user roles, you can now set the level of control each collaborator has over your site content. You can now set a collaborator’s role to one of the following:

Admin

The admin role gives full privileges to the collaborator, allowing them to manage and publish all content. This role is great for people who are helping build the site, like a developer or designer, since it allows them to upload theme files, change the site’s settings, and invite other collaborators.

Publisher

The publisher role is similar to the admin role, however publishers aren’t able to access theme files or the site’s settings. This is a great role to grant to a client. It allows a person to manage and publish pages, posts and assets, while protecting them from accidentally breaking the site’s theme.

Writer

The writer role is the most limited role available. A writer can only manage their own content, and any content they create will default to “Draft” status. This means that a Publisher or Admin must approve a writer’s content first before publishing it. This role is great for sites with many collaborators who only need access in order to add content (like a blog post).

Built on Siteleaf: Made by Eno

Built on Siteleaf: Made by Eno

We always love hearing the experiences of others who have built their site with Siteleaf. Jessica Harllee, Siteleaf Hackday MVP and all around cool person, was nice enough to write about how she used Siteleaf to rebuild Erin Nolan’s personal site. Some great takeaways from her post include how she used Siteleaf metadata fields on posts and assets to achieve a unique color palette for each page and to control how images were displayed throughout the layout.

On the blog, some posts are more text-heavy whereas sometimes Erin wants a glorious image header. To make it flexible, we look for an asset with the [meta field] type of hero and display that image above the post excerpt. If there’s no hero image, then the post text displays as normal.

Read Jessica’s post over on her site.

New: Asset Metadata and Quick Post Edit

New: Asset Metadata and Quick Post Edit

We’re constantly working on improving the Siteleaf experience and making it as flexible as possible. Today we’re happy to introduce two new features:

Asset metadata

Just like metadata on your Siteleaf posts, pages, and sites, asset metadata is a flexible way to add additional information to the assets uploaded to your site. This is perfect for things like captions, alt text, adding location info, and more. In your Siteleaf theme, you can access asset metadata through the asset’s meta variable. For example, if you had an asset meta field with a name of “caption”, you would access its value like so:

asset.meta.caption

For a more advanced example of how you could use asset metadata, check out our latest Siteleaf lab where we use asset metadata and a JS library to swap out images based on the window width.

Quick post edit

quick-post-edit

Another new feature we’ve added to the Siteleaf management area is the ability to quickly edit a post without leaving the list of posts. This is perfect if you just need to make a small change to a post’s title, toggle its visibility, or to reorder your posts by their publish date.

Moving to Siteleaf

Forget the CMS headaches of yesteryear, moving your website to Siteleaf is surprisingly easy. Since Siteleaf publishes to static files, it’s also a great way to speed up your site, reduce server costs, and have a permanent archive of your site. Bring your content with you using a simple JSON import script powered by the Siteleaf API (also available for Jekyll).

Here are four people who’ve recently made the move, and how they got here:

Read more →

Sites we love

Sites we love

At Siteleaf, nothing makes us happier than seeing our customers build amazing websites. We proudly showcase these in our ever-growing Gallery for inspiration.

Some of our recent favorites include:

STET - a writers’ journal on culture and technology featuring multiple authors and beautifully art directed posts, from the folks at Editorially. While you’re there, make sure to read Why markup (and Markdown) matter.

Nearly Impossible - a conference for people who “make and sell physical products”, hosted in New York City this November. This very possible website pairs nicely with Tito for ticket sales.

Jessica Harllee - this Brooklyn-based designer showcases her work at Kickstarter and beyond with a portfolio and blog powered by Siteleaf. Make sure to check out the excellent blog post about her redesign with Siteleaf.

Read more →

Using Markdown in metadata

In previous posts, we talked about using Markdown for text formatting and Metadata for extending your content in Siteleaf.

Markdown makes it easy to add links and *emphasis* to your content without having to write HTML. While your body content uses Markdown by default, you can also apply this easy-to-use formatting to your metadata.

Read more →

Tutorial: Layouts in Siteleaf

Tutorial: Layouts in Siteleaf

In my last article about Siteleaf, I wrote about what goes into porting a theme to Siteleaf from another CMS. This time around, I’ll show you how to write cleaner, less redundant templates through the use of layouts.

Read more →

Developer accounts

Today, we’re announcing developer accounts. At launch, we required a subscription in order to use Siteleaf, unless you were invited to a site. Now, you can sign up for free, test the waters, and get a feel for the service before subscribing. If you want to publish your site, simply upgrade to one of our plans and publish away.

Read more →

Brooklyn Beta

Brooklyn Beta

Hello Brooklyn! This week the Siteleaf team will be at our favorite web conference, Brooklyn Beta.

We’ve been huge fans and supporters of Brooklyn Beta over the years, and a proud sponsor of the very first conference (even before Siteleaf launched!).

This year our team be hosting two Siteleaf hackdays, right downstairs from the conference at The Invisible Dog:

If you’re in town for the conference, RSVP and spend an afternoon with us! Or drop in for a quick demo and Q&A, we’d love to see you.

Read more →

Tutorial: Porting a theme to Siteleaf

Tutorial: Porting a theme to Siteleaf

Today, I ported another theme to SiteleafAllison House’s Martin theme. I started porting themes to Siteleaf earlier this month as a self-imposed challenge. A friend of mine asked if a particular theme was possible to implement using Siteleaf and rather than answer with a simple ‘yes’, I responded with the ported theme. This was a great way of demonstrating Siteleaf’s adaptability, but also a useful exercise for myself to see where Siteleaf excels and where it falls short. In this post, I’ll walk through porting the Martin theme and show you just how easy it can be.

Read more →

Siteleaf Hackday in Brooklyn

Introducing the very first Siteleaf Hackday, August 24 in Brooklyn, NY. If you are new to Siteleaf, have questions, or just need some motivation to finally make that new blog, here’s your chance to sit down with the Siteleaf team and talk one-on-one.

This event will be hosted at our studio in DUMBO. Drop in for a visit or hang out for the day and we’ll help you get your first site up and running before you leave. Bring your laptop, sample code, and questions.

Read more →

Tutorial: Markdown in Siteleaf

Tutorial: Markdown in Siteleaf

In the last Siteleaf post, we explored taxonomy and the many ways you could use it to extend your website. This time, we’ll break from templating and take a closer look at content—specifically, Markdown’s role in Siteleaf.

Read more →

Tutorial: Taxonomy in Siteleaf

Tutorial: Taxonomy in Siteleaf

Last week, I wrote about metadata in Siteleaf and the variety of ways you could use it to customize your website. In this post, I’ll do the same, but with metadata’s much cooler, older brother—taxonomy.

Read more →

Video: Developing sites and themes

In this video, we show you how to create Siteleaf themes using Liquid and develop sites locally using the Siteleaf Ruby Gem and Pow/Anvil.

Watch this tutorial on Vimeo.

Also see: Getting started with Siteleaf

Tutorial: Metadata in Siteleaf

Tutorial: Metadata in Siteleaf

In Siteleaf, metadata is pure key/value data attached to a site, page, or post. It provides a way to interact with templates beyond the basic usage of injecting title or body copy. Metadata can be used to set inline CSS values or specify the number of posts on a given page—the uses are endless. It’s also very flexible, down to a per-entity level. A post could have a completely unique set of metadata compared to that of its siblings. Let’s look at a few examples.

Read more →

Video: Getting started

In this video, we show you around the Siteleaf interface and create a simple website.

Watch Getting started with Siteleaf on Vimeo.

Tutorial: Hello World, I’m Siteleaf

Tutorial: Hello World, I’m Siteleaf

Last week, I ran through a number of Siteleaf’s most compelling features and provided a general overview of the service. This week, I’ll hold your hand through creating a basic website using Siteleaf.

Read more →

Video: Introducing Siteleaf

Watch Introducing Siteleaf on Vimeo.

Siteleaf overview

Siteleaf overview

Recently, we at Oak launched a new website publishing platform, called Siteleaf. In short, Siteleaf lets you build your website locally, edit its content in the cloud, and publish to static. In between, it’s so much more. Let me tell you about it.

Develop locally

As the one who makes the websites, you undoubtedly have a dev environment you prefer. All your code is version-controlled, your snippets are award-worthy, and you are one with your text editor. With Siteleaf, there’s no online WYSIWYG editor forced upon you, so you can build your website in the comfort of your own IDE. Use the Siteleaf gem to preview your templates locally using the data from the live server. When you’re ready to go live, simply push the files with the gem or upload them using the website. You can even use Pow or Anvil to preview your sites with a proper hostname.

anvil

Read more →

Introducing Siteleaf

Introducing Siteleaf

Approach — Managing content on sites can be a precarious task. We wanted to build a lean tool that would integrate easily into your workflow, yet provide everything necessary to maintain your content.

Goals — Siteleaf aims to strike a balance between control and simplicity. We believe content management systems should be simple but not overly simplified. That you own your content, your sites should be able to outlive their CMS, and you should be able to host sites anywhere you want. With these principles in mind we developed Siteleaf.

Features — Siteleaf is a lightweight platform for publishing websites. Write with markdown, collaborate with colleagues, develop with templates, build with our API.

If you can write HTML, you can create with Siteleaf.

Read more →