📈 GH Trending Explorer 🎲 Surprise me

← all repos

anishfn / shapeshift

git clone https://github.com/anishfn/shapeshift.git

An input that becomes what you mean: one text box that morphs into the right UI as you type. Powered by TypeSafe Jev, works offline.

+1
stars, 24h · #16,199
+~33
stars, 7 days · #5,628
+~140
stars, 30 days · #5,272
1.0k
★ total · +3% this week
101
forks · 6 open issues

Star history (as recorded here)

2026-10-20 · 1,006 ★ 2026-10-23 · 1,020 ★
LanguageTypeScript
LicenseMIT
Created2026-09-22 (1mo ago)
Last push29d ago
Watchers3
OwnerUser

Links

README excerpt
# Shapeshift
**An input that becomes what you mean.** One text box that morphs into the right UI as you type — an event card, a checklist, a timer, a color picker, a bill splitter, a poll, a converter and more.
 Try it live · Watch the full 60-second demo (1080p60) 
 [code] 
Intent is classified by TypeSafe AI's **Jev** model: one call answers 14 typed questions in parallel (which card, plus signals like "is it a video call?", "is it urgent?"). Everything else — dates, amounts, units, math — is deterministic code. **Jev decides, code computes.**
It works **fully offline by default** with a built-in keyword classifier, so you can run it without an account.
## Quick start
Requires Bun 1.2+.
 [code] 
Open http://localhost:3000 and start typing. Press / to see every card type.
### Use the online Jev model (optional)
 [code] 
Restart `bun dev`. The latency readout in the bottom-right corner switches from `jev-offline` to `jev-1.13.0`. The key is only ever read on the server (`/api/intent`); it never reaches the browser. If the API is unreachable or rate-limited, Shapeshift quietly falls back to offline mode.
| Variable | Default | What it does |
| --- | --- | --- |
| `TYPESAFE_API_KEY` | _(empty)_ | Enables the online model. Empty or placeholder values keep you offline. |
| `JEV_MODEL` | `jev-1.13.0` | Pinned model version. |
| `NEXT_PUBLIC_USE_MOCK` | `false` | `true` forces offline even with a key. |
| `NEXT_PUBLIC_SITE_URL` | `http://localhost:3000` | Used for Open Graph metadata. |
## Card types
| Card | Try |
| --- | --- |
| Event | `lunch with rahul and anna tomorrow` |
| Reminder | `remind me to pay rent tomorrow urgent` |
| Checklist | `buy milk, eggs, bread and coffee` |
| Timer | `25 min focus` |
| Habit | `gym 3x a week` |
| Color | `#ff6b35`, `tiffany blue`, `minecraft diamond` |
| Split | `split 2400 between 3` |
| Expense | `spent 450 on uber` |
| Convert | `5 miles in km`, `72f to c` |
| Calculate | `18% of 3450` |
| Trip | `flight to goa next weekend` |
| Poll | `pizza or burgers for friday?` |
| Contact | `rahul 98200 12345 rahul@mail.com` |
| Bookmark | `https://vercel.com/blog check later` |
| Countdown | `days until christmas` |
| Time zone | `3pm pst in ist`, `what time is it in tokyo` |
| Random | `roll 2d6`, `flip a coin`, `pick one: tacos, sushi or pizza` |
| Goal | `read 12 books this year, 4 done` |
| Note | anything else |
Saved cards live in your browser (`localStorage`) until you delete them. Click one to edit it.
### Keyboard
| Key | Action |
| --- | --- |
| Enter | Save the card |
| Esc | Clear (or cancel an edit) |
| Tab | Keep a faint preview |
| ← → | Choose between "Did you mean" chips |
| / | Open every card type |
URL flags: `?debug=1` shows every probability; `?demo=1&loop=1` plays a scripted demo.
## How it works
Raw model output flickers as you type, so a small state machine turns confidence into calm UI states. A card only changes when a challenger wins twice in a row (or is very sure), and signal badges use an