Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Project: Dataans #16

Merged
merged 4 commits into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion content/projects/bytes-formatter/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ date = 2023-04-09
draft = false

[taxonomies]
tags = ["js", "tools"]
tags = ["js", "tools", "project"]

[extra]
keywords = "byte-formatter, utils, hex, tools"
Expand Down
2 changes: 1 addition & 1 deletion content/projects/crypto-helper/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ date = 2023-04-09
draft = false

[taxonomies]
tags = ["yew", "rust", "tools"]
tags = ["yew", "rust", "tools", "project"]

[extra]
toc = true
Expand Down
Binary file added content/projects/dataans/dataans-thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
100 changes: 100 additions & 0 deletions content/projects/dataans/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
+++
title = "dataans"
description = "Take notes in the form of markdown snippets grouped into spaces."
date = 2024-10-16
draft = false

[taxonomies]
tags = ["rust", "tauri", "leptos", "project"]

[extra]
toc = true
keywords = "Rust, Tauri, Leptos, Note-taking, Markdown"
thumbnail = "dataans-thumbnail.png"
+++

Source code: [github/TheBestTvarynka/Dataans](https://github.com/TheBestTvarynka/Dataans/).

The Dataans is a desktop app that allows you to take notes in the form of markdown snippets grouped into spaces. Yes, it's another note-taking app, but with unique features I miss in all other note-taking apps.

# Motivation

I write notes almost every time I use my computer. Usually, it's small pieces of data/code/docs/links I found during the research or bug fixing. So, I need some place to store them and the ability to find needed pieces of information easily. I used to use a single text file and open it in Notepad or VS Code. After the research, I got the file with almost random symbols:

![](./notes-example.png)

Do I need to explain that it isn't convenient and hard to find anything? I needed a better solution. I tried other note-taking apps, but every one of them had flaws I didn't like a lot.

## What's wrong with existing note-taking apps?

I relate a lot to this blog post ([Why build a messenger app only for sending to yourself?](https://monoline.io/posts/2021/11/11/why-build-a-messenger-app-only-for-sending-to-yourself/)). I quote many key points from it but explain them in my own way and how they relate to me.

1. **Too many options**. I don't need so much test editing functionality. I just want to take notes and have simle markup (styling) functionality. Something like [markdown](https://www.markdownguide.org/) or [asciidoc](https://docs.asciidoctor.org/).
2. **Unwanted features**. This echoes the previous point, but I want to draw your attention specifically to the UNWANTED features. For example, I don't need AI to search for info in my notes. I only need a typical search engine. I don't want AI to write notes for me. I can write down my thoughts by myself.
3. **Article-oriented mindset**. People don't think in articles. Many note-taking apps look like you are going to write an article instead of just writing down the idea, thought, or a random piece of data. When I see a blank screen with the cursor, I feel I need to write a document with a defined structure, style, and line of thought. It throws off the thoughts I wanted to write at the beginning.

## Missing features

Despite the listed flaws above, I still have missing features I would like to have in my note-taking app. Some of them may feel weird and illogical to you, but I know what I want :stuck_out_tongue_closed_eyes:.

All note-taking apps I tried lack one or more features listed below. No one contains all of them at once (but if you find such an app, please, tell me about it).

1. **Desktop app**. Yes, you heard it right. In the era of the web, I want a desktop app. Usually, the browser has dozens of opened tabs across multiple windows. It becomes hard to find the tab with notes (even when it's pinned).
2. **Quake (drop-down) mode**. I have used the [Quake](https://github.com/Guake/guake/) terminal since 2019. I like it a lot and the most pleasant feature is a drop-down mode. I set a keybinding to the `F1` key and always have my terminal with me. I would like to have the same ability for my note-taking app because I use it often.
3. **Cross platform**. It should behave the same on _Windows_ and _Linux_. Other platforms mey may be supported too, but it's not a requirement for me.
4. **Markdown**. It is simple, easy to learn, and looks good. It contains a perfect set of styling and markup functionality for me.

# Solution

These are the two closest apps to what I want:

1. [Telegram](https://telegram.org/). I have plenty of Telegram channels with one subscriber (me) where I save important, useful, and just interesting information. Despite rich Telegram features, you can understand why it isn't suitable.
2. [Monoline](https://monoline.io/). It supports MD and has pretty UI, but I would like to organize my notes into groups (like messages are organized in channels in Telegram).

I decided to write my note-taking app after many tries and thoughts. The best part of being a programmer is the ability to do everything I want with the software. It's like a limitless power in the virtual world (unfortunately, *everything has a limit*, but we aren't about that).

## Tech stack

We can debate a lot about the best technologies for such a project, but I already made my decision:

* Main programming language: [`Rust`](https://www.rust-lang.org/).
* App framework: [`Tauri`](https://v2.tauri.app/).
* Frontend framework: [`Leptos`](https://leptos.dev/).

I wrote a comprehensive explanation of the chosen tech stack. You can read it here: [`tech_stack.md`](https://github.com/TheBestTvarynka/Dataans/blob/main/doc/tech_stack.md).

## Features

![](./md-note.png)

* Quake (drop-down) mode. The keybinding can be configured.
* Cross platform.
* All notes are markdown text. The following MD features are supported:
* Italic, bold, strike through text.
* Quotes.
* Links.
* Headers.
* Tables.
* In-line code and code blocks.
* Pasting images from clipboard.
* Files can be attached to the note.
* All notes are grouped into spaces. So, space is a collection of notes. It has name and avatar picture.
* Common keybindings for text editing (like `ctrl+k` for creating links).
* App can be configured using config file.
* Color scheme also can be configured.
* Simple note search.
* Many different keybindings to control the application.

...And more. This a short list of main futures. The full features list and user manual can be found here: [todo](#).

# Moving further

I'm going to continue to improve `Dataans` according to my needs. If someone wants some missing functionality, then create an issue or a discussion, and most likely I'll implement it. Or if you are interested in contributing to this project, then read the [`CONTRIBUTING.md`](https://github.com/TheBestTvarynka/Dataans/blob/main/doc/CONTRIBUTING.md) document.

# References & final note

1. [Dataans: Source code](https://github.com/TheBestTvarynka/Dataans/).
2. [Dataans: Contributing guide](https://github.com/TheBestTvarynka/Dataans/blob/main/doc/CONTRIBUTING.md).
3. [Dataans: Technical decisions explained](https://github.com/TheBestTvarynka/Dataans/blob/main/doc/tech_stack.md).

I want to add only one thing: **write small programs for yourself in your favorite languages**. I'm feeling happy every time I use my own app for my needs. Even if your app will do only one task, then still create it. _No better software than software that does useful work._
Binary file added content/projects/dataans/md-note.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/projects/dataans/notes-example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading