Mainly, we want to support the rich dynamic database view in notion.
We want pages to support arbitrary metadata properties (for the database view). The body of pages will simply be a markdown document.
For each property type, it's important to be a target for filtering and sorting, so throwing these values into a JSON field becomes pretty unergonomic for those use-cases in SQL.
With that in mind, we'll support these property types:
- boolean (checkbox)
- int
- float
- string
- multi-string (like tags)
- date
- datetime
I want to try to make something that is better than notion at software project tracking, specifically, in the following ways:
- smart notifications (see "notifications")
- dependency tracking (see "dependency view")
- git integration (see "git integration")
You don't get notified unless you are called out w/ @
or if you apply a
following::<your user>
tag to the page.
Later, we can implement rule-sets whereby following::<your name>
can be
auto-added to pages.
page_dependency
will be modeled in the database. Every page can have one or
more dependency. There can be a "show dependencies" dropdown where all of the
direct or indirect dependencies are shown in a tree.
Let's cut out the middleman and integrate directly with git. Our app will need
access to a git remote URI from which we can fetch updates. Then, every page can
have a "relevant refs" field where commits related to the ticket can be input.
We can also support a tagging syntax like nc113
in git commit messages, which
can cause that ref to be pulled in as relevant when it's fetched. Then, once we
have this link-up, we can display diffs right in the web UI.
I want to try to make this tool also serve as a frontend for a SQL database, like Prisma studio. For startups, it would be awesome to have a tool that blends the lines between notion and SQL.
A collection is a set of pages. A database table and its set of rows, therefore, maps onto this abstraction layer.
It should be possible to add props to a database collection view. Here, the notion clone extends the data in the database itself, allowing ad-hoc experimentation on top of the database schema.
After the aformentioned ad-hoc'ing, maybe we want to push props from the notion clone down into the database. That can be done with a single click!
For this part of the project, I'd like to add a CLI to our main binary, probably using argh.
Notes about a row in the database will be the content of a page.
This is a common pattern for nice DB frontends, but obviously any relation should work like a link in the frontend. Additionally, if there is page content ("internal notes") on a related row,
Things I'm not building yet, but a dumping ground for ideas.
- formulaic properties
We can use markdown=rs, which is an XSS-safe markdown parser.