Migrate from Vite to Next.js 15 with SSR

- Replace Vite + React Router with Next.js 15 App Router
- Implement i18n with next-intl (URL-based: /de, /en, /sr)
- Add SSR/SSG for all pages (48 static pages generated)
- Setup Supabase SSR client for auth
- Migrate all pages: Home, About, Portfolio, Blog, Contact, Login, Dashboard, Imprint, Privacy, Terms
- Add Docker support with standalone output
- Replace i18next with next-intl JSON translations
- Use next/image for optimized images

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-17 01:00:33 +01:00
co-authored by Claude Opus 4.5
parent a66f51b9a2
commit b1ec7b4d61
281 changed files with 8024 additions and 8901 deletions
@@ -0,0 +1,204 @@
// src/i18n/locales/en/blog/posts/rfid-automation.ts
export const rfidAutomation = {
meta: {
title: 'RFID Label Automation: From Database to Printer',
date: '2024-02-09',
excerpt: 'A detailed technical analysis of implementing an automated RFID label printing system with Python',
category: 'System Integration',
coverImage: '/images/posts/rfid-automation/cover.jpg',
tags: ['RFID', 'Python', 'ZPL', 'Automation', 'Zebra Printer', 'EPC']
},
content: {
intro: {
title: 'RFID Label Automation: From Database to Printer',
description: 'In modern logistics and retail environments, efficient and error-free labeling of products with RFID tags is crucial. In this article, I share my experiences implementing an automated solution for generating and printing RFID labels with chip encoding.'
},
requirements: {
title: 'Project Background',
points: [
'Automatic generation of EPC codes (Electronic Product Code)',
'Creation of ZPL code for Zebra printers',
'Direct network communication with the printer',
'Integration with existing product data',
'Error handling and logging'
]
},
implementation: {
title: 'Technical Implementation',
epcGeneration: {
title: 'EPC Code Generation',
description: 'The EPC codes are generated according to the SGTIN standard (Serialized Global Trade Item Number):',
code: `def generate_encoded_epc(company_prefix, indicator, item_ref, serial):
sgtin = SGTIN(company_prefix, indicator, item_ref, serial)
return sgtin.encode()`
},
zplTemplates: {
title: 'ZPL Template Management',
description: 'ZPL templates were implemented for different label types:',
code: `def generate_zpl_code(artikelnr, description, ean, price, material, water_resistance, glass_type, encoded_epc):
formatted_price = f'{price:.2f}'
return f'''
CT~~CD,~CC^~CT~
^XA
~TA000
~JSN
^LT35
^MNW
^MTT
^PON
^PMN
^LH0,0
^JMA
^PR2,2
~SD23
^JUS
^LRN
^CI27
^PA0,1,1,0
^RS8,,,3
^XZ
^XA
^MMT
^PW413
^LL531
^LS-24
^FT150,57^A0N,33,33^FH\\^CI27^FD{artikelnr}^FS^CI27
^FT44,86^A0N,21,20^FH\\^CI27^FD{description}^FS^CI27
^FT130,141^A0N,50,51^FH\\^CI27^FD{formatted_price} €^FS^CI27
^FT167,175^A0N,21,20^FH\\^CI27^FD{material}^FS^CI27
^FT185,201^A0N,21,20^FH\\^CI27^FD{water_resistance}^FS^CI27
^FT155,227^A0N,21,20^FH\\^CI27^FD{glass_type}^FS^CI27
^BY3,2,113^FT73,420^BEN,,Y,N
^FH\\^FD{ean}^FS
^RFW,H,1,2,1^FD3000^FS
^RFW,H,2,12,1^FD{encoded_epc}^FS
^PQ1,0,1,Y
^XZ'''`
},
printerCommunication: {
title: 'Network Communication with the Printer',
description: 'Communication with the Zebra printer is done via TCP/IP:',
code: `def send_to_printer(data, printer_ip='192.168.68.50', printer_port=9100):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((printer_ip, printer_port))
sock.sendall(data.encode('utf-8'))
logger.info('Data successfully sent to printer')
except Exception as e:
logger.error(f'Error sending data to printer: {e}')`
},
serialNumberManagement: {
title: 'Data Processing and Serial Number Management',
description: 'Managing serial numbers is critical for the uniqueness of EPC codes:',
code: `def initialize_serial_number():
global current_serial_number
try:
serial_log_content = SERIAL_NUMBER_LOG_PATH.read_text().strip()
current_serial_number = int(serial_log_content)
except (FileNotFoundError, ValueError):
current_serial_number = START_SERIAL_NUMBER
def get_next_serial_number():
global current_serial_number
current_serial_number += 1
return current_serial_number
def finalize_serial_number():
SERIAL_NUMBER_LOG_PATH.write_text(str(current_serial_number))`
}
},
features: {
title: 'Implemented Features',
errorHandling: {
title: '1. Robust Error Handling',
points: [
'Input data validation',
'Network connection verification',
'Serial number persistence',
'Detailed logging of all operations'
]
},
configurability: {
title: '2. Configurability',
points: [
'Adjustable printer IP and port',
'Customizable ZPL templates',
'Flexible EPC code generation',
'Configurable serial number ranges'
]
},
scalability: {
title: '3. Scalability',
points: [
'Batch processing of product data',
'Parallel print jobs possible',
'Efficient resource management',
'Modular code for easy extensibility'
]
}
},
bestPractices: {
title: 'Best Practices',
dataValidation: {
title: '1. Data Validation',
points: [
'Strict typing for critical data fields',
'Verification of required fields',
'Format and plausibility checks'
]
},
faultTolerance: {
title: '2. Fault Tolerance',
points: [
'Automatic retry attempts',
'Graceful degradation',
'Detailed error logs'
]
},
maintainability: {
title: '3. Maintainability',
points: [
'Modular code structure',
'Comprehensive documentation',
'Clear separation of configuration and code'
]
}
},
lessonsLearned: {
title: 'Lessons Learned',
zplSpecifics: {
title: '1. ZPL Specifics',
points: [
'Detailed knowledge of ZPL specifications necessary',
'Careful validation of generated ZPL codes',
'Regular testing with different printer models'
]
},
rfidStandards: {
title: '2. RFID Standards',
points: [
'Adherence to EPC standards critical',
'Careful management of serial numbers',
'Validation of generated EPC codes'
]
},
networkCommunication: {
title: '3. Network Communication',
points: [
'Robust error handling for network issues',
'Timeouts and retry attempts',
'Buffering of print jobs'
]
}
},
conclusion: {
title: 'Conclusion',
description: 'The implemented solution enables efficient and reliable automation of the RFID labeling process. Through the combination of EPC code generation, ZPL template management, and direct printer communication, a robust system has been created that has proven itself in practice.',
keyPoints: [
'Thorough planning of system architecture',
'Comprehensive error handling',
'Careful documentation',
'Regular testing and validation'
],
results: 'The solution has been running stably in production for several months and processes hundreds of labels daily.'
}
}
};