Skip to content

New Crowdin updates - #2

Open
zbrox wants to merge 186 commits into
mainfrom
l10n_crowdin_translations
Open

New Crowdin updates#2
zbrox wants to merge 186 commits into
mainfrom
l10n_crowdin_translations

Conversation

@zbrox

@zbrox zbrox commented Mar 12, 2026

Copy link
Copy Markdown
Owner

No description provided.

zbrox added 30 commits February 4, 2026 23:41
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
zbrox added 30 commits February 17, 2026 20:48
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant