diff --git a/apps/web/content/blog/neroswap-aggregator.mdx b/apps/web/content/blog/neroswap-aggregator.mdx new file mode 100644 index 0000000..3184cb2 --- /dev/null +++ b/apps/web/content/blog/neroswap-aggregator.mdx @@ -0,0 +1,59 @@ +--- +title: "Neroswap: a Privacy-First DEX & CEX Aggregator" +date: "2025-06-28" +excerpt: "How we built a real-time orderbook aggregator across 6 decentralized and centralized exchanges — with no KYC, no custody, and no tracking." +--- + +## The Problem + +If you want to trade Monero or Wownero today, your options are scattered across half a dozen exchanges — each with a different UI, different pair formats, and wildly different prices. Some are decentralized atomic swaps; others are no-KYC centralized platforms. Comparing prices means opening six browser tabs and doing mental math. + +[Neroswap](https://neroswap.com) fixes that. + +## What Neroswap Does + +Neroswap is a real-time aggregator that pulls orderbook and ticker data from six exchanges and displays it in a single, unified dashboard. You can see best prices at a glance, filter by exchange type (DEX vs CEX) or coin (XMR vs WOW), and click directly through to the source exchange to trade. + +The exchanges currently tracked are: + +- **BasicSwap** — SMSG-based atomic swaps for BTC, LTC, XMR, PART, WOW, FIRO, DASH, and more +- **Retoswap** — P2P exchange for XMR fiat/crypto pairs, trades settle over Tor +- **Eigenwallet** — BTC ↔ XMR trustless atomic swaps via Tor rendezvous +- **Nonlogs** — No-KYC Wownero-focused exchange with WOW/BTC and WOW/USDT +- **CexSwap** — Spot markets and AMM liquidity pools across 40+ coins +- **AltQuick** — No-KYC altcoin exchange with 25+ BTC-quoted markets + +Kraken reference prices are used to compute approximate USD values for every pair. + +## How the Data Pipeline Works + +Neroswap runs a fleet of Python scrapers on a dedicated server. Each scraper targets one exchange and runs every 10 minutes via cron: + +1. **Scraping** — Each script queries its exchange via REST API, gRPC, HTML-over-Tor, or direct RPC. BasicSwap and Retoswap are scraped via local full nodes; Eigenwallet via its Tor onion; Nonlogs, CexSwap, and AltQuick via public APIs. + +2. **Normalization** — Raw data is transformed into a common JSON schema with fields like `pair`, `price`, `amount`, `type` (bid/ask), and `source`. + +3. **Sync** — The JSON files are rsync'd to a CDN edge server over SSH every 10 minutes, right after the scrapers finish. + +4. **Serving** — The [neroswap.com](https://neroswap.com) frontend is a Next.js app using ISR (Incremental Static Regeneration). It fetches the JSON data from the CDN on each request with a 5-minute revalidation window, so the data is always fresh. + +5. **Rendering** — The frontend computes best bid/ask prices across all sources, applies Kraken USD reference rates, and renders sortable, filterable tables. Every row links back to the source exchange. + +## Privacy by Design + +Neroswap has no user accounts, no cookies, no tracking pixels, and no analytics. There is nothing to log and nothing to sell. The entire site is a read-only dashboard — it never touches your funds or your identity. + +All the DEX sources (BasicSwap, Eigenwallet) are fully decentralized with on-chain or cross-chain atomic settlement. The CEX sources (Nonlogs, CexSwap, AltQuick) are all no-KYC platforms. Retoswap trades happen entirely over Tor. + +## The Stack + +- **Frontend**: Next.js (App Router), React, TypeScript, Tailwind CSS +- **Scrapers**: Python scripts with requests, grpc, and stem (Tor) +- **Data transport**: rsync over SSH to CDN, served as static JSON +- **Infrastructure**: Systemd services, cron scheduling, PM2 process management + +## Try It + +Visit [neroswap.com](https://neroswap.com) to see the live dashboard. + +The project is built and maintained by [Such Software](/#contact). If you need a custom aggregator, scraping pipeline, or privacy-first web application, [get in touch](/#contact). diff --git a/apps/web/src/app/products/neroswap/page.tsx b/apps/web/src/app/products/neroswap/page.tsx new file mode 100644 index 0000000..219cf45 --- /dev/null +++ b/apps/web/src/app/products/neroswap/page.tsx @@ -0,0 +1,221 @@ +import { Header } from "@/components/layout/header"; +import { MobileNav } from "@/components/layout/mobile-nav"; +import { Card } from "@repo/ui/components/card"; +import { Button } from "@repo/ui/components/button"; +import Link from "next/link"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Neroswap — Aggregated DEX & CEX Orderbook Data | Such Software", + description: + "Real-time aggregated orderbook data across decentralized and centralized exchanges. Compare Monero, Wownero, and Bitcoin prices across BasicSwap, Retoswap, Eigenwallet, Nonlogs, CexSwap, and AltQuick — no KYC, no custody.", + alternates: { canonical: "/products/neroswap" }, + openGraph: { + title: "Neroswap — DEX & CEX Aggregator", + description: + "Compare crypto prices across 6 exchanges in real time. Privacy-focused, self-sovereign, no KYC.", + type: "website", + url: "https://such.software/products/neroswap", + }, + keywords: [ + "neroswap", + "dex aggregator", + "cex aggregator", + "monero exchange", + "wownero exchange", + "basicswap", + "atomic swap", + "no kyc exchange", + "crypto price comparison", + "decentralized exchange aggregator", + "privacy coin exchange", + ], +}; + +const exchanges = [ + { + name: "BasicSwap", + type: "DEX", + desc: "SMSG atomic swaps — BTC, LTC, XMR, PART, WOW, FIRO, DASH & more. Fully decentralized, on-chain settlement.", + }, + { + name: "Retoswap", + type: "DEX", + desc: "P2P exchange for XMR ↔ fiat and crypto pairs. Trades settle over Tor for maximum privacy.", + }, + { + name: "Eigenwallet", + type: "DEX", + desc: "BTC ↔ XMR trustless atomic swaps via Tor rendezvous. No intermediary at any point.", + }, + { + name: "Nonlogs", + type: "CEX", + desc: "No-KYC Wownero-focused exchange with WOW/BTC, WOW/USDT, and other pairs.", + }, + { + name: "CexSwap", + type: "CEX", + desc: "Wownero CEX with spot markets and AMM liquidity pools across 40+ coins.", + }, + { + name: "AltQuick", + type: "CEX", + desc: "No-KYC altcoin exchange with 25+ BTC-quoted markets including WOW and XMR.", + }, +]; + +const features = [ + { + title: "No KYC, No Custody", + desc: "Neroswap is a read-only aggregator. It never holds funds, never asks for identity, and has no accounts. You trade directly on the source exchange.", + }, + { + title: "Real-Time Data Pipeline", + desc: "Scrapers run every 10 minutes on our infrastructure, pulling live orderbooks and ticker data from all 6 exchanges. Data is served via CDN.", + }, + { + title: "Best Price Discovery", + desc: "The dashboard compares prices across all sources and highlights the best bid/ask for each pair. Filter by DEX, CEX, WOW, or XMR.", + }, + { + title: "Clickable Markets", + desc: "Every ticker row links directly to the market on the source exchange. Find the best price, click, and trade — no extra steps.", + }, + { + title: "Kraken Reference Prices", + desc: "BTC and XMR USD reference prices from Kraken are used to compute approximate USD values across all pairs.", + }, + { + title: "Open Architecture", + desc: "Next.js frontend with ISR caching. Python scrapers on a dedicated server. JSON data served over HTTPS. Easy to extend with new exchanges.", + }, +]; + +export default function NeroswapPage() { + return ( +
+
+
+ + ← Back to Products + + +

+ Neroswap +

+ +
+

+ Aggregated DEX & CEX orderbook data across decentralized and + centralized exchanges. Compare Monero, Wownero, and Bitcoin prices + in real time. No KYC. No custody. Self-sovereign. +

+
+ +
+ + + +
+ +

Supported Exchanges

+
+ {exchanges.map((ex) => ( + +
+

{ex.name}

+ + {ex.type} + +
+

{ex.desc}

+
+ ))} +
+ +

Features

+
+ {features.map((f) => ( + +

{f.title}

+

{f.desc}

+
+ ))} +
+ +
+

How It Works

+

+ Neroswap runs a fleet of Python scrapers on a dedicated server. Every + 10 minutes, each scraper pulls the latest orderbook or ticker data + from its exchange — via API, gRPC, or HTML scraping over Tor. The + results are merged into JSON files and synced to a CDN edge server. +

+

+ The{" "} + + neroswap.com + {" "} + frontend is a Next.js app with ISR caching. It fetches the cached + JSON on demand, computes best prices and USD estimates, and renders + sortable, filterable tables for each exchange. Every row links back + to the source exchange so you can trade immediately. +

+
+ +
+

Privacy First

+

+ Neroswap has no user accounts, no tracking, no cookies, and no + analytics. The site is a static read-only dashboard. All exchanges + listed are either fully decentralized (BasicSwap, Eigenwallet) or + no-KYC (Nonlogs, CexSwap, AltQuick). Retoswap trades are conducted + entirely over Tor. +

+
+ +
+ + + + + + +
+
+ +
+ ); +} diff --git a/apps/web/src/app/products/page.tsx b/apps/web/src/app/products/page.tsx index 255c58b..827f730 100644 --- a/apps/web/src/app/products/page.tsx +++ b/apps/web/src/app/products/page.tsx @@ -6,7 +6,7 @@ import type { Metadata } from "next"; export const metadata: Metadata = { title: "Products | Such Software", - description: "Tools and applications built by Such Software. Webshops, custom websites, Smirk Wallet, Bauhaus Echo, and Wownero Moon Launch.", + description: "Tools and applications built by Such Software. Neroswap, Webshops, custom websites, Smirk Wallet, Bauhaus Echo, and Wownero Moon Launch.", alternates: { canonical: "/products" }, openGraph: { title: "Products | Such Software", @@ -16,6 +16,12 @@ export const metadata: Metadata = { }; const products = [ + { + slug: "neroswap", + title: "Neroswap", + description: "Aggregated DEX & CEX orderbook data. Compare Monero, Wownero, and Bitcoin prices across 6 exchanges in real time.", + color: "yellow", + }, { slug: "webshops", title: "Webshops", @@ -61,6 +67,7 @@ const colorClasses: Record = { blue: "border-blue-500/30 hover:border-blue-500/60", pink: "border-pink-500/30 hover:border-pink-500/60", orange: "border-orange-500/30 hover:border-orange-500/60", + yellow: "border-yellow-500/30 hover:border-yellow-500/60", }; const titleColors: Record = { @@ -70,6 +77,7 @@ const titleColors: Record = { blue: "text-blue-600 dark:text-blue-400", pink: "text-pink-600 dark:text-pink-400", orange: "text-orange-600 dark:text-orange-400", + yellow: "text-yellow-600 dark:text-yellow-400", }; export default function ProductsPage() { diff --git a/apps/web/src/components/portfolio/bento-grid.tsx b/apps/web/src/components/portfolio/bento-grid.tsx index 231b85f..c96ca3a 100644 --- a/apps/web/src/components/portfolio/bento-grid.tsx +++ b/apps/web/src/components/portfolio/bento-grid.tsx @@ -64,7 +64,17 @@ export const PortfolioGrid = () => { - {/* Row 2: Privacy Labs (1x1) */} + {/* Row 2: Neroswap (1x1) */} + + +
+

Neroswap

+

DEX & CEX orderbook aggregator.

+
+
+ + + {/* Row 2-3: Privacy Labs (1x1) */}