Inspiration
Electricity prices change throughout the day, but most households plan chores around convenience. Nobody wants to study a tariff chart just to run the dishwasher.
We built Offpeak around a simple idea: saving money should fit your routine. Your car should still be charged before work, your laundry should finish on time, and your dryer should respect quiet hours.
What it does
Offpeak turns household requests into practical energy schedules. Say, “Run the dishwasher when power is cheapest,” or “Charge the car to 80% by 7 AM,” and it proposes a plan around electricity prices, deadlines, quiet hours, and household power limits.
You review the schedule and estimated savings before approving it. Offpeak also supports away and room occupancy modes, protects essential devices, and lets you ask why an action happened or undo supported changes.
Our browser prototype demonstrates these features using simulated appliances and clearly labeled synthetic electricity rates.
How we built it
We built Offpeak with TypeScript, a React interface, and an Express backend. A real Model Context Protocol server exposes 17 tools for planning, device control, household rules, and explanations.
The conversation layer interprets requests, while a deterministic planning engine calculates schedules and savings. This keeps decisions traceable and calculations consistent.
The public demo runs on Cloudflare Workers, with an isolated simulated household for each visitor. We also implemented optional AWS integrations for Amazon Bedrock, DynamoDB, EventBridge Scheduler, and Amazon Polly, with Lambda infrastructure defined through AWS CDK. Those AWS paths still require live validation.
Challenges we ran into
The hardest part was balancing cheaper electricity with real household constraints. A low price is only useful if the schedule also respects deadlines, appliance dependencies, quiet hours, and available electrical capacity.
We also had to distinguish questions from instructions. “When is electricity cheapest?” should return information, while “Run the dishwasher when electricity is cheapest” should propose an actionable schedule.
Another challenge was keeping approvals trustworthy. We added checks to prevent outdated or conflicting plans from running after time, household rules, or electricity rates changed.
Accomplishments that we're proud of
We created an interactive demo that carries a request through planning, approval, simulated execution, and an explanation of the result.
In our documented demo scenario, Offpeak reduced modeled task energy costs from $17.31 to $9.57 while respecting household constraints. That $7.74 difference illustrates the planner’s behavior under synthetic rates.
We also built automated tests, a visible activity ledger, an MCP traffic inspector, and a separate open source tariff library that other energy projects can reuse.
What we learned
We learned that an energy assistant needs to earn trust through clear explanations, predictable calculations, and meaningful user control.
We also learned the value of separating conversation from decision logic. Natural language makes the system approachable, while explicit rules make its actions easier to test and explain.
Most of all, useful automation starts with understanding what the household needs.
What's next for Offpeak
Our next step is validating the AWS integrations and connecting authorized real devices and applicable utility tariffs.
We also want to add recurring schedules, completion notifications, and richer support for solar generation and more complex electricity pricing.
Our goal is to make Offpeak a practical household assistant that helps people spend less on energy while keeping their daily routines intact.
Built With
- amazon-bedrock
- amazon-dynamodb
- amazon-eventbridge-scheduler
- amazon-polly
- amazon-web-services
- aws-lambda
- cloudflare-durable-objects
- cloudflare-workers
- express.js
- home-assistant
- javascript
- luxon
- mcp-apps
- model-context-protocol
- node.js
- openei
- playwright
- react
- sqlite
- tou-rates
- typescript
- vite
- vitest
- web-speech-api
- zod

Log in or sign up for Devpost to join the conversation.