texted 0.2.0

A markdown blog platform that lets you in control of your data
Documentation
  <a href="https://gitlab.com/thiagomg/texted2"><img height="100%"
   src="https://gitlab.com/thiagomg/texted2/-/raw/62124a2716d0f702f42d2700788c6528e71f6af1/Texted-logo.png"></a>

# Texted 2 - Free your text!

Why did I create one blog system instead of using some existing blog platform?

1. I am writing in some other platforms, such as [dev.to/thiagomg]https://dev.to/thiagomg however if they lose their data or close their platform, I don't want to lose what I've written
2. I wanted to learn Rust, therefore I created a blog system
3. If I get the blog posts, with the way they are structured here and add to github/gitlab/etc, it will just work.

## Getting started

Installing

```bash
cargo install texted
```

Generating a sample configuration

```bash
# Generates a config file in the current directory
texted --generate-cfg -c texted.toml

# Or to generate in the default config directory
texted --generate-cfg
```

### Building from sources

How to build?

```bash
cargo build --release
```

How to run?

```bash
cargo run --bin texted
```

## How to personalise my site?

You can create your HTML templates using [mustache templates](https://mustache.github.io). The examples show all supported fields

Templates can have images, css and js, etc. Those support files should live in the public directory

In the file `texted.toml`, you can configure the location in the keys:

- template_dir
- public_dir

## How to add posts and pages?

Posts live in the directory pointed in the configuration key `posts_dir` and pages in the key `pages_dir`

The only difference between pages and posts are:

1. Pages are rendered using page.tpl template. Posts are rendered using view.tpl template
2. Posts are listed the the list API (`server-address/list`) while pages are not listed

From now on, all said about posts directory structure also is the same for pages

There are 2 ways to add posts. Inside posts configured directory, you can create a mardown file or a directory.

### File posts

Let's say your server is running in your local host, port 8080 (127.0.0.1:8080) and posts are inside the post directory.

File posts are text-only posts (or posts without local images). The file name will be used as url. E.g.

The file `post/post_without_images.md` will be accesible using the url `http://127.0.0.1:8080/view/post_without_images`

### Directory posts

Directories containing a file `index.md` (configurable in the file `texted.toml`), will be treated as a post. E.g.

The directory `post/post_with_image` will be accesible using the url `http://127.0.0.1:8080/view/post_with_image`

## Structure of a post

### Header

Each post or page markdown file contains a header with a unique identification, date and author. It is followed by the post title.

```
[ID]: # (21c1e9ad-4ebb-4168-a543-fbf77cc35a85)
[DATE]: # (2024-02-12 22:54:00.000)
[AUTHOR]: # (thiago)

# How does it work?
```

Everything after that is the body of the post

### More

In the post list, what is presented is a part of the post body. To determine when it stops, you add the `<!-- more -->` tag.

See `post_without_images.md` or `post_with_image/index.md` for an example

### Tip

If you run the texted-post binary, it will create a post skeleton with header, title and sample body to you.