JARVIS AI / node-status: online
uptime 24/7 tz Asia/Kuala_Lumpur model neural-chat
Self-hosted · WhatsApp-native · Local LLM

JARVIS AI
Executive Assistant &
Infrastructure Control Node

A 24/7 autonomous assistant that lives inside WhatsApp. It reads a message the way Isaac would type it — no commands, no menus — and turns it into a calendar entry, a task, a note, a live web search, or a status check on the servers running Creative Clicks Studios.

Node.js v22+ WhatsApp Web.js Ollama · neural-chat SQLite3 Puppeteer / Chromium Google Calendar API Docker + systemd
Owner
Isaac David Christopher
Business
Creative Clicks Studios
Interface
WhatsApp — no separate app

What happens between a message and a reply

Every WhatsApp message Isaac sends passes through the same pipeline before JARVIS decides what to do with it.

📱 WhatsApp message
🛡️ Security whitelist +
anti-loop guard
🧠 Memory extractor
(silent)
⚡ Hybrid intent parser
intent parser resolves to one of 9 categories, then routes below ↓
📅calendar_add / query
📋task_add / list
📝note_add / view
🌐web_search
🖥️server_status
📄generate_quote
☀️morning_digest
💬general (LLM persona)

Hybrid natural language parsing

Two tiers, so common phrasing never has to wait on the LLM.

TIER 1

Instant regex matching

Sub-millisecond pattern matching for everyday phrasing — "Got a shoot with Sarah Saturday 3pm", "Need to buy drumsticks tomorrow" — resolved without touching the model.

regex<1msno LLM call
TIER 2

AI fallback classification

When Tier 1 returns general for a non-trivial message, the local Ollama model classifies it into one of the nine system intents before routing continues.

neural-chat9 categorieslocal inference
DATES

Relative date engine

Resolves natural phrasing — "tuesday next week", "day after tomorrow", "July 31st" — into exact dates without UTC day-shift bugs.

no timezone driftKL local time
TITLES

Clean title extraction

Strips action words ("Add event", "Schedule"), date phrases, and time ranges from the raw message so the saved title stays clean.

"3pm–5pm" stripped

Three-stage event notifications

JARVIS doesn't wait to be asked. Every calendar event is watched by a cron and escalates automatically as it approaches.

STAGE 1
☀️ Day-of morning reminder
Fires the morning of the event, folded into the 8:00 AM digest.
STAGE 2
⏳ Two hours before
Fires 120 minutes ahead of start time. If a client's phone number is attached to the event, JARVIS notifies them directly too.
STAGE 3
🔴 Imminent start
Fires 15–30 minutes before the event begins — last call before it's happening.

What it actually does day to day

SEARCH

Headless web search

Puppeteer drives real Chromium to scrape DuckDuckGo organic results — bypassing bot walls — with fallbacks to the DDG Instant Answer API and Wikipedia. Ollama summarizes and returns clickable sources.

search.jsad-filtered
NOTES

Catalog + reader

"show notes" returns a numbered index. "view note 1" or "note 3" pulls the full content of a single entry.

catalog indexfull reader
MEMORY

Silent preference learning

Scans incoming chats in the background to catch things like "Client Mark prefers PDF invoices" — saved to SQLite and mirrored to a human-readable MEMORY.md.

auto-extractionMEMORY.md sync
HEALTH

Infrastructure monitoring

Pings the multi-server setup — Friday (production), Alpha (office), JARVIS (AI node) — and folds status into the morning digest.

TailscaleICMP / HTTP

File structure

FileRole
main.jsEntrypoint — WhatsApp client, message listener, cron scheduler, morning digest
intents.jsHybrid intent classifier (regex + Ollama fallback)
search.jsPuppeteer + DDG API + Wikipedia search module
db.jsSQLite access layer — events, tasks, notes, reminders
calendar.jsGoogle Calendar API integration
memory.jsPreference learning engine, MEMORY.md sync
ollama.jsAxios client for the local Ollama API
quotations.jsQuotation / invoice generation for Creative Clicks Studios
server_health.jsTailscale-based server status checker
personal.dbSQLite store — events, tasks, notes, memories
docker-compose.ymlDeployment manifest — Ollama + JARVIS container
jarvisai.servicesystemd unit for 24/7 background operation

Say it plainly, JARVIS routes it

What you'd type What happens
Add event Badminton tuesday next week 3pm - 5pmScheduled with 3-stage reminders
Got a photo shoot with Sarah on Saturday at 3pmCasual phrasing, same result
I need to buy new drumsticks tomorrowAdded as a pending task
show my tasksNumbered list of active tasks
complete task 1Marks task #1 done
Save note named Mistral AI: [content]Note saved under that title
view note 1Full note content returned
What is the latest AI model released in 2026?Live search + AI summary + sources
Is server Friday running?Status check across all nodes
morning digestImmediate executive briefing

Running the system

jarvis · systemd deployment
# local run
$ npm install
$ npm start

# persistent 24/7 daemon
$ sudo cp jarvisai.service /etc/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now jarvisai
● jarvisai.service — active (running)