diff --git a/README.md b/README.md
index 798aa8d..bcc7cab 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,12 @@
Understand what your Mac is doing, without giving up your data.
+
+ Website ·
+ Download beta ·
+ Report an issue
+
+
@@ -23,6 +29,10 @@ No account. No backend. No analytics. No automatic cleanup.
> [!IMPORTANT]
> Corewise is now available as a public beta. Download the signed, notarized universal DMG from [GitHub Releases](https://github.com/roccodaffuso/Corewise/releases/tag/v0.1.0-beta.2). GitHub's automatic “Source code” archives are not installable app downloads.
+
+
+
+
## What Corewise does
- **Focused Check** observes supported local signals when a Mac feels slow, hot, battery-hungry, or full, then returns a cautious explanation and one useful next step.
@@ -34,6 +44,23 @@ No account. No backend. No analytics. No automatic cleanup.
Corewise deliberately avoids health scores, process killing, automatic deletion, private sensor APIs, hidden folder scans, and claims of exact parity with Activity Monitor.
+## Product tour
+
+
+
+
+
+ |
+
+
+ |
+
+
+ AI Workloads Separate direct app footprint, related local work, and shared hosts without pretending to count cloud agents. |
+ Storage See volume headroom first, then start an explicit read-only analysis with reusable permission. |
+
+
+
## Install the public beta
1. Download [`Corewise-0.1.0-universal.dmg`](https://github.com/roccodaffuso/Corewise/releases/download/v0.1.0-beta.2/Corewise-0.1.0-universal.dmg).
diff --git a/docs/PUBLIC_RELEASE_AUDIT.md b/docs/PUBLIC_RELEASE_AUDIT.md
index a4b0b9f..6ff839d 100644
--- a/docs/PUBLIC_RELEASE_AUDIT.md
+++ b/docs/PUBLIC_RELEASE_AUDIT.md
@@ -30,10 +30,20 @@ GitHub secret scanning, push protection, and private vulnerability reporting are
`Package.swift` declares no third-party package dependencies. Corewise uses Swift, SwiftUI, AppKit/macOS frameworks, and repository-owned source only. There is no third-party notices bundle required for the current app.
-The application icon is repository-owned and reproducibly generated by `script/generate_app_icon.swift`. `Sources/Corewise/Resources/Corewise.icns` is the packaged icon and `docs/assets/corewise-app-icon.png` is its public preview. The design-audit screenshot is produced from Corewise itself and contains no third-party artwork.
+The application icon is repository-owned and reproducibly generated by `script/generate_app_icon.swift`. `Sources/Corewise/Resources/Corewise.icns` is the packaged icon and `docs/assets/corewise-app-icon.png` is its public preview. Public screenshots are captured from Corewise itself and contain no third-party artwork. The repository social preview is composed from those repository-owned screenshots by `script/generate_social_preview.swift`; it introduces no external font, stock image, or generated-art dependency.
Contributor Covenant text is adapted from version 2.1 with attribution in `CODE_OF_CONDUCT.md`.
+## GitHub public surface
+
+- Repository visibility is public; Issues are enabled and Discussions remain disabled.
+- `corewise.dev` is the configured repository homepage and GitHub Pages enforces HTTPS for the apex and `www` domains.
+- Secret scanning, push protection, and private vulnerability reporting are enabled.
+- Bug and feature-request forms use existing `bug` and `enhancement` labels, disable blank issues, and route vulnerabilities to the private advisory form.
+- GitHub recognizes MPL-2.0 from the default branch; `SECURITY.md`, `TRADEMARKS.md`, `CONTRIBUTING.md`, the Contributor Covenant, and the pull-request template are present.
+- Protected `main` requires the ARM64 and Intel Swift/DMG checks plus resolved conversations; force-push and branch deletion are disabled.
+- Account-level verification of `corewise.dev` remains a manual profile-settings step because the CLI token intentionally does not receive the broad `admin:org` scope.
+
## Distribution boundary
Release signing certificates, private keys, App Store Connect `.p8` files, notary credentials, submission logs containing account metadata, and Keychain exports must remain outside Git and release assets.
diff --git a/docs/RELEASE_NOTES_0.1.0_BETA_2.md b/docs/RELEASE_NOTES_0.1.0_BETA_2.md
new file mode 100644
index 0000000..6600b07
--- /dev/null
+++ b/docs/RELEASE_NOTES_0.1.0_BETA_2.md
@@ -0,0 +1,47 @@
+
+
+# Corewise 0.1.0 beta 2
+
+Corewise is a free, open-source macOS 14+ utility for understanding performance, storage, and attributable local AI workloads without uploading diagnostics.
+
+**[Download the signed and notarized universal DMG](https://github.com/roccodaffuso/Corewise/releases/download/v0.1.0-beta.2/Corewise-0.1.0-universal.dmg)**
+
+## What you can explore
+
+- **Focused Check** — observe supported signals when your Mac feels slow, hot, battery-hungry, or full.
+- **Performance** — inspect CPU, memory context, swap, and live process evidence as distinct views.
+- **AI Workloads** — separate attributable app footprint, related local work, and shared hosts for supported tools such as Codex, Claude, Cursor, and Ollama.
+- **Storage** — see startup-volume headroom and start an explicit read-only analysis with optional reusable Full Disk Access.
+- **Local reports** — copy a cautious summary or Markdown report without uploading diagnostic data.
+
+
+
+  |
+  |
+
+
+
+## Beta 2 fix
+
+`⌘K` now reliably places keyboard focus in Quick Actions search before keyboard routing begins.
+
+## Privacy and limits
+
+- No account, telemetry, backend, analytics, or network collection.
+- Full Disk Access is optional and used only for a user-started read-only Storage analysis.
+- AI Workloads observes attributable local processes only. Cloud activity and logical agent counts are outside coverage.
+- Corewise does not kill processes, delete files, or claim that one number represents Mac health.
+
+## Install
+
+1. Download `Corewise-0.1.0-universal.dmg` below.
+2. Open the DMG and drag Corewise into Applications.
+3. Open Corewise normally. The app is signed with Developer ID and notarized by Apple.
+
+SHA-256:
+
+```text
+00444d9577db1b4708ab9ae6aa7a50bb55340b30bd5d978df2187ecb4d184389
+```
+
+[Website](https://corewise.dev) · [Source](https://github.com/roccodaffuso/Corewise) · [MPL-2.0](https://github.com/roccodaffuso/Corewise/blob/main/LICENSE) · [Security](https://github.com/roccodaffuso/Corewise/security/policy) · [Report an issue](https://github.com/roccodaffuso/Corewise/issues/new/choose)
diff --git a/docs/assets/corewise-ai-workloads.png b/docs/assets/corewise-ai-workloads.png
new file mode 100644
index 0000000..2106133
Binary files /dev/null and b/docs/assets/corewise-ai-workloads.png differ
diff --git a/docs/assets/corewise-overview.png b/docs/assets/corewise-overview.png
index f6425f1..f4113b7 100644
Binary files a/docs/assets/corewise-overview.png and b/docs/assets/corewise-overview.png differ
diff --git a/docs/assets/corewise-social-preview.jpg b/docs/assets/corewise-social-preview.jpg
new file mode 100644
index 0000000..30f1b5e
Binary files /dev/null and b/docs/assets/corewise-social-preview.jpg differ
diff --git a/docs/assets/corewise-storage.png b/docs/assets/corewise-storage.png
new file mode 100644
index 0000000..b4ae3d6
Binary files /dev/null and b/docs/assets/corewise-storage.png differ
diff --git a/script/generate_social_preview.swift b/script/generate_social_preview.swift
new file mode 100644
index 0000000..7053129
--- /dev/null
+++ b/script/generate_social_preview.swift
@@ -0,0 +1,206 @@
+#!/usr/bin/env swift
+// SPDX-License-Identifier: MPL-2.0
+
+import AppKit
+
+private let canvasSize = NSSize(width: 1_280, height: 640)
+
+private func color(_ hex: UInt32, alpha: CGFloat = 1) -> NSColor {
+ NSColor(
+ red: CGFloat((hex >> 16) & 0xff) / 255,
+ green: CGFloat((hex >> 8) & 0xff) / 255,
+ blue: CGFloat(hex & 0xff) / 255,
+ alpha: alpha
+ )
+}
+
+private func drawText(
+ _ text: String,
+ in rect: NSRect,
+ font: NSFont,
+ color: NSColor,
+ lineHeight: CGFloat? = nil
+) {
+ let paragraph = NSMutableParagraphStyle()
+ paragraph.lineBreakMode = .byWordWrapping
+ if let lineHeight {
+ paragraph.minimumLineHeight = lineHeight
+ paragraph.maximumLineHeight = lineHeight
+ }
+
+ text.draw(
+ in: rect,
+ withAttributes: [
+ .font: font,
+ .foregroundColor: color,
+ .paragraphStyle: paragraph,
+ ]
+ )
+}
+
+private func drawSignalField() {
+ let accent = color(0x55D6D9)
+
+ for index in 0..<6 {
+ let path = NSBezierPath()
+ path.lineWidth = index == 2 ? 2 : 1
+ let baseY = CGFloat(80 + index * 92)
+ path.move(to: NSPoint(x: 0, y: baseY))
+
+ for x in stride(from: CGFloat(0), through: canvasSize.width, by: 16) {
+ let wave = sin((x / 72) + CGFloat(index) * 0.8) * CGFloat(8 + index * 2)
+ let pulse = exp(-pow((x - 470) / 115, 2)) * sin(x / 13) * 30
+ path.line(to: NSPoint(x: x, y: baseY + wave + pulse))
+ }
+
+ accent.withAlphaComponent(index == 2 ? 0.16 : 0.055).setStroke()
+ path.stroke()
+ }
+
+ for x in stride(from: CGFloat(44), through: canvasSize.width, by: 84) {
+ color(0x9FE9E8, alpha: 0.055).setFill()
+ NSBezierPath(ovalIn: NSRect(x: x, y: 30, width: 2, height: 2)).fill()
+ }
+}
+
+private func drawBadge(_ text: String, x: CGFloat, width: CGFloat) {
+ let rect = NSRect(x: x, y: 72, width: width, height: 40)
+ let shape = NSBezierPath(roundedRect: rect, xRadius: 12, yRadius: 12)
+ color(0x55D6D9, alpha: 0.09).setFill()
+ shape.fill()
+ color(0x55D6D9, alpha: 0.24).setStroke()
+ shape.lineWidth = 1
+ shape.stroke()
+
+ drawText(
+ text,
+ in: NSRect(x: x + 15, y: 80, width: width - 30, height: 24),
+ font: .systemFont(ofSize: 15, weight: .semibold),
+ color: color(0xA9C3C2)
+ )
+}
+
+let arguments = CommandLine.arguments
+guard arguments.count == 3 else {
+ FileHandle.standardError.write(
+ Data("Usage: swift script/generate_social_preview.swift \n".utf8)
+ )
+ exit(64)
+}
+
+guard let screenshot = NSImage(contentsOfFile: arguments[1]) else {
+ FileHandle.standardError.write(Data("Unable to read overview screenshot.\n".utf8))
+ exit(66)
+}
+
+guard
+ let bitmap = NSBitmapImageRep(
+ bitmapDataPlanes: nil,
+ pixelsWide: Int(canvasSize.width),
+ pixelsHigh: Int(canvasSize.height),
+ bitsPerSample: 8,
+ samplesPerPixel: 4,
+ hasAlpha: true,
+ isPlanar: false,
+ colorSpaceName: .deviceRGB,
+ bytesPerRow: 0,
+ bitsPerPixel: 0
+ ),
+ let context = NSGraphicsContext(bitmapImageRep: bitmap)
+else {
+ FileHandle.standardError.write(Data("Unable to create social preview canvas.\n".utf8))
+ exit(70)
+}
+
+NSGraphicsContext.saveGraphicsState()
+NSGraphicsContext.current = context
+context.imageInterpolation = .high
+
+NSGradient(
+ starting: color(0x061011),
+ ending: color(0x102322)
+)?.draw(in: NSRect(origin: .zero, size: canvasSize), angle: 0)
+
+drawSignalField()
+
+let glow = NSBezierPath(ovalIn: NSRect(x: 420, y: 130, width: 620, height: 620))
+color(0x55D6D9, alpha: 0.045).setFill()
+glow.fill()
+
+let screenshotRect = NSRect(x: 590, y: 62, width: 780, height: 542)
+NSGraphicsContext.saveGraphicsState()
+let shadow = NSShadow()
+shadow.shadowColor = color(0x000000, alpha: 0.7)
+shadow.shadowBlurRadius = 32
+shadow.shadowOffset = NSSize(width: 0, height: -14)
+shadow.set()
+let screenshotFrame = NSBezierPath(roundedRect: screenshotRect, xRadius: 25, yRadius: 25)
+color(0x071011).setFill()
+screenshotFrame.fill()
+NSGraphicsContext.restoreGraphicsState()
+
+NSGraphicsContext.saveGraphicsState()
+screenshotFrame.addClip()
+screenshot.draw(
+ in: screenshotRect,
+ from: NSRect(origin: .zero, size: screenshot.size),
+ operation: .sourceOver,
+ fraction: 1,
+ respectFlipped: true,
+ hints: [.interpolation: NSImageInterpolation.high]
+)
+NSGraphicsContext.restoreGraphicsState()
+
+color(0x7AE3E3, alpha: 0.27).setStroke()
+screenshotFrame.lineWidth = 1
+screenshotFrame.stroke()
+
+let accentLine = NSBezierPath()
+accentLine.lineWidth = 3
+accentLine.move(to: NSPoint(x: 72, y: 566))
+accentLine.line(to: NSPoint(x: 156, y: 566))
+color(0x55D6D9).setStroke()
+accentLine.stroke()
+
+drawText(
+ "COREWISE / LOCAL SIGNAL CONSOLE",
+ in: NSRect(x: 72, y: 526, width: 460, height: 28),
+ font: .systemFont(ofSize: 16, weight: .bold),
+ color: color(0x80DCDD)
+)
+
+drawText(
+ "Know what your Mac is really doing.",
+ in: NSRect(x: 68, y: 278, width: 485, height: 225),
+ font: .systemFont(ofSize: 58, weight: .semibold),
+ color: color(0xF3F7F6),
+ lineHeight: 64
+)
+
+drawText(
+ "Local-first diagnostics for performance, storage, and AI workloads.",
+ in: NSRect(x: 72, y: 154, width: 440, height: 82),
+ font: .systemFont(ofSize: 22, weight: .regular),
+ color: color(0xA9B9B8),
+ lineHeight: 30
+)
+
+drawBadge("macOS 14+", x: 72, width: 125)
+drawBadge("Open source", x: 211, width: 145)
+drawBadge("Local by design", x: 370, width: 164)
+
+NSGraphicsContext.restoreGraphicsState()
+
+guard
+ let data = bitmap.representation(using: .jpeg, properties: [.compressionFactor: 0.88])
+else {
+ FileHandle.standardError.write(Data("Unable to render social preview.\n".utf8))
+ exit(70)
+}
+
+do {
+ try data.write(to: URL(fileURLWithPath: arguments[2]), options: .atomic)
+} catch {
+ FileHandle.standardError.write(Data("Unable to write social preview: \(error)\n".utf8))
+ exit(74)
+}