A lightweight, privacy-friendly landing page for the Signum, built with Vite + React + Tailwind and deployed on Cloudflare Pages.
- No YouTube embeds — only links to YouTube
- Fonts & images are locally hosted
- Cookie banner: Essential cookies only
- Features
- Tech Stack
- Project Structure
- Local Development
- Build
- Deployment (Cloudflare Pages)
- Privacy & Cookies
- SignumJS Example
- Contributing
- License
- ✅ Fast static site (Vite)
- ✅ Responsive UI with Tailwind
- ✅ XT-Wallet and SignumJS Integration
- ✅ Privacy-first setup (no third-party font/CDN calls)
- ✅ YouTube links only (no embedded players)
- ✅ “Essential cookies only” consent banner (configurable delay + re-ask interval)
- ✅ Ready for Cloudflare Pages deployment
- Vite
- React
- Tailwind CSS
- Optional:
react-router-dom(if you use routing)
Typical layout:
├─ public/
├─ src/
│ ├─ assets/
│ ├─ components/
│ ├─ pages/
│ ├─ lib/
│ │ ├─ hooks/
│ │ └─ utils/
│ ├─ main.tsx
│ └─ App.tsx
├─ index.html
├─ package.json
└─ vite.config.ts
- Node.js (LTS recommended)
- npm
npm install
npm run devOpen the local URL printed by Vite.
npm run build
npm run previewThe production build is generated in dist/.
Cloudflare Pages settings (typical):
- Framework preset: Vite (or React)
- Build command:
npm run build - Build output directory:
dist
If you use SPA routes (React Router), configure Cloudflare Pages to serve index.html for unknown paths (single-page-app fallback).
This project is designed to be privacy-friendly:
- No third-party Google Fonts downloads (fonts are hosted locally)
- No third-party image/CDN calls for assets
- YouTube is linked to directly — no iframe embed, no player integration
Cookie banner behavior (recommended defaults):
- Shows after 2 seconds
- If user chooses “Essential only”, store the choice and do not ask again for 90 days
Your Privacy Policy is available at:
/privacypolicy
Note: If you truly only use essential cookies (e.g., storing consent choice), in many jurisdictions you don’t need an “accept all” flow — but you should still clearly inform users what’s stored and why.
A tiny example using SignumJS to check node status:
import { LedgerClientFactory } from "@signumjs/core";
async function main() {
const ledger = LedgerClientFactory.createClient({
nodeHost: "https://europe.signum.network",
});
const status = await ledger.network.getBlockchainStatus();
console.log(
`Height: ${status.numberOfBlocks} | State: ${status.blockchainState}`
);
}
main().catch(console.error);PRs welcome.
Suggested workflow:
- Fork the repo
- Create a feature branch:
git checkout -b feat/my-change - Commit with a clear message
- Open a PR with a short description + screenshots if UI changes
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
See: LICENSE