mirror of
https://github.com/narrrl/narl-workspace.git
synced 2026-11-03 16:41:27 +01:00
docs: a guide, a wiki and screenshots
The README grew a section per feature and is a good reference, but nothing said where to begin. docs/wiki now has a getting-started page, a guide that walks through one day with the workspace and explains each part where it comes up, and a page per part of the app, each with screenshots of what it describes. Three pages are read out of the code rather than written, so they cannot drift from it: the keys and commands from Help.svelte and commands.ts, the same lists `:help` draws; the settings from .env.example, which gains a heading for the vault, trash and history settings so they no longer sit under mail; and the API from the README's table. `make wiki` writes them, and `--check` fails when one is stale or a link between pages leads nowhere. `--publish` lays the pages out for a GitHub wiki: links without `.md`, images beside them, `[[` escaped so the wiki does not take a command's help text for a link to a page. The screenshots are taken by `make screenshots`: the debug binary on a temporary data directory, with a password made up for the run, filled with an example workspace over the API, and a headless Chromium driven over the DevTools protocol through the views the docs show. Nothing outside the temporary directory is touched but docs/images, and the pictures are cut to 256 colours, a third of their size, which a dark UI does not show. The README opens with the banner, a CI badge, the guide, the features grouped by what they are for, and six of the screenshots.
This commit is contained in:
1 parent
7b2fd5579c
commit
4eb663e2d7
41 files changed
+2523
-25
No files matched your search
@@ -1,30 +1,62 @@
|
||||
<p align="center">
|
||||
<img src="docs/images/banner.png" alt="~/workspace" width="820" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/narrrl/narl-workspace/actions/workflows/ci.yml"><img src="https://github.com/narrrl/narl-workspace/actions/workflows/ci.yml/badge.svg" alt="ci" /></a>
|
||||
<a href="https://github.com/narrrl/narl-workspace/wiki"><img src="https://img.shields.io/badge/docs-wiki-c8684f" alt="wiki" /></a>
|
||||
<img src="https://img.shields.io/badge/rust-1.96%2B-eef1ea" alt="rust 1.96+" />
|
||||
<img src="https://img.shields.io/badge/svelte-5-eef1ea" alt="svelte 5" />
|
||||
</p>
|
||||
|
||||
# ~/workspace
|
||||
|
||||
A private, terminal-themed workspace that runs in the browser: a diary, the
|
||||
notes for work and for uni, and a board per space. One user, one SQLite file,
|
||||
one binary. It was called `narl-diary` until it grew everything but the diary.
|
||||
notes for work and for uni, a board per space, and the files that go with them.
|
||||
One user, one SQLite file, one binary. It was called `narl-diary` until it grew
|
||||
everything but the diary.
|
||||
|
||||
- **Rust + axum** backend, **SQLite** storage, **Svelte 5** frontend.
|
||||
- Spaces (`diary`, `work`, `uni`, …) with folders nested to any depth inside them.
|
||||
- Markdown documents with full-text search across a whole space (SQLite FTS5),
|
||||
reaching into the text files in the tree too,
|
||||
and math in them set by KaTeX: `$x^2$` inline, `$$…$$` or a ```` ```math ````
|
||||
block on its own.
|
||||
- Import a folder — or a zip of one — as a tree of documents, links and all.
|
||||
- A kanban board per space, so what is open at work is not mixed up with uni.
|
||||
- Drag, drop or paste images, video and audio straight into an entry.
|
||||
- Files of any kind — PDFs, archives, recordings — live in the tree beside the
|
||||
notes about them, streamed to disk however large — and PDFs, text, code,
|
||||
tables and certificates open in place.
|
||||
- Share any document behind an unguessable link — revocable at any time.
|
||||
- A vault: files sealed with AES-256-GCM under a password that is never stored,
|
||||
readable only while it is unlocked.
|
||||
- Backs itself up to Proton Drive, end-to-end encrypted, as a registered device.
|
||||
- Mails you — a reminder when the diary is empty, due cards, a weekly digest.
|
||||
- Real vim keybindings on the desktop (CodeMirror 6 + vim mode), plain taps on
|
||||
mobile.
|
||||
- The whole frontend is embedded in the release binary, so deploying is copying
|
||||
one file.
|
||||

|
||||
|
||||
**New here?** The [guide](docs/wiki/Guide.md) walks through a day with it, and
|
||||
[getting started](docs/wiki/Getting-Started.md) has it running in five minutes.
|
||||
Everything is also in the [wiki](https://github.com/narrrl/narl-workspace/wiki).
|
||||
|
||||
## What it does
|
||||
|
||||
- **Write.** Markdown documents in spaces (`diary`, `work`, `uni`, …) with
|
||||
folders to any depth. Real vim keys on the desktop (CodeMirror 6), plain taps
|
||||
on a phone. Math by KaTeX, `$x^2$` and `$$…$$`. `[[Title]]` links that are
|
||||
rewritten when what they point at is renamed or moved, and backlinks.
|
||||
- **Plan.** A kanban board per space, due dates said the way you say them
|
||||
(`fri`, `+3d`), cards that come back once done, and an agenda of what is late,
|
||||
due or in hand on every board.
|
||||
- **Remember.** A diary with a calendar, templates, the entries from this day
|
||||
in earlier years, and an evening reminder when nothing was written.
|
||||
- **Keep files.** PDFs, archives and recordings live in the tree beside the
|
||||
notes about them, streamed to disk however large. PDFs, text, code, tables
|
||||
and certificates open in place, and search reads the text files too.
|
||||
- **Find.** Full-text search across a space or all of them (SQLite FTS5).
|
||||
- **Lose nothing.** Autosave that survives a dropped network, every earlier
|
||||
version of a document as a diff, a trash with undo, an export that reads
|
||||
without this app, and an import that takes it back.
|
||||
- **Seal.** A vault: files sealed with AES-256-GCM under a password that is
|
||||
never stored.
|
||||
- **Capture.** A token per phone or script that puts a card in an inbox or a
|
||||
line in today's entry, and nothing else.
|
||||
- **Share.** Any document behind an unguessable, revocable read-only link.
|
||||
- **Mount.** The whole workspace over SFTP, for an editor on another machine.
|
||||
- **Back up.** A mirror to Proton Drive, end-to-end encrypted, as a registered
|
||||
device, and mail for reminders, due cards and a weekly digest.
|
||||
- **Deploy.** Rust and axum on the server, Svelte 5 in the browser, and the
|
||||
whole frontend embedded in the release binary, so deploying is copying one
|
||||
file.
|
||||
|
||||
| | |
|
||||
| --- | --- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
## Quick start
|
||||
|
||||
@@ -59,7 +91,15 @@ make dev-web # vite dev server on :4243, proxying /api to :4242
|
||||
```
|
||||
|
||||
In debug builds the binary reads `web/dist` from disk, so `cargo run` alone also
|
||||
works once the frontend has been built at least once.
|
||||
works once the frontend has been built at least once — and not before: the
|
||||
binary embeds `web/dist`, so a fresh clone builds the frontend first.
|
||||
|
||||
`make check` runs what CI runs: format, clippy, the tests, svelte-check, and a
|
||||
check that the generated wiki pages are current. The wiki is written in
|
||||
`docs/wiki` and published by CI on every push to `main`; `make wiki`
|
||||
regenerates the pages read out of the code, and `make screenshots` takes the
|
||||
pictures in `docs/images` again. See
|
||||
[Development](docs/wiki/Development.md).
|
||||
|
||||
## Keys
|
||||
|
||||
|
||||
Reference in new issue
Block a user