Context/LENS-BRIEF.md
LENS Product Brief
Authoritative synthesis of all product decisions for LENS. Produced 2026-04-07 by merging two independent digests of ~14,700 lines of conversation, cross-referenced against the Obsidian vault PRD, three deep research reports, and the live codebase.
This document supersedes digest-final.md, digest-part1.md, digest-part2.md, and all files in docs/files/. Any future session should read this first.
1. WHAT LENS IS
LENS = Leading Engagement & Narrative Synthesis
A social content intelligence platform that gives marketing teams an empirical, sourced understanding of how their content performs on LinkedIn versus competitors. It finds the people, patterns, and gaps that exist in the SPACE BETWEEN entities, not inside any single entity's data.
LENS is NOT a content recommendation tool. Content recommendations are the downstream output, not the purpose.
Sibling to PRISM (Prospect Intelligence Platform). LENS watches the market surface continuously; PRISM audits depth on demand. LENS feeds PRISM, PRISM feeds sales.
Subject company for v1: Algolia. v1 = the demo. v2 = the product. Do not conflate.
2. FIVE LOCKED PRINCIPLES (NEVER VIOLATE)
- Entity Symmetry -- Every entity runs through identical pipelines.
No special casing. Algolia is just
entity_id: E01. Theis_subject: trueflag is the ONLY difference. - The Pyramid is the Processing Order -- L1 -> L2 -> L3 -> L4. Each feeds the next. No shortcuts.
- Layer 4 is the Product -- Layers 1-3 are infrastructure. Layer 4 (meta-intelligence) is what humans read and act on.
- One Person Record -- A person engaging with multiple entities = ONE enriched record cross-referenced to all entities. Never duplicated.
- Industry-Agnostic by Design -- Change the
is_subjectflag = new customer. This is the business model.
3. THE FOUR-LAYER PYRAMID
Layer 1: Raw Data Engine
- Identical scraping pipeline for ALL entities
- Company pages + exec profiles + engager profiles
- Posts + likes + comments + shares + follower counts
- Tools: Apify (supreme_coder/linkedin-post actor, tested and confirmed)
- Enrichment: Apollo/Clay (deferred to post-MVP)
- Storage: PostgreSQL
Layer 1A (SAFE, build now): Post content, comment text (no identity), follower counts, exec posts and engagement counts.
Layer 1B (RADIOACTIVE, deferred): Named individuals who liked/commented, their job titles/companies, cross-entity overlap.
Layer 2: Entity Synthesis Engine (per-entity, identical template)
Five modules per entity, run weekly: - A: Content Performance -- format leaderboard, cadence, top posts, engagement trends, optimal posting window (Stage 1) - B: Audience Profile -- cohort breakdown seniority x industry, named engager list (Stage 2+, needs Layer 1B) - C: Narrative Intelligence -- message pillars, topic clusters, tone, CTA intent, narrative evolution (Stage 1) - D: Exec Voice -- what leadership amplifies personally, divergence from company narrative (Stage 1) - E: Engager Universe -- company breakdown, seniority distribution, geographic spread (Stage 2+, needs Layer 1B)
Layer 3: Comparison Engine (cross-entity)
- Content comparison: engagement rates, format distribution, acceleration
- Audience comparison: cohort ownership, engager overlap, unclaimed cohorts
- Narrative comparison: topic ownership, convergence, white space, tone
- Engager flow: switchers, migration patterns, dormant, new arrivals
Layer 4: Meta-Intelligence Engine (the product)
v1 outputs: - Weekly Issue (Monday, Editorial mode) - Explore Workbench (always-on investigation surface)
v2 outputs (deferred): - Monthly Battlecard (full competitive narrative landscape) - Real-Time Alerts (Slack: competitor spikes, switchers, narrative shifts) - Entity Deep-Dive (on demand for any entity)
4. THE TWO-MODE PRODUCT (CONCEPT C, LOCKED)
READ MODE (Editorial) = The Weekly Issue
- Default entry point for execs + content team
- Cadence: weekly (publishes Monday 08:00)
- Verb: consume (passive, paced, narrative)
- Format: ONE scrollable page at /editorial with floating TOC sidebar
- ALGOLIA ONLY. No competitors. Period.
- Competitors were removed from Editorial entirely (April 6 directive)
- 9 fixed sections (see Section 7 below)
EXPLORE MODE (Workbench) = Investigation Surface
- Cadence: always-on, user picks time range
- Verb: investigate (active, free, interrogative)
- Audience: analysts, content team, social team
- This is where ALL competitive analysis lives
- 4 top-level asymmetry lenses (see Section 8 below)
- 7 entity lenses as nested drill-downs inside asymmetry lenses
Bridge Between Modes
- READ -> EXPLORE: Click any claim's arrow icon to open Explore pre-filtered to supporting data (preserves competitive context)
- EXPLORE -> READ: "Pin to next issue" queues findings for next Monday's draft. Pinned findings are TRANSLATED into Algolia-centric framing before appearing in the issue (keeps editorial voice clean, never says "Constructor is beating us")
5. FOUR PRODUCT PRINCIPLES
-
Sunday Sync -- Weekly background job (Sunday 23:00 UTC). Verifies executive roster for all monitored entities via web search/Perplexity. Versioned JSON per week (immutable snapshots). Drift detection: new joiner, departed, promoted = story leads for the Issue. Runs BEFORE anything else in the weekly pipeline.
-
Source Links Everywhere -- Every claim has a URL. Every post -> LinkedIn URL. Every engager -> profile URL. Every exec -> LinkedIn + company website. Every community signal -> thread URL. No naked numbers. No unattributed claims.
-
Show The Work -- Every Content Brief has 4 labeled boxes: - COHORT: which audience persona is growing/engaging - PATTERN: what content pattern works for them - SIGNAL: the trigger (competitive move, white space, community thread) - WHO TO REACH: 5 named engagers who would receive it well - Minimum 3 of 4 confidence markers needed to publish. If AI cannot fill all 4, brief is rejected before editor sees it. - Confidence markers: (1) signal fresh within 7 days, (2) pattern well-established, (3) direct contrast/opening exists, (4) engagers identified.
-
Audience Tracking -- 5 personas tracked across 4 rolling time windows (this week, last month, 3 months, 6 months). Drift detection feeds Content Brief targeting.
Five Personas:
Ecommerce Builder, AI/ML Practitioner, GTM Leader, CS Leader, AI Founder
6. EDITORIAL WORKFLOW (Sunday Night Pipeline)
22:00 Sunday Sync runs -> drift flags generated
22:30 Census complete -> entity config updated -> drift queued as story leads
23:00 Data pipeline runs -> all LinkedIn posts, community signals, partnerships, events
23:30 Issue draft generation -> AI drafts every section using templates
[gap]
07:00 Monday: Editor reviews -> approves/edits Opener and Cover claim
08:00 Monday: Issue published -> Slack digest sent
- Editor: Arijit in MVP
- Tue-Sat: Team investigates in Explore, pins findings for next issue
- Pinned findings get prioritized in next Sunday's AI draft
7. WEEKLY ISSUE STRUCTURE (9 SECTIONS, LOCKED)
The issue is a single scrollable page at /editorial. All sections are Algolia-only. Individual URLs are anchor deep-links (#cover, #opener, etc.). Floating Table of Contents sidebar for navigation.
The Nine-Section Arc (same order every issue):
-
Cover -- Issue number + two parallel sentences (max 10 words each, serif, large) + date + stat line (posts, engagers, entities tracked). Left rail = issue TOC. "Past issues" link at bottom.
-
Opener -- Editor's note, 80-150 words, three beats: what week showed / why it matters / reader guidance. First-person editorial "we". Sign-off: "-- The Editor"
-
S1: The Thesis -- One claim, one simple visual (e.g., two bars: customer proof 4.8% vs vision 2.1%), one supporting sentence (60-100 words).
-
S2: What Performed -- RANKED LIST, always exactly 3 posts. Each: large numeral + post title + "view on LinkedIn" link + "Why it worked" paragraph (40-60 words) + named reposters + engagement stat.
-
S3: Cohort Comparison -- 4 columns (THIS WEEK / LAST MONTH / LAST 3 MONTHS / LAST 6 MONTHS). Five personas with % and direction arrows. Total engager count per period. Editorial takeaway. Two cross-links.
-
S4: Who Was Watching -- Always FIVE named engagers (not more, not less). Each: Name + Role + Company + Why-they-matter paragraph + Role tag [Customer/Alumni/Tech voice/Partner/Prospect].
-
S5: Network Movements -- Three sub-feeds, ALL Algolia-side: EXECUTIVE MOVES (from Sunday Sync), PARTNERSHIP MOVES, EVENT FOOTPRINT.
-
Closer: Content Briefs -- Three briefs always. Each: Title + HOOK (dashed border, copy-paste ready, in quotes) + Format/Voice/Persona/ Ship by + SHOW THE WORK (4 boxes) + Confidence (4 markers, min 3/4) + cross-link to Explore.
-
Colophon -- Issue number + date, data stats, editor/draft/approved/ published timestamps, legal disclaimer, end-of-issue statement.
What a Weekly Issue NEVER Does:
- "Thank you for reading"
- Apologize for missing data
- Hype itself
- Address reader as "you"
- Break editorial voice
- Use em-dashes or exclamation points
8. EXPLORE MODE: 4 ASYMMETRY LENSES
Left rail shows only 4 top-level asymmetry lenses in v1. Entity lenses (Content Performance, Audience, Narrative, Exec Voice, etc.) appear as "DRILL DEEPER" expandable sections inside each asymmetry lens.
Voice Gap was folded into Narrative Gap for v1 (deferred as standalone).
Screen 10: Explore Landing
Left rail = 4 lenses listed + time selector + entity checkboxes. Main = brief description of each lens + "where to start" guidance.
Screen 11: Cohort Gap
Table: Persona / ALGOLIA / FIELD AVG / GAP. "WHERE THE GAP IS GROWING" line chart. Drill-deeper expandable links. "WHO WE'RE LOSING" named people section. Action buttons: [Pin to next issue] [Export] [Ask LENS].
Screen 12: Switcher Signal
Summary count + breakdown (leaning toward competitors / equal / leaning toward us). AT-RISK SWITCHERS list with expandable rows showing per-entity engagement counts and actual posts engaged with.
Note: Switcher Signal requires Layer 1B data. In v1 (Layer 1A only), this lens will show limited/mock data or be gated.
Screen 13: Content Gap
FORMAT PERFORMANCE table (Format / ALGOLIA / FIELD / WHO WINS). "THE GAP" plain English explanation. "THEIR TOP VIDEO POSTS" with links.
Screen 14: Narrative Gap
TOPIC OWNERSHIP heatmap grid (4 states). "THE GAP" plain English. "THEIR TOP POSTS" on that topic. Includes Voice Gap analysis (folded in for v1).
9. SCREEN INVENTORY (17 total for v1)
| # | Screen | Mode | Status |
|---|---|---|---|
| 1 | Cover | Editorial | Built |
| 2 | Opener | Editorial | In progress |
| 3 | Thesis (S1) | Editorial | In progress |
| 4 | What Performed | Editorial | Pending |
| 5 | Cohort Comparison | Editorial | Pending |
| 6 | Who Was Watching | Editorial | Pending |
| 7 | Network Movements | Editorial | Pending |
| 8 | Closer | Editorial | Pending |
| 9 | Colophon | Editorial | Pending |
| 10 | Explore Landing | Explore | Pending |
| 11 | Cohort Gap | Explore | Pending |
| 12 | Switcher Signal | Explore | Pending (L1B) |
| 13 | Content Gap | Explore | Pending |
| 14 | Narrative Gap | Explore | Pending |
| 15 | Editor Review | Workflow | Pending |
| 16 | Archive | Utility | Pending |
| 17 | Settings | Utility | Pending |
App Shell
Top bar: LENS logo | [EDITORIAL] [EXPLORE] tabs | Entity selector | Profile
Nothing else. Mode tab swaps entire body.
Route Structure (Next.js 16 App Router)
apps/web/app/
layout.tsx (app shell)
page.tsx (redirect to /editorial)
editorial/
layout.tsx (editorial layout with left rail TOC)
page.tsx (single scroll: all 9 sections)
explore/
layout.tsx
page.tsx (landing)
cohort-gap/page.tsx
switcher/page.tsx
content-gap/page.tsx
narrative-gap/page.tsx
editor/page.tsx
archive/page.tsx
settings/page.tsx
10. VISUAL IDENTITY
LENS is a publication, not a product surface.
- Typography: Serif (Fraunces, from Google Fonts) for ALL content: headlines, body, dates, sign-offs. Mono for ALL metadata: issue numbers, stat lines, timestamps, labels. No sans-serif except shadcn/ui system UI. Currently using Georgia as fallback; Fraunces not yet added.
- Color: Black on near-white (or near-white on black for dark mode later). One accent color, used sparingly. NO gradients. NO brand colors.
- Whitespace: Generous. py-24, max-w-4xl standard. "Breathe like newspapers, not dashboards."
- Hierarchy: Big serif for the one thing the page is about. Small mono for everything else.
- Logo: Colophon (prominent) + app footer (tiny, persistent). Needs Algolia logo SVG (not yet provided). No Algolia branding on most pages.
11. LENS PUBLICATION VOICE (from Voice/LENS.md)
- Identity: Editorial publication voice. Quiet, confident, restrained. Trade weekly editor.
- Narrator: Third-person observer. Never "I" (except Opener). Rare "we". Never "you".
- Register: Formal enough to trust, informal enough to read.
- Verbs: observe, track, identify, surface, note, record, measure, report.
- Banned from reader-facing copy: cohort, segment, normalized, regression, A/B, funnel, stack rank, amazing, incredible, game-changing, leverage, synergy, thought leadership.
- Replacements: audience, persona, pattern, story, voice, trend.
- Zero em-dashes. Zero exclamation points. Zero hedging.
Note: "cohort" is banned from reader-facing output but used internally (Cohort Gap lens name, cohort analysis module).
12. DATA COLLECTION POLICY
What LENS Collects:
- Company-owned pages on the open web (About/Leadership/Team, no auth)
- Company posts on social platforms (brand handles + tagged employees, via official APIs only)
- Engager identity from public engagement on public posts (public fields only)
- Public community discussions (HN, Reddit, GitHub public repos, conference websites, press releases)
What LENS Does NOT Collect:
- Private profiles, posts, accounts
- Content behind login walls
- DMs, private groups, paid newsletters
- Email, phone, contact details (even if technically public)
- Third-party enrichment / identity resolution
- Sentiment analysis or psychological profiling
- Geographic/demographic data not explicitly published
How LENS Collects:
- Official platform APIs (LinkedIn MDP, X API, Reddit API, etc.)
- Licensed third-party providers (Apify, Perplexity) where THEY handle ToS compliance
- Public web pages respecting robots.txt
- NEVER by circumventing authentication, rate limits, or access controls
Three Enforcement Layers:
- Source Catalog (gatekeeper): all sources documented before use
- Ingestion Modules (enforcement): every record stored with source URL + timestamp + method + basis. Records without source URL rejected.
- Rendering Layer (display): cannot render any claim without source URL. Missing source = omit, not render.
13. LEGAL RESEARCH FINDINGS
Three independent deep research reports (Claude, Gemini, OpenAI, April 2026) stored in Obsidian vault Research/ all reach the same conclusion:
Layer 1B (engager identity capture from competitor pages) is legally untenable.
Evidence:
- Proxycurl ($10M ARR): destroyed by LinkedIn lawsuit (Jan 2025)
- KASPR: EUR 240K fine, deleted 160M records (Dec 2024)
- Common Room: removed competitor engagement feature (Dec 2024)
- hiQ v. LinkedIn: won CFAA, lost on contract law (Dec 2023)
- ProAPIs: sued for fake accounts (Oct 2025)
The API Wall is Absolute:
- LinkedIn MDP: aggregate stats only
- Reactions API: individual URNs only for admins of YOUR OWN content
- No official access to competitor engagement data at individual level
Key Variable: Amplemarket
Operating contact-level competitor engagement intelligence without apparent enforcement. Investigate their methodology before committing to Layer 1B.
Three Defensible Paths:
- Own-page engagement analytics (Reactions API, authorized, zero risk)
- Public signals CI (competitor content + jobs + website + G2 + press)
- Multi-signal intent layer (partner with Bombora/6sense + client data)
Impact on v1:
v1 operates on Layer 1A only. Viable Explore lenses: Content Gap, Narrative Gap. Partially viable: Cohort Gap (own-page only). Blocked: Switcher Signal (requires cross-entity engager identity).
14. ENTITY REGISTRY
| Entity | Tier | In DB |
|---|---|---|
| Algolia | Tier 1 | Yes |
| Constructor.io | Tier 1 | Yes |
| Coveo | Tier 1 | Yes |
| Bloomreach | Tier 1 | Yes |
| Elastic | Tier 1 | Yes |
| Typesense | Tier 2 | Yes |
| Meilisearch | Tier 2 | Yes |
7 entities in database, 28 executives stored, all LinkedIn URLs validated.
Each entity gets 3-5 exec profiles monitored.
15. TECH STACK (LOCKED)
| Layer | Choice |
|---|---|
| Frontend | Next.js 16.2.2 + TypeScript strict + Tailwind + shadcn/ui |
| React | 19.2.4 |
| Monorepo | pnpm + Turborepo |
| Testing | Vitest + Playwright + React Testing Library |
| Logging | Pino |
| Deploy | Vercel (apps/web as Root Directory) |
| Backend | Python (deferred) |
| DB | PostgreSQL |
| Scraping | Apify (supreme_coder/linkedin-post) |
| Enrichment | Apollo/Clay (deferred) |
| Workflows | Temporal.io (deferred) |
| Backend deploy | Modal/Railway/Fly.io (deferred) |
Monorepo Structure:
LENS/
apps/web/ <- Next.js frontend (Vercel Root Directory)
packages/
ui/ <- shared React components (@lens/ui)
config/ <- shared eslint/tsconfig/tailwind (@lens/config)
types/ <- shared TypeScript types (@lens/types)
mock-data/ <- mock data for frontend (@lens/mock-data)
services/ <- Python backend (deferred)
shared-py/ <- shared Python libs (deferred)
workflows/ <- Temporal workflow definitions (deferred)
16. DATABASE SCHEMA (from Part 1 conversations)
Core Tables:
- entities (18 fields): entity_id, name, linkedin_id, website_url, is_subject, industry, color, etc.
- entity_snapshots (10 fields): weekly snapshots with employee_count, engagement_trend enum
- exec_registry (10 fields): discovery_method enum, relevance_score
- posts (24 fields): velocity_score, AI fields with enum types, period_id
- comments (8 fields): comment_sentiment enum
- persons (26 fields): gravity_score, switcher_flag, migration_vector, CRM fields
- engagements (9 fields)
- narratives (6 fields): module_type enum
- comparisons (5 fields)
- insights (5 fields): insight_type enum
- verticals (5 fields)
Editorial Tables (new for v1):
- issues: number, publish_date, cover_claim, status, editor_note
- content_briefs: 3 per issue, title, hook, format, voice, persona, ship_by, 4-box provenance
- pins: pinned findings from Explore for next issue
- sync_history: Sunday Sync versioned snapshots, immutable per week
- personas: classification records per engager
17. SUNDAY SYNC JSON SCHEMA
{
"week": "2026-04-07",
"last_run": "2026-04-06T23:00:00Z",
"entities": [
{
"company": "Algolia",
"domain": "algolia.com",
"execs": [
{
"name": "Bernadette Nixon",
"title": "CEO",
"linkedin_url": "linkedin.com/in/bernadette-nixon",
"source_url": "algolia.com/about/leadership",
"verified_at": "2026-04-06T23:00:00Z",
"status": "confirmed",
"previous_status": null
}
]
}
]
}
Drift flags: "new joiner", "departed", "promoted/moved". Both linkedin_url AND source_url mandatory. Missing = "unverified".
18. 8 BACKEND MODULES
| # | Module | Layer | Stage | Status |
|---|---|---|---|---|
| 1 | Sunday-Sync | L1 | 1 | Placeholder |
| 2 | Post-Ingestion | L1 | 1 | Placeholder |
| 3 | Engager-Capture | L1 | 2 (1B) | Blocked |
| 4 | Cohort-Analysis | L2 | 2 (1B) | Blocked |
| 5 | Asymmetry-Engine | L3 | 1 (partial) | Placeholder |
| 6 | Issue-Drafter | L2 | 1 | Placeholder |
| 7 | Editorial-Review | L3 | 1 | Placeholder |
| 8 | Reader-Frontend | L4 | 1 | In progress |
All modules implement the Manifesto contract: execute(), validate(),
persist(), health_check(). All return typed Pydantic ModuleOutput.
19. VERTICAL CONFIG FORMAT
vertical: Enterprise Search
subject: Algolia
entities: [Constructor.io, Coveo, Bloomreach, Elastic, Typesense]
exec_discovery:
min_followers: 1000
min_posts_per_month: 2
reporting:
slack_webhook: [url]
email_recipients: [list]
timezone: America/New_York
colors:
Algolia: "#6B3FA0"
Constructor: "#00B4D8"
Coveo: "#FF6B6B"
Bloomreach: "#0077B6"
Elastic: "#6B7280"
Typesense: "#F59E0B"
Planned verticals: 1. enterprise-search.yaml (LIVE) 2. ecommerce-platform.yaml (Spryker vs Commercetools et al.) 3. headless-cms.yaml (Amplience vs Contentstack et al.)
20. NOTEBOOKLM DECK BENCHMARK
Arijit built a manual LinkedIn intelligence report using Claude Chrome extension + NotebookLM. The 15-page deck became the design benchmark for LENS Read mode.
Transferable elements:
- Funnel narrative (23 posts -> 3 deep dives -> 110+ profiles)
- Micro-persona decomposition (5 personas, %, color-coded, proportional)
- "Player Cards" = Engager Registry (searchable, filterable)
- Content Performance 2x2 Matrix (Stars / Hidden Gems / High Noise / Needs Work)
- Alumni Effect, Competitor Intel (N x N matrix), Exec Reach (personal vs brand amplification ratio)
- Engagement-to-value-prop mapping = Narrative Divergence Map
What the deck doesn't do that LENS adds:
- No temporal dimension (deck = 30-day snapshot; LENS = time series)
- No evidence tiering (LENS: every claim has confidence grade + drill)
- No comparative baselining (LENS compares against monitored-set average)
- No engager-to-pipeline linking (LENS + PRISM closes to CRM)
21. KEY PEOPLE AT ALGOLIA
| Name | Role | LENS Usage |
|---|---|---|
| Laura | CMO | Reads cover+opener+closer in 90 sec |
| Rod | Social media content | Full issue reader, ships briefs |
| Ode | Marketing | Full issue reader, ships briefs |
| Nicole | Content development marketing | Editorial mode primary |
| Piyush | Chief Ecosystem Dev Officer | Arijit's manager |
| Jillian | RevOps/Marketing | CoE co-founder |
| Katie | Head of Sales | Sales consumer |
22. WORKING AGREEMENT (at LENS root)
- TDD strictly: write failing tests first, RED, implement, GREEN
- Never claim done without
pnpm lint+pnpm typecheck+pnpm test - Never commit without verification passing
- Scope discipline: do NOT pre-build types, mock data, or code for future screens
- If pre-existing bug blocks verification: smallest fix, report explicitly
- Honest reporting: "Noticed but not fixed" section required
- No speculative work: flag as SUGGESTIONS only
Speculative Work Incident:
Claude Code added types/mock data for unbuilt screens (CohortRow, Engager, LinkedInPost, etc.). Task 01.5 rolled back all speculative additions. 75 tests -> ~40 tests. Rule: "When retrofitting with tests, only test what currently exists. Flag additions as SUGGESTIONS."
23. WHAT'S BUILT SO FAR
- Monorepo scaffold (apps/web, packages/ui, config, types, mock-data)
- Editorial Cover screen at localhost:3000/editorial: - "LENS . ISSUE 14" masthead (tracked uppercase) - "Proof beats vision. / Luxury beats everything." in serif - Thin horizontal rule - "Week of April 7, 2026" - "23 posts . 147 engagers . 6 entities tracked" - "scroll to read" cue - Font: currently Georgia (Fraunces not yet added)
- Some additional editorial sections in progress
- Phase 0 backend: 7 entities + 28 executives in PostgreSQL
- Obsidian vault with PRD complete, specs as placeholders
24. v1 SCOPE
In Scope:
- Both modes with bidirectional bridge
- 9 editorial sections + 4 explore lenses + landing
- Editor review screen
- Sunday Sync + drift detection
- Source links + Show The Work enforcement
- Audience tracking (4 time windows)
- Content Gap + Narrative Gap lenses (Layer 1A)
- LinkedIn only, single-tenant (Algolia)
- Data Collection Policy enforced
- Export to PDF only
Explicitly Deferred (v1.5/v2):
- X as second platform
- Multi-tenancy (workspace_id on every table)
- Hiring/pricing signals as asymmetry dimensions
- Voice Gap as separate lens (folded into Narrative Gap)
- Standalone entity dossier views
- Multi-editor workflow
- PRISM integration
- Mobile/responsive
- Slack and email delivery
- BYOK (Perplexity, Apify, Anthropic, OpenAI, Gemini)
- Stripe integration, user accounts/auth/roles
- Self-service onboarding, admin screen
Explicitly OUT OF SCOPE:
- Private data scraping
- Sales battlecards
- Real-time alerts
- Arbitrary user-defined charts
Reversibility Principle:
Every v1 decision must be reversible toward v2. Mock data shapes must map to future DB schema with workspace_id. "Subject company" = parameter, never hardcoded constant.
25. PRD SUCCESS CRITERIA
- Editor reviews and approves issue in <30 minutes Sunday night
- CMO reads cover + opener + closer in 90 seconds and gets full picture
- Content marketer ships at least one brief as-drafted per week
- Analyst identifies real gap/signal from Explore not visible in editorial
- Every claim links to verifiable public source within 2 clicks
- Sunday Sync runs 4+ consecutive weeks, detects >= 1 real exec transition
- Zero orphaned records (all have source URL, timestamp, licensing basis)
26. SOLOPRENEUR VISION
LENS is one project in a solopreneur operating system (MyOS):
| Project | Purpose | Status |
|---|---|---|
| LENS | LinkedIn competitive intelligence | In progress |
| PRISM | Prospect intelligence (account deep-dives) | Placeholder |
| CoE | AI Innovation Center of Excellence | Placeholder |
| CurioQuest | Personalized children's storybook | Placeholder |
| MyOS | Meta-orchestration for all projects | Placeholder |
- LinkedIn goal: 1,440 -> 14,000 followers (10x) from April 7, 2026
- Platform is vertical-agnostic: swap entity registry for any industry
- LENS -> PRISM triggers: gravity_score > 75, switcher detected, competitor mention, exec narrative shift
- Base/MyOS architecture: extract from LENS, don't pre-build. Build two LENS services first, find common patterns, THEN extract.
LENS -> PRISM Handoff Triggers:
gravity_score > 75 AND not in CRM -> auto-queue in PRISM
switcher_flag = true AND tier_1_account -> immediate PRISM alert
competitor_mention in comment thread -> flag for PRISM
exec_narrative_shift detected -> PRISM competitive audit
27. WHAT WENT WRONG (LESSONS LEARNED)
- Context amnesia -- Previous Claude session lost all decisions
- Over-engineering editorial -- Built editorial before investigation surface
- Wrong build priority -- Should have built Explore first
- Repeated product discovery -- Claude kept re-asking answered questions
- No persistence of decisions -- Key decisions lost to compaction
- Speculative work -- Claude added code for unbuilt screens
- Early/intermediate decisions persisted as final -- e.g., competitors in Editorial was an intermediate decision that got locked in digest-final.md despite being reversed
28. ARIJIT'S WRITING VOICE (from Claude analysis of Medium articles)
- Pattern-first thinking: leads with underlying pattern before instance
- Acceleration structure: builds momentum (slow -> fast -> climax)
- Earned complexity: starts simple, earns complexity through specificity
- Honest confrontation with failure: names mistakes directly
- Practitioner's eye: notices what others miss, names it
- Signature move: "Here's what nobody talks about..."
- Voice/Arijit.md identified but not yet written in vault
END OF PRODUCT BRIEF
This document is the single source of truth for LENS. It will be synced to Obsidian at Projects/LENS/Context/LENS-BRIEF.md.