# datascape Minimal self-hosted personal wiki. Folders are pages. ## Features - **Pages**: a folder's `index.md` renders as HTML, and the folder's other files are listed below it. Going to a missing path lets you create the page there. - **Editing**: edit the whole page or a single heading's section. Tick task checkboxes directly on the rendered page. - **Move, rename, delete**: moving a page onto an empty folder offers to merge into it. - **View settings**: show the file list as a list or thumbnail grid, sorted by name, date, or size. Videos get thumbnails when `ffmpeg` is installed. - **Search**: find pages by name. - **Wikilinks**: `[[query]]` or `[[query::label]]`. They open a search, so links still work after a page is renamed. Typing `[[` in the editor suggests page names. Embed files with `![caption](photo.jpg "left")`. - **Movie import**: create a page from OMDb metadata. Asks once for a free [OMDb API key](https://www.omdbapi.com/apikey.aspx) and keeps it in the browser. - **Special folders**: a [photo diary](#diary) and a [fitness dashboard](#fitness). - **Quick-add bookmarklet**: save the current tab to a wiki page. - **Companion app**: an optional desktop helper, downloadable from the wiki footer. It opens wiki files in local apps and folders in the file manager. ## Build & run The wiki binary embeds the companion binaries, so build those first: ```bash make companion-release # once, and after companion changes go build -o datascape . # local GOOS=linux GOARCH=arm go build -o datascape . # QNAP NAS ./datascape -dir ./wiki -addr :8080 -user me -pass secret ``` | Flag | Default | | |------|---------|-| | `-addr` | `:8080` | Listen address | | `-dir` | `./wiki` | Wiki root | | `-cache` | `./cache` | Thumbnail cache | | `-user`, `-pass` | | Basic auth (omit to disable) | | `-reindex-interval` | `30m` | Search index rebuild (`0` = off) | ## `.page-settings` Per-folder `key = value` file. The **view** button in the `Files` header sets the first three keys. | Key | Values (default first) | |-----|------------------------| | `view` | `list`, `thumbnail` | | `sort` | `name`, `modified`, `size` | | `order` | `asc`, `desc` | | `type` | `diary`, `fitness` | ## Keyboard shortcuts All use Alt+Shift. | Where | Keys | |-------|------| | Anywhere | `E` edit, `N` new page, `M` move, `F` search | | Editor | `S` save, `1`–`3` heading, `B`/`I` bold/italic, `C`/`K` code/code block, `L` link, `P` wikilink, `G` embed, `U`/`O`/`X` bullet/numbered/task list, `Q` quote, `R` rule, `T` format table, `D`/`W` date (ISO/long), `V` movie, `Y` delete line | ## Diary ``` Diary/ .page-settings ← type = diary 2026/ index.md ← # 2026, ## 2026-05, ### 2026-05-11 sections 2026-05-11 Beach.jpg ← photos go under their date's section ``` The year page shows each day's section with its photos. Months and days that are missing (up to today) appear as placeholders with an `[edit]` button. A calendar in the sidebar jumps to any date. Bookmarkable shortcuts: `/today/`, `/this-month/`, `/this-year/`. ## Fitness With `type = fitness`, a folder shows weight charts (daily and weekly mean, with your goal) below its content. Copy the [Waistline](https://github.com/davidhealey/waistline) app's export into the folder as `waistline_export.json`. Each new export replaces the old file. ## Quick-add bookmarklet Replace `wiki.host` and `/Topics/Bookmarks/` with your host and target page: ```javascript javascript:(function(){var s=window.getSelection().toString().trim();var t=s||document.title;var u=location.href;var to='/Topics/Bookmarks/';var q='?to='+encodeURIComponent(to)+'&url='+encodeURIComponent(u)+'&title='+encodeURIComponent(t);window.open('https://wiki.host/quickadd'+q,'quickadd','width=480,height=320');})(); ``` Each save adds this to the target page's `index.md`: ```markdown - [Example Page](https://example.com) 2026-05-11 14:30 optional comment ```