Contributing to Razon
So you have decided to permanently settle in the city of knowledge? Well, there are many ways to do this and you should know that every contribution, no matter how small, matters! Thank you for taking the time to improve Razon!
How to Contribute
Reporting Issues
You do not need any technical know-how to report issues with Razon - all you need is a GitHub account. To report a problem, go to the issues section of Razon’s repository and create a new issue with the provided template. If the issue is specific to a given page, you can also use the comment section under it, although this is discouraged. Ideally, all issues should be submitted via GitHub’s bug report system.
Requesting Features
Contributions to Razon can come in many forms and feature requests are one of them. If you have an idea about a feature or improvement you would like to see in Razon but do not have the time or ability to implement it yourself, you can submit a feature request by creating an issue on the repository using the feature request template.
Improving the Project
Perhaps the greatest contribution you can make to Razon is by submitting a commit to the project.
Tip: Trello Boards
If you just want to help out but have nothing specific in mind, you can checkout the Trello board to get a grasp of what the project currently needs.
Prerequisites
Before you can contribute to Razon, you should be familiar with the tools which make such a project possible. All content is written in Markdown using Obsidian and then built into a static website using Quartz.
The source control system behind Razon is git, the repository itself is hosted here using GitHub. Currently, the repository is split into three branches:
content
is responsible for handling edits to raw Markdown content, i.e. changes in thevault
folder;quartz
is responsible for handling configuration and design changes to the website, i.e. changes in thequartz
folder;main
handles the website build. Currently, a GitHub workflow is responsible for automatically building the website from the Markdown content whenever a push is made to themain
branch.
Getting Started
The first thing you need to do is create a fork of Razon’s repository.
If you plan on editing or adding content, you should import the vault
folder as an Obsidian vault and make all of your changes inside it using the Obsidian editor. Once you are done, you should submit your changes as a pull request to the content
branch.
If you want to fix a bug or add a feature to the website, you should familiarise yourself with Quartz. Any such changes should only affect the quartz
folder and should be submitted as a pull request to the quartz
branch.
Testing and Building
In general, if the content you write is rendered correctly in Obsidian, it will also be rendered correctly on the website. However, you should still check if this is the case. If you are building the website for the first time, you need to change into the quartz
directory and then run
npm i
After this, you can build and host the website locally by executing the following command (again in the quartz
directory).
npx quartz build -d ../vault --serve
If you are building on Windows, you have to use
npx quartz build -d ..\vault --serve
Styleguides
All submitted content should abide by the following guidelines in order to ensure that it is of the highest quality:
- Content should be succinct. Avoid unnecessary fluff.
- Content should contain all necessary formalism but also provide the intuition behind it.
- Content should provide plenty of examples and diagrams.
- Content should include a list of references and sources.
- Grammatically correct writing is always a plus.
Organising Content
Each separate concept should be put in its own page. Folders should be used to group related or similar pages together but only loosely. Each note should be marked with tags which indicate the broad topics which are discussed in the note.
Links
Links are specified with the usual Markdown syntax (link text)[url]
and not as wikilinks. All internal links should be relative. When your page relies on a concept or term from another page, all of its occurrences should link to the page which explains it.
Callouts
Callouts are a feature of Obsidian but integrate seamlessly with Quartz. They are rendered as colourful blocks of content on the page and are extremely handy when organising content and focusing attention. As such, you should strive to use them as much as possible.
There are a few different valid syntaxes for specifying callouts, but only the following one should be used in Razon to ensure consistency:
>[!CALLOUTTYPE] Optional Title
>
>Callout content
>
The CALLOUTTYPE
is a single word, written in CAPS, which indicates the type of callout to be created. Callouts can also be made collapsible by appending +
or -
directly to [!CALLOUT TYPE]
, without spaces. If +
is used, the callout will be unfolded by default. If -
is used, then the callout will be folded by default.
Note: Supported Callouts
Currently, Razon supports all callout types provided by Obsidian and Quartz as well as the following custom callouts:
DEFINITION
,INTUITION
,NOTATION
,ALGORITHM
,AXIOM
,THEOREM
,PROOF
,CONSTANT
,UNIT
andLAW
.
After this, there should be a single space, followed by an optional title for the callout. This title should have the format CalloutType: Actual Title
. You can also omit the title entirely and then the callout type will be rendered as the title.
Each new line of the content should be preceded by a >
symbol. There should be an empty line directly before the content and directly after it. Otherwise, there will be errors in rendering.
You can also nest callouts. Apply the above guidelines to each nested callout as well.
Examples
Examples are very useful but usually lengthy and can thus hinder readability. Hence, all examples should be provided as collapsible, folded by default, callouts of the type EXAMPLE
.
Intuition
The content of a page should ideally introduce all necessary formalism and provide explanations in a subsequent collapsible, folded by default, callout of the INTUITION
type. This is done because intuitions behind concepts can be long-winded and hinder the readability of the page.