Notes And Today Spec
Purpose
Define the product shape for two new org-surface additions before implementation starts:
Notes: a shell-level note utility for internal agency note capture and retrievalToday: a personal operator workspace for the logged-in agency user
This document exists to settle naming, route ownership, navigation placement, scope boundaries, and first-pass data shape before backend or UI work starts.
The goal is not to add another vague "productivity" area.
The goal is to give agency operators a better place to hold personal context and daily follow-through without polluting overview, time, clients, or Drive.
Product Decisions
1. Notes is a shell utility, not a sidebar workspace
Notes should follow the same navigation pattern as Calendar:
- no sidebar nav item
- shell top-bar launcher
- floating-dock create action
- dedicated full route for deeper note work
Rationale:
- notes are useful across many jobs, but they are not a primary collection workspace like
clients,projects, orinvoices - keeping Notes out of the sidebar prevents the main nav from turning into a mixed bag of durable workspaces and lightweight utilities
- the user explicitly wants Notes to live in the top bar like Calendar
2. Today is a sidebar workspace, not a top-bar utility
Today should live in the org sidebar Home group as a real route.
Recommended placement:
Home:Today,Overview,Analytics
Rationale:
Todayis a full-page operating surface, not a lightweight launcher or popover- it represents a durable daily destination for the logged-in user
- it should own a real route, loading state, and future personalization behavior
- top-bar utilities should stay focused on cross-route tools like calendar, notes, active timer, and notifications
3. Overview and Today have different jobs
Overview remains the org-level operations snapshot.
Today becomes the logged-in user's personal operating layer.
They must not collapse into one page.
Overview answers:
- what is happening across the agency
- which clients, projects, billing states, or collaboration items need attention
Today answers:
- what am I on right now
- what have I pinned for today
- what small personal follow-through still needs closure
4. Notes is internal-first and separate from client-visible docs
Initial Notes work must stay internal to the org surface.
That means:
- notes are not Drive docs
- notes are not portal-visible content
- notes may link to a client account or project for context, but they remain internal records
This follows the existing product rule that client-visible docs must stay separate from internal notes.
Surface Ownership
Notes
Job
Capture and retrieve internal notes quickly from anywhere in the org workspace.
Initial use cases
- personal scratch notes for the logged-in user
- internal notes linked to a client account
- internal notes linked to a project
- personal pinned notes used as working memory during the day
Decision rule: notes vs updates
Notes are internal working memory.
That means:
- a note linked to a project is still a note, not a project activity record
- a note linked to a client is still an internal relationship record, not a shared collaboration doc
- project updates remain the formal project-progress record when something should become part of the project's official story
- if internal note content should become client-visible or timeline-worthy later, create a
projectUpdatefrom that content instead of reclassifying the note itself
This keeps internal capture fast while preserving one clear source of truth for client-visible project progress.
Not in the first slice
- portal-visible notes
- shared client collaboration notes
- threaded note comments
- long-form polished docs meant for client review
- knowledge-base or wiki behavior
Navigation
- top-bar launcher button beside Calendar
- launcher popover for recent and pinned notes
- full route at
appRoutes.org.notes() - quick-action dock action for
Add note - no sidebar entry
Route shape
notes
UI shape
The route should feel closer to a compact internal notebook than a document manager.
Recommended first-pass layout:
- left rail or top filter for note scope:
All,Personal,Clients,Projects,Pinned - dense note list with title or first line, linked context, updated time, and pin state
- note editor panel or focused detail panel
- fast create flow from the launcher and dock
Empty states
- no notes yet
- no pinned notes
- no notes for this client or project filter
Relationship to other surfaces
- from a client or project detail page, internal notes should eventually embed as a local section, but that is not required in the first slice
- Drive remains the home for shared artifacts and client-facing docs
Today
Job
Give the logged-in agency user a personal control surface for the current workday.
Initial use cases
- review pinned notes
- track a lightweight personal checklist
- see current active timer state
- see near-term agenda or manual commitments
- keep personal follow-through visible without reopening multiple workspaces
Navigation
- sidebar route in
Home - no top-bar launcher in the first slice
- not a dock action in the first slice
Route shape
today
UI shape
Today should be a dense operating page, not a motivational dashboard.
Recommended first-pass sections:
Focus: pinned notes and active note contextChecklist: lightweight personal items for the logged-in userAgenda: near-term calendar items and manual commitmentsTiming: active timer summary and recent entry handoffWaiting on: optional short list of follow-up items that are blocked on someone else
What it is not
- not a second org dashboard
- not a project task system
- not a team chat feed
- not a CRM follow-up center
Relationship to Overview
Overviewis agency-operationalTodayis operator-personal
If both pages start showing the same cards, the boundary is wrong.
Data Model Direction
The first implementation should use backend-backed data, not local browser storage.
Calendar's current manual-event storage is local-only and is acceptable for a lightweight utility prototype, but it is not the right foundation for linked internal notes or a personal operating surface that should survive devices and sessions.
Notes first-pass entities
Recommended core table:
notes
Recommended note fields:
organizationIdauthorUserIdscope:personal|client|projecttitlebodybodyPreviewclientAccountId?projectId?isPinnedpinnedAt?archivedAt?createdAtupdatedAt
Important rules:
personalnotes must not require a client or project linkclientnotes must link to aclientAccountprojectnotes must link to aprojectand should also persist the resolvedclientAccountIdscopedescribes the note's anchor, not a second content type- a
projectnote is not a substitute forprojectUpdates - initial visibility is internal-only to the author unless and until a deliberate shared-note model is added
titleshould be stored even for quick-capture notes, but it may be derived from the first meaningful line of body content when the user does not provide one explicitlybodyPreviewshould be stored as a derived scan field so launcher and list surfaces do not have to read full note bodies just to render summaries
Pinning decision
Pinning is user-local in the first slice.
That means:
isPinnedandpinnedAtdescribe whether the current note is pinned for its author- there is no shared pinned state yet because notes themselves are not shared in the first slice
Todayand the Notes launcher may both reuse the same pinned-note set
Future evolution
If the product later needs more structure, evolve notes by adding explicit flows instead of blurring boundaries:
- a shared-note model should be separate from the author-private first-slice note shape
- a future "promote to update" flow should create a
projectUpdatefrom a note snapshot instead of turning the note row into a mixed-purpose record - any client-visible note or document model should stay separate from internal notes
Today first-pass entities
Recommended core table:
personalChecklistItems
Recommended checklist item fields:
organizationIdownerUserIdtitlestatus:open|donesortOrderclientAccountId?projectId?completedAt?createdAtupdatedAt
Keep this intentionally small.
Do not start with:
- assignees
- teams
- comments
- due-date automation
- recurring tasks
- workflow states beyond open vs done
Note-create UX
The first Notes create flow should be body-first, not title-first.
Implementation guidance:
- quick create from the launcher or dock should open a lightweight note draft immediately
- the user may type body content first
- title becomes optional input, not a gate
- save logic should derive a title when needed so list surfaces remain scannable
This keeps Notes fast enough to behave like working memory instead of a mini document-management form.
Execution Reference
The route-by-route implementation map lives in:
Backend Ownership
Recommended Convex modules:
packages/backend/convex/org/notes.tspackages/backend/convex/org/today.ts
Recommended queries and mutations for the first slice:
Notes
- list recent notes for current user
- list notes by scope
- create note
- update note
- archive note
- toggle pin
Today
- get today workspace payload for current user
- list checklist items
- create checklist item
- update checklist item
- reorder checklist items
- complete checklist item
- reopen checklist item
App Ownership
Recommended app route and shell surfaces:
apps/app/src/app/[locale]/org/(dashboard)/notes/page.tsxapps/app/src/app/[locale]/org/(dashboard)/today/page.tsx
Recommended shell additions:
- notes launcher in org top bar beside calendar
- notes create action in the quick-action dock
- sidebar nav entry for
Today
Recommended locale additions:
organization.notes.*organization.today.*
Navigation Contract
Org top bar
Desired shell utility set after this work:
CalendarNotes- active timer
- notifications
Org sidebar
Recommended Home group after this work:
TodayOverviewAnalytics
No other sidebar grouping changes are required for this feature.
Scope Boundaries
In scope for the first build wave
- backend-backed internal notes
- personal notes
- client-linked notes
- project-linked notes
- top-bar Notes launcher
- Notes full route
- dock
Add noteaction - sidebar
Todayroute - lightweight personal checklist inside
Today - Today composition using notes, checklist, timer context, and calendar context
Explicitly out of scope for the first build wave
- client-visible or portal-visible notes
- team-shared notes and granular visibility controls
- project-wide task management
- reminders, due dates, recurrence, or snooze logic
- collaborative rich text editing
- Slack-style internal communication threads
- AI summary or suggestion features
Sequencing
This is a post-baton expansion.
Do not start implementation until the current org and portal client-work baton is in a stable enough place to absorb a new operator layer without turning into a half-finished side track.
Recommended rollout order:
- Notes foundation
- Today surface
- shared-note and portal-safe visibility decisions
- client and project detail embeds
Open Questions To Keep Small
These should be answered during implementation planning, not expanded into a second product-discovery track.
- Should
Todaybecome the default post-login landing route, or remain an opt-in workspace besideOverview? - Should notes allow untitled quick capture with body-first editing, or require a short title on create?
- Should pinned notes be global for the user, or split between
Todaypins and general note pins? - Should the first launcher popover show only recent notes, or recent plus pinned sections?
Acceptance Bar
The feature direction is correct when these statements are true:
- a user can open Notes from anywhere in the org shell without adding another sidebar workspace
- a user can create and retrieve internal notes that survive devices and sessions
- a user can keep personal follow-through in
Todaywithout mixing it into client records or time-entry notes Overviewstill reads like the agency's operating dashboard rather than a personal task page- Drive docs and portal-visible artifacts remain separate from internal notes