Skip to content

solnikhil/dayweave

Repository files navigation

DayWeave

DayWeave turns a messy task list into a realistic daily schedule. It considers available time, energy, priorities, task duration, and fixed constraints, then returns a structured plan with a north-star task, time blocks, visible trade-offs, and immediate next actions.

Built for the AWS Builder Center Build a Productivity App Weekend Challenge.

Deployment status: Offline by owner request. The complete AWS deployment configuration remains available below.

Architecture

flowchart LR
    U[User] --> A[Static web app\nAWS Amplify Hosting]
    A -->|POST /plan| G[Amazon API Gateway\nHTTP API]
    G --> L[AWS Lambda\nvalidation + prompt]
    L --> Q[Amazon DynamoDB\ndaily usage quota]
    L -->|Converse API| B[Amazon Bedrock\nAmazon Nova Lite]
    B --> L --> G --> A
Loading

The browser never receives AWS credentials. Lambda validates and bounds input, atomically checks a DynamoDB daily quota, invokes Amazon Nova Lite through Bedrock, validates the model response, and returns only the structured plan. API Gateway applies request throttling. DynamoDB stores only a date-keyed request count—not task content.

The reusable diagram source is in docs/architecture.mmd, with a publication-ready SVG export.

Features

  • Tasks with optional duration and priority: Prepare demo | 60 | high
  • Configurable start time, finish time, and energy level
  • Fixed commitments and personal constraints
  • Structured schedule rather than generic chat
  • Explicit deferred-work and conflict warnings
  • Concrete “start now” actions
  • Copyable plan
  • Responsive, keyboard-accessible interface
  • Local deterministic demo mode when no API URL is configured
  • Hard cap of 250 valid Bedrock requests per day
  • Loading, validation, rate-limit, network, and service-failure states

Local development

Prerequisites: Node.js 22+ and npm 10+.

npm install
cp .env.example .env
npm run dev

Open http://localhost:5173. With VITE_API_URL blank, DayWeave uses its deterministic local planner. This is intentionally labeled “Demo intelligence”; it makes UI development and judging evidence possible without pretending that the local algorithm is Amazon Bedrock.

Run all checks:

npm run check

Production preview:

npm run build
npm run preview

Deploy the AWS backend

Prerequisites:

  • An AWS account and credentials configured locally
  • AWS CLI and AWS SAM CLI
  • Amazon Bedrock model access in the selected region
  • A region that supports amazon.nova-lite-v1:0 (for example us-east-1)

AWS now automatically enables access to many serverless models on first invocation, but account and region behavior can change. Confirm model availability in the Bedrock console before deploying.

sam build
sam deploy --guided

Suggested first-deployment answers:

  • Stack name: dayweave-api
  • Region: us-east-1
  • Parameter AllowedOrigin: * for the first test only
  • Parameter BedrockModelId: amazon.nova-lite-v1:0
  • Allow SAM to create IAM roles: yes
  • Save arguments to samconfig.toml: yes

Copy the ApiUrl stack output into .env.production:

VITE_API_URL=https://YOUR_API_ID.execute-api.us-east-1.amazonaws.com

Rebuild the frontend. After Amplify provides the final public URL, redeploy the backend with AllowedOrigin set to that exact origin instead of *.

Deploy the frontend with AWS Amplify Hosting

  1. Push this repository to a public GitHub repository.
  2. In AWS Amplify, choose Deploy an app → GitHub and select the repository.
  3. Amplify will detect amplify.yml.
  4. Add VITE_API_URL as a build environment variable using the API output above.
  5. Deploy and test the generated Amplify URL in a private browser window.
  6. Restrict the backend AllowedOrigin to the Amplify origin and test again.

The deployed frontend itself satisfies the “at least one AWS service” requirement through Amplify Hosting; the production AI flow additionally uses API Gateway, Lambda, DynamoDB, and Bedrock.

API contract

POST /plan

{
  "tasks": "Finish launch brief | 75 | high\nReply to email | 20 | low",
  "startTime": "09:00",
  "endTime": "17:30",
  "energy": "steady",
  "constraints": "Team call from 2:00–2:30 PM"
}

Input limits: 3,000 task characters, 1,000 constraint characters, 20 parsed tasks in demo mode, and a planning window between 30 minutes and 16 hours. The Lambda response uses Cache-Control: no-store.

Tests and verification

Vitest covers task parsing and prioritization, empty input, invalid time windows, overflow/deferred work, backend validation, fenced model output, and malformed model output. ESLint, TypeScript, Prettier, tests, and the production build are combined in npm run check.

Manual checks before submission are listed in docs/submission-checklist.md.

Cost and privacy

The stack uses consumption-based services. Amplify Hosting, API Gateway, Lambda, DynamoDB, and Bedrock may be covered partly by AWS Free Tier or promotional credits depending on account age, region, and current AWS terms. Bedrock model inference is usage-priced. The production stack caps valid model calls at 250 per UTC day, caps model output at 1,200 tokens, and throttles the public API. An AWS Budget alert is still recommended because AWS does not offer a universal hard dollar spending cap. Remove resources after judging. Do not enter secrets, regulated data, or confidential employer information into the demo.

The application does not create a database or intentionally persist tasks. AWS service logs and telemetry may still contain request metadata. The Lambda deliberately logs only error type—not task content.

Cleanup

Delete the Amplify app in the Amplify console, then remove the backend:

sam delete --stack-name dayweave-api --region us-east-1

Confirm in CloudFormation that the stack is gone. Check CloudWatch log groups and delete retained logs if necessary. Remove any related AWS Budget only if it is no longer useful.

Troubleshooting

  • Bedrock AccessDeniedException: confirm the model is available in the selected region and that the deployed Lambda role contains bedrock:InvokeModel for the selected model.
  • Browser CORS error: make AllowedOrigin exactly match the frontend origin, including https:// and without a trailing slash, then redeploy.
  • 502 response: inspect the Lambda log stream for the error type. Common causes are model availability or a malformed model response.
  • Amplify builds demo mode: confirm VITE_API_URL is configured in Amplify and redeploy; Vite embeds it at build time.
  • Request throttled: wait briefly. The low initial throttle protects a public challenge demo from unexpected cost.

Submission materials

License

MIT

About

AI day planner powered by Amazon Bedrock, Nova Lite, Lambda, and Amplify

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors