@@ -77,7 +84,8 @@ export function ViewRuleModal({
Target:
- {rule.targetCollection}{rule.targetDocument ? `/${rule.targetDocument}` : ""}
+ {rule.targetCollection}
+ {rule.targetDocument ? `/${rule.targetDocument}` : ""}
)}
@@ -86,13 +94,11 @@ export function ViewRuleModal({
{/* Code */}
diff --git a/ui/assets/logo.svg b/ui/assets/logo.svg
new file mode 100644
index 0000000..d432de3
--- /dev/null
+++ b/ui/assets/logo.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/ui/index.html b/ui/index.html
index b1e199b..2d463ca 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/ui/package-lock.json b/ui/package-lock.json
index 7bb6fc3..d8e302b 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -3007,6 +3007,7 @@
"integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -3018,6 +3019,7 @@
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"peerDependencies": {
"@types/react": "^18.0.0"
}
@@ -3077,6 +3079,7 @@
"integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.38.0",
"@typescript-eslint/types": "8.38.0",
@@ -3309,6 +3312,7 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -3513,6 +3517,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001726",
"electron-to-chromium": "^1.5.173",
@@ -3846,6 +3851,7 @@
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
"license": "MIT",
+ "peer": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
@@ -3927,7 +3933,8 @@
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
"integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/embla-carousel-react": {
"version": "8.6.0",
@@ -4025,6 +4032,7 @@
"integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -5612,6 +5620,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -5798,6 +5807,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -5824,6 +5834,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@@ -5837,6 +5848,7 @@
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz",
"integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.0.0"
},
@@ -6390,6 +6402,7 @@
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -6520,6 +6533,7 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -6698,6 +6712,7 @@
"integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.43",
diff --git a/ui/src/assets/hero-console.jpg b/ui/src/assets/hero-console.jpg
deleted file mode 100644
index e1156e8..0000000
Binary files a/ui/src/assets/hero-console.jpg and /dev/null differ
diff --git a/ui/src/components/Logo.tsx b/ui/src/components/Logo.tsx
new file mode 100644
index 0000000..f1f2fec
--- /dev/null
+++ b/ui/src/components/Logo.tsx
@@ -0,0 +1,90 @@
+interface LogoProps {
+ /**
+ * Size variant for the logo
+ * sm: 24px (6 units) - sidebar/compact
+ * md: 32px (8 units) - default
+ * lg: 40px (10 units) - hero/large sections
+ */
+ size?: "sm" | "md" | "lg";
+ /**
+ * Additional CSS classes for custom styling
+ */
+ className?: string;
+ /**
+ * Optional prop for future use (currently unused but referenced in ProjectLayout)
+ */
+ showText?: boolean;
+}
+
+export function Logo({ size = "sm", className = "", showText }: LogoProps) {
+ const sizeClasses = {
+ sm: "h-6 w-6",
+ md: "h-8 w-8",
+ lg: "h-10 w-10",
+ };
+
+ return (
+
+ {/* SVG Logo - Responsive and scalable */}
+
+
+ {/* Optional text branding - for future use */}
+ {showText && (
+
+ Triggr
+
+ )}
+
+ );
+}
diff --git a/ui/src/components/footer.tsx b/ui/src/components/footer.tsx
deleted file mode 100644
index 7de2526..0000000
--- a/ui/src/components/footer.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-export function Footer() {
- return (
-
- );
-}
diff --git a/ui/src/components/landing/code-example-section.tsx b/ui/src/components/landing/code-example-section.tsx
deleted file mode 100644
index a2205d9..0000000
--- a/ui/src/components/landing/code-example-section.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { motion } from "framer-motion";
-import { Card } from "@/components/ui/card";
-
-export const CodeExampleSection = () => {
- const codeExample = `// Subscribe to contract events in real-time
-import { triggr } from '@triggr/sdk';
-
-const stream = triggr
- .from('ethereum')
- .contract('0x...')
- .on('Transfer', (event) => {
- console.log(\`New transfer: \${event.amount}\`);
- // React instantly to blockchain events
- });
-
-// Query historical data with SQL-like syntax
-const transfers = await triggr
- .query('ethereum')
- .select('*')
- .from('Transfer')
- .where('amount > 1000')
- .orderBy('timestamp', 'desc')
- .limit(100);`;
-
- return (
-
-
-
-
-
- Simple API,
-
-
- Powerful Results
-
-
-
- Write clean, maintainable code that reacts to blockchain events in real-time.
- No complex infrastructure, no boilerplate—just pure developer productivity.
-
-
- {[
- "Type-safe SDK with full IntelliSense support",
- "Real-time subscriptions with automatic reconnection",
- "SQL-like queries for complex data retrieval",
- "Built-in caching and optimization",
- ].map((item, index) => (
-
-
- {item}
-
- ))}
-
-
-
-
-
-
-
-
- {codeExample}
-
-
-
-
-
-
-
- );
-};
\ No newline at end of file
diff --git a/ui/src/components/landing/cta-section.tsx b/ui/src/components/landing/cta-section.tsx
deleted file mode 100644
index 3300f2c..0000000
--- a/ui/src/components/landing/cta-section.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { motion } from "framer-motion";
-import { Button } from "@/components/ui/button";
-import { ArrowRight, Sparkles } from "lucide-react";
-
-export const CtaSection = () => {
- return (
-
- {/* Enhanced background effects */}
-
-
-
-
-
-
-
-
- Start Building Today
-
-
-
- Ready to Build the Future
-
-
- of Web3?
-
-
-
-
- Join thousands of developers building reactive, real-time blockchain applications with Triggr.
-
-
-
-
-
-
-
-
- No credit card required • 14-day free trial • Cancel anytime
-
-
-
-
- );
-};
\ No newline at end of file
diff --git a/ui/src/components/landing/features-section.tsx b/ui/src/components/landing/features-section.tsx
deleted file mode 100644
index ffc0d14..0000000
--- a/ui/src/components/landing/features-section.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { motion } from "framer-motion";
-import { Zap, Database, Shield, GitBranch, Layers, Radio } from "lucide-react";
-import { Card, CardContent } from "@/components/ui/card";
-
-const features = [
- {
- icon: Radio,
- title: "Real-time Reactivity",
- description: "Subscribe to blockchain events and react instantly. No polling, no delays—just pure real-time data streams.",
- },
- {
- icon: Database,
- title: "Smart Contract Indexing",
- description: "Automatically index and query smart contract events with a SQL-like interface that developers love.",
- },
- {
- icon: Zap,
- title: "Lightning Fast",
- description: "Sub-100ms response times powered by optimized indexing and intelligent caching strategies.",
- },
- {
- icon: Shield,
- title: "Enterprise Grade",
- description: "Built for production with 99.9% uptime, automatic failovers, and comprehensive monitoring.",
- },
- {
- icon: GitBranch,
- title: "Multi-chain Support",
- description: "Connect to Ethereum, Polygon, Polkadot, and more. One API for all your blockchain data needs.",
- },
- {
- icon: Layers,
- title: "Developer First",
- description: "Simple SDKs, extensive documentation, and powerful tooling to help you ship faster.",
- },
-];
-
-export const FeaturesSection = () => {
- return (
-
-
-
-
- Everything You Need to Build
- Reactive dApps
-
-
- Powerful features that make building blockchain applications a breeze
-
-
-
-
- {features.map((feature, index) => (
-
-
-
-
-
-
- {feature.title}
- {feature.description}
-
-
-
- ))}
-
-
-
- );
-};
\ No newline at end of file
diff --git a/ui/src/components/landing/landing-page.tsx b/ui/src/components/landing/landing-page.tsx
index 9f3cea2..b06989d 100644
--- a/ui/src/components/landing/landing-page.tsx
+++ b/ui/src/components/landing/landing-page.tsx
@@ -1,5 +1,6 @@
import { Button } from "@/components/ui/button";
import { HeroSection } from "./hero-section";
+import { Logo } from "@/components/Logo";
import { Database } from "lucide-react";
import { useEffect } from "react";
@@ -14,11 +15,10 @@ export const LandingPage = () => {