An AI is turning this website into a meme.
funny site looks like an ordinary SaaS landing page for a company called Synthwork. It isn't one. A council of twenty AI personas is slowly repainting it into a meme, a few pieces every five minutes, and every one of the 125 pieces it is painting is for sale in SOL. Buy a piece of the AI's meme, write your own words in it or let the AI keep painting it, and resell it when someone takes it from you.
open the boardread every piece as JSON
What this is
The page is carved into 125 individually owned pieces (we also call them slots). A piece is one element of the page: the announcement bar, a nav link, the hero headline, the hero meme image, a ticker item, a footer link. Each piece has its own owner, its own price and its own history, and each is recorded on Solana mainnet.
Two forces act on every piece:
- The AI decides what an unowned piece says and how every piece looks. At launch the page is spotless corporate copy. Over about five days the AI turns more and more of it into a meme: impact font, laser eyes, deep-fried moai, "this is fine".
- The humans own the pieces. An owner can replace the AI's words with their own, or leave the AI in charge and just hold the piece. Anyone can take an owned piece by paying 1.4× what the owner paid, and the owner receives 1.15× back in the same transaction. Being taken is a profit event, not a loss.
So you are investing in a piece of the AI's image. The image keeps changing, the price of each piece only rises when someone takes it, and the person who takes it pays you.
The short version
The AI painter
The AI works in epochs of 300 seconds (5 minutes), counted from the launch time. At the start of every epoch it picks a seeded, effectively random subset of pieces to repaint. Each piece has an 11% chance (110 per mille) of being repainted in any given epoch, so about 14 of the 125 pieces change every five minutes, and a typical piece is repainted roughly every 45 minutes.
When the AI repaints a piece, three things are decided at once:
- Which persona did it. One of the twenty council members (see the council) is credited with the repaint.
- Meme or corporate. The repaint is a meme with a probability equal to the current meme level. Otherwise the AI "restores brand guidelines" and writes Synthwork corporate copy ("Align every team around the work that matters.").
- What it says and how it looks. Words come from a pool written for that role on the page (headline, nav link, pricing tier, testimonial, and so on), one pool for corporate copy and one for meme copy. Meme repaints also get styling: fonts, tilt, colour tones and wobble.
Epoch 0 (the launch) is special: every piece is painted at once, and every piece is corporate. The page starts as a perfectly normal Synthwork landing page and degrades from there.
What the styling looks like
Styling only happens on meme repaints, and it gets wilder as the meme level climbs:
| Effect | When | Chance per meme repaint |
|---|---|---|
| Impact font | always eligible | meme level ÷ 220 (10% at level 22, 45% at level 100) |
| Comic font | always eligible | a further 12% |
| Tilt | meme level above 35 | always; up to ±(level ÷ 36)°, so up to about ±2.8° at level 100 |
| Colour tone (hot, acid, ink, sky) | meme level above 60 | 25% |
| Wobble animation | meme level above 80 | 12% |
Meme images (the hero meme and the six gallery memes) get a subject from the palette (🗿, 🐸, 🦍…), a loud background, between zero and four stickers (more at higher meme levels), and a chance of a photo filter equal to meme level ÷ 200: deep fried, noir, cursed, vintage, low-res jpeg or inverted.
Meme level
The meme level is a number from 0 to 100 shown in the header ("AI 38%"). It starts at 22 and climbs by 0.65 points per hour until it reaches 100, exactly 120 hours (5 days) after launch:
| Time since launch | Epoch | Meme level | What you'd notice |
|---|---|---|---|
| launch | 0 | 22 | A clean corporate page. Nothing has been repainted yet. |
| 12 hours | 144 | 30 | Most pieces repainted at least once; about a quarter of repaints are memes, in regular type. |
| 1 day | 288 | 38 | Memes start to tilt. |
| 2 days | 576 | 53 | About half the page is meme copy. |
| 3 days | 864 | 69 | Colour tones appear. Corporate copy is the exception. |
| 4 days | 1152 | 84 | Pieces start to wobble. |
| 5 days | 1440 | 100 | Every repaint is a meme. Within a few hours every unowned piece is memed. |
Because a piece keeps its last paint until the AI touches it again, the page lags a little behind the meme level. After day five the AI keeps repainting (the page never stops changing), but it never goes back to corporate copy.
The council
Every repaint is credited to one of twenty AI personas, and the board's "ai council" drawer shows a running log of who changed what. The personas are:
Log lines come in three moods. A meme repaint sounds like "Deep-fried the hero headline. You're welcome." A corporate repaint sounds like "Reverting Grok's edit to the brand name. Investors are watching." And when the piece belongs to a human who has written their own words, the AI can only restyle it: "The nav button belongs to a human now. I can only change the font."
The same log is available from the API at /api/v1/ai for the last eight epochs.
Words vs styling: who controls what
| Unowned piece | Owned, in AI mode | Owned, with your words | |
|---|---|---|---|
| Words / emoji / image | AI | AI | Owner (or tenant) |
| Font, tilt, tone, wobble | AI | AI | AI |
| Price | fixed base price | formula × owner's multiplier | formula × owner's multiplier |
Buying a piece does not stop the AI from painting it unless you write content. Owning a piece in AI mode is a perfectly good strategy: you hold the piece the AI is turning into a meme, and you still get paid 1.15× if someone takes it. You can hand a piece back to the AI at any time with an edit that sets the content to null.
The AI's styling always applies, including to human words. If the AI decides the hero headline is now in Impact and tilted 2°, your headline is in Impact and tilted 2°. That is the deal.
Is it a real AI?
Honestly: no live model is being called. The "AI" is a deterministic scripted engine in /lib/ai.js. What the AI painted on any piece at any epoch is a pure function of two numbers, the piece id and the epoch, run through a seeded hash and a small pseudo-random generator. The copy pools, sticker palette and persona names are written by hand.
That is a feature. Because it is deterministic:
- Every browser computes the same page at the same moment, with no server pushing anything and nothing to go down.
- The API (
aifield on every piece) and the page always agree. - Anyone can read the code and compute what the AI will paint next week. There is no hidden operator nudging which piece gets memed.
The twenty "council" personas are names attached to each repaint for flavour. They are not the products of those companies, and nothing on this page is endorsed by them.
Anatomy of the page
Here is every piece on the page, in id order. Ids are stable forever: on-chain memos reference pieces by id, so the registry can only grow at the end, never be reordered. Prices are base prices, what an unclaimed piece costs. The registry lives in /lib/slots.js and this table is generated from it.
| id | key | kind | base price | label |
|---|---|---|---|---|
| loading… | ||||
Piece kinds & content limits
Every piece has one of five kinds. The kind decides what an owner can put in it, and it never changes.
| Kind | What it holds | Limits | Content JSON |
|---|---|---|---|
text | A short line: headline, nav brand, ticker item, stat, caption | 1 to 80 characters | {"t":"…"} |
long | A paragraph: hero subheadline, feature text, testimonial, FAQ answer | 1 to 200 characters | {"t":"…"} |
link | A clickable label: nav links, buttons, footer links | label 1 to 40 characters; URL up to 200 characters, https:// only | {"t":"…","u":"https://…"} |
sticker | An emoji with an optional label: nav logo, logo strip, feature icons | emoji from the sticker palette; optional label up to 24 characters | {"e":"🔥","t":"…"} |
panel | A meme image: the hero meme and six gallery memes | subject from the subject palette; a named background; a named filter (default none); up to 4 palette stickers | {"s":"🗿","b":"rays","f":"deep fried","k":["🔥","💯"]} |
Character counts are Unicode code points, after cleaning. Cleaning replaces control characters, zero-width characters and bidirectional override characters with spaces, collapses runs of whitespace into one space, and trims the ends. Text that is empty after cleaning is rejected.
The AI is allowed a few things humans are not (the corporate logo glyphs ◆ and ◼, and relative links like #pricing or /docs). Humans must stick to the palette and to https:// links.
The palette
Stickers (for sticker pieces and panel stickers)
Subjects (the main character of a panel)
Backgrounds
Filters
Buying
An unclaimed piece sells at its base price, always. Unclaimed pieces don't decay and have no multiplier; the base price in the table above is the price. The whole base price goes to the treasury.
When you buy, you can include content (your words, your emoji, your meme), or leave it out and let the AI keep painting the piece. If the content you include fails validation, the purchase still goes through and the content is ignored, with a note on the event explaining why. You can then fix it with an edit.
Buying starts the piece's clock: it is in cooldown for 15 minutes, and after that anyone can take it from you.
Taking
Any owned piece can be taken by anyone except its owner, without asking, by paying its current take price. The take price is 1.4× what the owner paid (before any decay or asking-price multiplier). Out of that, the owner receives 1.15× what they paid, sent directly to their wallet in the same Solana transaction, and the rest goes to the treasury.
Precisely, the split of any take price P is:
treasury receives = P − owner share
So the owner always gets 115/140 (about 82.1%) of whatever the taker pays, and the treasury about 17.9%. With no decay and no multiplier, that is exactly 1.15× what the owner paid.
Worked example: the hero headline
The hero headline (piece #11) has a base price of 0.75 SOL.
| Step | Pays | Previous owner gets | Treasury gets | Result |
|---|---|---|---|---|
| Alice buys it | 0.75 SOL | — | 0.75 SOL | Alice owns it; last price 0.75 |
| Bob takes it (after cooldown) | 1.05 SOL | Alice: 0.8625 SOL | 0.1875 SOL | Alice is up 0.1125 SOL (+15%); last price 1.05 |
| Carol takes it | 1.47 SOL | Bob: 1.2075 SOL | 0.2625 SOL | Bob is up 0.1575 SOL (+15%); last price 1.47 |
| Dan takes it | 2.058 SOL | Carol: 1.6905 SOL | 0.3675 SOL | Carol is up 0.2205 SOL (+15%); last price 2.058 |
Each take raises the price by 40%. Each owner who gets taken makes 15% on what they paid. The last owner when the music stops holds a piece nobody wanted to pay 1.4× for, and its price then starts to decay.
Whatever content the taker includes replaces the previous owner's content. If the taker includes none, the previous owner's words stay on the piece until the new owner edits them, so taking a piece does not automatically hand it back to the AI.
Pricing formula
The price anyone pays right now for a piece, in lamports (1 SOL = 1,000,000,000 lamports):
owned: p = last × 1.4
repeat staleWeeks times: p = p × 0.9
p = p × multiplier (1× if unset)
price = max(0.005 SOL, floor(p))
lastis the price the current owner paid (the base price if they bought it, the take price if they took it).staleWeeksis the number of full weeks since the piece was last bought or taken, capped at 52.multiplieris the owner's asking-price multiplier, 0.1× to 4×.- Rounding happens once, at the end, down to a whole lamport.
The exact implementation is currentPrice in /lib/protocol.js. The board, the API quote and the indexer all call that same function.
Decay
A piece nobody wants should get cheaper until somebody does. For every full week since an owned piece was last bought or taken, its take price is multiplied by 0.9. Decay stops counting at 52 weeks (about 0.42% of the starting take price), and no owned piece ever costs less than the 0.005 SOL floor.
| Weeks untouched | Factor | Hero headline taken at 1.05 SOL, take price |
|---|---|---|
| 0 | 1.000 | 1.47 SOL |
| 1 | 0.900 | 1.323 SOL |
| 3 | 0.729 | 1.0716 SOL |
| 10 | 0.349 | 0.5126 SOL |
| 26 | 0.065 | 0.095 SOL |
| 52 (cap) | 0.0042 | 0.0061 SOL |
Edits, price changes, listings, rentals and gifts do not reset the decay clock. Only a buy or a take does. Unclaimed pieces never decay; they always cost their base price.
Decay applies to what a taker pays. The owner still receives 115/140 of that decayed price, which after enough weeks can be less than they originally paid. That is the risk of holding a piece nobody wants.
Cooldown
For 15 minutes (900 seconds) after a piece is bought or taken, it cannot be taken. The cooldown is measured from the Solana block time of the buy or take. A take that lands inside the window is rejected. The board shows a countdown and disables the take button; the API reports it as cooldownUntil.
Asking price (the multiplier)
An owner can scale their piece's take price anywhere from 0.1× to 4× what the formula says, in basis points: 1000 (0.1×) to 40000 (4×). The special value 0 means "no multiplier" (1×). Mark your piece up if you don't want to be taken; mark it down to invite a taker.
- 5-minute delay. A new multiplier takes effect 5 minutes (300 seconds) after the transaction's block time. Until then the old price stands, so you can't snipe a taker by jacking the price up in the same block they buy. The board and API show it as pending.
- You still get 115/140. Whatever a taker pays at your multiplier, you receive 115/140 of it. At 2× on the hero headline above (taken at 1.05 SOL), a taker would pay 2.94 SOL and you'd receive 2.415 SOL.
- It resets on a sale. When the piece is bought or taken the multiplier goes back to 1× and any pending change is cancelled. You inherit a price, never someone else's markup.
- Gifts keep it. A give keeps the current multiplier but cancels a pending one.
- The multiplier also scales the rent floor, since that is a percentage of the current price.
Renting
An owner can list a piece for rent at a daily rate. A tenant pays for 1 to 7 days up front and controls the piece's content for that term, while the owner keeps ownership and the take payout.
- Rate floor: the daily rate must be at least 0.25% of the current take price per day, rounded up to a whole lamport. A hero headline with a take price of 1.47 SOL has a floor of 0.003675 SOL/day.
- 5-minute delay: a new listing, a rate change or a delisting (rate
0) takes effect 5 minutes after it lands. You can't rent a piece in the first 5 minutes after it is listed. - Split: the protocol keeps 35% of the rent (rounded up), and the owner receives the rest, both directly in the rent transaction. Renting 3 days at 0.01 SOL/day costs 0.03 SOL: 0.0195 SOL to the owner, 0.0105 SOL to the treasury.
- One tenant at a time. A piece with a tenant can't be rented again until the term ends. Owners can't rent their own piece.
- During the term, only the tenant can edit. The owner can still change the price, the listing, or give the piece away.
- Tenancies survive a sale. If a rented piece is taken (or given away), the tenant keeps control until the term ends. Content the taker includes is stored as the owner's content and appears when the tenancy ends.
- Listings end on a sale. A buy, take or give removes the listing (and any pending listing change). The new owner has to list again.
- When a term ends, the tenant's content disappears and the owner's content (or the AI) is shown again. The listing stays up, so the piece can be rented again.
Giving & private resale
An owner can give a piece to any other valid Solana address for free (just the network fee). The recipient becomes the owner with the piece's price history intact: the same last price, the same decay clock, the same take count. The current multiplier is kept; a pending multiplier change and any listing are cancelled. A current tenant stays.
This is how you resell a piece privately at a price of your choosing. Agree a price with a buyer, have them pay you (in SOL or anything else, however you like), and then give them the piece. funny site does not escrow private sales. If you give first, you are trusting the buyer to pay; if they pay first, they are trusting you to give. Use someone you trust, or a separate escrow.
The other way to resell is to wait to be taken: that is a forced sale at 1.4× where you get 1.15× and nobody needs to trust anybody.
Editing
The controller of a piece (the owner, or the tenant during a rental) can change its content at any time for just the network fee. An edit replaces the whole content of the piece; there are no partial edits. Setting the content to null hands the piece back to the AI, which takes over again immediately with whatever it last painted there.
Unlike buys and takes, an edit with invalid content is rejected as a whole, and the piece keeps its old content.
How payments work on Solana
There is no smart contract holding your money. Every action is one ordinary Solana transaction, signed by your wallet, containing:
- one or more plain System Program transfers of SOL, from your wallet straight to the people who are owed it: the treasury, and for takes and rentals, the current owner;
- one SPL Memo instruction with a short JSON message saying what you are doing (see memo protocol).
Free actions (edit, price, list, give) still include a 0-lamport transfer to the treasury. It moves nothing, but it puts the treasury address in the transaction so the indexer can find it.
What this means for you:
- No custody. Nobody ever holds your SOL. Payouts land in your wallet in the same transaction as the take or rental that earned them.
- Nothing to withdraw. There is no balance, no claim button and no withdraw page. If you were taken, the SOL is already in your wallet.
- Atomic. The transfers and the memo succeed or fail together. If the transaction fails on-chain, nothing moves except the network fee.
- But Solana doesn't know the rules. The transfers will go through even if the action breaks a rule (for example, someone else took the piece a second before you). The rules are applied afterwards by replaying the memos. See rejected transactions.
The board builds the transaction for you: it asks /api/v1/quote for the exact transfers, adds the memo, and asks your wallet to sign and send it. Developers can build the same transaction themselves; see building a transaction.
Memo protocol
Every board action is an SPL Memo whose text is the protocol tag tinam1: followed immediately by a JSON object. The memo must be valid UTF-8 and at most 600 bytes including the tag.
tinam1:{"a":"<action>","s":<piece id>, ...action fields}
Common fields:
| Field | Type | Meaning |
|---|---|---|
a | string | Action: buy, take, edit, price, list, rent or give |
s | integer | Piece id, 0 to 124 |
c | object or null | Content, in the shape for the piece's kind. null means "AI mode" |
The person acting (the actor) is the transaction's fee payer, its first account. Only System Program transfer instructions at the top level of the transaction, sent from the actor, count as payment. Transfers made through other programs, wrapped SOL, SPL tokens, or transfers from other signers do not count.
buy
Claim an unclaimed piece. Pay the base price to the treasury. Content is optional.
tinam1:{"a":"buy","s":11,"c":{"t":"gm. the AI can keep the font."}}
transfers: base price → treasury
take
Take an owned piece from someone else after its cooldown. Content is optional.
tinam1:{"a":"take","s":11}
transfers: floor(P × 115 ÷ 140) → current owner
P − owner share → treasury
edit
Replace the content (controller only). "c":null or a missing c hands the piece back to the AI.
tinam1:{"a":"edit","s":15,"c":{"s":"🗿","b":"rays","f":"deep fried","k":["🔥","💯"]}}
tinam1:{"a":"edit","s":11,"c":null}
transfers: 0 → treasury
price
Set the asking-price multiplier (owner only). m is 0 (1×) or an integer from 1000 to 40000 basis points. Takes effect after 5 minutes.
tinam1:{"a":"price","s":11,"m":20000}
transfers: 0 → treasury
list
List for rent (owner only). r is the daily rate in whole lamports, at least the rent floor; 0 delists. Takes effect after 5 minutes.
tinam1:{"a":"list","s":11,"r":5000000}
transfers: 0 → treasury
rent
Rent a listed piece for d days (integer, 1 to 7). Content is optional.
tinam1:{"a":"rent","s":11,"d":3,"c":{"t":"rented this headline for 3 days"}}
transfers: rate × d − ceil(rate × d × 35%) → owner
ceil(rate × d × 35%) → treasury
give
Transfer ownership to to, a different valid Solana address (owner only).
tinam1:{"a":"give","s":11,"to":"4Nd1mBQtrMjTzXbzWZzhqgxHx1r5Ve7jt6Wz9v6sQTXz"}
transfers: 0 → treasury
Validation rules
The indexer reads every transaction that touched the treasury since launch, oldest first, and applies the following, in order, using the transaction's block time as "now":
- Is it a board transaction? It must have succeeded on-chain and carry a memo containing
tinam1:followed by valid JSON with a known actionaand an integers. If not, it is ignored entirely: it does not appear in any history, even as rejected. - Does the piece exist?
smust be 0 to 124. - Is the action allowed right now? For example: buy needs an unclaimed piece; take needs an owned piece, a different actor, and an expired cooldown; edit needs the controller; price, list and give need the owner; rent needs an active listing, no current tenant, a non-owner, and 1 to 7 days.
- Was enough paid? For every required recipient, the transfers from the actor to that address, summed, must be at least the required amount. Overpaying is accepted, and the extra is not refunded.
- Are the fields valid? For edit, the content must validate. For price, the multiplier must be in range. For list, the rate must be a whole number of lamports at or above the floor. For give, the recipient must be a valid, different address.
If every check passes, the action is applied and recorded as accepted (ok: true), and the piece's version number goes up by one. If any check fails, it is recorded as rejected (ok: false) with a human-readable reason and the amounts that were actually paid, and nothing about the piece changes.
One exception: content on a buy, take or rent never causes a rejection. If it is invalid, the purchase is still accepted and the content is dropped, with a note on the event explaining why.
Transactions are ordered by Solana slot. Two board transactions in the same slot are ordered as the RPC lists them.
Rejected transactions
How this happens in practice:
- Races. Two people try to take the same piece at the same time. The board quoted both of them the same price and the same owner. Whichever transaction lands first wins. The second one is rejected, because the piece is now in cooldown and has a new owner and a higher price.
- Price moved. A pending multiplier increase took effect between your quote and your transaction landing, so you underpaid.
- Cooldown. You took a piece less than 15 minutes after its last sale (the board blocks this, but a hand-built transaction might not).
- Stale state. The owner gave the piece away, the listing was withdrawn, or a tenant moved in, just before your transaction.
- Hand-built mistakes. Wrong recipient, wrong amount, the fee payer isn't the wallet that paid, the content is invalid for an edit.
Where the money goes in a rejected transaction:
- The owner share of a rejected take or rent went to whichever address you sent it to, usually the previous owner. funny site cannot move it back. You can ask them, and the transaction is public, but there is no mechanism to force it.
- The treasury share is refunded manually by the operator, on request. Message @FunnySitedotapp on X with the transaction signature. Every rejected transaction is public in
/api/v1/events?ok=falsewith its reason and exactly what was paid, so refunds can be checked by anyone. Refunds are a courtesy, not a protocol guarantee.
To minimise the risk: act on fresh quotes, don't try to take a piece seconds after its cooldown ends when others are watching it, and let the board build your transaction. The board re-quotes with fresh chain data immediately before asking you to sign, and tells you whether the transaction was accepted or rejected once the indexer has seen it.
Fees
| Action | You pay | Owner receives | Treasury receives |
|---|---|---|---|
| buy | base price | — | 100% |
| take | take price P | floor(P × 115/140) ≈ 82.1% | the rest ≈ 17.9% |
| rent | rate × days | 65% | 35% (rounded up) |
| edit, price, list, give | 0 | — | 0 |
| every transaction | Solana network fee, normally 0.000005 SOL per signature, plus any priority fee your wallet adds. This goes to Solana validators, not to funny site. | ||
There are no other fees: no listing fee, no withdrawal fee, no creator royalty, no token.
Verify it yourself
The board is a mirror of public data. You don't have to trust our server to know who owns what, because you can recompute it:
- Call
getSignaturesForAddresson the treasury,9xLUBtnozQ3eosq61oSuKjKw9uLGLyybwEHZsMr2b8G, paging back to the launch time. - Keep the successful signatures whose
memocontainstinam1:. - Fetch each with
getTransaction(encoding: "jsonParsed"), and extract the fee payer, the memo, and the top-level System Program transfers from the fee payer. - Sort by slot, and feed them through
replayfrom/lib/protocol.js. The rules are public, short, and dependency-free, and they are the same file the server runs.
import { replay, decodeMemo, MEMO_PROGRAM } from 'https://YOUR-FUNNY-SITE-ORIGIN/lib/protocol.js';
// txs: [{ sig, ts: blockTime, block: slot, actor: feePayer, body: decodeMemo(memo), paid: Map(to → lamports) }]
const state = replay(txs, '9xLUBtnozQ3eosq61oSuKjKw9uLGLyybwEHZsMr2b8G');
console.log(state.slots[11].owner, state.events.filter((e) => !e.ok));
Then compare with /api/v1/site. If they ever disagree, the chain is right and we have a bug.
The AI half is just as checkable: paint(id, epoch) in /lib/ai.js is what the AI shows on a piece at any epoch, past or future.
Network & addresses
9xLUBtnozQ3eosq61oSuKjKw9uLGLyybwEHZsMr2b8G receives buys, the treasury share of takes and rents, and the 0-lamport marker transfers. It is an ordinary wallet controlled by the operator.
memo programMemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr (SPL Memo v2)
protocol tagtinam1
launch1791378000 (2026-10-07 13:00 UTC). Treasury transactions before this are ignored, and AI epoch 0 starts here.
explorersolscan.io. Every event on the board links to its transaction.
Supported wallets
The board talks to whichever Solana wallet extension your browser injects, in this order of preference: Phantom, Solflare, Backpack, then any other wallet exposing the standard window.solana provider. The wallet needs to support signAndSendTransaction or signTransaction, which all mainstream Solana wallets do.
On a phone, open funny site inside your wallet app's built-in browser. Hardware wallets work through the extension they are connected to (Ledger via Phantom or Solflare); Ledger may ask you to enable blind signing for memo instructions.
You need enough SOL for the action plus a network fee. The board checks your balance before asking you to sign.
Content & moderation
Everything an owner writes is in a public, permanent transaction memo. We can't delete it from Solana. What we control is what this site renders.
- Blocklist. Text is checked against a short blocklist of slurs and abuse terms. Content that matches is invalid: an edit with it is rejected, and on a buy, take or rent it is dropped.
- Links are https only. Link pieces must use
https://, must have a real hostname, and must not contain a username or password. Known link shorteners and IP loggers (bit.ly, tinyurl.com, grabify.link, iplogger.org, iplogger.com, 2no.co) are blocked. Links open in a new tab withrel="nofollow noopener noreferrer ugc". - No uploads. Images are built from a fixed palette of emoji, backgrounds and filters, so there are no arbitrary images to moderate.
- Quarantine. The operator can quarantine a piece whose content is abusive but slipped past the filter. A quarantined piece is visibly marked on the board, shows the AI's paint instead of the owner's content, and reports
quarantined: trueandcontent: nullin the API. Quarantine changes nothing on-chain or in the market: the owner still owns the piece, can still edit it, and can still be taken and paid. Only the operator can lift a quarantine.
If you see something that should be quarantined, message @FunnySitedotapp on X with the piece id.
Risks & disclaimer
- You can lose money. Prices only go up when someone pays more. If nobody takes your piece, you get nothing back, and decay means a future taker may pay you less than you paid.
- Rejected transactions still move SOL. See rejected transactions. Refunds of the treasury share are manual and at the operator's discretion.
- The board is a mirror. Ownership is defined by replaying the memos under the published rules. If the site goes away, the record stays on Solana and anyone can rebuild it, but there is no on-chain program enforcing it and nobody is obliged to keep displaying it.
- The rules could have bugs. The protocol code is small and public, but it is not audited. If a bug is found the operator may fix it, and replaying with fixed rules can change the outcome of past transactions.
- The treasury is an ordinary wallet controlled by the operator. SOL sent to it is not held in escrow for you.
- Everything is public and permanent. Your wallet address, what you bought, what you paid and what you wrote are visible to anyone forever.
- Private sales are unprotected. A give is a give. There is no escrow.
- Solana itself can congest, drop transactions or have outages. Public RPC endpoints rate limit, which can make the board's indexer lag behind the chain for a while.
- The AI is not a person and not a product of the companies its personas are named after.
- Check the laws where you live. You are responsible for any taxes on gains.
FAQ
Is this a website?
It's a meme. The website is the canvas.
Do I get an NFT?
No. A piece is a row in a public, replayable ledger made of Solana memos, not a token. It won't show up in your wallet's collectibles tab. Your proof of ownership is the chain history, which the board and the API read for you.
Can I stop the AI from changing my piece?
You can stop it from changing the words: buy the piece and write your own content. You can't stop it from changing the styling.
Can someone take my piece without my permission?
Yes, that's the game. They have to pay 1.4× what you paid (adjusted by decay and your multiplier), and you get 115/140 of it in the same transaction. Raise your multiplier to 4× if you want to make that expensive.
How do I get paid when I'm taken?
You already have. The taker's transaction sends your share straight to your wallet. There's nothing to claim.
Why is the price higher than the quote I saw?
Either someone took the piece, or the owner's pending multiplier change took effect. The board re-quotes right before you sign. If you see a different number in your wallet, cancel and try again.
My transaction says rejected. Where's my SOL?
The transfers went through on Solana. The owner share went to whoever you paid; the treasury share can be refunded by the operator on request (message @FunnySitedotapp on X with the signature). See rejected transactions.
The board says "indexer lagging". Is something wrong?
The server couldn't reach its Solana RPC on its last poll, usually because a public RPC is rate limiting. The page keeps showing the last good state and retries every few seconds. Your transactions are safe on-chain either way; they will appear when the indexer catches up.
What happens after day five?
The meme level stays at 100. The AI keeps repainting, but only with memes. Owned pieces keep trading forever.
Can the AI paint my piece offensive things?
No. It only uses the copy pools and palette written into /lib/ai.js, which you can read.
Can I build my own front end?
Yes. The API is open, free and key-free, and the transaction format is documented above.
Is there a token?
No. Everything is priced in SOL.
Glossary
- Piece / slot
- One of the 125 ownable elements of the page, identified by a stable id (0 to 124) and key (like
hero.headline). - Base price
- What an unclaimed piece costs. Fixed per piece.
- Take
- Buying an owned piece without the owner's permission, at 1.4× what they paid, with 1.15× going to them.
- Take price
- What a take costs right now: last × 1.4, decayed, times the multiplier, floored at 0.005 SOL.
- Last price
- What the current owner paid.
- Multiplier
- The owner's asking-price adjustment, 0.1× to 4×, stored in basis points (0 means 1×).
- Decay
- ×0.9 per full week since the last buy or take, up to 52 weeks.
- Cooldown
- 15 minutes after a buy or take during which the piece can't be taken.
- Pending
- A multiplier or listing change waiting out its 5-minute delay.
- Controller
- Whoever may edit the piece: the tenant during a rental, otherwise the owner.
- Tenant
- Someone renting a piece. Controls its content until the term ends.
- AI mode
- A piece with no human content (
content: null). The AI decides what it says. - Epoch
- A 5-minute AI turn. About 11% of pieces are repainted each epoch.
- Meme level
- The probability (in %) that a repaint is a meme. 22 at launch, 100 after five days.
- Council
- The twenty AI personas credited with repaints.
- Memo
- The
tinam1:{…}message in an SPL Memo instruction that tells the indexer what a transaction is for. - Indexer
- The server process that reads the treasury's transactions and replays them under the rules. A mirror of the chain, not the chain.
- Rejected
- A board transaction that broke a rule. Recorded with its reason; changes nothing on the board; its SOL still moved.
- Lamport
- The smallest unit of SOL. 1 SOL = 1,000,000,000 lamports.
- Treasury
- The operator's wallet that receives buys and the protocol's share of takes and rents.
funny site