Open olayway opened 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:
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.
@rufuspollock I've added the shaping to the description. Please take a look and let me know what you think.
Acknowledging and wondering if we want to defer this on having a proper index of site files ... hmmm.
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
layout: catalog
frontmatter field to specify the use of the catalog layout.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.catalogDir
.[[...slug]].page.tsx
:layout: catalog
fetch files within thecatalogDir
from the APIMdxPage
component, render the blog layout/componentMetadata fields to display:
title
description
date
(if provided, order by it; otherwise sort by title and hide the date element)authors
tags
Flowershow compatibility (Is this necessary?)
To maintain compatibility with Flowershow config file, we could also add support for its
blogDir
, with the following exceptions:blogDir
would no longer default to/content/blog
/blog
path would be rendered as a blog index page only whenblogDir
is specified.=> 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 setblogDir: "/blog"
in theconfig.json
file.Design
Use this Tailwind component: https://tailwindui.com/components/marketing/sections/blog-sections#component-71451303bfa569c95e0f084e67da54f2
Rabbit holes
No-goes
/blog
path to be always used for the blog index page (as it is in Flowershow)Appendix: Flowershow implementation considerations
In Flowershow there is only one special
/blog
page that displays all the markdown files from theblogDir
configured in theconfig.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:/blog
path use this template/tutorials
,/events
,/recipes
I'd suggest making this more flexible and allowing people use this blog/catalog layout on any page they want.
Solution:
catalog
(orblog
or other name) layoutlayout: catalog
frontmatter field on virtually any page they wantcatalogDir: "/tutorials"
frontmatter field (by default it could be the parent directory of the file)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.