feat: VoiceKeeper new features — keyboard UX, sort, default filter, checkboxes, export, acronym validation - #48
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📱 Preview Update ReadyBranch: Scan to open in Expo Go
|
Owner
Author
|
Add a ticket : enabled or not acronyme détection. And also auto save the note after recording (for biking or else) |
…rt, edit-by-default - Wrap note editor in KeyboardAvoidingView so keyboard never covers text (#1, #8) - Set isEditing=true by default without auto-focusing textarea (#9) - Make title TextInput multiline with lineHeight:34 so long titles wrap (#8) - Add native Share sheet via React Native Share API — share button in view mode (#7) - Add '+ Add item' row to ActionItemsList with inline TextInput for action_items format (#4) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add NoteSort type (date_desc/asc, title_asc/desc); server-side ordering in fetchNotes (#5) - Sort picker bottom-sheet modal in home screen header with active checkmark (#5) - Store defaultTagId in user_preferences via Supabase upsert (migration 019) (#6) - PreferencesContext exposes defaultTagId/setDefaultTagId; home screen applies it on mount (#6) - setDefaultTagId service function for Supabase persistence (#6) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add a tag pill selector in the Tags settings section so users can tap any tag (or None) to set it as their landing filter — persists across sessions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
After Whisper transcribes audio, a GPT-5-nano call flags low-confidence terms (acronyms, proper nouns, brand names). A bottom-sheet modal shows each uncertain term with its suggested correction; users can edit or skip. Confirmed corrections are saved to user_validated_terms (migration 020) and injected into future formatting prompts so the LLM uses the right spelling. - detectUncertainTerms() in edge function: post-transcription GPT pass - validated_terms injected into buildSystemPrompt for format_only mode - AcronymValidationModal: editable pill list with skip-per-term support - saveValidatedTerms / loadValidatedTerms services with Supabase upsert - recording/[id].tsx pauses auto-advance for modal when terms are found Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AcronymValidationModal: deduplicate uncertain terms by original field to prevent duplicate React keys and repeated entries in the modal - services/notes: add 'id' as secondary sort key in all fetchNotes cases to ensure stable ordering when primary sort values are equal - NotesContext: persist sort preference to AsyncStorage so it survives app restarts instead of always resetting to 'date_desc' Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… detection Switch back from json_object to json_schema with strict mode enabled. Previous strict schema failed silently due to: missing strict:true, invalid type:["string","null"] syntax (must use anyOf), unsupported maxItems, and missing additionalProperties:false at each level. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The handleReformat function in note/[id].tsx was calling formatTranscription without loading or passing the user's saved validated terms, so previous acronym corrections were not applied when reformatting an existing note. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- New screen at /acronyms listing all user-confirmed term corrections - Each row shows the original (misheard) term → corrected spelling - Per-term remove button with confirmation dialog - "Clear all" button in the header to wipe all corrections at once - Empty state with explanation of how the feature works - Accessible from Settings > Notes > Saved Terms - Added deleteValidatedTerm / deleteAllValidatedTerms to validatedTerms service Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e not re-flagged - transcribeRecording() now accepts knownTerms and forwards them to the edge function - Both auto-advance and manual transcribe paths load existing validated terms before calling - Edge function detectUncertainTerms() skips terms already confirmed by the user - Formatting system prompt clarified: LLM now told to replace misrecognized spellings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
End2EndAI
force-pushed
the
feature/voicekeeper-new-features
branch
from
April 2, 2026 03:20
3e82ad3 to
b7b00a4
Compare
The header had three items (sort pill + "Recordings" text + settings circle) that overflowed on standard screen widths, pushing the settings button off-screen. Convert Recordings to a compact 44x44 icon button (three horizontal bars) matching the settings button style. Both icon buttons now share the same iconButton/iconButtonPressed style. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Header:
- Move sort control into subtitle row ("10 notes · ↕ Title A→Z"), tappable
- Header right side now has only 2 icon buttons (recordings + settings) — no more overflow
Action items:
- Open in view/checkbox mode by default (not text edit mode)
- Add ✕ remove button per item
- Unchecked items rendered first; checked items grouped below with a divider
- Checked items keep strikethrough; unchecked/checked split updates live
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a 'Manual order' sort option. When selected, notes display with drag handles on the right. Dragging reorders the list and persists the order to AsyncStorage. New notes are appended at the end of the saved order. - types/index.ts: add 'manual' to NoteSort - services/notes.ts: manual sort fetches by date_desc (order applied client-side) - contexts/NotesContext.tsx: manualOrder state, setManualOrder, filteredNotes applies saved order - components/DraggableNoteList.tsx: PanResponder-based drag-to-reorder list - components/NoteGrid.tsx: conditionally renders DraggableNoteList when draggable=true - app/index.tsx: wire up Manual sort option and pass draggable/onReorder to NoteGrid Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Long press a note card to copy title + content to clipboard; card highlights with a 'Copied!' badge for 1.5 s (expo-clipboard) - AI auto-tagging limited to 1 tag per note (was up to 3); manual tagging remains unlimited - Text note creation screen now shows a tag picker at the bottom; selected tags are applied on save Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The session reset setState was missing manualOrder, causing it to be undefined. Added defensive fallback in filteredNotes useMemo as well. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Use React state for scrollEnabled instead of setNativeProps (works on web) - Add Capture variants of PanResponder handlers to intercept events before browser scroll takes over - Default sort changed from date_desc to manual; persisted via AsyncStorage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Drag handles only shown when reorder mode is active (toggle button in header, only visible when sort is Manual order) - Toggle button highlights with primary color when active - Removing RefreshControl from DraggableNoteList and adding bounces=false + overScrollMode=never to prevent pull-to-refresh triggering during drag Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r button Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
New features and polish across the VoiceKeeper app:
Migrations
019_default_tag.sqldefault_tag_idcolumn onuser_preferences020_validated_terms.sqluser_validated_termstable with RLSTest plan
🤖 Generated with Claude Code