f181525926
First-class reminders tied to the fundraising grid — foundation of the agreed reminders -> NL-search -> bot-mutations plan (keep LP data off third-party LLMs). - reminders table (migration 0006; logical FK to fundraising_investors.id + denormalized name), CRUD at /api/reminders (soft-delete; open/done/snoozed/ cancelled; assignee; source; source_row_id resolution) - read-only derived reminder_status grid column (overdue/due_soon/open), filterable; orphan reconciler cancels reminders when an investor leaves the grid - Reminders page, Dashboard "Reminders Due" card, daily-digest reminders section - per-investor last_activity_at recency rollup (shared block for the W2 NL query) - tests: test_reminders.py + digest reminders test (31/31 green, render-smoke green)
23 lines
1.2 KiB
TypeScript
23 lines
1.2 KiB
TypeScript
import { VersionInfo } from '@start9labs/start-sdk'
|
|
|
|
// Reminders & follow-ups (W1). First-class tickler tied to the fundraising grid: a new
|
|
// `reminders` table (in-app migration 0006; logical FK to fundraising_investors.id +
|
|
// denormalized name, like the pipeline link), full CRUD at /api/reminders (soft-delete;
|
|
// status open/done/snoozed/cancelled; assignee; source human/bot/automation), a read-only
|
|
// derived `reminder_status` grid column (overdue/due_soon/open — injected like pipeline_stage,
|
|
// filterable so a saved view can drive the follow-up view off real reminders), an orphan
|
|
// reconciler (cancels reminders when their investor leaves the grid), a Reminders page, a
|
|
// Dashboard "Reminders Due" card, and a "Reminders due" daily-digest section. Pure local CRM
|
|
// data — no LLM path. up/down are no-ops; the real SQLite migration runs in-app at startup.
|
|
export const v_0_1_0_92 = VersionInfo.of({
|
|
version: '0.1.0:92',
|
|
releaseNotes: {
|
|
en_US: [
|
|
'Reminders & follow-ups: set a due-dated reminder on any investor from the grid,',
|
|
'track them on the new Reminders page + Dashboard card, and get an overdue/due-today',
|
|
'section in the daily digest.',
|
|
].join(' '),
|
|
},
|
|
migrations: { up: async () => {}, down: async () => {} },
|
|
})
|