Harvester is a receipt printing and order management platform built for franchise businesses. It automates the flow from incoming order emails to printed thermal receipts, with fleet management and billing built in.
Architecture
The system follows a cloud-edge architecture:
- Cloud Service (Railway) — Receives order emails via AWS SES/Lambda webhook, processes orders, manages the command queue, and serves the dashboard
- Edge Agent (Raspberry Pi) — Polls the cloud service for print commands and drives the thermal printer via USB
- Dashboard (Web UI) — Provides franchise owners with order management, printer monitoring, and configuration
Communication Flow
- Customer places an order through Card My Yard
- Order confirmation email is forwarded to the system via Gmail forwarding
- AWS SES receives the email and triggers a Lambda function
- Lambda forwards the parsed email to the Railway cloud service webhook
- Cloud service processes the order and enqueues a print command
- Edge agent polls for commands and prints the receipt on the thermal printer
Key Technologies
| Component | Technology |
|---|---|
| Cloud Service | Node.js, Express, Railway |
| Database | AWS DynamoDB |
| Email Processing | AWS SES, Lambda, SNS |
| Edge Agent | Python, aiohttp |
| Printer | RP850A thermal printer via python-escpos |
| Authentication | Google OAuth 2.0, JWT |
| Billing | Stripe |
| Deployment | GitHub Actions, Wrangler (websites) |
Multi-Franchise Support
Each franchise operates in isolation with:
- Dedicated email receiving address (e.g.,
oviedo@orders.cb4.click) - Separate authentication and authorization
- Independent order queues and print commands
- Per-franchise billing and configuration
Edge Agent Connectivity
Edge agents use HTTP long polling to receive commands from the cloud service. This approach:
- Works through firewalls and NAT without port forwarding
- Provides 5-10 second average command delivery latency
- Automatically reconnects after network interruptions
- Supports multiple franchises per physical device