Files

53 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2026-05-28 02:54:17 +10:00
# Simple Note
This project is a structured note-taking software-server.
# Client
Client it self can also do note-taking locally without setup server.
The client is written in C# using avalonia to achieve cross-platform.
Target platforms:
- Windows
- Linux
- macOS
- Android
- Web (WASM)
2026-05-31 03:56:31 +10:00
The GUI should be adaptive and can switch between phone (narrow width) mode and full mode in the runtime (responsivie to resizing).
2026-05-28 02:54:17 +10:00
# Server
Server is also written in C# using ASP.Net Core Web API.
Server is a distributed server structure. A server can set a destination server to sync content from and to target server. And server can broadcast data changes to other servers connected to it.
The server utilizes RESTful API style: Only serve API services via HTTP requests.
The server provides a multi-user service, every user has its own notebook. A user can share their notes/folders to anyone.
2026-05-31 03:56:31 +10:00
For database, it can be configured as the server is a ASP.Net Core Web API application, and by default, it uses SQLite. EF Core or similar packages should be used to avoid manually writting SQL statements.
2026-05-28 02:54:17 +10:00
# Underlying
Each node (folder/note) have its own UUID and all its children are assigned via UUID, which allows symbollic linking a folder to another folder.
Each node also have ACLs, controlls who can assess those nodes, (their owner always have full control).
Permissions are:
- View
- Edit
- Delete
- Rename
2026-05-31 03:38:48 +10:00
Adding edit/delete/rename permission requires at least view permission.
There's a special role called `everyone`, if `everyone` is given view access to a node, it removes any encryption given to the node.
2026-05-28 02:54:17 +10:00
To setup a server network, every server should share a private-public certificate, if a server want to join (or connect to) another server, it must have the same private-public certificate.
2026-05-31 03:38:48 +10:00
All node content must be encrypted if they are hosted on the server unless they are set as public to everyone. By default every user has a encryption key generated automatically when users creates their account. The key will be encrypted using user's password and everytime user access the content requires that key be given from the client.
Server provides an API to obtain the encrypted key and client can decrypt that key locally using user's password.