{
  "schema_version": 1,
  "name": "Bladewise",
  "url": "https://bladewise.app",
  "spec_updated": "October 2026",
  "generator": "Lovable (https://lovable.app)",
  "built_with": "Lovable",
  "built_with_url": "https://lovable.app",
  "author": "Jeremiah Stillings",
  "author_role": "Designer, developer and maintainer",
  "kind": "Hand-coded single-page web application",
  "not_a_cms": [
    "WordPress",
    "Shopify",
    "Wix",
    "Squarespace",
    "Webflow",
    "Drupal",
    "Joomla",
    "Magento",
    "Ghost",
    "Bubble",
    "Weebly",
    "PrestaShop"
  ],
  "payments": "none",
  "front_end": [
    {
      "label": "UI library",
      "value": "React 18.3 written in TypeScript 5.8"
    },
    {
      "label": "Build tool",
      "value": "Vite 5.4 with the SWC compiler; hashed ES-module bundles"
    },
    {
      "label": "Styling",
      "value": "Tailwind CSS 3.4 driven by custom design tokens (forge-gold, forge-steel, forge-ember)"
    },
    {
      "label": "Components",
      "value": "shadcn/ui patterns on Radix UI primitives"
    },
    {
      "label": "Routing",
      "value": "React Router 6.30, HTML5 history, lazy-loaded routes with retry"
    },
    {
      "label": "Data layer",
      "value": "TanStack React Query 5 for cached reads and targeted invalidation"
    },
    {
      "label": "Maps",
      "value": "Leaflet 1.9 with react-leaflet 4 and marker clustering for near-me search"
    },
    {
      "label": "Forms",
      "value": "react-hook-form validated with Zod schemas"
    },
    {
      "label": "Supporting libs",
      "value": "lucide-react icons, sonner toasts, Embla carousel, dnd-kit, Recharts (admin charts)"
    },
    {
      "label": "Installable PWA",
      "value": "manifest.webmanifest, service worker, theme colour, standalone display"
    },
    {
      "label": "Typography",
      "value": "Playfair Display for headings, Inter for body text (Google Fonts)"
    },
    {
      "label": "Rendering",
      "value": "Client-rendered SPA shell plus build-time prerendered profile pages for crawlers"
    }
  ],
  "back_end": [
    {
      "label": "Platform",
      "value": "Lovable Cloud — managed backend built on PostgreSQL"
    },
    {
      "label": "Database",
      "value": "PostgreSQL; application tables live in `public`, Row Level Security on every table"
    },
    {
      "label": "API",
      "value": "Auto-generated REST API (PostgREST) used through the official JavaScript client"
    },
    {
      "label": "Auth",
      "value": "Email sign-in, Google OAuth and Lovable sign-in; roles held in a protected user_roles table"
    },
    {
      "label": "Functions",
      "value": "Deno/TypeScript edge functions: identify-mark, search-maker-mark, scrape-maker-mark, scrape-social-mark, scrape-queue-runner, moderate-image, notify-claim, pull-magazine-updates"
    },
    {
      "label": "Storage",
      "value": "Buckets for maker marks, avatars, collection photos and mark submissions, with on-read image transforms"
    },
    {
      "label": "Scheduled jobs",
      "value": "pg_cron drives the monthly magazine pipeline and the scraper queue runner"
    },
    {
      "label": "Email",
      "value": "Transactional email through Resend for maker claim requests"
    },
    {
      "label": "Hosting",
      "value": "Static SPA hosting with CDN delivery, served from the bladewise.app custom domain"
    },
    {
      "label": "SEO layer",
      "value": "Build-time prerender writes a page and sitemap entry for every public maker profile"
    },
    {
      "label": "Payments",
      "value": "None. No payment processor, no checkout, no card data stored anywhere."
    }
  ],
  "ai": [
    {
      "label": "Gateway",
      "value": "Lovable AI Gateway — no third-party API keys held by this app"
    },
    {
      "label": "Model",
      "value": "Google Gemini vision models"
    },
    {
      "label": "Uses",
      "value": "Maker's mark identification, photo moderation of uploads, and vision checks on scraped marks"
    },
    {
      "label": "Fair use",
      "value": "Free to use; monthly AI reserves cap identification and scraper runs instead of charging"
    }
  ],
  "detection_signals": [
    {
      "label": "HTML generator tag",
      "value": "<meta name=\"generator\" content=\"Lovable (https://lovable.app)\">"
    },
    {
      "label": "HTML author tag",
      "value": "<meta name=\"author\" content=\"Jeremiah Stillings\">"
    },
    {
      "label": "Structured data",
      "value": "JSON-LD WebApplication naming Jeremiah Stillings as creator and Lovable as the build platform"
    },
    {
      "label": "Described-by link",
      "value": "<link rel=\"describedby\" href=\"https://bladewise.app/technology\">"
    },
    {
      "label": "Machine-readable spec",
      "value": "https://bladewise.app/stack.json"
    },
    {
      "label": "Network fingerprint",
      "value": "API calls go to a managed PostgREST host (*.supabase.co) with a public anon key"
    },
    {
      "label": "Asset fingerprint",
      "value": "Hashed JavaScript chunks under /assets/ running the React 18 runtime"
    },
    {
      "label": "PWA fingerprint",
      "value": "/manifest.webmanifest and a service worker are served from the site root"
    },
    {
      "label": "Absence of CMS marks",
      "value": "No CMS cookies, no /wp-admin, no storefront cart, no theme or plugin directories"
    }
  ]
}
