From 6b71599541acf44241889c5535920bbef7cc8da2 Mon Sep 17 00:00:00 2001 From: codebestia Date: Tue, 12 May 2026 16:14:40 +0100 Subject: [PATCH 01/67] chore: delete hello world contract --- contracts/Cargo.lock | 7 ------- contracts/contracts/hello-world/Cargo.toml | 15 -------------- contracts/contracts/hello-world/Makefile | 16 -------------- contracts/contracts/hello-world/src/lib.rs | 23 --------------------- contracts/contracts/hello-world/src/test.rs | 21 ------------------- 5 files changed, 82 deletions(-) delete mode 100644 contracts/contracts/hello-world/Cargo.toml delete mode 100644 contracts/contracts/hello-world/Makefile delete mode 100644 contracts/contracts/hello-world/src/lib.rs delete mode 100644 contracts/contracts/hello-world/src/test.rs diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index 7cad153..ee9549d 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 c3e84a9..0000000 --- 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 b971934..0000000 --- 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 f812004..0000000 --- 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 0bdcba0..0000000 --- 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"), - ] - ); -} From a5a8754fc3fedc17db780897f905053cfbcd97be Mon Sep 17 00:00:00 2001 From: codebestia Date: Wed, 13 May 2026 10:48:19 +0100 Subject: [PATCH 02/67] feat(web): set design tokens and update site metadata --- apps/web/src/app/globals.css | 28 ++++++++++++++++++---------- apps/web/src/app/layout.tsx | 5 +++-- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index a2dc41e..c02943f 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 976eb90..5f069c4 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({ From e5a1e93af613044c2911f9a3190403c69b212552 Mon Sep 17 00:00:00 2001 From: codebestia Date: Wed, 13 May 2026 10:52:49 +0100 Subject: [PATCH 03/67] feat(web): add landing page components (Navbar, Hero, Features, HowItWorks, TechStack, CTA, Footer) --- apps/web/src/components/landing/CTA.tsx | 28 ++++++ apps/web/src/components/landing/Features.tsx | 66 +++++++++++++ apps/web/src/components/landing/Footer.tsx | 30 ++++++ apps/web/src/components/landing/Hero.tsx | 98 +++++++++++++++++++ .../web/src/components/landing/HowItWorks.tsx | 58 +++++++++++ apps/web/src/components/landing/Navbar.tsx | 22 +++++ apps/web/src/components/landing/TechStack.tsx | 49 ++++++++++ 7 files changed, 351 insertions(+) create mode 100644 apps/web/src/components/landing/CTA.tsx create mode 100644 apps/web/src/components/landing/Features.tsx create mode 100644 apps/web/src/components/landing/Footer.tsx create mode 100644 apps/web/src/components/landing/Hero.tsx create mode 100644 apps/web/src/components/landing/HowItWorks.tsx create mode 100644 apps/web/src/components/landing/Navbar.tsx create mode 100644 apps/web/src/components/landing/TechStack.tsx diff --git a/apps/web/src/components/landing/CTA.tsx b/apps/web/src/components/landing/CTA.tsx new file mode 100644 index 0000000..42bf27a --- /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 0000000..2fccd96 --- /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 0000000..6ab2cf7 --- /dev/null +++ b/apps/web/src/components/landing/Footer.tsx @@ -0,0 +1,30 @@ +export function Footer() { + return ( + + ); +} diff --git a/apps/web/src/components/landing/Hero.tsx b/apps/web/src/components/landing/Hero.tsx new file mode 100644 index 0000000..67ad69a --- /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 0000000..84d1d0a --- /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 0000000..e834327 --- /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 0000000..17fa66b --- /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} + + ))} +
+
+ ); +} From 6eb487bd9e2b7169979c4f394de792c79d998226 Mon Sep 17 00:00:00 2001 From: codebestia Date: Wed, 13 May 2026 10:53:08 +0100 Subject: [PATCH 04/67] feat(web): compose landing page from section components --- apps/web/src/app/page.tsx | 78 +++++++++------------------------------ 1 file changed, 18 insertions(+), 60 deletions(-) diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx index 3f36f7c..b01f282 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 ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

-
- + <> + +
+ + + + +
-
+