From 75483db66a65c861f726fafe23dbf15959f7a287 Mon Sep 17 00:00:00 2001 From: ae Date: Tue, 6 May 2025 15:54:44 +0300 Subject: [PATCH] docs: readme with features & usage --- README.md | 31 +++++++++++++++++++++++++++++++ docs/media/logo.png | Bin 0 -> 19044 bytes 2 files changed, 31 insertions(+) create mode 100644 README.md create mode 100644 docs/media/logo.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..5b2e006 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +
+ +
+ +## Features + +Available: + +- Markdown support (Github flavored) +- Note version history +- Automatic note expiration via `@exp:` title prefixes +- Keyboard navigation support +- User account administration + +Waiting to be implemented: + +- (Bulk) import/export (Markdown, PDF) +- Webhooks + +## Usage + +The Dockerized app can be run in fullstack (`docker-compose-full.yml`) and backend (`docker-compose-back.yml`) modes. In backend mode only the Golang server (and the Postgres database) are containerized and the frontend can be run separately for quicker development (`npm run dev`). The default fullstack setup defaults to exposing port 3000. + +The `./scripts/run_dev.sh -h` output can be used as reference of running each of the available modes (or purging data from previous test runs with `-p` or `-q`): + +``` +[?] usage: ./scripts/run_dev.sh [-h|-f|-p] + -f run both frontend and backend (default: false) + -p purge any existing database artifacts (default: false) + -q only purge old data without building/spawning any new containers (default: false) +``` diff --git a/docs/media/logo.png b/docs/media/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc629333cb84c3167060346f89d296bf013d29f GIT binary patch literal 19044 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