case study
building a personal blog with bb.bi
AI-generated pages, posts plugin, categories, tags — and full SDK access if you want to go deeper
why bb.bi for a blog?
most blogging platforms make you choose: either use their template and give up control, or build everything yourself from scratch. bb.bi gives you both.
the posts plugin handles the backend — writing, publishing, categories, tags, scheduling. the AI page builder generates the frontend — a custom blog page that matches your style. and if you want full control, the SDK lets you build anything.
what you need
plan
free — upgrade for subpages
plugin
posts (free)
AI credits
1–10 per generation (free plan includes 15)
the posts plugin is free on every plan. the AI page builder comes with credits on all plans (even free). you can have a blog running in under a minute without paying anything.
option A: let AI build your blog page
the fastest path. enable the posts plugin, open the AI assistant, and describe what you want. the AI reads your plugin data and generates a working blog page with post list, categories, tags, and pagination — all wired up.
1. enable the posts plugin
dashboard → your handle → plugins → enable posts. add a few posts with categories and tags so the AI has something to work with.
2. open the AI assistant
go to any page editor, click AI assistant, and tell it what you want. be specific about style and features:
"build a minimal blog page for a software developer. show posts as a list with title, date, and tags. add a sidebar with categories. include pagination. use a clean, monochrome style with lots of whitespace."
3. generate and refine
the AI generates a complete page with working post list, category filters, tag navigation, and detail pages. you can refine it — make the typography larger add a dark mode toggle move tags above the post list — as many times as you like.
4. customize post detail pages
go to plugins → posts → the detail template setting. click generate with AI and the AI creates a matching detail page template for individual posts — consistent typography, layout, and style.
you can also generate tag page and category page templates the same way. clicking a tag or category renders a dedicated archive page with filtered posts.
option B: build it yourself with the SDK
prefer full control? bb.bi provides a JavaScript SDK that your HTML pages can call directly. write your own blog layout in HTML, and use the SDK to fetch and display posts.
the SDK is available automatically — no install, no build step. just call bb.posts.list() from your page's script.
fetching posts
bb.onReady(async function() {
var result = await bb.posts.list({ limit: 10 });
result.posts.forEach(function(post) {
var el = document.createElement("a");
el.href = bb.url(post.slug);
el.innerHTML =
'<h2>' + bb.escapeHtml(post.title) + '</h2>' +
'<time>' + bb.formatDate(post.publishedAt, "long") + '</time>';
container.appendChild(el);
});
});filtering by category or tag
// filter by category
var result = await bb.posts.list({ category: "tutorials" });
// filter by tag
var result = await bb.posts.list({ tag: "javascript" });
// pagination
var page2 = await bb.posts.list({ limit: 10, offset: 10 });listing categories and tags
// get all categories
var cats = await bb.posts.categories();
cats.categories.forEach(function(cat) {
// cat.name, cat.slug
});
// get all tags
var tags = await bb.posts.tags();
tags.tags.forEach(function(tag) {
// render tag cloud
});auto-filtering on tag/category pages
when a visitor navigates to a tag or category page, the SDK sets bb.filter automatically. your code can read it to show the current filter context:
if (bb.filter && bb.filter.tag) {
heading.textContent = "tagged: #" + bb.filter.tag;
}
if (bb.filter && bb.filter.category) {
heading.textContent = "category: " + bb.filter.category;
}
// bb.posts.list() automatically applies the active filter —
// no need to pass category/tag manually on these pages.helpful utilities
the SDK includes utilities you'll use constantly:
- bb.url(slug) — build internal links relative to the current page
- bb.formatDate(iso, style) — format dates as "Jan 15", "January 15, 2025", or "3d ago"
- bb.escapeHtml(str) — safely insert user content into HTML
- bb.truncate(str, max) — truncate text with ellipsis
- bb.navigate(slug) — navigate to a subpage
- bb.el(selector) / bb.els(selector) — query DOM elements
full SDK reference is available in the dashboard under your handle → SDK reference.
mix and match
the two approaches work together. start with AI to get a working blog page, then edit the generated HTML to add custom behavior. or start from scratch and use the AI to refine specific sections.
you can also use visual element editing — select any element on the preview, then tell the AI to change just that part. want to redesign the post card layout without touching the sidebar? select the card, describe what you want, done.
what you get
post management
write in the dashboard with title, subtitle, markdown content, categories, tags, OG images, and meta descriptions. save as draft or publish instantly. pin important posts to the top.
categories & tags
organize posts into categories with custom slugs. add tags for cross-cutting topics. both are accessible via the SDK and automatically handled by AI-generated pages.
custom page design
your blog doesn't look like everyone else's. the AI generates a unique design based on your description, or you build it entirely yourself. either way, it's your HTML — no template lock-in.
detail, tag & category pages
clicking a post opens a detail page. clicking a tag shows all posts with that tag. clicking a category shows all posts in that category. all auto-generated or fully customizable.
your URL, your brand
your blog lives at yourname.bb.bi (with subdomain on pro+) or bb.bi/yourname. clean, short, memorable.
example: a developer's blog
you claim alex as your handle. you enable the posts plugin and create a few categories: tutorials, notes, projects. you write your first post.
you open the AI assistant and ask for a minimal blog page with post list, category sidebar, and a clean serif font. the AI generates the page. you publish it.
alex.bb.bi → blog home (post list) alex.bb.bi/hello-world → post detail alex.bb.bi/tag/javascript → all posts tagged "javascript" alex.bb.bi/cat/tutorials → all posts in "tutorials" category
later, you decide the post cards should show a reading time estimate. you select a post card in the visual editor, tell the AI add estimated reading time under the date, and it updates just that element. your blog evolves with you.
ready to start your blog?
sign up, enable the posts plugin, and let the AI build your first blog page. or write it yourself with the SDK. either way, it takes minutes.