Templates / FreeMarker
FreeMarker templates
Designed page sets written in FreeMarker, with real list and if directives. Copy a folder into your app, hand it one model, and every page renders with your data.
What the FreeMarker edition looks like
<#list invoices as i>
<tr class="invoice-row">
<td class="col-number"><a class="invoice-link" href="${i.url}">${i.number}</a></td>
<td class="col-date">${i.date}</td>
<td class="col-for">${i.description}</td>
<td class="col-status"><span class="status<#if i.statusClass?has_content> ${i.statusClass}</#if>">${i.status}</span></td>
<td class="col-amount"><span class="money">${i.amount}</span></td>
<td class="col-pdf"><a class="text-link text-link-plain">Download<span class="visually-hidden"> <span>${i.number}</span> as PDF</span></a></td>
</tr>
</#list>
Relaybird's invoice rows, exactly as the FreeMarker edition ships them. The loop is a list directive, and the status class is added by an if directive only when there is one to add.
Every page in every template is written this way. None of it is static markup with a file extension changed.
Putting it in your app
Where it goes
Pages end in .ftlh, so FreeMarker
escapes them as HTML. They go in
src/main/resources/templates/, in a
folder named for the template. The stylesheet and images go in
static/.
What it reads
Maps, not records. Each template's model has an
asMap() method that hands over
exactly the shape the pages expect.
The rule that bites
Never pass null. FreeMarker stops on a missing value, so pass an empty string or list instead. Pass numbers as text too, or FreeMarker formats them for the reader's locale.
Every template in FreeMarker
14 so far, and new ones land every month. Each download has every format, so you can change engines later without purchasing again.
Tern
$29.99Marketing site
The marketing site for a software product, with the product doing the selling.
20 pages · 4 formats · v1.0.0
View templateMissive
$29.99Documentation
The documentation site for a library, with versions, search and a wide reference.
18 pages · 4 formats · v1.0.0
View templateSmall Batch
$29.99Podcast
The website of a weekly interview podcast, with a player on every episode.
20 pages · 4 formats · v1.0.0
View templateCarton
$29.99Documentation
The API reference developers keep open while they write code against yours.
20 pages · 4 formats · v1.0.0
View templateNight Desk
$29.99Personal website
A developer's own website, as paper on a desk under a lamp.
20 pages · 4 formats · v1.0.0
View templateFork Join
$29.99Personal website
The personal site of one developer, printed in two inks: projects, talks, writing and a way to hire them.
20 pages · 4 formats · v1.0.0
View templatePodium
$29.99Conference
The website of a three-day developer conference, from the schedule to the organizer's dashboard.
27 pages · 4 formats · v1.0.0
View templateRapids
$29.99Conference
The website of a developer conference: two tracks, speakers, tickets and a call for papers.
20 pages · 4 formats · v1.0.0
View templateSmall Machines
$29.99Blog and changelog
A playful blog dressed as an old desktop: every post a window, every topic a folder.
20 pages · 4 formats · v1.0.0
View templateVeriport
Free with an accountAdmin dashboard
A complete admin surface for the internal tools nobody volunteers to build.
36 pages · 4 formats · v1.1.3
View templateOxbow
Free with an accountOnline shop
A coffee shop from the shelf to the doorstep, for whatever you sell.
20 pages · 4 formats · v1.0.0
View templateFairday
Free with an accountMarketing site
The public website of a small software company, from the home page to the terms.
19 pages · 4 formats · v1.0.0
View templateRelaybird
$29.99Account and billing
The account and billing pages your customers see after they sign in.
23 pages · 4 formats · v1.0.0
View templateLonghand
Free with an accountBlog and changelog
A blog for one writer and the odd guest, built for long posts and code.
18 pages · 4 formats · v1.0.0
View templateThe same pages in every engine
Each template is written out in Thymeleaf, FreeMarker, JTE and plain HTML. Every edition is installed from its own download into a fresh app, and every page, link and button is tried there before it goes on sale. Java 17 or later.
Thymeleaf templates JTE templates Which format should I take?