- JavaScript 85.1%
- HTML 14.5%
- Dockerfile 0.4%
|
|
||
|---|---|---|
| docs | ||
| outputs | ||
| scripts | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| app.js | ||
| data.js | ||
| Dockerfile | ||
| index.html | ||
| package.json | ||
| README.md | ||
| seed.json | ||
| server.mjs | ||
| styles.css | ||
ActNow
ActNow turns meeting minutes into two reviewable records: Agreements and Actions. The dashboard reads and writes records through the server API backed by SQLite. Local development seeds sample records on first run; production starts empty unless existing database records are present.
Run locally
Requires Node.js 22.13 or newer (for the built-in node:sqlite module without an experimental flag). No package installation is needed.
PDF upload additionally requires Poppler's pdftotext command (brew install poppler on macOS; apt install poppler-utils on Debian/Ubuntu). TXT upload does not need Poppler.
cp .env.example .env
# Optional: add TYPESAFE_API_KEY to .env for live Jev extraction.
npm start
Open http://127.0.0.1:4173. Without a TypeSafe API key, the prototype uses a small keyword-based passage picker and labels its output Manual review mode. Those suggestions are unverified. With TYPESAFE_API_KEY, each eligible passage is classified directly by Jev as agreement, action, both, discussion, or unclear. The source text is copied verbatim into suggestions; owner and due date remain unset unless manually entered by the reviewer.
What works
- Department, meeting, meeting type, and text search filters.
- Kanban board with Needs review, Open, In progress, Blocked, Completed, and Closed / rejected lanes. Accepted actions can be dragged between lanes or moved from a card menu; suggestions must be accepted before entering an active lane.
- Filters for department, meeting, meeting type, and text search remain available above the board.
- Overview, action list, agreements, meetings, and review queue views.
- Sample records from all three provided meetings. Every imported agreement and action starts as Needs review; no completion status is assumed.
- Reviewers can edit action text, owner, and due date, accept or reject suggestions, and update an accepted action's status.
- CSV export of the filtered action register.
- Upload text-based PDF or TXT minutes (maximum 8 MB), or paste text, with internal/external type and department required.
- Original uploads are stored under the server's ignored
uploads/directory and can be downloaded from the meeting record. PDF text extraction uses Poppler'spdftotextcommand. - Meetings, agreements, actions, and review/status changes are shared through SQLite. The default local database is ignored at
.data/actnow.sqlite; Coolify uses/data/db/actnow.sqlite. - Optional server-side Jev extraction through TypeSafe System One. API keys are never sent to the browser.
Coolify staging deployment
This repository includes a Dockerfile for Coolify. Follow docs/COOLIFY.md to configure the staging service, login, domain, and persistent storage. In production, the configured bootstrap credentials create the first SQLite administrator; administrators can then add individual user accounts in the dashboard.
MVP limits
- SQLite provides shared single-instance storage and is not suitable for horizontal scaling. Keep one application instance.
- Admins manage accounts, department access, and password resets. Member accounts can read and change records only within assigned departments; admins have cross-department access.
- Admins can create full database/upload archives for encrypted off-site storage. A confirmed workspace reset creates an archive first and retains user accounts.
- The supplied PDFs are represented as source-linked sample suggestions, not parsed live at runtime. Automated retention/deletion, MFA/SSO, scheduled off-site backups, and organization/tenant isolation remain future production work.
- PDF upload requires Poppler (
pdftotext) installed on the machine running the server. Scanned/image PDFs need OCR, which is not implemented. DOCX is not supported yet. - Jev extraction calls TypeSafe System One directly from the server. Keep
TYPESAFE_API_KEYin the server environment; manual review remains available when it is unset. - Internal/external type and department are entered by the submitter and must be reviewed; the prototype does not infer them from attendee names.
Files
index.html,styles.css,app.js— dashboard and review interface.data.jsandseed.json— manually prepared, source-linked demo suggestions used to initialize SQLite once.server.mjs— static server, SQLite accounts and department access, backup/reset APIs, audit log, and Jev extraction adapter.Dockerfile— Coolify image, Poppler and tar support, and container health check.docs/COOLIFY.md— Coolify deployment configuration.docs/PRODUCTION-READINESS.md— implemented controls and remaining launch gates.docs/JEV-INTEGRATION.md— direct TypeSafe System One integration and configuration notes.outputs/— session notes and an export-ready sample register.
See the project PRD at ../docs/PRD.md.