← Back to Projects

Iris

Personal Operational Program

Node.js discord.js v14 MariaDB Google Calendar API Express
Iris -- Personal Operational Program

The Problem

Running a creative community, keeping up with school, and managing a personal calendar across three separate Google accounts means a lot of context-switching between tools that don't talk to each other. Discord has no idea what's on my calendar. My calendar has no idea what's happening in the community. Nothing surfaces the right information at the right time.

Iris is the fix. It is a single Node.js codebase that functions as my personal operational program -- one system with visibility and control over community management, scheduling, and cross-calendar coordination, instead of a pile of separate tools per concern.

Architecture

Iris runs as a single process with three distinct layers. The Discord connector handles all community-facing work: slash commands, event listeners, and a task scheduler for timed operations. The Express API is the only layer that touches MariaDB -- it manages the member system, XP tracking, and moderation records, and is accessible internally by the Discord connector or externally by the Hera's Garden website via HTTPS and an API key. The calendar layer connects to three separate Google accounts (school, personal, and the Hera's Garden brand calendar) via OAuth2.

The calendar layer is deliberately narrow in scope: Iris only syncs what it creates itself. Events added externally via phone or browser are invisible to it by design. When Iris creates an event on one calendar, it automatically mirrors a "Busy" block to the other two, keeping all three accounts aware of conflicts without duplicating the full event. Urgency and blocker metadata live entirely in Google's extended properties -- no new database tables needed.

What Iris Does

Discord Automation

Slash commands, event handling, and a scheduler for timed community tasks -- reports, reminders, and activity detection.

Cross-Calendar Sync

Connects to three Google Calendar accounts. Events Iris creates automatically generate busy-blocks on the other two calendars to prevent conflicts.

Morning and Weekly Briefings

Scheduled digests posted to a private Discord channel summarizing the day's and week's calendar events across all three accounts.

Community Member System

MariaDB-backed XP, moderation records, and member data served via an internal Express API used by both the Discord layer and the Hera's Garden website.

Discord Event Sync

Discord scheduled events are automatically pushed one-way to the Hera's Garden brand calendar to keep the public-facing schedule current.

Why One Program

The alternative is running a Discord bot, a separate calendar sync script, a cron job for briefings, and a standalone API -- each with their own process, their own auth, their own failure modes. Iris consolidates all of that into one entry point, one deployment, and one place to look when something breaks. It is a single-operator system, built for me and not designed for multi-tenant use, which keeps the architecture honest: no unnecessary abstraction, no generalization for hypothetical other users.