From 70a9cf5f1240f3e4a9d90fed54ab00e97aca3f2b Mon Sep 17 00:00:00 2001 From: acktarius Date: Fri, 30 Jan 2026 23:33:09 -0500 Subject: [PATCH 1/7] update exchange link --- src/components/sections/MarketsSection.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/sections/MarketsSection.tsx b/src/components/sections/MarketsSection.tsx index 6bd7a3a..71bb66d 100644 --- a/src/components/sections/MarketsSection.tsx +++ b/src/components/sections/MarketsSection.tsx @@ -36,11 +36,11 @@ export function MarketsSection() { From a7fd11ebec94af8f8d0de67c14d2e38dba68e218 Mon Sep 17 00:00:00 2001 From: Acktarius <94026250+Acktarius@users.noreply.github.com> Date: Mon, 2 Feb 2026 18:30:57 -0500 Subject: [PATCH 2/7] update links * BNB/wCCX * Nonlogs USDT/CCX --- src/components/sections/CommunitySection.tsx | 9 +++++++++ src/components/sections/MarketsSection.tsx | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/components/sections/CommunitySection.tsx b/src/components/sections/CommunitySection.tsx index c650089..6baa476 100644 --- a/src/components/sections/CommunitySection.tsx +++ b/src/components/sections/CommunitySection.tsx @@ -78,6 +78,7 @@ const exchangesData: ColumnData = { items: [ { label: 'nonKYC CCX/BTC', url: 'https://nonkyc.io/market/CCX_BTC' }, { label: 'nonKYC CCX/USDT', url: 'https://nonkyc.io/market/CCX_USDT' }, + { label: 'nonlogs CCX/USDT', url: 'https://nonlogs.io/trade/CCX-USDT' }, ], }; @@ -127,6 +128,14 @@ const bscData: ColumnData = { label: 'PancakeSwap - wCCX/USDT', url: 'https://pancakeswap.finance/swap?inputCurrency=0x55d398326f99059fF775485246999027B3197955&outputCurrency=0x988c11625472340b7b36ff1534893780e0d8d841', }, + { + label: 'MEXC DEX - wCCX/BNB', + url: 'https://www.mexc.com/dex/trade?pair_ca=0x523d5d8ae2f38dd2d8900eb195c132ff19bf6d18&chain_id=56&token_ca=0x988c11625472340b7b36ff1534893780e0d8d841', + }, + { + label: 'KyberSwap - wCCX/BNB', + url: 'https://kyberswap.com/swap/bnb/-to-0x988c11625472340b7b36ff1534893780e0d8d841', + }, ], }; diff --git a/src/components/sections/MarketsSection.tsx b/src/components/sections/MarketsSection.tsx index 71bb66d..b773ad5 100644 --- a/src/components/sections/MarketsSection.tsx +++ b/src/components/sections/MarketsSection.tsx @@ -108,6 +108,24 @@ export function MarketsSection() { Bakeryswap + + Date: Mon, 2 Feb 2026 18:36:19 -0500 Subject: [PATCH 3/7] fix lint --- src/components/sections/RoadmapSection.tsx | 40 +++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/components/sections/RoadmapSection.tsx b/src/components/sections/RoadmapSection.tsx index 054b48b..100b97e 100644 --- a/src/components/sections/RoadmapSection.tsx +++ b/src/components/sections/RoadmapSection.tsx @@ -209,14 +209,16 @@ const timelineItems: TimelineItem[] = [ { date: 'Q4 2025', title: 'Conceal Labs', - description: 'Conceal Authenticator app is launched, your 2FA keys are now stored on the blockchain', + description: + 'Conceal Authenticator app is launched, your 2FA keys are now stored on the blockchain', status: 'completed', url: 'https://f-droid.org/en/packages/com.acktarius.concealauthenticator/', }, { date: 'Q1 2026', title: 'Conceal Labs', - description: 'Conceal-Faucet-API is launched, "one stop shop" for developpers to create faucet or game rewards', + description: + 'Conceal-Faucet-API is launched, "one stop shop" for developpers to create faucet or game rewards', status: 'completed', url: 'https://github.com/ConcealNetwork/conceal-faucet-api', }, @@ -262,10 +264,10 @@ export function RoadmapSection() { if (!sectionRef.current) return; const sectionRect = sectionRef.current.getBoundingClientRect(); - + // Only apply effect if roadmap section is in viewport const isSectionVisible = sectionRect.bottom > 0 && sectionRect.top < window.innerHeight; - + if (!isSectionVisible) { // Reset all scales if section is not visible const resetScales = new Map(); @@ -289,8 +291,8 @@ export function RoadmapSection() { // Map distance to scale: 1.22 at center, 1.0 at maxDistance const normalizedDistance = Math.min(1, distanceFromCenter / maxDistance); - const scale = 1.0 + (0.22 * (1 - normalizedDistance)); // 1.6 at center, 1.0 at maxDistance - + const scale = 1.0 + 0.22 * (1 - normalizedDistance); // 1.6 at center, 1.0 at maxDistance + newScales.set(index, scale); }); @@ -311,7 +313,11 @@ export function RoadmapSection() { }, []); return ( -
+
{/* Background image */}
)} - {item.description && — {item.url ? {item.description} : item.description}} + {item.description && ( + + {' '} + —{' '} + {item.url ? ( + + {item.description} + + ) : ( + item.description + )} + + )}
From 047d9246a3ce734ab8152f5ac18ba8ff40d2c4f7 Mon Sep 17 00:00:00 2001 From: acktarius Date: Fri, 13 Feb 2026 16:15:29 -0500 Subject: [PATCH 4/7] add exchanges --- src/components/sections/MarketsSection.tsx | 46 +++++++++------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/src/components/sections/MarketsSection.tsx b/src/components/sections/MarketsSection.tsx index b773ad5..d84b5a0 100644 --- a/src/components/sections/MarketsSection.tsx +++ b/src/components/sections/MarketsSection.tsx @@ -1,6 +1,13 @@ import { Button } from '@/components/ui/Button'; import { SectionHeading } from '@/components/ui/SectionHeading'; +const exchanges = [ + { label: 'nonKYC BTC/CCX', href: 'https://nonkyc.io/market/CCX_BTC' }, + { label: 'nonKYC USDT/CCX', href: 'https://nonkyc.io/market/CCX_USDT' }, + { label: 'Nonlogs USDT/CCX', href: 'https://nonlogs.io/trade/CCX-USDT' }, + { label: 'AnonEx USDT/CCX', href: 'https://anonex.io/market/CCX_USDT' }, +]; + export function MarketsSection() { return ( <> @@ -15,33 +22,18 @@ export function MarketsSection() {
Buy CCX} title="Markets" />
- - - + {exchanges.map((exchange) => ( + + ))}
From 737da2cbcfeea650959c0c21b370c5b7281e201b Mon Sep 17 00:00:00 2001 From: acktarius Date: Sat, 14 Feb 2026 17:21:55 -0500 Subject: [PATCH 5/7] fix links --- src/components/sections/CryptoWidgetSection.tsx | 2 +- src/components/sections/MarketsSection.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/sections/CryptoWidgetSection.tsx b/src/components/sections/CryptoWidgetSection.tsx index 9dc360e..8284826 100644 --- a/src/components/sections/CryptoWidgetSection.tsx +++ b/src/components/sections/CryptoWidgetSection.tsx @@ -133,7 +133,7 @@ export function CryptoWidgetSection() {
Data provided by Date: Sat, 14 Feb 2026 17:22:56 -0500 Subject: [PATCH 6/7] fix linting errors --- src/components/sections/MarketsSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/sections/MarketsSection.tsx b/src/components/sections/MarketsSection.tsx index 952011f..4edb65d 100644 --- a/src/components/sections/MarketsSection.tsx +++ b/src/components/sections/MarketsSection.tsx @@ -5,7 +5,7 @@ const exchanges = [ { label: 'nonKYC BTC/CCX', href: 'https://nonkyc.io/market/CCX_BTC' }, { label: 'nonKYC USDT/CCX', href: 'https://nonkyc.io/market/CCX_USDT' }, { label: 'Nonlogs USDT/CCX', href: 'https://nonlogs.io/trade/CCX-USDT' }, -// { label: 'AnonEx USDT/CCX', href: 'https://anonex.io/market/CCX_USDT' }, + // { label: 'AnonEx USDT/CCX', href: 'https://anonex.io/market/CCX_USDT' }, ]; export function MarketsSection() { From a345725138677a6d2ff1282ad5b0ecc3cceea82b Mon Sep 17 00:00:00 2001 From: acktarius Date: Sat, 14 Feb 2026 18:33:21 -0500 Subject: [PATCH 7/7] add price fallback --- public/external/logo/coinpaprika.ico | Bin 0 -> 5430 bytes .../sections/CryptoWidgetSection.tsx | 98 ++++++++++++++---- src/components/sections/HeroSection.tsx | 8 +- 3 files changed, 79 insertions(+), 27 deletions(-) create mode 100644 public/external/logo/coinpaprika.ico diff --git a/public/external/logo/coinpaprika.ico b/public/external/logo/coinpaprika.ico new file mode 100644 index 0000000000000000000000000000000000000000..8771f826da7bf2c971370a32a2c44fe70420a869 GIT binary patch literal 5430 zcmchbT}TvB7>18Os7RzpL`38g5fVoJlx+WN#a0j*65&OKcp(y9M1({{2}MLikywOu zVFpprg+vfS#ma_}7u8irMC?@;5+wy9ws?BJ-8subrmbMMky5vrH>!df1SP>`q<@+bU%&jR$D(-0*7D_#^3`yh10OiO-#HE z5}+NJqW=n%&&@;MF$axZu5r$lOUrB=cf%*>hhF#$c3RUnL0pE+b|Y2{r(hb4W^VhA zScz={tCP5l+gx4taYqjQQuH$}IY!;|5<@HZFWWPFKS`|2EeG+#E_%teI)}cTb0%GK zG`Q&{hW4(}uWNdvH?$3>*m(50+@B@$(1+KBNA=e8k94H>p58ZnGeuoAb~cyR#PQkP z(DJf>%b6#MJwtsnR*pgwUr38~IV51|LUeL2ng}e0esFw-o${jD4g>H2QuR-2rDD}e z^;AHqQpqBvW`%+@nl{5l_T%u|;#Yc}31JuknUB0~jByRL!&Ml7hj0hZ!9l3v@(SdgV21U+p|6B%;5NtD)nNK$zH9SR0Xi9DnFCEOKkaMs{52oD z)x^2y1M+vIk9E{LtoqqnKy2_Cld68*BiKLAUgFF!#&Z|D#B@Ru4oJ)0v$FYnAZA2mGl<1bpg`+WFM2H+p| z;V<`KWdJqEdgt{y+#Gzl< zQ)@IJe_1DO=i~alG5iMgrjtWDeEg|y?i1KDFQ2`a=BM7m`2Mx#Vkr>4pQZ{_!)urd=O-?R)*Ps|WumjMeRo zC(~oiH{J8zf9kQ*2H8gqi{J=6u8WR*(null); + const [price, setPrice] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(false); useEffect(() => { - // Fetch price from CoinGecko API + // Fetch price from CoinGecko API (primary) or CoinPaprika (fallback) const fetchPrice = async () => { try { - // Try common Conceal Network coin IDs - const coinIds = ['conceal-network', 'conceal', 'ccx']; + // Try CoinGecko first + const coinIds = ['conceal', 'conceal-network']; + let coingeckoSuccess = false; for (const coinId of coinIds) { try { const response = await fetch( - `https://api.coingecko.com/api/v3/simple/price?ids=${coinId}&vs_currencies=usd&include_24hr_change=true` + `https://api.coingecko.com/api/v3/simple/price?ids=${coinId}&vs_currencies=usd&include_24hr_change=true`, + { + mode: 'cors', + headers: { + Accept: 'application/json', + }, + } ); if (response.ok) { @@ -30,26 +38,58 @@ export function CryptoWidgetSection() { setPrice({ usd: data[coinId].usd, usd_24h_change: data[coinId].usd_24h_change || 0, + source: 'coingecko', }); setLoading(false); setError(false); + coingeckoSuccess = true; return; } } else if (response.status === 429) { - // Rate limited - wait longer before retry - console.warn('CoinGecko API rate limited'); - setError(true); - setLoading(false); - return; + // Rate limited - will try fallback + console.warn('CoinGecko API rate limited, trying fallback...'); + break; } } catch (err) { - console.error(`Error fetching price for ${coinId}:`, err); + // CORS or network error - will try fallback + console.warn(`CoinGecko failed for ${coinId}, trying fallback...`); } } - // If none worked, set error - setError(true); - setLoading(false); + // If CoinGecko failed, try CoinPaprika as fallback + if (!coingeckoSuccess) { + try { + // CoinPaprika API - ticker ID is ccx-conceal + const response = await fetch('https://api.coinpaprika.com/v1/tickers/ccx-conceal', { + mode: 'cors', + headers: { + Accept: 'application/json', + }, + }); + + if (response.ok) { + const data = await response.json(); + if (data.quotes?.USD) { + setPrice({ + usd: data.quotes.USD.price, + usd_24h_change: data.quotes.USD.percent_change_24h || 0, + source: 'coinpaprika', + }); + setLoading(false); + setError(false); + return; + } + } + } catch (err) { + console.error('CoinPaprika API failed:', err); + } + } + + // If both APIs failed, set error + if (!coingeckoSuccess) { + setError(true); + setLoading(false); + } } catch (err) { console.error('Error in fetchPrice:', err); setError(true); @@ -132,14 +172,26 @@ export function CryptoWidgetSection() {
Data provided by - - CoinGecko - + {price.source === 'coingecko' ? ( + + CoinGecko + + ) : ( + + CoinPaprika{' '} + CoinPaprika + + )}
diff --git a/src/components/sections/HeroSection.tsx b/src/components/sections/HeroSection.tsx index caa1205..6eca52e 100644 --- a/src/components/sections/HeroSection.tsx +++ b/src/components/sections/HeroSection.tsx @@ -56,16 +56,16 @@ export function HeroSection({ onMount }: HeroSectionProps) { {/* Call-to-action buttons */}