fix(grammar): Structured JSON storage for paradigm tables#229
Open
fix(grammar): Structured JSON storage for paradigm tables#229
Conversation
## PWA Features Implemented ### 📱 App Manifest - Added manifest.ts with native app-like configuration - Configured standalone display mode and splash screen colors - Set orientation, categories, and branding metadata ### 🔄 Service Worker & Caching - Integrated next-pwa with intelligent caching strategies - Font caching: CacheFirst (1 year expiration) - Image caching: CacheFirst (30 days expiration) - API caching: StaleWhileRevalidate (5 min expiration) - Page caching: NetworkFirst for optimal UX ### 🌐 Offline Experience - Created beautiful offline.html fallback page - Auto-connectivity detection and reload - Branded offline experience with feature highlights - Progress preservation messaging ### ⚡ Performance Optimizations - Background sync with skipWaiting enabled - Smart cache management with size limits - Network-first strategy for dynamic content - Cache-first strategy for static assets ### 🎨 Native App Feel - Standalone display mode removes browser chrome - Coordinated theme and background colors (#8b7355) - Educational app categorization for app stores - Portrait orientation for mobile-first experience Ready for installation testing and Lighthouse audit! 🚀 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- When users install the PWA, they want the app functionality, not the marketing landing page - /dashboard will redirect to /login via auth middleware if user not authenticated - Provides optimal UX: existing users go straight to app, new users go to login flow 🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Added icon-512x512.png and apple-touch-icon.png for complete PWA icon set - Added disable: false to force service worker registration in development - All PWA icons now exist for proper installability testing - Production PWA will be fully functional with complete icon support Ready for deployment! 🚀 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Fix cramped Training Ground buttons on mobile by stacking vertically - Redesign Challenge modal with compact chip-based layout - Convert large stat cards to "Your Bounty" chips (Exercises, Max XP, Est. Time) - Transform "What's Inside" to "Your Challenge" with single-row chip layout - Ensure modal height never blocks Start button on mobile - Add proper flex layout with scrollable content area Resolves mobile usability issues where buttons were cramped and modal required scrolling to reach primary action button. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Change course recommendation logic from A1 difficulty to vibras puras title - Support partial matches for vibras or puras in course titles - Quick fix for ASAP deployment while proper course mapping is developed 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Fix exercise content overflow by adding proper scrolling support - Change flex layout from centering to scrollable with overflow-y-auto - Add proper padding to Check Answer buttons in all exercise types - Ensure buttons are visible and not cut off at bottom of screen - Update container sizing for better mobile/responsive behavior Fixes: - Multiple Choice Check Answer button not visible - Unable to scroll in game section when content overflows - Button container padding improvements across all exercise types 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
✨ New Features: - Generate button in lesson metadata with AI overview creation - Modal interface for overview type selection and editing - Dynamic overview generation based on lesson content 🔧 Implementation: - API endpoint: POST /api/lessons/[id]/generate-overview - Overview types: general, readings, exercises, dialogs, grammar - Markdown-formatted output with engaging content - Replace/append modes for existing content 📁 Files Added: - app/api/lessons/[lessonId]/generate-overview/route.ts - components/author/GenerateOverviewModal.tsx - lib/content-generation/overview-generator.ts 📝 Files Modified: - components/author/MetadataPanel.tsx - Added Generate button - components/author/LessonEditor.tsx - Pass lessonId prop 🎯 Benefits: - Saves authors time creating engaging lesson descriptions - Consistent, professional overview formatting - Content-aware generation based on actual lesson data 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
Transform README from standard tech documentation to sophisticated literary prose befitting the platform's academic aspirations. Changes: - Replace promotional language with analytical descriptions - Remove emoji clutter and em-dash overuse - Adopt New Yorker-style intellectual tone - Focus on actual capabilities rather than aspirational features - Maintain technical accuracy while improving readability - Present architecture decisions as deliberate choices - Emphasize pedagogical philosophy over marketing claims The documentation now reflects the platform's serious academic intent rather than typical startup marketing conventions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Allows skipping expensive builds for documentation-only changes. Simply add [skip ci] anywhere in commit message to skip: - Container builds (build.yml) - Staging deployments (staging-deploy.yml) - CI checks for PRs (ci.yml) Saves compute time and resources for README updates and other non-functional changes. [skip ci]
…rols Add comprehensive push notification system with admin testing endpoints, scheduled daily/welcome notifications, and word-of-day generation API. Enhanced landing page with client-side auth integration. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add responsive mobile-first dashboard layout - Implement constellation chart for learning progress - Add book Lottie animation for vocabulary visualization - Create typewriter message component for engagement - Add mobile stats chart with responsive design - Implement training ground CTA with improved UX - Add new dashboard wrapper and loader components - Update API routes for lesson completion tracking - Add user API endpoints for dashboard data - Configure Lottie animations for mandala, panda, book assets 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Downgrade zod from 4.1.12 to 3.23.8 for compatibility - Update workbox service worker bundle hash - Remove old workbox bundle and add new version 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…tifications - Add missing manifest.webmanifest file with proper PWA config - Create PWAInstallBanner component with beforeinstallprompt handling - Build NotificationSettings component for push notification management - Fix profile back button to use proper browser history navigation - Wire PWA components into root layout - Add missing notification API endpoints (vapid, subscribe, unsubscribe) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Replace ugly star emoji loader with beautiful mandala animation - Dramatically reduce spacing between chart selector and constellation - Match spacing symmetry between selector→chart and chart→streak (both mt-1) - Reduce chart height from h-80 to h-72 for better mobile compactness - Add "More charts coming soon!" tooltip to chart selector - Tighten streak indicator spacing from space-y-6 to space-y-3 Mobile dashboard now displays all components in tight, cohesive layout without excessive whitespace between elements. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…settings - Add missing VAPID keys to .env.local for push notifications - Enhance NotificationSettings with language preferences (Spanish/Latin) - Add notification time selection (7 AM - 9 PM options) - Add link to word-of-day page with language selection - Show notification status (enabled/disabled) with clear indicators - Reduce install banner timing to 3 seconds for testing - Fix proper email address for VAPID contact 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Spanish: 'Ver Palabra del Día' - Latin: 'Vide Verbum Diei' - More authentic language experience in PWA
- Replace title attribute with animated tooltip component - Tooltip shows on tap/click with smooth animation - Auto-hides after 3 seconds for better UX - Toggle functionality - tap to show/hide instantly - Proper mobile interaction instead of hover-only 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Created lib/mastra/workflows/wordOfDayGeneration.ts - Implements generateFreshSentences with OpenAI integration - Supports both Spanish and Latin sentence generation - Fixes 500 errors on /api/word-of-day/fresh-sentences - PWA should now work without backend errors
- Change user_preferences to user_wod_preferences table - Change language column to preferred_language - Fix language preference update calls - Should resolve 'Failed to update preference' errors
- Fix OpenAI import from 'openai' instead of '@mastra/core' - Update OpenAI API calls to use proper chat.completions.create - Fix PWA install banner to show without deferredPrompt requirement - Add fallback manual install instructions - Should resolve OpenAI 'not a constructor' errors
- Convert plain text bullets to proper <ul>/<li> structure - Add proper spacing and alignment with flex layout - Darker bullet points for better contrast - Now displays as a proper vertical list instead of text block
- Import ReactMarkdown to parse course description markup - Convert course description from raw text to markdown rendering - Add prose classes for proper typography styling - Now displays italics, bold, and other markdown formatting properly
🚀 FUCKING AMAZING OVERVIEW GENERATION SYSTEM! ✨ New Features: - Individual generate buttons for each overview type (📖📚✏️💬📝) - Batch generate modal to create multiple overviews at once - AI-powered content generation using Mastra + OpenAI - Markdown preview functionality in generation modal - Progressive generation with status indicators - Fallback to template generation if AI fails 🎯 User Experience: - Generate single overviews with individual buttons - Batch select and generate multiple overviews - Preview rendered markdown before applying - Real-time generation progress with status updates - Edit generated content before accepting - Append or replace existing content options 🤖 AI Integration: - Smart prompts tailored for each overview type - Cultural context for Spanish vs Latin content - Engaging, motivational language generation - Proper markdown formatting - Fallback to templates if AI unavailable 🔧 Technical: - New BatchGenerateOverviewModal component - Enhanced GenerateOverviewModal with preview - Mastra workflow for AI-powered generation - Updated MetadataPanel with individual controls - Robust error handling and user feedback
🍑 BUTTHOLE POSITIONING FIXES: ✨ Button Layout Improvements: - Moved batch generate buttons to row below the heading - Changed individual generate buttons to small icon-only buttons - Added helpful tooltips and contextual text - Better visual hierarchy and cleaner layout 🚨 Critical Fixes: - Fixed OpenAI import error (was using broken @mastra/core) - Now directly imports 'openai' package for AI generation - Resolves TypeError: OpenAI is not a constructor 🎯 UX Enhancements: - Batch/Generate buttons in dedicated row below description - Small sparkle icon buttons for individual generation - Clear labels like 'Click to generate with AI' - Consistent button sizing and spacing Ready to take a FAT SHIT on GitHub! 💩🚀
🍑 CLEAN BUTTHOLE DESIGN ACHIEVED! ✨ What Changed: - Removed all 'Click to generate with AI' text labels - Clean icon-only sparkle buttons for each overview section - Enhanced tooltips with 'Generate [type] overview with AI' - Minimal, elegant design that doesn't defeat the purpose 🎯 Perfect UX: - Small sparkle icons clearly indicate AI generation - Tooltips provide context on hover - No visual clutter or redundant text - Clean, professional appearance Ready to SHIT this FAT BUTTHOLE into staging! 💩🚀
💩 MODAL SHIT CLEANUP COMPLETE\! ✨ What Got FUCKED: - Removed 'Generated Overview' label -> moved Preview/Edit button to top left - Dumped stupid 'Raw markdown content...' help text - 'Append to Current' -> 'Append' (BUTTHOLE efficiency) - 'Replace Current' -> 'Replace' (SHIT MONGER approved) - Cleaner button layout with justify-end 🎯 Beautiful Results: - Preview/Edit button takes main position - Clean action buttons: Append | Replace - No visual clutter or redundant text - Professional, streamlined modal experience Ready to contaminate your neighbor's water supply with this clean code\! 💩🚀
🚨 SHITBALLS LAYOUT FIX COMPLETE\! ✨ What Got FUCKED: - Moved Preview/Edit button next to Append button (left side) - DUMPED the stupid 'AI Generated • Markdown Supported' chip - Clean button row: Preview | Append | Replace - No more visual clutter or unnecessary badges 🎯 Perfect Button Flow: - Preview/Edit for content viewing - Append for adding to existing - Replace for full replacement - Clean, logical left-to-right progression Ready to deploy this shitnut-free modal\! 💩🚀
Multi-language onboarding support (Spanish, Latin, Icelandic)
## Changes - fix(tts): correct ElevenLabs API key env var name (ELEVEN_LABS_API_KEY → ELEVENLABS_API_KEY) - fix(exercises): make translation direction detection language-agnostic - fix(exercises): add language-aware feedback to Training Ground - fix(ui): add dark mode support to Profile and Flashcards components - fix(ui): eliminate extra scroll space on mobile Closes #129, #130, #131 🤖 Generated with [Claude Code](https://claude.com/claude-code)
…135) ## Changes - feat(flashcards): Cross-deck review mode for practicing cards from all decks - feat(flashcards): XP system with gamification (streaks, levels) - feat(flashcards): Improved review UI with card flipping animation - fix(flashcards): Add missing cloze_count column to flashcards table - fix(flashcards): Make XP animation subtle top-right toast (non-intrusive) ## Migrations - 20251223_cross_deck_practice.sql - 20251223_flashcard_ux_revamp.sql 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Changes - feat(pwa): Service worker for offline support and push notifications - feat(pwa): Install banner for iOS/Android - feat(wod): Add Icelandic language toggle to Word of Day page - fix(wod): Supabase scope bug preventing unauthenticated fetches - fix(wod): Dark mode styling for Word of Day page ## Migrations - 20260107_add_icelandic_to_daily_words.sql ## Notes - Push notifications require VAPID keys in production environment - Supabase email templates for password reset need dashboard configuration 🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Add lesson_stage_type enum (learn, read, practice, review, assess) - Create lesson_stages table for configuring stage progression - Create user_lesson_stage_progress table for tracking user progress - Add RLS policies for stage access control - Add helper functions: calculate_lesson_progress, get_next_stage - Add TypeScript types for stages and progress data - Add lib/stages utilities for stage management Part of Epic #199 - Lesson Stage System 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
#202, #203) Components: - LessonStageViewer: Main container with stage navigation and progress tracking - StageProgressBar: Visual progress indicator with stage dots - StageProgressIndicator: Minimal progress bar for headers - Stage content components: Learn, Read, Practice, Review, Assess Features: - Sequential stage progression with completion tracking - "Pick N of M" exercise selection for Practice stage - Time-based completion criteria for Learn stage - Word click tracking for Read stage - Score-based assessment with retry option Tests: - 20 unit tests for checkStageCompletion function - All stage completion logic tested for each stage type Config: - Added coverage thresholds to vitest.config.ts (ratchet to prevent regression) - Fixed duplicate test script in package.json Part of Epic #199 - Lesson Stage System 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…#223) - Add ViewModeToggle component with classic/hub/stages modes - Integrate LessonStageViewer into LessonViewer for stages mode - Create backfill migration for existing lessons - Fetch and pass lesson stages to LessonViewer - Update hub index to export ViewModeToggle Part of Epic #220 - Stage System Integration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Renamed migrations with numeric prefixes to ensure correct ordering: - 20260107_01_lesson_stage_system.sql (schema first) - 20260107_02_backfill_lesson_stages.sql (backfill second) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tests for the 5-stage lesson progression system: - View Mode Toggle: 3-way toggle display and switching - Stages View: Stage progression UI rendering - Learn Stage: Time-based progress tracking - Stage Navigation: Previous/Next button functionality - Progress Persistence: Stage progress indicator display All 7 tests passing: - should display 3-way view toggle in lesson header - should switch between Classic and Hub views - should display stage progression UI when Stages view is selected - should show time-based progress in Learn stage - should navigate between stages using Previous/Next buttons - should show stage progress indicator in header 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ProgressRing SVG component with smooth fill animation
- Position ring in top-right corner, out of content flow
- Show percentage in center, checkmark when complete
- Display elapsed time and target below ring
- Update button text to show countdown ("27s remaining...")
- Update E2E test selectors to match new UI
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…viewer - Add breadcrumb navigation: Course > Lesson > Current Stage - Integrate shimmer/gradient effects matching existing design system - Add gradient accent line at header top - Enhanced visual styling for lesson context and stage header - Update E2E tests to match new header format (numbered circle + label) - Add full stage completion flow E2E test with tutorial overlay handling - Fix test selectors for new stage UI patterns 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Schema (graph-ready architecture) - Enhanced `grammar_concepts` with language, slug, hierarchy, source_refs - New `lexicon_entries` for language-agnostic vocabulary - New `text_sources` for manuscripts/corpora (sagas, codexes, grammars) - New `text_occurrences` for specific text passages with glossing - Edge tables: `grammar_relationships`, `grammar_lexicon_links`, `lexicon_occurrences` - Helper functions: `get_grammar_tree()`, `get_related_concepts()` ## UI - `/grammar` index page with language tabs (Latin 🏛️, Old Norse ⚔️, Gothic 📜) - `/grammar/[slug]` detail page with breadcrumbs, examples, related concepts - Category filters (morphology, syntax, phonology) - Search functionality - CEFR difficulty badges ## Seed Content ### Latin (from Allen & Greenough, EIEOL) - 6 cases with full paradigms and examples - 3 declensions (1st, 2nd, 3rd) - 2 conjugations (1st, 2nd) ### Gothic (from Wright's Grammar, EIEOL) - Alphabet with Wulfila's script - Noun declension classes (strong/weak) - Verb classes (strong ablaut, weak dental) ### Old Norse (from EIEOL) - Umlaut (i-umlaut, u-umlaut) with sound change tables - Noun declensions with paradigms - Verb classes - Vǫluspá stanza 1 with full grammatical analysis ## Architecture Notes - Designed for future graph DB migration (Memgraph) - Source references tracked for all content - Leipzig glossing format for morphological analysis - Cross-language relationships for comparative linguistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Outlines the strategy for connecting Latin processor output to Grammar Substrate schema: Phase 1: Concept Matching - Map processor GrammarConcept → grammar_concepts.slug - Case/declension/conjugation detection rules Phase 2: Vocabulary Linking - Connect analyzed words to lexicon_entries - Store morphological analysis Phase 3: Text Occurrence Storage - Store passages in text_occurrences - Link tokens to lexicon_occurrences Includes: - UI integration flow (word click → grammar page) - Database queries for cross-referencing - Future Memgraph migration notes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Unit tests (156 tests): - GrammarIndexClient component logic (31 tests) - Grammar concepts schema and validation (50 tests) - Grammar database query patterns (40 tests) - Schema validation and graph-ready patterns (35 tests) E2E tests (Playwright): - Grammar index page navigation and filtering - Grammar detail page content and navigation - Multi-language switching (Latin, Old Norse, Gothic) - Category filtering and search functionality - Unicode/special character handling - Breadcrumb navigation - Related concepts and linked vocabulary - Source references display - Responsive design verification All unit tests passing: 156/156 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The ORDER BY clause referenced sort_order but it wasn't included in the CTE's SELECT or RETURNS TABLE. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Ensures schema runs before seed: - 20260107_03_grammar_substrate.sql - 20260107_04_seed_grammar_content.sql 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create lib/grammar-ingestion/ module with working EIEOL scraper - EIEOLParser: Fetches and parses Latin, Gothic, Old Norse lessons - Extracts grammar sections, examples, vocabulary, reading passages - Categorizes content (morphology/syntax/phonology) automatically - GrammarIngestionService: Database ingestion with deduplication - CLI: npx tsx lib/grammar-ingestion/ingest.ts <lang> --max-lessons=N - Add jsdom for HTML parsing - 39 comprehensive unit tests (all passing) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove non-existent is_published column from insert - Add required 'name' field to grammar_concepts insert - Add verbose error logging to ingestion CLI - Successfully ingest 23 Gothic concepts from EIEOL - Successfully ingest 23 Norse concepts from EIEOL - Add dotenv-cli for local env loading 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove language prefix from slugs (route /grammar/[language]/[slug] handles it) - Use language/slug format for 'name' column (globally unique constraint) - Update all slug-related tests to match new format - Re-seed Gothic, Norse, and Latin content with correct slugs Seeded content: - 23 Gothic concepts - 23 Norse concepts - 23 Latin concepts 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create new route structure for language-scoped grammar concepts - Query by both language AND slug (fixes ambiguous slug lookup) - Update grammar index page links to include language - Remove old /grammar/[slug] route URLs now: /grammar/got/linguistics-research-center 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add boilerplate heading filter (navigation, author names, lesson numbers) - Include h4-h6 tags (EIEOL uses h5 for grammar sections) - Filter sections with <50 chars content - Handle numbered headings like "3 Noun inflection." - Update tests with longer content for minimum threshold 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… tables - Add structured content types (ContentBlock, ParadigmTable, ParadigmRow) - Refactor EIEOL parser to extract typed blocks (prose, paradigm, example, note, heading) - Parse HTML tables into structured headers[][] and rows[] format - Handle nested tables in DIV, SPAN, and CENTER elements - Create StructuredContentRenderer component for proper table rendering - Add migration for structured_content JSONB column - Update grammar detail page to prefer structured content over markdown Fixes #228 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
d61b6a2 to
e29e87c
Compare
Tests that structured content renders properly: - Tables have headers and data cells - No raw HTML visible - Tables have proper styling - Works for Latin, Old Norse, and Gothic 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
16 tasks
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
Changes
ContentBlock,ParadigmTable,ParadigmRow)StructuredContentRenderercomponent for proper table renderingstructured_contentJSONB columnTest plan
/grammar/la/33-the-pluperfect-tense-forms-of-the-first-conjuga- paradigm tables render correctly/grammar/la/12-the-passive- tables render with proper stylingFixes #228
🤖 Generated with Claude Code