summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore16
-rw-r--r--Makefile183
-rw-r--r--deps.mk47
-rwxr-xr-xmkdeps.sh30
-rw-r--r--src/about.adoc3
-rw-r--r--src/atom.svg5
-rw-r--r--src/base.conf14
-rw-r--r--src/blog.adoc3
-rw-r--r--src/blog/1970/01/01/launch.adoc29
-rw-r--r--src/blog/2000/01/01/feature-ann.adoc29
-rw-r--r--src/envelope.svg4
-rw-r--r--src/favicon.svg62
-rw-r--r--src/headers.txt4
-rw-r--r--src/index.adoc3
-rw-r--r--src/link.svg5
-rw-r--r--src/lock.svg4
-rw-r--r--src/pricing.adoc3
-rw-r--r--src/privacy.adoc3
-rw-r--r--src/style.css30
-rw-r--r--src/terms.adoc3
20 files changed, 480 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c523ba4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+/src/blog/*/*/*/*.htmlbody
+/src/blog/*/*/*/*.conf
+/src/blog/*/*/*/*.snippets
+/src/blog/*/*/*/*.html
+/src/blog/*/*/*/*.txt
+/src/blog/*/*/*/*.indexentry
+/src/blog/*/*/*/*.feedentry
+/src/blog/*/*/*/*.sortdata
+/src/*.htmlbody
+/src/*.conf
+/src/*.snippets
+/src/*.html
+/src/*.txt
+/src/*.sortdata
+/src/*.xml
+/src/*.sentinel
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..a2ca0fc
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,183 @@
+.POSIX:
+DATE = 1970-01-01
+VERSION = 0.1.0
+NAME = website
+NAME_UC = $(NAME)
+LANGUAGES = en
+## Installation prefix. Defaults to "/usr".
+PREFIX = /usr
+BINDIR = $(PREFIX)/bin
+LIBDIR = $(PREFIX)/lib
+INCLUDEDIR = $(PREFIX)/include
+SRCDIR = $(PREFIX)/src/$(NAME)
+SHAREDIR = $(PREFIX)/share
+LOCALEDIR = $(SHAREDIR)/locale
+MANDIR = $(SHAREDIR)/man
+DOCDIR = $(SHAREDIR)/doc/$(NAME)
+EXEC = ./
+## Where to store the installation. Empty by default.
+DESTDIR =
+LDLIBS =
+
+
+
+.SUFFIXES:
+.SUFFIXES: .adoc .htmlbody .conf .snippets .html .indexentry .feedentry
+.SUFFIXES: .sortdata .xml
+
+.adoc.conf:
+ mkwb conf src/base.conf src/global.conf $< > $@
+
+.adoc.htmlbody:
+ mkwb htmlbody $< > $@
+
+.htmlbody.html:
+ mkwb html $< > $@
+
+.adoc.snippets:
+ mkwb snippets $< > $@
+
+.conf.indexentry:
+ mkwb indexentry $< > $@
+
+.htmlbody.feedentry:
+ mkwb feedentry $< > $@
+
+.conf.sortdata:
+ mkwb sortdata $< > $@
+
+
+
+all:
+include deps.mk
+
+
+sources.adoc = $(articles.adoc) $(pages.adoc)
+sources.htmlbody = $(sources.adoc:.adoc=.htmlbody)
+sources.html = $(sources.adoc:.adoc=.html)
+sources.snippets = $(sources.adoc:.adoc=.snippets)
+sources.conf = $(sources.adoc:.adoc=.conf)
+articles.indexentry = $(articles.adoc:.adoc=.indexentry)
+articles.feedentry = $(articles.adoc:.adoc=.feedentry)
+articles.sortdata = $(articles.adoc:.adoc=.sortdata)
+
+sources = \
+ $(sources.adoc) \
+ $(images.svg) \
+ src/style.css \
+
+contents = \
+ $(sources.html) \
+ src/atom.xml \
+ src/blog.html \
+
+static-contents = \
+ $(images.svg) \
+ src/style.css \
+
+
+derived-assets = \
+ $(contents) \
+ $(sources.htmlbody) \
+ $(sources.snippets) \
+ $(sources.conf) \
+ src/global.conf \
+ $(articles.indexentry) \
+ $(articles.feedentry) \
+ $(articles.sortdata) \
+ out/.gitignore \
+
+side-assets = \
+ src/blog/*/*/*/*.html*.txt \
+ src/*.html.*.txt \
+ src/*.sortdata \
+ out/ \
+
+
+
+## Default target. Builds all artifacts required for testing
+## and installation.
+all: $(derived-assets)
+
+
+$(derived-assets): Makefile deps.mk
+$(sources.conf): src/global.conf
+
+
+src/global.conf: src/base.conf
+ mkwb conf src/base.conf > $@
+
+src/atom.xml src/blog.html: $(articles.sortdata) src/base.conf src/global.conf
+
+src/atom.xml: $(articles.feedentry)
+ mkwb feed src/base.conf src/global.conf $(articles.sortdata) > $@
+
+src/blog.html: $(articles.indexentry) src/blog.htmlbody
+ mkwb indexbody $*.conf $(articles.sortdata) | cat $*.htmlbody - > $@-t
+ mkwb html $@-t > $@
+ rm -f $@-t
+
+out/.gitignore:
+ mkdir -p $(@D)
+ echo '*' > $@
+
+
+
+check-unit:
+
+
+integration-tests = \
+
+.PRECIOUS: $(integration-tests)
+$(integration-tests): ALWAYS
+ sh $@
+
+check-integration: $(integration-tests)
+
+
+## Run all tests. Each test suite is isolated, so that a parallel
+## build can run tests at the same time. The required artifacts
+## are created if missing.
+check: check-unit check-integration
+
+
+
+## Remove *all* derived artifacts produced during the build.
+## A dedicated test asserts that this is always true.
+clean:
+ rm -rf $(derived-assets) $(side-assets)
+
+
+## Installs into $(DESTDIR)$(PREFIX). Its dependency target
+## ensures that all installable artifacts are crafted beforehand.
+install: all
+ mkdir -p \
+ '$(DESTDIR)$(SRCDIR)' \
+
+ for f in $(contents) $(static-contents) `cat $(sources.snippets)`; do \
+ dir='$(DESTDIR)$(DOCDIR)'/"`dirname "$${f#src/}"`"; \
+ mkdir -p "$$dir"; \
+ cp -P "$$f" "$$dir"; \
+ done
+ for f in $(sources); do \
+ dir='$(DESTDIR)$(SRCDIR)'/"`dirname "$${f#src/}"`"; \
+ mkdir -p "$$dir"; \
+ cp -P "$$f" "$$dir"; \
+ done
+
+## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror
+## of the "install" target, and removes *all* that was installed.
+## A dedicated test asserts that this is always true.
+uninstall:
+ rm -rf \
+ '$(DESTDIR)$(SRCDIR)' \
+ '$(DESTDIR)$(DOCDIR)' \
+
+
+
+## Run it locally.
+run:
+ serve -n -p 3333 -d out/share/doc/website/
+
+
+ALWAYS:
diff --git a/deps.mk b/deps.mk
new file mode 100644
index 0000000..e28deed
--- /dev/null
+++ b/deps.mk
@@ -0,0 +1,47 @@
+articles.adoc = \
+ src/blog/1970/01/01/launch.adoc \
+ src/blog/2000/01/01/feature-ann.adoc \
+
+pages.adoc = \
+ src/about.adoc \
+ src/blog.adoc \
+ src/index.adoc \
+ src/pricing.adoc \
+ src/privacy.adoc \
+ src/terms.adoc \
+
+images.svg = \
+ src/atom.svg \
+ src/envelope.svg \
+ src/favicon.svg \
+ src/link.svg \
+ src/lock.svg \
+
+src/blog/1970/01/01/launch.htmlbody src/blog/1970/01/01/launch.snippets src/blog/1970/01/01/launch.conf: src/blog/1970/01/01/launch.adoc
+src/blog/2000/01/01/feature-ann.htmlbody src/blog/2000/01/01/feature-ann.snippets src/blog/2000/01/01/feature-ann.conf: src/blog/2000/01/01/feature-ann.adoc
+src/about.htmlbody src/about.snippets src/about.conf: src/about.adoc
+src/blog.htmlbody src/blog.snippets src/blog.conf: src/blog.adoc
+src/index.htmlbody src/index.snippets src/index.conf: src/index.adoc
+src/pricing.htmlbody src/pricing.snippets src/pricing.conf: src/pricing.adoc
+src/privacy.htmlbody src/privacy.snippets src/privacy.conf: src/privacy.adoc
+src/terms.htmlbody src/terms.snippets src/terms.conf: src/terms.adoc
+src/blog/1970/01/01/launch.snippets: src/blog/1970/01/01/launch.adoc
+src/blog/2000/01/01/feature-ann.snippets: src/blog/2000/01/01/feature-ann.adoc
+src/about.snippets: src/about.adoc
+src/blog.snippets: src/blog.adoc
+src/index.snippets: src/index.adoc
+src/pricing.snippets: src/pricing.adoc
+src/privacy.snippets: src/privacy.adoc
+src/terms.snippets: src/terms.adoc
+src/blog/1970/01/01/launch.html: src/blog/1970/01/01/launch.conf src/blog/1970/01/01/launch.htmlbody
+src/blog/2000/01/01/feature-ann.html: src/blog/2000/01/01/feature-ann.conf src/blog/2000/01/01/feature-ann.htmlbody
+src/about.html: src/about.conf src/about.htmlbody
+src/blog.html: src/blog.conf src/blog.htmlbody
+src/index.html: src/index.conf src/index.htmlbody
+src/pricing.html: src/pricing.conf src/pricing.htmlbody
+src/privacy.html: src/privacy.conf src/privacy.htmlbody
+src/terms.html: src/terms.conf src/terms.htmlbody
+src/blog/1970/01/01/launch.feedentry: src/blog/1970/01/01/launch.conf src/blog/1970/01/01/launch.htmlbody
+src/blog/2000/01/01/feature-ann.feedentry: src/blog/2000/01/01/feature-ann.conf src/blog/2000/01/01/feature-ann.htmlbody
+src/blog/1970/01/01/launch.sortdata: src/blog/1970/01/01/launch.conf
+src/blog/2000/01/01/feature-ann.sortdata: src/blog/2000/01/01/feature-ann.conf
diff --git a/mkdeps.sh b/mkdeps.sh
new file mode 100755
index 0000000..f319779
--- /dev/null
+++ b/mkdeps.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+set -eu
+
+export LANG=POSIX.UTF-8
+
+
+articles() {
+ find src/*/ -type f -name '*.adoc' | sort
+}
+
+pages() {
+ find src/*.adoc -type f | sort
+}
+
+files() {
+ articles
+ pages
+}
+
+
+articles | varlist 'articles.adoc'
+pages | varlist 'pages.adoc'
+find src/*.svg | varlist 'images.svg'
+
+
+files | sed 's/^\(.*\)\.adoc$/\1.htmlbody\t\1.snippets\t\1.conf:\t\1.adoc/'
+files | sed 's/^\(.*\)\.adoc$/\1.snippets:\t\1.adoc/'
+files | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.conf\t\1.htmlbody/'
+articles | sed 's/^\(.*\)\.adoc$/\1.feedentry:\t\1.conf\t\1.htmlbody/'
+articles | sed 's/^\(.*\)\.adoc$/\1.sortdata:\t\1.conf/'
diff --git a/src/about.adoc b/src/about.adoc
new file mode 100644
index 0000000..8f8dd75
--- /dev/null
+++ b/src/about.adoc
@@ -0,0 +1,3 @@
+= About
+
+== It's a good service
diff --git a/src/atom.svg b/src/atom.svg
new file mode 100644
index 0000000..37bace2
--- /dev/null
+++ b/src/atom.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
+ <path d="M576 1344q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm512 123q2 28-17 48-18 21-47 21h-135q-25 0-43-16.5t-20-41.5q-22-229-184.5-391.5t-391.5-184.5q-25-2-41.5-20t-16.5-43v-135q0-29 21-47 17-17 43-17h5q160 13 306 80.5t259 181.5q114 113 181.5 259t80.5 306zm512 2q2 27-18 47-18 20-46 20h-143q-26 0-44.5-17.5t-19.5-42.5q-12-215-101-408.5t-231.5-336-336-231.5-408.5-102q-25-1-42.5-19.5t-17.5-43.5v-143q0-28 20-46 18-18 44-18h3q262 13 501.5 120t425.5 294q187 186 294 425.5t120 501.5z"
+ fill="#EA990E" />
+</svg>
diff --git a/src/base.conf b/src/base.conf
new file mode 100644
index 0000000..7144806
--- /dev/null
+++ b/src/base.conf
@@ -0,0 +1,14 @@
+export root_dir=src
+export header_links=src/headers.txt
+export url_pre='https://papo.im'
+export domain='papo.im'
+export email='info@papo.im'
+export list_addr='~euandreh/papoim@lists.sr.ht'
+export discussions_url_prefix='https://lists.sr.ht/~euandreh/papoim?search='
+export sourcecode_url='https://papo.im/git/website'
+export sourcecode_url_prefix="$sourcecode_url/tree"
+export author='papo.im'
+export site_name='papo.im: chat with freedom'
+export feed_title='Articles from papo.im'
+export feed_url='atom.xml'
+export feed_alternate_url='blog.html'
diff --git a/src/blog.adoc b/src/blog.adoc
new file mode 100644
index 0000000..0694540
--- /dev/null
+++ b/src/blog.adoc
@@ -0,0 +1,3 @@
+= Blog
+
+== Recent articles link:atom.xml[image:atom.svg[Standard orange RSS feed icon]]
diff --git a/src/blog/1970/01/01/launch.adoc b/src/blog/1970/01/01/launch.adoc
new file mode 100644
index 0000000..9a57dfe
--- /dev/null
+++ b/src/blog/1970/01/01/launch.adoc
@@ -0,0 +1,29 @@
+////
+export sort=1
+export updatedat=1971-02-03
+////
+
+= Service launch! That's it "$quote" && more
+
+////
+
+papo.im, the private team chat, is now available
+
+papo.im, the compatible team chat, is now available
+
+////
+
+== papo.im, the unwalled team chat, is now available
+
+https://papo.im[papo.im] is the hosted instance of papo and provides paid
+services to its users.
+
+// https://drewdevault.com/2018/11/15/sr.ht-general-availability.html
+
+== titulo
+
+primeiro
+
+== titulo
+
+segundo
diff --git a/src/blog/2000/01/01/feature-ann.adoc b/src/blog/2000/01/01/feature-ann.adoc
new file mode 100644
index 0000000..c7c3cca
--- /dev/null
+++ b/src/blog/2000/01/01/feature-ann.adoc
@@ -0,0 +1,29 @@
+= Feature announcement
+
+== New feature X
+
+X is launched.
+
+----
+$ ls
+----
+
+Inline `code` here.
+
+Block.
+
+----
+$ seq 10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+----
+
+End.
diff --git a/src/envelope.svg b/src/envelope.svg
new file mode 100644
index 0000000..c2251f4
--- /dev/null
+++ b/src/envelope.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
+ <path d="M1664 1504v-768q-32 36-69 66-268 206-426 338-51 43-83 67t-86.5 48.5-102.5 24.5h-2q-48 0-102.5-24.5t-86.5-48.5-83-67q-158-132-426-338-37-30-69-66v768q0 13 9.5 22.5t22.5 9.5h1472q13 0 22.5-9.5t9.5-22.5zm0-1051v-24.5l-.5-13-3-12.5-5.5-9-9-7.5-14-2.5h-1472q-13 0-22.5 9.5t-9.5 22.5q0 168 147 284 193 152 401 317 6 5 35 29.5t46 37.5 44.5 31.5 50.5 27.5 43 9h2q20 0 43-9t50.5-27.5 44.5-31.5 46-37.5 35-29.5q208-165 401-317 54-43 100.5-115.5t46.5-131.5zm128-37v1088q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-1088q0-66 47-113t113-47h1472q66 0 113 47t47 113z" />
+</svg>
diff --git a/src/favicon.svg b/src/favicon.svg
new file mode 100644
index 0000000..ce566b2
--- /dev/null
+++ b/src/favicon.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
+ <path d="M 0 8 L 1 8 L 1 9 L 0 9 L 0 8 Z" />
+ <path d="M 0 13 L 1 13 L 1 14 L 0 14 L 0 13 Z" />
+ <path d="M 1 8 L 2 8 L 2 9 L 1 9 L 1 8 Z" />
+ <path d="M 1 13 L 2 13 L 2 14 L 1 14 L 1 13 Z" />
+ <path d="M 2 8 L 3 8 L 3 9 L 2 9 L 2 8 Z" />
+ <path d="M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 Z" />
+ <path d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" />
+ <path d="M 3 13 L 4 13 L 4 14 L 3 14 L 3 13 Z" />
+ <path d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" />
+ <path d="M 4 8 L 5 8 L 5 9 L 4 9 L 4 8 Z" />
+ <path d="M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 Z" />
+ <path d="M 5 6 L 6 6 L 6 7 L 5 7 L 5 6 Z" />
+ <path d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" />
+ <path d="M 5 13 L 6 13 L 6 14 L 5 14 L 5 13 Z" />
+ <path d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z" />
+ <path d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z" />
+ <path d="M 6 14 L 7 14 L 7 15 L 6 15 L 6 14 Z" />
+ <path d="M 7 1 L 8 1 L 8 2 L 7 2 L 7 1 Z" />
+ <path d="M 7 14 L 8 14 L 8 15 L 7 15 L 7 14 Z" />
+ <path d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" />
+ <path d="M 7 2 L 8 2 L 8 3 L 7 3 L 7 2 Z" />
+ <path d="M 7 3 L 8 3 L 8 4 L 7 4 L 7 3 Z" />
+ <path d="M 7 4 L 8 4 L 8 5 L 7 5 L 7 4 Z" />
+ <path d="M 7 5 L 8 5 L 8 6 L 7 6 L 7 5 Z" />
+ <path d="M 8 1 L 9 1 L 9 2 L 8 2 L 8 1 Z" />
+ <path d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" />
+ <path d="M 9 1 L 10 1 L 10 2 L 9 2 L 9 1 Z" />
+ <path d="M 9 2 L 10 2 L 10 3 L 9 3 L 9 2 Z" />
+ <path d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z" />
+ <path d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" />
+ <path d="M 10 2 L 11 2 L 11 3 L 10 3 L 10 2 Z" />
+ <path d="M 10 3 L 11 3 L 11 4 L 10 4 L 10 3 Z" />
+ <path d="M 10 4 L 11 4 L 11 5 L 10 5 L 10 4 Z" />
+ <path d="M 10 5 L 11 5 L 11 6 L 10 6 L 10 5 Z" />
+ <path d="M 10 6 L 11 6 L 11 7 L 10 7 L 10 6 Z" />
+ <path d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z" />
+ <path d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" />
+ <path d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" />
+ <path d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" />
+ <path d="M 11 12 L 12 12 L 12 13 L 11 13 L 11 12 Z" />
+ <path d="M 11 14 L 12 14 L 12 15 L 11 15 L 11 14 Z" />
+ <path d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" />
+ <path d="M 12 6 L 13 6 L 13 7 L 12 7 L 12 6 Z" />
+ <path d="M 12 8 L 13 8 L 13 9 L 12 9 L 12 8 Z" />
+ <path d="M 12 10 L 13 10 L 13 11 L 12 11 L 12 10 Z" />
+ <path d="M 12 12 L 13 12 L 13 13 L 12 13 L 12 12 Z" />
+ <path d="M 12 14 L 13 14 L 13 15 L 12 15 L 12 14 Z" />
+ <path d="M 13 6 L 14 6 L 14 7 L 13 7 L 13 6 Z" />
+ <path d="M 13 8 L 14 8 L 14 9 L 13 9 L 13 8 Z" />
+ <path d="M 13 10 L 14 10 L 14 11 L 13 11 L 13 10 Z" />
+ <path d="M 13 12 L 14 12 L 14 13 L 13 13 L 13 12 Z" />
+ <path d="M 13 13 L 14 13 L 14 14 L 13 14 L 13 13 Z" />
+ <path d="M 13 14 L 14 14 L 14 15 L 13 15 L 13 14 Z" />
+ <path d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z" />
+ <path d="M 14 8 L 15 8 L 15 9 L 14 9 L 14 8 Z" />
+ <path d="M 14 9 L 15 9 L 15 10 L 14 10 L 14 9 Z" />
+ <path d="M 14 10 L 15 10 L 15 11 L 14 11 L 14 10 Z" />
+ <path d="M 14 11 L 15 11 L 15 12 L 14 12 L 14 11 Z" />
+ <path d="M 14 12 L 15 12 L 15 13 L 14 13 L 14 12 Z" />
+</svg>
diff --git a/src/headers.txt b/src/headers.txt
new file mode 100644
index 0000000..fd144b9
--- /dev/null
+++ b/src/headers.txt
@@ -0,0 +1,4 @@
+./ Home
+blog.html Blog
+pricing.html Pricing
+about.html About
diff --git a/src/index.adoc b/src/index.adoc
new file mode 100644
index 0000000..b976139
--- /dev/null
+++ b/src/index.adoc
@@ -0,0 +1,3 @@
+= papo.im
+
+== Team chat with privacy
diff --git a/src/link.svg b/src/link.svg
new file mode 100644
index 0000000..e5c7050
--- /dev/null
+++ b/src/link.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="22" height="22" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+ <path fill-rule="evenodd"
+ d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z" />
+</svg>
diff --git a/src/lock.svg b/src/lock.svg
new file mode 100644
index 0000000..1a4a18e
--- /dev/null
+++ b/src/lock.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
+ <path d="M640 768h512v-192q0-106-75-181t-181-75-181 75-75 181v192zm832 96v576q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-576q0-40 28-68t68-28h32v-192q0-184 132-316t316-132 316 132 132 316v192h32q40 0 68 28t28 68z" />
+</svg>
diff --git a/src/pricing.adoc b/src/pricing.adoc
new file mode 100644
index 0000000..5318ba6
--- /dev/null
+++ b/src/pricing.adoc
@@ -0,0 +1,3 @@
+= Pricing
+
+It's very affordable, you know?
diff --git a/src/privacy.adoc b/src/privacy.adoc
new file mode 100644
index 0000000..a77b26c
--- /dev/null
+++ b/src/privacy.adoc
@@ -0,0 +1,3 @@
+= Privacy Policy
+
+// https://man.sr.ht/privacy.md
diff --git a/src/style.css b/src/style.css
new file mode 100644
index 0000000..4b8201f
--- /dev/null
+++ b/src/style.css
@@ -0,0 +1,30 @@
+body {
+ margin: 0px auto;
+ max-width: 750px;
+ padding: 1%;
+}
+
+pre, code {
+ background-color: #ddd;
+ border-radius: 5px;
+ padding: 5px;
+}
+
+@media(prefers-color-scheme: dark) {
+ :root {
+ color: white;
+ background-color: black;
+ }
+
+ a {
+ color: hsl(211, 100%, 60%);
+ }
+
+ a:visited {
+ color: hsl(242, 100%, 80%);
+ }
+
+ pre, code {
+ background-color: #222;
+ }
+}
diff --git a/src/terms.adoc b/src/terms.adoc
new file mode 100644
index 0000000..cecbc54
--- /dev/null
+++ b/src/terms.adoc
@@ -0,0 +1,3 @@
+= Terms of Service
+
+// https://man.sr.ht/terms.md