A sentence chooses the card, and code supplies the values
Type a shopping instruction into Shapeshift and the input becomes a checklist. A meeting description can become an event card instead. The README describes an interface that chooses an appropriate widget while you type, using a keyword classifier by default or TypeSafe's hosted Jev model when configured. Dates, amounts, conversions, and arithmetic come from deterministic parsers. That division makes this worth examining if you're building a quick-capture interface where choosing a form is the tedious part.
Our lab counted 126 files and about 7,879 lines of source in a 13.1 MB checkout. The interesting code is accessible: card registration has a designated extension point, each card type has a parser, and decision logic lives separately from rendering. You can borrow that organization without adopting every widget. The existing set covers small everyday tasks, including timers and expense entries, but the repository's appeal is the interaction pattern more than a complete personal-organizer platform.
What happened when we ran it
Our sandbox installed Shapeshift commit 5e24166 in 12 seconds, adding 947 packages and occupying 765 MB. The build passed in 24 seconds, and Bun passed all 172 tests in 2 seconds. We used the lab-node:22 image in a fresh unprivileged Debian container on October 9, 2026, with 3 CPUs, 8 GB of RAM, and no secrets. Nothing in that measurement reports an install, build, or test failure.
The 947-package dependency tree is substantial for a single-input app. Our scan found no CI workflow files, no Dockerfile, and no tests directory under its directory-name check. That last finding doesn't erase the 172 passing tests: the current source tree has files under src/lib/__tests__/. The supplied lab results contain no vulnerability audit or browser performance measurement. A fast test command doesn't establish how smoothly cards change on a phone, or how often the hosted model chooses correctly.
Offline classification works without a TypeSafe account
The quick start requires Bun and starts a Next.js development server. You can use the keyword classifier without a hosted account. To enable Jev, copy the environment template, supply TYPESAFE_API_KEY, and restart the server. The key is read by server code behind /api/intent, rather than exposed to the browser. The client implementation also lets configuration force offline mode even when a key is present.
Our 172-test result came from a container without secrets, so it supplies no paid-model accuracy comparison. Hosted classification sends your input to TypeSafe, and the server route logs a shortened input alongside classification information. A server-side key protects the credential, while typed content has its own privacy implications. For personal or company notes, decide whether hosted classification and those logs are acceptable. Keeping the documented offline path is the simpler choice when that answer is uncertain.
Confidence rules reduce card switching while you type
The README describes a state machine that resists immediate changes when the classifier changes its mind. A competing card generally needs repeated wins, with an exception for a sufficiently confident result. Badges also use different activation and deactivation thresholds. That addresses a concrete interface problem: a useful text input becomes difficult to use if every added word rearranges the controls. The source keeps those decisions outside individual card components, which makes changes easier to reason about.
The 24-second build proves that the measured snapshot compiles, rather than proving that every inferred card matches your intent. The interface provides alternatives through suggestion chips and a slash-triggered card palette. That escape route matters when a keyword is ambiguous or the hosted API falls back to the offline classifier. Keep explicit selection visible if you adapt this into your own product. A user should be able to correct a meeting mistaken for a reminder without rewriting the sentence until the classifier cooperates.
Saved cards stay in browser storage
The README says completed cards live in localStorage. The saved-items implementation handles changes across browser tabs, validates stored entries, and retains an in-memory list when a storage write fails. Those are useful safeguards for a local scratchpad. They aren't cross-device synchronization or a backup. Clearing site storage removes that persistence, and a blocked or full storage area can leave new entries available only for the session.
The 765 MB installed environment supports a browser-local utility, so I'd weigh that operating footprint against what you want to keep. Disposable lists and quick calculations fit. A sole record of appointments or important expenses deserves stronger persistence. An open currency-conversion proposal also remains a proposal, and model-server configuration is in an open PR. Choose from the shipped card registry rather than treating contributor branches as available features.
Parser behavior deserves checking beyond the green suite
A closed, unmerged conversion PR reports that incompatible source and target units fall back to a default conversion. The current parser supports that concern: after a failed full conversion, it tries the partial-input path and selects a default target. We didn't reproduce the interaction in a browser. For a UI intended to compute values, rejecting an incompatible request is a better product choice than returning a plausible answer to a different question.
All 172 tests passed, yet that source-level concern remains relevant to adoption. GitHub recorded a September 23, 2026 push and 5 open issues and PRs, with later discussion and proposals into October. There was no latest release. The history is short, with activity beyond the last push, rather than evidence of abandonment. Use cmdk when explicit command selection is enough, or Super Productivity when task management is the actual requirement. If you adopt Shapeshift's changing input, make incompatible requests visibly fail before letting users trust the numbers.

