Per-project Icons¶
Every project in Whittl's sidebar gets a distinct icon. The matcher picks from 125+ Phosphor Duotone SVGs based on keywords in the project's name and first prompt. If you don't like the auto-pick, override it manually from a curated picker.
How matching works¶
When Whittl creates or loads a project, it runs the project name + the first user message through a keyword matcher. The first matching rule wins; if nothing matches, the project gets the default app-window icon.
The matcher is regex-based — no AI call, no cost, instant. Examples from the built-in rules:
| Project name contains | Icon |
|---|---|
weather, forecast, temperature |
cloud-sun |
music, audio, song, playlist |
music-notes |
game, puzzle, chess, snake |
game-controller |
photo, image, gallery, camera |
camera |
calc, calculator, math |
calculator |
chat, messenger, discord |
chats |
todo, tasks, checklist |
list-checks |
book, ebook, reader, adventure |
book |
terrain, mountain, landscape, hiking |
mountains |
news, rss, feed, magazine |
newspaper |
shop, shopping, cart, pos |
shopping-cart |
password, vault, keychain, secure |
lock |
database, sqlite, postgres |
database |
map, location, gps, travel |
map-pin |
budget, finance, money, crypto |
coin |
recipe, cook, food, meal |
fork-knife |
fitness, gym, workout |
barbell |
space, planet, astronomy |
planet |
terminal, console, shell |
terminal-window |
chart, dashboard, analytics |
chart-bar |
Full rule list: core/project_icons.py in the Whittl source.
Real-world examples¶
For concrete context, here's how the matcher picks for common project names:
"my weather app"→ cloud-sun"mobile weather"→ cloud-sun (matchesweather)"Screen Recorder"→ video-camera (matchesscreen.*recorder)"todo list"→ list-checks"password manager"→ lock"Text Adventure"→ book (matchesadventure)"The Deadlands"→ game-controller (matchesdeadlandsvia the game rule's extended keyword list)"collection"→ app-window (no specific rule; falls through to default)"random_thing_42"→ app-window (default)
Overriding manually¶
Right-click a project in the sidebar → Change Icon. A picker dialog opens with ~30 curated options.
Pick one; it applies instantly and persists. The override is stored in project.json:
To clear the override and return to auto-matching, pick Use auto-match from the same menu.
The override picker¶
Rather than exposing all 125+ icons (which would be overwhelming), the override dialog shows a curated subset of the most visually distinctive choices:
- Creative / media: music-notes, film-slate, video-camera, paint-brush, camera, image
- Games / puzzles: game-controller, puzzle-piece
- Utility: calculator, clock, cloud-sun, map-pin, mountains, list-checks, note-pencil, book
- Communication: chats, envelope, newspaper
- Data / work: chart-bar, database, terminal-window, file-py, folder-open
- Life / personal: shopping-cart, coin, heart, fork-knife, barbell, leaf, planet
- Security / AI: lock, brain, flask, rocket
- Signature: knife (the Whittl mark — nice for "made with Whittl" projects)
Icon color¶
Icons inherit Whittl's theme:
- Dark theme: muted cream for inactive projects, warm tan for the selected project
- Light theme: muted navy for inactive, copper for selected
You don't configure this per-project. Whittl picks based on the current theme.
Collapsed sidebar view¶
When the Projects panel is collapsed (click the chevron), projects show as icon-only tiles. The per-project icons become the primary way to distinguish between them at a glance.
Hover over a collapsed tile to see the project name as a tooltip.
What happens when an SVG is missing¶
Whittl ships with 125+ Phosphor Duotone SVGs in assets/icons/. If a keyword rule somehow returns an icon name whose SVG isn't present (older versions had a few rules pointing at missing icons), Whittl falls back to app-window.
Why you can't see a project letter fallback anymore
Earlier versions would fall back to the project's first letter when the SVG was missing ("M" for "mobile weather"). That's gone in v2.3 — all rule targets are guaranteed to ship on disk, and the collapsed-sidebar fallback tries app-window before letters.
Regenerating matched icons¶
If you rename a project, the auto-match re-runs with the new name. If you had a manual override, the override wins (the rename doesn't clobber it).
To force a re-match after a rename, clear the override via right-click → Use auto-match.
What's next¶
- Themes — icon colors flip with the theme
- Project Folder Structure — where
project.jsonlives