From f4dc3074c0ccdde4829b441262a1a62c7b230bbb Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Sat, 23 May 2026 23:06:42 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20compass/crosshair=20SVG=20decorations?= =?UTF-8?q?=20across=20landing=20page,=20fix=20email=20from=20noreply?= =?UTF-8?q?=E2=86=92hello?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CompassBg: 8 compass marks scattered across full page height with brand amber accent on inner ring, faded crosshair lines, cardinal ticks — z-index 0 (behind content) - Index.tsx: CompassBg rendered as absolute layer inside relative wrapper - email_service: EMAIL_FROM default hello@ (noreply triggers spam filters) Co-Authored-By: Claude Sonnet 4.6 --- backend/app/services/email_service.py | 2 +- src/components/landing/CompassBg.tsx | 129 ++++++++++++++++++++++++++ src/pages/Index.tsx | 4 +- 3 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 src/components/landing/CompassBg.tsx diff --git a/backend/app/services/email_service.py b/backend/app/services/email_service.py index 5f3b4ea8..fc948b4f 100644 --- a/backend/app/services/email_service.py +++ b/backend/app/services/email_service.py @@ -10,7 +10,7 @@ import httpx logger = logging.getLogger(__name__) RESEND_API_KEY = os.environ.get("RESEND_API_KEY", "") -FROM_EMAIL = os.environ.get("EMAIL_FROM", "Cohorta ") +FROM_EMAIL = os.environ.get("EMAIL_FROM", "Cohorta ") # ai-impress.com verified in Resend; avoid noreply (spam filter) APP_URL = os.environ.get("APP_URL", "http://localhost:5173") diff --git a/src/components/landing/CompassBg.tsx b/src/components/landing/CompassBg.tsx new file mode 100644 index 00000000..fd577449 --- /dev/null +++ b/src/components/landing/CompassBg.tsx @@ -0,0 +1,129 @@ +import React from 'react'; + +interface CompassMarkProps { + uid: string; + size: number; + x: string; // CSS left value + y: number; // px from top of container + opacity: number; + rotate?: number; +} + +function CompassMark({ uid, size, x, y, opacity, rotate = 0 }: CompassMarkProps) { + const cx = size / 2; + const r1 = size * 0.46; // outer ring + const r2 = size * 0.31; // middle dashed ring + const r3 = size * 0.15; // inner amber ring + const pad = size * 0.04; + + return ( + + ); +} + +// Instances scattered across the full landing page height +const MARKS = [ + { uid: 'c0', size: 580, x: '88%', y: 340, opacity: 0.08, rotate: 12 }, + { uid: 'c1', size: 300, x: '-2%', y: 720, opacity: 0.055, rotate: -7 }, + { uid: 'c2', size: 440, x: '82%', y: 1200, opacity: 0.07, rotate: 20 }, + { uid: 'c3', size: 260, x: '22%', y: 1700, opacity: 0.05, rotate: 5 }, + { uid: 'c4', size: 500, x: '10%', y: 2200, opacity: 0.065, rotate: -15 }, + { uid: 'c5', size: 340, x: '75%', y: 2700, opacity: 0.06, rotate: 8 }, + { uid: 'c6', size: 220, x: '40%', y: 3100, opacity: 0.045, rotate: -20 }, + { uid: 'c7', size: 390, x: '92%', y: 3500, opacity: 0.055, rotate: 30 }, +] as const; + +export default function CompassBg() { + return ( + + ); +} diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index c347b62c..ff7f6a20 100755 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -1,4 +1,5 @@ import Hero from '@/components/landing/Hero'; +import CompassBg from '@/components/landing/CompassBg'; import StatsBand from '@/components/landing/StatsBand'; import FeatureGrid from '@/components/landing/FeatureGrid'; import HowItWorks from '@/components/landing/HowItWorks'; @@ -12,7 +13,8 @@ import FinalCTA from '@/components/landing/FinalCTA'; export default function Index() { return ( -
+
+