All services

designlens

v14

UX 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.

▸ Capabilities
CapabilityWhat it does
domain_classifyClassify 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_screenshotVision 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_componentNarrowed critique of a single component
critique_flowv=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_exemplarsTwo-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).
improveAnti-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_deckPitch-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_feedbackv=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.

Ready to try designlens?

Early access is free while we're in beta.