Physical products create tangible connections. Customers can hold, use, and experience your value physically. This creates different opportunities and challenges for your ladder.

The physical product ladder moves customers from awareness to trial to purchase to loyalty. Each interaction is an opportunity to leak value and build relationship.

PRODUCTS

Samples as Top of Funnel

Free samples let customers experience your product with zero risk. For consumables, this is powerful. For other products, consider low-cost trial sizes or money-back guarantees.

Samples are physical leaks. They demonstrate quality and create desire for full products.

Offer Purpose
Free sample Zero-risk trial
Trial size Low-cost entry

The First Purchase

The first purchase is a milestone. Make the experience delightful: fast shipping, beautiful packaging, thank you note. This positive experience encourages repeat purchase.

Subscription as Middle Rung

For products used regularly, subscriptions are ideal. Customers get convenience and often savings; you get predictable recurring revenue. Promote subscriptions as the smart choice for loyal customers.

Loyalty Program as Retention

Reward repeat customers with points, exclusive access, or special pricing. A loyalty program formalizes the relationship and encourages continued purchase.

VIP and Insider Access

Your best customers deserve special treatment. Early access to new products, exclusive editions, personal communications. These VIPs become brand advocates.

If you sell physical products, map your customer journey against this ladder. Where do you lose customers? What would increase repeat purchase? Implement one change this quarter.

building a documentation system using jekyll and data-driven navigation

Why Use Jekyll for Documentation

Jekyll is an ideal platform for building documentation systems due to its static architecture, version control integration, and flexible templating using Liquid. While many developers use Jekyll for blogs or portfolios, it’s equally powerful for managing extensive documentation — especially when powered by data files and custom navigation logic.

Understanding Data-Driven Navigation in Jekyll

Jekyll supports YAML, JSON, and CSV data files. These files can define a centralized navigation structure, reducing duplication and improving maintainability. This approach is especially useful when your documentation spans hundreds of pages across various sections, such as:

  • Getting Started Guides
  • API Reference
  • CLI Tools
  • Advanced Usage

Step 1: Define Documentation Sections Using Collections

Start by defining collections in your _config.yml to categorize your documentation:

collections:
  docs:
    output: true
    permalink: /docs/:path/

Now create a _docs folder and organize content with folders for each section:

_docs/
  getting-started/
  api/
  cli/
  advanced/

Step 2: Create a Navigation YAML File

In the _data folder, create docs_nav.yml:

- title: Getting Started
  url: /docs/getting-started/
  children:
    - title: Installation
      url: /docs/getting-started/installation/
    - title: Configuration
      url: /docs/getting-started/configuration/
- title: API Reference
  url: /docs/api/
  children:
    - title: Authentication
      url: /docs/api/authentication/
    - title: Endpoints
      url: /docs/api/endpoints/

Step 3: Loop Through Navigation in Layout

Use the _layouts/default.html or a custom sidebar partial to render the nav:

{% raw %}

{% endraw %}

Step 4: Build a Table of Contents Automatically

To improve navigation within a long documentation page, you can generate a Table of Contents (ToC) dynamically using JavaScript or a plugin like jekyll-toc.

Install it via your Gemfile:

gem 'jekyll-toc'

Then add this in your layout:

{% raw %}{{ content | toc }}{% endraw %}

Case Study: Internal Developer Docs for a SaaS Startup

An internal team at a fast-growing SaaS company used Jekyll and GitHub Pages to build their developer documentation. They relied on:

  • Custom collections for CLI, APIs, and Tutorials
  • Centralized navigation with data files
  • Global versioning via branches and front matter

The result was a blazing-fast, Git-friendly documentation hub accessible to devs company-wide. Using pull requests, teams could suggest edits that were previewed via Netlify before merging.

Step 5: Adding Versions to Documentation

Support multiple documentation versions using URL prefixes:

collections:
  v1:
    output: true
    permalink: /docs/v1/:path/
  v2:
    output: true
    permalink: /docs/v2/:path/

Then mirror your content in _v1 and _v2 folders, and adjust the navigation file accordingly. You can dynamically show the version using page.collection.

Step 6: SEO Best Practices for Documentation

  • Use clear and consistent permalinks with hyphens
  • Include meta descriptions in front matter
  • Generate a sitemap that includes all collection pages

Step 7: Creating a Searchable Index

To make the docs searchable, generate a JSON index across all collections:

---
layout: null
---
[
  {% raw %}{% assign docs = site.docs | concat: site.v1 | concat: site.v2 %}{% endraw %}
  {% raw %}{% for doc in docs %}{% endraw %}
    {
      "title": {% raw %}"{{ doc.title | escape }}",{% endraw %}
      "url": {% raw %}"{{ doc.url }}",{% endraw %}
      "content": {% raw %}"{{ doc.content | strip_html | strip_newlines | escape }}" {% endraw %}
    }{% raw %}{% if forloop.last == false %},{% endif %}
  {% endfor %}
]

Conclusion

Jekyll’s flexibility with collections and data files enables you to build robust, scalable documentation systems. By using data-driven navigation, versioning via collections, and client-side search, your documentation remains maintainable even as your project grows. Whether it’s for internal devs or external users, this approach provides both performance and usability without needing a CMS.