Professional quote management for Ontario electricians. Built with Dieter Rams design principles.
Joule is a web-first Flutter application designed for electricians in Ontario, Canada. The primary use case is creating and managing quotes on a desktop/laptop, with mobile access as a secondary benefit.
Key Features:
- Quick Quote Builder — Create professional quotes in under 2 minutes
- 15 Job Templates — Pre-built templates for common electrical jobs
- 50+ Materials — Pre-loaded catalog with Canadian pricing
- PDF Generation — CRA-compliant professional quotes
- True Profitability — Track actual profit including overhead
- Contract Generation — Professional contracts from templates
- Expense Tracking — Link expenses to jobs, export to CSV
Following Dieter Rams' 10 Principles of Good Design:
- Innovative — Solves real problems for electricians
- Useful — Functionality first, aesthetics serve usability
- Aesthetic — Clean, professional appearance
- Understandable — Self-explanatory interface
- Unobtrusive — Design recedes, content forward
- Honest — No dark patterns or manipulation
- Long-lasting — Timeless design, not trendy
- Thorough — Every detail considered
- Environmentally friendly — Efficient, performant
- As little design as possible — Less, but better
- Flutter 3.0+
- Dart SDK
# Clone and navigate
cd /Users/fevra/Apps/Blais/claudette/Joule
# Get dependencies
flutter pub get
# Generate code (required)
dart run build_runner build --delete-conflicting-outputs
# Run on web (primary platform)
flutter run -d chrome
# Run on macOS
flutter run -d macos
# Run on iOS (secondary)
flutter run -d iosJoule/
├── lib/
│ ├── core/ # Core infrastructure
│ │ ├── constants/ # App constants
│ │ ├── database/ # Drift database + tables
│ │ ├── providers/ # Riverpod providers
│ │ ├── routing/ # go_router configuration
│ │ ├── services/ # Business logic services
│ │ ├── theme/ # Dieter Rams theme
│ │ └── utils/ # Validators, logger
│ ├── features/ # Feature modules
│ │ ├── contracts/ # Contract templates
│ │ ├── customers/ # Customer management
│ │ ├── expenses/ # Expense tracking
│ │ ├── home/ # Dashboard
│ │ ├── intake/ # Lead capture
│ │ ├── materials/ # Materials catalog
│ │ ├── profitability/ # Profit analysis
│ │ ├── quotes/ # Quote builder
│ │ ├── settings/ # Business profile
│ │ └── templates/ # Job templates
│ ├── widgets/ # Reusable widgets
│ └── main.dart
├── docs/ # Documentation
│ ├── design/ # UI mockups
│ ├── guides/ # Implementation guides
│ └── research/ # Market research
├── .history/ # Development history
└── test/ # Tests
Uses Drift (SQLite ORM) with platform-specific storage:
- Web: IndexedDB (browser-encrypted)
- Native: SQLite with SQLCipher encryption
This configuration is optimal for web-first use while maintaining mobile compatibility.
- Quick Quote Builder
- 15 Job Templates (Tier 1 + Tier 2 + Tier 3)
- Materials Catalog (50+ items)
- Customer Management
- PDF Quote Generation (CRA-compliant)
- Quote Lifecycle (draft/sent/won/lost)
- Settings & Business Profile
- Intake Form (lead capture)
- Lead Source Tracking (marketing ROI)
- Expense Tracking (photo, categories, job linking)
- True Job Profitability (overhead allocation)
- Contract Templates (4 types)
- CSV Export
- Cloud Sync (Supabase)
- Invoice OCR (supplier pricing)
- QuickBooks Integration
- Google Calendar Sync
Tier 1 — MVP:
- 200A Panel Upgrade
- EV Charger Installation
- Pot Light Installation
- Service Call
- Custom Quote
Tier 2 — High Priority:
- Sub-Panel Installation
- Kitchen Circuit Upgrade
- Hot Tub / Spa Wiring
- Dedicated Circuit
- Smart Switch Installation
Tier 3 — Medium Priority:
- 100A Panel Replacement
- Bathroom Circuit & Fan
- Smoke/CO Detectors
- Outdoor GFCI Outlet
- Generator Transfer Switch
- ESA Permit Fees: $84 (contractor rate)
- HST Calculation: 13% on (subtotal + markup)
- CRA Compliance: All required invoice fields included
- OESC 2024: Code references in templates
| Component | Technology |
|---|---|
| Framework | Flutter 3.x |
| State | Riverpod 3.0 |
| Database | Drift (SQLite) |
| Routing | go_router |
| pdf + printing | |
| Design | Dieter Rams principles |
# Watch for changes and regenerate
dart run build_runner watch
# Run tests
flutter test
# Analyze code
flutter analyzePrivate — Blais Electrical Services
"Less, but better." — Dieter Rams