add website

This commit is contained in:
timurgordon 2025-06-27 12:05:38 +03:00
parent b2ee21999f
commit 21dcc4d97a
32 changed files with 8954 additions and 0 deletions

1372
website/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

22
website/Cargo.toml Normal file
View File

@ -0,0 +1,22 @@
[package]
name = "freezone-website"
version = "0.1.0"
edition = "2021"
[dependencies]
yew = { version = "0.21", features = ["csr"] }
yew-router = "0.18"
gloo = "0.11"
gloo-timers = { version = "0.3", features = ["futures"] }
wasm-bindgen = "0.2"
web-sys = { version = "0.3", features = [
"console",
"Document",
"Element",
"HtmlElement",
"Window",
"Location",
] }
js-sys = "0.3"
serde = { version = "1.0", features = ["derive"] }
pulldown-cmark = "0.11"

7
website/Trunk.toml Normal file
View File

@ -0,0 +1,7 @@
[build]
target = "index.html"
[serve]
address = "127.0.0.1"
port = 8080
open = true

View File

@ -0,0 +1,22 @@
# DeFi Features
## Liquidity Pools
Provide liquidity to earn rewards and help facilitate seamless trading across multiple token pairs with competitive APY rates.
## Leveraged Trading
Access up to 100x leverage on major cryptocurrency pairs with advanced risk management tools and real-time margin monitoring.
## Yield Farming
Maximize your returns through strategic yield farming opportunities across multiple protocols and chains.
## Staking Rewards
Stake your tokens to earn passive income while contributing to network security and governance.
## Decentralized Funds
Create or invest in decentralized investment funds with transparent performance tracking and automated rebalancing.
## Cross-Chain Bridge
Seamlessly move assets across different blockchain networks with our secure and efficient bridge technology.
## Automated Strategies
Deploy sophisticated trading and investment strategies with our automated DeFi strategy engine.

View File

@ -0,0 +1,5 @@
# DeFi Platform
Access comprehensive decentralized finance functionality including leveraging, liquidity pools, yield farming, and cross-chain trading. The future of finance, today.
Maximize your returns with AI-powered optimization, risk management, and seamless cross-chain operations.

View File

@ -0,0 +1,16 @@
# About Zanzibar Digital Freezone
The Zanzibar Digital Freezone is a revolutionary economic zone that enables global entrepreneurs to establish their digital legal entities and residence in one of Africa's most strategic locations. Built on cutting-edge blockchain technology and backed by progressive regulatory frameworks.
## Our Vision
To create Africa's premier digital economic zone where global businesses can operate with complete legal certainty, regulatory compliance, and digital asset freedom. Zanzibar's strategic location and forward-thinking government make it the perfect gateway between Africa, Asia, and the Middle East.
## Core Benefits
- **Legal Entity Formation**: Establish your digital company with full legal recognition
- **Digital Residence**: Obtain digital residency status in Zanzibar
- **Asset Trading**: Trade digital assets with regulatory compliance
- **Tax Optimization**: Benefit from Zanzibar's competitive tax framework
- **Strategic Location**: Access to African, Asian, and Middle Eastern markets
- **Regulatory Clarity**: Clear, progressive regulations for digital businesses

View File

@ -0,0 +1,5 @@
# Zanzibar Digital Freezone
Establish your digital legal entity and residence in Zanzibar's premier digital freezone. Experience seamless digital asset trading with full legal protection and regulatory compliance.
Join global entrepreneurs building their digital future in Africa's most innovative economic zone.

View File

@ -0,0 +1,19 @@
# Marketplace Features
## Digital Asset Trading
Trade a wide variety of digital assets including cryptocurrencies, tokens, and digital commodities with advanced trading tools and real-time market data.
## NFT Marketplace
Discover, buy, and sell unique NFTs from artists, creators, and brands. Support for multiple blockchain networks and advanced filtering options.
## Service Exchange
Connect with service providers and clients in the freezone. From consulting to development, find or offer professional services with crypto payments.
## Real Estate Tokenization
Invest in tokenized real estate properties, enabling fractional ownership and global accessibility to premium real estate markets.
## Escrow Services
Secure transactions with built-in escrow services, ensuring safe and reliable trading for all parties involved.
## Advanced Analytics
Market insights, price tracking, and portfolio management tools to help you make informed trading decisions.

View File

@ -0,0 +1,5 @@
# Marketplace
The future of business digitalization. Transform your real-world assets and services into digital tokens, enabling seamless global commerce within the Zanzibar Digital Freezone.
Empower your business with blockchain technology, smart contracts, and regulatory compliance for the digital economy.

View File

@ -0,0 +1,19 @@
# Platform Features
## Company Management
Establish and manage your digital companies with complete autonomy. Handle registrations, compliance, and operations through our intuitive dashboard.
## Digital Governance
Implement transparent governance structures with built-in voting mechanisms, proposal systems, and stakeholder management tools.
## Financial Administration
Comprehensive financial management including accounting, budgeting, treasury management, and automated reporting systems.
## Smart Contracts
Deploy and manage smart contracts for automated business processes, ensuring trust and transparency in all operations.
## Analytics & Insights
Real-time analytics and business intelligence tools to make data-driven decisions and optimize your operations.
## Compliance Tools
Stay compliant with automated regulatory reporting, audit trails, and compliance monitoring across multiple jurisdictions.

View File

@ -0,0 +1,5 @@
# Business Management Platform
Manage, administer and govern your digital companies with unprecedented control and transparency. Built for the future of autonomous business operations.
Transform how you run your business with smart contracts, automated governance, and comprehensive financial management tools.

28
website/index.html Normal file
View File

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Freezone - Digital Freedom Platform</title>
<base data-trunk-public-url />
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link data-trunk rel="css" href="styles/main.css" />
<!-- Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<link data-trunk rel="copy-file" href="static/js/animations.js" />
<!-- Rust WASM -->
<link data-trunk rel="rust" data-cargo-features="yew/csr" />
</head>
<body>
<div id="app"></div>
<script src="animations.js"></script>
</body>
</html>

46
website/src/app.rs Normal file
View File

@ -0,0 +1,46 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::components::header::Header;
use crate::components::footer::Footer;
use crate::pages::{Home, Platform, Marketplace, DeFi, NotFound};
#[derive(Clone, Routable, PartialEq)]
pub enum Route {
#[at("/")]
Home,
#[at("/platform")]
Platform,
#[at("/marketplace")]
Marketplace,
#[at("/defi")]
DeFi,
#[not_found]
#[at("/404")]
NotFound,
}
fn switch(routes: Route) -> Html {
match routes {
Route::Home => html! { <Home /> },
Route::Platform => html! { <Platform /> },
Route::Marketplace => html! { <Marketplace /> },
Route::DeFi => html! { <DeFi /> },
Route::NotFound => html! { <NotFound /> },
}
}
#[function_component(App)]
pub fn app() -> Html {
html! {
<BrowserRouter>
<div id="app">
<Header />
<main>
<Switch<Route> render={switch} />
</main>
<Footer />
</div>
</BrowserRouter>
}
}

View File

@ -0,0 +1,102 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
#[function_component(Footer)]
pub fn footer() -> Html {
html! {
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-lg-4 mb-4">
<h5 class="mb-3">{"Freezone"}</h5>
<p class="text-muted">
{"The ultimate digital freedom platform where innovation meets opportunity."}
</p>
</div>
<div class="col-lg-2 col-md-6 mb-4">
<h6 class="mb-3">{"Platform"}</h6>
<ul class="list-unstyled">
<li class="mb-2">
<Link<Route> to={Route::Platform} classes="text-muted text-decoration-none">
{"Overview"}
</Link<Route>>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Features"}</a>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Pricing"}</a>
</li>
</ul>
</div>
<div class="col-lg-2 col-md-6 mb-4">
<h6 class="mb-3">{"Marketplace"}</h6>
<ul class="list-unstyled">
<li class="mb-2">
<Link<Route> to={Route::Marketplace} classes="text-muted text-decoration-none">
{"Browse"}
</Link<Route>>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Sell"}</a>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"NFTs"}</a>
</li>
</ul>
</div>
<div class="col-lg-2 col-md-6 mb-4">
<h6 class="mb-3">{"DeFi"}</h6>
<ul class="list-unstyled">
<li class="mb-2">
<Link<Route> to={Route::DeFi} classes="text-muted text-decoration-none">
{"Trading"}
</Link<Route>>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Staking"}</a>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Pools"}</a>
</li>
</ul>
</div>
<div class="col-lg-2 col-md-6 mb-4">
<h6 class="mb-3">{"Support"}</h6>
<ul class="list-unstyled">
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Help Center"}</a>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Contact"}</a>
</li>
<li class="mb-2">
<a href="#" class="text-muted text-decoration-none">{"Community"}</a>
</li>
</ul>
</div>
</div>
<hr class="my-4" style="border-color: var(--border-color);" />
<div class="row align-items-center">
<div class="col-md-6">
<p class="text-muted mb-0">
{"© 2024 Freezone. All rights reserved."}
</p>
</div>
<div class="col-md-6 text-md-end">
<a href="#" class="text-muted text-decoration-none me-3">{"Privacy"}</a>
<a href="#" class="text-muted text-decoration-none me-3">{"Terms"}</a>
<a href="#" class="text-muted text-decoration-none">{"Security"}</a>
</div>
</div>
</div>
</footer>
}
}

View File

@ -0,0 +1,45 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
#[function_component(Header)]
pub fn header() -> Html {
html! {
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<Link<Route> to={Route::Home} classes="navbar-brand">
{"Zanzibar Digital Freezone"}
</Link<Route>>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<Link<Route> to={Route::Platform} classes="nav-link">
{"Platform"}
</Link<Route>>
</li>
<li class="nav-item">
<Link<Route> to={Route::Marketplace} classes="nav-link">
{"Marketplace"}
</Link<Route>>
</li>
<li class="nav-item">
<Link<Route> to={Route::DeFi} classes="nav-link">
{"DeFi"}
</Link<Route>>
</li>
<li class="nav-item ms-3">
<a href="#" class="btn btn-primary">
{"Register"}
</a>
</li>
</ul>
</div>
</div>
</nav>
}
}

View File

@ -0,0 +1,131 @@
use yew::prelude::*;
use crate::utils::{load_markdown_content, markdown::extract_title_and_description};
use crate::components::WorldMap;
#[derive(Properties, PartialEq)]
pub struct HeroProps {
pub content_path: String,
pub cta_text: String,
pub cta_link: String,
#[prop_or_default]
pub secondary_cta_text: Option<String>,
#[prop_or_default]
pub secondary_cta_link: Option<String>,
#[prop_or_default]
pub background_variant: Option<String>,
}
#[function_component(Hero)]
pub fn hero(props: &HeroProps) -> Html {
let content = load_markdown_content(&props.content_path);
let (title, description) = extract_title_and_description(&content);
let background_class = match props.background_variant.as_deref() {
Some("marketplace") => "hero-marketplace",
Some("platform") => "hero-platform",
Some("defi") => "hero-defi",
_ => "hero-default"
};
html! {
<section class={classes!("hero-section", background_class)}>
<div class="container">
<div class="row align-items-center min-vh-100">
<div class="col-lg-6 hero-content">
<div class="fade-in animate">
<h1 class="hero-title">{title}</h1>
<p class="hero-subtitle">{description}</p>
<div class="hero-actions mt-4">
<a href={props.cta_link.clone()} class="btn btn-primary btn-lg me-3">
{&props.cta_text}
</a>
{if let Some(secondary_text) = &props.secondary_cta_text {
html! {
<a href={props.secondary_cta_link.clone().unwrap_or_default()}
class="btn btn-outline-primary btn-lg">
{secondary_text}
</a>
}
} else {
html! {}
}}
</div>
</div>
</div>
<div class="col-lg-6 slide-in-right animate">
<div class="hero-visual">
{match props.background_variant.as_deref() {
Some("marketplace") => html! {
<div class="hero-marketplace-visual">
<div class="floating-cards">
<div class="floating-card card-1">
<div class="card-icon">{"🎨"}</div>
<div class="card-title">{"Digital Art"}</div>
<div class="card-price">{"2.5 ETH"}</div>
</div>
<div class="floating-card card-2">
<div class="card-icon">{"🏠"}</div>
<div class="card-title">{"Real Estate"}</div>
<div class="card-price">{"$50K"}</div>
</div>
<div class="floating-card card-3">
<div class="card-icon">{"💼"}</div>
<div class="card-title">{"Services"}</div>
<div class="card-price">{"100 USDC"}</div>
</div>
</div>
</div>
},
Some("platform") => html! {
<div class="hero-platform-visual">
<div class="dashboard-preview">
<div class="dashboard-header"></div>
<div class="dashboard-content">
<div class="dashboard-widget"></div>
<div class="dashboard-widget"></div>
<div class="dashboard-widget large"></div>
</div>
</div>
</div>
},
Some("defi") => html! {
<div class="hero-defi-visual">
<div class="liquidity-pool-animation">
<div class="pool-container">
<div class="pool-center">
<div class="pool-label">{"Pool"}</div>
</div>
<div class="asset-flow">
<div class="asset-token eth flowing-in">{"ETH"}</div>
<div class="asset-token usdc flowing-in">{"USDC"}</div>
<div class="asset-token btc flowing-out">{"BTC"}</div>
<div class="asset-token dai flowing-out">{"DAI"}</div>
</div>
<div class="pool-stats">
<div class="pool-stat">
<span class="stat-label">{"TVL:"}</span>
<span class="stat-value">{"$2.4B"}</span>
</div>
</div>
</div>
</div>
</div>
},
_ => html! {
<div class="hero-default-visual">
<WorldMap />
</div>
}
}}
</div>
</div>
</div>
</div>
// Scroll indicator
<div class="scroll-indicator">
<div class="scroll-arrow"></div>
</div>
</section>
}
}

View File

@ -0,0 +1,316 @@
use yew::prelude::*;
#[derive(Clone, PartialEq)]
pub struct MarketplaceItem {
pub title: String,
pub price: String,
pub category: String,
pub image: String,
pub seller: String,
pub rarity: String,
}
#[function_component(MarketplaceFlow)]
pub fn marketplace_flow() -> Html {
let items = vec![
MarketplaceItem {
title: "EcoMobility E-Bike Shares".to_string(),
price: "$150".to_string(),
category: "Company Shares".to_string(),
image: "🚲".to_string(),
seller: "GreenTransport Co-op".to_string(),
rarity: "Impact Verified".to_string(),
},
MarketplaceItem {
title: "Coral Reef Eco-Resort".to_string(),
price: "$2,500".to_string(),
category: "Real Estate".to_string(),
image: "🏝️".to_string(),
seller: "Ocean Conservation Trust".to_string(),
rarity: "Carbon Negative".to_string(),
},
MarketplaceItem {
title: "Telemedicine Platform".to_string(),
price: "500 USDC".to_string(),
category: "HealthTech Services".to_string(),
image: "🏥".to_string(),
seller: "CommunityHealth DAO".to_string(),
rarity: "Community Owned".to_string(),
},
MarketplaceItem {
title: "Mangrove Restoration Credits".to_string(),
price: "$12".to_string(),
category: "Carbon Credits".to_string(),
image: "🌿".to_string(),
seller: "Zanzibar Conservation".to_string(),
rarity: "Verified Impact".to_string(),
},
MarketplaceItem {
title: "Solar Microgrid Shares".to_string(),
price: "$300".to_string(),
category: "Renewable Energy".to_string(),
image: "☀️".to_string(),
seller: "Community Power Co-op".to_string(),
rarity: "Grid Connected".to_string(),
},
MarketplaceItem {
title: "Ocean Education Platform".to_string(),
price: "250 USDC".to_string(),
category: "EdTech Services".to_string(),
image: "🐠".to_string(),
seller: "Marine Learning DAO".to_string(),
rarity: "UNESCO Certified".to_string(),
},
MarketplaceItem {
title: "Spice Farmers Cooperative".to_string(),
price: "$75".to_string(),
category: "Agricultural Co-op".to_string(),
image: "🌶️".to_string(),
seller: "Fair Trade Zanzibar".to_string(),
rarity: "Fair Trade".to_string(),
},
MarketplaceItem {
title: "Community Banking Token".to_string(),
price: "$50".to_string(),
category: "FinTech Startup".to_string(),
image: "🏦".to_string(),
seller: "Financial Inclusion Ltd".to_string(),
rarity: "Series A".to_string(),
},
];
html! {
<div class="marketplace-flow-container">
<div class="marketplace-items">
{items.iter().map(|item| {
let rarity_class = match item.rarity.as_str() {
"Legendary" => "rarity-legendary",
"Ultra Rare" => "rarity-ultra-rare",
"Epic" => "rarity-epic",
"Premium" => "rarity-premium",
"Exclusive" => "rarity-exclusive",
_ => "rarity-common"
};
html! {
<div class={classes!("marketplace-item", rarity_class)}>
<div class="item-header">
<div class="item-image">{&item.image}</div>
<div class="item-rarity">
<span class="rarity-badge">{&item.rarity}</span>
</div>
</div>
<div class="item-content">
<h6 class="item-title">{&item.title}</h6>
<p class="item-category">{&item.category}</p>
<div class="item-seller">
<span class="seller-label">{"by "}</span>
<span class="seller-name">{&item.seller}</span>
</div>
</div>
<div class="item-footer">
<div class="item-price">{&item.price}</div>
<button class="btn-quick-buy">{"Quick Buy"}</button>
</div>
</div>
}
}).collect::<Html>()}
</div>
<div class="flow-overlay-left"></div>
<div class="flow-overlay-right"></div>
</div>
}
}
#[function_component(InteractiveLiquidityPool)]
pub fn interactive_liquidity_pool() -> Html {
html! {
<div class="interactive-demo">
<h5 class="text-center mb-4">{"Live Liquidity Pools"}</h5>
<div class="liquidity-pools">
<div class="liquidity-pool" data-pool="eth-usdc">
<div class="pool-header">
<div class="pool-tokens">
<div class="token-pair">
<div class="token-icon eth"></div>
<div class="token-icon usdc"></div>
</div>
<span class="pool-name">{"ETH/USDC"}</span>
</div>
<div class="pool-apr">{"12.4% APR"}</div>
</div>
<div class="pool-stats">
<div class="stat">
<span class="stat-label">{"TVL"}</span>
<span class="stat-value">{"$2.4M"}</span>
</div>
<div class="stat">
<span class="stat-label">{"Volume 24h"}</span>
<span class="stat-value">{"$890K"}</span>
</div>
</div>
</div>
<div class="liquidity-pool" data-pool="btc-eth">
<div class="pool-header">
<div class="pool-tokens">
<div class="token-pair">
<div class="token-icon btc"></div>
<div class="token-icon eth"></div>
</div>
<span class="pool-name">{"BTC/ETH"}</span>
</div>
<div class="pool-apr">{"8.7% APR"}</div>
</div>
<div class="pool-stats">
<div class="stat">
<span class="stat-label">{"TVL"}</span>
<span class="stat-value">{"$5.1M"}</span>
</div>
<div class="stat">
<span class="stat-label">{"Volume 24h"}</span>
<span class="stat-value">{"$1.2M"}</span>
</div>
</div>
</div>
<div class="liquidity-pool" data-pool="usdc-dai">
<div class="pool-header">
<div class="pool-tokens">
<div class="token-pair">
<div class="token-icon usdc"></div>
<div class="token-icon dai"></div>
</div>
<span class="pool-name">{"USDC/DAI"}</span>
</div>
<div class="pool-apr">{"4.2% APR"}</div>
</div>
<div class="pool-stats">
<div class="stat">
<span class="stat-label">{"TVL"}</span>
<span class="stat-value">{"$8.9M"}</span>
</div>
<div class="stat">
<span class="stat-label">{"Volume 24h"}</span>
<span class="stat-value">{"$2.1M"}</span>
</div>
</div>
</div>
</div>
</div>
}
}
#[function_component(LiveOrderbook)]
pub fn live_orderbook() -> Html {
html! {
<div class="interactive-demo">
<h5 class="text-center mb-4">{"Live Order Book - BTC/USDC"}</h5>
<div class="orderbook">
<div class="orderbook-header">
<span>{"Price (USDC)"}</span>
<span>{"Amount (BTC)"}</span>
<span>{"Total"}</span>
</div>
<div class="orderbook-content" id="orderbook-content">
// Orders will be populated by JavaScript
</div>
<div class="spread-indicator">
<span class="spread-label">{"Spread: "}</span>
<span class="spread-value">{"$12.50 (0.03%)"}</span>
</div>
</div>
</div>
}
}
#[function_component(PlatformWireframe)]
pub fn platform_wireframe() -> Html {
html! {
<div class="interactive-demo">
<h5 class="text-center mb-4">{"Platform Dashboard Preview"}</h5>
<div class="platform-wireframe wireframe">
<div class="wireframe-header">
<div class="header-logo"></div>
<div class="header-nav">
<div class="nav-item active"></div>
<div class="nav-item"></div>
<div class="nav-item"></div>
</div>
<div class="header-user"></div>
</div>
<div class="wireframe-sidebar">
<div class="sidebar-item"></div>
<div class="sidebar-item active"></div>
<div class="sidebar-item"></div>
<div class="sidebar-item"></div>
</div>
<div class="wireframe-main">
<div class="main-header">
<div class="page-title"></div>
<div class="action-buttons">
<div class="btn-wireframe primary"></div>
<div class="btn-wireframe secondary"></div>
</div>
</div>
<div class="main-content">
<div class="content-grid">
<div class="grid-item large"></div>
<div class="grid-item medium"></div>
<div class="grid-item medium"></div>
<div class="grid-item small"></div>
<div class="grid-item small"></div>
<div class="grid-item small"></div>
</div>
</div>
</div>
</div>
</div>
}
}
#[function_component(TradingInterface)]
pub fn trading_interface() -> Html {
html! {
<div class="interactive-demo">
<h5 class="text-center mb-4">{"Advanced Trading Interface"}</h5>
<div class="trading-interface">
<div class="trading-header">
<div class="trading-pair">
<span class="pair-name">{"BTC/USDC"}</span>
<span class="pair-price">{"$42,150.00"}</span>
<span class="pair-change positive">{"+2.4%"}</span>
</div>
</div>
<div class="trading-content">
<div class="chart-container">
<div class="defi-chart chart" id="trading-chart"></div>
</div>
<div class="trading-controls">
<div class="order-form">
<div class="order-tabs">
<button class="tab-btn active">{"Buy"}</button>
<button class="tab-btn">{"Sell"}</button>
</div>
<div class="form-group">
<label>{"Amount (BTC)"}</label>
<div class="input-group">
<input type="text" placeholder="0.00" />
<span class="input-suffix">{"BTC"}</span>
</div>
</div>
<div class="form-group">
<label>{"Price (USDC)"}</label>
<div class="input-group">
<input type="text" placeholder="42,150.00" />
<span class="input-suffix">{"USDC"}</span>
</div>
</div>
<button class="btn-trade buy">{"Place Buy Order"}</button>
</div>
</div>
</div>
</div>
</div>
}
}

View File

@ -0,0 +1,19 @@
pub mod header;
pub mod footer;
pub mod hero;
pub mod section;
pub mod marketplace_flow;
pub mod world_map;
pub use header::Header;
pub use footer::Footer;
pub use hero::Hero;
pub use section::Section;
pub use marketplace_flow::{
MarketplaceFlow,
InteractiveLiquidityPool,
LiveOrderbook,
PlatformWireframe,
TradingInterface
};
pub use world_map::WorldMap;

View File

@ -0,0 +1,127 @@
use yew::prelude::*;
use crate::utils::{load_markdown_content, markdown_to_html};
#[derive(Properties, PartialEq)]
pub struct SectionProps {
pub content_path: AttrValue,
#[prop_or_default]
pub animation_class: Option<AttrValue>,
#[prop_or_default]
pub background_class: Option<AttrValue>,
#[prop_or_default]
pub id: Option<AttrValue>,
}
#[function_component(Section)]
pub fn section(props: &SectionProps) -> Html {
let content = match props.content_path.as_str() {
"home/about" => html! {
<>
<h2 class="section-title">{"About the Freezone"}</h2>
<p class="section-subtitle">
{"The Freezone is a revolutionary digital ecosystem that empowers individuals and businesses to operate with complete autonomy and freedom. Built on cutting-edge blockchain technology, we provide three core platforms that work seamlessly together."}
</p>
<h3>{"Our Vision"}</h3>
<p>
{"To create a world where digital sovereignty is not just a concept, but a reality for everyone. Where businesses can thrive without traditional barriers, and individuals can truly own their digital assets and identity."}
</p>
<h3>{"Core Values"}</h3>
<ul>
<li><strong>{"Freedom"}</strong>{": Complete autonomy over your digital presence"}</li>
<li><strong>{"Innovation"}</strong>{": Cutting-edge technology that pushes boundaries"}</li>
<li><strong>{"Community"}</strong>{": A thriving ecosystem of like-minded pioneers"}</li>
<li><strong>{"Security"}</strong>{": Bank-grade protection for all your assets"}</li>
<li><strong>{"Transparency"}</strong>{": Open, auditable, and trustworthy operations"}</li>
</ul>
</>
},
"platform/features" => html! {
<>
<h2 class="section-title">{"Platform Features"}</h2>
<div class="row">
<div class="col-md-6 mb-4">
<h4>{"Company Management"}</h4>
<p>{"Establish and manage your digital companies with complete autonomy. Handle registrations, compliance, and operations through our intuitive dashboard."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Digital Governance"}</h4>
<p>{"Implement transparent governance structures with built-in voting mechanisms, proposal systems, and stakeholder management tools."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Financial Administration"}</h4>
<p>{"Comprehensive financial management including accounting, budgeting, treasury management, and automated reporting systems."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Smart Contracts"}</h4>
<p>{"Deploy and manage smart contracts for automated business processes, ensuring trust and transparency in all operations."}</p>
</div>
</div>
</>
},
"marketplace/features" => html! {
<>
<h2 class="section-title">{"Marketplace Features"}</h2>
<div class="row">
<div class="col-md-6 mb-4">
<h4>{"Digital Asset Trading"}</h4>
<p>{"Trade a wide variety of digital assets including cryptocurrencies, tokens, and digital commodities with advanced trading tools and real-time market data."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"NFT Marketplace"}</h4>
<p>{"Discover, buy, and sell unique NFTs from artists, creators, and brands. Support for multiple blockchain networks and advanced filtering options."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Service Exchange"}</h4>
<p>{"Connect with service providers and clients in the freezone. From consulting to development, find or offer professional services with crypto payments."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Real Estate Tokenization"}</h4>
<p>{"Invest in tokenized real estate properties, enabling fractional ownership and global accessibility to premium real estate markets."}</p>
</div>
</div>
</>
},
"defi/features" => html! {
<>
<h2 class="section-title">{"DeFi Features"}</h2>
<div class="row">
<div class="col-md-6 mb-4">
<h4>{"Liquidity Pools"}</h4>
<p>{"Provide liquidity to earn rewards and help facilitate seamless trading across multiple token pairs with competitive APY rates."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Leveraged Trading"}</h4>
<p>{"Access up to 100x leverage on major cryptocurrency pairs with advanced risk management tools and real-time margin monitoring."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Yield Farming"}</h4>
<p>{"Maximize your returns through strategic yield farming opportunities across multiple protocols and chains."}</p>
</div>
<div class="col-md-6 mb-4">
<h4>{"Staking Rewards"}</h4>
<p>{"Stake your tokens to earn passive income while contributing to network security and governance."}</p>
</div>
</div>
</>
},
_ => html! { <h2>{"Content not found"}</h2> }
};
let animation_class = props.animation_class.as_deref().unwrap_or("fade-in").to_string();
let background_class = props.background_class.as_deref().unwrap_or("section").to_string();
let section_id = props.id.as_ref().map(|id| id.to_string());
html! {
<section class={background_class} id={section_id}>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-10">
<div class={animation_class}>
{content}
</div>
</div>
</div>
</div>
</section>
}
}

View File

@ -0,0 +1,433 @@
use yew::prelude::*;
use web_sys::{window, HtmlElement, HtmlScriptElement};
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use gloo_timers::callback::{Interval, Timeout};
#[derive(Clone, PartialEq)]
struct ConnectionEntity {
id: u32,
name: String,
entity_type: String, // "Business" or "Resident"
location: String,
lat: f64,
lng: f64,
registration_date: String,
industry: Option<String>,
}
#[derive(Clone, PartialEq)]
struct ActiveConnection {
entity: ConnectionEntity,
start_time: f64,
progress: f64,
}
#[function_component(WorldMap)]
pub fn world_map() -> Html {
let map_ref = use_node_ref();
let active_connections = use_state(|| Vec::<ActiveConnection>::new());
// Sample entities from around the world
let entities = vec![
ConnectionEntity {
id: 1,
name: "TechCorp Solutions Ltd".to_string(),
entity_type: "Business".to_string(),
location: "New York, USA".to_string(),
lat: 40.7128,
lng: -74.0060,
registration_date: "2024-01-15".to_string(),
industry: Some("Technology".to_string()),
},
ConnectionEntity {
id: 2,
name: "Digital Nomad LLC".to_string(),
entity_type: "Business".to_string(),
location: "London, UK".to_string(),
lat: 51.5074,
lng: -0.1278,
registration_date: "2024-02-03".to_string(),
industry: Some("Consulting".to_string()),
},
ConnectionEntity {
id: 3,
name: "Sarah Chen".to_string(),
entity_type: "Resident".to_string(),
location: "Singapore".to_string(),
lat: 1.3521,
lng: 103.8198,
registration_date: "2024-01-28".to_string(),
industry: None,
},
ConnectionEntity {
id: 4,
name: "Crypto Ventures Ltd".to_string(),
entity_type: "Business".to_string(),
location: "Dubai, UAE".to_string(),
lat: 25.2048,
lng: 55.2708,
registration_date: "2024-02-10".to_string(),
industry: Some("Cryptocurrency".to_string()),
},
ConnectionEntity {
id: 5,
name: "Marcus Johnson".to_string(),
entity_type: "Resident".to_string(),
location: "Sydney, Australia".to_string(),
lat: -33.8688,
lng: 151.2093,
registration_date: "2024-01-20".to_string(),
industry: None,
},
ConnectionEntity {
id: 6,
name: "FinTech Innovations SA".to_string(),
entity_type: "Business".to_string(),
location: "São Paulo, Brazil".to_string(),
lat: -23.5505,
lng: -46.6333,
registration_date: "2024-02-05".to_string(),
industry: Some("Financial Technology".to_string()),
},
ConnectionEntity {
id: 7,
name: "Elena Rodriguez".to_string(),
entity_type: "Resident".to_string(),
location: "Madrid, Spain".to_string(),
lat: 40.4168,
lng: -3.7038,
registration_date: "2024-01-12".to_string(),
industry: None,
},
ConnectionEntity {
id: 8,
name: "Green Energy Solutions".to_string(),
entity_type: "Business".to_string(),
location: "Lagos, Nigeria".to_string(),
lat: 6.5244,
lng: 3.3792,
registration_date: "2024-02-08".to_string(),
industry: Some("Renewable Energy".to_string()),
},
];
// Initialize OpenStreetMap
{
let map_ref = map_ref.clone();
use_effect_with(
(),
move |_| {
if let Some(element) = map_ref.cast::<HtmlElement>() {
let window = window().unwrap();
// Create script element for Leaflet CSS
let document = window.document().unwrap();
let head = document.head().unwrap();
// Add Leaflet CSS
let css_link = document.create_element("link").unwrap();
css_link.set_attribute("rel", "stylesheet").unwrap();
css_link.set_attribute("href", "https://unpkg.com/leaflet@1.9.4/dist/leaflet.css").unwrap();
css_link.set_attribute("integrity", "sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=").unwrap();
css_link.set_attribute("crossorigin", "").unwrap();
head.append_child(&css_link).unwrap();
// Add Leaflet JS
let script = document.create_element("script").unwrap()
.dyn_into::<HtmlScriptElement>().unwrap();
script.set_src("https://unpkg.com/leaflet@1.9.4/dist/leaflet.js");
script.set_attribute("integrity", "sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=").unwrap();
script.set_attribute("crossorigin", "").unwrap();
let element_clone = element.clone();
let onload = Closure::wrap(Box::new(move || {
// Initialize map when Leaflet loads
let js_code = format!(r#"
if (typeof L !== 'undefined') {{
const map = L.map('{}', {{
zoomControl: false,
scrollWheelZoom: false,
doubleClickZoom: false,
boxZoom: false,
keyboard: false,
dragging: false,
touchZoom: false,
attributionControl: false
}}).setView([-6.1659, 39.2026], 2);
L.tileLayer('https://{{s}}.tile.openstreetmap.org/{{z}}/{{x}}/{{y}}.png', {{
attribution: '',
maxZoom: 18,
opacity: 0.9,
className: 'map-tiles'
}}).addTo(map);
// Add subtle Zanzibar marker
const zanzIcon = L.divIcon({{
className: 'zanzibar-marker',
html: '<div style="background: #86efac; width: 12px; height: 12px; border-radius: 50%; box-shadow: 0 0 15px #86efac;"></div>',
iconSize: [12, 12],
iconAnchor: [6, 6]
}});
L.marker([-6.1659, 39.2026], {{icon: zanzIcon}}).addTo(map);
}}
"#, element_clone.id());
js_sys::eval(&js_code).unwrap();
}) as Box<dyn FnMut()>);
script.set_onload(Some(onload.as_ref().unchecked_ref()));
onload.forget();
head.append_child(&script).unwrap();
}
|| {}
},
);
}
// Animate connections
{
let active_connections = active_connections.clone();
let entities_clone = entities.clone();
use_effect_with(
(),
move |_| {
let interval = Interval::new(4000, move || {
// Pick a random entity to start connection
if let Some(entity) = entities_clone.get((js_sys::Math::random() * entities_clone.len() as f64) as usize) {
let mut current_connections = (*active_connections).clone();
// Add new connection
current_connections.push(ActiveConnection {
entity: entity.clone(),
start_time: js_sys::Date::now(),
progress: 0.0,
});
active_connections.set(current_connections);
// Remove connection after animation completes (8 seconds)
let active_connections_cleanup = active_connections.clone();
let entity_id = entity.id;
Timeout::new(8000, move || {
let mut current_connections = (*active_connections_cleanup).clone();
current_connections.retain(|conn| conn.entity.id != entity_id);
active_connections_cleanup.set(current_connections);
}).forget();
}
});
move || drop(interval)
},
);
}
// Update connection progress
{
let active_connections = active_connections.clone();
use_effect_with(
(),
move |_| {
let interval = Interval::new(50, move || {
let current_time = js_sys::Date::now();
let mut updated_connections = (*active_connections).clone();
let mut changed = false;
for connection in &mut updated_connections {
let elapsed = current_time - connection.start_time;
let new_progress = (elapsed / 6000.0).min(1.0); // 6 second animation
if (new_progress - connection.progress).abs() > 0.01 {
connection.progress = new_progress;
changed = true;
}
}
if changed {
active_connections.set(updated_connections);
}
});
move || drop(interval)
},
);
}
html! {
<div class="world-map-container fade-in animate">
<div class="map-wrapper">
// OpenStreetMap container
<div id="world-map" ref={map_ref} class="leaflet-map"></div>
// Connection animations overlay
<div class="connection-overlay">
// Animated connection lines and dots
<svg class="connections-svg" viewBox="0 0 1200 600">
// Gradient definition for beam effect
<defs>
<linearGradient id="beamGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgba(0,255,255,0.1);stop-opacity:1" />
<stop offset="50%" style="stop-color:rgba(0,255,255,0.8);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgba(0,255,255,0.1);stop-opacity:1" />
</linearGradient>
</defs>
{for active_connections.iter().map(|connection| {
let entity = &connection.entity;
let progress = connection.progress;
// Convert lat/lng to SVG coordinates (simplified projection)
// Adjust for larger map coverage and proper geographic positioning
let start_x = ((entity.lng + 180.0) / 360.0) * 1200.0;
let start_y = ((90.0 - entity.lat) / 180.0) * 600.0;
// Zanzibar coordinates: -6.1659, 39.2026
let zanzibar_x = ((39.2026 + 180.0) / 360.0) * 1200.0;
let zanzibar_y = ((90.0 - (-6.1659)) / 180.0) * 600.0;
let end_x = zanzibar_x;
let end_y = zanzibar_y;
// Calculate current position along straight line
let current_x = start_x + (end_x - start_x) * progress;
let current_y = start_y + (end_y - start_y) * progress;
html! {
<g key={entity.id}>
// Straight beam line
<line
class="connection-line animated"
x1={start_x.to_string()}
y1={start_y.to_string()}
x2={end_x.to_string()}
y2={end_y.to_string()}
style={format!("opacity: {}", (0.7 - progress * 0.3).max(0.2))}
/>
// Moving data dot
<circle
class="connection-dot moving"
cx={current_x.to_string()}
cy={current_y.to_string()}
r="6"
style={format!("opacity: {}", (1.0 - progress * 0.1).max(0.7))}
/>
</g>
}
})}
// Zanzibar hub (always visible) - actual geographic position
// Zanzibar coordinates: -6.1659, 39.2026
<circle class="zanzibar-hub" cx="731.5" cy="321.1" r="15" />
<circle class="zanzibar-pulse" cx="731.5" cy="321.1" r="15" />
</svg>
// Entity cards that appear during connections
{for active_connections.iter().map(|connection| {
let entity = &connection.entity;
let progress = connection.progress;
// Convert lat/lng to pixel coordinates for card positioning
let card_x = ((entity.lng + 180.0) / 360.0) * 100.0; // Percentage
let card_y = ((90.0 - entity.lat) / 180.0) * 100.0; // Percentage
// Card fades out as connection progresses
let opacity = (1.0 - progress).max(0.0);
html! {
<div
key={entity.id}
class="entity-card"
style={format!("left: {}%; top: {}%; opacity: {};", card_x, card_y, opacity)}
>
<div class="entity-header">
<span class={format!("entity-type {}", entity.entity_type.to_lowercase())}>
{&entity.entity_type}
</span>
<span class="entity-date">{&entity.registration_date}</span>
</div>
<div class="entity-name">{&entity.name}</div>
<div class="entity-location">
<span class="location-icon">{"📍"}</span>
{&entity.location}
</div>
{if let Some(industry) = &entity.industry {
html! {
<div class="entity-industry">{industry}</div>
}
} else {
html! {}
}}
<div class="entity-status">
{if progress < 0.5 {
"Connecting to Zanzibar..."
} else if progress < 0.9 {
"Establishing digital presence..."
} else {
"Registration complete!"
}}
</div>
<div class="connection-progress">
<div class="progress-bar">
<div
class="progress-fill"
style={format!("width: {}%", progress * 100.0)}
></div>
</div>
</div>
</div>
}
})}
</div>
</div>
// Statistics
<div class="map-stats">
<div class="stat-item">
<div class="stat-number">{"17,736"}</div>
<div class="stat-label">{"Digital Entities"}</div>
</div>
<div class="stat-item">
<div class="stat-number">{"127"}</div>
<div class="stat-label">{"Countries"}</div>
</div>
<div class="stat-item">
<div class="stat-number">{"$2.4B"}</div>
<div class="stat-label">{"Assets Under Management"}</div>
</div>
<div class="stat-item">
<div class="stat-number">{"24/7"}</div>
<div class="stat-label">{"Global Operations"}</div>
</div>
</div>
</div>
}
}
#[function_component(GlobalConnections)]
pub fn global_connections() -> Html {
html! {
<section class="section global-connections-section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in">{"Global Digital Hub"}</h2>
<p class="section-subtitle fade-in">
{"Connecting entrepreneurs worldwide to Zanzibar's digital freezone"}
</p>
</div>
</div>
<div class="row justify-content-center">
<div class="col-lg-12">
<div class="slide-in-right">
<WorldMap />
</div>
</div>
</div>
</div>
</section>
}
}

10
website/src/main.rs Normal file
View File

@ -0,0 +1,10 @@
mod app;
mod components;
mod pages;
mod utils;
use app::App;
fn main() {
yew::Renderer::<App>::new().render();
}

428
website/src/pages/defi.rs Normal file
View File

@ -0,0 +1,428 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
use crate::components::{Hero, Section, TradingInterface, InteractiveLiquidityPool, LiveOrderbook};
#[function_component(DeFi)]
pub fn defi() -> Html {
html! {
<>
<Hero
content_path="defi/hero"
cta_text="Start Trading"
cta_link="#trading"
secondary_cta_text="View Pools"
secondary_cta_link="#pools"
background_variant="defi"
/>
// Live trading interface
<section class="section section-alt" id="trading">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Trading Interface"}</h2>
<p class="section-subtitle fade-in animate">
{"Experience professional-grade DeFi trading with real-time data and advanced tools"}
</p>
</div>
</div>
<div class="row justify-content-center">
<div class="col-lg-12">
<div class="fade-in animate">
<TradingInterface />
</div>
</div>
</div>
</div>
</section>
// DeFi protocols overview
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"DeFi Protocols"}</h2>
<p class="section-subtitle fade-in animate">
{"Access the full spectrum of decentralized finance opportunities"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-6 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{"💧"}
</div>
<h5>{"Liquidity Pools"}</h5>
<p class="text-muted mb-4">
{"Provide liquidity and earn fees from trading activity across multiple token pairs."}
</p>
<div class="protocol-stats">
<div class="stat-row">
<span>{"TVL:"}</span>
<span class="text-success">{"$2.4B"}</span>
</div>
<div class="stat-row">
<span>{"APY:"}</span>
<span class="text-info">{"8.5% - 45%"}</span>
</div>
<div class="stat-row">
<span>{"Pools:"}</span>
<span>{"150+"}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{"📈"}
</div>
<h5>{"Leveraged Trading"}</h5>
<p class="text-muted mb-4">
{"Trade with up to 100x leverage on major cryptocurrency pairs with advanced risk management."}
</p>
<div class="protocol-stats">
<div class="stat-row">
<span>{"Max Leverage:"}</span>
<span class="text-warning">{"100x"}</span>
</div>
<div class="stat-row">
<span>{"Trading Pairs:"}</span>
<span>{"50+"}</span>
</div>
<div class="stat-row">
<span>{"24h Volume:"}</span>
<span class="text-success">{"$890M"}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{"🌾"}
</div>
<h5>{"Yield Farming"}</h5>
<p class="text-muted mb-4">
{"Maximize returns through strategic yield farming across multiple protocols and chains."}
</p>
<div class="protocol-stats">
<div class="stat-row">
<span>{"Best APY:"}</span>
<span class="text-success">{"125%"}</span>
</div>
<div class="stat-row">
<span>{"Active Farms:"}</span>
<span>{"85"}</span>
</div>
<div class="stat-row">
<span>{"Total Staked:"}</span>
<span>{"$450M"}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{"🏦"}
</div>
<h5>{"Lending & Borrowing"}</h5>
<p class="text-muted mb-4">
{"Lend your assets to earn interest or borrow against your collateral with competitive rates."}
</p>
<div class="protocol-stats">
<div class="stat-row">
<span>{"Supply APY:"}</span>
<span class="text-success">{"3.2% - 12%"}</span>
</div>
<div class="stat-row">
<span>{"Borrow APY:"}</span>
<span class="text-info">{"5.8% - 18%"}</span>
</div>
<div class="stat-row">
<span>{"Total Supplied:"}</span>
<span>{"$1.2B"}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
// Live pools and orderbook
<section class="section section-alt" id="pools">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Live Market Data"}</h2>
<p class="section-subtitle fade-in animate">
{"Real-time liquidity pools and order book data"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-6 mb-4">
<div class="fade-in animate">
<InteractiveLiquidityPool />
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="fade-in animate">
<LiveOrderbook />
</div>
</div>
</div>
</div>
</section>
<Section
content_path="defi/features"
animation_class="fade-in"
/>
// Advanced DeFi strategies
<section class="section section-alt">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"DeFi Strategies"}</h2>
<p class="section-subtitle fade-in animate">
{"Sophisticated tools for maximizing your DeFi returns"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-4 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"🔄"}
</div>
<h5>{"Auto-Compounding"}</h5>
<p class="text-muted mb-4">
{"Automatically reinvest your yields to maximize compound returns across all positions."}
</p>
<div class="strategy-demo">
<div class="compound-visualization">
<div class="compound-layer layer-1">
<span>{"Initial: $1,000"}</span>
</div>
<div class="compound-layer layer-2">
<span>{"+ Yield: $120"}</span>
</div>
<div class="compound-layer layer-3">
<span>{"Compounded: $1,134"}</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"⚖️"}
</div>
<h5>{"Portfolio Rebalancing"}</h5>
<p class="text-muted mb-4">
{"Maintain optimal portfolio allocation with automated rebalancing strategies."}
</p>
<div class="strategy-demo">
<div class="rebalance-chart">
<div class="allocation-bar">
<div class="allocation-segment eth" style="width: 40%">{"ETH 40%"}</div>
<div class="allocation-segment btc" style="width: 35%">{"BTC 35%"}</div>
<div class="allocation-segment stable" style="width: 25%">{"USDC 25%"}</div>
</div>
<div class="rebalance-arrow">{""}</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"🛡️"}
</div>
<h5>{"Risk Management"}</h5>
<p class="text-muted mb-4">
{"Advanced risk controls with stop-loss, take-profit, and position sizing automation."}
</p>
<div class="strategy-demo">
<div class="risk-gauge">
<div class="gauge-container">
<div class="gauge-fill" style="--risk-level: 35%"></div>
<div class="gauge-label">{"Risk: Low"}</div>
</div>
<div class="risk-metrics">
<div class="risk-metric">
<span>{"Max Drawdown:"}</span>
<span class="text-success">{"5.2%"}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
// Cross-chain capabilities
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Cross-Chain DeFi"}</h2>
<p class="section-subtitle fade-in animate">
{"Access opportunities across multiple blockchain networks"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-6 mb-4">
<div class="network-grid fade-in animate">
<div class="network-card ethereum">
<div class="network-icon">{"Ξ"}</div>
<div class="network-name">{"Ethereum"}</div>
<div class="network-stats">
<div>{"TVL: $1.2B"}</div>
<div>{"APY: 8.5%"}</div>
</div>
</div>
<div class="network-card polygon">
<div class="network-icon">{""}</div>
<div class="network-name">{"Polygon"}</div>
<div class="network-stats">
<div>{"TVL: $450M"}</div>
<div>{"APY: 12.3%"}</div>
</div>
</div>
<div class="network-card bsc">
<div class="network-icon">{"🔶"}</div>
<div class="network-name">{"BSC"}</div>
<div class="network-stats">
<div>{"TVL: $320M"}</div>
<div>{"APY: 15.7%"}</div>
</div>
</div>
<div class="network-card avalanche">
<div class="network-icon">{"🔺"}</div>
<div class="network-name">{"Avalanche"}</div>
<div class="network-stats">
<div>{"TVL: $280M"}</div>
<div>{"APY: 18.2%"}</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="fade-in animate">
<h4>{"Seamless Cross-Chain Operations"}</h4>
<p class="text-muted mb-4">
{"Our advanced bridge technology enables instant asset transfers and yield optimization across all major blockchain networks."}
</p>
<div class="cross-chain-features">
<div class="feature-item">
<div class="feature-check">{""}</div>
<span>{"Instant cross-chain swaps"}</span>
</div>
<div class="feature-item">
<div class="feature-check">{""}</div>
<span>{"Unified portfolio management"}</span>
</div>
<div class="feature-item">
<div class="feature-check">{""}</div>
<span>{"Automated yield optimization"}</span>
</div>
<div class="feature-item">
<div class="feature-check">{""}</div>
<span>{"Gas fee optimization"}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
// DeFi statistics
<section class="section section-alt">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"DeFi Platform Statistics"}</h2>
</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"2400000000"}</div>
<p class="stat-label">{"Total Value Locked (USD)"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"89000"}</div>
<p class="stat-label">{"Active DeFi Users"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number">{"18.5%"}</div>
<p class="stat-label">{"Average APY"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"1200000000"}</div>
<p class="stat-label">{"24h Trading Volume (USD)"}</p>
</div>
</div>
</div>
</div>
</section>
// Call to action
<section class="section">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="fade-in animate">
<h2 class="section-title">{"Ready to Maximize Your DeFi Returns?"}</h2>
<p class="section-subtitle">
{"Join thousands of users earning passive income through our advanced DeFi protocols"}
</p>
<div class="mt-4">
<a href="#register" class="btn btn-primary btn-lg me-3">
{"Start Earning"}
</a>
<Link<Route> to={Route::Platform} classes="btn btn-outline-primary btn-lg">
{"Explore Platform"}
</Link<Route>>
</div>
</div>
</div>
</div>
</div>
</section>
</>
}
}

265
website/src/pages/home.rs Normal file
View File

@ -0,0 +1,265 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
use crate::components::{Hero, Section, MarketplaceFlow, InteractiveLiquidityPool, PlatformWireframe, WorldMap};
#[function_component(Home)]
pub fn home() -> Html {
html! {
<>
<Hero
content_path="home/hero"
cta_text="Get Started"
cta_link="#explore"
secondary_cta_text="Learn More"
secondary_cta_link="#about"
/>
<Section
content_path="home/about"
animation_class="fade-in"
id="about"
/>
// Platform preview section with interactive demos
<section class="section section-alt" id="explore">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Zanzibar Digital Freezone Ecosystem"}</h2>
<p class="section-subtitle fade-in animate">
{"Three powerful platforms enabling digital entity formation and asset trading in Zanzibar"}
</p>
</div>
</div>
<div class="row align-items-center mb-5">
<div class="col-lg-6 slide-in-left animate">
<div class="feature-card">
<div class="feature-icon">
{"🏢"}
</div>
<h3>{"Platform"}</h3>
<p class="text-muted mb-4">
{"Establish your digital legal entity and residence in Zanzibar. Manage, administer and govern your digital presence with full regulatory compliance."}
</p>
<div class="feature-highlights mb-4">
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Digital entity formation in Zanzibar"}</span>
</div>
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Digital residence establishment"}</span>
</div>
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Regulatory compliance & reporting"}</span>
</div>
</div>
<Link<Route> to={Route::Platform} classes="btn btn-outline-primary">
{"Explore Platform"}
</Link<Route>>
</div>
</div>
<div class="col-lg-6 slide-in-right animate">
<PlatformWireframe />
</div>
</div>
<div class="row align-items-center mb-5">
<div class="col-lg-6 order-lg-2 slide-in-right animate">
<div class="feature-card">
<div class="feature-icon">
{"🛒"}
</div>
<h3>{"Marketplace"}</h3>
<p class="text-muted mb-4">
{"Trade digital assets within the Zanzibar Digital Freezone. Access global markets while operating under favorable regulatory frameworks."}
</p>
<div class="feature-highlights mb-4">
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Digital asset trading within freezone"}</span>
</div>
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Regulatory compliant transactions"}</span>
</div>
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Global market access"}</span>
</div>
</div>
<Link<Route> to={Route::Marketplace} classes="btn btn-outline-primary">
{"Explore Marketplace"}
</Link<Route>>
</div>
</div>
<div class="col-lg-6 order-lg-1 slide-in-left animate">
<div class="marketplace-preview">
<MarketplaceFlow />
</div>
</div>
</div>
<div class="row align-items-center">
<div class="col-lg-6 slide-in-left animate">
<div class="feature-card">
<div class="feature-icon">
{"💰"}
</div>
<h3>{"DeFi"}</h3>
<p class="text-muted mb-4">
{"Advanced DeFi capabilities for digital asset trading within the Zanzibar Digital Freezone. Leverage, stake, and earn with regulatory clarity."}
</p>
<div class="feature-highlights mb-4">
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Freezone-compliant DeFi protocols"}</span>
</div>
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Digital asset yield generation"}</span>
</div>
<div class="highlight-item">
<span class="highlight-icon">{""}</span>
<span>{"Regulated trading environment"}</span>
</div>
</div>
<Link<Route> to={Route::DeFi} classes="btn btn-outline-primary">
{"Start Trading"}
</Link<Route>>
</div>
</div>
<div class="col-lg-6 slide-in-right animate">
<InteractiveLiquidityPool />
</div>
</div>
</div>
</section>
// Why choose Freezone section
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Why Choose Zanzibar Digital Freezone?"}</h2>
<p class="section-subtitle fade-in animate">
{"Experience the future of digital entity formation and asset trading with regulatory clarity"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-4 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{"🔒"}
</div>
<h5>{"Secure & Trustless"}</h5>
<p class="text-muted mb-4">
{"Built on blockchain technology with bank-grade security, multi-signature wallets, and complete transparency in all operations."}
</p>
<div class="security-indicators">
<div class="indicator">
<span class="indicator-icon">{"🛡️"}</span>
<span>{"Multi-sig security"}</span>
</div>
<div class="indicator">
<span class="indicator-icon">{"🔍"}</span>
<span>{"Audited smart contracts"}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{""}
</div>
<h5>{"Lightning Fast"}</h5>
<p class="text-muted mb-4">
{"Experience instant transactions and real-time updates across all platforms with sub-second settlement times."}
</p>
<div class="performance-metrics">
<div class="metric">
<span class="metric-value">{"<1s"}</span>
<span class="metric-label">{"Settlement"}</span>
</div>
<div class="metric">
<span class="metric-value">{"99.9%"}</span>
<span class="metric-label">{"Uptime"}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-card text-center fade-in animate">
<div class="feature-icon mx-auto">
{"🌍"}
</div>
<h5>{"Global Access"}</h5>
<p class="text-muted mb-4">
{"Access your digital assets and services from anywhere in the world, 24/7, with support for multiple currencies and languages."}
</p>
<div class="global-stats">
<div class="stat">
<span class="stat-value">{"150+"}</span>
<span class="stat-label">{"Countries"}</span>
</div>
<div class="stat">
<span class="stat-value">{"24/7"}</span>
<span class="stat-label">{"Support"}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
// Call to action
<section class="section section-alt">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="fade-in animate">
<h2 class="section-title">{"Ready to Establish Your Digital Presence?"}</h2>
<p class="section-subtitle">
{"Join the Zanzibar Digital Freezone and unlock global opportunities with regulatory clarity"}
</p>
<div class="mt-4">
<a href="#register" class="btn btn-primary btn-lg me-3">
{"Establish Your Entity"}
</a>
<a href="#learn-more" class="btn btn-outline-primary btn-lg">
{"Learn More"}
</a>
</div>
<div class="cta-features mt-4">
<div class="cta-feature">
<span class="cta-icon">{""}</span>
<span>{"Digital entity formation"}</span>
</div>
<div class="cta-feature">
<span class="cta-icon">{""}</span>
<span>{"Regulatory compliance"}</span>
</div>
<div class="cta-feature">
<span class="cta-icon">{""}</span>
<span>{"Global market access"}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</>
}
}

View File

@ -0,0 +1,201 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
use crate::components::{Hero, Section, MarketplaceFlow, InteractiveLiquidityPool, LiveOrderbook};
#[function_component(Marketplace)]
pub fn marketplace() -> Html {
html! {
<>
// Custom hero with integrated marketplace flow
<section class="hero-section hero-marketplace">
<div class="container">
<div class="row align-items-center min-vh-100">
<div class="col-lg-6 hero-content">
<div class="fade-in animate">
<h1 class="hero-title">{"Marketplace"}</h1>
<p class="hero-subtitle">
{"The future of business digitalization. Transform your real-world assets and services into digital tokens, enabling seamless global commerce within the Zanzibar Digital Freezone."}
</p>
<div class="hero-actions mt-4">
<a href="#digitize" class="btn btn-primary btn-lg me-3">
{"Digitize Assets"}
</a>
<a href="#features" class="btn btn-outline-primary btn-lg">
{"Learn More"}
</a>
</div>
</div>
</div>
<div class="col-lg-6 slide-in-right animate">
// Marketplace flow on the right side
<div class="hero-marketplace-flow">
<MarketplaceFlow />
</div>
</div>
</div>
</div>
// Scroll indicator
<div class="scroll-indicator">
<div class="scroll-arrow"></div>
</div>
</section>
// Real world asset digitalization section
<section class="section" id="digitize">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Digitalize Real World Assets"}</h2>
<p class="section-subtitle fade-in animate">
{"Transform traditional assets into digital tokens for global accessibility, fractional ownership, and enhanced liquidity"}
</p>
</div>
</div>
// Real Estate - Left aligned
<div class="row align-items-center mb-5">
<div class="col-lg-6 fade-in animate">
<div class="asset-showcase">
<h3>{"Real Estate Tokenization"}</h3>
<p class="lead">
{"Tokenize eco-friendly developments, renewable energy projects, and sustainable infrastructure that benefits local communities while preserving Zanzibar's natural beauty."}
</p>
<ul class="feature-list">
<li>{"✓ Solar-powered eco-resorts with community ownership"}</li>
<li>{"✓ Mangrove restoration project funding"}</li>
<li>{"✓ Sustainable housing cooperatives"}</li>
<li>{"✓ Ocean conservation infrastructure"}</li>
</ul>
</div>
</div>
<div class="col-lg-6 fade-in animate">
<div class="asset-visual">
<div class="tokenization-demo">
<div class="property-card">
<div class="property-image"></div>
<div class="property-details">
<h5>{"Coral Reef Eco-Resort"}</h5>
<p>{"$1.2M Total Value • $500 per token • 2400 tokens available"}</p>
<div class="progress">
<div class="progress-bar" style="width: 78%"></div>
</div>
<small>{"78% Funded • Carbon Negative"}</small>
</div>
</div>
</div>
</div>
</div>
</div>
// Services - Right aligned
<div class="row align-items-center mb-5">
<div class="col-lg-6 order-lg-2 fade-in animate">
<div class="asset-showcase">
<h3>{"Service Digitalization"}</h3>
<p class="lead">
{"Transform professional services into smart contract-powered digital offerings with automated execution, milestone tracking, and global marketplace access."}
</p>
<ul class="feature-list">
<li>{"✓ Educational program licensing"}</li>
<li>{"✓ Healthcare service contracts"}</li>
<li>{"✓ Training and certification services"}</li>
<li>{"✓ Professional consulting packages"}</li>
</ul>
</div>
</div>
<div class="col-lg-6 order-lg-1 fade-in animate">
<div class="asset-visual">
<div class="service-demo">
<div class="service-card">
<div class="service-provider">
<div class="provider-avatar"></div>
<div class="provider-info">
<h6>{"Ocean Conservation Consultancy"}</h6>
<p>{"$2,500/month • 4.8★ • 89 projects completed"}</p>
</div>
</div>
<div class="service-contract">
<div class="contract-status active">{"Active Program"}</div>
<div class="milestones">
<div class="milestone completed">{"✓ Community Assessment"}</div>
<div class="milestone active">{"⏳ Training Deployment"}</div>
<div class="milestone pending">{"○ Impact Measurement"}</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
// Software & Shares - Left aligned
<div class="row align-items-center">
<div class="col-lg-6 fade-in animate">
<div class="asset-showcase">
<h3>{"Company Share Tokenization"}</h3>
<p class="lead">
{"Tokenize company shares and equity stakes for enhanced liquidity, fractional ownership, and global investor access across diverse industries and business models."}
</p>
<ul class="feature-list">
<li>{"✓ Agricultural cooperative equity tokens"}</li>
<li>{"✓ Environmental project shares"}</li>
<li>{"✓ Technology startup equity"}</li>
<li>{"✓ Industry-specific investment tokens"}</li>
</ul>
</div>
</div>
<div class="col-lg-6 fade-in animate">
<div class="asset-visual">
<div class="digital-assets-demo">
<div class="asset-grid">
<div class="digital-asset">
<div class="asset-type">{"Cooperative Shares"}</div>
<h6>{"Zanzibar Spice Farmers Co-op"}</h6>
<p>{"1,200 shares • $75 each • Fair Trade Certified"}</p>
</div>
<div class="digital-asset">
<div class="asset-type">{"Carbon Credits"}</div>
<h6>{"Mangrove Restoration Project"}</h6>
<p>{"5,000 credits • $12 each • Verified Impact"}</p>
</div>
<div class="digital-asset">
<div class="asset-type">{"FinTech Startup"}</div>
<h6>{"Community Banking Platform"}</h6>
<p>{"Series A • $50 per token • Financial Inclusion"}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
// Call to action
<section class="section">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="fade-in animate">
<h2 class="section-title">{"Ready to Join the Digital Asset Economy?"}</h2>
<p class="section-subtitle">
{"Transform your traditional assets into digital tokens and unlock global opportunities within the Zanzibar Digital Freezone. Access new markets, enable fractional ownership, and enhance liquidity for your investments."}
</p>
<div class="mt-4">
<a href="#register" class="btn btn-primary btn-lg me-3">
{"Start Digitalization"}
</a>
<Link<Route> to={Route::Platform} classes="btn btn-outline-primary btn-lg">
{"Explore Platform"}
</Link<Route>>
</div>
</div>
</div>
</div>
</div>
</section>
</>
}
}

11
website/src/pages/mod.rs Normal file
View File

@ -0,0 +1,11 @@
pub mod home;
pub mod platform;
pub mod marketplace;
pub mod defi;
pub mod not_found;
pub use home::Home;
pub use platform::Platform;
pub use marketplace::Marketplace;
pub use defi::DeFi;
pub use not_found::NotFound;

View File

@ -0,0 +1,27 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
#[function_component(NotFound)]
pub fn not_found() -> Html {
html! {
<section class="hero-section d-flex align-items-center">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6 text-center">
<div class="fade-in">
<h1 class="display-1 text-primary mb-4">{"404"}</h1>
<h2 class="mb-4">{"Page Not Found"}</h2>
<p class="text-muted mb-4">
{"The page you're looking for doesn't exist in the freezone. Let's get you back on track."}
</p>
<Link<Route> to={Route::Home} classes="btn btn-primary btn-lg">
{"Return Home"}
</Link<Route>>
</div>
</div>
</div>
</div>
</section>
}
}

View File

@ -0,0 +1,381 @@
use yew::prelude::*;
use yew_router::prelude::*;
use crate::app::Route;
use crate::components::{Hero, Section, PlatformWireframe};
#[function_component(Platform)]
pub fn platform() -> Html {
html! {
<>
<Hero
content_path="platform/hero"
cta_text="Launch Platform"
cta_link="#get-started"
secondary_cta_text="View Demo"
secondary_cta_link="#demo"
background_variant="platform"
/>
// Interactive platform demo
<section class="section section-alt" id="demo">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Platform Interface Preview"}</h2>
<p class="section-subtitle fade-in animate">
{"Experience the intuitive dashboard that powers digital business management"}
</p>
</div>
</div>
<div class="row justify-content-center">
<div class="col-lg-10">
<div class="fade-in animate">
<PlatformWireframe />
</div>
</div>
</div>
</div>
</section>
// Core platform features
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Core Platform Features"}</h2>
<p class="section-subtitle fade-in animate">
{"Everything you need to manage and govern your digital business empire"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-6 mb-5">
<div class="row">
<div class="col-md-6 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"🏢"}
</div>
<h5>{"Company Formation"}</h5>
<p class="text-muted">
{"Establish digital companies with complete legal framework and automated compliance."}
</p>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"⚖️"}
</div>
<h5>{"Legal Framework"}</h5>
<p class="text-muted">
{"Built-in legal structures with smart contract enforcement and dispute resolution."}
</p>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"💰"}
</div>
<h5>{"Treasury Management"}</h5>
<p class="text-muted">
{"Advanced treasury operations with multi-signature wallets and automated accounting."}
</p>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"🗳️"}
</div>
<h5>{"Governance Tools"}</h5>
<p class="text-muted">
{"Democratic decision-making with voting mechanisms and proposal systems."}
</p>
</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-5">
<div class="interactive-demo slide-in-right animate">
<h5 class="text-center mb-4">{"Live Company Dashboard"}</h5>
<div class="company-dashboard">
<div class="dashboard-header">
<div class="company-info">
<div class="company-logo"></div>
<div class="company-details">
<h6>{"TechCorp Digital Ltd."}</h6>
<span class="company-status active">{"Active"}</span>
</div>
</div>
<div class="dashboard-actions">
<button class="btn-dashboard primary">{"New Proposal"}</button>
<button class="btn-dashboard secondary">{"Treasury"}</button>
</div>
</div>
<div class="dashboard-metrics">
<div class="metric-card">
<div class="metric-value">{"$2.4M"}</div>
<div class="metric-label">{"Treasury Balance"}</div>
<div class="metric-change positive">{"+12.5%"}</div>
</div>
<div class="metric-card">
<div class="metric-value">{"156"}</div>
<div class="metric-label">{"Shareholders"}</div>
<div class="metric-change positive">{"+8"}</div>
</div>
<div class="metric-card">
<div class="metric-value">{"23"}</div>
<div class="metric-label">{"Active Proposals"}</div>
<div class="metric-change neutral">{"±0"}</div>
</div>
</div>
<div class="dashboard-content">
<div class="content-section">
<h6>{"Recent Activity"}</h6>
<div class="activity-list">
<div class="activity-item">
<div class="activity-icon proposal"></div>
<div class="activity-text">{"New proposal: Q4 Budget Allocation"}</div>
<div class="activity-time">{"2h ago"}</div>
</div>
<div class="activity-item">
<div class="activity-icon treasury"></div>
<div class="activity-text">{"Treasury deposit: $50,000 USDC"}</div>
<div class="activity-time">{"4h ago"}</div>
</div>
<div class="activity-item">
<div class="activity-icon vote"></div>
<div class="activity-text">{"Proposal passed: Marketing Budget"}</div>
<div class="activity-time">{"1d ago"}</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<Section
content_path="platform/features"
animation_class="fade-in"
background_class="section section-alt"
/>
// Advanced governance section
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Advanced Governance"}</h2>
<p class="section-subtitle fade-in animate">
{"Sophisticated tools for democratic business management and stakeholder engagement"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-4 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"📊"}
</div>
<h5>{"Proposal System"}</h5>
<p class="text-muted mb-4">
{"Create, discuss, and vote on business proposals with transparent tracking and automated execution."}
</p>
<div class="governance-demo">
<div class="proposal-item">
<div class="proposal-title">{"Q4 Marketing Budget"}</div>
<div class="proposal-status passing">{"Passing"}</div>
<div class="vote-bar">
<div class="vote-progress" style="width: 78%"></div>
</div>
<div class="vote-stats">
<span>{"78% Yes"}</span>
<span>{"22% No"}</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"👥"}
</div>
<h5>{"Stakeholder Management"}</h5>
<p class="text-muted mb-4">
{"Manage shareholders, voting rights, and stake distributions with complete transparency."}
</p>
<div class="stakeholder-demo">
<div class="stakeholder-chart">
<div class="chart-segment" style="--percentage: 35%; --color: var(--pastel-blue)"></div>
<div class="chart-segment" style="--percentage: 25%; --color: var(--pastel-purple)"></div>
<div class="chart-segment" style="--percentage: 20%; --color: var(--pastel-green)"></div>
<div class="chart-segment" style="--percentage: 20%; --color: var(--pastel-pink)"></div>
</div>
<div class="chart-legend">
<div class="legend-item">
<div class="legend-color" style="background: var(--pastel-blue)"></div>
<span>{"Founders 35%"}</span>
</div>
<div class="legend-item">
<div class="legend-color" style="background: var(--pastel-purple)"></div>
<span>{"Investors 25%"}</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-card fade-in animate">
<div class="feature-icon">
{"🔐"}
</div>
<h5>{"Multi-Sig Treasury"}</h5>
<p class="text-muted mb-4">
{"Secure treasury management with multi-signature requirements and automated compliance."}
</p>
<div class="multisig-demo">
<div class="transaction-item">
<div class="tx-header">
<span class="tx-amount">{"$100,000 USDC"}</span>
<span class="tx-status pending">{"2/3 Signatures"}</span>
</div>
<div class="tx-description">{"Marketing Campaign Payment"}</div>
<div class="signature-progress">
<div class="signature signed">{""}</div>
<div class="signature signed">{""}</div>
<div class="signature pending">{""}</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
// Integration ecosystem
<section class="section section-alt">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Integration Ecosystem"}</h2>
<p class="section-subtitle fade-in animate">
{"Seamlessly connect with external services and blockchain networks"}
</p>
</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-6 mb-4">
<div class="integration-card fade-in animate">
<div class="integration-icon">{"🔗"}</div>
<h6>{"Blockchain Networks"}</h6>
<p class="small text-muted">{"Ethereum, Polygon, BSC, Avalanche"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="integration-card fade-in animate">
<div class="integration-icon">{"💳"}</div>
<h6>{"Payment Gateways"}</h6>
<p class="small text-muted">{"Stripe, PayPal, Crypto payments"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="integration-card fade-in animate">
<div class="integration-icon">{"📊"}</div>
<h6>{"Analytics Tools"}</h6>
<p class="small text-muted">{"Google Analytics, Mixpanel, Custom"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="integration-card fade-in animate">
<div class="integration-icon">{"🛡️"}</div>
<h6>{"Security Services"}</h6>
<p class="small text-muted">{"Multi-factor auth, KYC, AML"}</p>
</div>
</div>
</div>
</div>
</section>
// Success metrics
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center mb-5">
<h2 class="section-title fade-in animate">{"Platform Success Metrics"}</h2>
</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"2850"}</div>
<p class="stat-label">{"Active Companies"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"45000"}</div>
<p class="stat-label">{"Platform Users"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"1200000000"}</div>
<p class="stat-label">{"Assets Under Management (USD)"}</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center fade-in animate">
<div class="stat-number counter">{"12500"}</div>
<p class="stat-label">{"Governance Proposals"}</p>
</div>
</div>
</div>
</div>
</section>
// Call to action
<section class="section section-alt" id="get-started">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="fade-in animate">
<h2 class="section-title">{"Ready to Launch Your Digital Company?"}</h2>
<p class="section-subtitle">
{"Join the future of business management with our comprehensive platform"}
</p>
<div class="mt-4">
<a href="#register" class="btn btn-primary btn-lg me-3">
{"Start Building"}
</a>
<Link<Route> to={Route::Marketplace} classes="btn btn-outline-primary btn-lg">
{"Explore Marketplace"}
</Link<Route>>
</div>
</div>
</div>
</div>
</div>
</section>
</>
}
}

View File

@ -0,0 +1,33 @@
use pulldown_cmark::{Parser, Options, html};
pub fn render_markdown(markdown: &str) -> String {
let mut options = Options::empty();
options.insert(Options::ENABLE_STRIKETHROUGH);
options.insert(Options::ENABLE_TABLES);
options.insert(Options::ENABLE_FOOTNOTES);
let parser = Parser::new_ext(markdown, options);
let mut html_output = String::new();
html::push_html(&mut html_output, parser);
html_output
}
pub fn extract_title_and_description(markdown: &str) -> (String, String) {
let lines: Vec<&str> = markdown.lines().collect();
let title = lines
.iter()
.find(|line| line.starts_with("# "))
.map(|line| line.replace("# ", ""))
.unwrap_or_default();
let description = lines
.iter()
.skip_while(|line| line.starts_with("#") || line.trim().is_empty())
.take_while(|line| !line.trim().is_empty())
.map(|s| s.to_string())
.collect::<Vec<String>>()
.join(" ");
(title, description)
}

31
website/src/utils/mod.rs Normal file
View File

@ -0,0 +1,31 @@
pub mod markdown;
use pulldown_cmark::{Parser, Options, html};
pub fn markdown_to_html(markdown: &str) -> String {
let mut options = Options::empty();
options.insert(Options::ENABLE_STRIKETHROUGH);
options.insert(Options::ENABLE_TABLES);
options.insert(Options::ENABLE_FOOTNOTES);
let parser = Parser::new_ext(markdown, options);
let mut html_output = String::new();
html::push_html(&mut html_output, parser);
html_output
}
pub fn load_markdown_content(path: &str) -> String {
// In a real application, you would load this from the file system
// For this demo, we'll return the content based on the path
match path {
"home/hero" => include_str!("../../content/home/hero.md").to_string(),
"home/about" => include_str!("../../content/home/about.md").to_string(),
"platform/hero" => include_str!("../../content/platform/hero.md").to_string(),
"platform/features" => include_str!("../../content/platform/features.md").to_string(),
"marketplace/hero" => include_str!("../../content/marketplace/hero.md").to_string(),
"marketplace/features" => include_str!("../../content/marketplace/features.md").to_string(),
"defi/hero" => include_str!("../../content/defi/hero.md").to_string(),
"defi/features" => include_str!("../../content/defi/features.md").to_string(),
_ => "Content not found".to_string(),
}
}

View File

@ -0,0 +1,557 @@
// Advanced animations and interactions for Freezone website
class FreezoneAnimations {
constructor() {
this.init();
this.setupInteractiveElements();
}
init() {
// Initialize on DOM load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => this.onReady());
} else {
this.onReady();
}
}
onReady() {
this.setupNavbarEffects();
this.setupSmoothScrolling();
this.setupMarketplaceFlow();
this.setupOrderbookAnimation();
this.setupLiquidityPoolAnimation();
this.setupWireframeAnimations();
this.setupChartAnimations();
this.setupCounterAnimations();
}
setupCounterAnimations() {
// Simple counter animation for statistics
const counters = document.querySelectorAll('.counter');
counters.forEach(counter => {
const target = parseInt(counter.textContent.replace(/[^\d]/g, ''));
const suffix = counter.textContent.replace(/[\d,]/g, '');
let current = 0;
const increment = target / 100;
const timer = setInterval(() => {
current += increment;
if (current >= target) {
current = target;
clearInterval(timer);
}
counter.textContent = Math.floor(current).toLocaleString() + suffix;
}, 20);
});
}
setupObservers() {
// Intersection Observer for scroll animations
this.observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -100px 0px'
};
this.observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
// Trigger specific animations based on element type
if (entry.target.classList.contains('counter')) {
this.animateCounter(entry.target);
}
if (entry.target.classList.contains('chart')) {
this.animateChart(entry.target);
}
if (entry.target.classList.contains('wireframe')) {
this.animateWireframe(entry.target);
}
}
});
}, this.observerOptions);
// Observe all animated elements
this.observeElements();
}
observeElements() {
const animatedElements = document.querySelectorAll(
'.fade-in, .slide-in-left, .slide-in-right, .scale-in, .counter, .chart, .wireframe'
);
animatedElements.forEach(el => {
el.classList.add('animate');
this.observer.observe(el);
});
}
setupScrollAnimations() {
// Add stagger effect to grouped elements
const groups = document.querySelectorAll('.row');
groups.forEach(group => {
const children = group.querySelectorAll('.fade-in, .slide-in-left, .slide-in-right');
children.forEach((child, index) => {
child.style.transitionDelay = `${index * 0.1}s`;
});
});
}
setupNavbarEffects() {
const navbar = document.querySelector('.navbar');
if (!navbar) return;
let lastScrollY = window.scrollY;
let ticking = false;
const updateNavbar = () => {
const scrollY = window.scrollY;
if (scrollY > 100) {
navbar.classList.add('scrolled');
} else {
navbar.classList.remove('scrolled');
}
// Hide/show navbar on scroll
if (scrollY > lastScrollY && scrollY > 200) {
navbar.style.transform = 'translateY(-100%)';
} else {
navbar.style.transform = 'translateY(0)';
}
lastScrollY = scrollY;
ticking = false;
};
window.addEventListener('scroll', () => {
if (!ticking) {
requestAnimationFrame(updateNavbar);
ticking = true;
}
});
}
setupSmoothScrolling() {
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', (e) => {
e.preventDefault();
const target = document.querySelector(anchor.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
}
setupMarketplaceFlow() {
const containers = document.querySelectorAll('.marketplace-flow-container');
containers.forEach(container => {
const items = container.querySelector('.marketplace-items');
if (!items) return;
// Clone items for seamless loop
const itemsClone = items.cloneNode(true);
container.appendChild(itemsClone);
// Add hover pause effect
container.addEventListener('mouseenter', () => {
items.style.animationPlayState = 'paused';
itemsClone.style.animationPlayState = 'paused';
});
container.addEventListener('mouseleave', () => {
items.style.animationPlayState = 'running';
itemsClone.style.animationPlayState = 'running';
});
});
}
setupOrderbookAnimation() {
const orderbooks = document.querySelectorAll('.orderbook');
orderbooks.forEach(orderbook => {
this.animateOrderbook(orderbook);
});
}
animateOrderbook(orderbook) {
const orders = [
{ price: '42,150.00', amount: '0.5432', type: 'buy' },
{ price: '42,145.50', amount: '1.2100', type: 'buy' },
{ price: '42,140.25', amount: '0.8750', type: 'buy' },
{ price: '42,155.75', amount: '0.3200', type: 'sell' },
{ price: '42,160.00', amount: '0.9800', type: 'sell' },
{ price: '42,165.25', amount: '1.5000', type: 'sell' }
];
let currentIndex = 0;
const addOrder = () => {
if (currentIndex >= orders.length) {
currentIndex = 0;
orderbook.innerHTML = '<div class="text-center text-muted mb-2">Live Orderbook</div>';
}
const order = orders[currentIndex];
const orderRow = document.createElement('div');
orderRow.className = `order-row order-${order.type}`;
orderRow.innerHTML = `
<span>$${order.price}</span>
<span>${order.amount} BTC</span>
`;
orderbook.appendChild(orderRow);
currentIndex++;
// Remove old orders to keep it manageable
const rows = orderbook.querySelectorAll('.order-row');
if (rows.length > 8) {
rows[1].remove(); // Keep header
}
};
// Add orders periodically
setInterval(addOrder, 2000);
addOrder(); // Initial order
}
setupLiquidityPoolAnimation() {
const pools = document.querySelectorAll('.liquidity-pool');
pools.forEach(pool => {
this.animateLiquidityPool(pool);
});
}
animateLiquidityPool(pool) {
const updatePool = () => {
const ethAmount = (Math.random() * 1000 + 500).toFixed(2);
const usdcAmount = (Math.random() * 2000000 + 1000000).toFixed(0);
const apr = (Math.random() * 20 + 5).toFixed(1);
pool.innerHTML = `
<div class="pool-token">
<div class="token-icon" style="background: var(--pastel-blue);"></div>
<span>ETH: ${ethAmount}</span>
</div>
<div class="text-center">
<div class="text-success">${apr}% APR</div>
</div>
<div class="pool-token">
<div class="token-icon" style="background: var(--pastel-green);"></div>
<span>USDC: ${Number(usdcAmount).toLocaleString()}</span>
</div>
`;
};
updatePool();
setInterval(updatePool, 5000);
}
setupWireframeAnimations() {
const wireframes = document.querySelectorAll('.platform-wireframe');
wireframes.forEach(wireframe => {
this.createWireframeContent(wireframe);
});
}
createWireframeContent(wireframe) {
wireframe.innerHTML = `
<div class="wireframe-header"></div>
<div class="wireframe-content">
<div class="wireframe-block"></div>
<div class="wireframe-block"></div>
<div class="wireframe-block"></div>
<div class="wireframe-block"></div>
</div>
<div class="wireframe-content">
<div class="wireframe-block" style="grid-column: 1 / -1; height: 40px;"></div>
</div>
`;
}
animateWireframe(wireframe) {
const blocks = wireframe.querySelectorAll('.wireframe-block');
blocks.forEach((block, index) => {
setTimeout(() => {
block.style.background = 'var(--pastel-blue)';
setTimeout(() => {
block.style.background = 'var(--border-color)';
}, 500);
}, index * 200);
});
}
setupChartAnimations() {
const charts = document.querySelectorAll('.defi-chart');
charts.forEach(chart => {
this.createChart(chart);
});
}
createChart(chart) {
const canvas = document.createElement('canvas');
canvas.width = chart.offsetWidth;
canvas.height = chart.offsetHeight;
chart.appendChild(canvas);
const ctx = canvas.getContext('2d');
this.animateChart(chart, ctx, canvas);
}
animateChart(chart, ctx, canvas) {
if (!ctx || !canvas) return;
const points = [];
const numPoints = 50;
// Generate random chart data
for (let i = 0; i < numPoints; i++) {
points.push({
x: (i / numPoints) * canvas.width,
y: Math.random() * canvas.height * 0.6 + canvas.height * 0.2
});
}
let animationProgress = 0;
const animate = () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Draw grid
ctx.strokeStyle = 'rgba(255, 255, 255, 0.05)';
ctx.lineWidth = 1;
for (let i = 0; i < 10; i++) {
const y = (i / 10) * canvas.height;
ctx.beginPath();
ctx.moveTo(0, y);
ctx.lineTo(canvas.width, y);
ctx.stroke();
}
// Draw chart line
const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
gradient.addColorStop(0, '#a7f3d0');
gradient.addColorStop(0.5, '#c4b5fd');
gradient.addColorStop(1, '#fbb6ce');
ctx.strokeStyle = gradient;
ctx.lineWidth = 3;
ctx.beginPath();
const visiblePoints = Math.floor(animationProgress * points.length);
for (let i = 0; i < visiblePoints; i++) {
if (i === 0) {
ctx.moveTo(points[i].x, points[i].y);
} else {
ctx.lineTo(points[i].x, points[i].y);
}
}
ctx.stroke();
// Fill area under curve
ctx.fillStyle = 'rgba(167, 243, 208, 0.1)';
ctx.beginPath();
ctx.moveTo(points[0].x, canvas.height);
for (let i = 0; i < visiblePoints; i++) {
ctx.lineTo(points[i].x, points[i].y);
}
ctx.lineTo(points[visiblePoints - 1]?.x || 0, canvas.height);
ctx.closePath();
ctx.fill();
animationProgress += 0.02;
if (animationProgress < 1) {
requestAnimationFrame(animate);
}
};
animate();
}
setupCounterAnimations() {
// Counter animation will be triggered by intersection observer
}
animateCounter(element) {
const target = parseInt(element.textContent.replace(/[^\d]/g, ''));
const duration = 2000;
const start = performance.now();
const suffix = element.textContent.replace(/[\d,]/g, '');
const animate = (currentTime) => {
const elapsed = currentTime - start;
const progress = Math.min(elapsed / duration, 1);
// Easing function
const easeOut = 1 - Math.pow(1 - progress, 3);
const current = Math.floor(target * easeOut);
element.textContent = current.toLocaleString() + suffix;
if (progress < 1) {
requestAnimationFrame(animate);
}
};
requestAnimationFrame(animate);
}
setupParallaxEffects() {
const parallaxElements = document.querySelectorAll('.hero-section');
window.addEventListener('scroll', () => {
const scrolled = window.pageYOffset;
parallaxElements.forEach(element => {
const speed = 0.3;
element.style.transform = `translateY(${scrolled * speed}px)`;
});
});
}
setupInteractiveElements() {
// Add hover effects to cards
const cards = document.querySelectorAll('.feature-card');
cards.forEach(card => {
card.addEventListener('mouseenter', () => {
card.style.transform = 'translateY(-15px) scale(1.02)';
});
card.addEventListener('mouseleave', () => {
card.style.transform = 'translateY(0) scale(1)';
});
});
// Add click ripple effect to buttons
const buttons = document.querySelectorAll('.btn');
buttons.forEach(button => {
button.addEventListener('click', (e) => {
const ripple = document.createElement('span');
const rect = button.getBoundingClientRect();
const size = Math.max(rect.width, rect.height);
const x = e.clientX - rect.left - size / 2;
const y = e.clientY - rect.top - size / 2;
ripple.style.cssText = `
position: absolute;
width: ${size}px;
height: ${size}px;
left: ${x}px;
top: ${y}px;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
transform: scale(0);
animation: ripple 0.6s ease-out;
pointer-events: none;
`;
button.style.position = 'relative';
button.style.overflow = 'hidden';
button.appendChild(ripple);
setTimeout(() => ripple.remove(), 600);
});
});
}
setupParticleSystem() {
const heroSections = document.querySelectorAll('.hero-section');
heroSections.forEach(section => {
this.createParticles(section);
});
}
createParticles(container) {
const canvas = document.createElement('canvas');
canvas.style.position = 'absolute';
canvas.style.top = '0';
canvas.style.left = '0';
canvas.style.width = '100%';
canvas.style.height = '100%';
canvas.style.pointerEvents = 'none';
canvas.style.zIndex = '1';
container.appendChild(canvas);
const ctx = canvas.getContext('2d');
const particles = [];
const resizeCanvas = () => {
canvas.width = container.offsetWidth;
canvas.height = container.offsetHeight;
};
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
// Create particles
for (let i = 0; i < 50; i++) {
particles.push({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
vx: (Math.random() - 0.5) * 0.5,
vy: (Math.random() - 0.5) * 0.5,
size: Math.random() * 2 + 1,
opacity: Math.random() * 0.5 + 0.1
});
}
const animate = () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
particles.forEach(particle => {
particle.x += particle.vx;
particle.y += particle.vy;
// Wrap around edges
if (particle.x < 0) particle.x = canvas.width;
if (particle.x > canvas.width) particle.x = 0;
if (particle.y < 0) particle.y = canvas.height;
if (particle.y > canvas.height) particle.y = 0;
// Draw particle
ctx.beginPath();
ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
ctx.fillStyle = `rgba(167, 243, 208, ${particle.opacity})`;
ctx.fill();
});
requestAnimationFrame(animate);
};
animate();
}
// Public method to reinitialize animations (for SPA navigation)
reinitialize() {
this.observeElements();
this.setupMarketplaceFlow();
this.setupOrderbookAnimation();
this.setupLiquidityPoolAnimation();
this.setupWireframeAnimations();
this.setupChartAnimations();
this.setupParticleSystem();
}
}
// Add CSS for ripple animation
const style = document.createElement('style');
style.textContent = `
@keyframes ripple {
to {
transform: scale(2);
opacity: 0;
}
}
`;
document.head.appendChild(style);
// Initialize animations
const freezoneAnimations = new FreezoneAnimations();
// Export for use in Yew components
window.freezoneAnimations = freezoneAnimations;
window.reinitializeAnimations = () => freezoneAnimations.reinitialize();

3312
website/styles/main.css Normal file

File diff suppressed because it is too large Load Diff

954
website/styles/main.scss Normal file
View File

@ -0,0 +1,954 @@
// Custom variables
:root {
--primary-color: #6366f1;
--secondary-color: #8b5cf6;
--accent-color: #06b6d4;
--success-color: #10b981;
--warning-color: #f59e0b;
--danger-color: #ef4444;
--dark-bg: #0f172a;
--darker-bg: #020617;
--light-text: #f8fafc;
--muted-text: #94a3b8;
--border-color: #334155;
}
// Dark theme by default
body {
background-color: var(--dark-bg);
color: var(--light-text);
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
}
// Custom scrollbar
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: var(--darker-bg);
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--muted-text);
}
// Header styles
.navbar {
background-color: rgba(15, 23, 42, 0.95) !important;
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
transition: all 0.3s ease;
}
.navbar-brand {
font-weight: 700;
font-size: 1.5rem;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.navbar-nav .nav-link {
color: var(--light-text) !important;
font-weight: 500;
transition: all 0.3s ease;
position: relative;
margin: 0 1.5rem;
&:hover {
color: var(--primary-color) !important;
}
&::after {
content: '';
position: absolute;
bottom: -5px;
left: 50%;
width: 0;
height: 2px;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
transition: all 0.3s ease;
transform: translateX(-50%);
}
&:hover::after {
width: 100%;
}
}
// Button styles
.btn-primary {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
border: none;
border-radius: 8px;
padding: 12px 24px;
font-weight: 600;
transition: all 0.3s ease;
&:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(99, 102, 241, 0.3);
}
}
.btn-outline-primary {
border: 2px solid var(--primary-color);
color: var(--primary-color);
background: transparent;
border-radius: 8px;
padding: 10px 22px;
font-weight: 600;
transition: all 0.3s ease;
&:hover {
background: var(--primary-color);
color: white;
transform: translateY(-2px);
}
}
// Hero section
.hero-section {
min-height: 100vh;
background: linear-gradient(135deg, var(--darker-bg) 0%, var(--dark-bg) 100%);
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle at 30% 20%, rgba(99, 102, 241, 0.1) 0%, transparent 50%),
radial-gradient(circle at 70% 80%, rgba(139, 92, 246, 0.1) 0%, transparent 50%);
pointer-events: none;
}
}
.hero-content {
position: relative;
z-index: 2;
}
.hero-title {
font-size: 4rem;
font-weight: 800;
background: linear-gradient(135deg, var(--light-text), var(--muted-text));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 1.5rem;
@media (max-width: 768px) {
font-size: 2.5rem;
}
}
.hero-subtitle {
font-size: 1.25rem;
color: var(--muted-text);
margin-bottom: 2rem;
max-width: 600px;
}
// Section styles
.section {
padding: 100px 0;
position: relative;
}
.section-title {
font-size: 2.5rem;
font-weight: 700;
margin-bottom: 1rem;
background: linear-gradient(135deg, var(--light-text), var(--muted-text));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.section-subtitle {
font-size: 1.1rem;
color: var(--muted-text);
margin-bottom: 3rem;
max-width: 600px;
}
// Card styles
.feature-card {
background: rgba(51, 65, 85, 0.1);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 2rem;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
&:hover {
transform: translateY(-10px);
border-color: var(--primary-color);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
}
}
.feature-icon {
width: 60px;
height: 60px;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1.5rem;
font-size: 1.5rem;
color: white;
}
// Marketplace animation
.marketplace-items {
display: flex;
gap: 1rem;
animation: flow 20s linear infinite;
}
.marketplace-item {
min-width: 200px;
background: rgba(51, 65, 85, 0.2);
border: 1px solid var(--border-color);
border-radius: 12px;
padding: 1rem;
backdrop-filter: blur(10px);
}
@keyframes flow {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
// Scroll animations
.fade-in {
opacity: 0;
transform: translateY(30px);
transition: all 0.8s ease;
&.visible {
opacity: 1;
transform: translateY(0);
}
}
.slide-in-left {
opacity: 0;
transform: translateX(-50px);
transition: all 0.8s ease;
&.visible {
opacity: 1;
transform: translateX(0);
}
}
.slide-in-right {
opacity: 0;
transform: translateX(50px);
transition: all 0.8s ease;
&.visible {
opacity: 1;
transform: translateX(0);
}
}
// Footer
.footer {
background-color: var(--darker-bg);
border-top: 1px solid var(--border-color);
padding: 3rem 0;
margin-top: 5rem;
}
// Asset showcase styles
.asset-showcase {
padding: 2rem 0;
h3 {
font-size: 2rem;
font-weight: 700;
margin-bottom: 1rem;
color: var(--light-text);
}
.lead {
font-size: 1.2rem;
color: var(--muted-text);
margin-bottom: 2rem;
}
.feature-list {
list-style: none;
padding: 0;
li {
padding: 0.5rem 0;
color: var(--light-text);
font-size: 1.1rem;
&::before {
content: '';
display: inline-block;
width: 4px;
height: 4px;
background: var(--primary-color);
border-radius: 50%;
margin-right: 1rem;
}
}
}
}
.asset-visual {
padding: 2rem;
display: flex;
align-items: center;
justify-content: center;
}
// Property tokenization demo
.tokenization-demo {
.property-card {
background: rgba(51, 65, 85, 0.2);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 1.5rem;
backdrop-filter: blur(10px);
max-width: 300px;
.property-image {
height: 120px;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
border-radius: 8px;
margin-bottom: 1rem;
position: relative;
&::after {
content: '🏢';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 2rem;
}
}
.property-details {
h5 {
color: var(--light-text);
margin-bottom: 0.5rem;
}
p {
color: var(--muted-text);
margin-bottom: 1rem;
}
.progress {
height: 8px;
background: rgba(51, 65, 85, 0.5);
border-radius: 4px;
margin-bottom: 0.5rem;
.progress-bar {
background: linear-gradient(135deg, var(--success-color), var(--accent-color));
border-radius: 4px;
}
}
small {
color: var(--success-color);
font-weight: 600;
}
}
}
}
// Service demo
.service-demo {
.service-card {
background: rgba(51, 65, 85, 0.2);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 1.5rem;
backdrop-filter: blur(10px);
max-width: 320px;
.service-provider {
display: flex;
align-items: center;
margin-bottom: 1.5rem;
.provider-avatar {
width: 50px;
height: 50px;
background: linear-gradient(135deg, var(--secondary-color), var(--primary-color));
border-radius: 50%;
margin-right: 1rem;
position: relative;
&::after {
content: '👨‍💼';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 1.5rem;
}
}
.provider-info {
h6 {
color: var(--light-text);
margin-bottom: 0.25rem;
}
p {
color: var(--muted-text);
font-size: 0.9rem;
margin: 0;
}
}
}
.service-contract {
.contract-status {
background: var(--success-color);
color: white;
padding: 0.5rem 1rem;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 600;
display: inline-block;
margin-bottom: 1rem;
}
.milestones {
.milestone {
padding: 0.5rem 0;
color: var(--muted-text);
&.completed {
color: var(--success-color);
}
&.active {
color: var(--warning-color);
}
}
}
}
}
}
// Digital assets demo
.digital-assets-demo {
.asset-grid {
display: grid;
gap: 1rem;
.digital-asset {
background: rgba(51, 65, 85, 0.2);
border: 1px solid var(--border-color);
border-radius: 12px;
padding: 1rem;
backdrop-filter: blur(10px);
.asset-type {
background: var(--primary-color);
color: white;
padding: 0.25rem 0.75rem;
border-radius: 12px;
font-size: 0.8rem;
font-weight: 600;
display: inline-block;
margin-bottom: 0.5rem;
}
h6 {
color: var(--light-text);
margin-bottom: 0.5rem;
}
p {
color: var(--muted-text);
font-size: 0.9rem;
margin: 0;
}
}
}
}
// Responsive
@media (max-width: 768px) {
.section {
padding: 60px 0;
}
.section-title {
font-size: 2rem;
}
.feature-card {
margin-bottom: 2rem;
}
.asset-showcase {
text-align: center;
margin-bottom: 3rem;
h3 {
font-size: 1.5rem;
}
}
.asset-visual {
margin-bottom: 2rem;
}
}
// Enhanced Asset Digitalization Styles
.asset-showcase {
padding: 2rem 0;
position: relative;
h3 {
font-size: 2.5rem;
font-weight: 700;
margin-bottom: 1.5rem;
color: var(--light-text);
background: linear-gradient(135deg, var(--light-text), var(--primary-color));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.lead {
font-size: 1.25rem;
color: var(--muted-text);
margin-bottom: 2rem;
line-height: 1.6;
}
.feature-list {
list-style: none;
padding: 0;
margin: 0;
li {
padding: 0.75rem 0;
color: var(--muted-text);
font-size: 1.1rem;
display: flex;
align-items: center;
transition: all 0.3s ease;
&:hover {
color: var(--light-text);
transform: translateX(5px);
}
&::before {
content: '';
display: inline-block;
width: 6px;
height: 6px;
background: var(--success-color);
border-radius: 50%;
margin-right: 1rem;
box-shadow: 0 0 8px var(--success-color);
}
}
}
}
.asset-visual {
padding: 2rem;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
// Enhanced Property Tokenization Demo
.tokenization-demo {
width: 100%;
max-width: 400px;
.property-card {
background: rgba(51, 65, 85, 0.1);
border: 1px solid var(--border-color);
border-radius: 20px;
padding: 2rem;
backdrop-filter: blur(15px);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(--primary-color), transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
&:hover {
transform: translateY(-5px);
border-color: var(--primary-color);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
&::before {
opacity: 1;
}
}
.property-image {
height: 140px;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
border-radius: 12px;
margin-bottom: 1.5rem;
position: relative;
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
overflow: hidden;
&::after {
content: '🏢';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 3rem;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
}
}
.property-details {
h5 {
color: var(--light-text);
margin-bottom: 0.75rem;
font-weight: 600;
font-size: 1.2rem;
}
p {
color: var(--muted-text);
margin-bottom: 1.5rem;
font-size: 1rem;
}
.progress {
height: 10px;
background: rgba(51, 65, 85, 0.5);
border-radius: 5px;
margin-bottom: 0.75rem;
overflow: hidden;
.progress-bar {
background: linear-gradient(90deg, var(--success-color), var(--accent-color));
border-radius: 5px;
transition: width 0.3s ease;
box-shadow: 0 0 10px rgba(16, 185, 129, 0.5);
}
}
small {
color: var(--success-color);
font-weight: 600;
font-size: 0.9rem;
}
}
}
}
// Enhanced Service Demo
.service-demo {
width: 100%;
max-width: 400px;
.service-card {
background: rgba(51, 65, 85, 0.1);
border: 1px solid var(--border-color);
border-radius: 20px;
padding: 2rem;
backdrop-filter: blur(15px);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(--secondary-color), transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
&:hover {
transform: translateY(-5px);
border-color: var(--secondary-color);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
&::before {
opacity: 1;
}
}
.service-provider {
display: flex;
align-items: center;
margin-bottom: 1.5rem;
padding-bottom: 1rem;
border-bottom: 1px solid var(--border-color);
.provider-avatar {
width: 60px;
height: 60px;
background: linear-gradient(135deg, var(--secondary-color), var(--primary-color));
border-radius: 50%;
margin-right: 1rem;
position: relative;
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
box-shadow: 0 4px 15px rgba(139, 92, 246, 0.3);
&::after {
content: '👨‍💼';
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
}
}
.provider-info {
h6 {
color: var(--light-text);
margin-bottom: 0.25rem;
font-weight: 600;
font-size: 1.1rem;
}
p {
color: var(--muted-text);
font-size: 0.9rem;
margin: 0;
}
}
}
.service-contract {
.contract-status {
background: var(--success-color);
color: white;
padding: 0.5rem 1rem;
border-radius: 20px;
font-size: 0.85rem;
font-weight: 600;
display: inline-block;
margin-bottom: 1rem;
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);
&.active {
background: var(--success-color);
}
}
.milestones {
display: flex;
flex-direction: column;
gap: 0.5rem;
.milestone {
padding: 0.75rem 1rem;
border-radius: 8px;
font-size: 0.9rem;
font-weight: 500;
transition: all 0.3s ease;
&.completed {
background: rgba(16, 185, 129, 0.1);
color: var(--success-color);
border-left: 3px solid var(--success-color);
}
&.active {
background: rgba(245, 158, 11, 0.1);
color: var(--warning-color);
border-left: 3px solid var(--warning-color);
animation: pulse 2s infinite;
}
&.pending {
background: rgba(51, 65, 85, 0.1);
color: var(--muted-text);
border-left: 3px solid var(--border-color);
}
}
}
}
}
}
// Enhanced Digital Assets Demo
.digital-assets-demo {
width: 100%;
max-width: 450px;
.asset-grid {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
.digital-asset {
background: rgba(51, 65, 85, 0.1);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 1.5rem;
backdrop-filter: blur(10px);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--primary-color), transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
&:hover {
transform: translateY(-3px);
border-color: var(--primary-color);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
&::before {
opacity: 1;
}
}
.asset-type {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
color: white;
padding: 0.4rem 1rem;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 600;
display: inline-block;
margin-bottom: 1rem;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);
}
h6 {
color: var(--light-text);
margin-bottom: 0.75rem;
font-weight: 600;
font-size: 1.1rem;
}
p {
color: var(--muted-text);
font-size: 0.95rem;
margin: 0;
line-height: 1.4;
}
}
}
}
// Enhanced responsive styles for asset digitalization
@media (max-width: 768px) {
.asset-showcase {
text-align: center;
margin-bottom: 3rem;
h3 {
font-size: 2rem;
}
.lead {
font-size: 1.1rem;
}
.feature-list li {
font-size: 1rem;
justify-content: center;
}
}
.asset-visual {
margin-bottom: 2rem;
padding: 1rem;
}
.property-card,
.service-card,
.digital-assets-demo {
max-width: 100%;
}
}
@media (max-width: 576px) {
.asset-showcase {
padding: 1rem 0;
h3 {
font-size: 1.75rem;
}
.lead {
font-size: 1rem;
}
}
.property-card,
.service-card {
padding: 1.5rem;
}
.digital-asset {
padding: 1.25rem;
}
}