Canonical source of truth for the CLCKBL project. Change Order 001 applied: the detection path is now fully deterministic — zero external inference calls. Same code runs in the browser and on the server.
Third-party romance-scam detection. Forensic pipeline that fuses pattern, linguistic, temporal, and network signals — fully deterministic, zero external inference into an auditable verdict.
Author / Owner: Kenneth E. Sweet Jr. — Solo Founder, Infrastructure Architect
Contact: PromptFluid@gmail.com · KESJR.com · Abilene, Texas 79605
Document Version: 2.1 · Generated 2026-07-05 · Change Order 001 applied (AI lane removed, enum drift resolved)
Repository codename (internal): tanstack_start_ts (package.json)
Public product name: CLCKBL
Published URL: https://clckbl.com
Repository status: Prototype / Pre-launch (Observed in code)
Every non-trivial claim in this document carries a status tag:
If a tag is absent, treat the statement as Observed or Confirmed (structural facts from the codebase).
What it is (Confirmed). CLCKBL is a web application that lets a third party — a friend, adult child, sibling, or trusted advisor — paste a suspect romantic conversation and receive a forensic verdict. The verdict is produced by a multi-lane detection pipeline and rendered with citations back to the exact messages that raised each signal.
Why it exists (Inferred). Romance-scam victims almost never self-report while under active grooming. The people around them see the signs first and lack a defensible way to communicate what they see. CLCKBL is built to give that outside observer evidence — not an opinion — that can be handed back to the person being targeted.
Problem solved (Confirmed by product surface). Turns ambiguous "I have a bad feeling" into a citable, tamper-evident report: risk grade, top signals, exact message citations, and a SHA-256 chained audit trail.
Current maturity (Observed). Working end-to-end prototype. Auth, scan pipeline, cases, audit chain, share links, live guard, identity verification, and signed PDF export are all implemented and pass their unit tests. Not yet launched, not monetized, no known active users beyond the creator.
Strategic importance (Inferred). Occupies a defensible niche: third-party forensic tooling for interpersonal fraud. Most anti-scam tools target either (a) the platform (Tinder, Meta) or (b) the victim. Almost no consumer-grade product targets the concerned outsider. Combined with a citation-backed, auditable output format, CLCKBL is positioned somewhere between a consumer utility and a paralegal-grade evidence pack.
Short-term opportunity (Speculative). Ship a public beta targeted at adult children of aging parents (the most acute pain segment). Free tier for standalone scans, paid tier for case files, share links, and PDF exports.
Long-term vision (Speculative). A defensible reference platform for interpersonal-fraud forensics — extending from romance scams to pig-butchering (already scaffolded), sextortion (already scaffolded), rental fraud, elder-care fraud, and identity impersonation of family members via generative video.
| Field | Value | Status |
|---|---|---|
| Official name | CLCKBL | Confirmed (site header, meta) |
| Pronunciation | clickable (vowel-less mark) | Inferred |
| Package name | tanstack_start_ts |
Confirmed (package.json) — placeholder from template |
| Public domain | clckbl.com |
Confirmed |
| Preview domain | id-preview--7ee57130-d7e2-466d-b4c5-116512f8632e.lovable.app |
Confirmed |
| Custom domain | None registered as of writing | Confirmed |
| Tagline | "Someone you love is being scammed. Prove it." (split across two spans in hero) | Confirmed (src/routes/index.tsx:60-61) |
| Category tag | THIRD-PARTY DETECTION · v0.1 |
Confirmed (hero eyebrow) |
| Pipeline version | clckbl-detect-1.2.0 |
Confirmed (detection-core/pipeline.ts) — bumped in Change Order 001 when the AI lane was removed |
| Creator | Kenneth E. Sweet Jr. | Provided by user |
| Creation date | On or before 2026-07-05 (first migration timestamp) | Observed |
| Codebase host | Lovable (TanStack Start + Supabase) | Confirmed |
Branding personality (Observed). Dark, technical, forensic. Monospace mono-tags, panel-grid backgrounds, signal-amber accents on near-black background. Deliberately un-consumery — reads like an internal instrumentation console rather than a lifestyle app. This is a deliberate positioning choice: the tone signals evidence, not dating advice.
Primary: Consumer SaaS (single-tenant per user) with a forensic/evidence-grade output layer.
Secondary classifications:
src/detection-core/)pdf-libWhat it is NOT:
Take a conversation. Return a verdict. Cite the evidence. Chain it into an audit log. Give the third-party observer something they can hand to the person being targeted that survives the "why don't you trust me" pushback.
Five distinct innovations, in composition:
subject alias, "hand it to them", non-contact policy — enforces this posture.src/detection-core/fusion.ts.msg #N in exports.hash = sha256(prev_hash || '|' || event_type || '|' || case_id || '|' || timestamp || '|' || payload) (pipe-delimited; matches append_audit_event in migrations). Implemented as a Postgres SECURITY DEFINER function with per-case advisory-lock (append_audit_event). Tamper-evident by construction.guard.alert events. Includes a bounded-growth rebaseline (MAX_THREAD_CHARS = 120_000) to prevent unbounded storage.romance-scams.ts 331 LOC, sextortion.ts 165 LOC, crypto-romance.ts 187 LOC) encode observed scam scripts. Building these requires deliberate corpus work.gradeFromPosterior). Tuning these is craft, not code.| Moat | Type | Present? |
|---|---|---|
| Detection craft (pattern packs) | Domain | Yes (Observed) |
| Bayesian fusion calibration | Technical | Yes (Observed) |
| Audit chain + evidence format | Technical + brand | Yes (Confirmed) |
| Third-party positioning | Brand / framing | Yes (Confirmed) |
Data flywheel (pattern_reports) |
Data | Scaffolded, not populated (Planned) |
| Regulatory / law-enforcement partnerships | Ecosystem | None (Speculative) |
src/detection-core/) — ConfirmedPure TypeScript, no I/O. Reusable in browser and server.
| Module | LOC | Responsibility |
|---|---|---|
types.ts |
147 | Public contract: Message, Conversation, Signal, Verdict, PreScanVerdict, RiskGrade, EarlyWarning |
sanitize.ts |
148 | Parses raw pasted text → normalised message stream. Detects iMessage / WhatsApp / Telegram / Hinge patterns. Assigns author = subject / target / unknown. |
patterns/romance-scams.ts |
331 | Base romance-scam pattern lane |
patterns/sextortion.ts |
165 | Sextortion pattern pack (Phase 9) |
patterns/crypto-romance.ts |
187 | Pig-butchering / crypto-romance pack (Phase 9) |
lanes/linguistic.ts |
— | Stylometry, register drift, ESL markers |
lanes/temporal.ts |
— | Activity windows, impossible schedules |
lanes/network.ts |
— | URL/wallet/handle extraction & scoring |
fusion.ts |
143 | Naive-Bayes fusion, grading, confidence, risk matrix, explainability |
early-warning.ts |
— | Extracts high-severity events (monetary-ask, off-platform-push, isolation, urgency-spike) |
audit.ts |
— | SHA-256 verdict shell hash for chain anchoring |
pipeline.ts |
180 | Orchestrator: runPreScan() (client) and runFullPipeline() (server — same deterministic code path) |
fixtures.ts |
— | Named sample conversations (oil-rig-crypto, etc.) — used by landing demo & scan workbench |
pipeline.test.ts + sanitize.test.ts |
— | Vitest coverage: determinism, grading, sanitisation |
Pipeline version: clckbl-detect-1.2.0 (embedded in every verdict). Bumped from 1.1.0 in Change Order 001 when the AI reasoning lane was deleted and the pipeline became fully deterministic.
src/routes/) — ConfirmedPublic:
/ — landing with rolling live-demo (landing-live-demo.tsx) that streams a fixture line-by-line and runs the client pattern lane/scan — anonymous pre-scan workbench; sign-in required for full pipeline/onboarding — three-step explainer (paste → verify → hand it to them)/auth — sign-in / sign-up/report/$shareToken — public read of a shared verdict (14-day TTL by default)/status — service status/privacy, /terms, /safety — legal + safety guidance/sitemap.xml — server route/api/* — reserved for public API endpoints (none exposed yet)Authenticated (/_authenticated/*):
/cases — list of user's cases/cases/$caseId — case detail: metrics, scans, claims, verification, live guard, audit chain, PDF export/account — profile / preferencessrc/lib/*.functions.ts) — ConfirmedAll use TanStack Start createServerFn with requireSupabaseAuth middleware unless noted.
| Function | File | Purpose |
|---|---|---|
scanConversation |
scan.functions.ts |
Full pipeline, quota check, persistence to scans, audit event |
createCase, listCases, getCaseDetail, addClaim |
cases.functions.ts |
Case CRUD, claim ledger |
createShareLink |
share.functions.ts |
Mints unexpired token for /report/$token |
createChallenge, listChallenges, attachChallengeVideo, reviewChallenge, getChallengeVideoUrl |
verification.functions.ts |
Identity-verification workflow |
appendToGuard, getGuardStatus |
guard.functions.ts |
Live Guard rolling transcript (with 120k-char bounded growth) |
generateReport |
report.functions.ts |
PDF export via pdf-lib |
src/components/) — Confirmedlanding-live-demo.tsx — the rolling client-side pattern-lane demo on /scan-workbench.tsx (449 LOC) — the main scanning surfaceconversation-view.tsx — parsed-message renderer with citation hover-linkingverification-panel.tsx (316 LOC) — challenge issue / upload / reviewlive-guard-panel.tsx (110 LOC) — rolling-monitor UIexport-report-button.tsx — PDF export triggerpage-shell.tsx, site-header.tsx, site-footer.tsx — chromeui/* — shadcn primitivespublic schema) — Confirmed| Table | Purpose | RLS |
|---|---|---|
profiles |
User profile — columns include plan plan_tier NOT NULL DEFAULT 'free', scans_used_this_month, scans_quota_reset_at. Quotas: QUOTA_FREE = 5/month, QUOTA_PRO = 200/month (src/lib/scan.functions.ts). |
Owner-only |
cases |
Case shell (subject alias, risk grade, status, notes) | Owner-only |
subject_claims |
Claims ledger (identity / location / occupation / family / finance / timeline) | Owner-only |
scans |
Full verdict JSON + risk grade + message count | Owner-only + public-via-share-token |
signals |
Individual signals (denormalised for querying) | Owner-only |
pattern_reports |
User-submitted feedback (missed / false-positive / confirmed) | Owner insert; admin read |
audit_chain |
SHA-256 chained event log per case | Owner read; write via SECURITY DEFINER RPC only |
verification_challenges |
Challenge type, prompt JSON, status, storage_path, reviewer notes | Owner-only |
Enums: plan_tier, case_status, risk_grade, claim_category, claim_source, platform_met, signal_source, pattern_report_type.
RPC: append_audit_event(case_id, event_type, payload) — the only path that writes to audit_chain. Uses pg_advisory_xact_lock per case to serialize chain writes, then computes sha256(prev_hash || '|' || event_type || '|' || case_id::text || '|' || now::text || '|' || payload::text).
Storage buckets: evidence-uploads (private), verification-videos (private).
Secrets configured: SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, SUPABASE_SERVICE_ROLE_KEY, SUPABASE_DB_URL. LOVABLE_API_KEY is no longer required by the detection path after Change Order 001.
vitest with 10 total specs (5 in sanitize.test.ts, 5 in pipeline.test.ts). Covers determinism of the sanitiser and grading behaviour of the fusion layer. No integration tests against Supabase, no E2E / Playwright suite yet (Planned).
┌───────────────────────────────────────┐
│ Browser (React 19) │
│ │
│ ┌──────────────┐ ┌───────────────┐ │
│ │ Landing │ │ Scan │ │
│ │ live-demo │ │ Workbench │ │
│ │ (pattern) │ │ (full UI) │ │
│ └──────┬───────┘ └───────┬───────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌───────────────────────────────┐ │
│ │ detection-core (isomorphic) │ │
│ │ runPreScan() — client-safe │ │
│ └───────────────────────────────┘ │
└─────────────────┬─────────────────────┘
│ useServerFn (bearer attached)
▼
┌───────────────────────────────────────────────────────┐
│ TanStack Start server functions (Worker) │
│ │
│ scan · cases · verification · guard · report · share│
│ │ │
│ ▼ │
│ detection-core/runFullPipeline(input) — pure, no I/O│
│ │ │
│ ▼ │
│ five deterministic lanes (pattern ×3, linguistic, │
│ temporal, network) — zero external inference calls │
│ │ │
│ ▼ │
│ Supabase (Postgres + Storage + Auth + Realtime) │
└───────────────────────────────────────────────────────┘
User pastes conversation
│
▼
scan-workbench renders live pre-scan (client, pattern-lane only)
│
▼ (Click "Run full server scan")
scanConversation({ raw, subjectAlias, caseId? })
│
├─► requireSupabaseAuth → context.supabase, userId
├─► quota check (profiles.plan_tier + monthly count)
├─► sanitizeConversation(raw) → messages[]
├─► parallel rules lanes: pattern × 3, linguistic, temporal, network
├─► fuseSignals() → posteriorLogit, posteriorProbability
├─► gradeFromPosterior(prob, confidence) → RiskGrade
├─► buildEarlyWarnings, buildRiskMatrix, buildExplainability
├─► hashVerdictShell() → deterministic verdict hash
├─► INSERT scans (verdict jsonb + risk_grade + message_count)
├─► INSERT signals (denormalised)
└─► RPC append_audit_event(case_id, 'scan.completed', {...})
│
▼
Client receives Verdict → renders SignalsList + Explainability
event N-1: prev = 000...0 payload = {…} hash = H1
event N: prev = H1 payload = {…} hash = H2 = sha256(H1||type||caseId||ts||payload)
event N+1: prev = H2 payload = {…} hash = H3
│
▼
Head hash printed on PDF report
Serialization: pg_advisory_xact_lock(hash(case_id)) inside the RPC → no interleaved writes even under concurrent requests. Verification is client-side or auditor-side by replaying the same pipe-delimited SHA-256 across the chain in row order.
auth.uid() = user_id policies. Public share reads are scoped by unexpired token, not by disabling RLS.CREATE TABLE public.* migration is followed by explicit GRANT statements — safe against PostgREST silent-403 class of bugs.| Item | Severity | Note |
|---|---|---|
| No E2E test suite | Medium | Unit tests exist; Playwright smoke would catch UI regressions |
| No observability / metrics | Medium | No structured logs, no error aggregation dashboard |
| Verdict calibration is un-validated on real data | High (accuracy risk) | Priors and clamps are hand-tuned — no held-out corpus |
Package name is template default (tanstack_start_ts) |
Cosmetic | Doesn't affect runtime; affects future clarity |
| No i18n | Low | English-only |
| Single-region Supabase | Low | Fine at current scale |
| Detection engine is fully deterministic — no external AI dependency to monitor | — | Removed in Change Order 001 |
~~RiskGrade (TS) ↔ risk_grade (Postgres enum) divergence~~ |
— | Resolved in Change Order 001. TS RiskGrade union now mirrors the Postgres enum exactly: negligible / low / moderate / high / critical. Persistence-boundary guard assertRiskGrade in src/lib/scan.functions.ts throws before any INSERT with an unknown grade. |
~~signal_source enum drift~~ |
— | Resolved in Change Order 001. Migration 20260705172536_*.sql rebuilt the Postgres enum to match TS: pattern / linguistic / temporal / network / meta / contradiction / behavioral / financial / sanitization (no ai). Guard assertSignalSource enforces this at the write boundary. |
No admin surface for pattern_reports triage |
Medium | Data flywheel exists in schema but has no operator UI |
Current architecture scales linearly with active users because Supabase Postgres, Cloudflare Workers, and Lovable AI Gateway are all horizontally scalable managed services. The bottleneck at growth is calibration and false-positive rate, not infra.
Standalone product, currently. CLCKBL is not integrated with other Kenneth Sweet / KESJR properties in code as of this document.
Latent ecosystem hooks (Speculative / Planned):
src/detection-core/ is deliberately pure-TS. It can be lifted verbatim into a sibling product (e.g. an interpersonal-fraud API, a Chrome extension, a Discord bot for family group chats).append_audit_event RPC + chain schema is generic — it could underwrite any evidence-grade workflow (rental disputes, custody-communication logging, etc.).Documented from git-visible artifacts and migration timestamps.
| Phase | What was built | Evidence |
|---|---|---|
| Phase 1–5 | Auth, cases, scan pipeline, share links, legal pages, SEO | Migrations 20260705154426…155834, base routes, base detection-core |
| Phase 6–8 | Legal/safety pages, OG images, sitemap, per-route canonicals | public/og-image.jpg, robots.txt, sitemap[.]xml.tsx |
| Phase 9 | Sextortion + pig-butchering pattern packs, AI reasoning lane (later removed) | patterns/sextortion.ts, patterns/crypto-romance.ts, pipeline v1.1.0 |
| Phase 10 | Identity verification workflow | verification_challenges table, verification-panel.tsx, verification.functions.ts |
| Phase 11 | Live Guard rolling monitor | guard.functions.ts, live-guard-panel.tsx, guard.alert audit event |
| Phase 12 | PDF export + Vitest coverage | report.functions.ts, pdf-lib dependency, pipeline.test.ts, sanitize.test.ts |
| Phase 13 (post) | Bug fixes: Live-Guard unbounded growth, verification video/image confusion | MAX_THREAD_CHARS, rebaselined flag, conditional <img> vs <video> |
| Phase 14 (current) | Mobile responsiveness pass across all surfaces | Landing demo whitespace-pre-wrap, mobile nav row, verification/scan control-bar wrap |
Key decisions (Observed / Inferred):
createServerFn, cleaner isomorphic story for the detection core.Failed / abandoned approaches: None documented in code. Needs creator confirmation.
/scanlovable.auth.signInWithOAuth("google", …) (src/routes/auth.tsx) — Confirmed/report/$token| Area | Status |
|---|---|
| Monetization (Stripe / Paddle gating of Premium quota) | Excluded by owner request |
| Real user data (no active users beyond creator) | Unknown |
| Pattern-report triage admin | Planned |
| E2E Playwright suite | Planned |
| Multi-language support | Not started |
RiskGrade and SignalSource enum drift between TS and Postgres |
Blocker for full-pipeline writes on non-overlapping grade values |
| Calibration against labeled corpus | Not started |
| Marketing site / paid acquisition | Not started |
| Custom domain | Not registered |
| Observability / error aggregation | Not started |
| Dimension | Score (0–10) | Notes |
|---|---|---|
| Feature maturity | 8 | Full workflow present; feature-complete for beta |
| Code quality / structure | 8 | Typed, tested core, clean separation of concerns |
| UX polish | 6.5 | Deliberate forensic aesthetic; mobile fixed; no illustrations, no help walkthrough |
| Detection accuracy | Unknown | Calibrated by hand, unvalidated on labeled data |
| Operational readiness | 4 | No monitoring, no on-call, no error aggregation |
| Monetization readiness | 3 | Schema supports plan tiers; no billing wired |
| Scalability | 7 | Managed services; no obvious hot paths |
| Distribution readiness | 2 | No marketing site, no growth channel, no custom domain |
Note: Owner has explicitly de-prioritized monetization in current phase. This section is preserved as strategic analysis, not an action list.
| Model | Fit | Note |
|---|---|---|
| Freemium consumer SaaS | High | Free = standalone scans; Premium = cases, verification, PDF export, Live Guard. Schema (plan_tier) is ready. |
| Per-case pay-as-you-go | Medium | Aligns with the "I have one specific worry" user. Lower friction than subscription. |
| Concierge / done-for-you service | Medium | Charge for expert-reviewed reports. Higher price point; slower scale. |
| API / white-label to legal & elder-care orgs | Medium-High | Detection core is portable; audit chain is enterprise-grade. |
| Licensing to platforms (Match, Meta) | Low-Medium | Platforms usually build in-house or acquire; but not zero. |
| Ad-supported | Not recommended | Erodes the forensic-tool trust posture. |
plan_tier = 'premium' gate.Enterprise / B2B2C licensing: - Adult Protective Services, area agencies on aging, elder-fraud non-profits. - Family-law firms and mediators. - Financial advisors managing older clients' assets. - Sell as "forensic evidence pack, on demand" not as "scam detector".
| Scenario | Approx. value | Basis |
|---|---|---|
| Present as-is (no revenue, no users) | $5k–$25k | Working prototype, well-structured code, defensible detection core. Value = engineering hours + IP. |
| After 6 months, 500 paying users at $15 ARPU | $500k–$1.5M | Standard consumer SaaS multiples 5–10× ARR. |
| Realistic 3-year outcome | $2M–$10M | Modest B2C growth + a small B2B pilot. Category leadership in interpersonal fraud forensics. |
| Moonshot | $50M+ | Category-defining, cross-vertical (romance → rental → elder → custody), acquired by a family-safety incumbent (Bark, Aura, LifeLock/Norton). |
All valuations are Speculative and dependent on execution, calibration accuracy, distribution, and market timing.
Signed PDF report as a one-off purchase: $9.99 for a shareable, timestamped, chain-anchored report from a single scan. No subscription commitment, immediately useful to the "I need to hand my sister proof this weekend" user.
Note: Competitive analysis below is Speculative / requires further audit. No formal market research has been performed.
| Category | Example | How CLCKBL differs |
|---|---|---|
| Reverse-image / catfish detection | Social Catfish, Spokeo | Those tools verify who someone is; CLCKBL analyses what they're saying. Complementary, not overlapping. |
| Consumer identity monitoring | Aura, LifeLock, Bark | Family-safety brands, but focused on identity theft, kids' online activity. None do romance-scam conversational forensics. |
| Platform-side detection | Tinder / Match / Meta internal ML | Not user-facing; users can't get the output. |
| Anti-fraud non-profits | AARP Fraud Watch, FTC | Educational content, no per-conversation forensic tool. |
| AI chat classifiers | ChatGPT prompted "is this a scam?" | Unstructured, no citations, no audit trail, hallucinatory, no persistence. |
pattern_reports).The category-defining tool for interpersonal fraud forensics.
A platform where any concerned third party can:
Ecosystem expansions:
Ordered by (value × leverage) / effort. Ranks are the owner's estimates.
| # | Task | Effort | ROI | Notes |
|---|---|---|---|---|
| 1 | Register custom domain (clckbl.com if available; else alternatives) |
Low | High | Brand permanence. Check WHOIS before committing. |
| 2 | Build labeled corpus of ~200 conversations (mix of confirmed scam, confirmed real, ambiguous) | Medium | Very High | Calibration validation. Everything downstream depends on this. |
| 3 | Add basic error aggregation (Sentry or equivalent) | Low | High | Blind on production is a beta-blocker. |
| 4 | Playwright smoke suite covering sign-in, scan, case create, share | Medium | High | Guards mobile regressions. |
| 5 | Admin surface for pattern_reports triage |
Medium | Medium | Unlocks the data flywheel. |
| # | Task | Effort | ROI |
|---|---|---|---|
| 6 | Marketing landing (separate from app) | Medium | High |
| 7 | Beta invite flow with waitlist | Low | Medium |
| 8 | Onboarding walkthrough / tour | Medium | Medium |
| 9 | Localized pattern packs (start with one non-English scam script) | High | Medium |
| 10 | Privacy copy: promote deterministic-only guarantee on landing + privacy pages ("analyzed by deterministic code, never sent to an AI model") | Low | High (trust differentiator) |
| # | Task | Effort | ROI |
|---|---|---|---|
| 11 | Stripe subscription behind plan_tier |
Medium | High (revenue) |
| 12 | Chrome extension | High | High |
| 13 | Family multi-seat plans | Medium | Medium |
| 14 | White-label API for one design-partner org | High | Very High (validation) |
| 15 | Sextortion product surface (already have the pattern pack) | Medium | Medium |
| Risk | Severity | Likelihood | Mitigation |
|---|---|---|---|
| Calibration is wrong on real data (false positives destroy trust) | High | Medium-High | Corpus + validation before broad beta. Show confidence, never claim certainty. |
| Legal / privacy exposure from analyzing another person's messages | High | Medium | Legal review of ToS. Explicit user attestation. Jurisdictional geo-gating if needed. |
| A dating platform sues for reputational harm | Medium | Low-Medium | Never name subjects publicly. Verdict is private to the user unless they explicitly share. |
| Detection engine bypassed by scammer awareness | Medium | High (over time) | Continuous pattern-pack updates, versioned test fixtures, and community-sourced pattern_reports triage. Adaptive ML is intentionally out-of-scope (Change Order 001 preserves the deterministic moat). |
| Solo-founder bus factor | High | Ongoing | This document. Continuity plan. Migration keys stored separately. |
| Lovable / Supabase / Cloudflare vendor lock-in | Low | Ongoing | Detection core is portable. DB is Postgres. Not existential. |
| Sensitive content (sextortion, minors) surfaces via user paste | High | Medium | Content-policy + auto-purge + reporting workflow to NCMEC / equivalent. Requires immediate design attention. |
| Founder burnout | High | Ongoing | Modular architecture allows partial handoff. Publish + monetize before adding scope. |
src/detection-core/ folder is a self-contained IP asset. Back it up outside Lovable.bun install.supabase/migrations/ in strict lexicographic (timestamp) order. Do NOT skip any — the audit-chain RPC and enum types depend on prior migrations.SUPABASE_* only. The detection path calls no external inference API — no LOVABLE_API_KEY or OpenAI-equivalent is required to run scans (Change Order 001).bun run dev.bun run test (vitest core determinism).src/detection-core/fixtures.ts on /scan.Attach this manual + the repository + the domain registrar credentials + the Supabase project owner credentials in a legal instrument (will, trust addendum, or equivalent). Do not embed secrets in this document.
[DEAD MAN SWITCH DETAILS: stored separately in secure legal/estate channel]
Owner's estimates. Scale 0–10.
| Dimension | Score | Reasoning |
|---|---|---|
| Ecosystem importance (within Kenneth's portfolio) | Unknown | No cross-project integration observed; needs creator confirmation |
| Monetization potential (12-month) | 6 | Clear path, real market, no distribution yet |
| Monetization potential (36-month) | 8 | Category-defining potential in interpersonal-fraud forensics |
| Uniqueness | 8 | Third-party posture + evidence-grade output is genuinely rare |
| Defensibility | 6 | Pattern-craft moat is real but not insurmountable to a funded incumbent |
| Long-term importance (societal) | 8 | Romance-scam losses in the US alone are >$1B/year (FTC — unverified in this document, needs citation before public claim) |
| Emotional importance to creator | Unknown | Needs creator confirmation |
| Replacement difficulty | 7 | 4–8 weeks of focused engineering to rebuild from scratch; the craft is the pattern packs |
Concrete, ordered, executable.
clckbl.com (or best available). Point at the Lovable published URL.
- Rename package (tanstack_start_ts → clckbl) in package.json for future clarity.
- Add a labeled corpus folder (corpus/) even if empty — commit the intention.Documentation / branding gaps to close:
CLCKBL wordmark + shield glyph, monospace, forensic tone consistent with the app.CLCKBL is a working prototype of a category that does not yet meaningfully exist: consumer-grade, third-party, evidence-generating forensics for interpersonal fraud.
The product treats the concerned outsider as the operator, the conversation as the artifact, and the verdict as evidence — not as advice. It refuses to guess and refuses to bury its reasoning. Every signal cites its source. Every case event chains into a tamper-evident audit log. Every verdict is deterministic and re-hashable.
The engineering is complete for a beta. What remains is calibration against real data, distribution to the acute-pain segment, and a commercial layer the owner has intentionally deferred.
The core intellectual asset is not the app — it is the detection craft (pattern packs + fusion calibration + audit posture). That asset is portable, testable, and inheritable. Even if the hosted product dies, src/detection-core/ is a self-contained artifact of real value.
This project should continue existing because it addresses a specific, painful, and under-served problem for the third party watching someone they love be exploited — and because the person best positioned to hand them evidence is almost never the platform, almost never the police, and almost never the victim.
It is the outsider. CLCKBL is the tool the outsider does not currently have.
This document was audited end-to-end against source on 2026-07-05. Every finding is either a correction to a v1 claim, a strengthening of an under-specified section, or an unresolved item flagged for creator follow-up.
After v2 was published, the founder issued Change Order 001: remove the AI reasoning lane entirely and restore the pure-rules moat. This v2.1 revision reflects the post-change-order state of the code.
What changed in code:
- Deleted src/detection-core/lanes/ai.server.ts.
- runFullPipeline no longer accepts an aiRunner; it composes five deterministic lanes only (pattern ×3, linguistic, temporal, network). Zero external inference calls.
- Pipeline version bumped 1.1.0 → 1.2.0 and stamped into every verdict.
- TS RiskGrade union re-aligned to Postgres: negligible / low / moderate / high / critical.
- Postgres signal_source enum rebuilt via migration 20260705172536_*.sql to drop ai and match the TS SignalSource union.
- Persistence-boundary guards assertRiskGrade and assertSignalSource added in src/lib/scan.functions.ts.
- Vitest: 12/12 pass after the change; tsgo --noEmit clean.
Why it matters strategically: The deterministic engine is the IP thesis. A pure algorithm is patentable, licensable, privacy-clean, portable, and offline-runnable. An LLM in the detection path would compromise every one of those. Change Order 001 is a strategy decision, not a cleanup — do NOT re-add an inference call to the detection path without an explicit reversal from the founder.
| # | Finding | v1 statement | v2 statement | Source |
|---|---|---|---|---|
| C-1 | Enum drift — RiskGrade (resolved in Change Order 001) | v1: divergence unreported. v2: flagged as high-severity confirmed bug. | v2.1: TS RiskGrade union rewritten to negligible/low/moderate/high/critical — matches Postgres exactly. assertRiskGrade guard added at the persistence boundary. Fixture-graded via pipeline.test.ts (12/12 pass). |
src/detection-core/types.ts; src/lib/scan.functions.ts |
| C-2 | Enum drift — SignalSource (resolved in Change Order 001) | v1: not mentioned. v2: divergence flagged. | v2.1: migration 20260705172536_*.sql rebuilt the Postgres enum to the union pattern/linguistic/temporal/network/meta/contradiction/behavioral/financial/sanitization (no ai). assertSignalSource guard added at the persistence boundary. |
src/detection-core/types.ts; supabase/migrations/20260705172536_*.sql |
| C-3 | Profile column name | Implied plan_tier was a column |
Corrected: plan_tier is the enum type, plan is the column on profiles. Free = 5 scans/month, Premium = 200 scans/month cited from scan.functions.ts. |
src/lib/scan.functions.ts:19-63 |
| C-4 | Audit-chain hash formula | sha256(prev \|\| event_type \|\| case_id \|\| timestamp \|\| payload) |
Corrected to pipe-delimited form matching append_audit_event: sha256(prev \|\| '\|' \|\| event_type \|\| '\|' \|\| case_id \|\| '\|' \|\| now \|\| '\|' \|\| payload). |
Migrations 20260705154426_*.sql, 20260705154514_*.sql |
| C-5 | LOC counts (Detection Core) | ~130 / ~200 / ~150 / ~100 (approximations) |
Exact: types.ts:147, sanitize.ts:148, pipeline.ts:180, fusion.ts:143. live-guard-panel.tsx:110 added. |
wc -l on repo |
| C-6 | OAuth wording | "Google OAuth, per template" (vague) | Explicit: lovable.auth.signInWithOAuth("google", …) in src/routes/auth.tsx. Confirmed. |
src/routes/auth.tsx:89 |
| C-7 | Test-count phrasing | "10 specs across two files" | Split: 5 in sanitize.test.ts, 5 in pipeline.test.ts. Explicit no-integration-test caveat added. |
grep it\|test on *.test.ts |
| C-8 | Tagline citation | Cited to index.tsx generally |
Cited to src/routes/index.tsx:60-61; noted the two-span split ("Someone you love is being scammed." + "Prove it."). |
Same |
src/detection-core/lanes/ai.server.ts is gone and runFullPipeline no longer accepts an aiRunner. The section is intentionally absent; the observability gap it flagged is now moot. Privacy copy on the landing / privacy pages is a follow-up (§13, item 10).| # | Question | Why it matters |
|---|---|---|
| U-1 | Is clckbl.com (or any preferred custom domain) available / registered? |
Blocks brand permanence. Cannot be verified from repo. |
| U-2 | Are there any prior CLCKBL iterations, alternate branches, or ecosystem-sibling projects not in this repository? | §7 (Ecosystem) is currently None observed in code. Cross-project links would materially change ecosystem valuation. |
| U-3 | What is the creator's intended sequencing between (a) fixing the enum drift, (b) building the labeled corpus, (c) monetizing? Owner previously de-prioritized monetization; the other two are technical vs. accuracy. | Roadmap in §13 currently sequences drift/corpus/observability first; needs owner sign-off. |
| U-4 | Are there abandoned or scrapped approaches (older detection strategies, discarded lanes, dead migrations) worth documenting? | §8 currently says "None documented in code". |
| U-5 | What is the intended legal jurisdiction for privacy / third-party-conversation-consent review? US-only? Multi-jurisdictional? | §14 flags this as High-severity risk; can't advance without owner input. |
| U-6 | Is there an intended handling protocol for user-pasted content involving minors (CSAM/sextortion-of-minors surfaces)? Reporting to NCMEC or equivalent? | §14 flags this as immediate design attention. Currently no scaffolding in repo. |
| U-7 | Emotional / portfolio priority of CLCKBL relative to other KESJR projects. | §16 currently Unknown. Affects continuity plan and burnout risk mitigation. |
| U-8 | Preferred continuity / inheritance channel (attorney, family member, digital-estate service)? | §15 uses placeholders; owner must operationalize. |
| Dimension | Score (0–10) | Note |
|---|---|---|
| Truthfulness | 9 | Two confirmed bugs surfaced and preserved; every material claim tagged. |
| Completeness | 8.5 | Full feature/architecture/schema coverage; U-list captures remaining gaps. |
| Continuity readiness | 8 | Recovery procedure is executable; inheritance requires owner action on U-8. |
| Enterprise polish | 9 | Cover, TOC, typography, tables, diagrams all print-clean. |
| Readability | 9 | Desktop + mobile QA passed; TOC two-column on desktop, single on mobile. |
| Technical clarity | 9 | Every subsystem cited to file and function. |
| Strategic clarity | 8 | Third-party framing preserved as core moat; roadmap ordered by leverage. |
| Future maintainability | 8 | Document is source-linked; drift risk = source moves without doc update. Suggest quarterly re-audit. |
| Acquisition readiness | 7 | Sufficient for a preliminary evaluator packet; a formal data room would still need legal, calibration data, and traction. |
| Archival quality | 9 | Three formats (MD, HTML, PDF), self-contained, printable, mobile-legible, no external CDN dependencies. |
Overall: v2 is fit to be called the canonical source of truth. Re-audit trigger: any change to pipeline lanes, schema enums, or the append_audit_event RPC.
Document prepared by the Lovable agent, from source inspection of the CLCKBL repository, migrations, and configuration as of 2026-07-05. Every claim tagged in Section header — Truthfulness Legend. All valuations and future-vision claims are estimates, not guarantees.
Kenneth E. Sweet Jr. · PromptFluid@gmail.com · KESJR.com · Abilene, TX 79605