S-Dreamer commited on
Commit
1d1902a
Β·
verified Β·
1 Parent(s): c7fee48

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +26 -24
src/streamlit_app.py CHANGED
@@ -3,38 +3,40 @@ import numpy as np
3
  import pandas as pd
4
  import streamlit as st
5
 
6
- """
7
- # Welcome to Streamlit!
8
-
9
- Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:.
10
- If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
11
- forums](https://discuss.streamlit.io).
12
-
13
- In the meantime, below is an example of what you can do with just a few lines of code:
14
- """
15
-
16
- num_points = st.slider("Number of points in spiral", 1, 10000, 1100)
17
- num_turns = st.slider("Number of turns in spiral", 1, 300, 31)
18
-
19
  indices = np.linspace(0, 1, num_points)
20
  theta = 2 * np.pi * num_turns * indices
21
  radius = indices
22
-
23
  x = radius * np.cos(theta)
24
  y = radius * np.sin(theta)
25
 
 
26
  df = pd.DataFrame({
27
  "x": x,
28
  "y": y,
29
- "idx": indices,
30
- "rand": np.random.randn(num_points),
 
31
  })
32
 
33
- st.altair_chart(alt.Chart(df, height=700, width=700)
34
- .mark_point(filled=True)
35
- .encode(
36
- x=alt.X("x", axis=None),
37
- y=alt.Y("y", axis=None),
38
- color=alt.Color("idx", legend=None, scale=alt.Scale()),
39
- size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])),
40
- ))
 
 
 
3
  import pandas as pd
4
  import streamlit as st
5
 
6
+ st.set_page_config(layout="wide", page_title="AI Recon Visualizer")
7
+ st.title("🧠 AI Recon Visualizer")
8
+ st.markdown("""
9
+ This interactive spiral chart simulates discovered targets during an automated reconnaissance workflow.
10
+ Each point represents a discovered service or subdomain, with random weights simulating risk or exposure levels.
11
+ """)
12
+
13
+ # User-controlled parameters
14
+ num_points = st.slider("πŸ“ˆ Number of discovered endpoints", 10, 10000, 800)
15
+ num_turns = st.slider("πŸ”„ Spiral depth (rotations)", 1, 300, 40)
16
+
17
+ # Spiral coordinates
 
18
  indices = np.linspace(0, 1, num_points)
19
  theta = 2 * np.pi * num_turns * indices
20
  radius = indices
 
21
  x = radius * np.cos(theta)
22
  y = radius * np.sin(theta)
23
 
24
+ # Simulated recon data
25
  df = pd.DataFrame({
26
  "x": x,
27
  "y": y,
28
+ "target_score": indices,
29
+ "risk": np.random.randn(num_points),
30
+ "endpoint": [f"host{i}.recon.local" for i in range(num_points)]
31
  })
32
 
33
+ # Chart definition
34
+ chart = alt.Chart(df, height=700, width=700).mark_point(filled=True).encode(
35
+ x=alt.X("x", axis=None),
36
+ y=alt.Y("y", axis=None),
37
+ color=alt.Color("target_score", legend=None, scale=alt.Scale(scheme="viridis")),
38
+ size=alt.Size("risk", legend=None, scale=alt.Scale(range=[10, 150])),
39
+ tooltip=["endpoint", "risk", "target_score"]
40
+ ).interactive()
41
+
42
+ st.altair_chart(chart, use_container_width=True)