← back to Small Business Builder

migrations/002_website_analysis.sql

40 lines

-- migration 002 — website-analysis feature
-- Adds storage for the Website Analysis flow (entry → 3-mockup picker → full rebuild).

BEGIN;

CREATE TABLE IF NOT EXISTS website_analyses (
  id BIGSERIAL PRIMARY KEY,
  slug TEXT UNIQUE NOT NULL,
  business_id BIGINT REFERENCES businesses(id) ON DELETE SET NULL,
  url TEXT NOT NULL,
  ig_handle TEXT,
  vertical TEXT,                            -- salon, restaurant, lawyer, etc.
  user_screenshot_path TEXT,                -- /uploads/wa/{slug}/orig.jpg (optional, deferred)
  status TEXT NOT NULL DEFAULT 'new'
         CHECK (status IN ('new','analyzing','ready','error')),
  selected_mockup_id TEXT,                  -- which of the 3 the user picked
  summary_json JSONB,                       -- {grade, top_3_issues, vertical}
  meta_json JSONB,                          -- raw audit blob, lazily populated
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_wa_slug   ON website_analyses(slug);
CREATE INDEX IF NOT EXISTS idx_wa_status ON website_analyses(status);
CREATE INDEX IF NOT EXISTS idx_wa_biz    ON website_analyses(business_id);

CREATE TABLE IF NOT EXISTS website_analysis_mockups (
  id BIGSERIAL PRIMARY KEY,
  analysis_id BIGINT REFERENCES website_analyses(id) ON DELETE CASCADE,
  mockup_id TEXT NOT NULL,                  -- e.g. '01-editorial'
  title TEXT NOT NULL,
  theme TEXT NOT NULL,                      -- editorial, neon, brutalist, minimalist
  preview_html TEXT,                        -- inlined single-file HTML
  generated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_wam_analysis ON website_analysis_mockups(analysis_id);
CREATE UNIQUE INDEX IF NOT EXISTS idx_wam_analysis_mockup
  ON website_analysis_mockups(analysis_id, mockup_id);

COMMIT;