Skip to content

Commit ebb9fa0

Browse files
committed
Avoided a mistake and added something in place
1 parent 76a54b8 commit ebb9fa0

6 files changed

Lines changed: 266 additions & 53 deletions

File tree

README.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ flowchart LR
6161
C --> D[Correlation Engine]
6262
D --> E[Tracking and Change Summary]
6363
```
64+
![ASRFacet-Rb Framework Flow](docs/images/illustration/asrfacet-rb-framework-visual.svg)
6465

6566
### Stage Intent
6667

@@ -121,10 +122,6 @@ Installer prompt theme:
121122

122123
## Usage Guide with Examples
123124

124-
### Quick Cheat Sheet
125-
126-
![ASRFacet-Rb Quick Command Cheat Sheet](docs/images/cheatsheets/quick-command-cheatsheet.svg)
127-
128125
### Core Commands
129126

130127
| Command | Purpose | Example |

docs/images/cheatsheets/quick-command-cheatsheet.svg

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Loading

docs/website/app.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ const DocsElements = {
7171
menuToggle: document.getElementById("menu-toggle"),
7272
searchInput: document.getElementById("docs-search-input"),
7373
searchResults: document.getElementById("docs-search-results"),
74+
workflowRail: document.getElementById("workflow-visual-rail"),
75+
workflowDetail: document.getElementById("workflow-visual-detail"),
7476
homeHeroLogo: document.getElementById("home-hero-logo"),
7577
homeHeroEgg: document.getElementById("home-hero-egg"),
7678
siteFooter: document.getElementById("site-footer"),
@@ -744,6 +746,92 @@ const ContactPanel = (() => {
744746
return { bind, closeOpen };
745747
})();
746748

749+
const WorkflowVisual = (() => {
750+
const stages = [
751+
{
752+
order: "01",
753+
name: "Passive Discovery",
754+
short: "Collect candidate hosts before active traffic begins.",
755+
detail: "This stage pulls in low-noise intelligence from certificate transparency, passive DNS, and historical archive-style sources so the framework starts with context instead of blind guesses."
756+
},
757+
{
758+
order: "02",
759+
name: "Active Validation",
760+
short: "Confirm scope, DNS truth, and reachable surfaces.",
761+
detail: "Validated names move through scoped checks, DNS confirmation, and bounded network validation so later stages work from verified assets instead of assumptions."
762+
},
763+
{
764+
order: "03",
765+
name: "Service + Web Map",
766+
short: "Turn live hosts into service and application context.",
767+
detail: "Open ports, banners, HTTP responses, crawl paths, forms, and JavaScript endpoints are gathered here to describe how a host behaves, not just that it exists."
768+
},
769+
{
770+
order: "04",
771+
name: "Correlation",
772+
short: "Link assets, findings, and relationships together.",
773+
detail: "The framework joins domains, IPs, services, and discoveries into a graph-friendly view so operators can see how assets relate and which ones deserve attention first."
774+
},
775+
{
776+
order: "05",
777+
name: "Tracking",
778+
short: "Preserve history and show what changed since last time.",
779+
detail: "Recon memory stores prior state so each run can produce deltas, change summaries, and more useful reporting instead of isolated snapshots."
780+
}
781+
];
782+
783+
function renderDetail(stage) {
784+
if (!DocsElements.workflowDetail || !stage) {
785+
return;
786+
}
787+
788+
DocsElements.workflowDetail.innerHTML = `
789+
<div class="workflow-visual-detail-title">${stage.order} · ${stage.name}</div>
790+
<div class="workflow-visual-detail-copy">${stage.detail}</div>
791+
`;
792+
}
793+
794+
function activate(stageName) {
795+
if (!DocsElements.workflowRail) {
796+
return;
797+
}
798+
799+
const stage = stages.find((entry) => entry.name === stageName) || stages[0];
800+
DocsElements.workflowRail.querySelectorAll(".workflow-stage").forEach((node) => {
801+
node.classList.toggle("is-active", node.dataset.stageName === stage.name);
802+
});
803+
renderDetail(stage);
804+
}
805+
806+
function bind() {
807+
if (!DocsElements.workflowRail) {
808+
return;
809+
}
810+
811+
DocsElements.workflowRail.innerHTML = stages.map((stage) => `
812+
<button type="button" class="workflow-stage" data-stage-name="${stage.name}">
813+
<span class="workflow-stage-order">${stage.order}</span>
814+
<div class="workflow-stage-name">${stage.name}</div>
815+
<div class="workflow-stage-copy">${stage.short}</div>
816+
<span class="workflow-stage-arrow">></span>
817+
</button>
818+
`).join("");
819+
820+
DocsElements.workflowRail.querySelectorAll(".workflow-stage").forEach((node) => {
821+
node.addEventListener("click", () => activate(node.dataset.stageName));
822+
node.addEventListener("mouseenter", () => {
823+
if (window.matchMedia("(hover: hover)").matches) {
824+
activate(node.dataset.stageName);
825+
}
826+
});
827+
});
828+
829+
activate(stages[0].name);
830+
}
831+
832+
return { bind };
833+
})();
834+
747835
const App = (() => {
748836
function trimEmptyVisualCards() {
749837
const cardSelectors = [
@@ -924,6 +1012,7 @@ const App = (() => {
9241012
Sidebar.render();
9251013
EasterEgg.bind();
9261014
Search.bind();
1015+
WorkflowVisual.bind();
9271016
Search.setOpen(false);
9281017
bindHomeEasterEgg();
9291018
bindGlobalEvents();

docs/website/styles.css

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,125 @@ tbody td code { white-space: nowrap; }
11301130
margin-top: 6px;
11311131
}
11321132

1133+
/* WORKFLOW VISUAL */
1134+
.workflow-visual {
1135+
margin: 18px 0 28px;
1136+
padding: 20px;
1137+
border: 1px solid var(--border);
1138+
background:
1139+
linear-gradient(180deg, rgba(255,26,26,0.08), rgba(255,26,26,0.02)),
1140+
radial-gradient(circle at top right, rgba(255,26,26,0.10), transparent 42%);
1141+
border-radius: 16px;
1142+
box-shadow: 0 16px 38px rgba(0, 0, 0, 0.22);
1143+
}
1144+
.workflow-visual-head {
1145+
display: grid;
1146+
gap: 6px;
1147+
margin-bottom: 18px;
1148+
}
1149+
.workflow-visual-title {
1150+
font-family: var(--display);
1151+
font-size: 0.82rem;
1152+
letter-spacing: 0.12em;
1153+
text-transform: uppercase;
1154+
color: var(--r0);
1155+
}
1156+
.workflow-visual-copy {
1157+
color: var(--txt2);
1158+
font-size: 13.5px;
1159+
line-height: 1.6;
1160+
font-weight: 500;
1161+
max-width: 760px;
1162+
}
1163+
.workflow-visual-rail {
1164+
display: grid;
1165+
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1166+
gap: 12px;
1167+
align-items: stretch;
1168+
margin-bottom: 16px;
1169+
}
1170+
.workflow-stage {
1171+
position: relative;
1172+
border: 1px solid var(--border2);
1173+
background: rgba(16, 1, 1, 0.86);
1174+
border-radius: 14px;
1175+
padding: 14px 14px 16px;
1176+
cursor: pointer;
1177+
transition: transform 0.18s ease, border-color 0.18s ease, background 0.18s ease, box-shadow 0.18s ease;
1178+
}
1179+
.workflow-stage:hover,
1180+
.workflow-stage.is-active {
1181+
border-color: var(--r0);
1182+
background: rgba(255, 26, 26, 0.08);
1183+
transform: translateY(-2px);
1184+
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.18);
1185+
}
1186+
.workflow-stage-order {
1187+
display: inline-flex;
1188+
align-items: center;
1189+
justify-content: center;
1190+
width: 34px;
1191+
height: 34px;
1192+
border-radius: 999px;
1193+
border: 1px solid var(--border);
1194+
background: rgba(255,26,26,0.10);
1195+
color: var(--r0);
1196+
font-family: var(--mono);
1197+
font-size: 0.68rem;
1198+
font-weight: 700;
1199+
margin-bottom: 10px;
1200+
}
1201+
.workflow-stage-name {
1202+
font-family: var(--display);
1203+
font-size: 0.68rem;
1204+
letter-spacing: 0.08em;
1205+
text-transform: uppercase;
1206+
color: var(--txt);
1207+
margin-bottom: 8px;
1208+
}
1209+
.workflow-stage-copy {
1210+
color: var(--txt3);
1211+
font-size: 12.5px;
1212+
line-height: 1.55;
1213+
font-weight: 500;
1214+
}
1215+
.workflow-stage-arrow {
1216+
position: absolute;
1217+
top: 50%;
1218+
right: -14px;
1219+
transform: translateY(-50%);
1220+
font-family: var(--mono);
1221+
color: var(--r0);
1222+
font-size: 1rem;
1223+
opacity: 0.72;
1224+
pointer-events: none;
1225+
}
1226+
.workflow-stage:last-child .workflow-stage-arrow {
1227+
display: none;
1228+
}
1229+
.workflow-visual-detail {
1230+
border: 1px solid var(--border2);
1231+
border-left: 3px solid var(--r2);
1232+
background: rgba(9, 12, 18, 0.84);
1233+
border-radius: 12px;
1234+
padding: 16px 18px;
1235+
min-height: 110px;
1236+
}
1237+
.workflow-visual-detail-title {
1238+
font-family: var(--display);
1239+
font-size: 0.7rem;
1240+
letter-spacing: 0.1em;
1241+
text-transform: uppercase;
1242+
color: var(--r0);
1243+
margin-bottom: 8px;
1244+
}
1245+
.workflow-visual-detail-copy {
1246+
color: var(--txt2);
1247+
font-size: 13.5px;
1248+
line-height: 1.65;
1249+
font-weight: 500;
1250+
}
1251+
11331252
/* COMMAND REFERENCE CARDS */
11341253
.cmd-grid {
11351254
display: grid;
@@ -1439,6 +1558,7 @@ tbody td code { white-space: nowrap; }
14391558
.wizard-grid { grid-template-columns: 1fr; }
14401559
.mod-item { grid-template-columns: 1fr; }
14411560
.lab-endpoints { grid-template-columns: 1fr; }
1561+
.workflow-stage-arrow { display: none; }
14421562
.topbar-action-menu { display: inline-flex; align-items: center; justify-content: center; }
14431563
#topbar-links { display: none; }
14441564
.topbar-search {
@@ -1583,6 +1703,12 @@ tbody td code { white-space: nowrap; }
15831703
.fmt-grid,
15841704
.stat-strip,
15851705
.install-grid { grid-template-columns: 1fr; }
1706+
.workflow-visual {
1707+
padding: 14px;
1708+
}
1709+
.workflow-visual-rail {
1710+
grid-template-columns: 1fr;
1711+
}
15861712
#site-footer { grid-template-columns: 1fr; }
15871713

15881714
.egg-toast {

docs/website/workflow.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,18 @@
8080
</tbody>
8181
</table>
8282
</div>
83+
84+
<div class="workflow-visual" id="workflow-visual" aria-label="Interactive workflow visualization">
85+
<div class="workflow-visual-head">
86+
<div class="workflow-visual-title">Live Workflow View</div>
87+
<div class="workflow-visual-copy">The website renders the framework flow directly with HTML, CSS, and JavaScript so each stage stays readable and interactive.</div>
88+
</div>
89+
<div class="workflow-visual-rail" id="workflow-visual-rail"></div>
90+
<div class="workflow-visual-detail" id="workflow-visual-detail">
91+
<div class="workflow-visual-detail-title">Select a stage</div>
92+
<div class="workflow-visual-detail-copy">Pick any stage to see what it contributes to the full framework workflow.</div>
93+
</div>
94+
</div>
8395
</section>
8496

8597
<section id="pipeline" class="page-section active">

0 commit comments

Comments
 (0)