Redesign student UI and add OnlyOffice document integration
Build and Push Docker Image / build-and-push (push) Successful in 33s

- Student section: new hero gradient header, fixed bottom nav bar with
  icon+label pills (Today/Courses/Spelling/Inbox/Docs)
- Today rows: card style with left accent stripe, lift on hover
- Course cards: grid layout with top color bar per course
- Docs tab: list view with doc cards, OnlyOffice editor embedded via
  iframe using server-signed JWT config
- Server: documents table, CRUD routes, OnlyOffice callback endpoint
  for auto-save, /api/docs/:id/editor-config returns signed config
- Blank DOCX template embedded as base64 for new document creation
- OnlyOffice server: https://onlyoffice.necloud.us (set ONLYOFFICE_JWT_SECRET
  env var to match your Document Server JWT secret)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 4.6 committed 2026-10-19 14:12:39 -04:00
1 parent 16e3bbbd83
commit 95c0da5c51
6 files changed
+519 -56

No files matched your search

+13
View File
@@ -244,6 +244,19 @@ tryAlter(`ALTER TABLE lists ADD COLUMN group_name TEXT NOT NULL DEFAULT ''`);
tryAlter(`ALTER TABLE decks ADD COLUMN group_name TEXT NOT NULL DEFAULT ''`);
tryAlter(`ALTER TABLE tests ADD COLUMN item_id INTEGER`);
db.exec(`CREATE TABLE IF NOT EXISTS documents (
id INTEGER PRIMARY KEY,
student_id INTEGER NOT NULL REFERENCES students(id) ON DELETE CASCADE,
title TEXT NOT NULL DEFAULT 'Untitled Document',
doc_key TEXT NOT NULL UNIQUE,
filename TEXT NOT NULL,
submitted INTEGER NOT NULL DEFAULT 0,
submitted_at TEXT,
parent_read INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
)`);
export const sha256 = (s) => createHash('sha256').update(String(s)).digest('hex');
// Default parent PIN on first run