Skip to content

akmmp241/ingatin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⏰ Ingatin

Ingatin (Indonesian: "Remind me") is an AI-powered WhatsApp reminder bot that understands natural language. Simply chat with it like you would a friend — describe your task, deadline, and when you'd like to be reminded — and it handles the rest automatically.

Built with Rust for maximum performance and SQLite for zero-ops persistence, Ingatin is designed to run efficiently on minimal infrastructure (including cheap VPS instances) without sacrificing reliability.


✨ Features

  • 🧠 Natural Language Understanding — No rigid commands. Just send messages like "Ingatkan aku untuk submit tugas jaringan besok jam 10 pagi" and the LLM extracts the task, deadline, and reminder schedule automatically.
  • ⚡ Blazing Fast & Lightweight — Powered by Rust (Axum) and SQLite. No Redis, no RabbitMQ, no heavy dependencies.
  • 🔁 Configurable Background Scheduler — Uses tokio::time::interval for non-blocking async polling. Tick intervals are configurable via environment variables.
  • 💬 WhatsApp Integration — Seamless two-way messaging through WAHA (WhatsApp HTTP API) — receives inbound webhooks and pushes outbound notifications.
  • 🤖 AI-Generated Reminder Messages — Reminder notifications are dynamically composed by the LLM, creating friendly and context-aware messages rather than generic alerts.
  • 📋 Multi-Reminder Support — A single task can have multiple reminder schedules (e.g., "ingatkan H-1 dan 2 jam sebelumnya").

🛠️ Tech Stack

Layer Technology
Language Rust
Web Framework Axum 0.8
Async Runtime Tokio
Database SQLite via SQLx 0.8
AI / LLM Google Gemini API
WhatsApp API WAHA
HTTP Client Reqwest
Logging tracing + tracing-subscriber

🏗️ Architecture

┌──────────────┐     Webhook      ┌─────────────────────────────────────────┐
│   WhatsApp   │ ──────────────▶  │              Axum Server                │
│    (User)    │                  │                                         │
│              │ ◀──────────────  │  ┌─────────┐   ┌────────────────────┐  │
└──────────────┘   Push Message   │  │ Handler │──▶│  Gemini Client     │  │
                                  │  │(Webhook)│   │  (NLU Extraction)  │  │
                                  │  └────┬────┘   └────────────────────┘  │
                                  │       │                                │
                                  │       ▼                                │
                                  │  ┌─────────┐   ┌────────────────────┐  │
                                  │  │  Repo   │──▶│  SQLite Database   │  │
                                  │  │ (SQLx)  │   │  (tasks/reminders) │  │
                                  │  └─────────┘   └────────────────────┘  │
                                  │       ▲                                │
                                  │       │ poll                           │
                                  │  ┌─────────┐   ┌────────────────────┐  │
                                  │  │Scheduler│──▶│  Gemini Client     │  │
                                  │  │(Runner) │   │  (Msg Generation)  │  │
                                  │  └────┬────┘   └────────────────────┘  │
                                  │       │                                │
                                  │       ▼                                │
                                  │  ┌──────────────────┐                  │
                                  │  │  WAHA Client     │                  │
                                  │  │  (Send WhatsApp) │                  │
                                  │  └──────────────────┘                  │
                                  └─────────────────────────────────────────┘

🚀 Getting Started

Prerequisites

1. Clone the Repository

git clone https://github.com/akmmp241/ingatin.git
cd ingatin

2. Configure Environment Variables

Create a .env file in the project root:

# Database
DATABASE_URL=sqlite://database/database.db

# Google Gemini
GEMINI_API_KEY=your_gemini_api_key_here
GEMINI_MODEL_TYPE=gemini-2.0-flash

# WAHA (WhatsApp HTTP API)
WAHA_API_URL=http://localhost:3000
WAHA_API_KEY=your_waha_api_key
WAHA_SESSION=default

# Scheduler (optional, defaults to 60 seconds)
TICK_INTERVAL=60

3. Initialize the Database

sqlite3 database/database.db < database/schema.sql

4. Run the Application

cargo run

The server will start on http://0.0.0.0:3000 with the background scheduler running concurrently.

5. Configure WAHA Webhook

Point your WAHA instance's webhook URL to:

http://<your-server-ip>:3000/webhook/waha

📄 License

This project is licensed under the Apache License 2.0 — see the LICENSE file for details.

About

Ingatin — A blazing-fast, AI-powered WhatsApp bot for personal task reminders. Built with Rust, SQLite, and LLM to seamlessly parse natural language schedules into automated background alerts.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors