New Crowdin updates - #2
Open
zbrox wants to merge 186 commits into
Open
Conversation
Create foundational documentation for the kartonche iOS app: - AGENTS.md with coding guidelines, Bulgarian localization rules - ARCHITECTURE.md with technical decisions and data models - TODO.md with 10-sprint implementation roadmap - README.md with project overview and getting started guide
Configure git-cliff for automatic CHANGELOG generation from conventional commits. Initialize CHANGELOG.md template.
Add mise.toml with environment variables and 11 task files: - Build tasks: build, clean, test, test-ui, test-all - Development workflows: dev, ci - Merchant database: merchants-list, merchant-add - CHANGELOG tasks: changelog-preview, changelog-update All tasks use file-based approach for better maintainability.
Ignore Xcode build artifacts, user data, generated code directory, and mise cache.
Create Localizable.xcstrings with initial translations: - Bulgarian (primary) and English (fallback) - 11 common UI strings following neutral form guidelines - All strings have comments for context Update ContentView to use localized strings.
Create comprehensive tests for: - BarcodeType enum (display names, case iteration) - LoyaltyCard model (initialization, optional fields) Uses Swift Testing framework with @test macro.
Create BarcodeGenerator utility: - Supports QR, Code128, EAN-13, PDF417, Aztec - Uses Core Image filters - Error handling with Result type - Scalable output for display Create BarcodeImageView SwiftUI component: - Displays generated barcodes - Sharp edges with .interpolation(.none) - Error fallback UI with icon - Previews for all barcode types
Add BarcodeGeneratorTests: - Test all 5 barcode types (QR, Code128, EAN-13, PDF417, Aztec) - Validate successful image generation - Test empty data error handling - Test default scale parameter - 8 test cases total
Create CardRowView: - Display card info with color indicator - Favorite star toggle button - Supports hex color conversion Create CardListView: - Replace ContentView as main view - Search functionality - Sort by alphabetical, recent, favorites - Empty state with ContentUnavailableView - Context menu for edit/delete - Navigation to card display Create CardDisplayView: - Full-screen barcode display - High contrast white background - Brightness boost on appear - Screen sleep prevention - Updates lastUsedDate automatically Create CardEditorView: - Create/edit card with full form - All fields: name, store, number, type, notes, color - Live barcode preview - Color picker for customization - Photo picker integration - Delete confirmation dialog
- Use CardListView as root view instead of ContentView - Disable CloudKit sync (requires paid Apple Developer account) - Add Combine import to ObservableObject classes - Add Vision import to BarcodeScannerView - Add camera and photo permissions to build settings - Remove duplicate Info.plist (Xcode 26 auto-generates it) App now builds successfully with local SwiftData storage. CloudKit can be re-enabled later with paid account.
Update tests to use 'from:' parameter name instead of 'data:'. Note: BarcodeGenerator tests are currently failing - Core Image barcode generation may not work in simulator test environment. ModelTests (5 tests) all pass successfully.
Show descriptive error messages when barcode generation fails: - Display error text below the warning icon - EAN-13 shows exact digit count (e.g., 'requires 13, provided 9') - All error messages localized in Bulgarian Improves UX by telling users exactly what's wrong instead of just showing a generic error icon.
- Add missing Combine imports to PermissionManager, BrightnessManager, ScreenManager - Add missing Vision import to BarcodeScannerView - Make GenerationError Equatable for test assertions - Add empty string validation to BarcodeGenerator All 12 tests now pass (5 ModelTests + 7 BarcodeGeneratorTests).
…me generation - Create KDL database with 14 Bulgarian merchants (grocery, fuel, pharmacy, retail) - Add KDL schema documentation - Build Swift code generator using kdl-swift library - Generate MerchantTemplates.swift with search, grouping, initials - Create mise tasks for validation and generation - Add comprehensive contribution guide in Merchants/README.md Database supports single-program and multi-program merchants. Search works with Cyrillic and Latin names. Generated code gitignored, built at compile time. feat(ui): add merchant selection UI with search and pre-fill - Add MerchantSelectionView with search (Cyrillic + Latin) - Add MerchantRowView with colored circles and initials - Update CardListView to show merchant selection first - Update CardEditorView to pre-fill from merchant template - Add 13 comprehensive merchant template tests (all passing) UI flow: Add Card → Select Merchant → Pre-filled Editor Hardcoded Bulgarian strings (proper localization TODO).
- Add MerchantSelectionView with search (Cyrillic + Latin) - Add MerchantRowView with colored circles and initials - Update CardListView to show merchant selection first - Update CardEditorView to pre-fill from merchant template - Add 13 comprehensive merchant template tests (all passing) UI flow: Add Card → Select Merchant → Pre-filled Editor Hardcoded Bulgarian strings (proper localization TODO).
- Mark Sprint 0-4 as completed - Update Sprint 1: note iCloud sync skipped (requires paid dev account) - Update Sprint 2: all barcode features complete - Update Sprint 3: most UI complete, some polish remaining - Update Sprint 4: merchant database fully complete - Add overall progress summary at top - Note partial test coverage in Sprint 8 Reflects actual state of codebase as of 2026-02-05.
- Update TODO.md to reflect iCloud sync is skipped (requires paid account) - Configure ModelConfiguration for local storage only - Document decision to use local-only SwiftData
Add BarcodeTypeTests covering: - All cases present (5 barcode types) - Display names for each type - Raw values correctness - Codable round-trip (encode/decode) - Init from raw value (valid and invalid) All tests passing.
Add ScreenManagerTests covering: - preventSleep disables idle timer - restoreIdleTimer restores original state (false) - restoreIdleTimer preserves previously disabled state (true) Tests save/restore original idle timer state to avoid side effects. All tests passing.
Add BrightnessManagerTests covering: - increaseForBarcode completes without error - restore completes without error - multiple increases are safe (guard prevents override) - restore without increase is safe (guard handles gracefully) - multiple restores are safe Note: iOS Simulator does not support UIScreen.main.brightness changes, so tests verify API safety and state management rather than actual brightness values. Tests will work correctly on physical devices. All tests passing.
Overall progress: - Mark Sprint 1 localization as complete (all strings translated) - Mark Sprint 3 features complete (search, sort, empty states done) - Mark Sprint 8 testing as mostly complete (6 test files) - Update Sprint 7 status (partially complete) Unit tests completed: - BarcodeType enum tests - ScreenManager tests - BrightnessManager tests - (plus existing: BarcodeGenerator, Model, MerchantTemplate) Note Bulgarian as primary language with proper terminology.
Add PermissionManagerTests covering: - Initialization with current authorization status - ObservableObject conformance - Camera permission handling (authorized, denied states) - Photo library permission handling (authorized, limited, denied states) - openSettings completes without error Note: Permission request tests are limited in simulator environment as they require user interaction. Tests verify state management and API safety rather than full permission flow simulation. All tests passing.
Add two workflows: 1. validate-merchants.yml: - Runs on changes to Merchants/ or Scripts/ - Validates KDL syntax - Generates Swift code - Checks for duplicate merchant IDs - Verifies generated code exists 2. test.yml: - Runs unit tests on all PRs and main pushes - Generates merchant templates before testing - Runs kartoncheTests suite - Uploads test results as artifacts Both workflows use mise for task automation.
- Update README.md with Alpha release status - Document completed sprints (0-4, 8-9) - Add Quick Start section for new developers - Document 45 passing unit tests - Add CI/CD information - List all 14 supported merchants - Update TODO.md Sprint 8 and 9 completion status
- Add localization for Alphabetical, Recent, Favorites sort options - Update TODO.md to mark recently used tracking as complete - Recently used functionality was already implemented, just needed localization
- Add LICENSE file with MIT license text - Update README.md to link to LICENSE file - Update TODO.md to mark license task complete - Copyright (c) 2026 Rostislav Raykov
- Star button already implemented in CardRowView - Toggle favorite functionality working in CardListView - Favorites sort option already functional - All core favorites features complete
Extract widget reload, notification scheduling, and wallet pass management from CardEditorView, CardListView, and DataSettingsView into CardRepository. Fixes bug: CardListView.deleteCard() now cancels notifications and removes wallet passes, matching the behavior of CardEditorView.deleteCard().
Index cards in Spotlight so users can find them from the home screen. Cards are indexed on save/import and deindexed on delete. Tapping a Spotlight result deep links to the card via URLRouter. Full reindex runs on each app launch to stay in sync.
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.
No description provided.