datopian / datahub

🌀 Rapidly build rich data portals using a modern frontend framework
https://datahub.io/opensource
MIT License
2.19k stars 325 forks source link

Support for blog home pages (or any catalog-like home pages) #1249

Open olayway opened 1 month ago

olayway commented 1 month ago

Shaping

Situation

Currently, if you want to have an home/index page for your blog (or docs, tutorials, recipes etc.) in your DataHub Cloud site, you need to create a markdown README.md/index.md page - using markdown syntax only, probably with a list of links to other pages.

Problem & Opportunity

Limitations:

Opportunities:

Solution

General Solution Idea

Develop a flexible blog/catalog layout that allows users to apply it to any page by setting specific frontmatter fields in their markdown files. This will enable users to create catalog-like pages, such as /blog, /tutorials/events, and more.

Implementation Analysis

  1. Create a reusable catalog layout.
  2. Frontmater configuration:
    • Introduce a layout: catalog frontmatter field to specify the use of the catalog layout.
    • Add a catalogDir: "/path" frontmatter field to define the directory whose markdown files should populate the catalog layout. By default, this could be the parent directory of the file.
  3. Create an API endpoint for fetching a list of files (with the needed metadata) included in the catalogDir.
  4. In the [[...slug]].page.tsx:
    • fetch the index page metadata
    • if layout: catalog fetch files within the catalogDir from the API
    • instead of rendering MdxPage component, render the blog layout/component

Metadata fields to display:

Flowershow compatibility (Is this necessary?)

To maintain compatibility with Flowershow config file, we could also add support for its blogDir, with the following exceptions:

=> If a Flowershow user relied on the default blogDir value and wants to have his blog at the usual /blog, he'd have to explicitly set blogDir: "/blog" in the config.json file.

Design

Use this Tailwind component: https://tailwindui.com/components/marketing/sections/blog-sections#component-71451303bfa569c95e0f084e67da54f2

image

Rabbit holes

No-goes

Appendix: Flowershow implementation considerations

In Flowershow there is only one special /blog page that displays all the markdown files from the blogDir configured in the config.json.

The problem with this approach is that /blog page is always going to use the special "catalog"/"blog" layout. There is no way to:

I'd suggest making this more flexible and allowing people use this blog/catalog layout on any page they want.

Solution:

This way users wouldn't be bound to /blog path only. And you can have different catalog pages like that, e.g. /blog, /tutorials, /docs, /events ... in a single site.

Note in Flowershow we used to also have peopleDir that would point to a directory with markdown files holding information about content authors, that would then be displayed on blog pages.

rufuspollock commented 1 month ago

@olayway great outline. I think we could do a bit more shaping here to flesh this out and then look at this. Definitely something we want for each the DataHub blog.

Quick thoughts:

olayway commented 1 month ago

Is there some way to use our markdowndb and it's query language to allow selecting posts (or is this making things complex? probably ...)

I wouldn't consider using markdowndb until we have a "proper" index of site files. Currently it's still just a JSON in a files column.

olayway commented 1 month ago

@rufuspollock I've added the shaping to the description. Please take a look and let me know what you think.

rufuspollock commented 2 weeks ago

Acknowledging and wondering if we want to defer this on having a proper index of site files ... hmmm.