Technology Research
On This Page
Technology Selection Rationale
The technology stack for QR Igniter was carefully selected based on the following criteria:
- Maturity: Proven technologies with large communities and long-term support
- Performance: Ability to handle high-volume QR code generation and scanning
- Developer Experience: Productive frameworks with good tooling
- Enterprise Readiness: Security, scalability, and maintainability
- Compliance: Support for GS1 standards and data protection requirements
Backend Technology Stack
Laravel 12
Laravel 12
Latest LTS
Laravel was selected as the backend framework for its:
- Elegant MVC architecture with clear separation of concerns
- Robust ORM (Eloquent) for database operations
- Built-in authentication and authorization
- Comprehensive testing support with PHPUnit and Pest
- Queue system for batch operations
- Artisan CLI for development productivity
Key Packages
| Package | Purpose | Version |
|---|---|---|
| laravel/sanctum | API token authentication | ^4.0 |
| simplesoftwareio/simple-qrcode | QR code generation | ^4.2 |
| geoip2/geoip2 | IP geolocation (MaxMind) | ^3.0 |
| spatie/laravel-permission | Role-based access control | ^6.0 |
| darkaonline/l5-swagger | OpenAPI documentation | ^8.5 |
Filament v4
Filament
v4.3.1
Filament was chosen as the admin panel framework for its:
- Modern TALL stack (Tailwind, Alpine.js, Livewire, Laravel)
- Rapid development of complex admin interfaces
- Built-in form components with validation
- Table components with filtering and sorting
- Extensible plugin architecture
- Multi-tenancy support out of the box
Filament Plugins Used
filament/forms- Form builder with rich componentsfilament/tables- Data table managementfilament/widgets- Dashboard widgetsfilament/actions- Bulk actions and modals
MySQL 8.x
MySQL
8.0+
MySQL was selected for its:
- Proven reliability and performance at scale
- Full-text search capabilities
- JSON column support for flexible data storage
- InnoDB engine with ACID compliance
- Excellent Laravel/Eloquent integration
- Wide hosting availability
Mobile Technology Stack
Flutter 3.x
Flutter
3.x
Flutter was chosen for the mobile application because:
- Single codebase for iOS and Android
- High-performance native compilation
- Rich widget library for consistent UI
- Excellent camera and QR scanning support
- Hot reload for rapid development
- Strong type safety with Dart
Key Packages
| Package | Purpose | Version |
|---|---|---|
| flutter_riverpod | State management | ^2.4 |
| go_router | Declarative routing | ^13.0 |
| mobile_scanner | QR code scanning | ^4.0 |
| dio | HTTP client | ^5.4 |
| flutter_secure_storage | Secure data storage | ^9.0 |
State Management: Riverpod
Riverpod
2.4+
Riverpod was selected over alternatives (Provider, Bloc, GetX) because:
- Compile-time safety for dependency injection
- No BuildContext required for state access
- Excellent testing support with overrides
- Automatic disposal of resources
- Async state handling with AsyncValue
QR Code Technology
QR Code Generation
simple-qrcode
4.2+
The SimpleQRCode library was chosen for server-side generation:
- Support for all error correction levels (L, M, Q, H)
- SVG and PNG output formats
- Logo embedding with automatic masking
- Color customization
- Laravel facade integration
Error Correction Levels
| Level | Recovery | Use Case |
|---|---|---|
| L (Low) | 7% | Clean environment, high data density |
| M (Medium) | 15% | Standard usage (default) |
| Q (Quartile) | 25% | Logo embedding |
| H (High) | 30% | Heavy logo embedding, harsh conditions |
QR Code Scanning
mobile_scanner
4.0+
The mobile_scanner package provides:
- ML Kit barcode scanning on Android
- AVFoundation on iOS for optimal performance
- Support for all common barcode formats
- Camera preview widget integration
- Torch/flash control
- Front/back camera switching
GS1 Standards Implementation
GS1 Digital Link Standard
Reference
Implementation follows the GS1 Digital Link Quick Start Guide (2024).
Supported Application Identifiers
| AI Code | Name | Format | Example |
|---|---|---|---|
| 01 | GTIN | 14 digits | /01/09506000134352 |
| 10 | Batch/Lot | Up to 20 chars | /10/ABC123 |
| 21 | Serial Number | Up to 20 chars | /21/XYZ789 |
| 17 | Expiry Date | YYMMDD | ?17=251231 |
| 11 | Production Date | YYMMDD | ?11=241215 |
| 3103 | Net Weight (g) | 6 digits | ?3103=000500 |
| 3922 | Price | Up to 15 digits | ?3922=001299 |
URL Structure
https://[domain]/[primary-key]/[secondary-keys]?[data-attributes]
Example:
https://qr2.ignited.cloud/01/09506000134352/10/ABC123/21/XYZ789?17=251231&3103=000500
GTIN Validation
QR Igniter implements full GTIN validation including:
- Length validation: GTIN-8, GTIN-12, GTIN-13, GTIN-14
- Check digit calculation: Modulo 10 algorithm
- GCP extraction: Company prefix identification
- Country code parsing: GS1 prefix to country mapping
// GTIN Validation Service
class GtinValidator
{
public function validate(string $gtin): bool
{
// Normalize to 14 digits
$gtin14 = str_pad($gtin, 14, '0', STR_PAD_LEFT);
// Calculate check digit
$sum = 0;
for ($i = 0; $i < 13; $i++) {
$multiplier = ($i % 2 === 0) ? 3 : 1;
$sum += (int)$gtin14[$i] * $multiplier;
}
$checkDigit = (10 - ($sum % 10)) % 10;
return $checkDigit === (int)$gtin14[13];
}
}
Future Technology Considerations
Planned Enhancements
| Technology | Purpose | Priority |
|---|---|---|
| Redis | Caching and session management | High |
| Elasticsearch | Advanced search and analytics | Medium |
| WebSockets (Pusher/Soketi) | Real-time dashboard updates | Medium |
| PWA Support | Web-based scanning option | Low |
| GraphQL | Alternative API for complex queries | Low |
Technology Risks & Mitigations
| Risk | Impact | Mitigation |
|---|---|---|
| Laravel major version changes | Medium | Follow LTS releases, maintain test coverage |
| Flutter breaking changes | Medium | Pin to stable versions, comprehensive widget tests |
| QR library deprecation | Low | Abstraction layer allows library replacement |
| GS1 standard updates | Low | Configurable AI mappings, regular standard reviews |