diff --git a/.zs/embed.html b/.zs/embed.html
new file mode 100644
index 0000000..8b3cf50
--- /dev/null
+++ b/.zs/embed.html
@@ -0,0 +1,3 @@
+# {{ title }}
+
+{{ content }}
diff --git a/.zs/index b/.zs/index
new file mode 100755
index 0000000..e08838c
--- /dev/null
+++ b/.zs/index
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+#set -e
+
+if [ ! $# = 1 ]; then
+ printf >&2 "Usage: %s [ext]\n" "$(basename "$0")"
+ exit 0
+fi
+
+printf >&2 "hello world from %s" "$p"
+
+p="$1"
+t="${2:-md}"
+
+if [ ! -d "$p" ]; then
+ printf >&2 "error: path %s not found\n" "$p"
+ exit 1
+fi
+
+find "$p" -type f -name "*.$t" | sort -r | while read -r file; do
+ name="${file#"$p"}"
+ name="${name#"/"}"
+ name="${name%.*}"
+ # skip the index
+ if [ "$name" = "index" ]; then continue; fi
+
+ title="$(zs vars "$file" title)"
+ if [ -z "$title" ]; then
+ title="$name"
+ fi
+
+ postdate="$(zs vars "$file" postdate)"
+ if [ -z "$postdate" ]; then
+ inputdate=$(basename $file | cut -d- -f1-3)
+ postdate=$(date -j -f "%Y-%m-%d" "$inputdate" "+%h %Y")
+ fi
+
+ echo "- $postdate [$title](${p}/${name}.html)"
+done
diff --git a/.zs/latest b/.zs/latest
new file mode 100755
index 0000000..fcde272
--- /dev/null
+++ b/.zs/latest
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -e
+
+if [ ! $# = 1 ]; then
+ printf >&2 "Usage: %s [ext]\n" "$(basename "$0")"
+ exit 0
+fi
+
+p="$1"
+t="${2:-md}"
+
+if [ ! -d "$p" ]; then
+ printf >&2 "error: path %s not found\n" "$p"
+ exit 1
+fi
+
+find "$p" -type f -name "*.$t" | grep -v 'index.md$' | sort -r | head -n1 | while read -r file; do
+ ZS_LAYOUT=embed.html zs build $file
+done
diff --git a/writing/index.md b/writing/index.md
index 631ee76..e3c4df0 100644
--- a/writing/index.md
+++ b/writing/index.md
@@ -1 +1,6 @@
-writing
+all posts (rss feed in the works...)
+
+{{ latest writing }}
+
+### all posts
+{{ index writing }}