FeedFlow Development Assistant
Expert assistant for developing FeedFlow, a multi-platform RSS reader built with Kotlin Multiplatform, Compose Multiplatform, and SwiftUI.
Project Overview
FeedFlow is a minimalistic RSS reader available on Android, iOS, macOS, Windows, and Linux. The project uses:
**Kotlin Multiplatform** for shared business logic**Compose Multiplatform** for Android and Desktop UI**SwiftUI** for iOS-specific UI components**SQLDelight** for database managementModule Structure
`core/` - Core domain models and utilities shared across platforms`shared/` - Main business logic, repositories, view models, data layer`sharedUI/` - Compose UI components for Android and Desktop`database/` - SQLDelight database implementation`i18n/` - Internationalization resources`feedSync/` - Feed synchronization modules (Dropbox, FreshRSS, iCloud)`androidApp/` - Android-specific implementation`iosApp/` - iOS app with SwiftUI`desktopApp/` - Desktop app for Windows, Linux, macOS`website/` - Hugo-based websiteBuild & Test Commands
Quality Checks
1. Run all checks: `./gradlew detekt allTests --quiet --console=plain`
2. Run static analysis: `./gradlew detekt --quiet --console=plain`
3. Format iOS code: `.scripts/ios-format.sh`
4. Run all tests: `./gradlew test --quiet --console=plain`
Platform-Specific Builds
**Android debug**: `./gradlew :androidApp:assembleGooglePlayDebug --quiet --console=plain`**Android run**: `.scripts/run-android.sh`**Desktop run**: `./gradlew desktopApp:run --quiet --console=plain`**iOS simulator build**: `mcp__XcodeBuildMCP__build_sim_name_proj projectPath: "<path>/iosApp/FeedFlow.xcodeproj" scheme: "FeedFlow" simulatorName: "iPhone 17 Pro"`Internationalization
Refresh translations after adding new strings: `.scripts/refresh-translations.sh`Strings location: `i18n/src/commonMain/resources/locale/values-[language]/`Initial Setup (First Build)
```bash
Android dummy files
cp config/dummy-google-services.json androidApp/src/debug/google-services.json
cp config/dummy-google-services.json androidApp/src/release/google-services.json
iOS dummy files
cp config/dummy-google-service.plist iosApp/GoogleService-Info-dev.plist
cp config/dummy-google-service.plist iosApp/GoogleService-Info.plist
cp iosApp/Assets/Config.xcconfig.template iosApp/Assets/Config.xcconfig
```
Development Workflow
1. Making Code Changes
Always build for the specific platform you're working on to save timeFix all compilation errors before proceedingRun quality checks before committing2. Testing Requirements
All tests extend `KoinTestBase` for dependency injectionUse **Turbine** for Flow testingPrefer **fakes** over mocking librariesUse data generators from `shared/src/commonTest/.../test/generators/`For sync service tests, use the `feedSync/test-utils` module**CRITICAL**: If you touch or create any business logic, ensure it's thoroughly tested with unit testsRefer to **`.ai/TESTING.md`** for comprehensive testing guidelines3. Before Handing Off
1. Run `./gradlew detekt --quiet --console=plain` (skip if only Swift files changed)
2. Run `.scripts/ios-format.sh` (only if iOS changes made)
3. Fix any issues found
iOS Development Guidelines
**iOS SDK**: Project supports iOS 26 SDK (June 2025) with iOS 18 minimum deployment targetUse `#available` checks when adopting iOS 26+ APIs**Build with quiet flag**: Always use `-quiet` flag with xcodebuild; remove only if errors need debuggingSeparate types into different Swift files (avoid multiple structs/classes/enums in one file)Use `@Observable` classes instead of `ObservableObject`Use `Task.sleep(for:)` instead of `Task.sleep(nanoseconds:)`Avoid `AnyView` unless absolutely requiredAvoid force unwraps and force `try` unless unrecoverableCoding Standards
Comments
DO NOT write comments for every function or classOnly add comments when code is not self-explanatoryError Handling
DO NOT excessively use try/catch blocksUse them only at top caller or bottom callers as appropriateInternationalization
**NEVER** add hardcoded strings in codeAlways use i18n resources**NEVER** attempt to translate other languages yourselfAdd only English strings; professional translators handle other languagesRun `.scripts/refresh-translations.sh` after adding new translationsGit Commits
Use simple, one-liner commit messagesDO NOT include phase numbers (e.g., "Phase 1", "Phase 2")DO NOT add "Generated with Claude Code" or "Co-Authored-By: Claude" attributionsExample: `git commit -m "Add foundation for unified article parsing system"`Gradle Commands
Always run with `--quiet --console=plain` flagsExample: `./gradlew detekt --quiet --console=plain`Project Paths
Common project paths (use the first one that exists):
1. `/Users/mg/Workspace/feedflow/feed-flow/iosApp/FeedFlow.xcodeproj`
2. `/Users/mg/Workspace/feedflow/feed-flow-2/iosApp/FeedFlow.xcodeproj`
3. `/Users/marco.gomiero/Workspace/tmp/feed-flow/iosApp/FeedFlow.xcodeproj`
Build Verification Protocol
**CRITICAL**: When editing code, you MUST:
1. Build the project after making changes
2. Fix any compilation errors before proceeding
3. Build ONLY for the platform you're working on to save time
Key Resources
Testing guide: **`.ai/TESTING.md`**Data generators: `shared/src/commonTest/.../test/generators/`Sync test utilities: `feedSync/test-utils`