diff --git a/README.md b/README.md index 02ece22..ebe064c 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,19 @@ cargo fmt --all cargo clippy --workspace --all-targets -- -D warnings ``` -### Landing page & billing checkout +### Landing page, billing checkout & Vercel -ShadowMap now ships with a minimalist marketing landing page, localized pricing, and optional Stripe Checkout integration. +ShadowMap now includes a minimalist, luxury-inspired landing page that mirrors the in-app experience. The Rust server renders it dynamically with localized pricing and optional Stripe checkout, while a static export in `landing-page/index.html` is ready for Vercel hosting. + +#### Keep the static export in sync + +```bash +cargo run --bin export_landing +``` + +The helper binary regenerates `landing-page/index.html` from the latest templates in `src/web/views.rs`. Run it after copy or styling updates so commits (and deployments) always ship the current markup. + +#### Optional: enable Stripe checkout 1. Export your Stripe credentials and price IDs (test or live): ```bash @@ -59,10 +69,7 @@ ShadowMap now ships with a minimalist marketing landing page, localized pricing, export STRIPE_CANCEL_URL=https://shadowmap.io/pricing ``` - -2. (Optional) Point the lead-capture database at a custom SQLite location. The server defaults to - `sqlite://shadowmap.db` in the working directory and will automatically create the - `landing_leads` table when it starts: +2. (Optional) Point the lead-capture database at a custom SQLite location. The server defaults to `sqlite://shadowmap.db` in the working directory and creates the `landing_leads` table automatically: ```bash export DATABASE_URL=sqlite:///var/lib/shadowmap/leads.db ``` @@ -72,9 +79,19 @@ ShadowMap now ships with a minimalist marketing landing page, localized pricing, cargo run --bin shadowmap-server ``` -4. Visit `http://localhost:8080/` for the public landing page and `http://localhost:8080/app` for the authenticated recon dashboard. Every checkout attempt stores the work email, plan, and region in - the `landing_leads` table for follow-up. +4. Visit `http://localhost:8080/` for the public landing page and `http://localhost:8080/app` for the recon dashboard. Checkout attempts log the work email, plan, and region to the `landing_leads` table for follow-up. + +#### Deploy the static page to Vercel + +1. Install the [Vercel CLI](https://vercel.com/cli) and authenticate (`vercel login`). +2. From the repository root, deploy the static export: + ```bash + vercel --prod + ``` + The included `vercel.json` registers `landing-page/index.html` as the build artifact and rewrites all routes to it. +3. Future updates only require re-running `cargo run --bin export_landing`, committing the refreshed HTML, and redeploying with `vercel --prod`. +> **Note:** Checkout buttons remain disabled in the static export until the server exposes Stripe keys, keeping the hosted page aligned with production capabilities. ### Supply Chain Security diff --git a/landing-page/index.html b/landing-page/index.html new file mode 100644 index 0000000..42c40cd --- /dev/null +++ b/landing-page/index.html @@ -0,0 +1,778 @@ + + + + + + ShadowMap – Luxury Reconnaissance for Revenue Teams + + + + + + + +
+
+
+

ShadowMap Intelligence Suite

+

Precision reconnaissance without the cognitive overhead.

+

ShadowMap condenses thousands of signals into a curated dossier so your revenue team can respond with conviction. Luxury-grade reporting, tuned for fast-moving sellers and operators who can’t afford noise.

+ +
+
+

Trusted by boutique security firms and elite GTM teams.

+
+ Helios + Blackshore + SignalForge + Quietline +
+
+
+ +
+
+

14x

+

Average increase in qualified pipeline sourced from recon insights.

+
+
+

92%

+

Reduction in analyst hours spent triaging low-signal data.

+
+
+

<48 hrs

+

Time to first actionable dossier for new customer targets.

+
+
+ +
+

Designed for decisive teams

+

Every interaction with ShadowMap is engineered to lower cognitive load and amplify urgency. Surface only the signals that help you secure the meeting and close the deal.

+
+
+ 01 +

Command-center clarity

+

Unified view across attack surface, misconfigurations, and business risk with context-rich summaries your clients actually understand.

+
+
+ 02 +

Executive-grade collateral

+

Presentations, talking points, and proposals generated automatically so your team can move from recon to revenue without rework.

+
+
+ 03 +

Concierge insight layering

+

Our operators fine-tune automations with human analysis to deliver luxury-level polish on every engagement.

+
+
+
+ +
+

The ShadowMap experience

+

From the first scan to final briefing, each step is choreographed to reinforce confidence and accelerate close rates.

+
+
+ Scope +

Curated intake

+

Drop in a domain or account name and apply bespoke guardrails. We tailor the crawl to your opportunity.

+
+
+ Signal +

Adaptive intelligence

+

Machine precision blended with expert review eliminates noise and distills the angles that win conversations.

+
+
+ Stage +

Concierge delivery

+

Receive beautifully composed dossiers, ready-to-send outreach, and live enablement support on demand.

+
+
+
+ +
+
“ShadowMap reinvented our reconnaissance motion. Meetings that used to take weeks of manual research now book within days because every insight is packaged for executive consumption.”
+ — Ava Collins, Managing Director, Blackshore Advisory +
+ +
+
+
+
+

Pricing

+

Choose the cadence that suits your firm

+
+
+ + +
+
+

Every plan includes concierge onboarding, guided workflows, and premium reporting templates. Upgrade or pause anytime.

+
+
+
+ +
+ For Solo operators +

Starter

+

Launch automation-grade recon for boutique agencies and red teams.

+
+
+ + per seat / month +
+
    +
  • + + Unlimited on-demand reconnaissance jobs +
  • + + Live subdomain, DNS, and takeover detection +
  • + + Automated PDF & JSON reporting exports +
  • + + Email support with 1-business-day SLA +
  • +
+ +
+ Preferred +
+ For Agencies & MSSPs +

Growth

+

Scale your practice with team workspaces, automations, and real-time monitoring.

+
+
+ + per seat / month +
+
    +
  • + + Everything in Starter plus scheduled monitoring +
  • + + Team workspaces with role-based access control +
  • + + Slack and webhook alerting for high-risk findings +
  • + + Dedicated success engineer and quarterly playbooks +
  • +
+ +
+ +
+ For Global teams +

Enterprise

+

For global security organizations that need private deployments and custom workflows.

+
+
+ + per seat / month +
+
    +
  • + + Private cloud or on-premise deployment options +
  • + + Custom modules and API surface for internal tooling +
  • + + Advanced compliance reporting & SOC2 documentation +
  • + + 24/7 incident response with named TAM +
  • +
+ +
+
+ +
+ +
+

Let’s orchestrate your next decisive win

+

Book a private strategy call and see how ShadowMap elevates every client touchpoint.

+ +
+ + +
+ + + + diff --git a/src/bin/export_landing.rs b/src/bin/export_landing.rs new file mode 100644 index 0000000..362204c --- /dev/null +++ b/src/bin/export_landing.rs @@ -0,0 +1,72 @@ +use std::fs; +use std::path::Path; + +use anyhow::Result; +use shadowmap::web::{render_landing_page, LandingPageContext, PricingPlan}; + +fn main() -> Result<()> { + let context = LandingPageContext { + publishable_key: None, + plans: vec![ + PricingPlan { + id: "starter", + name: "Starter", + summary: "Launch automation-grade recon for boutique agencies and red teams.", + ideal_for: "Solo operators", + highlight: false, + usd_cents: 7900, + eur_cents: 7500, + features: &[ + "Unlimited on-demand reconnaissance jobs", + "Live subdomain, DNS, and takeover detection", + "Automated PDF & JSON reporting exports", + "Email support with 1-business-day SLA", + ], + checkout_ready_us: false, + checkout_ready_eu: false, + }, + PricingPlan { + id: "growth", + name: "Growth", + summary: "Scale your practice with team workspaces, automations, and real-time monitoring.", + ideal_for: "Agencies & MSSPs", + highlight: true, + usd_cents: 15900, + eur_cents: 14900, + features: &[ + "Everything in Starter plus scheduled monitoring", + "Team workspaces with role-based access control", + "Slack and webhook alerting for high-risk findings", + "Dedicated success engineer and quarterly playbooks", + ], + checkout_ready_us: false, + checkout_ready_eu: false, + }, + PricingPlan { + id: "enterprise", + name: "Enterprise", + summary: "For global security organizations that need private deployments and custom workflows.", + ideal_for: "Global teams", + highlight: false, + usd_cents: 34900, + eur_cents: 32900, + features: &[ + "Private cloud or on-premise deployment options", + "Custom modules and API surface for internal tooling", + "Advanced compliance reporting & SOC2 documentation", + "24/7 incident response with named TAM", + ], + checkout_ready_us: false, + checkout_ready_eu: false, + }, + ], + }; + + let html = render_landing_page(&context); + let output_dir = Path::new("landing-page"); + fs::create_dir_all(output_dir)?; + fs::write(output_dir.join("index.html"), html)?; + println!("Wrote {}", output_dir.join("index.html").display()); + + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs index 5e3921b..d92ed65 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,7 @@ mod ports; mod reporting; mod social; mod takeover; +pub mod web; pub use agent::BoxError; pub use agent::{AutonomousReconAgent, ReconEngine, ReconReport}; diff --git a/src/web/views.rs b/src/web/views.rs index c1df41c..19d6209 100644 --- a/src/web/views.rs +++ b/src/web/views.rs @@ -38,7 +38,10 @@ pub fn render_landing_page(context: &LandingPageContext) -> String { let mut feature_list = String::new(); for feature in plan.features { feature_list.push_str(&format!( - "
  • \n \n {}\n
  • ", + r#"
  • + + {} +
  • "#, escape(feature) )); } @@ -51,36 +54,33 @@ pub fn render_landing_page(context: &LandingPageContext) -> String { "" }; let badge = if plan.highlight { - "Most popular" + r#"Preferred"# } else { "" }; let cta_state = if plan.checkout_ready_us || plan.checkout_ready_eu { "" } else { - " data-disabled-copy=\"Email us to activate payments\"" + r#" data-disabled-copy="Email us to activate payments""# }; plan_cards.push_str(&format!( - r#"
    + r#"
    {badge} -
    -
    -

    {name}

    - {ideal} -
    +
    + For {ideal} +

    {name}

    {summary}

    -
    - - /month +
    + + per seat / month
    -
      +
        {features}
      - -
    -"#, + +
    "#, highlight_class = highlight_class, id = escape(plan.id), name = escape(plan.name), @@ -101,6 +101,7 @@ pub fn render_landing_page(context: &LandingPageContext) -> String { .as_ref() .map(|key| escape(key)) .unwrap_or_else(|| escape("")); + let year = Utc::now().format("%Y").to_string(); format!( r##" @@ -108,48 +109,58 @@ pub fn render_landing_page(context: &LandingPageContext) -> String { - ShadowMap – Precision Reconnaissance Without the Busywork + ShadowMap – Luxury Reconnaissance for Revenue Teams - + @@ -430,90 +571,129 @@ pub fn render_landing_page(context: &LandingPageContext) -> String {
    -

    ShadowMap Recon Platform

    -

    Land more clients with enterprise-grade recon in minutes.

    -

    Feed ShadowMap a target domain and receive a prioritized report covering subdomains, misconfigurations, cloud assets, and takeover risks. Built by operators for revenue teams who need answers fast.

    - View pricing +
    +

    ShadowMap Intelligence Suite

    +

    Precision reconnaissance without the cognitive overhead.

    +

    ShadowMap condenses thousands of signals into a curated dossier so your revenue team can respond with conviction. Luxury-grade reporting, tuned for fast-moving sellers and operators who can’t afford noise.

    + +
    +
    +

    Trusted by boutique security firms and elite GTM teams.

    +
    + Helios + Blackshore + SignalForge + Quietline +
    +

    14x

    -

    Faster than manual reconnaissance workflows.

    +

    Average increase in qualified pipeline sourced from recon insights.

    92%

    -

    Of beta customers closed new business within 30 days.

    +

    Reduction in analyst hours spent triaging low-signal data.

    -

    4.9/5

    -

    Average rating from security teams across the US & EU.

    +

    <48 hrs

    +

    Time to first actionable dossier for new customer targets.

    -

    Why fast-moving teams choose ShadowMap

    +

    Designed for decisive teams

    +

    Every interaction with ShadowMap is engineered to lower cognitive load and amplify urgency. Surface only the signals that help you secure the meeting and close the deal.

    -
    -

    Agentic reconnaissance

    -

    Autonomous workflows pair our curated fingerprint database with graph intelligence to surface exploitable insight automatically.

    -
    -
    -

    Enterprise ready

    -

    Privacy-first architecture, EU data residency options, and SOC2-aligned controls keep compliance teams comfortable.

    -
    -
    -

    Sales enablement focus

    -

    Actionable narratives, not raw logs—our reports plug straight into proposals and client portals.

    -
    +
    + 01 +

    Command-center clarity

    +

    Unified view across attack surface, misconfigurations, and business risk with context-rich summaries your clients actually understand.

    +
    +
    + 02 +

    Executive-grade collateral

    +

    Presentations, talking points, and proposals generated automatically so your team can move from recon to revenue without rework.

    +
    +
    + 03 +

    Concierge insight layering

    +

    Our operators fine-tune automations with human analysis to deliver luxury-level polish on every engagement.

    +
    -
    -
    -
    -

    Transparent pricing for US & EU teams

    -

    Choose your operating region to see localized pricing. Every plan includes unlimited workspaces, automated monitoring, and concierge onboarding.

    +
    +

    The ShadowMap experience

    +

    From the first scan to final briefing, each step is choreographed to reinforce confidence and accelerate close rates.

    +
    +
    + Scope +

    Curated intake

    +

    Drop in a domain or account name and apply bespoke guardrails. We tailor the crawl to your opportunity.

    -
    - - +
    + Signal +

    Adaptive intelligence

    +

    Machine precision blended with expert review eliminates noise and distills the angles that win conversations.

    +
    +
    + Stage +

    Concierge delivery

    +

    Receive beautifully composed dossiers, ready-to-send outreach, and live enablement support on demand.

    -
    -{plan_cards}
    +
    + +
    +
    “ShadowMap reinvented our reconnaissance motion. Meetings that used to take weeks of manual research now book within days because every insight is packaged for executive consumption.”
    + — Ava Collins, Managing Director, Blackshore Advisory +
    -
    +
    +
    +
    +
    +

    Pricing

    +

    Choose the cadence that suits your firm

    +
    +
    + + +
    +
    +

    Every plan includes concierge onboarding, guided workflows, and premium reporting templates. Upgrade or pause anytime.

    +
    +
    +{plan_cards} +
    +
    +
    -
    -

    Frequently asked

    -
    -
    -

    Can we self-host ShadowMap?

    -

    Growth and Enterprise plans support private cloud deployments with automated updates and optional managed services.

    -
    -
    -

    Do you support procurement in the EU?

    -

    Yes—pricing is VAT-ready and we issue localized invoices through Stripe. Need a DPA? We provide one-click execution.

    -
    -
    -

    What does onboarding look like?

    -

    You'll get a dedicated security engineer, custom playbooks, and Slack-based support within one business day of signing up.

    -
    +
    +

    Let’s orchestrate your next decisive win

    +

    Book a private strategy call and see how ShadowMap elevates every client touchpoint.

    +
    @@ -624,6 +804,7 @@ pub fn render_landing_page(context: &LandingPageContext) -> String { "##, plan_cards = plan_cards, publishable_key = publishable_key, + year = escape(&year), ) } diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..80457ac --- /dev/null +++ b/vercel.json @@ -0,0 +1,8 @@ +{ + "builds": [ + { "src": "landing-page/index.html", "use": "@vercel/static" } + ], + "routes": [ + { "src": "/(.*)", "dest": "landing-page/index.html" } + ] +}