At a Glance
Bir Bakışta
7 smart contracts
7 akıllı kontrat
Deployed on Tempo mainnet (chain 4217). Every byte verified on Sourcify, every function covered by Foundry tests.
Tempo mainnet'te (chain 4217) deploy edildi. Her byte Sourcify'de doğrulandı, her fonksiyon Foundry testleriyle kapsandı.
335+ passing tests
335+ geçen test
Foundry test suite with fuzz + invariant coverage across factory, locker v1/v2, claimer, launchpad and swap router.
Factory, locker v1/v2, claimer, launchpad ve swap router üzerinde fuzz + invariant kapsamlı Foundry test paketi.
1,060+ tokens indexed
1.060+ indekslenmiş token
Every TIP-20 on Tempo — Forja-forged, launchpad and external — surfaced in one searchable discovery hub.
Tempo'daki her TIP-20 — Forja ile basılmış, launchpad ve dış — tek, aranabilir bir keşif merkezinde toplanıyor.
Non-custodial
Non-custodial
Keys never leave the user's wallet. No seed phrase, no custody, no fund-moving privileges on any contract.
Anahtarlar kullanıcının cüzdanından hiç çıkmıyor. Seed phrase yok, custody yok, hiçbir kontratta fon-hareket yetkisi yok.
The Problem
Problem
A new blockchain wins when its primitives are one-click away. Tempo — institutional-grade, backed by Stripe and Paradigm — had all the pieces for builders, but "create a token, send it to holders, lock the founder share, launch with a bonding curve, enable trading, then monitor it" was still five separate tools, five wallet popups, and no way to see the whole picture.
Yeni bir blockchain, primitif'leri tek tıkla olduğunda kazanır. Tempo — Stripe ve Paradigm destekli, kurumsal seviyede — geliştiriciler için bütün parçalara sahipti; ama "bir token oluştur, holder'lara gönder, kurucu payını kilitle, bonding curve ile launch et, trading'i aç, sonra izle" hâlâ beş ayrı araç, beş cüzdan popup'ı ve bütünü görmenin hiçbir yolu yoktu.
Forja collapses that lifecycle into a single coherent product. One forge-editorial visual language. Seven tools that hand off to each other cleanly. First-class discovery and analytics so creators see their token as an operator, not as a tx list.
Forja bu lifecycle'ı tek, tutarlı bir ürüne indirgiyor. Tek forge-editorial görsel dil. Birbirine temiz devreden yedi araç. Creator'ın token'ını bir tx listesi olarak değil, operatör gözüyle görmesini sağlayan birinci sınıf keşif ve analitik.
My Role — Solo, End-to-End
Rolüm — Tek Başıma, Baştan Sona
Founder, sole engineer, sole designer. There is no team. Every decision, every commit and every deploy is mine:
Kurucu, tek mühendis, tek tasarımcı. Takım yok. Her karar, her commit ve her deploy benim:
- Product & strategy: scope, roadmap, tool selection, go-to-market framing.
- Smart contracts: Solidity 0.8.x on OpenZeppelin 5.5. Seven contracts — factory, multisend, locker v1 + v2, merkle claimer, launchpad with bonding curve, Uniswap-v4-integrated swap router. All written, tested (Foundry fuzz + invariant), deployed and verified solo.
- Frontend: Next.js 16 App Router + React 19, Tailwind v4, shadcn/ui v4. Forge-editorial design system designed from scratch — typography, color palette, per-tool identity, motion, brand assets.
- Data layer: Drizzle ORM + PostgreSQL 17, custom on-chain indexer, daily-stats aggregator, image proxy, analytics pipeline.
- Infrastructure: Hetzner VPS + Dokploy + Cloudflare Tunnel + self-hosted MinIO + self-hosted PostgreSQL + systemd. No Vercel, no Neon, no paid managed services.
- Operations: CI/CD on GitHub Actions, releases, hotfixes, security audits, UX audits, content.
- Ürün & strateji: scope, roadmap, araç seçimi, go-to-market mesajı.
- Akıllı kontratlar: OpenZeppelin 5.5 üzerinde Solidity 0.8.x. Yedi kontrat — factory, multisend, locker v1 + v2, merkle claimer, bonding-curve'lü launchpad, Uniswap-v4 entegre swap router. Hepsi yazıldı, test edildi (Foundry fuzz + invariant), deploy edildi ve tek başıma doğrulandı.
- Frontend: Next.js 16 App Router + React 19, Tailwind v4, shadcn/ui v4. Forge-editorial tasarım sistemi sıfırdan kurgulandı — tipografi, renk paleti, araç başına kimlik, motion, marka varlıkları.
- Veri katmanı: Drizzle ORM + PostgreSQL 17, özel on-chain indexer, günlük-istatistik aggregator, image proxy, analitik pipeline.
- Altyapı: Hetzner VPS + Dokploy + Cloudflare Tunnel + self-hosted MinIO + self-hosted PostgreSQL + systemd. Vercel yok, Neon yok, ücretli managed servis yok.
- Operasyon: GitHub Actions üzerinde CI/CD, release'ler, hotfix'ler, güvenlik denetimleri, UX denetimleri, içerik.
Seven Tools, One Forge
Yedi Araç, Bir Dökümhane
Each tool has its own page, its own accent color (gold, green, indigo, ember, pink, cyan, violet) and its own cursor-glow identity — but they share one runtime, one design language and one on-chain data surface. The user can move from creation to distribution to listing without leaving the site.
Her aracın kendi sayfası, kendi accent rengi (gold, green, indigo, ember, pink, cyan, violet) ve kendi cursor-glow kimliği var — ama hepsi tek runtime, tek tasarım dili ve tek on-chain veri yüzeyini paylaşıyor. Kullanıcı site'den çıkmadan oluşturma'dan dağıtım'a, oradan listeleme'ye geçebiliyor.
Create — TIP-20 in 30 seconds
Create — 30 saniyede TIP-20
Name, symbol, supply. OpenZeppelin-audited TIP-20 implementation deployed straight to mainnet, no hidden owner keys. 2 USDC flat fee.
İsim, sembol, arz. OpenZeppelin-denetimli TIP-20 implementasyonu doğrudan mainnet'e deploy ediliyor, gizli owner key yok. 2 USDC sabit ücret.
Multisend — 500 transfers, one tx
Multisend — 500 transfer, tek tx
Batch distribution for payroll, airdrops, rewards. CSV in, single transaction out. Gas savings built in.
Payroll, airdrop, ödül için toplu dağıtım. CSV girdi, tek işlem çıktı. Gas tasarrufu yapısal.
Lock — vesting with teeth
Lock — gerçek vesting
Cliff + linear vesting + optional revocation. V2 batch-lock for team schedules. Beneficiary claim flow and creator revoke — all on-chain enforced.
Cliff + linear vesting + opsiyonel revoke. V2 ile batch-lock takım programları. Yararlanıcı claim akışı ve creator revoke — hepsi on-chain zorlanıyor.
Claim — Merkle-proof airdrops
Claim — Merkle-proof airdrop
Publish a million eligible wallets with one root hash. Gas-free for the creator, permissionless claim for users. OpenZeppelin MerkleProof under the hood.
Tek root hash ile bir milyon uygun cüzdan yayımla. Creator için gas-free, kullanıcı için permissionless claim. Altta OpenZeppelin MerkleProof.
Launchpad — fair-launch curve
Launchpad — adil launch eğrisi
Bonding-curve price discovery, automatic graduation to Uniswap v4 liquidity at the 69k USDC threshold. Built-in emergency withdraw, daily cap and kill switch for canary safety.
Bonding-curve fiyat keşfi, 69k USDC eşiğinde Uniswap v4 likiditesine otomatik geçiş. Canary güvenliği için yapısal emergency withdraw, daily cap ve kill switch.
Swap — v4 + enshrined DEX
Swap — v4 + enshrined DEX
Best-route swap across Uniswap v4 pools and Tempo's native enshrined DEX (stablecoin precompile). Permit2 gasless approval, 0.25 % flat protocol fee, per-row decimals snapshotted for correct display.
Uniswap v4 havuzları ve Tempo'nun enshrined native DEX'i (stablecoin precompile) arasında en iyi rotalı swap. Permit2 gasless onay, %0.25 sabit protokol ücreti, doğru gösterim için satır başına decimals snapshot.
Tokens Hub — discovery
Tokens Hub — keşif
Every TIP-20 on Tempo in one searchable index. Per-token detail pages with three metric tiles (holders, transfers, active wallets) and three charts (activity, holder growth, active wallets) backed by the daily-stats aggregator.
Tempo'daki her TIP-20 tek, aranabilir bir indekste. Token başına detay sayfaları üç metrik tile'ı (holder, transfer, aktif cüzdan) ve üç grafiği (aktivite, holder büyümesi, aktif cüzdanlar) günlük istatistik aggregator ile birlikte sunuyor.
Architecture
Mimari
Smart Contracts
Akıllı Kontratlar
- ForjaTokenFactory — TIP-20 minter with creator ownership.
- ForjaMultisend — batched ERC-20 distribution.
- ForjaLocker v1 & v2 — time-locked vesting, v2 adds batch-lock + lower gas.
- ForjaClaimer — Merkle-proof claim with canary cap window.
- ForjaLaunchpad — bonding curve with emergency withdraw, daily cap, kill switch.
- ForjaSwapRouter v2 — Uniswap v4 + enshrined DEX routing, Permit2 integration, 0.25 % skim.
- All seven verified on Sourcify, chain 4217. OpenZeppelin 5.5.0 base.
- ForjaTokenFactory — creator ownership'lı TIP-20 minter.
- ForjaMultisend — batched ERC-20 dağıtımı.
- ForjaLocker v1 & v2 — zaman kilitli vesting, v2 batch-lock + düşük gas ekliyor.
- ForjaClaimer — canary cap pencereli Merkle-proof claim.
- ForjaLaunchpad — emergency withdraw, günlük cap, kill switch'li bonding curve.
- ForjaSwapRouter v2 — Uniswap v4 + enshrined DEX routing, Permit2 entegrasyonu, %0.25 skim.
- Yedinin tamamı Sourcify'de doğrulandı, chain 4217. OpenZeppelin 5.5.0 temelli.
Frontend
Frontend
- Next.js 16 App Router with React Server Components, strict CSS chunking, nonce-based CSP.
- Wagmi 3 + Viem 2 + RainbowKit 2 for wallet
connection, custom
darkThemeoverride aligned with the gold-accent forge-editorial palette. - Permit2 for gasless swap approvals.
- Recharts dynamic-imported for per-token charts; Framer Motion for page transitions, scroll reveal and live-feed slide-ins; canvas confetti for transaction success.
- Satori for dynamic per-token / per-launch / per-claim OpenGraph images.
- Next.js 16 App Router, React Server Component'ler, strict CSS chunking, nonce-tabanlı CSP.
- Wagmi 3 + Viem 2 + RainbowKit 2 ile
cüzdan bağlantısı; gold-accent forge-editorial palete
hizalanmış özel
darkThemeoverride. - Permit2 ile gasless swap onayları.
- Token başına grafikler için dynamic-import'lu Recharts; sayfa geçişleri, scroll reveal ve live-feed slide-in'leri için Framer Motion; transaction success için canvas confetti.
- Dinamik token/launch/claim OpenGraph görselleri için Satori.
Data & Indexing
Veri & İndeksleme
- Drizzle ORM + PostgreSQL 17 with 13 migrations; schema covers tokens, holders, transfers, daily stats, launches, claims, swaps, v4 pools, token identity (canonical user-curated metadata).
- Custom on-chain indexer with forward-only
incremental indexing, idempotent upserts on
(txHash, logIndex), batch block-timestamp resolution. - Daily stats aggregator runs on cron with a 14-day backfill window to heal late-arriving transfers.
- Image storage on self-hosted MinIO with UUID keys, sharp re-encode to WebP, per-wallet upload ownership tracking and orphan cleanup on form cancel.
- 13 migration'lı Drizzle ORM + PostgreSQL 17; şema token, holder, transfer, günlük istatistik, launch, claim, swap, v4 pool, token identity (canonical kullanıcı metadata'sı) içeriyor.
- Özel on-chain indexer: forward-only
incremental indeksleme,
(txHash, logIndex)üzerinde idempotent upsert, batch block-timestamp çözümü. - Geç gelen transfer'leri iyileştirmek için cron'da çalışan günlük istatistik aggregator, 14 günlük backfill penceresi.
- Self-hosted MinIO üzerinde UUID key'li görsel depolama, sharp ile WebP'ye yeniden kodlama, per-wallet upload sahipliği takibi ve form cancel'da orphan temizliği.
Infrastructure — fully self-hosted
Altyapı — tamamen self-hosted
- Hetzner CX33 VPS running Ubuntu, orchestrated by Dokploy.
- Cloudflare Tunnel — zero exposed ports, no origin IP leak, automatic TLS.
- Docker for PostgreSQL 17, MinIO, OpenPanel analytics; systemd for the Next.js server.
- GitHub Actions CI — lint (Biome 2.4), typecheck, Foundry contracts suite, Next.js build — all gating every PR before a controlled deploy script mirrors main to the VPS.
- Zero paid managed services. Every dependency I own.
- Ubuntu üzerinde Hetzner CX33 VPS, Dokploy ile orkestrasyon.
- Cloudflare Tunnel — sıfır açık port, origin IP sızıntısı yok, otomatik TLS.
- PostgreSQL 17, MinIO, OpenPanel analytics için Docker; Next.js sunucusu için systemd.
- GitHub Actions CI — lint (Biome 2.4), typecheck, Foundry kontrat suite, Next.js build — her PR'ı geçmek zorunda, sonra kontrollü deploy script'i main'i VPS'e mirror'lıyor.
- Ücretli managed servis yok. Her bağımlılık bana ait.
Security & Trust
Güvenlik & Güven
Forja is non-custodial by construction — no contract can move user funds without the user's own signature. Beyond that:
Forja yapısı gereği non-custodial — hiçbir kontrat kullanıcının kendi imzası olmadan kullanıcı fonlarını hareket ettiremez. Bunun ötesinde:
- SIWE-style wallet auth with server-issued single-use nonces, HMAC-signed session cookies (httpOnly, secure, sameSite lax), timing-safe comparisons on every hot path.
- Strict CSP with per-request nonce,
strict-dynamic,frame-ancestors 'none', HSTS preload (2-year max-age). - Upload hardening — magic-byte validation, sharp re-encode strips embedded metadata, UUID-only keys, per-wallet rate limits.
- Published security policy at
forja.fun/security
with severity ladder, scope, safe-harbor terms and a
.well-known/security.txtcontact. - External audits — pre-launch passes by parallel security-auditor, UX-auditor and code-quality agents; zero critical / zero high findings.
- Server tarafı tek-kullanımlık nonce'lu SIWE-tarzı wallet auth, HMAC imzalı session cookie (httpOnly, secure, sameSite lax), her hot path'ta timing-safe karşılaştırma.
- Request başına nonce'lu,
strict-dynamic,frame-ancestors 'none', HSTS preload (2 yıl max-age) ile strict CSP. - Upload sıkılaştırma — magic-byte doğrulama, sharp ile re-encode gömülü metadata'yı siler, sadece UUID key, wallet başına rate limit.
- forja.fun/security
adresinde severity ladder, scope, safe-harbor şartları
ve
.well-known/security.txtiletişimi ile yayımlanmış güvenlik politikası. - Dış denetim — paralel security-auditor, UX-auditor ve code-quality ajanlarının launch öncesi taraması; sıfır kritik / sıfır yüksek bulgu.
Design — Forge-Editorial
Tasarım — Forge-Editorial
The visual system I designed for Forja isn't generic crypto. It's editorial: Instrument Serif display typeface, Geist body sans, JetBrains Mono for addresses. Plum-black surfaces warmed by a metallic gold primary and an ember accent, with seven tool-specific colors (gold, ember, indigo, green, pink, cyan, violet). Motion is intentional, not ambient — a cursor-following radial glow, spark particles on the landing, ember-flicker on live chips, scroll-reveal stagger, transaction-success confetti.
Forja için tasarladığım görsel sistem generic crypto değil. Editorial: display için Instrument Serif, gövde için Geist sans, adresler için JetBrains Mono. Metalik gold primary ve ember accent ile ısıtılmış plum-black yüzeyler, yedi araç-özgü renk (gold, ember, indigo, green, pink, cyan, violet). Hareket ambient değil kasıtlı — cursor-takipli radyal glow, landing'de kıvılcım partikülleri, canlı chip'lerde ember-flicker, scroll-reveal stagger, transaction success konfetisi.
The brand kit I produced — logo (wavy-flame anvil silhouette), mono variants, horizontal + vertical lockups, X/Twitter avatar + banner, Farcaster banner, OG template, palette sheet — lives at forja.fun/brand, both SVG and PNG.
Ürettiğim brand kit — logo (dalgalı-alev örs silueti), mono varyantları, yatay + dikey lockup'lar, X/Twitter avatar + banner, Farcaster banner, OG template, palet sayfası — hem SVG hem PNG olarak forja.fun/brand adresinde.