Feature inventory
Last updated 30 September 2026
Meaningful user-facing features of Yaumiyya, built from the source (routes, components, API) and checked against the running application on 30 September 2026. 62 features: 40 fully exercised in the browser, 13 partly, 9 not opened (documented from code). Generated by npm run docs:build from tools/features.mjs.
Developer-only previews under /dev/* (fixture pages, 404 in production) are excluded as not user-facing.
| # | Area | Feature | Description | Route | User role | Major controls | Related workflow | Implementation location | Tested in browser? | Screenshot? | Documented? | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Public | Landing page (features, pricing, FAQ) | Public marketing page with product demo, plans, packs and FAQ | / (signed out), /welcome | Visitor | Start free, Sign in, Explore the demo, FAQ accordion, theme | n/a | app/welcome/page.tsx | Yes | Yes | public-site-and-sign-in | |
| 2 | Public | Sign in (email + password) | Returning users sign in | /login | User | Email, Password, Sign in, Forgot password? | n/a | components/auth-form.tsx | Partly | Yes | public-site-and-sign-in | Form and empty-field validation seen; credentials not submitted (session came from the project QA script) |
| 3 | Public | Create account | Sign-up form; new accounts get a 60-credit, 30-day trial | /login?mode=signup | Visitor | Email, Password, Create account | n/a | components/auth-form.tsx | Partly | Yes | public-site-and-sign-in | Form viewed; no account created through the UI |
| 4 | Public | Continue with Google | OAuth sign-in with Google | /login → /auth/callback | User | Continue with Google | n/a | app/auth/callback/route.ts | No | No | public-site-and-sign-in | OAuth with a real identity provider not attempted |
| 5 | Public | Password reset | Email a reset link, confirm, set a new password | /forgot-password, /auth/confirm, /reset-password | User | Email, Send reset link | n/a | app/forgot-password, app/reset-password | Partly | Yes | public-site-and-sign-in | Request form viewed; not submitted (sends a real email); reset page needs emailed link |
| 6 | Public | Terms & Privacy pages | Legal terms, disclaimer and privacy policy | /terms, /privacy | Anyone | Links | n/a | app/terms, app/privacy | Yes | Yes | public-site-and-sign-in | |
| 7 | Public | Accept team invitation | Invitee joins an owner's shared plan | /join/<token> | Invitee | Accept invitation | 07-invite-a-team-member | components/join-client.tsx | Partly | Yes | public-site-and-sign-in | Page viewed with a real token; not accepted (needs a second account) |
| 8 | Public | Auth redirects & 404 | Signed-out users are sent to sign-in; unknown pages show 404 | any unknown path | Anyone | n/a | n/a | proxy.ts, lib/public-paths.ts | Yes | Yes | navigation | Signed out → /login; signed in → 404 page |
| 9 | Home | Home workspace & credits card | Start page with credits, meetings and series folders | / | User | New meeting, Dictionary, Plan & credits, meeting cards, series folders | 01-record-to-approved-minutes | app/(app)/page.tsx, components/meetings-list.tsx | Yes | Yes | dashboard | |
| 10 | Home | Meeting search | Search meeting titles, transcripts and summaries | / (search box) → /api/search | User | Search box | n/a | components/meetings-list.tsx | Yes | Yes | dashboard | Hit and no-hit states captured |
| 11 | Home | Shared with you list | Meetings other plan members shared with you | / | Sharee | Remove / bring back | n/a | components/shared-meetings.tsx | No | No | dashboard | Needs a second account sharing a meeting |
| 12 | Home | Notifications bell | In-app notification list with unread count | header | User | Bell, Mark all read | n/a | components/notifications/bell.tsx | Yes | Yes | notifications | Meeting-ready notifications seen; real-time toasts not |
| 13 | Home | Notification preferences | Choose which of 10 notification kinds you receive | /settings → Choose | User | 10 switches | n/a | components/notifications/notification-settings.tsx | Partly | Yes | notifications | Sheet viewed; switches not toggled |
| 14 | Home | Light / dark theme | Switch colour theme | header | User | Theme toggle | n/a | components/theme-toggle.tsx | Yes | Yes | navigation | |
| 15 | Home | Dhivehi dictionary (page + quick panel) | Radheef-derived dictionary; Thaana or Latin input; no credits | /dictionary, floating button | User | Lookup, suggestions | n/a | components/dictionary-search.tsx | Yes | Yes | dictionary | |
| 16 | Capture | Record in the room | Record a meeting with the device microphone | /new (Record) | User | Start recording, Pause, Stop & review | n/a | components/recorder.tsx | Partly | Yes | new-meeting | Only the microphone-blocked error; headless browser has no microphone |
| 17 | Capture | Capture call | Record a call's audio from this computer without joining it | /new (Capture call) | User | Also record my microphone, Start capture | n/a | components/call-capture.tsx | Partly | Yes | new-meeting | Instructions viewed; needs an interactive screen-share prompt |
| 18 | Capture | Upload a recording | Upload an audio file and transcribe it | /new (Upload file) | User | Choose file, Title, Transcribe, Edit, Discard | 01-record-to-approved-minutes | app/(app)/new/page.tsx | Yes | Yes | new-meeting | |
| 19 | Capture | Join online (meeting bot) | Send a notetaker bot to Zoom/Meet/Teams/Webex | /new (Join online) | Paid user | Meeting link, language, bot name, Stop after, Send Yaumiyya | n/a | components/join-online.tsx, lib/recall.ts | Partly | Yes | new-meeting | Validation verified; bot not sent (real, billed dispatch) |
| 20 | Capture | Smart Audio Prep | Trim silences or marked stretches in the browser before upload | /new → Edit | User | Original/Result, zoom, marks, Use cleaned audio | n/a | components/audio-prep/* | Partly | Yes | audio-prep | Drawer opened; test file had no silence to cut |
| 21 | Capture | Unfinished-recording recovery | Recover recordings interrupted on this device | /new | User | Recover, Save file, Discard | n/a | lib/audio/drafts.ts | No | No | new-meeting | Needs an interrupted recording |
| 22 | Capture | File into a series from New meeting | New meeting pre-assigned to a series | /new?series=<id> | User | Series chip | 04-run-a-meeting-series | components/series/series-target.tsx | Yes | Yes | series | |
| 23 | Processing | Processing states | Progress card while transcribing and summarising | /m/<id> | Owner | Pause animation, Having trouble? | 01-record-to-approved-minutes | components/processing-card.tsx | Yes | Yes | processing-and-failures | Transcribing and Done seen; Summarizing and bot states passed too quickly or were not used |
| 24 | Processing | Failure card & refund | Specific failure reason with next step; credits refunded | /m/<id> | Owner | Retry / Upload again / Upgrade (per reason) | 08-handle-a-failed-recording | components/meeting/failure-card.tsx, lib/failure-reasons.ts | Yes | Yes | processing-and-failures | no_speech reproduced; other 13 reasons from code |
| 25 | Meeting | Summary tab & translation | Bullet summary with English/Dhivehi translation | /m/<id> | Owner (translate), sharee (read) | Original/English/ދިވެހި, Copy, Share, Ask AI | 01-record-to-approved-minutes | components/meeting-view.tsx | Yes | Yes | meeting-page | |
| 26 | Meeting | Insights tab | Concerns, issues and suggestions | /m/<id>?tab=insights | Owner | Language, Copy, Share | n/a | components/meeting-view.tsx | Yes | Yes | meeting-page | |
| 27 | Meeting | Transcript editing & speaker naming | Correct lines, rename speakers, accept spoken-name suggestions | /m/<id>?tab=transcript | Owner | Use name, ✕, speaker menu, line edit | 02-review-and-correct-transcript | components/meeting/transcript-editor.tsx, speaker-menu.tsx, speaker-suggestions.tsx | Yes | Yes | transcript | 'This line is someone else' and 'Same person as' not used |
| 28 | Meeting | Transcript line translation | Show transcript lines translated | /m/<id>?tab=transcript | Owner | Original/ދިވެހި/English | n/a | components/meeting/transcript-editor.tsx | No | No | transcript | Not exercised |
| 29 | Meeting | Share with your team | Share a meeting read-only with plan members | /m/<id> → Share | Owner | Everyone on the plan / per person, Stop sharing | n/a | components/meeting-share-panel.tsx | Partly | Yes | meeting-page | Only the 'nobody to share with' state (no members) |
| 30 | Meeting | Download / export (PDF, Word, calendar) | Export meeting notes as PDF, Word or .ics | /print/<id>, /api/meetings/<id>/export/docx, /ics | Owner, sharee | Download sheet | 01-record-to-approved-minutes | app/print/[id], app/api/meetings/[id]/export | Yes | Yes | meeting-page | Files returned 200 with correct types; recording download not pressed |
| 31 | Meeting | Delete meeting | Delete a meeting and its audio | /m/<id> → Delete | Owner | Confirm dialog | n/a | components/meeting-view.tsx | Yes | No | meeting-page | Native confirm captured as text and cancelled |
| 32 | Meeting | Add meeting to a series | File a meeting into a new or existing series | /m/<id> → Add to a series | Owner | Series chooser, New series… | 04-run-a-meeting-series | components/series/series-chooser.tsx | Yes | Yes | series | |
| 33 | Minutes | Templates & layout editor | Choose a minutes template; edit sections; save templates | /m/<id>?tab=minutes | Owner | 9 template chips, New template, Edit layout | 01-record-to-approved-minutes | components/minutes/template-bar.tsx, template-builder.tsx | Yes | Yes | minutes | Saving a custom template not exercised |
| 34 | Minutes | Agenda & reference files | Attach an agenda and up to 3 reference files to sharpen minutes | /m/<id>?tab=minutes | Owner | Add agenda, Add file | 01-record-to-approved-minutes | components/minutes/minutes-files.tsx | Yes | Yes | minutes | Agenda used; reference files not |
| 35 | Minutes | Minutes generation | Build formal, evidence-linked minutes from the transcript | /m/<id>?tab=minutes | Owner | Create minutes · N credits | 01-record-to-approved-minutes | components/minutes-view.tsx | Yes | Yes | minutes | |
| 36 | Minutes | Minutes editing (fields, roster, AI rewrite, undo) | Edit items, set speaker roles, AI 'More formal'/'Shorten', undo | /m/<id>?tab=minutes | Owner | Edit, More formal, Shorten, Undo, roster Save | 01-record-to-approved-minutes | components/minutes-view.tsx | Yes | Yes | minutes | Regenerate (section/all) not used |
| 37 | Minutes | Update minutes after transcript change | Free re-run after transcript corrections, keeping manual edits | /m/<id>?tab=minutes | Owner | Update · free | 02-review-and-correct-transcript | components/minutes-view.tsx | Yes | Yes | minutes | Stale-screen bug found here and fixed 30 Sep 2026 (lib/minutes/status-sync.ts); re-verified without reload |
| 38 | Minutes | Follow-ups & minutes exports | Follow-up email, action list, decision register, Word, print/PDF | /print/<id>/minutes, /api/meetings/<id>/minutes/docx | Owner | Follow-up email, Action list, Decision register, Print, Word, Share | 01-record-to-approved-minutes | components/minutes-followups.tsx | Yes | Yes | minutes | Sample PDF saved |
| 39 | Minutes | Minutes document language | Switch minutes headings between English and Dhivehi (free) | /m/<id>?tab=minutes | Owner | English / ދިވެހި | n/a | components/minutes-view.tsx | Yes | Yes | minutes | |
| 40 | Minutes | Minutes approval (self) | Submit and approve minutes; versioned and locked | /m/<id>?tab=minutes | Owner | Submit for approval, Approve now | 01-record-to-approved-minutes | components/minutes/approval-bar.tsx, approval-drawer.tsx | Yes | Yes | minutes-approval | Wording says 'plan is for one person' on a Team plan |
| 41 | Minutes | Approval by others (approve / return / withdraw) | Multi-person approval flow | /m/<id>?tab=minutes | Approver | Approve, Return with note, Withdraw | n/a | lib/minutes/approval.ts | No | No | minutes-approval | Needs a second account on the plan |
| 42 | Actions | AI draft actions (approve / dismiss) | Owner approves AI-found actions before they count | /m/<id>?tab=todos | Owner | Approve, Approve all, Dismiss | 03-track-actions | components/actions/drafts-card.tsx | Yes | Yes | actions | Dismiss/Edit/Reword not used |
| 43 | Actions | Action tracking (due, priority, status, notes, self-assign, activity) | Track each action to done with history | /m/<id>?tab=todos, /actions | Owner, assignee | Due, Priority, Status, Assignee, Activity, notes | 03-track-actions | components/actions/* | Yes | Yes | actions | |
| 44 | Actions | Assign to others, acknowledgement, @mentions | Hand actions to team members who acknowledge them | /actions | Owner, assignee | Assignee list, Got it / Needs clarification | n/a | components/todo-assign-control.tsx | No | No | actions | Needs team members |
| 45 | Actions | Action Centre (views, filters, buckets, menu, per-action language) | All actions across meetings in one place | /actions | User | Mine/Waiting/All, Status, Priority, ⋯ menu, EN/ދިވެހި | 03-track-actions | components/actions/action-centre.tsx | Yes | Yes | actions | |
| 46 | Decisions | Decision Register | Numbered decisions with status, search and transcript evidence | /decisions | User (owner changes status) | Search, status chips, Filters, drawer, Mark superseded, Revoke | n/a | components/decisions/* | Yes | Yes | decisions | Revoke form viewed, not submitted; supersede/restore not used |
| 47 | Series | Series page (actions, decisions, agenda) | Recurring-meeting hub with AI next agenda | /series, /series/<id> | Owner | Add meetings, Add actions, Generate agenda, Ask about this series | 04-run-a-meeting-series | components/series/* | Yes | Yes | series | |
| 48 | Series | Rename / archive / delete series | Series housekeeping | /series/<id> | Owner | Icon buttons | n/a | components/series/series-view.tsx | Partly | Yes | series | Buttons seen, not used |
| 49 | Assistant | Ask Yaumiyya | Q&A over meetings, series and Library with citations | /assistant | User | Scope picker, question, citations | 05-ask-and-write | components/assistant/ask-chat.tsx | Yes | Yes | assistant | Allowance counter off by one vs Settings |
| 50 | Assistant | Write (letters & emails) | Draft letters/emails in Dhivehi or English | /assistant?mode=write | User | Letter/Email, language, meeting, fields, Draft | 05-ask-and-write | components/assistant/write-composer.tsx | Yes | Yes | assistant | Email in English drafted; letter mode and Word export not used |
| 51 | Library | Library (add, read, ask about a document) | Knowledge documents that Ask can answer from | /library, /library/<id> | User | Add, visibility, Read, Ask about it, Download | 06-library-knowledge | components/library/library-view.tsx | Yes | Yes | library | Rename/delete/failure states not exercised |
| 52 | Settings | Settings (profile, allowances, device audio, recordings) | Account self-service | /settings | User | Display name, Save, Free up space, Save to device | n/a | components/settings-client.tsx | Partly | Yes | settings | Viewed; display-name save and device-audio actions not pressed |
| 53 | Settings | Team members (invite / withdraw) | One-time invitation links for plan seats | /settings → Members | Plan owner | Invite someone, Make an invitation link, Withdraw | 07-invite-a-team-member | components/team-panel.tsx | Yes | Yes | settings | |
| 54 | Settings | Member-side plan view & limits | Member usage, limits, leave plan; owner removes members | /settings, /upgrade (pooled) | Plan member | Leave this plan, per-member limit, Remove | n/a | components/team-panel.tsx, pooled-upgrade.tsx | No | No | settings | Needs a second account |
| 55 | Settings | Delete all meeting data | Erase all meetings, transcripts, audio and Library docs | /settings → Delete my data | User | Confirm + typed DELETE | n/a | components/settings-client.tsx | Yes | No | settings | First confirm captured as text and cancelled |
| 56 | Billing | Plans, extra hours & credit packs | Choose what to buy; prices; plan changes | /upgrade | Account owner | Pay for next period, Move up, packs, Copy account | 09-buy-credits-or-renew | components/upgrade-client.tsx | Yes | Yes | plans-and-credits | |
| 57 | Billing | Payment slip submission & review | Upload bank-transfer slip; admin verifies | /upgrade → Submit slip | Account owner, admin | Slip upload, Submit | 09-buy-credits-or-renew | components/upgrade-client.tsx, review_payment_slip | Partly | Yes | plans-and-credits | Form viewed; not submitted (would reach the real admin queue) |
| 58 | Billing | Credit activity ledger & credit breakdown | Every credit added or spent; balance explained | /upgrade, /settings | User | Show all, Credit breakdown | n/a | components/upgrade-client.tsx | Yes | Yes | plans-and-credits | |
| 59 | Settings | Analytics | Personal usage statistics | /analytics | User | n/a | n/a | components/analytics-view.tsx | Yes | Yes | analytics | |
| 60 | Roles | Shared-meeting read-only view | What a sharee sees on a shared meeting | /m/<id> (as sharee) | Sharee | Read-only banner | n/a | app/(app)/m/[id]/page.tsx, lib/meeting-access.ts | No | No | roles-and-permissions | Needs a second account |
| 61 | Admin | Admin console | Payments, users, contracts, spend (admins only) | /admin | Admin | Slips, users, contracts, spend, vendors | n/a | app/(app)/admin/page.tsx, components/admin-*.tsx | No | No | admin-console | Deliberately not opened: shows real customer data |
| 62 | Layout | Mobile / responsive layout | All screens adapted to phone width | all | User | n/a | n/a | Tailwind layouts | Yes | Yes | mobile | 17 mobile captures, no horizontal overflow |