Saunf is a plain text software project management tool.
Not everyone is a plain-text fan, so to enable collaboration, saunf can integrate with different tools. Or it is supposed to.
I am building Saunf to simplify managing software projects for me, while allowing people I work with to use the tools they like. At its infancy, Saunf should enable my current workflow of managing a project from a single org file:
- I write a lot of introductory documentation. Saunf should allow me to pick parts from this document and build a readme file that don't bore people to death
- I keep a list of todo items within the saunf-doc. Saunf should allow me to sync these with Github issues.
- I maintain a glossary for every project to establish a ubiquitous language. Saunf should enable me to utilize this glossary to more effectively achieve my goal of establishing a ubiquitous language.
I have a lot of (rough) fantasies of expanding the scope to replace Jira, and a lot more than that. I imagine a tool which can allow me to see a project from bird's eye view as architecture diagrams, to which I can then zoom into get more detail, zooming in further and further to end up reading source code. A tool which would allow me to trace every single line of code, every domain object to the requirements that demanded its existence. Projects where things are connected with minimum effort.
For starters, let's try to bring together the information that usually spreads over a gazillion tools with no convergence point.
- Reduce busy work of keeping multiple tools up to date e.g a person shouldn't need to put time in updating a wiki (e.g confluence), a public readme (e.g on github) etc with same information
- Help establish a ubiquitous language to discuss the project
- Easily maintain a glossary of what certain terms mean in the project
- Easily/automatically link the glossary terms whenever they are used elsewhere in documentation, or issues, commit messages, branch names etc
- Create a documentation website?
Help manage the user-stories, bugs, technical debts and such.
- Creating a new issue should be as easy as dropping in a line in the saunf-doc
- Support syncing the issues with an external tool
- Issues added/modified in saunf-doc should get pushed to the remote tool
- Issues added/modified in remote tool should be brought back to the saunf doc
At its bare minimum, Saunf should
- sync readme file
- Push changes from saunf-doc to readme
- Pull changes from readme to saunf-doc
- Enrich readme with glossary terms
- sync github issues
- Push new issues to github
- Push changed issues to github
- Pull new issues from github
- Pull changed issues from github
- Enrich github issues with glossary terms
Saunf is in its infancy, so things are likely to change wildly. For now, this how you use saunf:
- Create
saunf/saunf.org
in root of your project. This file is referred to assaunf-doc
- Describe your project using org-mode markup in saunf-doc
Saunf CLI usage can be obtained using running saunf --help
Configuration of saunf is expected in dhall format. It is okay if you are not familiar with dhall. Saunf don't have a lot of configuration, so you won't be needing a lot of it.
To configure saunf, create saunf.dhall
file in root of your project.
Saunf takes following configuration:
Name | Type | Is Required? | Remarks |
---|---|---|---|
readmeTemplate | Text | No | Details below |
github | Object | No | Optional github configuration. Used for project management |
github.user | Text | Yes | |
github.repo | Text | Yes | |
github.token | Text | Yes | Github OAuth token |
Note in example below that optional fields in Dhall need to be prefixed
with Some
, to explicitly express that a value is optional.
For example saunf configuration, you check saunf.dhall
in this project itself. You can also create a default saunf conf by
using saunf init
command.
-
readmeTemplate
This is a standard pandoc template with small saunf-specific syntax.
Within the readme template, you have access to
title
anddescription
variables, which you can use by wrapping them in$
-s e.g$title$
title
is the title set with#+title:
attribute in saunf-docdescription
is the text on top of your saunf-doc before any section starts
Following saunf-specific syntax is available:
-
Section Injection
: Saunf allow you to inject entire sections from your saunf-doc inside the readme. Level of the section in saunf-doc is irrelevant; you can mention the level of injected section like this:### $#usage$
In this example,
usage
is theCUSTOM_ID
of the section getting injected, and3
is the level at which it will be injected. i.eH3
will be used for the heading ofusage
section, and all its sub-headings will be set as3 + <subheading-level>