Virgil: Personal AI Assistant

Self-hosted voice assistant and live dashboard. Active development.

Date
2026
Role
Solo Developer
Tools
Flask / Flask-SocketIO / WebSockets / Anthropic API / ElevenLabs / JavaScript / Google OAuth

Overview

Virgil is an AI personal assistant that runs locally on my home network, loosely modeled on Jarvis and Friday from Iron Man. It has a main interface built for laptops and a dedicated mobile page that turns a phone into a microphone when the main screen is running on a TV.

The Virgil dashboard running live. Virgil running live: weather, hourly forecast, synced calendar, curated news, and market data on one screen.

Why I Built It

As I got more involved in classes and clubs, it became obvious I was running out of time and needed to claw some back. One of the biggest inefficiencies in my morning was checking my calendar, weather, and commute times one app at a time. It is faster to just ask out loud than to open each app and read it myself. Now I can set reminders and schedule responses, and every morning Virgil automatically gives me a rundown of my day: weather, commute time, schedule, and county, state, and national news. The other reason I built it is trust. I never used an Alexa or a Google Home because I had no idea how much data they collected or where it went. With Virgil, I do.

What It Is

Virgil pulls from several APIs to keep everything I want in the morning on one screen at once, and uses WebSockets to keep all my devices in sync. The back-end is Flask and Flask-SocketIO, the front-end is vanilla HTML, and voice output runs through ElevenLabs TTS. Claude runs the whole thing in the background with internet access, so I can ask complex follow-up questions about news stories or weather instead of just reading headlines. The latest addition is an Obsidian-based memory system that Virgil reads from to give better, more context-aware responses across sessions.

The Future

Next, I plan to migrate Virgil onto a dedicated machine like a Raspberry Pi. That would let it stay on constantly and keep updating its memory without me worrying about my laptop sleeping or shutting down. Now that the functionality is proven, the design focus has shifted to cutting latency, which has been the hardest part of the project to get right.