What started as a small personal automation became my first open source project. Here's how it works and why I built it.
Read it in Medium.
There's a specific kind of guilt that comes from forgetting to check in on the people you care about. Not because you don't care — you do — but because life gets in the way. Work, notifications, context-switching. Days slip by.
I wanted to fix that for myself. What I didn't expect was to end up building something other people might want too.
The Problem
I have someone in my life I want to send a heartfelt message to every single day. Not a generic "good morning ☀️" copy-paste — something that actually feels personal and intentional. But writing a fresh, meaningful message every day is harder than it sounds when you're half-awake and already behind on your morning.
The obvious solution: automate it. The less obvious part: make it feel human.
Enter Waify
Waify is a CLI tool that runs in your terminal and sends a daily AI-generated message to someone you care about via WhatsApp. You configure it once, and it takes care of the rest — every morning, at the time you choose, a thoughtful message lands in their chat.
npm install -g @deckasoft/waify
waify setup # guided wizard: QR scan, AI setup, schedule
waify send # send your first message
That's it. Three commands to get started.
How It Actually Works
Under the hood, Waify combines two pieces:
Google Gemini generates the message. You give it a custom system prompt and optional few-shot examples that capture your voice and relationship. The AI uses those to produce something that sounds like you, not like a chatbot.
OpenWA handles the WhatsApp delivery. It's a self-hosted WhatsApp API server that runs locally in Docker — so your WhatsApp session and messages never leave your machine. You scan a QR code once during setup, and OpenWA keeps the session alive.
A scheduling container (Ofelia) fires the sender at whatever cron schedule you configure — daily, weekdays only, weekends, or a custom pattern.
The Setup Flow
Running waify setup walks you through everything interactively:
- Starts the Docker services (OpenWA + scheduler)
- Opens a QR code for you to scan with WhatsApp
- Asks for your Gemini API key (free tier works fine)
- Lets you set the recipient, language, time, and frequency
- Generates all the config files and builds the sender image
After that, waify tui opens a terminal UI where you can browse message history, tweak settings, edit your AI prompt, and manage the schedule — all without touching config files.
Customizing the Tone
The part I'm most happy with is the prompt system. Waify stores your AI instructions in ~/.config/waify/prompt.json, and you can shape it however you want:
waify prompt edit # opens in $EDITOR
waify prompt add-example "Good morning! Hope your presentation goes well today 💪"
waify preview -n 3 # see 3 message candidates without sending
The few-shot examples are the real magic. Feed it messages that capture your actual tone — casual, warm, poetic, whatever — and the AI learns to match it. You can even pick the language the messages are generated in.
Why Open Source?
Honestly? Because I wanted feedback.
This is my first open source project. I built it for myself, got it working, and then thought: other people probably have someone they want to reach out to every day too. The tool is useful, but I'm sure there are rough edges I can't see from the inside.
So I published it under MIT. The code is on GitHub, the package is on npm, and anyone is welcome to use it, break it, and tell me what's wrong with it.
What's Coming
The roadmap has a few things I already want to build:
- Multi-recipient support — the data model already supports arrays, it's just capped at 1 for now
-
More AI providers — OpenAI, Anthropic, Ollama via a pluggable
AIProviderinterface - More transport adapters — Telegram and SMS are the obvious next targets
If any of those sound interesting to you — or if you have a completely different idea — I'd love to hear it.
Try It
Prerequisites: Docker, Node.js 22+, and a free Gemini API key.
npm install -g @deckasoft/waify
waify setup
The project is at github.com/Deckasoft/waify. Stars, issues, and PRs are all welcome. So is feedback in the comments here — this is the first time I'm putting something I built out into the world, and I'm genuinely curious what people think.
Built with TypeScript, Node.js, Google Gemini, OpenWA, and Docker. MIT licensed.
Top comments (0)