diff --git a/app/README.md b/app/README.md
index d22a330..9bb27a7 100644
--- a/app/README.md
+++ b/app/README.md
@@ -10,6 +10,7 @@ The main application module that serves as the entry point for the application.
- Configures Hilt dependency injection for the entire app
- Manages application lifecycle and initialization
- Provides the main activity that initializes the composable function `applicationScaffold`
+- Handles CSV file export functionality for saved words
- Defines app permissions and manifest configuration
---
@@ -18,12 +19,17 @@ The main application module that serves as the entry point for the application.
### ``ApplicationClass``
The main application class annotated with `@HiltAndroidApp` that initializes Hilt dependency injection
-for the entire application. Loads users data saved locally onCreate.
+for the entire application. Initializes the SavedWordsRepository on app startup.
### ``MainActivity``
The main activity of the application that serves as the entry point for user interaction. It's annotated
with `@AndroidEntryPoint` for Hilt integration and uses Jetpack Compose to render the UI through the
-`applicationScaffold()` composable. Enables edge-to-edge display.
+`applicationScaffold()` composable. Enables edge-to-edge display and handles CSV file export functionality
+through the SaveFileEventBus.
+
+### ``SaveFileContract``
+An ActivityResultContract that handles the file save dialog for exporting saved words as CSV files.
+Creates the appropriate intent for saving CSV files with the default filename "exported_words.csv".
---
@@ -36,6 +42,11 @@ flowchart TB
SavedWordsRepositoryLocalModule["SavedWordsRepositoryLocalModule"]
end
+ subgraph ":common"
+
+ EventBusModule["EventBusModule"]
+ end
+
subgraph ":scaffold"
ApplicationScaffold["applicationScaffold()"]
@@ -48,6 +59,7 @@ flowchart TB
end
SavedWordsRepositoryLocalModule -- SavedWordsRepositoryLocalImpl --> ApplicationClass
+ EventBusModule -- EventBus.SaveFileEvent --> MainActivity
ApplicationScaffold --> MainActivity
```
diff --git a/common/README.md b/common/README.md
index 3dca911..e5973f7 100644
--- a/common/README.md
+++ b/common/README.md
@@ -9,17 +9,71 @@ for storing UI component test tags to simplify their management.
### 🔧 Key Functionalities
-- Provides non-API-specific Kotlin files that allow modules to communicate without depending on concrete implementations.
-- Manages test tags for UI elements in a centralized and maintainable way.
+- Provides non-API-specific Kotlin files that allow modules to communicate without depending on concrete implementations
+- Manages test tags for UI elements in a centralized and maintainable way
+- Defines core data models and interfaces for the application
+- Provides event bus system for cross-module communication
+- Manages connectivity status monitoring
+- Defines repository interfaces for data layer abstraction
+- Centralizes navigation definitions and screen routing
+- Provides dependency injection modules for coroutine scopes
+- Defines export functionality interfaces and data models
+- Offers test helper utilities for consistent testing across modules
---
## 🧠 Class Responsibilities
-| Class/File | Responsibility Description |
-|--------------|-----------------------------------------------------------|
-| `Navigation` | SSOT for navigating using Compose's Navigation component. |
-| `Screens` | Defines all screens available in the app. |
+### ``Navigation``
+SSOT for navigating using Compose's Navigation component. Defines all navigation routes and destinations
+for the application.
+
+### ``Screens``
+Defines all screens available in the app. Contains the screen definitions used by the navigation system.
+
+### ``TestTags``
+Centralized object containing all UI test tags for consistent testing across the application. Provides
+a single source of truth for test identifiers used in UI testing.
+
+### ``EventBus``
+Interface for event-driven communication between modules. Provides a generic event bus system that
+allows modules to communicate without direct dependencies.
+
+### ``SaveFileEvent``
+Events for handling CSV file export operations. Defines the event types used in the file export
+workflow including save requests and success/error states.
+
+### ``SavedWord``
+Data model representing a saved word with UUID, word text, and language. Core entity used throughout
+the application for managing user's saved vocabulary.
+
+### ``ExportSettings``
+Configuration model for word export operations. Contains settings and preferences for how words
+should be exported to CSV format.
+
+### ``SavedWordsRepository``
+Interface for managing saved words CRUD operations. Defines the contract for data operations on
+saved words including save, delete, and load operations.
+
+### ``ConnectivityObserver``
+Interface for monitoring network connectivity status. Provides a way to observe network state changes
+throughout the application.
+
+### ``CoroutineScopeModule``
+Hilt module providing coroutine scope qualifiers. Manages dependency injection for different
+coroutine scopes used throughout the application.
+
+### ``CsvFile``
+Data model for CSV file export operations. Represents the structure of exported CSV files with
+their content and metadata.
+
+### ``ExportRepository``
+Interface for handling export operations. Defines the contract for exporting saved words to various
+formats and destinations.
+
+### ``ExportError``
+Error types for export operations. Defines the different types of errors that can occur during
+export operations for proper error handling.
---
diff --git a/feature/saved/README.md b/feature/saved/README.md
index e1380a9..738842d 100644
--- a/feature/saved/README.md
+++ b/feature/saved/README.md
@@ -2,12 +2,13 @@
## 📝 Overview
-A feature module responsible for managing locally saved words. This module provides two main features: viewing/managing saved words and exporting them. It follows Clean Architecture principles with clear separation of concerns, implements modern Android development practices using Jetpack Compose and architectural patterns such as MVVM, MVI and DI.
+A feature module responsible for managing locally saved words. This module provides three main features: viewing/managing saved words, exporting them, and handling export results. It follows Clean Architecture principles with clear separation of concerns, implements modern Android development practices using Jetpack Compose and architectural patterns such as MVVM, MVI and DI.
### 🔧 Key Functionalities
- [**SavedWords**](src/main/java/eu/project/saved/savedWords/README.md): Display, manage, and delete saved words with confirmation dialogs
- [**ExportWords**](src/main/java/eu/project/saved/exportWords/README.md): Select and export saved words with various export methods
+- [**ExportResult**](src/main/java/eu/project/saved/exportResult/README.md): Handle export operation results and file saving operations
---
@@ -18,7 +19,8 @@ The module follows a layered architecture pattern with the following structure:
```
saved/
├── savedWords/ # Saved words management feature
-└── exportWords/ # Export functionality feature
+├── exportWords/ # Export functionality feature
+└── exportResult/ # Export result handling and file saving
```
### 🧬 Module dependency graph
diff --git a/feature/saved/src/main/java/eu/project/saved/exportResult/README.md b/feature/saved/src/main/java/eu/project/saved/exportResult/README.md
new file mode 100644
index 0000000..7de4b60
--- /dev/null
+++ b/feature/saved/src/main/java/eu/project/saved/exportResult/README.md
@@ -0,0 +1,126 @@
+# 📦 Directory :exportResult
+
+## 📝 Overview
+
+The export result feature handles the final step of the word export workflow. It displays the result of the CSV export operation and provides options to save the exported file to the device or handle various error states. This feature manages the complete lifecycle from receiving export settings to successfully saving the CSV file.
+
+### 🔧 Key Functionalities
+
+- Displays export operation results and status
+- Handles CSV file download and preparation for saving
+- Manages file save operations through the system file picker
+- Provides error handling for failed downloads and save operations
+- Shows loading states during export operations
+- Integrates with the event bus system for file save coordination
+
+---
+
+## 🧠 Class Responsibilities
+
+### ``ExportResultScreenState``
+Sealed class defining all possible states of the export result screen:
+- `Loading` - Initial loading state while processing export settings
+- `ReadyToSaveFile` - CSV file successfully prepared and ready for saving
+- `FailedToLoadFile` - Error occurred during CSV file generation
+- `SavingFile` - File save operation in progress
+- `FileSavedSuccessfully` - File successfully saved to device
+- `SaveFileError` - Error occurred during file save operation
+
+### ``ExportResultViewModel``
+Manages the business logic for the export result feature:
+- Processes export settings and initiates CSV download
+- Handles file save operations through the event bus
+- Manages screen state transitions based on export and save events
+- Coordinates with the ExportRepository for CSV generation
+- Provides user actions for saving files and error recovery
+
+### ``ExportResultScreen``
+Main composable screen that orchestrates the UI based on current state:
+- Renders different content based on the current screen state
+- Handles user interactions and delegates actions to the ViewModel
+- Provides navigation callbacks for error recovery and completion
+- Manages the overall layout and content arrangement
+
+### ``ExportResultImpl``
+Navigation implementation that integrates the feature into the app:
+- Sets up the composable route for the export result screen
+- Manages navigation parameters (export settings)
+- Handles navigation callbacks for back navigation
+- Integrates with Hilt for dependency injection
+
+### ``ExportResultReadyToSaveFileContent``
+UI component for when the CSV file is ready to be saved:
+- Displays download illustration and success message
+- Provides "Save Exported Words" button
+- Shows explanatory text about the export process
+
+### ``ExportResultSaveFileErrorContent``
+UI component for file save errors:
+- Displays error message and illustration
+- Provides "Try Again Later" button for error recovery
+- Shows user-friendly error information
+
+### ``ExportResultSavingFileContent``
+UI component for the file saving process:
+- Shows loading state during file save operation
+- Provides visual feedback that save is in progress
+
+### ``ExportResultFileSavedSuccessfullyContent``
+UI component for successful file save:
+- Displays success message and illustration
+- Provides "Continue" button to proceed
+- Confirms successful file save operation
+
+### ``ExportResultLoadingContent``
+UI component for initial loading state:
+- Shows loading animation while processing export settings
+- Provides visual feedback during CSV generation
+
+### ``ExportResultFailedToLoadContent``
+UI component for download failures:
+- Displays error message and illustration
+- Provides "Try Again Later" button for error recovery
+- Shows user-friendly error information for download failures
+
+---
+
+## 🧬 Class Dependency Graph
+
+```mermaid
+flowchart TB
+
+ subgraph ":common"
+ ExportRepository["ExportRepository"]
+ SaveFileEventBus["SaveFileEventBus"]
+ ExportSettings["ExportSettings"]
+ CsvFile["CsvFile"]
+ end
+
+ subgraph ":exportResult"
+ ExportResultViewModel["ExportResultViewModel"]
+ ExportResultScreen["ExportResultScreen"]
+ ExportResultImpl["ExportResultImpl"]
+ ExportResultScreenState["ExportResultScreenState"]
+ end
+
+ ExportRepository --> ExportResultViewModel
+ SaveFileEventBus --> ExportResultViewModel
+ ExportSettings --> ExportResultViewModel
+ CsvFile --> ExportResultScreenState
+ ExportResultViewModel --> ExportResultScreen
+ ExportResultScreenState --> ExportResultScreen
+ ExportResultScreen --> ExportResultImpl
+ ExportResultViewModel --> ExportResultImpl
+```
+
+## 🧩 Module Dependency Graph
+
+```mermaid
+flowchart TD
+ COMMON([:common])
+ EXPORT_RESULT([:exportResult])
+ SCAFFOLD([:scaffold])
+
+ COMMON --> EXPORT_RESULT
+ EXPORT_RESULT --> SCAFFOLD
+```
\ No newline at end of file
diff --git a/scaffold/README.md b/scaffold/README.md
new file mode 100644
index 0000000..2ff56a1
--- /dev/null
+++ b/scaffold/README.md
@@ -0,0 +1,102 @@
+# 📦 Module :scaffold
+
+## 📝 Overview
+
+The scaffold module serves as the main UI orchestrator and navigation hub for the entire application. It provides the foundational structure that brings together all feature modules, navigation, and common UI components into a cohesive user experience. The module implements a Material3 Scaffold with integrated navigation, top bar, and floating action button, creating the app's main navigation framework.
+
+### 🔧 Key Functionalities
+
+- Provides the main application scaffold structure using Material3 design principles
+- Orchestrates navigation between all feature modules using Compose Navigation
+- Manages the top bar with dynamic content based on current screen
+- Controls floating action button visibility and behavior across different screens
+- Handles edge-to-edge display with proper status bar insets
+- Integrates all feature implementations into a unified navigation system
+- Manages navigation state and back stack handling
+
+---
+
+## 🧠 Class Responsibilities
+
+### ``ApplicationScaffold``
+Main composable function that serves as the root UI structure:
+- Creates the Material3 Scaffold with proper theming and layout
+- Sets up navigation controller and NavHost for screen routing
+- Integrates top bar, floating action button, and content areas
+- Manages edge-to-edge display with status bar insets
+- Orchestrates all feature implementations and navigation flows
+
+### ``topBarImpl``
+Navigation implementation that integrates the top bar into the app:
+- Sets up the top bar composable with navigation controller integration
+- Manages top bar state through TopBarViewModel
+- Handles navigation callbacks for back navigation and info display
+- Provides dynamic content based on current route
+
+### ``floatingActionButtonImpl``
+Navigation implementation that integrates the floating action button:
+- Sets up the floating action button composable with navigation integration
+- Manages button visibility and state through FloatingActionButtonViewModel
+- Provides context-aware functionality based on current screen
+- Handles navigation to export words screen
+
+### ``homeImpl``
+Navigation implementation for the home feature:
+- Sets up the home screen composable route
+- Integrates with HomeViewModel for connectivity status
+- Provides navigation callbacks to other features
+- Handles navigation to saved words and transcribe screens
+
+### ``savedWordsImpl``
+Navigation implementation for the saved words feature:
+- Sets up the saved words screen composable route
+- Integrates with SavedWordsViewModel for data management
+- Provides navigation callbacks for word management
+- Handles navigation within the saved words flow
+
+### ``exportWordsImpl``
+Navigation implementation for the export words feature:
+- Sets up the export words screen composable route
+- Integrates with ExportWordsViewModel for export configuration
+- Provides navigation callbacks for export settings
+- Handles navigation to export result screen
+
+### ``exportResultImpl``
+Navigation implementation for the export result feature:
+- Sets up the export result screen composable route
+- Integrates with ExportResultViewModel for result handling
+- Provides navigation callbacks for file saving
+- Handles navigation parameters for export settings
+
+### ``selectAudioImpl``
+Navigation implementation for the audio selection feature:
+- Sets up the select audio screen composable route
+- Integrates with SelectAudioViewModel for audio handling
+- Provides navigation callbacks for audio selection
+- Handles navigation to transcription workflow
+
+---
+
+## 🏗️ Architecture
+
+## 🧩 Module dependency graph
+
+Shows which modules depend on `:scaffold` and which modules `:scaffold` itself depends on.
+
+```mermaid
+flowchart TD
+ COMMON([:common])
+ UI([:ui])
+ FEATURE_HOME([:feature:home])
+ FEATURE_SAVED([:feature:saved])
+ FEATURE_TRANSCRIBE([:feature:transcribe])
+ SCAFFOLD([:scaffold])
+ APP([:app])
+
+ COMMON --> SCAFFOLD
+ UI --> SCAFFOLD
+ FEATURE_HOME --> SCAFFOLD
+ FEATURE_SAVED --> SCAFFOLD
+ FEATURE_TRANSCRIBE --> SCAFFOLD
+ SCAFFOLD --> APP
+```
\ No newline at end of file
diff --git a/ui/README.md b/ui/README.md
new file mode 100644
index 0000000..ec3e541
--- /dev/null
+++ b/ui/README.md
@@ -0,0 +1,198 @@
+# 📦 Module :ui
+
+## 📝 Overview
+
+The UI module serves as the centralized design system and component library for the entire application. It provides reusable UI components, consistent theming, typography, colors, and standardized dimensions that ensure a cohesive and maintainable user interface across all features. The module follows Material3 design principles and implements a comprehensive component library that promotes consistency and reduces duplication.
+
+### 🔧 Key Functionalities
+
+- Provides a comprehensive library of reusable UI components
+- Implements consistent Material3 design system and theming
+- Defines standardized dimensions, spacing, and layout constants
+- Offers typography system with custom font family (Inter)
+- Manages color palette and theme consistency
+- Provides responsive and accessible UI components
+- Supports testing through integrated test tags
+
+---
+
+## 🧠 Class Responsibilities
+
+### ``WarningBanner``
+Reusable banner component for displaying warning messages:
+- Displays warning icon with headline and body text
+- Uses consistent warning color scheme and styling
+- Implements proper spacing and corner radius
+- Supports test tags for UI testing
+- Provides consistent visual hierarchy
+
+### ``PrimaryButton``
+Main action button component for primary user interactions:
+- Implements Material3 button design with custom colors
+- Provides consistent height (56dp) and styling
+- Supports disabled state with appropriate colors
+- Integrates with typography system for text styling
+- Includes test tag support for testing
+
+### ``SecondaryButton``
+Secondary action button for less prominent interactions:
+- Follows Material3 design principles
+- Maintains consistent styling with primary buttons
+- Provides visual hierarchy distinction
+- Supports disabled states and test tags
+
+### ``TextButton``
+Text-based button for tertiary actions:
+- Minimal button design for less prominent actions
+- Maintains accessibility and touch targets
+- Consistent with overall button system
+
+### ``IconButton``
+Icon-based button component:
+- Supports both primary and secondary icon buttons
+- Maintains consistent sizing and touch targets
+- Integrates with icon system and theming
+
+### ``SecondaryIconButton``
+Secondary variant of icon button:
+- Provides visual distinction from primary icon buttons
+- Maintains consistent behavior and accessibility
+
+### ``Checkbox``
+Custom checkbox component:
+- Implements Material3 checkbox design
+- Supports custom colors and states
+- Maintains accessibility standards
+
+### ``Headline Components``
+Typography components for different headline levels:
+- `headlineLarge` - Main page titles (32sp, Bold)
+- `headlineMedium` - Section headers (24sp, Bold)
+- `headlineSmall` - Subsection headers (16sp, Bold)
+- Consistent text alignment and color usage
+
+### ``Body Components``
+Text components for body content:
+- `bodyLarge` - Main content text (16sp, Normal)
+- `bodySmall` - Secondary content text (12sp, Normal)
+- Consistent typography and color application
+
+### ``Label Components``
+Text components for labels and captions:
+- `labelLarge` - Primary labels (16sp, SemiBold)
+- `labelMedium` - Secondary labels (12sp, SemiBold)
+- Used for form elements and UI labels
+
+### ``Spacer Components``
+Layout utilities for consistent spacing:
+- `spacerH8` - Horizontal spacing (8dp)
+- `spacerV8` - Vertical spacing (8dp)
+- `spacerVertical32` - Large vertical spacing (32dp)
+- Ensures consistent spacing throughout the app
+
+### ``Color System``
+Centralized color palette management:
+- **Primary Colors**: Primary, OnPrimary, Background
+- **Semantic Colors**: WarningBanner, Disabled
+- **Text Colors**: PrimaryWhite, SecondaryWhite
+- **UI Colors**: Divider
+- Ensures consistent color usage across components
+
+### ``Typography System``
+Custom typography implementation:
+- **Font Family**: Inter font family for consistency
+- **Type Scale**: Comprehensive range from 12sp to 32sp
+- **Weight Variants**: Normal, SemiBold, Bold
+- **Line Heights**: Optimized for readability
+- **Responsive Design**: Scalable typography system
+
+### ``Dimension System``
+Standardized layout constants:
+- **ScreenPadding**: 16dp for screen margins
+- **WidgetPadding**: 16dp for component spacing
+- **BetweenWidgetsPadding**: 32dp for component separation
+- **ThumbReachPadding**: 90dp for thumb-friendly positioning
+- **WidgetCornerRadius**: Consistent corner radius
+- **TouchTarget**: Minimum touch target sizes
+
+---
+
+## 🏗️ Architecture
+
+The UI module follows a component-based architecture with clear separation of concerns:
+
+```
+ui/
+├── components/ # Reusable UI components
+│ ├── banners/ # Banner components
+│ ├── buttons/ # Button variants
+│ ├── checkboxes/ # Form components
+│ ├── spacers/ # Layout utilities
+│ └── text/ # Typography components
+├── dimensions/ # Layout constants
+├── theme/ # Design system
+│ ├── Color.kt # Color palette
+│ └── Typography.kt # Typography system
+└── README.md # This documentation
+```
+
+### 🧬 Module dependency graph
+
+```mermaid
+flowchart TD
+ COMPOSE_BOM[:androidx.compose.bom]
+ CORE_KTX[:androidx.core.ktx]
+ MATERIAL3[:androidx.material3]
+ UI_MODULE[:ui]
+
+ COMPOSE_BOM --> UI_MODULE
+ CORE_KTX --> UI_MODULE
+ MATERIAL3 --> UI_MODULE
+```
+
+## 🧩 Module dependency graph
+
+Shows which modules depend on `:ui` and which modules `:ui` itself depends on.
+
+```mermaid
+flowchart TD
+ COMMON([:common])
+ SCAFFOLD([:scaffold])
+ FEATURE_HOME([:feature:home])
+ FEATURE_SAVED([:feature:saved])
+ FEATURE_TRANSCRIBE([:feature:transcribe])
+ UI([:ui])
+
+ UI --> COMMON
+ UI --> SCAFFOLD
+ UI --> FEATURE_HOME
+ UI --> FEATURE_SAVED
+ UI --> FEATURE_TRANSCRIBE
+```
+
+## 🎨 Design System
+
+### **Color Palette**
+- **Primary**: #FFFFFF (White) - Main brand color
+- **Background**: #141414 (Dark) - App background
+- **WarningBanner**: #002E38 (Dark Teal) - Warning states
+- **PrimaryWhite**: #EDEDED (Light Gray) - Primary text
+- **SecondaryWhite**: #A6A6A6 (Medium Gray) - Secondary text
+- **OnPrimary**: #141414 (Dark) - Text on primary surfaces
+- **Divider**: #2B2B2B (Medium Dark) - Separator lines
+- **Disabled**: #5A5A5A (Gray) - Disabled states
+
+### **Typography Scale**
+- **Headline Large**: 32sp, Bold, Inter
+- **Headline Medium**: 24sp, Bold, Inter
+- **Headline Small**: 16sp, Bold, Inter
+- **Body Large**: 16sp, Normal, Inter
+- **Body Small**: 12sp, Normal, Inter
+- **Label Large**: 16sp, SemiBold, Inter
+- **Label Medium**: 12sp, SemiBold, Inter
+
+### **Spacing System**
+- **8dp**: Small spacing between related elements
+- **16dp**: Standard padding and margins
+- **32dp**: Large spacing between sections
+- **90dp**: Thumb-friendly positioning
\ No newline at end of file