Solutions / Engineering
Focus on the project.
Platform included.
You want to spend your time solving interesting problems, not rebuilding the same development setup for the tenth project.
01.
Get into the code faster
Every new project shouldn’t mean another round of setup before you can actually start building.
Courier gives you a local development environment workflow connected to your Blutui project, so you can get to the part you actually care about.
~/dev/takahe ❯ courier push
Bundling views/ and public/…
↑views/layouts/default.html2.4 KB
↑views/canopy/hero.canvas1.1 KB
↑public/styles/global.css18.7 KB
↑public/scripts/app.js9.3 KB
Uploading cassette ██████████ 18% 76% 100%
✓ Deployed to production in 4.2s
https://takahe.blutui.site
~/dev/takahe ❯
~/dev/takahe ❯ courier dev
Watching views/ and src/…
https://localhost:8080
02.
Don’t compromise the frontend
You know what you want to build.
Canvas gives you control over the HTML, styling and behaviour of the website instead of forcing your work into someone else’s predefined system.
{% extends 'templates/default.html' %}
{% set plans = cms.collection('plans')
| sort_by('order') | slice(0, 3) %}
{% block body %}
{{ include('components/hero.html') }}
{% for plan in plans %}
<article class="plan">
<h3>{{ plan.name }}</h3>
<p>{{ plan.beds }} bed · {{ plan.baths }} bath</p>
</article>
{% endfor %}
{% endblock %}
03.
Break things somewhere safe
Sometimes the best way to solve a problem is to try something completely different.
Cassettes give you isolated environments where you can experiment, test and develop without worrying about breaking that’s live.
Cassettes
(3)(4)
christmas
Created 11 Sep 2026
newstore
Created 28 Aug 2026
halloween
Created 21 Jul 2026
default
Created 15 Jul 2026
04.
Keep the content model out of your way.
You shouldn’t have to build a CMS every time you build a website.
Blutui gives you structured content through Collections, while you stay focused on building the experience around it.
General
Blogs
Collections
Navigation
navigation
39 entries40 entries
Columns| Menu | Kind | Section | Label | Description | URL | Order | |
|---|---|---|---|---|---|---|---|
| Company | item | Company | Careers | Join the studio | /careers | 4 | |
| Shop | link | -- | Shop | -- | /shop | 1 | |
| Pricing | link | -- | Pricing | -- | /pricing | 1 | |
| Company | item | Discover | Services | What we do for our clients | /services | 6 | |
| Company | item | Discover | Case Studies | Work we’re proud of | /case-studies | 5 | |
| Company | item | Discover | Articles | News, updates and insights | /articles | 4 | |
| Company | item | Company | Contact | Talk to the team | /contact | 3 | |
| Company | item | Company | Team | Meet the people behind it | /team | 2 | |
| Company | item | Company | Our Story | Who we are and why we build | /our-story | 1 | |
| Resources | featured | -- | Resources | Guides, templates and downloads | /resources | 1 |
05.
Give your AI tools the context they need.
Context brings Blutui-specific skills and MCP into your workflow, giving you a way to work with AI that actually understands the project you’re working on.
{% extends 'templates/default.html' %}
{% set team = cms.collection('team') %}
{% block body %}
<section class="mx-auto max-w-5xl px-6 py-20">
<h1>The team</h1>
<div class="mt-12 grid gap-10 @3xl:grid-cols-3">
{% for person in team %}
<article>
<p>{{ person.name }}</p>
<p>{{ person.role }}</p>
</article>
{% endfor %}
</div>
</section>
{% endblock %}
Add a team page backed by a collection.
create_collection
handle: "team"
fields: name, role, photo, email
The page renders the collection with a Canvas loop, the way the Blutui rules ask for it.