916ad39176
Deploy to route.crispygoat.com / deploy (push) Failing after 3m1s
- Add MinIO/S3-compatible storage client (src/lib/storage.ts) with uploadObject, deleteObject, presigned URL helpers, and BUCKETS constant - Wire product images, brand logos, and water log photos to MinIO via the new storage client - Migrate forgot-password to Neon Auth (remove Supabase /auth/v1/recover call) - Migrate send-scheduled cron to direct Postgres + Resend (remove Supabase Edge Function proxy) - Add logoUrl to email types (OrderReceipt, Welcome, PasswordReset) and pass brand_settings.logo_url from all call sites - Update email templates to use dynamic logoUrl instead of hardcoded Supabase bucket URLs - Remove hardcoded Supabase URLs from TuxedoVideoHero, TuxedoAboutPage, TimeTrackingFieldClient; use brand_settings props + local public/ fallback - Download brand logos (3) and tuxedo-hero.mp4 (36MB) from Supabase bucket to public/ for local development - Add MinIO env vars to .env.example (endpoint, access key, secret, buckets) - Fix TimeTrackingFieldClient to destructure logoUrl and brandAccent props - Fix admin/users.ts logoUrl type (null → undefined for optional string) - Remove stale sb- cookie from wholesale-auth - Migrate tuxedo/about page to remove supabase import and use pool query for wholesale_settings lookup
39 lines
1.1 KiB
SQL
39 lines
1.1 KiB
SQL
-- Migration 126: founder_pain_log table and platform view
|
|
|
|
CREATE TABLE founder_pain_log (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
brand_id UUID REFERENCES brands(id) ON DELETE SET NULL,
|
|
severity TEXT NOT NULL CHECK (severity IN ('low', 'medium', 'high', 'critical')),
|
|
category TEXT NOT NULL, -- e.g. 'deployment', 'payment', 'data', 'operations'
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'acknowledged', 'resolved')),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
resolved_at TIMESTAMPTZ,
|
|
resolved_by UUID REFERENCES admin_users(id) ON DELETE SET NULL
|
|
);
|
|
|
|
CREATE VIEW founder_pain_log_platform AS
|
|
SELECT
|
|
fpl.id,
|
|
fpl.brand_id,
|
|
fpl.severity,
|
|
fpl.category,
|
|
fpl.title,
|
|
fpl.description,
|
|
fpl.status,
|
|
fpl.created_at,
|
|
fpl.resolved_at,
|
|
fpl.resolved_by,
|
|
b.name AS brand_name,
|
|
b.slug AS brand_slug
|
|
FROM founder_pain_log fpl
|
|
LEFT JOIN brands b ON b.id = fpl.brand_id
|
|
ORDER BY
|
|
CASE fpl.severity
|
|
WHEN 'critical' THEN 1
|
|
WHEN 'high' THEN 2
|
|
WHEN 'medium' THEN 3
|
|
WHEN 'low' THEN 4
|
|
END,
|
|
fpl.created_at DESC; |