CipherFeed Portfolio Edition is an interactive, static reconstruction of a threat-intelligence workspace I designed and developed. It preserves enough of the original product experience to demonstrate the information architecture, analyst workflows, interface design, and source-grounded AI concept without publishing the operational platform behind it.
The application includes a dashboard-style overview, searchable intelligence stream, decision briefing, ranked action queue, source coverage view, and a scripted AI analyst demonstration. Every record, metric, narrative, timestamp, and response is a fictional local fixture.
- A normalized intelligence stream with search, severity, and category filters.
- A detail workspace that keeps evidence, interpretation, confidence, and next actions visible together.
- A morning briefing that explains what changed, what matters, and what cannot yet be established.
- An explainable priority queue based on visible factors rather than an opaque score alone.
- A dual-perspective AI analyst concept with guided questions, evidence references, and confidence boundaries.
- Responsive, accessible React interactions that run entirely in the browser.
| Screen | What it demonstrates | Interaction |
|---|---|---|
| Overview | Executive metrics, daily context, priority actions, and source coverage | Follow links into each preserved product concept |
| Intel stream | Normalized records and analyst evidence workspace | Search, filter, and select fictional records |
| Daily brief | Decision-focused synthesis and explicit information gaps | Review changes, actions, coverage, and narrative labels |
| AI analyst | Source-grounded conversational UX and response safety | Switch perspective and choose guided questions |
| Project notes | Original workflow, portfolio scope, and public boundaries | Review what was preserved and removed |
The public edition has one trust boundary: the local browser. It contains no runtime network client or server implementation.
flowchart LR
T["Synthetic threat fixtures"] --> UI["React portfolio interface"]
P["Prewritten briefing and chat fixtures"] --> UI
UI --> O["Overview"]
UI --> S["Intel stream"]
UI --> B["Daily brief"]
UI --> A["AI analyst demo"]
UI --> N["Project notes"]
O & S & B & A & N --> L["Local browser only"]
There are no accounts, environment variables, live feeds, server routes, databases, model providers, analytics services, schedulers, or deployment workflows in this repository.
The AI analyst view communicates the intended user experience without revealing or recreating the original implementation.
flowchart TD
Q["User selects a guided question"] --> K["Look up a local scripted fixture"]
R["Analyst or executive perspective"] --> K
K --> C["Render prewritten response"]
C --> E["Show fictional evidence references"]
C --> G["Show confidence boundary"]
X["No free-form model call"] -.-> K
Y["No prompt, provider, key, API, or storage"] -.-> K
Free-form chat is visibly disabled. Selecting a prompt only changes local React
state and reads a response from src/data/portfolioDemo.js. Nothing is sent,
generated, stored, or inferred.
The project demonstrates this product model without implementing live connectors:
flowchart TD
S["Public advisory or bulletin"] --> C["Collect within source terms"]
C --> V["Validate and bound fields"]
V --> N["Normalize into a common schema"]
N --> R["Correlate stable identifiers"]
R --> P["Prioritize with visible reasons"]
P --> O["Present summary, evidence, gaps, and actions"]
S -. "preserve separately" .-> E["Original source evidence"]
E -. "display beside interpretation" .-> O
In an operational system, every stage would require security, licensing, privacy, availability, observability, rate-limit, and abuse reviews. Those systems are intentionally absent from the portfolio edition.
Each item in src/data/demoThreats.js uses a common teaching schema:
| Field | Meaning |
|---|---|
id |
Fictional identifier beginning with DEMO- |
title |
Neutral summary of the simulated signal |
severity |
Display label used by filtering and priority context |
category |
Broad intelligence type |
source |
Explicitly synthetic source label |
confidence |
Confidence in the represented interpretation |
priority |
Fictional score explained by visible context |
sourceCount |
Number of fictional corroborating records |
trend |
Simulated movement label |
exposure |
Explicitly fictional applicability context |
exploitation |
Cautious activity statement |
evidence |
Supporting facts and limitations |
actions |
Validation-oriented next steps |
tags |
Local search terms |
The fixtures avoid real organizations, people, customers, credentials, infrastructure identifiers, production URLs, and copied source responses.
- The shape of a multi-source threat-intelligence workspace.
- Search, filtering, detail review, priority, and confidence patterns.
- The morning intelligence briefing and ranked action queue concepts.
- The separation of deterministic source evidence from narrative framing.
- The analyst and executive response perspectives from the AI concept.
- Responsive interaction and accessibility patterns useful in a portfolio.
- Identity, account, profile, and personal-data handling.
- Payments, plans, commercial workflows, and contact channels.
- Live APIs, ingestion jobs, server functions, database code, and migrations.
- Provider configuration, prompts, model routing, usage tracking, and keys.
- Private research, production telemetry, deployment files, and operational documentation.
- Logos, icons, favicons, screenshots, remote fonts, and branding guidelines.
Requirements:
- Node.js 20 or newer.
- npm 10 or newer.
npm ci
npm run devOpen the local URL printed by Vite. No environment file is required or supported.
Validation commands:
npm run lint
npm test
npm run build
npm run verify- Open
src/data/demoThreats.js. - Copy one record and assign a new
DEMO-identifier. - Keep the source label explicitly synthetic.
- Add evidence, information gaps, and validation actions.
- Avoid real indicators, organizations, source responses, or credentials.
- Run
npm run verify.
- Open
src/data/portfolioDemo.js. - Add an entry to
analystPrompts. - Write both analyst and executive versions.
- Reference only fictional local records.
- State a confidence boundary in every response.
Do not add a model SDK, network request, environment variable, hidden prompt, or free-form response generator. The educational value is in the interface and reasoning pattern, not a deployable integration.
All presentation styles are in src/styles.css. The project uses system fonts,
CSS, and text labels only. Preserve readable contrast, keyboard focus, labelled
form controls, small-screen layouts, and clear demo boundaries.
.
|-- src/
| |-- __tests__/ Application boundary and route tests
| |-- data/
| | |-- demoThreats.js Synthetic intelligence records
| | `-- portfolioDemo.js Briefing, chart, and scripted chat fixtures
| |-- App.jsx Portfolio screens and local interactions
| |-- main.jsx Browser entry point
| `-- styles.css Self-contained visual treatment
|-- index.html Minimal document shell
|-- package.json React and Vite development commands
|-- CONTRIBUTING.md Portfolio-safe contribution scope
`-- LICENSE Noncommercial source-available terms
- no
.envor.env.example; - no runtime network calls or browser persistence;
- no authentication, user records, payments, or personal data;
- no API keys, provider names, private prompts, or model settings;
- no live source data, production infrastructure, or research documents; and
- no business addresses, private contacts, analytics, or telemetry.
The static build still depends on normal browser and package-manager security. Review dependency updates and run the complete verification suite before publishing a new snapshot.
The safe release branch is codex/public-portfolio-snapshot. It begins from a
clean root commit and does not include the operational repository as reachable
history. Push only this branch to a new public repository. Do not mirror the
local repository or push older branches, tags, pull-request refs, or reflogs.
The code is publicly visible for noncommercial education, study, experimentation, modification, and redistribution under the PolyForm Noncommercial License 1.0.0.
Because commercial use is restricted, this is source-available rather than an OSI-approved open-source distribution.