{"slug": "outward-three-outdoor-missions-matched-by-an-open-model", "title": "Outward: three outdoor missions matched by an open model", "summary": "A developer built Outward, an open-source React and TypeScript web app that uses the Xenova/all-MiniLM-L6-v2 sentence-embedding model via Transformers.js to match a user's description of what they feel like doing to a fixed catalog of 22 outdoor missions, running inference locally in a browser worker. The selector embeds inputs into 384-dimensional vectors, ranks them by cosine similarity with a redundancy penalty, and applies hard constraints on setting, movement, and listening activities before presenting three non-repeating missions. The project reports passing TypeScript, 179 automated tests, the production build, native CPU inference, and browser-target WASM inference, and explicitly claims no measured outdoor benefit.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05).*\n\nOutward gives you three small things to do outside, matched to a short description of what you feel like doing. Choose a neighborhood, park, or doorstep; ten, twenty, or thirty minutes; and whether to wander or stay in one spot. Read the suggestions, start pocket mode, and put the phone away.\n\nThe project is for the gap between wanting a break and deciding what to do. A mission might ask you to watch one thing change or notice a small pattern. A familiar place is enough. There is no route to follow, account to create, or location permission to grant.\n\nAn open sentence-embedding model matches your words to a fixed, inspectable catalog of 22 missions. It selects existing instructions. Setting and movement preferences are hard constraints, and **Skip listening activities** removes the catalog's listening category. You can ask for another set without repeating the three currently shown.\n\nPocket mode keeps those three titles visible and offers the full instructions when needed. Afterward, an optional field note gives you somewhere to keep one observation. The design aims to make the screen a short part of an outdoor break. No outdoor trial or measured benefit is claimed in this write-up.\n\nTry a sample input such as “I want to listen to birds and natural sounds,” choose **Park or green space**, **20 min**, and **A gentle wander**, then select **Find my field trip**. The first AI run downloads model and runtime assets. A completed AI plan is labeled **MATCHED ON YOUR DEVICE**.\n\nRead the missions, choose **Take this outside**, and return with **I'm back** to save a field note. Use a safe, familiar place and skip any task that does not fit your surroundings or ability.\n\nThere is also an explicitly selected sample mode, labeled **SAMPLE · NO AI USED**. A model failure never silently switches to that mode.\n\n**Public repository: [kudala-bharani/Outward](https://github.com/kudala-bharani/Outward)**\n\nOutward began on October 5, 2026. The application uses React, TypeScript, and Vite. Original application code is MIT-licensed; third-party components retain their own licenses and notices.\n\nStart with `src/data/missions.ts` for the catalog, `src/ai/model.ts` for local inference, `src/ai/rank.ts` for selection, and `src/storage.ts` for persistence. The repository includes setup instructions, tests, architecture notes, and machine-readable model evidence.\n\nThe model is [Xenova/all-MiniLM-L6-v2](https://huggingface.co/Xenova/all-MiniLM-L6-v2/tree/751bff37182d3f1213fa05d7196b954e230abad9), an ONNX distribution of the [Sentence Transformers model](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2), running through [Transformers.js](https://github.com/huggingface/transformers.js). Both the model distribution and runtime use Apache-2.0. Transformers.js is pinned to 4.3.0, and the q8 model is pinned to revision `751bff37182d3f1213fa05d7196b954e230abad9`.\n\nA dedicated browser worker embeds the input and mission descriptions into 384-dimensional vectors. Cosine similarity measures relevance; a small penalty for redundant missions adds variety. The selector applies explicit setting, movement, and listening constraints before choosing three missions. Duration sets the outing timer; it does not estimate the time needed for each activity.\n\nTwo recorded examples show how the matching responds:\n\nThese are actual model outputs. The English-focused model can still misread context; relevance does not establish safety or benefit.\n\nOctober 6 verification passed TypeScript, 179 automated tests, the production build, native CPU inference, and browser-target WASM inference inside Node. `npm run test:model-filters` reproduced 36 constraint plans.\n\nA separate manual Chromium walkthrough passed real AI matching, cancellation/retry, non-repeating second sets, stale-plan protection, and doorstep/stationary/listening constraints. Pocket mode survived reload with its countdown catching up. A fictional journal note passed export, duplicate-safe restore, deletion, and Undo. Desktop and narrow layouts were checked, along with keyboard opening/closing of an explanation dialog. The full Playwright suite, offline reload, and a physical mobile device remain untested. Evidence and scope are recorded in the repository's `docs/verification.md`.\n\nA development correction concerned storage: the initial active-trip record retained the original input. The current version saves missions and timing while removing the mood text, matching query, model name, and similarity scores. Field notes are never sent to the model. Validated JSON export and restore provide a manual backup; deletion is confirmed and can be undone while the page stays open.\n\nAI agents materially implemented the application, tests, and documentation under my direction. This article was primarily generated by AI agents from the source and recorded evidence. Development assistance is separate from the open model that performs matching inside the app.\n\nA downloadable model makes the inference boundary a concrete implementation choice. Outward can compare the input with the catalog locally without sending that text to a hosted inference API or operating an inference server. The model, tokenizer, pinned revision, and selection logic can be inspected and tested together.\n\nContributors can improve mission wording, change constraints, compare embedding models, or add language coverage with appropriate evaluation. The catalog and ranking behavior are small enough to examine directly.\n\nThere are costs to this approach. The first run needs a network connection and downloads roughly 23 MB of weights plus the runtime and supporting files. Asset providers receive ordinary request metadata. Browser storage and exported notes are unencrypted, and cached assets do not guarantee offline availability.\n\nOpen components make this small, account-free design practical and reproducible. They also make its limits visible: the source shows exactly what is selected, what is stored, and what still needs testing.", "url": "https://wpnews.pro/news/outward-three-outdoor-missions-matched-by-an-open-model", "canonical_source": "https://dev.to/kudala-bharani/outward-three-outdoor-missions-matched-by-an-open-model-4pha", "published_at": "2026-10-06 22:39:59+00:00", "updated_at": "2026-10-06 22:47:33.731217+00:00", "lang": "en", "topics": ["ai-tools", "natural-language-processing", "machine-learning", "developer-tools"], "entities": ["Outward", "Xenova/all-MiniLM-L6-v2", "Transformers.js", "React", "TypeScript", "Vite", "Hugging Face", "kudala-bharani/Outward"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/outward-three-outdoor-missions-matched-by-an-open-model", "markdown": "https://wpnews.pro/news/outward-three-outdoor-missions-matched-by-an-open-model.md", "text": "https://wpnews.pro/news/outward-three-outdoor-missions-matched-by-an-open-model.txt", "jsonld": "https://wpnews.pro/news/outward-three-outdoor-missions-matched-by-an-open-model.jsonld"}}