umer-wasim commited on
Commit
74fa33a
·
verified ·
1 Parent(s): 373daac

Arx 0.5.4: Ready to audit screen in two rows; label Fine-tuned AI Model

Browse files
app/package.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "name": "devseis-endpoint-auditor",
3
  "productName": "Arx",
4
- "version": "0.5.3",
5
  "description": "Read-only endpoint audit for ISO 27001, GDPR and the EU AI Act, with a local AI auditor.",
6
  "author": {
7
  "name": "Devseis",
 
1
  {
2
  "name": "devseis-endpoint-auditor",
3
  "productName": "Arx",
4
+ "version": "0.5.4",
5
  "description": "Read-only endpoint audit for ISO 27001, GDPR and the EU AI Act, with a local AI auditor.",
6
  "author": {
7
  "name": "Devseis",
app/renderer/app.js CHANGED
@@ -48,24 +48,32 @@ async function prepare() {
48
  showApproval();
49
  }
50
 
51
- // 2. Approval: show everything that will be checked
 
 
 
 
 
 
52
  function showApproval() {
53
  $('plan').innerHTML = '';
 
 
54
  for (const section of plan.sections) {
 
55
  const box = document.createElement('div');
56
- box.className = 'section';
57
- const title = document.createElement('h3');
58
- title.textContent = section.title;
59
- const count = document.createElement('span');
60
- count.textContent = `${section.checks.length} checks`;
61
- title.appendChild(count);
62
- const list = document.createElement('ul');
63
  for (const check of section.checks) {
64
  const item = document.createElement('li');
65
  item.textContent = check.name;
66
  list.appendChild(item);
67
  }
68
- box.append(title, list);
69
  $('plan').appendChild(box);
70
  }
71
  show('approve');
 
48
  showApproval();
49
  }
50
 
51
+ // 2. Approval: show everything that will be checked (row 1: baseline + GDPR, row 2: AI Act + organisation)
52
+ const SECTION_INFO = {
53
+ baseline: { icon: '🛡️', title: 'Security baseline', sub: 'Passwords, accounts, antivirus, firewall, screen lock, USB, encryption, updates' },
54
+ gdpr: { icon: '🔐', title: 'GDPR technical controls', sub: 'Updates, logging, time, backup, guest and remote access, diagnostics' },
55
+ aiact: { icon: '🤖', title: 'EU AI Act', sub: 'AI tools on this computer and how they are governed' },
56
+ org: { icon: '🏢', title: 'Organisation', sub: 'Company records and policies, answered in organisational.conf' },
57
+ };
58
  function showApproval() {
59
  $('plan').innerHTML = '';
60
+ const total = plan.sections.reduce((n, s) => n + s.checks.length, 0);
61
+ $('plan-total').textContent = `${total} checks in ${plan.sections.length} groups`;
62
  for (const section of plan.sections) {
63
+ const info = SECTION_INFO[section.id] || { icon: '•', title: section.title, sub: '' };
64
  const box = document.createElement('div');
65
+ box.className = `section section-${section.id}`;
66
+ box.innerHTML = `<div class="section-head"><span class="section-icon"></span><div class="section-titles"><h3></h3><p></p></div><span class="count"></span></div><ul></ul>`;
67
+ box.querySelector('.section-icon').textContent = info.icon;
68
+ box.querySelector('h3').textContent = info.title;
69
+ box.querySelector('p').textContent = info.sub;
70
+ box.querySelector('.count').textContent = `${section.checks.length} checks`;
71
+ const list = box.querySelector('ul');
72
  for (const check of section.checks) {
73
  const item = document.createElement('li');
74
  item.textContent = check.name;
75
  list.appendChild(item);
76
  }
 
77
  $('plan').appendChild(box);
78
  }
79
  show('approve');
app/renderer/index.html CHANGED
@@ -28,7 +28,7 @@
28
  <!-- 2. Approval -->
29
  <section class="screen hidden" id="screen-approve">
30
  <h1>Ready to audit this computer</h1>
31
- <p class="lead">The audit only <b>reads</b> settings. It changes nothing unless you later choose <b>Fix</b>. These checks will run:</p>
32
  <div class="sections" id="plan"></div>
33
  <label class="option"><input type="checkbox" id="elevated" checked> Run with administrator rights (recommended — without them some checks cannot be read)</label>
34
  <div class="actions">
 
28
  <!-- 2. Approval -->
29
  <section class="screen hidden" id="screen-approve">
30
  <h1>Ready to audit this computer</h1>
31
+ <p class="lead">The audit only <b>reads</b> settings. It changes nothing unless you later choose <b>Fix</b>. <span id="plan-total"></span>:</p>
32
  <div class="sections" id="plan"></div>
33
  <label class="option"><input type="checkbox" id="elevated" checked> Run with administrator rights (recommended — without them some checks cannot be read)</label>
34
  <div class="actions">
app/renderer/styles.css CHANGED
@@ -23,11 +23,6 @@ h2 { font-size: 19px; margin: 0 0 8px; }
23
  .progress { height: 10px; background: var(--line); border-radius: 999px; overflow: hidden; margin-top: 10px; }
24
  .progress.thin { height: 6px; margin: 12px 0 4px; }
25
  .progress > div { height: 100%; width: 0; background: linear-gradient(90deg, var(--blue), var(--red)); transition: width .25s; }
26
- .sections { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin-bottom: 14px; }
27
- .section { background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; }
28
- .section h3 { font-size: 14px; margin: 0 0 6px; display: flex; justify-content: space-between; }
29
- .section h3 span { color: var(--muted); font-weight: 500; }
30
- .section ul { margin: 0; padding-left: 18px; font-size: 13px; color: var(--muted); max-height: 170px; overflow: auto; }
31
  .option { display: flex; gap: 8px; align-items: flex-start; margin: 6px 0 18px; font-size: 14px; }
32
  .actions { display: flex; gap: 10px; justify-content: flex-end; flex-wrap: wrap; }
33
  button { font: inherit; font-weight: 600; border-radius: 10px; padding: 10px 18px; cursor: pointer; border: 1px solid transparent; }
@@ -67,3 +62,21 @@ label.fix-item input { margin-top: 4px; width: 16px; height: 16px; accent-color:
67
  .fix-results, .fix-list { margin: 8px 0 0; padding-left: 4px; list-style: none; font-size: 14px; }
68
  .fix-results li, .fix-list li { margin-bottom: 6px; }
69
  button:disabled { opacity: .5; cursor: default; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  .progress { height: 10px; background: var(--line); border-radius: 999px; overflow: hidden; margin-top: 10px; }
24
  .progress.thin { height: 6px; margin: 12px 0 4px; }
25
  .progress > div { height: 100%; width: 0; background: linear-gradient(90deg, var(--blue), var(--red)); transition: width .25s; }
 
 
 
 
 
26
  .option { display: flex; gap: 8px; align-items: flex-start; margin: 6px 0 18px; font-size: 14px; }
27
  .actions { display: flex; gap: 10px; justify-content: flex-end; flex-wrap: wrap; }
28
  button { font: inherit; font-weight: 600; border-radius: 10px; padding: 10px 18px; cursor: pointer; border: 1px solid transparent; }
 
62
  .fix-results, .fix-list { margin: 8px 0 0; padding-left: 4px; list-style: none; font-size: 14px; }
63
  .fix-results li, .fix-list li { margin-bottom: 6px; }
64
  button:disabled { opacity: .5; cursor: default; }
65
+
66
+ /* Approval screen: two rows of two groups */
67
+ .sections { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 16px; }
68
+ .section { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 14px 16px 12px; display: flex; flex-direction: column; min-width: 0; }
69
+ .section-head { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
70
+ .section-icon { font-size: 20px; line-height: 1.2; }
71
+ .section-titles { flex: 1; min-width: 0; }
72
+ .section h3 { font-size: 15px; margin: 0; line-height: 1.3; }
73
+ .section-titles p { margin: 2px 0 0; font-size: 12px; color: var(--muted); line-height: 1.4; }
74
+ .section .count { flex-shrink: 0; white-space: nowrap; font-size: 12px; font-weight: 600; color: var(--red); background: color-mix(in srgb, var(--red) 10%, transparent); border-radius: 999px; padding: 3px 10px; }
75
+ .section ul { margin: 0; padding: 0; list-style: none; font-size: 13px; color: var(--muted); overflow: auto; max-height: 232px; border-top: 1px solid var(--line); padding-top: 8px; }
76
+ .section li { position: relative; padding: 3px 0 3px 18px; line-height: 1.35; }
77
+ .section li::before { content: '✓'; position: absolute; left: 0; top: 3px; color: var(--ok); font-weight: 700; font-size: 12px; }
78
+ .section-aiact ul, .section-org ul { max-height: none; }
79
+ @media (max-width: 760px) { .sections { grid-template-columns: 1fr; } }
80
+ .section-baseline ul, .section-gdpr ul { columns: 2; column-gap: 18px; max-height: 300px; }
81
+ .section-baseline li, .section-gdpr li { break-inside: avoid; font-size: 12.5px; }
82
+ @media (max-width: 900px) { .section-baseline ul, .section-gdpr ul { columns: 1; } }
index.html CHANGED
@@ -31,7 +31,7 @@
31
  <!-- ===== Landing ===== -->
32
  <main id="landing">
33
  <section class="wrap hero">
34
- <p class="eyebrow"><img src="app/build/icon.png" alt="">Arx - Fine Tuned AI Model</p>
35
  <h1>Is your computer secure?<br><span class="grad">Find out in a minute.</span></h1>
36
  <p class="lead">A free audit of your Mac, Windows or Linux computer: <b><span data-count>70</span> checks</b> mapped to <b>ISO 27001</b>, <b>GDPR</b> and the <b>EU AI Act</b>. A small AI on your computer writes the report, and on Mac and Linux Arx can <b>fix problems for you</b>. It runs offline. <u>Nothing is uploaded.</u></p>
37
 
@@ -60,7 +60,7 @@
60
  <label class="btn" for="reportFile" title="Open the …-evidence.json file Arx saves next to each report">Open a report</label>
61
  <input type="file" id="reportFile" accept=".json,application/json" hidden>
62
  </div>
63
- <p class="tiny muted" id="heroMeta">Free · open source · version 0.5.3</p>
64
  </section>
65
 
66
  <section class="wrap">
@@ -99,7 +99,7 @@
99
  </section>
100
 
101
  <section class="wrap section" id="install">
102
- <div class="section-head"><h2>Install Arx</h2><span class="tiny muted" id="dlVersion">Version 0.5.3</span></div>
103
  <p class="muted install-why">One command installs Arx and opens it. It downloads Arx from Hugging Face, <b>checks its SHA-256 fingerprint</b> against the published one, and refuses to install if anything differs. Because Terminal downloads it, your computer does not block it: no "Open Anyway", no security warning.</p>
104
  <div class="dl-grid">
105
  <article class="dl-card" data-os="mac">
 
31
  <!-- ===== Landing ===== -->
32
  <main id="landing">
33
  <section class="wrap hero">
34
+ <p class="eyebrow"><img src="app/build/icon.png" alt="">Arx - Fine-tuned AI Model</p>
35
  <h1>Is your computer secure?<br><span class="grad">Find out in a minute.</span></h1>
36
  <p class="lead">A free audit of your Mac, Windows or Linux computer: <b><span data-count>70</span> checks</b> mapped to <b>ISO 27001</b>, <b>GDPR</b> and the <b>EU AI Act</b>. A small AI on your computer writes the report, and on Mac and Linux Arx can <b>fix problems for you</b>. It runs offline. <u>Nothing is uploaded.</u></p>
37
 
 
60
  <label class="btn" for="reportFile" title="Open the …-evidence.json file Arx saves next to each report">Open a report</label>
61
  <input type="file" id="reportFile" accept=".json,application/json" hidden>
62
  </div>
63
+ <p class="tiny muted" id="heroMeta">Free · open source · version 0.5.4</p>
64
  </section>
65
 
66
  <section class="wrap">
 
99
  </section>
100
 
101
  <section class="wrap section" id="install">
102
+ <div class="section-head"><h2>Install Arx</h2><span class="tiny muted" id="dlVersion">Version 0.5.4</span></div>
103
  <p class="muted install-why">One command installs Arx and opens it. It downloads Arx from Hugging Face, <b>checks its SHA-256 fingerprint</b> against the published one, and refuses to install if anything differs. Because Terminal downloads it, your computer does not block it: no "Open Anyway", no security warning.</p>
104
  <div class="dl-grid">
105
  <article class="dl-card" data-os="mac">