Hedera Hello Future Apex Hackathon 2026 | Theme 4: Open Track
dURL is a decentralized URL shortener that stores short-link mappings on-chain via a Solidity smart contract deployed on the Hedera network. Once a link is created, it cannot be censored, modified, or taken down by any central authority, delivering truly immutable, censorship-resistant short URLs.
- About the Hackathon
- Features
- Architecture
- Tech Stack
- Hedera Integration
- Getting Started
- Environment Variables
- Smart Contract
- Project Structure
- Demo
- Submission Details
- Hackathon Resources
- License
The Hedera Hello Future Apex Hackathon brings together new and experienced builders worldwide to collaborate and compete virtually, with a $250K prize pool and five weeks of hacking.
- Hackathon Period: February 17 - March 23, 2026
- Track: Theme 4: Open Track
- Random Short URLs: Generate short links via
keccak256(sender, url, timestamp)hashing, completely free - Custom Short URLs: Reserve a custom short ID for 1 HBAR
- On-Chain Resolution: All URL mappings stored and resolved directly from the smart contract
- User Dashboard: View and manage all your created links from a personal dashboard
- Link Analytics: Track visit counts, geographic distribution, and referrer data
- QR Code Generation: Create customizable QR codes for any short link
- HCS Audit Trail: Every URL creation is logged to the Hedera Consensus Service for a public, timestamped, immutable audit trail
- Wallet Authentication: Connect via MetaMask to create and manage links
- Social Previews: Server-side rendered Open Graph metadata for link sharing
┌─────────────────────────────────────────────────────────┐
│ React Frontend │
│ (React 19 + TypeScript + Bootstrap 5) │
├──────────────┬──────────────────────┬───────────────────┤
│ MetaMask │ ethers.js v6 │ QR Code Styling │
│ Wallet │ (Contract Calls) │ + Chart.js │
└──────┬───────┴──────────┬───────────┴───────────────────┘
│ │
▼ ▼
┌──────────────┐ ┌───────────────────────────────────────┐
│ Hedera EVM │ │ Analytics Server (Express) │
│ (Hashio RPC) │ │ ┌─────────────┐ ┌────────────────┐ │
│ │ │ │ SQLite DB │ │ HCS Logger │ │
│ Smart │ │ │ (Analytics) │ │ (@hashgraph/ │ │
│ Contract │ │ │ │ │ sdk) │ │
└──────────────┘ │ └─────────────┘ └────────────────┘ │
└───────────────────────────────────────┘
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript, Bootstrap 5, SCSS |
| Blockchain Interaction | ethers.js v6 |
| Smart Contract | Solidity ^0.8.19 |
| Network | Hedera Testnet (Chain ID 296) via Hashio JSON-RPC Relay |
| Consensus Logging | Hedera Consensus Service (HCS) via @hashgraph/sdk |
| Analytics Backend | Express.js, better-sqlite3, geoip-lite |
| QR Codes | qr-code-styling |
| Charts | Chart.js + react-chartjs-2 |
| Visual Effects | Three.js + Vanta.js |
| Logging | Pino |
dURL leverages multiple Hedera network services:
-
Hedera EVM (Smart Contract Service): The
DURLShortener.solcontract is deployed on Hedera's EVM-compatible layer, accessed via the Hashio JSON-RPC relay. All URL mappings, ownership records, and payments are handled on-chain. -
Hedera Consensus Service (HCS): Every URL creation event is submitted as an HCS message, providing a publicly verifiable, timestamped audit trail independent of the smart contract state. Topic ID:
0.0.8191793 -
Native HBAR Payments: Custom short URL reservations require a payment of 1 HBAR (100,000,000 tinybars), processed natively through the smart contract's
payablefunction.
- Node.js >= 18
- npm
- MetaMask browser extension
- Hedera Testnet HBAR (faucet)
# Clone the repository
git clone https://github.com/MauriceBoendermaker/hedera_hackathon_2026.git
cd hedera_hackathon_2026/prototype
# Install dependencies
npm install
# Copy environment config
cp .env.example .env
# Edit .env with your values (see Environment Variables below)
# Start the app (frontend + analytics server)
npm startThis runs both the React frontend and the Express analytics server concurrently.
- Frontend:
http://localhost:3000 - Analytics API:
http://localhost:5000
npm run buildCopy .env.example to .env and configure:
| Variable | Description | Required |
|---|---|---|
REACT_APP_CONTRACT_ADDRESS |
Deployed DURLShortener contract address | Yes |
REACT_APP_CHAIN_ID |
Hedera Testnet chain ID (296) |
Yes |
REACT_APP_HEDERA_RPC_URL |
Hashio RPC endpoint | Yes |
REACT_APP_EXPLORER_URL |
HashScan explorer base URL | Yes |
REACT_APP_HCS_TOPIC_ID |
HCS topic ID for audit trail | Yes |
TOKEN_SECRET |
JWT secret for auth tokens | Yes |
IP_HASH_SECRET |
Secret for hashing visitor IPs | Yes |
OPERATOR_ID |
Hedera operator account ID (server-side HCS) | Yes |
OPERATOR_KEY |
Hedera operator private key (server-side HCS) | Yes |
HCS_TOPIC_ID |
HCS topic ID (server-side) | Yes |
RETENTION_DAYS |
Analytics data retention period (default: 90) | No |
Note: Never commit your
.envfile. The.env.exampleis provided as a template.
The DURLShortener contract (prototype/contracts/DURLShortener.sol) provides:
| Function | Description |
|---|---|
generateShortUrl(originalUrl) |
Create a free random short URL (8-char hash) |
createCustomShortUrl(customId, originalUrl) |
Reserve a custom short ID (costs 1 HBAR) |
getOriginalUrl(shortId) |
Resolve a short ID to its original URL |
getShortLink(shortId) |
Get full link details (URL + creation timestamp) |
getUserLinks(address) |
List all short IDs created by a wallet address |
shortIdExists(shortId) |
Check if a short ID is already taken |
Deployed Contract: 0xd8deBB79061f8eA999b6cF0f78D0e230367243cB
prototype/
├── analytics/
│ └── server.cjs # Express analytics server + HCS logger
├── contracts/
│ └── DURLShortener.sol # Solidity smart contract
├── public/ # Static assets & favicons
├── src/
│ ├── components/
│ │ ├── About.tsx # About page
│ │ ├── Dashboard.tsx # User link dashboard
│ │ ├── How-it-works.tsx # How it works page
│ │ ├── LinkAnalytics.tsx # Link analytics view
│ │ ├── PrivacyPolicy.tsx # Privacy policy
│ │ ├── ShortenPage.tsx # Main URL shortening page
│ │ ├── UrlForms.tsx # URL input forms
│ │ ├── misc/ # Nav, Footer, MouseDots
│ │ └── utils/ # QR modal, Feedback, ErrorBoundary, RedirectPage
│ ├── hooks/ # useTiltEffect, useDebounce
│ ├── utils/
│ │ ├── HederaConfig.ts # Hedera network configuration
│ │ ├── NetworkSwitcher.ts # MetaMask network switching
│ │ ├── hcsLogger.ts # HCS message submission
│ │ ├── auth.ts # Wallet authentication
│ │ ├── ethereum.js # ethers.js provider setup
│ │ └── isSafeUrl.ts # URL validation
│ ├── App.tsx # Root app component with routing
│ ├── config.ts # App configuration
│ └── index.tsx # Entry point
├── .env.example # Environment template
├── package.json
└── tsconfig.json
Demo Video: https://youtu.be/sh6hch3ivBg
Live Demo: https://durl.dev
- Track: Theme 4: Open Track
- Team size: 4 members
| Criteria | Weight |
|---|---|
| Execution | 20% |
| Success | 20% |
| Integration | 15% |
| Validation | 15% |
| Innovation | 10% |
| Feasibility | 10% |
| Pitch | 10% |
- Hackathon Website
- Resources Page
- Hedera Discord
- Program Calendar
- Hedera Documentation
- HashScan Explorer
- Hedera Testnet Faucet
This project is licensed under the MIT License, see the LICENSE file for details.