{"slug": "daylight-a-local-ai-pa-that-makes-room-for-work-and-life", "title": "Daylight: A Local AI PA That Makes Room for Work and Life", "summary": "A developer built Daylight, a local AI personal assistant that turns a mixed work-and-personal task list into a proposed daily schedule, running the Qwen2.5 0.5B Instruct model in-browser via WebLLM and WebGPU. After early tests showed the model inventing date-and-time strings and dropping tasks, the design was changed so the model only suggests category, priority and duration for one task line at a time, with explicit user metadata overriding its guesses and scheduling handled by ordinary code. The developer notes the changes do not establish the model's judgments are accurate, and category, priority and duration still require human review.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady](https://dev.to/challenges/hacktoberfest-week3-2026-10-19).*\n\nI wanted a personal assistant for a small daily problem: I have work tasks and personal tasks, but deciding what to do when is another task in itself.\n\n**Daylight** turns a task list into a proposed day. Work and personal tasks can share the schedule, with priorities, estimates, fixed appointments and breaks taken into account.\n\nThe workflow is:\n\nTasks that cannot fit appear under **For another time**, with an explanation. The planner keeps the original estimate and respects the end of the day.\n\nThat is the “Slow and Steady” idea I wanted to explore: spend less effort juggling the list, while still being honest about how much day is left.\n\n**Demo video:** [Watch the Daylight demo on Google Drive](https://drive.google.com/file/d/18yMAobWiORlU3fwNdyZsS7HDo4Fkqr_L/view?usp=sharing)\n\nDuring development I tried a mixed list: preparing a challenge entry, packing for a trip, and cleaning a pet’s bowl. The early results exposed useful problems, described below. This was hands-on browser testing, not a formal accuracy evaluation.\n\n**Source repository:** [Hornet-Wing/daylight](https://github.com/Hornet-Wing/daylight)\n\nThe original application code is MIT licensed. The project uses plain HTML, CSS and JavaScript, plus a small Node.js static server for local use. No dependency installation or build step is required for the manual planner.\n\nFrom the project directory:\n\n```\nnpm start\n```\n\nOpen `http://127.0.0.1:4174`. The AI reader separately downloads its runtime and model when enabled.\n\nI built Daylight with Codex, starting from the behaviour I wanted: list what needs doing, give it rough priorities, and see a realistic day containing both work and personal tasks.\n\nThe AI integration uses [WebLLM](https://webllm.mlc.ai/docs/user/basic_usage.html) and the open-weight [Qwen2.5 0.5B Instruct model](https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct), through its [MLC WebGPU build](https://huggingface.co/mlc-ai/Qwen2.5-0.5B-Instruct-q4f32_1-MLC). Inference runs in a browser worker.\n\nThe first version asked the model for a complete task list, including optional start and finish times. Browser testing revealed that it could invent full date-and-time strings even when my notes supplied no times. It also omitted one task.\n\nAn earlier error handler hid the useful diagnostic because a worker failure arrived as plain text instead of an Error object. Preserving that text exposed a grammar-initialisation failure, which led to a simpler generation schema.\n\nThose failures changed the design.\n\nEach original task line is now kept by application code. The model handles one line at a time and returns only:\n\n```\n{\n  \"category\": \"personal\",\n  \"priority\": \"should\",\n  \"duration\": 30\n}\n```\n\nThis is an example of the response format, not a benchmark result.\n\nThe model does not supply task titles or time constraints. Explicit phrases such as “before 5pm” or “after 09:30” are handled separately. Without a supported time phrase, both optional time fields stay blank. Ambiguous source phrases remain visible for correction.\n\nExplicit user metadata takes precedence too. For example:\n\n```\nPersonal: pack for a trip, medium priority, 37 minutes\n```\n\nThat preserves the stated 37 minutes even if the model suggests something else.\n\nA later trial exposed another limitation: “week 3” became a three-minute estimate, and packing was classified as Work/High. The current request constrains inferred durations to a menu of valid time blocks and includes clearer classification examples. Those changes do not establish that the model’s judgments are accurate. Category, priority and duration still need review.\n\nAfter review, ordinary code builds the schedule:\n\n```\nOriginal task lines\n  → local model suggests category, priority and duration\n  → explicit source metadata overrides guesses\n  → person reviews and accepts\n  → scheduling code fits tasks around appointments and breaks\n  → timeline and explicit overflow\n```\n\nTasks are considered by priority, then deadline, then input order. Each receives the earliest uninterrupted slot that fits its full duration and constraints. Fixed appointments stay fixed. Breaks reserve time between tasks.\n\nThis is a greedy scheduling heuristic, not a claim of an optimal schedule. It does not split tasks automatically, and a missed deadline can leave a task unscheduled. The interface explains those cases so I can make the tradeoff myself.\n\nThe current automated suite has **50 passing tests**, including 120 generated scheduling scenarios.\n\nThe checks cover overlapping appointments, task durations, deadlines, work/personal hours, overflow, backups, server responses, visible error messages, preservation of source lines, and rejection of invented model time fields.\n\nThe AI contract tests use test doubles. They check what the application requests and accepts; they do not measure real-model accuracy. The development environment also restricted automated browser testing. My browser trials supplied the screenshots and failure reports that drove the changes above.\n\nTwo community references helped frame the approach:\n\nA daily task list can mix work information with personal routines. Local inference is useful because the notes can be processed on my device, without sending them to a hosted inference API.\n\nThe browser still fetches runtime and model files when needed. This is not a claim that the app makes no network requests. The first model load needs a substantial download and compatible WebGPU hardware; cached files may reduce later downloads.\n\nOpen weights and an open runtime also let me inspect the integration, change the prompt or experiment with a different model. The scheduling rules are separate, so changing the model does not mean trusting it to rewrite the clock.\n\nDaylight stores its plan in one browser, with JSON backup and restore. There is no account or cloud database. Browser storage is not encrypted, and backups include notes. Calendar sync and multi-device sync are outside this prototype.\n\nThe intended benefit is less repeated planning: place the tasks once, see what fits, and rebuild the remaining day when plans change.\n\nI have not measured minutes saved or run a sustained daily-use trial. What I have is a working prototype, hands-on feedback, and a clearer understanding of where a small local model needs boundaries and human correction.\n\nThe next useful measurement is how much I edit its suggestions and how much manual rearranging remains after it proposes a day.\n\n*The code and this article were prepared with Codex assistance.*", "url": "https://wpnews.pro/news/daylight-a-local-ai-pa-that-makes-room-for-work-and-life", "canonical_source": "https://dev.to/hornetwing/daylight-a-local-ai-pa-that-makes-room-for-work-and-life-n6k", "published_at": "2026-10-25 18:00:58+00:00", "updated_at": "2026-10-25 18:13:30.182184+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-tools", "ai-agents"], "entities": ["Daylight", "WebLLM", "Qwen2.5 0.5B Instruct", "MLC", "Codex", "Hornet-Wing"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/daylight-a-local-ai-pa-that-makes-room-for-work-and-life", "markdown": "https://wpnews.pro/news/daylight-a-local-ai-pa-that-makes-room-for-work-and-life.md", "text": "https://wpnews.pro/news/daylight-a-local-ai-pa-that-makes-room-for-work-and-life.txt", "jsonld": "https://wpnews.pro/news/daylight-a-local-ai-pa-that-makes-room-for-work-and-life.jsonld"}}