esync

Directory watching and remote syncing
Log | Files | Refs | README | LICENSE

commit 0da912f9c96725bff615d4fbb08ffdd1b44e6467
parent 00ce72ee9e39b9bb3cb1265ef4b9fd8359699307
Author: Erik Loualiche <[email protected]>
Date:   Sun,  1 Mar 2026 21:03:42 -0600

docs: add demo directory with VHS tape and animated gif

Move demo tape into demo/ with its own esync.toml, sample project
files, and pre-recorded gif. Update README with centered hero section
matching podcast-go style.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

Diffstat:
M.gitignore | 2+-
MREADME.md | 13+++++++++++--
Ddemo.tape | 113-------------------------------------------------------------------------------
Ademo/.gitignore | 2++
Ademo/README.md | 3+++
Ademo/config/secrets.env | 2++
Ademo/config/settings.toml | 2++
Ademo/demo.gif | 0
Ademo/demo.tape | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ademo/esync.toml | 10++++++++++
Ademo/src/handler.go | 5+++++
Ademo/src/main.go | 7+++++++
12 files changed, 112 insertions(+), 116 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -20,5 +20,5 @@ esync # temporary ignores test-sync tests -esync.toml +/esync.toml sync.log diff --git a/README.md b/README.md @@ -1,8 +1,17 @@ -# esync +<div align="center"> + +<h1>esync</h1> +<h3>Watch local files and sync them with rsync, shown in a live TUI</h3> [![Vibecoded](https://img.shields.io/badge/vibecoded-%E2%9C%A8-blueviolet)](https://claude.ai) -A lightweight file synchronization tool that watches your local directory for changes and automatically syncs them to a local or remote destination using rsync. +<a href="demo/demo.gif"> +<img src="demo/demo.gif" width="800" alt="Demo of esync TUI" /> +</a> + +</div> + +*** ## Installation diff --git a/demo.tape b/demo.tape @@ -1,113 +0,0 @@ -# ───────────────────────────────────────────────────────────────────────────── -# esync demo — watch local files and sync them with rsync, shown in a live TUI -# -# Usage: vhs demo.tape -# Requires: go, rsync, vhs (https://github.com/charmbracelet/vhs) -# ───────────────────────────────────────────────────────────────────────────── - -Output demo.gif -Require rsync - -Set Shell "bash" -Set FontSize 14 -Set Width 1200 -Set Height 600 -Set TypingSpeed 50ms -Set Theme "Catppuccin Mocha" -Set Padding 20 -Set WindowBar Colorful -Set WindowBarSize 40 - -# ── Hidden setup ──────────────────────────────────────────────────────────── -Hide - -# Build esync from the current repo -Type "go build -o /tmp/esync-bin/esync . 2>/dev/null" -Enter -Sleep 3s -Type "export PATH=/tmp/esync-bin:$PATH" -Enter -Sleep 500ms - -# Clean previous runs -Type "rm -rf /tmp/esync-demo /tmp/esync" -Enter -Sleep 500ms - -# Create a demo project with source files from this repo -Type "mkdir -p /tmp/esync-demo/project/{cmd,internal/{tui,config,syncer,watcher}}" -Enter -Sleep 300ms -Type "cp main.go go.mod go.sum README.md /tmp/esync-demo/project/" -Enter -Sleep 300ms -Type "cp cmd/*.go /tmp/esync-demo/project/cmd/" -Enter -Sleep 300ms -Type "cp internal/tui/*.go /tmp/esync-demo/project/internal/tui/" -Enter -Sleep 300ms -Type "cp internal/config/*.go /tmp/esync-demo/project/internal/config/" -Enter -Sleep 300ms -Type "cp internal/syncer/*.go /tmp/esync-demo/project/internal/syncer/" -Enter -Sleep 300ms -Type "cp internal/watcher/*.go /tmp/esync-demo/project/internal/watcher/" -Enter -Sleep 300ms - -# Write a minimal config file -Type `cat > /tmp/esync-demo/project/esync.toml << 'EOF' -[sync] -local = "." -remote = "/tmp/esync" - -[settings] -ignore = [".git", "node_modules", ".DS_Store", "build"] - -[settings.rsync] -archive = true -compress = false -EOF` -Enter -Sleep 500ms - -Type "cd /tmp/esync-demo/project" -Enter -Sleep 300ms - -Show - -# ── Demo ──────────────────────────────────────────────────────────────────── - -# 1. Show the project -Type "ls" -Enter -Sleep 2s - -# 2. Show the config file -Type "cat esync.toml" -Enter -Sleep 4s - -# 3. Preview what will be synced -Type "esync check" -Enter -Sleep 5s - -# 4. Queue background file edits (fire while the TUI is running) -Hide -Type '(sleep 5 && echo "// refactored handler" >> /tmp/esync-demo/project/cmd/sync.go && sleep 3 && printf "package cmd\n\nfunc Version() string { return \"1.0\" }\n" > /tmp/esync-demo/project/cmd/version.go && sleep 3 && echo "// updated styles" >> /tmp/esync-demo/project/internal/tui/styles.go) &' -Enter -Sleep 300ms -Show - -# 5. Launch the TUI — file changes sync in real time -Type "esync sync" -Enter -Sleep 16s - -# 6. Quit -Type "q" -Sleep 1s diff --git a/demo/.gitignore b/demo/.gitignore @@ -0,0 +1,2 @@ +# VHS output +*.gif diff --git a/demo/README.md b/demo/README.md @@ -0,0 +1,3 @@ +# Demo Project + +Sample files for the esync demo. diff --git a/demo/config/secrets.env b/demo/config/secrets.env @@ -0,0 +1,2 @@ +API_KEY=sk-demo-12345 +DB_PASSWORD=hunter2 diff --git a/demo/config/settings.toml b/demo/config/settings.toml @@ -0,0 +1,2 @@ +title = "demo" +debug = false diff --git a/demo/demo.gif b/demo/demo.gif Binary files differ. diff --git a/demo/demo.tape b/demo/demo.tape @@ -0,0 +1,69 @@ +# ───────────────────────────────────────────────────────────────────────────── +# esync demo — watch local files and sync them with rsync, shown in a live TUI +# +# Usage: cd demo && vhs demo.tape +# Requires: esync, rsync, bat, vhs (https://github.com/charmbracelet/vhs) +# ───────────────────────────────────────────────────────────────────────────── + +Output demo.gif +Require rsync +Require bat + +Set FontSize 20 +Set Width 1200 +Set Height 600 +Set Padding 20 +Set Theme "GruvboxDarkHard" + +Set TypingSpeed 100ms + +Set Shell "bash" + + +# ── Hidden setup ──────────────────────────────────────────────────────────── +Hide + Type 'export PS1="> "' + Enter + # Clear the screen + Type "clear" + Enter + Type "rm -rf /tmp/esync-demo" + Enter + # Sleep 100ms +Show + + +# ── Demo ────────────────────────────────────────────────────────────────── + +# 1. Show the config +Type "bat esync.toml" +Enter +Sleep 4s + +# 2. Show the project files +Type "ls" +Enter +Sleep 2s + +# 3. Preview what will be synced +Type "esync check" +Sleep 500ms +Enter +Sleep 5s + +# 4. Queue background file edits (fire while the TUI is running) +Hide + Type '(sleep 5 && echo "// refactored" >> src/handler.go && sleep 3 && echo "// updated" >> config/settings.toml && sleep 3 && echo "// new file" > src/utils.go) &' + Enter + Sleep 300ms +Show + +# 5. Launch the TUI — file changes sync in real time +Type "esync sync" +Sleep 500ms +Enter +Sleep 10s + +# 6. Quit +Type "q" +Sleep 1s diff --git a/demo/esync.toml b/demo/esync.toml @@ -0,0 +1,10 @@ +[sync] +local = "." +remote = "/tmp/esync-demo" + +[settings] +ignore = [".git", ".DS_Store", "*.tape", "*.gif", "config/secrets.env"] + +[settings.rsync] +archive = true +compress = false diff --git a/demo/src/handler.go b/demo/src/handler.go @@ -0,0 +1,5 @@ +package main + +func handleSync() error { + return nil +} diff --git a/demo/src/main.go b/demo/src/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("hello from esync demo") +}