designlens
v14UX critique + pitch-deck critique + multi-stage user-flow critique engine — graph-backed expert that classifies the domain, applies the relevant pattern library, and produces structured critiques where every claim cites a specific graph node. v=11 NEW (2026-05-13): two improvements addressing 'the Lambda has no deck-level context' question. (1) Taxonomy expansion: added `wedge` (defensibility / 'why our angle is unique' — distinct from `competition` 2x2/vs-table) and `why_now` (timing/inflection argument — distinct from `market_size` TAM math). Lets the classifier distinguish slides 4 (Wedge) from 5 (Market Map) and slides 6 (Why Now) from 7 (Market Math) in a typical seed deck. (2) Deck-level context preamble in the Pattern A batch prompt: each batch now ships a `--- DECK CONTEXT ---` block with deck identity, audience tier, total slide count, full slide arc (all slides, not just batch), and expected-vs-missing slide types for that audience. Subagent can now catch deck-level gaps (e.g. 'no team slide on a seed deck — partner will probe') instead of critiquing each slide in isolation. v=10 changes (sub_shape match, section_divider exclusion, critique-may-be-empty) preserved. v=9 visual comparator wiring preserved. v=10 NEW (2026-05-13): three fixes from the v=9 self-tests against CareerGraph V1 + Lago. (1) sub_shape layout matching — each gold-deck slide now carries a sub_shape tag (~22 categories: section_divider, hero_with_logo, competition_matrix_2x2, competition_vs_table, traction_growth_curve, traction_logo_wall, market_size_circles, market_size_bar, ask_milestone_columns, ...). The selector matches (audience, classification, sub_shape) where sub_shape is a strong tiebreak — shape-matched comparators always win over shape-mismatched ones within the same classification. Closes the Lago s12 / CareerGraph s5 bug where a 2x2 positioning slide got paired with an iPhone-screenshot 'competition' slide. (2) section_divider exclusion — divider exemplars are never surfaced as comparators (Lago self-test showed dividers paired with content slides as pure noise). (3) fault-finding bias fix — the per-slide schema now allows critique:[] and adds optional strengths_observed:[] so subagents on canonical-quality slides can say 'this is well-anchored' instead of forced filler bullets. The v=9 visual comparator wiring (65-exemplar gold-deck corpus) is preserved. v=8 user_complaint + v=8.1 citation-strict preserved. v=7 critique_flow (alpha) preserved. v5 record_feedback MCP tool preserved. v4 deferred items preserved.
| Capability | What it does |
|---|---|
| domain_classify | Classify input as saas_dashboard / e_commerce / content / mobile_app / form / pricing / landing / pitch_deck / designer_portfolio / user_flow (v=7 NEW: user_flow is the 10th domain — multi-stage sequenced screens). Multi-stage inputs use the structural classifyFlow() helper; single-page inputs use the heuristic html-based classifier. |
| critique_screenshot | Vision LLM critique with graph-cited findings (requires ANTHROPIC_API_KEY for live mode). v4.2: optional WCAG 2.2 SC extraction via options.extract_a11y (default false; +75% cost when enabled per DS-12 measurement). v=12 Phase 3.5: Pattern A supported via withPatternA helper. |
| critique_component | Narrowed critique of a single component |
| critique_flow | v=7 alpha — multi-stage user flow critique. Takes a sequenced array of 2-15 screen paths and returns per-stage findings (friction/trust/clarity/consistency/a11y) + flow-level summary (drop-off risk per stage, activation moment, cross-screen consistency findings) + prioritized top-3 changes. Backed by the new flow corpus (services/designlens/corpus/flow-patterns.json with 12 heuristics + flow-exemplars.json with 8 starter exemplars: Stripe Checkout, Slack onboarding, Linear setup, GitHub PR creation, Notion publish, Vercel deploy, Cursor first-project, Figma signup-to-frame). Pattern A from day 1 via withPatternA helper — zero marginal Anthropic cost when consumer sets X-Pattern-A-Preferred: true. Direct path uses Anthropic vision SDK (~$0.20-$0.80/call depending on screen count). Alpha quality framing — corpus growing; v=8 will expand toward 30+ exemplars. |
| find_exemplars | Two-layer retrieval: typed graph traversal (live) + vector RAG (v0.2). v4: O(n) findNode replaced with Map<id, node> index (~10x D8 speedup, DS-15). |
| improve | Anti-pattern detection + canonical fixes + change vectors. v4: +5 Seed VC red-flag anti-patterns (DS-3); +11 mobile-tagged Schoger pairs (DS-9); +12 mobile_app pattern entries (DS-8 — separate mobile-patterns.json). |
| critique_deck | Pitch-deck critique. Accepts PDF/PPTX/image-folder. v=14a NEW (2026-05-14): actionable patch emission via opt-in `options.emit_executable_patches: true`. After all per-slide batches finalize, an additional synthesis step fires emitting `proposed_patches: PatchSpec[]` + `deck_synthesis: DeckSynthesis`. Each patch carries provenance category (transform_existing | derived_from_data | needs_user_input) — content traces to extracted slide text OR is flagged as missing_user_input; never invented (no '$1M ask' guesses). Server-side validatePatches() splits into proposed/dropped with telemetry log lines. v=14a hygiene: `competitor → competitors?` regex closes v=13's iD8 slide-7 mis-tag (8/9 → 9/9 arc). v=14b PENDING: image_* patch variants + verbatim-lock + style_reference_url + 8 deck-native canonical_fix records. v=13 NEW: (a) spaced-letter classifier — `T R A C T I O N`-style headers (used in iD8 SR007 PitchV6 + many design-forward decks) now collapse to `TRACTION` before regex matching, fixing 5+ slides per deck previously mis-tagged as 'other'. (b) 20 deck-native pattern nodes added to the closed citation enum (`pattern:problem_first`, `pattern:competitive_matrix`, `antipattern:redundant_slide`, `antipattern:no_traction_quantified`, etc.) — these existed in the master graph since v=4 but were excluded from the citation enum, so deck critiques collapsed to generic UX heuristics. v=12: closed-enum citation grounding — every per-step Pattern A prompt now embeds the full VALID GRAPH IDs corpus enum (anti-patterns, heuristics, domain patterns, WCAG SC) with explicit 'DO NOT invent IDs' guidance; Lambda post-strips any fabricated citations into per-slide dropped_citations[] + emits [v=12-citation-telemetry] CloudWatch log lines. Closes the v=11 fabrication bug where ~98% of cited_graph_nodes referenced corpus nodes that didn't exist. v=11: `wedge` + `why_now` classifications distinguish defensibility slides from competition-table slides and timing slides from TAM-math; DECK CONTEXT preamble surfaces full slide arc + missing-slide-types for the audience. v=10: sub_shape layout matching; critique:[] permitted + strengths_observed[]. v=9: per-slide REFERENCE COMPARATORS from 65-exemplar gold-deck corpus. Pattern A multi-step (≤30 slides). Set X-Pattern-A-Preferred: true → subagent runs vision on consumer's CC subscription = $0 marginal Anthropic cost. Direct path = ~$0.10-0.40/deck. |
| record_feedback | v=5 NEW: direct-to-Supabase feedback capture for Terminal-launched callers (spec-kit, standalone Claude sessions) where the standard sota-reflection fence path doesn't fire (calling agent's reply doesn't land in id8's public.messages). Writes to studio_tool_feedback via service-role auth. Requires SUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY + DESIGNLENS_USER_ID in env. Closes the improvement-loop signal gap for Terminal use. |
Usage guide
Detailed usage docs for designlensare being published. Request access and we'll get you started directly.
Early access is free while we're in beta.