Operations

Ella reminders

Same MariaDB `reminders` table as the Flask app. Edit here; open the public site when you are off the LAN.

Open19
Completed16
Title Due Priority Repeat
My Test 5 PM
My Test
May 7, 2026 8:00 AM Normal 1
Edit
rv refund M&T Bank
rv refund
May 6, 2026 8:00 AM Normal 0
Edit
Ciara put on blog
Ciara put on blog
May 6, 2026 8:00 AM Normal 0
Edit
Flask shopping list
Flask shopping list
Apr 11, 2026 8:00 AM Normal 0
Edit
Wisperflow
https://github.com/dimastatz/whisper-flow
Apr 11, 2026 8:00 AM Normal 0
Edit
MariaDB Ellas
database ellas_alterations User ella_user


CREATE USER 'ella_user'@'localhost' IDENTIFIED BY 'Dfsipc12!';
GRANT ALL PRIVILEGES ON ellas_alterations.* TO 'ella_user'@'localhost';
FLUSH PRIVILEGES;

sudo mysql -u root -e "ALTER USER 'ella_user'@'localhost' IDENTIFIED BY 'Dfsipc12!'; FLUSH PRIVILEGES;"

sudo mysql -u root -e "ALTER USER 'ella_user'@'localhost' IDENTIFIED BY 'EllaReminders2024!'; FLUSH PRIVILEGES;"

cat > /tmp/dbtest.py << 'EOF'
import pymysql
try:
conn = pymysql.connect(
host='localhost',
user='ella_user',
password='EllaReminders2024!',
database='ellas_alterations'
)
print('DB connection OK')
conn.close()
except Exception as e:
print(f'DB connection FAILED: {e}')
EOF
venv/bin/python /tmp/dbtest.py
The << 'EOF' (with quotes around EOF) tells bash to treat everything inside literally and not expand the !. Once that prints DB connection OK you're good to start the app:
bashcd ~/reminders
nohup venv/bin/python app.py > flask.log 2>&1 &
echo "Started! Visit http://$(hostname -I | awk '{print $1}'):5000" Sonnet 4.6Extended

-- ============================================================
-- Ella's Alterations – Database Setup (v2)
-- Run: sudo mysql -u root < setup.sql
-- ============================================================

CREATE DATABASE IF NOT EXISTS ellas_alterations
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE ellas_alterations;

-- App user
CREATE USER IF NOT EXISTS 'ella_user'@'localhost' IDENTIFIED BY 'EllaReminders2024!';
GRANT ALL PRIVILEGES ON ellas_alterations.* TO 'ella_user'@'localhost';
FLUSH PRIVILEGES;

-- ── Users ────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(64) NOT NULL,
active TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ── Reminders ────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS reminders (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
item VARCHAR(255) NOT NULL,
description TEXT,
`repeat` INT UNSIGNED NOT NULL DEFAULT 1,
DueDate DATETIME DEFAULT NULL,
completed TINYINT(1) NOT NULL DEFAULT 0, -- NEW: soft-complete
priority ENUM('Low','Normal','High') NOT NULL DEFAULT 'Normal', -- NEW
last_notified DATETIME DEFAULT NULL, -- NEW: tracks last notification
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
INDEX idx_duedate (DueDate),
INDEX idx_completed (completed)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ── Notification log ─────────────────────────────────────
-- NEW: permanent history of every notification sent
CREATE TABLE IF NOT EXISTS notification_log (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
reminder_id INT UNSIGNED NOT NULL,
sent_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
channel VARCHAR(50) NOT NULL DEFAULT 'telegram',
message TEXT,
success TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
INDEX idx_reminder (reminder_id),
INDEX idx_sent (sent_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ── Settings ─────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS settings (
`key` VARCHAR(100) NOT NULL,
value TEXT,
label VARCHAR(200) DEFAULT NULL,
hint VARCHAR(500) DEFAULT NULL,
sort_order INT NOT NULL DEFAULT 99,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ── Seed settings ────────────────────────────────────────
INSERT INTO settings (`key`, value, label, hint, sort_order) VALUES
('app_name', "Ella's Alterations – Reminders", 'Application Name', 'Displayed in the browser title and header', 1),
('default_repeat_days', '1', 'Default Repeat (days)', '1 = Daily. 7 = Weekly. 0 = No repeat.', 2),
('default_notification_time', '08:00', 'Default Notification Time', 'Time of day (HH:MM, 24h) used when rescheduling repeat reminders', 3),
('notification_lookahead_hours','1', 'Notification Lookahead (hours)', 'How many hours ahead the scheduler looks. Keep at 1 to match hourly cron.', 4),
('catchup_hours', '24', 'Catch-up Window (hours)', 'How many hours back to look for missed reminders (e.g. if server was down). Set 0 to disable.', 5),
('timezone', 'America/New_York', 'Timezone', 'pytz timezone name used throughout the app. e.g. America/New_York, Europe/London, Australia/Sydney', 6),
('flask_port', '5000', 'Flask Port', 'Port the web app listens on. Restart the app after changing.', 7),
('telegram_token', '', 'Telegram Bot Token', 'From @BotFather on Telegram. Format: 1234567890:ABCdef…', 8),
('telegram_chat_id', '', 'Telegram Chat ID', 'Your personal chat ID – get it from @userinfobot on Telegram', 9)
ON DUPLICATE KEY UPDATE label=VALUES(label), hint=VALUES(hint), sort_order=VALUES(sort_order);

-- ── Seed admin user ──────────────────────────────────────
INSERT INTO users (name, email, password_hash, active)
VALUES ('Ella', 'peterdixon5775@outlook.com', SHA2('Dfsipc12!', 256), 1)
ON DUPLICATE KEY UPDATE password_hash=SHA2('Dfsipc12!', 256), active=1;

-- ── Migration: add new columns to existing installs ──────
-- Safe to run even if columns already exist (IF NOT EXISTS syntax)
ALTER TABLE reminders
ADD COLUMN IF NOT EXISTS completed TINYINT(1) NOT NULL DEFAULT 0 AFTER DueDate,
ADD COLUMN IF NOT EXISTS priority ENUM('Low','Normal','High') NOT NULL DEFAULT 'Normal' AFTER completed,
ADD COLUMN IF NOT EXISTS last_notified DATETIME DEFAULT NULL AFTER priority;
Feb 28, 2026 8:00 AM Normal 0
Edit
OpenClaw
Install OpenClaw on 143
Apr 11, 2026 8:00 AM Normal 0
Edit
Claude email
Claude Prompts for Offline Side Jobs
Apr 11, 2026 8:00 AM Normal 0
Edit
ArtWork
Approve artwork - approved need to put on website
Apr 11, 2026 8:00 AM Normal 0
Edit
Umami Fixes
Umami report and duckdb report and interface
Apr 11, 2026 8:00 AM Normal 0
Edit
Internxt
Internxt Ella box rclone
May 6, 2026 8:00 AM Normal 0
Edit
LUXLife
finish LUXlife
Apr 11, 2026 8:00 AM Normal 0
Edit
Ellas Flask
Start Creating tables with flask on ssh kefa@192.168.7.202 database ellas_alterations User ella_user to be able to migrate everything
Apr 11, 2026 8:00 AM Normal 0
Edit
Sayidoapp
Sayidoapp
Apr 11, 2026 8:00 AM Normal 0
Edit
Post
A Tailor’s Guide What Is The Head to Toe Suit Overview
Apr 11, 2026 8:00 AM Normal 0
Edit
Email Reviews
Print out Email Reviews
Apr 11, 2026 8:00 AM Normal 0
Edit