INDOMEME — Documentation
Everything about this site: the coins, buying, holder uploads, and the developer guide. Written for humans first, AI agents second.
Semua tentang situs ini: coin-nya, cara beli, upload holder, dan panduan developer. Ditulis agar mudah dibaca manusia, dan mudah dibaca AI.
1. What is indomeme.site?
indomeme.site is the official home of an Indonesian meme coin collection on the Solana blockchain. One website lists every coin, shows live prices fetched straight from the public DexScreener API, embeds charts, and lets visitors buy directly on the site through the Jupiter swap widget.
It is also a community gallery: people who hold the coins can upload memes to each coin's wall. No accounts, no emails — a Solana wallet is the only login, and holding coins is the only permission needed.
In one sentence
A one-page portal + per-coin meme galleries, powered entirely by public on-chain data.
indomeme.site adalah rumah resmi koleksi meme coin Indonesia di blockchain Solana. Satu website memuat semua coin, menampilkan harga live langsung dari API publik DexScreener, menyematkan chart, dan memungkinkan pengunjung beli langsung di situs lewat widget swap Jupiter.
Situs ini juga galeri komunitas: orang yang memegang coin-nya bisa upload meme ke tembok tiap coin. Tanpa akun, tanpa email — dompet Solana adalah satu-satunya login, dan memegang coin adalah satu-satunya syarat.
Dalam satu kalimat
Portal satu halaman + galeri meme per coin, sepenuhnya digerakkan data on-chain publik.
2. The coins
All coins live on Solana and were launched on pump.fun. Badges: Ecosystem = the flagship of this site, Listed = graduated to a PumpSwap AMM (freely tradable), Bonding = still on the pump.fun bonding curve (price rises with buys until graduation).
Semua coin ada di Solana dan diluncurkan lewat pump.fun. Badge: Ekosistem = token utama situs ini, Terlisting = sudah graduasi ke AMM PumpSwap (bebas swap), Bonding = masih di bonding curve pump.fun (harga naik mengikuti pembelian sampai graduasi).
| Coin | Status | Contract address (CA) |
|---|
/api/config — the same source the homepage uses. Adding a coin to tokens.json updates this table automatically./api/config — sumber yang sama dengan halaman depan. Menambah coin di tokens.json otomatis memperbarui tabel ini.3. How to buy
- Install Phantom — a crypto wallet app for your phone or browser (phantom.app). Write the seed phrase on paper, never share it.
- Get SOL — buy SOL on any exchange (Binance, Indodax, etc.) and withdraw it to your Phantom address.
- Pick a coin on the homepage. Tap its row to see the live chart and stats first.
- Tap BUY — the Jupiter swap widget opens right on the page. Connect Phantom, choose the amount, confirm. Bonding-phase coins are bought on pump.fun (the site links you there directly).
- Done — the coin appears in your Phantom wallet. No signup anywhere.
- Install Phantom — aplikasi dompet crypto di HP atau browser (phantom.app). Tulis seed phrase di kertas, jangan pernah bagikan.
- Siapkan SOL — beli SOL di exchange mana pun (Binance, Indodax, dll), lalu kirim ke alamat Phantom kamu.
- Pilih coin di halaman depan. Klik barisnya untuk lihat chart live dan statistiknya dulu.
- Klik BELI — widget swap Jupiter terbuka langsung di halaman. Connect Phantom, tentukan jumlah, konfirmasi. Coin fase bonding dibeli lewat pump.fun (situs ini langsung mengarahkan ke sana).
- Selesai — coin muncul di dompet Phantom kamu. Tidak perlu daftar akun di mana pun.
4. How to upload memes (holders only)
The meme gallery is token-gated, per coin. The rule is simple: hold a coin → you can post on that coin's wall. Hold GOLD → GOLD memes. Hold two coins → two walls open.
- Open the Gallery page and tap + Upload Meme (or tap Connect Wallet in the top bar).
- Connect your Phantom wallet — the server checks your balance on-chain, server-side. Nothing is signed, no transaction is made; it is a read-only balance check.
- If you hold at least
—of a coin, that coin appears in the upload dropdown (with your balance shown). - Choose the image (jpg/png/webp, auto-compressed to ~900px), add an optional caption, upload.
- Your meme appears on the wall instantly with your wallet address (shortened) as credit.
Rules that keep the wall clean
- 1 meme per hour per wallet — enforced server-side.
- Max ~3 MB per image, auto-compressed in your browser before sending.
- You can delete your own memes anytime (the × button, only visible/working for the uploader's wallet).
- No financial-promo spam, no NSFW, no impersonation — the dev can remove any file from the server.
Galeri meme memakai token-gate per coin. Aturannya sederhana: pegang coin → bisa posting di tembok coin itu. Pegang GOLD → meme GOLD. Pegang dua coin → dua tembok terbuka.
- Buka halaman Galeri dan klik + Upload Meme (atau klik Connect Wallet di bar atas).
- Connect dompet Phantom — server mengecek saldo on-chain, di sisi server. Tidak ada tanda tangan, tidak ada transaksi; murni pembacaan saldo.
- Kalau kamu memegang minimal
—sebuah coin, coin itu muncul di dropdown upload (beserta jumlah saldomu). - Pilih gambar (jpg/png/webp, otomatis dikompres ke ~900px), tulis caption opsional, upload.
- Meme-mu langsung tampil di tembok dengan alamat dompetmu (disingkat) sebagai kredit.
Aturan biar tembok tetap rapi
- 1 meme per jam per dompet — ditegakkan di server.
- Maksimal ~3 MB per gambar, dikompres otomatis di browser sebelum dikirim.
- Kamu bisa menghapus meme milikmu kapan saja (tombol ×, hanya berlaku untuk dompet pengunggah).
- Dilarang spam promosi finansial, NSFW, atau impersonasi — dev bisa menghapus berkas mana pun dari server.
5. What holders can do
- Upload memes to the gallery of each coin they hold (see section 4) — the main perk.
- Be credited on every meme they post (wallet tag on the caption).
- Early-community status — holders are the ones shaping each coin's meme culture; the wall is the coin's identity.
- Nothing else is promised. Holding does not give profit share, governance, or airdrops. It is a meme community, honestly labeled.
- Upload meme ke galeri tiap coin yang dipegang (lihat bagian 4) — keuntungan utamanya.
- Dikreditkan di setiap meme yang diposting (tag dompet di caption).
- Status komunitas awal — holderlah yang membentuk budaya meme tiap coin; tembok galeri adalah identitas coin itu.
- Selain itu tidak ada janji lain. Memegang coin tidak memberi bagi hasil, hak suara, atau airdrop. Ini komunitas meme, dan jujur soal itu.
6. Developer guide
Architecture (single VPS, single Node process)
server.js— Node ≥ 18, zero npm dependencies. Serves the static site, the JSON APIs, and the uploaded images.public/index.html— the whole frontend (one file, i18n EN/ID built in).tokens.json— the coin registry. Adding a token = add one object here (ca, name, sym). Homepage, gallery filters, upload dropdown, and this doc page all update automatically.uploads/— images (renamed to random hex names) + one JSON index per coin (<CA>.json). No database.- Live prices: browser → DexScreener API directly (CORS open). The server never proxies market data.
- Holdings check: server → Solana public RPC, per-mint query (works for both classic SPL and Token-2022 tokens — pump.fun coins are often Token-2022). Fail-closed: if RPC fails, upload is refused with
RPC_DOWN, never silently allowed.
Configuration
# Everything below is managed WITHOUT editing code:
# • Social link (X), minimum-hold threshold → /admin panel
# • Admin password → systemd env (see deploy/indomeme.service)
# • Listen port → systemd env PORT
#
# Code-level config (rarely touched):
CONFIG.refreshMs # price auto-refresh interval (index.html)
MIN_HOLD # fallback if settings.json missing (server.js)
# settings.json # written by the admin panel — do not hand-edit while running
Common tasks
- Add a coin: edit
tokens.json, add{"ca":"...","name":"...","sym":"..."}, restart the service. Done. - Change social links / min-hold: use the
/adminpanel — saved instantly, no restart. - Dev fee: swaps made on this site include a small platform fee (currently 0.5%) that supports ongoing development. Buying/selling directly on Jupiter, Phantom, or pump.fun is not affected.
- Moderate a meme: open
/admin, log in, hit delete. The panel also manages social links and the minimum-hold threshold. - Backup: everything that matters is
tokens.json+uploads/. One rsync covers it.
Arsitektur (satu VPS, satu proses Node)
server.js— Node ≥ 18, tanpa dependensi npm. Menyajikan situs statis, API JSON, dan gambar upload.public/index.html— seluruh frontend (satu file, i18n EN/ID sudah tertanam).tokens.json— registri coin. Menambah token = tambah satu objek di sini (ca, name, sym). Halaman depan, filter galeri, dropdown upload, dan halaman doc ini otomatis ikut.uploads/— gambar (dinamai ulang jadi hex acak) + satu indeks JSON per coin (<CA>.json). Tanpa database.- Harga live: browser → API DexScreener langsung (CORS terbuka). Server tidak mem-proxy data pasar.
- Cek saldo: server → RPC publik Solana, query per-mint (berlaku untuk SPL klasik dan Token-2022 — coin pump.fun sering Token-2022). Fail-closed: kalau RPC gagal, upload ditolak dengan
RPC_DOWN, tidak pernah diam-diam diizinkan.
Konfigurasi
# Semua di bawah ini dikelola TANPA edit kode:
# • Link sosmed (X), ambang minimal hold → panel /admin
# • Password admin → env systemd (lihat deploy/indomeme.service)
# • Port server → env systemd PORT
#
# Konfigurasi level kode (jarang disentuh):
CONFIG.refreshMs # interval refresh harga (index.html)
MIN_HOLD # fallback kalau settings.json tidak ada (server.js)
# settings.json # ditulis oleh panel admin — jangan diedit manual saat server jalan
Tugas yang sering
- Tambah coin: edit
tokens.json, tambah{"ca":"...","name":"...","sym":"..."}, restart service. Selesai. - Ganti link sosmed / min-hold: lewat panel
/admin— tersimpan instan, tanpa restart. - Fee dev: swap yang dilakukan di situs ini sudah termasuk fee platform kecil (saat ini 0,5%) untuk mendukung pengembangan berkelanjutan. Beli/jual langsung di Jupiter, Phantom, atau pump.fun tidak terpengaruh.
- Moderasi meme: buka
/admin, login, klik hapus. Panel yang sama juga mengelola link sosmed dan ambang minimal hold. - Backup: semua yang penting cuma
tokens.json+uploads/. Satu rsync cukup.
7. API reference
All endpoints are JSON. No auth; the wallet address in the request body is the identity (server verifies holdings on-chain per request).
Semua endpoint berformat JSON. Tanpa auth; alamat dompet di body request adalah identitasnya (server memverifikasi saldo on-chain di setiap request).
| Endpoint | Method | Purpose |
|---|---|---|
/api/config | GET | minHold, token list, gallery counts |
/api/gallery | GET | all memes per coin (max 200/coin) |
/api/verify | POST | {address} → on-chain holdings of listed coins + which coins unlock |
/api/upload | POST | {address, ca, image(dataURL), cap} → validates holder + cooldown + image magic bytes, saves |
/api/delete | POST | {address, ca, ts} → deletes only the caller's own meme |
Error codes (upload)
BAD_ADDRESS 400 · BAD_COIN 400 · NOT_HOLDER 403 · COOLDOWN 429 · TOO_BIG/SIZE 413 · NOT_IMAGE 415 · FULL 507 · RPC_DOWN 503 (fail-closed)
Kode error (upload)
BAD_ADDRESS 400 · BAD_COIN 400 · NOT_HOLDER 403 · COOLDOWN 429 · TOO_BIG/SIZE 413 · NOT_IMAGE 415 · FULL 507 · RPC_DOWN 503 (fail-closed)
8. Safety & disclaimer
- The site never asks for your seed phrase and never requests transactions for wallet connection — the holdings check is read-only.
- All tokens are meme coins: no utility, no promise of value. Crypto is extremely volatile. Not financial advice. DYOR.
- Every token listed has mint & freeze authority disabled (verified via Jupiter's audit data).
- Uploaded images are stored with random names and served with
X-Content-Type-Options: nosniff; uploads are validated by magic bytes, not by file extension.
- Situs ini tidak pernah meminta seed phrase dan tidak pernah meminta transaksi untuk connect dompet — cek saldo murni read-only.
- Semua token adalah meme coin: tanpa utilitas, tanpa janji nilai. Kripto sangat volatil. Bukan nasihat investasi. DYOR.
- Semua token di daftar sudah dimatikan mint & freeze authority-nya (terverifikasi via data audit Jupiter).
- Gambar upload disimpan dengan nama acak dan disajikan dengan
X-Content-Type-Options: nosniff; upload divalidasi lewat magic bytes, bukan ekstensi file.