Note taking system should be simple

No note-taking app is perfect. Apps like Evernote, Notion, Obsidian, and Logseq each have their own advantages but can be complex and packed with unnecessary features. Finding the ideal app is impossible, and transferring data between apps is challenging due to differing data formats. Even with promises from providers not to misuse your data, it's uncertain how it might be used for commercial purposes.

For simplicity, you don't need any app to store your written text. You can organize your notes in local files and folders, but searching for specific notes or moving them to another computer might be tricky. This article will guide you on how to manage your own data effectively. If you're familiar with programming, you can quickly create a note app. Even without programming skills, learning about data management can help you keep your data safe and accessible.

Storing our data in a manageable, movable, and backup-friendly single file is essential. SQLite provides an effective solution for managing notes with features like a unified, standalone file, comprehensive SQL support, full-text search, and easy data organization. This removes the need for a server, as all data is locally stored. SQLite's compatibility with different tools, independence from client applications, and easy integration offer flexibility. Thus, even if the note app is unavailable, your data remains accessible and portable, ensuring constant access to your information.

The database design for note storage is quite simple, much like Excel, using only two fields.

+----+-----------------------------+
| id |            note             |
+----+-----------------------------+
|  1 | note 1, some recording text |
+----+-----------------------------+

To structure notes effectively, we can use the Zettelkasten method, which links ideas together. Each note is a 'card' with its own ID, and can connect to others by mentioning their @id. This creates a network of connected thoughts.

+----+------------------------------------------------------+
| id |                         card                         |
+----+------------------------------------------------------+
|  1 | card 1, some recording text                          |
|  2 | this is card 2, the id is 2. we can link the card @1 |
+----+------------------------------------------------------+

This method links cards both ways, making it easy to organize knowledge broadly. Each piece of information is both a starting point and a goal in a network of ideas. To find card links, we use '@id'. The database's full-text search quickly finds these references, helping us move through the network of notes. This makes navigating and managing the idea network efficient. Besides linking, categorizing cards is key. We use hashtags (#) for this. Adding a '#tag' to a card categorizes it. Clicking a tag in any card shows all related cards, making it easy to find connected content. Our note-taking system uses '@' for links and '#' for tags, blending simplicity with function. Regular expressions (Regex) easily process these symbols, allowing smooth note linking and categorizing.

We can use markdown for note presentation because it's popular and easy to use. This lets us use existing libraries instead of making our own parser, saving time and aligning with standards for easier note creation and formatting.

We now should have to add input features to our system for easy note-making, supporting markdown for effortless writing, editing, and viewing. This approach uses markdown's strengths for clear note presentation. For broad compatibility and simple development, we can choose Electron, running smoothly on Windows, macOS, and Linux. Electron simplifies desktop app creation with web technologies, beneficial for front-end developers to build their note apps. Its downside is the larger installation size compared to native apps, but Electron's support for current web tech outweighs this, enabling elegant designs easily.

Syncing data between devices is crucial but risks privacy. Storing data locally maintains ownership and simplifies the app. This method lets us keep our data fully control, using 'the cloud' syncing is essentially storing data on someone else's computer.

To see the simplicity of this design in action, check out slippod and see how it uses these innovative features! If you're interested in building the app yourself, the full SQL schema is available here.