Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simonneutert/labradorite-notebook
Dramatization: Every online notebook failed me. Labradorite keeps me sane. All my notes at my fingertips.
https://github.com/simonneutert/labradorite-notebook
flatfile journal localhost notes notes-app notetaking roda ruby rust selfhost selfhosted tantiny tantivy webapp
Last synced: 4 days ago
JSON representation
Dramatization: Every online notebook failed me. Labradorite keeps me sane. All my notes at my fingertips.
- Host: GitHub
- URL: https://github.com/simonneutert/labradorite-notebook
- Owner: simonneutert
- License: mit
- Created: 2022-09-27T22:10:52.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-25T09:41:29.000Z (4 months ago)
- Last Synced: 2024-10-04T00:42:25.838Z (4 months ago)
- Topics: flatfile, journal, localhost, notes, notes-app, notetaking, roda, ruby, rust, selfhost, selfhosted, tantiny, tantivy, webapp
- Language: Ruby
- Homepage:
- Size: 1.02 MB
- Stars: 7
- Watchers: 3
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Labradorite Notebook
> Labradorite rightfully belongs to the group of wisdom crystals, because it promotes a free flow of mental energy as it awakens intuition and allows us to get mentally unstuck.
>
> _\- every esoteric out there_---
[![Ruby 3.3 Rust 1.76.0](https://github.com/simonneutert/labradorite-notebook/actions/workflows/ruby.yml/badge.svg)](https://github.com/simonneutert/labradorite-notebook/actions/workflows/ruby.yml)
---
> [!IMPORTANT]
> [Tantiny](https://github.com/baygeldin/tantiny) has died this summer (most probably) ...
>
> This project heavily depends on Tantiny, and as a result, we anticipate releasing our final updates in the near future.
> I am committed to maintaining the project's functionality for as long as feasible. However, I will not be investing additional time or resources into its further development. 😔
> 🥲 It will continue to work though! As it is fulfilling what it was built for in the first place.
> Dependabot will help keep security vulnerabilities closed and containerization will do the rest.---
- [Rationale](#rationale)
- [Features / User Info](#features--user-info)
- [Technical Prerequisites](#technical-prerequisites)
- [Architecture](#architecture)
- [Folder Structure](#folder-structure)
- [Major Dependencies](#major-dependencies)
- [Run/Deploy with Docker](#rundeploy-with-docker)
- [Docker Compose](#docker-compose)
- [Development](#development)
- [Run it](#run-it)
- [Follow-up: Inspiration, Knowledge](#follow-up-inspiration-knowledge)
- [Tantiny](#tantiny)
- [Rails Multi-Model Search](#rails-multi-model-search)---
## Rationale
Most Notetaking apps do either too much (Notion), too little (Apple Notes) and lock me in (all options ever).
I wanted something that does **just-enough**â„¢, in the spirit of a _flat file cms_. Let me try and wrap it up in a few bullets:
- **ownership** of the notes (flat files)
markdown, yaml, attachments all in one place in directories
- **easy** on the eyes/mind
I don't want to see all the old stuff I may not need anymore
- a search that shows me **snips** in the notes
not just the notes in a sidebar
- a very simple **tagging** support
- basic **file uploads**
keeping the originals side by side with notesI like to keep things simple, so I once again fell for [Roda](https://roda.jeremyevans.net) as the Web Layer. [Tantiny](https://github.com/baygeldin/tantiny) is the kicker for this project. I was curious, if I could come up with something useful quickly, not having to deal with a complicated setup or Postgres as a requirement.
---
## Features / User Info
**Markdown Editor**
- Preview
- Supports auto-formatting with/around saving (on page refresh)**Attachments**
- supported attachments for uploads
- txt
- md
- png
- jpg
- jpeg
- heic
- webp
- yml
- yaml
- json**Screenshots**
---
---
## Technical Prerequisites
- Ruby v3.x are tested and ready to roll
- Install a stable version of [Rust](https://www.rust-lang.org/) with [Cargo](https://github.com/rust-lang/cargo)## Architecture
Little experiment on how it rolls:
- all GET gets HTML
- all POST sends FORMS/JSON gets JSON back
- all links/navigation are plain HTML `a` tags 🤯## Folder Structure
- `lib`: Library Code / Business Logic
- `views`: ERB Views
- `memos`: the Memos/Notes in subdirectories `YYYY/MM/DD/random-string`
- `public`: css/js/media
- `.tantiny`: the local index data created by the [tantiny](https://github.com/baygeldin/tantiny) gem## Major Dependencies
- Roda
- Tantiny
- RedCarpet## Run/Deploy with Docker
The included `Dockerfile` and the `docker-compose.yml` are more a stub to build upon.
Currently the Dockerfile support passing the USERNAME as an `build-arg`.
- `$ docker build . --build-arg USERNAME=$(whoami) -t labba`
- `$ docker run --rm -p9292:9292 labba`Either this way, or you adapt the Dockerfile to your needs.
Let's say your username on the server you run (or your machine) is `johndoe`, then your Dockerfile should look something like this:
```Dockerfile
# in your version of the Dockerfile, replace labradorite at the ARG USERNAME
ARG USERNAME=johndoe
```That will help you both secure the service and have the files being created with the proper rights on the host system.
### Docker Compose
build and/or up using: `$ USERNAME=$(whoami) docker-compose build`
**Volumes**
- this `memos` directory has all your created content in it. Having it mounted from your host should make easy for you to backup (if you don't use a private gitrepo for that 😉)
- fyi: having tantiny's index (`.tantiny`) as a volume has no benefit. Beware, it can easily have a negative impact.## Development
From v0.5.0 on, the project can only be run native on a Linux machine or in a Docker container. See the Dockerfiles and `justfile` for more information.
- `$ rake test` runs the test suite
- `$ rake reset_default_memos` resets the files to the repos defaults (e.g. for testing)
- `$ rake reset_memos` clears ALL memosBefore pushing code, you should always run `rake reset` and `rake test`,
**therefore have a repo you work on AND another you use JUST for running the software.**## Run it
Example docker-compose file:
```docker-compose
version: '3'
services:
app:
user: "${UID}:${GID}"
environment:
- USERNAME=yourusername # REPLACE THIS WITH YOUR VPS user's USERNAME
image: ghcr.io/simonneutert/labradorite-notebook:v0.2.0
# ports:
# - 9292:9292
command: bundle exec rackup -o0 -Eproduction
volumes:
- ./memos:/home/labradorite/memos:cached
```## Follow-up: Inspiration, Knowledge
#### Tantiny
https://github.com/baygeldin/tantiny
#### Rails Multi-Model Search
https://stevepolito.design/blog/search-across-multiple-models-in-rails/
Gist: a searchable table is to be added and kept updated using commit_hooks