Decentralized workplace app on Polkadot. Forms, access passes, and on-chain identity in a modular dashboard.
Product Owner: Dennis Schiessl, Parity Technologies Target Distribution: Polkadot Triangle (Desktop, Mobile, Web) Last Updated: May 2026
| Channel | URL |
|---|---|
| Polkadot Desktop | intran3t.dot |
| Browser | https://intran3t.dot.li |
Intran3t is a modular intranet-style app running fully on Polkadot. It demonstrates core workplace primitives built on decentralized infrastructure: on-chain desk and room booking, forms with encrypted responses, NFT-based access passes, and People Chain identity.
It runs inside the Polkadot Triangle host (Desktop/Mobile/Web) and uses the Product SDK to integrate with the host's account and signing system. In standalone browser mode, it connects to Substrate wallet extensions directly.
| Layer | Technology |
|---|---|
| Framework | React 18 + TypeScript + Vite |
| Styling | Tailwind CSS 4 |
| Chain API | PAPI (polkadot-api) |
| Host integration | @novasamatech/product-sdk |
| EVM interaction | ethers.js 6 |
| Identity | @polkadot/util-crypto, decodeAddress |
| Storage | Bulletin Chain (content), localStorage (keys) |
| Hosting | DotNS (bulletin-deploy) |
- Paseo Asset Hub (testnet): Smart contracts (FormsV2, AccessPass), account mapping (
pallet_revive) - Paseo People Chain: On-chain identity verification
- Paseo Bulletin Chain: Decentralized content storage (form definitions, encrypted responses)
Displays on-chain identity from People Chain: verified name, social accounts (Matrix, GitHub, Twitter, Discord, email, website), real-time balance, and identicon.
Privacy-preserving form builder with wallet-less submission:
- Creator builds a form and uploads it to Bulletin Chain
- Form is registered on the FormsV2 contract (on-chain CID index)
- Respondents submit via a public link with no wallet needed (Alice relay pays gas on testnet)
- Responses are AES-256-GCM encrypted before upload to Bulletin
- Admin fetches and decrypts responses on demand
- Full on-chain audit trail via the FormsV2 contract
Fully on-chain desk and meeting room booking for Berlin, London, and Lisbon:
- Interactive floor maps with per-desk booking state read from chain
- Multi-date desk booking via
bookBatch(single transaction) - 30-minute meeting room slots with on-chain reservation
- Booker identity resolved from People Chain registry, shown as initials on the floor map
- Who's-in-today banner aggregates all bookers for the selected date
- QR code access pass auto-generated after successful booking, shown under My Bookings
- Smart contract:
OfficeBooking.solon Paseo Asset Hub (mapping locationId → date → resourceId → booker)
ERC-721 access passes as NFTs via the AccessPass smart contract:
- Mint location-specific access passes
- Substrate wallets sign EVM transactions via
pallet_reviveaccount mapping - Deterministic Substrate-to-EVM address derivation (
keccak256(AccountId32)last 20 bytes)
Substrate wallets need to be mapped once before signing EVM transactions:
- Derive EVM address from Substrate address
- Check on-chain via
pallet_revive.OriginalAccount - Call
pallet_revive.map_account()to register - Mapping state cached in localStorage after confirmation
All deployed on Paseo Asset Hub (chain ID 420420417):
| Contract | Address |
|---|---|
| FormsV2 | 0xe2F988c1aD2533F473265aCD9C0699bE47643316 |
| AccessPass | 0xfd2a6Ee5BE5AB187E8368025e33a8137ba66Df94 |
| OfficeBooking | 0x311387B85F6d24e87E520b25cca4A706c5574EFf |
The app detects whether it runs inside the Polkadot Triangle host (window.__HOST_WEBVIEW_MARK__ or iframe) and adjusts accordingly:
- In host: Uses
createPapiProvider(genesisHash, wsProvider)to route chain calls through the host's light client, with WS as fallback. Accounts and signing are injected by the host viainjectSpektrExtension. - Standalone: Connects to WS RPC endpoints directly, prompts for Substrate wallet extension.
| Data | Storage |
|---|---|
| Form definitions | Bulletin Chain |
| Encrypted responses | Bulletin Chain |
| CID index (forms/responses) | FormsV2 smart contract |
| Encryption keys | localStorage (creator only) |
| Identity data | People Chain (permanent, on-chain) |
| Access passes | AccessPass smart contract (ERC-721) |
| Desk/room bookings | OfficeBooking smart contract |
- Respondent loads public form link (no wallet required)
- Form content fetched from Bulletin via CID stored in contract
- Response encrypted client-side with form's AES-256-GCM key
- Alice relay (testnet) uploads encrypted response to Bulletin
- Alice relay submits response CID to FormsV2 contract
- Admin decrypts using key from localStorage
node >= 22
npmgit clone https://github.com/dennisparity/intran3t.git
cd intran3t
npm installCopy .env.example to .env:
VITE_ASSETHUB_EVM_RPC=https://eth-rpc-testnet.polkadot.io
VITE_ASSETHUB_EVM_CHAIN_ID=420420417
VITE_FORMS_CONTRACT_ADDRESS=0xe2F988c1aD2533F473265aCD9C0699bE47643316
VITE_ACCESSPASS_CONTRACT_ADDRESS=0xfd2a6Ee5BE5AB187E8368025e33a8137ba66Df94
VITE_OFFICE_CONTRACT_ADDRESS=0x311387B85F6d24e87E520b25cca4A706c5574EFf
VITE_RELAY_PRIVATE_KEY=<Alice_private_key> # Testnet onlynpm run devnpm run buildUses bulletin-deploy CLI:
# Build first
npm run build
# Deploy to Bulletin + update DotNS in one command
set -a; source .env; set +a
NODE_OPTIONS="--max-old-space-size=8192" bulletin-deploy ./dist intran3t.dot --js-merkleMNEMONIC must be set in .env. The CLI self-grants PoP on testnet when needed.
Re-deploy from pre-built CAR (faster, skips merkleization):
BULLETIN_RPC="wss://paseo-bulletin-next-rpc.polkadot.io" \
NODE_OPTIONS="--max-old-space-size=8192" \
bulletin-deploy --input-car dist.bulletin.car intran3t.dot --js-merklesrc/
providers/
WalletProvider.tsx # Wallet state, PAPI client, account mapping
modules/
profile/ProfileWidget.tsx # People Chain identity display
forms/FormsWidget.tsx # Form creation with auto account mapping
forms/PublicForm.tsx # Wallet-less public submission
acc3ss/Acc3ssWidget.tsx # NFT access pass minting
office-booking/
config.ts # Office/desk/room data + contract config
types.ts # Shared types
OfficeBookingCard.tsx # Dashboard card with office shortcuts
components/
FloorMap.tsx # Interactive floor plan (PNG + desk overlays)
MonthCalendar.tsx # Custom date picker (Mon-Fri only)
hooks/
useSubstrateEVMSigner.ts # Substrate wallet EVM signing
useAccountMapping.ts # Mapping check and trigger
useFormsContract.ts # FormsV2 contract interactions
useOfficeBookingContract.ts # OfficeBooking reads + writes
lib/
bulletin-storage.ts # Bulletin upload/fetch
forms-encryption.ts # AES-256-GCM encryption
wallet-provider.ts # Extension detection utilities
pages/
ModularDashboard.tsx # Main dashboard
OfficePage.tsx # Full office booking UI (desks/rooms/bookings)
AdminFormResults.tsx # Response viewing and decryption
contracts/solidity/contracts/
OfficeBooking.sol # On-chain booking registry
MIT License. Copyright (c) 2026 Dennis Schiessl / Parity Technologies.