Terms of Use
Hive, last updated 24 October 2026.
By using Hive you agree to these terms. The user guide below them is part of this page.
The service
Hive shows .nim names from the Pigeon registry on the Nimiq chain as cells in a hive. A name owner can publish a site in their cell (upload a .zip or link a site on their own server), connect their own domain to it, choose what visitors see, sign settings, give their app a database, sell products and receive tips, and see the players of their app as bees. Players can sign in to apps with their wallet and choose which of their names shows in a cell.
Your name, your responsibility
- Only the owner of a name can manage its cell. Ownership is proven by a signature from the wallet that owns the name.
- You are responsible for the sites, files, settings and data you publish under your name, and for the apps you run on Hive.
- If your app stores anything about its players, give it its own privacy page and say what you store and who can see it. The guide below shows how.
- Hive never holds your funds and never asks for your recovery words. Signing a message sends no money.
- Selling and tips: payments go from the buyer's wallet straight to the name owner's wallet. Hive only opens the bill and watches the chain; it is not a party to the sale, takes no fee and cannot refund. The owner is the seller: delivery, refunds, taxes and consumer rules are the owner's responsibility.
- Your own domain: connect only a domain you control. A domain that points to Hive without the ownership record is not connected.
Not allowed
- Phishing, fake wallets or anything that tricks people into giving away keys or funds.
- Malware, programs or installers. Uploaded sites may contain only website files; the guide lists the accepted types.
- Illegal content, or content that infringes someone else's rights.
- Storing other people's private data without telling them.
- Attempts to overload the service or to get around limits.
We may remove a site, delete data or disable publishing for a name that breaks these rules. Report abuse to hive@heylogram.com.
Limits
Each name has limits: a site up to 20 MB, and for its database 50,000 reads and 20,000 writes per day, 50 MB in total and 1 MB per document. Requests over a limit are refused.
Names and the chain
Names and sub-names are registered on the Nimiq chain through Pigeon, not by Hive. Records on the chain are public and permanent; nobody, including us, can change or delete them.
No warranty
Hive is provided as is, without warranties. We are not liable for losses arising from the use of Hive, of the apps built on it, or of sites published on it.
Changes
We may update these terms and the guide. The date at the top shows the latest version.
Contact
hive@heylogram.com
User guide
Every .nim name is a cell in the hive. If you own the name, the cell is yours: put a website in it, choose what visitors see, keep signed settings and give your app its own database. Visitors show up as bees.
Quick start
- 1. Get a .nim name in Pigeon. Your cell appears in the hive on its own.
- 2. Open hive.heylogram.com in Nimiq Pay (phone) or in a browser with the Heylogram Wallet extension (computer).
- 3. Tap your cell, then Is this cell yours? Sign in. You sign a message; no money moves.
- 4. Put your site in from the Site tab: upload a .zip, or link a site you already host with one line.
Get a name in Pigeon
Everything starts with a .nim name. You get it in Pigeon, the Nimiq Pay mini app for paying by name. In Pigeon a name is called a "ring".
- 1. Open pigeon.heylogram.com inside Nimiq Pay.
- 2. Tap Get ring and type the name you want: letters, digits and single dashes.
- 3. If it says "This ring is free", Pigeon shows the price. Shorter names cost more.
- 4. Tap Engrave the ring and approve the payment in your wallet. After a few seconds: "The ring is yours". It has no end date.
Your cell is born. The moment the name is yours, a new cell grows in the hive from wax, and you are its first bee.
Names live on the Nimiq chain. The first valid registration of a name wins, and nobody can take it from you later.
Explore the hive
The hive is a map of every .nim name. Older names sit near the top, new names grow the hive downward. Cells with a live site glow with honey.
- 1. Move around: drag to pan, pinch or scroll to zoom.
- 2. Find a name: type it in the search box (with or without .nim) and press Find. If the name is free, Hive shows its price and tells you to get it in Pigeon.
- 3. Go inside: tap a cell. The camera dives in and you see the cell's page: its big name, whether its site is live, how long it has been in the hive, and the cards its owner chose to show.
- 4. Come back: press Back to hive, or your phone's back button. Share copies a link straight to the cell.
Night and day. The hive follows your device's light or dark theme. The moon / sun button at the top switches it by hand.
Sign in with your wallet
Anyone can look at a cell. Only the wallet that owns the name can change it.
- 1. Open your cell and tap Is this cell yours? Sign in at the top. The button says "Looking for a wallet…" for a moment.
- 2. Your wallet asks you to sign a short message. Approve it.
- 3. You see "Welcome, yourname.nim" and the owner side of your cell opens.
If no wallet answers, Hive shows two ways in:
- Phone: Open in Nimiq Pay. Copy the link Hive shows and open it inside Nimiq Pay; the wallet is ready there.
- Computer: Heylogram Wallet. Install the Chrome extension, or use the Webboos browser where the wallet is built in. Refresh the page and press Sign in again.
Signing is not paying. A signature only proves the name is yours. It sends no money and costs no fee. Your sign-in lasts 24 hours; Sign out ends it earlier.
If you see "This wallet does not own yourname.nim", the account open in your wallet is not the one that holds the name. Switch accounts and try again.
Inside your cell
Your cell has two faces. Visitors see your page: your name, your intro and the cards you chose. You, signed in, see the tools. They are tabs: on a computer down the left side, on a phone in the bar at the bottom.
- Overview: Vault, page and site at a glance.
- My page: What visitors see, in what order, your intro and accent colour.
- Vault: Your wallet balance and whether visitors may see it.
- Site: Upload a .zip or link your own server.
- Settings: Signed key and value rows your app reads.
- Data: Your database console.
- Bees: Your users and today's visitors.
Vault, settings and data are never shown to visitors, unless you turn the vault on for your page yourself.
Upload a site (.zip)
Already built your site? Pack it into one .zip and drop it into your cell. Hive hosts it for you, and every visitor is counted on its own.
- 1. Build your site so it is plain files: index.html plus its scripts, styles and images.
- 2. Zip the contents of the folder, so that index.html sits at the top of the zip, not inside a subfolder.
- 3. In the Site tab pick Upload files, tap Choose file and pick the .zip.
- 4. Tap Upload built site (.zip). When it says "yourname.nim is live", your cell fills with honey.
On a phone?. Uploading a zip is hard on a phone. Tap Send me the link or Copy, open the link on a computer, sign in there and carry on.
- Size: At most 20 MB per zip.
- Must have: index.html at the top of the zip.
- Page title: The <title> of your index.html becomes the site name shown in your cell.
- New upload: Replaces the old site completely.
Which files are accepted
Only files a website needs. If the zip holds anything else, the whole upload is refused and Hive lists the files that blocked it.
- Pages and code: .html .htm .js .mjs .css .json .map .txt .xml .webmanifest .wasm
- Images: .png .jpg .jpeg .gif .webp .avif .svg .ico
- Fonts: .woff2 .woff .ttf .otf
- Sound and video: .mp3 .ogg .wav .m4a .mp4 .webm
- 3D: .glb .gltf
- Refused: Programs, installers and archives inside the zip, such as .exe .apk .msi .bat .zip, and any type not listed above.
Your site runs in its own sealed box. For everyone's safety, an uploaded site cannot read cookies or browser storage. Keep your data in the database, not in the browser.
Link a site on your own server
Your site already lives somewhere else? Link it instead of uploading. You add one line to your page. That line does two jobs: it proves the site is yours, and it turns every visitor into a bee in your cell.
You may have done this before. It is the same step as verifying a site for Google Search Console or adding Google Analytics: paste one line into your page, publish, press a button.
A. Get your line
- 1. In the Site tab pick My own server.
- 2. Type your site address, for example https://my-site.com. It must be a public https:// address.
- 3. Tap 1 · Sign, get the line and approve the signature. The line is copied for you. Lost it? Copy the line again.
The line looks like this (yours carries your name and a long signature):
- <script src="https://signal.heylogram.tv/kovanapi/ari.js" data-isim="lavanta" data-imza="…" defer></script>
B. Paste it above </body>
- 1. Open your site's home page file, usually index.html, in your editor.
- 2. Go to the very bottom and find the line </body>.
- 3. Paste the line right above </body>, on its own line.
- 4. Save the file.
Before:
- <footer>© Lavanta Atelier</footer>
- </body>
- </html>
After:
- <footer>© Lavanta Atelier</footer>
- <script src="…/ari.js" data-isim="lavanta" data-imza="…" defer></script>
- </body>
- </html>
C. Publish, then link
- 1. Publish your site again the way you always do, so the new line is live.
- 2. Back in Hive, tap 2 · Link. When it says "Linked: the cell now opens your site", you are done.
Same address, letter for letter. The line is signed for the exact address you typed. If your site opens at www. or the address differs in any way, type that one and get a new line.
Linking replaces an uploaded site. Uploading a new zip later replaces the link.
Your own domain
Your site already lives at a Hive address. Want it on a domain you bought (Porkbun, Hostinger, any registrar)? Connect it, like adding a domain on Vercel. Hive gets the security certificate for you.
- 1. Upload your site first (see Upload a site).
- 2. In the Site tab, under Your own domain, type the domain (for example mygame.com) and tap Connect.
- 3. Hive shows two records. Add both at your domain provider's DNS settings:
- A record: name @, value 109.199.123.89
- TXT record: name _hive, value hive-dogrulama=yourname (your .nim name without .nim)
- 4. Wait. Hive checks every minute. When the records are in place it gets the certificate and the status turns to live. This usually takes a few minutes; DNS can take up to a few hours to spread.
- www: Add an A record for www too and www.mygame.com is connected with it.
- Remove AAAA: If your domain has an AAAA record pointing somewhere else, delete it, or the certificate cannot be issued.
- Why the TXT record: Only the owner of a domain can write its DNS. The TXT record proves the domain is yours, so nobody can connect your domain to their cell.
- Limits: At most 3 domains per name. Hive's own domains cannot be connected. If something fails, wait an hour before you add the domain again.
- Remove: Tap Remove next to the domain. The connection and its certificate are gone within a minute.
- Statuses: queued (just added), waiting for DNS (records not found yet; Hive keeps checking for 48 hours), live, failed (the reason is shown).
Your bees
Bees fly in your cell. There are two kinds:
- Bee: A user who signed in to your app, or owns a sub-name. Stays for good.
- Faint bee: Someone who visited your site today.
Visitors of an uploaded site are counted on their own. For a site on your own server, the one line from Link your own server does the counting. The same person counts once per day, so refreshing does not inflate the number. The Bees tab shows bees, today's visitors and total visits, and lists your bees by name (see Which name shows).
Sub-names
Under your name you can hand out names such as mert.lavanta.nim, for your players, your team or your customers. Everyone who owns a sub-name is a bee of your cell.
Give a sub-name yourself
- 1. In Pigeon, open Get ring and then "Give sub-rings under yourname.nim".
- 2. Type the sub-name (for example mert) and who gets it: an address or a name.nim. Leave it empty to keep it yourself.
- 3. Tap Give mert.yourname.nim and approve. It costs only a tiny network transaction. The list below shows the sub-names you gave.
Or let players take their own
Tap Players can take their own sub-ring to turn it ON. Now your app can let each player take theirname.yourname.nim for their own wallet (see nim.js). First come, first served. Turn it OFF any time.
- Length: Sub-name plus your name: 22 letters at most.
- Depth: One level only: mert.lavanta, not deeper.
- How it shows: The player's own name big, your name small: mert.lavanta.nim
Which name shows
A bee can have two names in your cell: its own .nim name (for example mert) and a sub-name under your cell (for example lale.garura).
- Only its own name: Its own name: mert.nim
- Only a sub-name: The sub-name: lale.garura.nim
- Both: Its own name, until the player picks the other one
- The choice belongs to the player, and it counts only in your cell. In another cell the same player may show another name.
- Sub-names do not become cells on the hive map. They show in your cell's Bees card, by name: the player's own part big, your name small.
- Your app asks the question. HAHA, for example, asks a player with two names on its start screen which one to show.
- const db = HiveDB('garura');
- await db.signIn();
- const me = await db.myName(); // { own: 'mert', sub: 'lale.garura', choice: null, shown: 'mert.nim' }
- if (me.own && me.sub) {
- // ask the player, then save the answer for this cell
- await db.useName('sub'); // 'own' or 'sub'
- }
- const { bees } = await db.bees(); // this cell's bees, each with the name it chose
My page: choose what visitors see
- 1. Open the My page tab.
- 2. Turn cards on or off: Site, Bees, Vault. Use the arrows to change the order. The first card is shown big.
- 3. Write a short intro (up to 160 letters) and pick an accent colour. The small preview shows the result as you go.
- 4. Tap Sign and save. To check, tap View as visitor; tap the top button again to return.
Pictures on your page
- Products card: turn on Products to show what you sell, with photo and price. It appears once you add products (key urunler in Settings).
- Product photos: under Product photos, tap a product and pick a picture. It uploads right away.
- Site preview: choose The site itself or My own picture, pick a cover picture, then Sign and save.
- Pictures are PNG, JPG or WEBP, at most 1.5 MB each (Hive shrinks big ones before uploading), up to 40 per name. They are public.
Settings (key and value)
Small facts your app needs, kept as a plain table: a theme colour, a price, whether a feature is on. Only you can change them, because every save is signed by your wallet.
- 1. In the Settings tab, write a key (letters, digits, _ . -) and a value. On a computer you also pick a type: text, number or on/off.
- 2. Tap + to add the row. Change or remove rows (×) as you like.
- 3. Tap Sign and save and approve. The version number goes up: #1, #2 …
Your page choices from My page are saved here too, as vitrin.kartlar, vitrin.vurgu and tanitim. Leave them as they are; change them from My page.
Settings are public. Everyone can read them, that is how your app reads them too. Never put a password, key or anything private in settings.
Data: your database
Every name has its own database for apps and games: scores, profiles, lists. The Data tab shows it as a console with three columns: collections, documents, and the fields of the chosen document.
Add data by hand
- 1. Type a name under Collections (for example scores) and press Enter.
- 2. Under Add / update document, give a document id or leave it empty for an automatic one.
- 3. Add fields: name, value and type (text, number, on/off, list with commas). Tap + for each.
- 4. Tap Save (merge). Existing fields you did not touch stay as they are.
Rules: who can read, who can write
Each collection has two switches at the top of its column.
- read · everyone: Anyone, also your site's visitors, can read. (Default)
- read · owner: Only you, signed in.
- write · owner: Only you can write. (Default)
- write · player's own doc: A player who signed in with their wallet may write only the document whose id is their own Nimiq address. Good for player profiles and personal scores.
Field rules: what can be written
Who may write is not enough: a player's browser can still send a fake score or a 6-star review. Field rules stop that. Hive checks them on its server for every write, so no browser can skip them. This is what Firebase calls security rules.
Under the collection, in Field rules, add a rule per field:
- type: number, text, on/off, list or object.
- min / max: for numbers, for example a score between 1 and 1000000.
- max length: for text and lists, for example a review of at most 280 letters.
- required: the field must be there.
- whole number: no decimals.
- only goes up: a player cannot lower it (a best score, loyalty points).
- locked: once written, a player cannot change it (a date, an order number).
Two switches for the whole collection:
- Only these fields can be written: any other field is refused.
- Same document at most once every N seconds: stops a script from writing again and again.
Tap Save rules. You, the owner, are exempt from "only goes up", "locked" and the time limit, so you can fix a row; types and limits apply to you too. A refused write returns an error such as alan_buyuk:skor (too big) or izinsiz_alan:hile (field not allowed).
- A game (HAHA): haha_skor has skor as a whole number from 1 to 1000000 and required, ad as text up to 64, zaman as a number, only these fields, at most once every 5 seconds.
- A shop: a reviews collection with write "player's own doc", puan as a whole number from 1 to 5 and required, yazi as text up to 280, tarih as text and locked, only these fields. Each customer writes one review under their own address and cannot fake another person's.
Rules make cheating much harder, but a browser can still send a score that fits the rules. For prizes or money, keep the deciding step on a server you control (write "owner" and let your server write), or check the top rows yourself.
An empty collection. A new collection shows in the list only once it holds a document. Its rules are saved the moment you change a switch, even while it is empty. To see them again, type the collection's name under Collections and press Enter.
Limits per name
- Reads: 50,000 per day
- Writes: 20,000 per day
- Total size: 50 MB
- One document: 1 MB
- Collections: 100
- Results per query: 50 by default, at most 500
The console header shows how much you used today.
For AI coding agents
Building with Claude Code, Codex, Gemini or another coding agent? Point it to signal.heylogram.tv/kovanapi/llms-full.txt. It holds the whole API, the sandbox limits and the rules that protect money, written for agents.
For developers: nim.js
Optional. If your site or game wants to sign players in, take payments by name or show names, import nim.js in your own code. A site that only shows pages needs nothing.
- import { NimNames } from 'https://signal.heylogram.tv/kovanapi/nim.js';
- const nim = NimNames({ app: 'lavanta' }); // your own .nim name (needed for login)
- await nim.resolve('mert'); // { name, address } or null
- await nim.nameOf('NQ…'); // the name of an address, or null
- await nim.names('NQ…'); // { own, sub }: its own name and its sub-name under your app
- await nim.login(); // the player signs once and becomes a bee of your cell
- await nim.pay('mert', 10, 'hi'); // send 10 NIM to mert.nim from the player's wallet
- nim.badge(element, 'NQ…'); // shows mert.nim, or mert + small .lavanta.nim
- await nim.subsOpen(); // are sub-names open?
- await nim.claimSub('ayla'); // the player takes ayla.lavanta.nim (while open)
- await nim.giveSub('ayla', 'NQ…'); // you, the owner, give ayla.lavanta.nim
Check payments on the chain. Before you hand out goods, confirm the payment on the Nimiq chain. A wallet answer alone is not proof.
For developers: HiveDB
Your app talks to its database with a small library. If you know Firestore, you already know it. It works in the browser as a module; player sign-in needs a wallet (Nimiq Pay).
- import { HiveDB } from 'https://signal.heylogram.tv/kovanapi/hive-db.js';
- const db = HiveDB('lavanta'); // the database of lavanta.nim
- // Read the owner's signed settings (anyone can)
- const settings = await db.settings();
- // Player signs in with their wallet; db.address = their Nimiq address
- await db.signIn();
- // Write the player's own document (rule: write = player's own doc)
- await db.col('players').doc(db.address).set({ nick: 'bee_42', gold: 5 });
- await db.col('players').doc(db.address).update({ gold: 6 });
- // Query: top 10 on level 2
- const top = await db.col('scores')
- .where('level', '==', 2)
- .orderBy('points', 'desc')
- .limit(10)
- .get(); // [{ id, ...fields }]
- // One document (null if missing)
- const doc = await db.col('players').doc(db.address).get();
- // Which name the player shows in this cell
- const me = await db.myName(); // { own, sub, choice, shown }
- await db.useName('own'); // or 'sub'
- const { bees } = await db.bees(); // bees with their chosen names
- const owner = await db.owner(); // the name owner's wallet address
- // Sales: the money goes straight to the owner
- const items = await db.products();
- const order = await db.buy('gemi');
- const orders = await db.orders();
- HiveDB(name): Opens the database of name.nim.
- db.signIn(): Player signs in with their wallet. Returns their address (also in db.address); lasts 7 days.
- db.settings(): Reads the owner's signed settings.
- db.myName(): The player's names here: { own, sub, choice, shown }.
- db.useName('own' | 'sub'): The signed-in player picks which name shows in this cell.
- db.bees(): This cell's bees with the names they chose.
- db.owner(): The address of the wallet that owns this name. Tips and prizes go to or from it.
- db.products(): The owner's products: { id, name, price, stock, left }.
- db.buy(id): Opens an order for the signed-in player: { id, to, price, memo, status }. Pay it with nim.pay(order.to, order.price, order.memo).
- db.orders(): The signed-in player's orders; status is pending, paid, paid_out_of_stock or expired.
- col(c).doc(id).get / set / update / delete: Read, replace, merge, remove one document.
- col(c).add(data): Adds a document with an automatic id (owner).
- where(field, op, value): == != < <= > >= array-contains
- orderBy(field, 'asc' | 'desc'), limit(n): Sort and cut the result.
Errors. A refused call throws an error with a short reason, for example yazma_izni_yok (no write permission) or gunluk_okuma_siniri (daily read limit). Catch it and show your player a friendly message.
Vault
The honey jar is your own wallet. The Vault tab shows the NIM balance of the address that holds the name, read from the Nimiq chain, and your Nimiq Pay vault next to it.
- 1. The vault is hidden from visitors by default.
- 2. To show it on your page, turn on Visitors can see my vault and sign. Turn it off the same way.
We never hold your money. Hive keeps no funds. The jar only shows what is already in your wallet; money moves only when you approve it in your wallet.
Sell in your cell
Sell a digital item in your app: a costume, a level, a download. HAHA sells two looks: a golden basket and a spaceship that replaces the smiling basket. The buyer pays from their own wallet straight to yours. Hive never touches the money; it opens a bill, watches the Nimiq chain and marks the order paid when it sees the payment.
- 1. In the Settings tab add a key urunler with a list of your products as text, for example: [{"id":"altin-ari","ad":"Golden basket","fiyat":5,"stok":10},{"id":"gemi","ad":"Spaceship","fiyat":3}] (this is HAHA's list: 10 golden baskets, spaceships without a limit)
- 2. Fields: id (letters, digits and dashes), ad (the name buyers see), fiyat (price in NIM), stok (how many; leave it out for unlimited).
- 3. Tap Sign and save.
- 4. In your app, let the signed-in player buy, pay and check the order (see For developers: HiveDB):
- const order = await db.buy('gemi');
- await nim.pay(order.to, order.price, order.memo);
- const mine = await db.orders(); // status: pending, paid, expired
- Names on a leaderboard: show the name Hive resolves (db.myName(address).shown), not a name the player typed into their own document.
- When it counts as paid: only when Hive sees the payment on the chain with the order's note. Never unlock an item because the wallet said "sent".
- Stock: an open order holds one item for 24 hours. If it is not paid in time it expires and the item is free again.
- Partial payment: if less than the price arrives, the order shows as partly paid after 24 hours. Settle it with the buyer yourself.
- Your orders: you see all orders of your cell with the buyer's address; a player sees only their own.
- Limits: a player can have at most 3 open orders, a cell at most 50.
- No fee: Hive takes nothing from your sales.
- You are the seller: delivery and refunds are yours. Hive is not in between and cannot reverse a payment.
Get paid in your shop (QR)
Sell bread, coffee or anything at a counter. The customer pays from their own wallet straight to yours; Hive only shows the QR and watches the chain.
- 1. On the shop's phone or tablet, open your cell in Hive and sign in with the wallet that owns the name.
- 2. Open the Get paid tab, type the amount (for example 12) and an optional note (bread), then tap Make QR.
- 3. The customer opens Nimiq Pay, taps scan, points it at the QR and approves.
- 4. Within a few seconds of the payment reaching the chain, the screen turns green and shows PAID, the amount and who paid. Tap New sale for the next customer.
- Why the odd amount: 12 NIM shows as something like 12.00387 NIM. The tiny digits make each open sale unique, so Hive can tell which sale was paid even when the wallet does not carry a note. The customer must not change the amount.
- Time: a QR is good for 15 minutes. Tap Cancel if the customer leaves; a cancelled or expired sale is never marked paid.
- Only the owner: opening sales and seeing them needs your sign-in. The customer never signs in to Hive.
- Recent sales: the list under the QR shows each sale and whether it was paid.
- Paid means on chain: never hand over goods because the customer's screen says "sent". Wait for PAID on your screen.
- No fee: Hive takes nothing. Refunds are yours to send from your wallet.
Tips
Visitors can send you a tip from your cell's page. They tap Tip, choose 1, 5 or 10 NIM and approve it in their own wallet. The money goes straight to the wallet that owns the name, with the note "bahsis yourname.nim". Hive keeps nothing and sees nothing but the public chain.
Walk-through: HAHA, a game that uses everything
HAHA is Hive's own test game, in the garura.nim cell. It uses every Hive feature, so you can copy any part of it. Open it at signal.heylogram.tv/kovanapi/s/garura/ and follow along.
- Site: a .zip upload (step 1)
- Database: the leaderboard haha_skor and the prize log haha_odul (step 2)
- Names: players take theirname.garura.nim and choose which name shows (step 3)
- Signed settings: the products, the announcement and the prize amounts (step 4)
- Sales: a golden basket and a spaceship, paid straight to the owner (step 5)
- Prizes: the owner pays the top 3 from their own wallet (step 6)
- Tips: one button, 1 NIM to the owner (step 7)
- Updates: upload again (step 8)
Do it on a computer, signed in to your cell.
1. Upload the site
- 1. Open your cell, then the Site tab, and pick Upload files.
- 2. Choose file → haha-site.zip → Upload built site (.zip).
- 3. Wait for "garura.nim is live". The site card turns green and shows the site's address with an Open link.
2. Make the collections
- 1. Open the Data tab. Under Collections type haha_skor and press Enter.
- 2. Leave read on "everyone" and set write to "player's own doc". You see "Rule saved". Each player can now write only their own row.
- 2b. In Field rules add: skor, number, min 1, max 1000000, whole number, required; ad, text, max length 64; zaman, number. Tick Only these fields can be written, set at most once every 5 seconds, then Save rules.
- 3. Do the same for haha_odul. Only the owner pays prizes, and the owner's own row is the prize log, so nobody else can fake it.
3. Open sub-names in Pigeon
- 1. Open pigeon.heylogram.com in Nimiq Pay with the wallet that owns garura.nim.
- 2. Tap Get ring, scroll down and open "Give sub-rings under garura.nim".
- 3. Tap Players can take their own sub-ring: OFF and approve the tiny transaction. After a few seconds it says ON.
- 4. In the game, a player with no name takes theirname.garura.nim. A player with both their own name and a sub-name picks which one shows (db.myName, db.useName).
- 5. Do not offer a sub-name to the cell owner (their name already is the cell). A player who has their own name keeps it; a sub-name is only an extra name for your app, and the player picks which one shows.
4. Sign the settings
In the Settings tab add these keys, then tap Sign and save:
- urunler: the product list (see Sell in your cell).
- duyuru: a line every player sees at the top of the panel.
- odul: the prize text, for example Top 3: 2 · 1 · 0.5 NIM
- oduller: the amounts for places 1, 2 and 3, for example 2,1,0.5
The game reads them with db.settings(). They carry your signature, so nobody can change them on the way.
5. Sell the looks
- const o = await db.buy('gemi');
- await nim.pay(o.to, o.price, o.memo);
- const paid = (await db.orders()).filter((x) => x.status === 'paid');
HAHA unlocks the spaceship only when the order is paid, which Hive decides from the chain. A bought look is only a look: it gives no advantage in the game. Keep it that way when there are prizes, so the game stays fair.
6. Pay prizes
When the owner signs in to the game, a prize panel appears with the top 3 players (the owner is skipped). Each button sends that place's amount from the owner's own wallet:
- await nim.pay(player.id, amount, 'haha odul 1');
- await db.col('haha_odul').doc(myAddress).set({ liste });
Everyone sees the latest prizes under Prizes. Hive never holds the prize money. Look before you pay: a score in the database is written by the player's own browser, so it can be faked. For real money, check the top scores yourself, or count scores on your own server. Entry is free and places are won by skill only; never sell entries or chances to win.
7. Tips
- const owner = await db.owner();
- await nim.pay(owner, 1, 'bahsis garura.nim');
8. Update the game
Change your files, make the zip again and upload it in the Site tab. The new upload replaces the old site completely. Your database, settings, orders and bees stay as they are.
Check it works
- 1. Open the site, play a round, sign in with a wallet and save the score. In the Data tab, haha_skor shows a document named after that player's address.
- 2. Buy the spaceship with another wallet. Within a minute after the payment, the order turns paid and the basket becomes a ship.
- 3. Sign in as the owner, send the first prize and see it under Prizes.
- 4. Take a sub-name in the game; in Pigeon it shows under your name, and the player becomes a bee of your cell.
Pages every app needs
Before you share your app, add a few small files to the zip. HAHA ships all of them, so you can copy its pattern.
- index.html: The app itself.
- kilavuz.html (how to use): Rules and steps in plain words. Link it from the app.
- privacy.html: What you store and who sees it. Link it from the app and from every store form.
- robots.txt, sitemap.xml: Tell search engines what to read. See the limit below.
- llms.txt: A short plain summary of your app for AI assistants.
Your privacy page: four things to say
- 1. What is stored, and where. For example: the player's address, best score and the time, in your Hive database; the language choice only in the player's own browser.
- 2. What is public. A collection with "read: everyone" is public. Say so. Settings are always public.
- 3. What can never be deleted. Names and other transactions on the Nimiq chain stay there for good. You can delete rows in your database; you cannot delete a chain record.
- 4. How to reach you. A contact address you read, and how someone asks for their row to be removed.
Also say that signing sends no money and that the wallet key never reaches your app. HAHA's privacy.html covers all of this in Turkish and English.
robots.txt, sitemap.xml, llms.txt
Write the full address of your site in them. An uploaded site lives at the address shown on your Site card; for HAHA that is https://signal.heylogram.tv/kovanapi/s/garura/.
- User-agent: *
- Allow: /
- Sitemap: https://signal.heylogram.tv/kovanapi/s/garura/sitemap.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url><loc>https://signal.heylogram.tv/kovanapi/s/garura/</loc></url>
- <url><loc>https://signal.heylogram.tv/kovanapi/s/garura/kilavuz.html</loc></url>
- <url><loc>https://signal.heylogram.tv/kovanapi/s/garura/privacy.html</loc></url>
- </urlset>
- # HAHA
- > A small browser game: catch falling letters in order (H-A-H-A).
- - [Play](https://signal.heylogram.tv/kovanapi/s/garura/)
- - [How to play](https://signal.heylogram.tv/kovanapi/s/garura/kilavuz.html)
- - [Privacy](https://signal.heylogram.tv/kovanapi/s/garura/privacy.html)
- Contact: haha@heylogram.com
The limit: search engines read robots.txt only at the root. A search engine looks for robots.txt only at the top of a host, like https://example.com/robots.txt. An uploaded site sits in a folder (…/s/garura/), so its own robots.txt is not read by search engines, and the sitemap line inside it is not seen either. The same goes for llms.txt. Keep the files anyway: they cost nothing and work the day your app moves to its own address. To be found sooner, link your site from places people visit, or link your own server instead of uploading (see Link your own server), where the files sit at the root.
Troubleshooting
- No wallet found in this browser: Open Hive inside Nimiq Pay on your phone, or use the Heylogram Wallet extension or the Webboos browser on a computer. Then press Sign in again.
- Session ended, sign in again: Your 24-hour sign-in ran out. Press Sign in once more.
- Upload refused: file type: The zip holds a file Hive does not serve (for example .exe, .apk or a zip inside the zip). Remove it and zip again. The message lists the files.
- Upload refused: no index.html: Your index.html is inside a subfolder. Zip the contents of the folder, not the folder itself.
- Upload refused: too large: The zip is over 20 MB. Compress images and videos, or link your own server instead.
- The line was not found on your site; did you publish it?: Hive could not see the line on the address you typed. Check that you pasted it above </body>, saved, and published. Open your site and use "view source" to see it.
- The proof is not from this name's owner: Either another wallet signed the line, or the address differs from the one you signed (for example www. or http). Type the exact address, get a new line and paste it again.
- Use a public https address: Local or private addresses cannot be linked. Use your site's public https address.