diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css
index a2dc41ec..c02943fb 100644
--- a/apps/web/src/app/globals.css
+++ b/apps/web/src/app/globals.css
@@ -1,26 +1,34 @@
@import "tailwindcss";
:root {
- --background: #ffffff;
- --foreground: #171717;
+ --background: #0a0a0f;
+ --foreground: #f0f0f5;
+ --accent: #7c5cfc;
+ --accent-light: #a78bfa;
+ --muted: #3f3f50;
+ --card: #13131f;
+ --border: #1e1e2e;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
+ --color-accent: var(--accent);
+ --color-accent-light: var(--accent-light);
+ --color-muted: var(--muted);
+ --color-card: var(--card);
+ --color-border: var(--border);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
-@media (prefers-color-scheme: dark) {
- :root {
- --background: #0a0a0a;
- --foreground: #ededed;
- }
-}
-
body {
background: var(--background);
color: var(--foreground);
- font-family: Arial, Helvetica, sans-serif;
+ font-family: var(--font-sans), Arial, Helvetica, sans-serif;
+}
+
+/* Smooth scrolling */
+html {
+ scroll-behavior: smooth;
}
diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx
index 976eb90d..5f069c49 100644
--- a/apps/web/src/app/layout.tsx
+++ b/apps/web/src/app/layout.tsx
@@ -13,8 +13,9 @@ const geistMono = Geist_Mono({
});
export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
+ title: "Clicked โ Web3 Social Messaging",
+ description:
+ "Chat, send tokens, and fund ideas โ all in one place. A decentralized messaging platform built on Stellar.",
};
export default function RootLayout({
diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx
index 3f36f7c5..b01f2823 100644
--- a/apps/web/src/app/page.tsx
+++ b/apps/web/src/app/page.tsx
@@ -1,65 +1,23 @@
-import Image from "next/image";
+import { Navbar } from "@/components/landing/Navbar";
+import { Hero } from "@/components/landing/Hero";
+import { Features } from "@/components/landing/Features";
+import { HowItWorks } from "@/components/landing/HowItWorks";
+import { TechStack } from "@/components/landing/TechStack";
+import { CTA } from "@/components/landing/CTA";
+import { Footer } from "@/components/landing/Footer";
-export default function Home() {
+export default function LandingPage() {
return (
-
-
-
-
-
- To get started, edit the page.tsx file.
-
-
- Looking for a starting point or more instructions? Head over to{" "}
-
- Templates
- {" "}
- or the{" "}
-
- Learning
- {" "}
- center.
-
-
-
+ <>
+
+
+
+
+
+
+
-
+
+ >
);
}
diff --git a/apps/web/src/components/landing/CTA.tsx b/apps/web/src/components/landing/CTA.tsx
new file mode 100644
index 00000000..42bf27a5
--- /dev/null
+++ b/apps/web/src/components/landing/CTA.tsx
@@ -0,0 +1,28 @@
+export function CTA() {
+ return (
+
+
+
+
+
+ Ready to coordinate on-chain?
+
+
+ Connect your Stellar wallet and start building with your community.
+
+
+ Launch App
+
+
+
+
+ );
+}
diff --git a/apps/web/src/components/landing/Features.tsx b/apps/web/src/components/landing/Features.tsx
new file mode 100644
index 00000000..2fccd962
--- /dev/null
+++ b/apps/web/src/components/landing/Features.tsx
@@ -0,0 +1,66 @@
+const FEATURES = [
+ {
+ icon: "๐ฌ",
+ title: "Wallet-to-Wallet Messaging",
+ description:
+ "Chat directly with any Stellar wallet address. No email, no username โ just your public key.",
+ },
+ {
+ icon: "๐ธ",
+ title: "Send Tokens in Chat",
+ description:
+ "Transfer XLM or any Soroban token inside a conversation. Payments feel as natural as sending a message.",
+ },
+ {
+ icon: "๐ฆ",
+ title: "Group Treasuries",
+ description:
+ "Communities pool funds into a shared on-chain treasury. Transparent, permissionless, always auditable.",
+ },
+ {
+ icon: "๐",
+ title: "Community Proposals",
+ description:
+ "Submit funding ideas and let the group decide. Proposals live on-chain โ no back-room decisions.",
+ },
+ {
+ icon: "๐ณ๏ธ",
+ title: "DAO-style Voting",
+ description:
+ "Lightweight on-chain voting tied to your wallet stake. One address, one voice โ or weighted by contribution.",
+ },
+ {
+ icon: "๐ค",
+ title: "AI-powered Insights",
+ description:
+ "Fraud detection, proposal summarisation, and smart assistants baked into the conversation layer.",
+ },
+];
+
+export function Features() {
+ return (
+
+
+
+ Everything in one place
+
+
+ No more switching between Telegram, Gnosis Safe, and Snapshot.
+
+
+
+
+ {FEATURES.map((f) => (
+
+
{f.icon}
+
{f.title}
+
{f.description}
+
+ ))}
+
+
+ );
+}
diff --git a/apps/web/src/components/landing/Footer.tsx b/apps/web/src/components/landing/Footer.tsx
new file mode 100644
index 00000000..6ab2cf7b
--- /dev/null
+++ b/apps/web/src/components/landing/Footer.tsx
@@ -0,0 +1,30 @@
+export function Footer() {
+ return (
+
+
+
+ clicked. โ Web3 Social Messaging
+
+
+
+
+ );
+}
diff --git a/apps/web/src/components/landing/Hero.tsx b/apps/web/src/components/landing/Hero.tsx
new file mode 100644
index 00000000..67ad69a1
--- /dev/null
+++ b/apps/web/src/components/landing/Hero.tsx
@@ -0,0 +1,98 @@
+export function Hero() {
+ return (
+
+ {/* Background glow */}
+
+
+
+
+
+ Built on Stellar ยท Powered by Soroban
+
+
+
+ Chat. Pay.{" "}
+
+ Build together.
+
+
+
+
+ Clicked is a decentralized messaging platform where you can send tokens
+ as easily as messages, fund community ideas, and govern shared
+ treasuries โ all in one place.
+
+
+
+
+
+ {/* Mock chat preview */}
+
+
+
+
+
+
builders-dao
+
4 members
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function ChatBubble({
+ align,
+ name,
+ message,
+ highlight,
+}: {
+ align: "left" | "right";
+ name: string;
+ message: string;
+ highlight?: boolean;
+}) {
+ return (
+
+
+
+
{name}
+
+ {message}
+
+
+
+ );
+}
diff --git a/apps/web/src/components/landing/HowItWorks.tsx b/apps/web/src/components/landing/HowItWorks.tsx
new file mode 100644
index 00000000..84d1d0a5
--- /dev/null
+++ b/apps/web/src/components/landing/HowItWorks.tsx
@@ -0,0 +1,58 @@
+const STEPS = [
+ {
+ step: "01",
+ title: "Connect your wallet",
+ description:
+ "Sign in with your Freighter wallet. No account creation โ your Stellar address is your identity.",
+ },
+ {
+ step: "02",
+ title: "Start or join a conversation",
+ description:
+ "Open a DM with any wallet address or join a group. Conversations are end-to-end linked to on-chain identities.",
+ },
+ {
+ step: "03",
+ title: "Send tokens inside the chat",
+ description:
+ "Type a transfer command or tap the payment button. Tokens move on-chain; the receipt appears inline in the thread.",
+ },
+ {
+ step: "04",
+ title: "Fund ideas together",
+ description:
+ "Create a proposal, let the group vote, and release treasury funds โ all without leaving the conversation.",
+ },
+];
+
+export function HowItWorks() {
+ return (
+
+
+
+
+ How it works
+
+
+ From wallet connect to on-chain governance in four steps.
+
+
+
+
+ {STEPS.map((s, i) => (
+
+
+
{s.step}
+ {i < STEPS.length - 1 && (
+
+ )}
+
+
{s.title}
+
{s.description}
+
+ ))}
+
+
+
+ );
+}
diff --git a/apps/web/src/components/landing/Navbar.tsx b/apps/web/src/components/landing/Navbar.tsx
new file mode 100644
index 00000000..e8343277
--- /dev/null
+++ b/apps/web/src/components/landing/Navbar.tsx
@@ -0,0 +1,22 @@
+export function Navbar() {
+ return (
+
+
+
+ );
+}
diff --git a/apps/web/src/components/landing/TechStack.tsx b/apps/web/src/components/landing/TechStack.tsx
new file mode 100644
index 00000000..17fa66b3
--- /dev/null
+++ b/apps/web/src/components/landing/TechStack.tsx
@@ -0,0 +1,49 @@
+const STACK = [
+ { label: "Next.js 16", category: "Frontend" },
+ { label: "TailwindCSS v4", category: "Frontend" },
+ { label: "Express 5", category: "Backend" },
+ { label: "Socket.IO", category: "Backend" },
+ { label: "PostgreSQL", category: "Backend" },
+ { label: "Redis", category: "Backend" },
+ { label: "Soroban", category: "Blockchain" },
+ { label: "Stellar SDK", category: "Blockchain" },
+ { label: "XMTP", category: "Messaging" },
+ { label: "FastAPI", category: "AI" },
+ { label: "Weaviate", category: "AI" },
+ { label: "Turborepo", category: "Infra" },
+];
+
+const CATEGORY_COLORS: Record = {
+ Frontend: "bg-blue-500/10 text-blue-400 border-blue-500/20",
+ Backend: "bg-green-500/10 text-green-400 border-green-500/20",
+ Blockchain: "bg-purple-500/10 text-purple-400 border-purple-500/20",
+ Messaging: "bg-yellow-500/10 text-yellow-400 border-yellow-500/20",
+ AI: "bg-pink-500/10 text-pink-400 border-pink-500/20",
+ Infra: "bg-orange-500/10 text-orange-400 border-orange-500/20",
+};
+
+export function TechStack() {
+ return (
+
+
+
+ Built on proven technology
+
+
+ A modern monorepo combining Web2 developer experience with Web3 ownership.
+
+
+
+
+ {STACK.map((item) => (
+
+ {item.label}
+
+ ))}
+
+
+ );
+}
diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock
index 7cad1530..ee9549d7 100644
--- a/contracts/Cargo.lock
+++ b/contracts/Cargo.lock
@@ -631,13 +631,6 @@ version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
-[[package]]
-name = "hello-world"
-version = "0.0.0"
-dependencies = [
- "soroban-sdk",
-]
-
[[package]]
name = "hex"
version = "0.4.3"
diff --git a/contracts/contracts/hello-world/Cargo.toml b/contracts/contracts/hello-world/Cargo.toml
deleted file mode 100644
index c3e84a9f..00000000
--- a/contracts/contracts/hello-world/Cargo.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[package]
-name = "hello-world"
-version = "0.0.0"
-edition = "2021"
-publish = false
-
-[lib]
-crate-type = ["lib", "cdylib"]
-doctest = false
-
-[dependencies]
-soroban-sdk = { workspace = true }
-
-[dev-dependencies]
-soroban-sdk = { workspace = true, features = ["testutils"] }
diff --git a/contracts/contracts/hello-world/Makefile b/contracts/contracts/hello-world/Makefile
deleted file mode 100644
index b9719346..00000000
--- a/contracts/contracts/hello-world/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-default: build
-
-all: test
-
-test: build
- cargo test
-
-build:
- stellar contract build
- @ls -l target/wasm32v1-none/release/*.wasm
-
-fmt:
- cargo fmt --all
-
-clean:
- cargo clean
diff --git a/contracts/contracts/hello-world/src/lib.rs b/contracts/contracts/hello-world/src/lib.rs
deleted file mode 100644
index f8120043..00000000
--- a/contracts/contracts/hello-world/src/lib.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-#![no_std]
-use soroban_sdk::{contract, contractimpl, vec, Env, String, Vec};
-
-#[contract]
-pub struct Contract;
-
-// This is a sample contract. Replace this placeholder with your own contract logic.
-// A corresponding test example is available in `test.rs`.
-//
-// For comprehensive examples, visit .
-// The repository includes use cases for the Stellar ecosystem, such as data storage on
-// the blockchain, token swaps, liquidity pools, and more.
-//
-// Refer to the official documentation:
-// .
-#[contractimpl]
-impl Contract {
- pub fn hello(env: Env, to: String) -> Vec {
- vec![&env, String::from_str(&env, "Hello"), to]
- }
-}
-
-mod test;
diff --git a/contracts/contracts/hello-world/src/test.rs b/contracts/contracts/hello-world/src/test.rs
deleted file mode 100644
index 0bdcba08..00000000
--- a/contracts/contracts/hello-world/src/test.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-#![cfg(test)]
-
-use super::*;
-use soroban_sdk::{vec, Env, String};
-
-#[test]
-fn test() {
- let env = Env::default();
- let contract_id = env.register(Contract, ());
- let client = ContractClient::new(&env, &contract_id);
-
- let words = client.hello(&String::from_str(&env, "Dev"));
- assert_eq!(
- words,
- vec![
- &env,
- String::from_str(&env, "Hello"),
- String::from_str(&env, "Dev"),
- ]
- );
-}