summaryrefslogtreecommitdiff
path: root/README.md
blob: 303455ab2c4ee139e8f9baca4922db08ad31b6cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# snonux — Static microblog generator

snonux is the static microblog engine behind [snonux.foo](https://snonux.foo). It processes source files from an input directory into a self-contained static site with paginated HTML pages, an Atom feed, and themed WebGL backgrounds.

## Quick start

```sh
go build -o snonux ./cmd/snonux
./snonux --input ./inbox --output ./dist
```

## Creating posts

Drop files into the input directory (`./inbox` by default). Each file becomes one post. Supported formats:

### Plain text (.txt)

```
inbox/
  thoughts.txt
```

The text content is rendered as-is into a post.

### Markdown (.md)

```
inbox/
  update.md
```

Standard Markdown is converted to HTML (GitHub Flavored Markdown supported). Raw HTML blocks are passed through.

### Markdown with embedded images

Reference a local image from your Markdown file using standard `![alt](filename)` syntax. Place the image file in the same input directory:

```
inbox/
  update.md
  screenshot.png
```

Where `update.md` contains:

```markdown
Check out this screenshot!

![screenshot](screenshot.png)

Pretty neat, right?
```

The image file is automatically copied into the post's asset directory, and the `<img>` src is rewritten to the correct path. The image file is consumed together with the Markdown file and removed from the input directory after processing.

**Note:** The image filename in the Markdown must match the actual file in the inbox. Remote URLs (`http://`, `https://`) are left as-is and not downloaded.

### Images (.png, .jpg, .gif)

```
inbox/
  photo.jpg
```

A standalone image file becomes its own post. Images wider than 1024px are downscaled and re-encoded as JPEG at 80% quality.

### Audio (.mp3)

```
inbox/
  voice-note.mp3
```

An audio file becomes a post with an embedded HTML5 audio player.

### After processing

All source files are removed from the input directory once they have been successfully processed into the output directory.

## Command-line flags

```
--input DIR      Input directory for new source files (default: ./inbox)
--output DIR     Output directory for generated site (default: ./dist)
--base-url URL   Base URL for Atom feed links (default: https://snonux.foo)
--theme NAME     Visual theme, or "random" (default: random)
--sync           Rsync output to pi0/pi1 after generation
--list-themes    Print available theme names and exit
--version        Print version and exit
```

## Themes

Each run can use a different visual theme. Use `--list-themes` to see all available themes, or `--theme random` (the default) to pick one at random.

## Output structure

```
dist/
  index.html                        # Page 1 (newest posts)
  page2.html                        # Page 2, etc.
  atom.xml                          # Atom feed (last 42 entries)
  favicon.ico
  posts/
    2026-04-16-120000/
      post.json                     # Post metadata and rendered HTML
      screenshot.png                # Asset (if any)
    ...
```

## License

See [LICENSE](LICENSE).