Clarify Doris stack README purpose and runtime
This commit is contained in:
@@ -1,6 +1,56 @@
|
|||||||
# Doris Dashboard
|
# Doris Dashboard
|
||||||
|
|
||||||
Local static homepage for John’s morning briefing and peek-anytime news dashboard.
|
Local homepage for John's briefing, glanceable status, and "what matters right now" view.
|
||||||
|
|
||||||
|
## What it is
|
||||||
|
|
||||||
|
Doris Dashboard is the quiet front page for John's local information stack on NOMAD. It is not a general website and it is not meant to be another feed reader with a fresh coat of paint. It exists to turn Doris Digest output and a few homelab/task signals into one page John can open for a fast read.
|
||||||
|
|
||||||
|
The dashboard is meant to answer:
|
||||||
|
|
||||||
|
- what is worth looking at this morning
|
||||||
|
- what local or homelab signals need attention
|
||||||
|
- what chores or Paperless follow-ups are still hanging around
|
||||||
|
- what topics are surfacing too often and should be tuned down
|
||||||
|
|
||||||
|
## Why it exists
|
||||||
|
|
||||||
|
Without this stack, the raw inputs are noisy:
|
||||||
|
|
||||||
|
- Doris Digest candidates are too broad on their own
|
||||||
|
- Donetick and Paperless are useful but fragmented
|
||||||
|
- local weather/sky/homelab signals live in separate places
|
||||||
|
|
||||||
|
The dashboard turns that into one opinionated, local-only page that Doris can tune over time.
|
||||||
|
|
||||||
|
## Runtime model
|
||||||
|
|
||||||
|
- **Repo source:** `/home/fizzlepoof/repos/truenas-stacks/home/doris-dashboard`
|
||||||
|
- **Live runtime:** `/opt/doris-dashboard`
|
||||||
|
- **Generated page:** `/opt/doris-dashboard/public/index.html`
|
||||||
|
- **LAN URL:** `http://10.5.1.16:8787/`
|
||||||
|
- **Exposure rule:** local-only unless John explicitly asks otherwise
|
||||||
|
|
||||||
|
## What it shows
|
||||||
|
|
||||||
|
- top briefing cards from Doris Digest candidates
|
||||||
|
- space / homelab / local / other signal lanes
|
||||||
|
- an experimental `New to You` lane for off-profile category sampling
|
||||||
|
- Donetick tasks
|
||||||
|
- Paperless review queue items
|
||||||
|
- weather, sky, and homelab pulse cards
|
||||||
|
- lightweight stats about candidate/source mix
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
|
- `bin/generate_dashboard.py` reads Doris Digest candidates plus a few local/runtime data files.
|
||||||
|
- It scores, deduplicates, and groups stories into dashboard sections.
|
||||||
|
- It writes generated JSON artifacts under `data/` and the final static page under `public/`.
|
||||||
|
- `bin/dashboard_server.py` serves the page and handles interactive actions like topic feedback and Paperless review state.
|
||||||
|
|
||||||
|
That means the dashboard is static-looking for the reader, but still has enough local interactivity for feedback and review flows.
|
||||||
|
|
||||||
|
## Live paths
|
||||||
|
|
||||||
Live runtime path:
|
Live runtime path:
|
||||||
|
|
||||||
@@ -8,30 +58,12 @@ Live runtime path:
|
|||||||
/opt/doris-dashboard
|
/opt/doris-dashboard
|
||||||
```
|
```
|
||||||
|
|
||||||
Source path in the homelab repo:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
/home/fizzlepoof/repos/truenas-stacks/home/doris-dashboard
|
|
||||||
```
|
|
||||||
|
|
||||||
Generated page:
|
Generated page:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
/opt/doris-dashboard/public/index.html
|
/opt/doris-dashboard/public/index.html
|
||||||
```
|
```
|
||||||
|
|
||||||
## What it shows
|
|
||||||
|
|
||||||
- Morning briefing with fleshed-out cards
|
|
||||||
- Today panel for calendar placeholders
|
|
||||||
- To-do panel for Donetick/to-do placeholders
|
|
||||||
- Notes panel
|
|
||||||
- Sky / Space
|
|
||||||
- Homelab / Smart Home / Ham Radio
|
|
||||||
- Local news
|
|
||||||
- Other signal
|
|
||||||
- Source/candidate stats
|
|
||||||
|
|
||||||
## Generate manually
|
## Generate manually
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -1,10 +1,21 @@
|
|||||||
# Doris Schoolhouse
|
# Doris Schoolhouse
|
||||||
|
|
||||||
Desktop-first local web app for school intake, recordings, D2L sync, and Paperless linkage.
|
Desktop-first school operations app for John.
|
||||||
|
|
||||||
## Purpose
|
## What it is
|
||||||
|
|
||||||
This app gives John a fast local UI to:
|
Doris Schoolhouse is the front door for John's college workflow. It pulls scattered school chores into one place so Doris can handle intake, metadata, archiving, and later grade follow-up without bouncing between D2L, file uploads, recordings, and Paperless by hand.
|
||||||
|
|
||||||
|
In plain English, this stack exists to answer:
|
||||||
|
|
||||||
|
- what classwork is due
|
||||||
|
- where a submission or recording should be filed
|
||||||
|
- how that item should be archived and tagged
|
||||||
|
- whether grading/comments later made it back onto the archived record
|
||||||
|
|
||||||
|
## What it does
|
||||||
|
|
||||||
|
Schoolhouse gives John a local UI to:
|
||||||
|
|
||||||
- upload assignment turn-ins, with programming-class source files bundled into one archived submission artifact
|
- upload assignment turn-ins, with programming-class source files bundled into one archived submission artifact
|
||||||
- upload class recordings
|
- upload class recordings
|
||||||
@@ -13,25 +24,51 @@ This app gives John a fast local UI to:
|
|||||||
- sync classes/assignments/grades/comments from D2L
|
- sync classes/assignments/grades/comments from D2L
|
||||||
- archive submissions/transcripts/summaries in Paperless
|
- archive submissions/transcripts/summaries in Paperless
|
||||||
|
|
||||||
## Source vs runtime
|
## Why it exists
|
||||||
|
|
||||||
|
The point is not just "another web app." The point is to make school intake boring and repeatable.
|
||||||
|
|
||||||
|
- D2L is the source for classes, assignments, grades, and comments.
|
||||||
|
- Schoolhouse is the operational layer where uploads, recordings, and metadata are managed.
|
||||||
|
- Paperless is the long-term archive for receipts, transcripts, summaries, and school documents.
|
||||||
|
- n8n handles the workflow glue between intake events and downstream processing.
|
||||||
|
|
||||||
|
That split keeps John from doing the same clerical nonsense over and over, and gives Doris one consistent place to reason about schoolwork.
|
||||||
|
|
||||||
|
## Runtime model
|
||||||
|
|
||||||
- **Repo source:** `home/doris-schoolhouse`
|
- **Repo source:** `home/doris-schoolhouse`
|
||||||
- **Expected live NOMAD runtime:** `/opt/doris-schoolhouse`
|
- **Live NOMAD runtime:** `/opt/doris-schoolhouse`
|
||||||
|
- **Published app port:** `8091`
|
||||||
|
- **Public path:** `schoolhouse.paccoco.com` behind Pangolin OAuth
|
||||||
|
- **Storage:** shared Postgres in production, JSON fallback for local iteration
|
||||||
|
- **Archive path:** Paperless + n8n school workflows
|
||||||
|
|
||||||
Do not run production from an agent workspace.
|
Do not run production from an agent workspace. Repo source is for editing; `/opt/doris-schoolhouse` is the live runtime.
|
||||||
|
|
||||||
## Stack
|
## How it works
|
||||||
|
|
||||||
- FastAPI
|
- FastAPI
|
||||||
- Jinja2 templates
|
- Jinja2 templates
|
||||||
- shared Postgres
|
- shared Postgres
|
||||||
- Pangolin network
|
- Pangolin-authenticated public route
|
||||||
- existing Paperless and n8n school workflows
|
- existing Paperless and n8n school workflows
|
||||||
- container build now includes Python deps + `ffmpeg` for recording conversion
|
- bundled `ffmpeg` for recording conversion inside the container
|
||||||
|
|
||||||
|
Typical flow:
|
||||||
|
|
||||||
|
1. D2L data is synced into Schoolhouse.
|
||||||
|
2. John uploads an assignment or recording through Schoolhouse.
|
||||||
|
3. Schoolhouse normalizes the intake payload and keeps local/runtime state.
|
||||||
|
4. n8n receives the handoff and pushes the right artifacts into Paperless.
|
||||||
|
5. Paperless becomes the durable archive.
|
||||||
|
6. Later grade/comment updates can be reflected back onto the archived record.
|
||||||
|
|
||||||
|
Programming-class uploads get special handling: multiple source files are bundled into one canonical source archive, with manifest and receipt/listing artifacts so the repo of what was turned in stays coherent.
|
||||||
|
|
||||||
## Current state
|
## Current state
|
||||||
|
|
||||||
The app is live on NOMAD at `/opt/doris-schoolhouse` and uses shared Postgres in production.
|
Schoolhouse is live on NOMAD and already covers the real workflow, not just a mockup.
|
||||||
|
|
||||||
For local iteration, the source tree still supports a JSON-backed mode:
|
For local iteration, the source tree still supports a JSON-backed mode:
|
||||||
|
|
||||||
@@ -49,11 +86,11 @@ Production runtime uses shared Postgres plus Paperless/n8n integration.
|
|||||||
|
|
||||||
`SCHOOLHOUSE_STORAGE_BACKEND=auto` prefers Postgres when psycopg and a PostgreSQL DSN are available, and falls back to JSON state for local iteration.
|
`SCHOOLHOUSE_STORAGE_BACKEND=auto` prefers Postgres when psycopg and a PostgreSQL DSN are available, and falls back to JSON state for local iteration.
|
||||||
|
|
||||||
Repo contents still include:
|
This repo directory contains:
|
||||||
- route handlers and templates
|
- the FastAPI app and templates
|
||||||
- schema/bootstrap helpers
|
- schema/bootstrap helpers
|
||||||
- compose/env examples
|
- compose/env examples
|
||||||
- D2L / Paperless / n8n integration code
|
- D2L, Paperless, and n8n integration code
|
||||||
|
|
||||||
## Layout
|
## Layout
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user