digital garden: 3 aktif varyant (v4 defter, v5 gazete, v6 katalog) + yillik

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 12:07:17 +03:00
commit b9949ed187
10 changed files with 2182 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.DS_Store

17
README.md Normal file
View File

@@ -0,0 +1,17 @@
# tunapro-garden
tunapro.xyz ana sayfası için digital garden. 3 aktif varyant + yıllık sayfası.
- `v4/` defter (wiki tarzı, sidebar'lı)
- `v5/` gazete (broadsheet)
- `v6/` katalog (arşiv fişi)
- `v1/ v2/ v3/` eski tur, arşiv
- `yillik/` yıllıktaki QR'ın indiği sayfa
- `index.html` varyant seçici (sadece önizleme için, prod'a KOYULMAYACAK)
## deploy notu (server-main için)
- Statik dosyalar, build yok. Seçilen varyantın içeriği tunapro.xyz köküne,
`yillik/` aynen `/yillik/` path'ine gider.
- Tuna hangi varyantı seçtiğini söyleyene kadar SERVE ETME. Hazırlık tamam,
nginx'e bağlamak için onay bekleniyor.

47
index.html Normal file
View File

@@ -0,0 +1,47 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tunapro garden — varyant seçici</title>
<style>
:root{--bg:#111;--fg:#eee;--dim:#888;--mono:ui-monospace,Menlo,monospace}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--fg);font-family:var(--mono);min-height:100vh;
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:30px}
h1{font-size:16px;margin-bottom:6px}
p{color:var(--dim);font-size:13px;margin-bottom:24px;text-align:center}
h2{font-size:12px;color:var(--dim);letter-spacing:.2em;text-transform:uppercase;margin:18px 0 10px;align-self:flex-start;max-width:900px;width:100%;margin-left:auto;margin-right:auto}
.v{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;width:min(900px,100%)}
a.card{border:1px solid #333;border-radius:10px;padding:22px;text-decoration:none;color:var(--fg);
transition:border-color .15s,transform .15s}
a.card:hover{border-color:#d63c2f;transform:translateY(-3px)}
a.card b{display:block;font-size:15px;margin-bottom:8px;color:#d63c2f}
a.card span{color:var(--dim);font-size:12.5px;line-height:1.5;display:block}
a.card.old{opacity:.45}
a.card.old b{color:#666}
a.extra{margin-top:22px;color:var(--dim);font-size:12.5px;text-decoration:none}
a.extra:hover{color:#e8c46a}
</style>
</head>
<body>
<h1>tunapro.xyz — dijital bahçe</h1>
<p>yeni tur: v3 tarzı baz alınarak 3 yeni varyant. hepsi bölümlü, derin içerikli, senin ağzından yazıldı.</p>
<h2>yeni — 2. tur</h2>
<div class="v">
<a class="card" href="/v4/"><b>v4 · Defter</b>
<span>wiki tarzı: soldan kategori indeksi, notlar tek sayfada, bkz-linkleri, durum etiketleri. en derin olan.</span></a>
<a class="card" href="/v5/"><b>v5 · Gazete</b>
<span>broadsheet parodi: manşet, sütunlar, telgraf hattı, arşivden alıntılar ve küçük ilanlar.</span></a>
<a class="card" href="/v6/"><b>v6 · Katalog</b>
<span>arşiv fişi estetiği: damgalı kartlar (kazandık / arşiv / şifreli), yıllara göre 2020→2026 dizilim.</span></a>
</div>
<h2>eski — 1. tur</h2>
<div class="v">
<a class="card old" href="/v3/"><b>v3 · Fihrist</b><span>2. turun temeli. bölümlü brutalist indeks.</span></a>
<a class="card old" href="/v1/"><b>v1 · Kâğıt Bahçe</b><span>beğenilmedi, arşiv.</span></a>
<a class="card old" href="/v2/"><b>v2 · Gece Bahçesi</b><span>beğenilmedi, arşiv.</span></a>
</div>
<a class="extra" href="/yillik/">+ /yillik — yıllıktaki QR'ın indiği özel sayfa</a>
</body>
</html>

246
v1/index.html Normal file
View File

@@ -0,0 +1,246 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tunapro — dijital bahçe</title>
<meta name="description" content="Tuna Gül'ün dijital bahçesi: robotik, AI agent'lar, self-host edilen her şey. Bitmiş yazılar değil, büyüyen notlar.">
<style>
:root{
--paper:#faf6ee; --paper-2:#f3ecdd; --ink:#2b2620; --ink-soft:#6b6156;
--green:#3e6b4f; --green-soft:#e4ede4; --amber:#b0752b; --line:#e0d6c3;
--link:#3e6b4f;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
background:var(--paper); color:var(--ink);
font-family:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
line-height:1.65; font-size:17px;
background-image:radial-gradient(circle at 1px 1px, rgba(62,107,79,.06) 1px, transparent 0);
background-size:26px 26px;
}
a{color:var(--link)}
.wrap{max-width:1060px;margin:0 auto;padding:0 24px}
header{padding:64px 0 34px;border-bottom:1px solid var(--line)}
.kicker{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}
h1{font-size:clamp(34px,6vw,52px);font-weight:600;letter-spacing:-.01em;margin:10px 0 14px}
h1 .tilde{color:var(--green)}
.lede{max-width:62ch;color:var(--ink-soft);font-size:18.5px}
.lede strong{color:var(--ink)}
.season{margin-top:18px;font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-soft)}
.season b{color:var(--green);font-weight:600}
nav.legend{display:flex;gap:22px;flex-wrap:wrap;padding:16px 0;border-bottom:1px solid var(--line);
font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-soft);position:sticky;top:0;
background:color-mix(in srgb, var(--paper) 92%, transparent);backdrop-filter:blur(6px);z-index:5}
nav.legend .item{cursor:default}
nav.legend a{text-decoration:none;color:var(--ink-soft)}
nav.legend a:hover{color:var(--green)}
main{display:grid;grid-template-columns:1fr;gap:0}
.garden{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;padding:38px 0 10px}
.note{
background:#fffdf7;border:1px solid var(--line);border-radius:10px;padding:22px 22px 18px;
position:relative;display:flex;flex-direction:column;gap:10px;
box-shadow:0 1px 2px rgba(43,38,32,.05);
transition:transform .18s ease, box-shadow .18s ease;
}
.note:hover{transform:translateY(-3px);box-shadow:0 10px 24px rgba(43,38,32,.10)}
.note.wide{grid-column:span 2}
@media(max-width:720px){.note.wide{grid-column:span 1}}
.stage{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--ink-soft);display:flex;justify-content:space-between;align-items:center}
.stage .s{color:var(--green)}
.note h2{font-size:21px;font-weight:600;letter-spacing:-.005em}
.note h2 a{text-decoration:none;color:var(--ink)}
.note h2 a:hover{color:var(--green)}
.note p{font-size:15.5px;color:#463f36}
.note p a{text-decoration:underline;text-decoration-color:#bcd0bf;text-underline-offset:3px}
.note p a:hover{text-decoration-color:var(--green)}
.roots{margin-top:auto;padding-top:10px;border-top:1px dashed var(--line);display:flex;gap:14px;flex-wrap:wrap;
font-family:ui-monospace,Menlo,monospace;font-size:12.5px}
.roots a{text-decoration:none;color:var(--ink-soft)}
.roots a:hover{color:var(--green)}
.roots a::before{content:"↳ ";color:var(--amber)}
.wiki{background:var(--green-soft);border-radius:4px;padding:0 4px;text-decoration:none !important;color:var(--green);white-space:nowrap}
.wiki::before{content:"[["}.wiki::after{content:"]]"}
.wiki::before,.wiki::after{opacity:.45}
.curio{background:linear-gradient(180deg,#fffdf7, #fdf7ea)}
.curio .stage .s{color:var(--amber)}
section.about{margin:44px 0;padding:30px;border:1px solid var(--line);border-radius:12px;background:var(--paper-2);
display:grid;grid-template-columns:1.4fr 1fr;gap:30px}
@media(max-width:720px){section.about{grid-template-columns:1fr}}
section.about h3{font-size:14px;font-family:ui-monospace,Menlo,monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--amber);margin-bottom:12px}
section.about p{color:#463f36;font-size:15.5px;margin-bottom:10px}
.paths{list-style:none;font-size:15px}
.paths li{padding:7px 0;border-bottom:1px dashed var(--line)}
.paths li:last-child{border-bottom:none}
.paths a{text-decoration:none}
.paths .where{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;color:var(--ink-soft);float:right}
footer{padding:34px 0 60px;border-top:1px solid var(--line);margin-top:20px;
display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;
font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-soft)}
footer a{color:var(--ink-soft);text-decoration:none}
footer a:hover{color:var(--green)}
.gate{font-size:12.5px}
.gate a{color:var(--amber)}
@media (prefers-reduced-motion: reduce){.note{transition:none}}
</style>
</head>
<body>
<div class="wrap">
<header>
<div class="kicker">tunapro.xyz · dijital bahçe</div>
<h1>Tuna'nın bahçesi<span class="tilde">.</span></h1>
<p class="lede">Burası bir blog değil, bir <strong>bahçe</strong>: robotlar, AI agent'lar ve
kendi sunucumda yaşattığım sikko-ama-sevimli projeler hakkında <strong>büyüyen notlar</strong>.
Hiçbiri bitmiş sayılmaz — kimi daha fide, kimi çınar. Kronolojiye değil, meraka göre gez.</p>
<p class="season">mevsim: <b>yaz 2026</b> · bahçıvan: Tuna Gül · en son sulama: bugün</p>
</header>
<nav class="legend" aria-label="büyüme aşamaları">
<span class="item">🌱 fide — yeni dikildi, kırılgan</span>
<span class="item">🌿 filiz — büyüyor, düzenli sulanıyor</span>
<span class="item">🌳 çınar — köklendi, gölgesinde oturulur</span>
<a href="#hakkinda">bahçıvan kim? ↓</a>
</nav>
<main>
<div class="garden">
<article class="note wide" id="blueprint">
<div class="stage"><span class="s">🌳 çınar</span><span>dikim 2025 · son sulama tem 2026</span></div>
<h2><a href="https://bp.tunapro.xyz">blueprint (bp)</a></h2>
<p>tmux içinde bir AI agent <em>filosunu</em> yöneten orkestrasyon aracı. Paketler
<code>BLUEPRINT.yaml</code> ile tasarlanıyor, snapshot tabanlı versiyonlama ve symlink'le
sabitlenmiş bağımlılıklarla büyüyor. Go ile yazdım; bu bahçedeki çoğu şey gibi
<a class="wiki" href="#homelab">homelab</a>'de kendi kendini barındırıyor.
<a class="wiki" href="#replicant">replicant</a> ve <a class="wiki" href="#outpost">outpost</a>
bu düzenin içinde filizlendi.</p>
<div class="roots">
<a href="https://bp.tunapro.xyz">bp.tunapro.xyz</a>
<a href="https://github.com/tunapro1234/blueprint">github/blueprint</a>
</div>
</article>
<article class="note" id="outpost">
<div class="stage"><span class="s">🌿 filiz</span><span>son sulama: bugün</span></div>
<h2><a href="https://github.com/tunapro1234/outpost">outpost</a></h2>
<p>Graph-merkezli bir outreach aracı: insanlar, bağlantılar ve konuşmalar birer düğüm.
Şu an bahçenin kilitli serası<a href="https://outpost.tunapro.xyz">canlı hali</a> parola
istiyor, çünkü içinde gerçek insanlar var. En sık sulanan fidan bu.</p>
<div class="roots">
<a href="https://github.com/tunapro1234/outpost">github/outpost</a>
<a href="https://outpost.tunapro.xyz">outpost.tunapro.xyz 🔒</a>
</div>
</article>
<article class="note" id="probot">
<div class="stage"><span class="s">🌳 çınar</span><span>MIT · 9★</span></div>
<h2><a href="https://probotstudio.com">Probot Studio</a></h2>
<p><em>«Bir kit, sonsuz robot.»</em> Arduino tabanlı robot yarışmaları için geliştirdiğimiz
kütüphane ve kit ekosistemi. Çekirdeği açık: <code>probot-core</code>, sahada denenmiş
embedded control middleware. <a class="wiki" href="#frc">FRC yıllarımın</a> toprağında yetişti.</p>
<div class="roots">
<a href="https://probotstudio.com">probotstudio.com</a>
<a href="https://github.com/probot-studio/probot-core">github/probot-core</a>
</div>
</article>
<article class="note" id="homelab">
<div class="stage"><span class="s">🌿 filiz</span><span>7/24 vızıldıyor</span></div>
<h2>homelab: *.tunapro.xyz</h2>
<p>Self-host etmediğim şey kalmasın: kod <a href="https://git.tunapro.xyz">Gitea</a>'da,
medya kendi video sunucumda, Minecraft sunucusunun paneli <code>mcdash</code>'te, mail bile
burada. Bu bahçe de dahil — okuduğun sayfa benim demirimde dönüyor.
<a class="wiki" href="#blueprint">blueprint</a> bu makinelerde yaşar.</p>
<div class="roots">
<a href="https://git.tunapro.xyz">git.tunapro.xyz</a>
<a href="https://video.tunapro.xyz">video</a>
<a href="https://mcdash.tunapro.xyz">mcdash</a>
</div>
</article>
<article class="note" id="replicant">
<div class="stage"><span class="s">🌱 fide</span><span>dikim may 2026</span></div>
<h2><a href="https://github.com/tunapro1234/replicant">replicant</a></h2>
<p>AI agent deneyleri: bir agent'ın kendini ve iş arkadaşlarını kopyalayıp çoğaltması üzerine
Python karalamaları. Adı tesadüf değil. Büyüyünce ne olacağını ben de bilmiyorum — fidelerin
güzelliği bu. Kardeşi: <a class="wiki" href="#metron">metron</a>.</p>
<div class="roots"><a href="https://github.com/tunapro1234/replicant">github/replicant</a></div>
</article>
<article class="note" id="metron">
<div class="stage"><span class="s">🌱 fide</span><span>1★</span></div>
<h2><a href="https://github.com/tunapro1234/metron">metron</a></h2>
<p>Ölçmediğin şeyi yönetemezsin: agent'lar ve sistemler için Python'da metrik/ölçüm katmanı.
<a class="wiki" href="#replicant">replicant</a> koşarken metron sayar.</p>
<div class="roots"><a href="https://github.com/tunapro1234/metron">github/metron</a></div>
</article>
<article class="note" id="sims">
<div class="stage"><span class="s">🌱 fide</span><span>okuma listesi büyüyor</span></div>
<h2>LLM'lerle toplum simülasyonu</h2>
<p>AI agent'larla toplum kurma merakım: <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>'ta
agent'lar headless SimCity'de şehir kuruyor; <a href="https://github.com/tunapro1234/edsl-test">EDSL</a> ile
AI destekli anket/deney tasarımını kurcalıyorum. Not defteri:
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">awesome-llm-social-simulation</a>.</p>
<div class="roots"><a href="https://github.com/tunapro1234/awesome-llm-social-simulation">github/awesome-llm-social-simulation</a></div>
</article>
<article class="note" id="frc">
<div class="stage"><span class="s">🌳 çınar</span><span>kökler burada</span></div>
<h2>FRC 7839 &amp; 9029 → NFR Products</h2>
<p>Robotikle FRC sahasında tanıştım (7839 ve 9029). O sahadan bir dönem donanım işine de
girdik; benim payıma düşen kökler bugün <a class="wiki" href="#probot">Probot Studio</a>'da —
yarış robotlarından yarışma kitlerine.</p>
<div class="roots"><a href="https://github.com/team-nf">github/team-nf</a></div>
</article>
<article class="note" id="elevator">
<div class="stage"><span class="s">🌱 fide</span><span>Rust · 1★</span></div>
<h2><a href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a></h2>
<p>Asansör çizelgelemesi ne kadar optimize edilebilir? Rust'la yazılmış küçük bir saplantı.
Beklerken düşünülen her şey proje olabilir.</p>
<div class="roots"><a href="https://github.com/tunapro1234/elevator_optimization">github/elevator_optimization</a></div>
</article>
<article class="note curio" id="canbitirici">
<div class="stage"><span class="s">🍄 mantar</span><span>hakemli değil, kesin doğru</span></div>
<h2><a href="https://canbitirici.tunapro.xyz">Can neden iş bitirici değil?</a></h2>
<p>Bahçenin gölgesinde kendiliğinden biten tür: titiz metodolojiyle hazırlanmış(!) bir
araştırma raporu. Bilim böyle bir şey olmalı — kişisel, kindar ve grafikli.</p>
<div class="roots"><a href="https://canbitirici.tunapro.xyz">canbitirici.tunapro.xyz</a></div>
</article>
</div>
<section class="about" id="hakkinda">
<div>
<h3>Bahçıvan</h3>
<p>Ben <strong>Tuna Gül</strong> — Türkiye'de mühendislik öğrencisi; robotik, AI agent'lar ve
sistem mimarisiyle uğraşıyorum. İnancım basit: bir sistem <em>kurulabiliyorsa</em>, kurulacak.
O yüzden izlemek yerine kurmayı seçiyorum.</p>
<p>Bu bahçedeki notlar bitmiş metinler değil; yarım fikirler, çalışan prototipler, birkaç şaka.
Hepsi kendi toprağımda (kendi sunucularımda) duruyor. Bir not sana yarım geldiyse, doğru
gelmiştir — geri gel, büyümüş olur.</p>
</div>
<div>
<h3>Patikalar</h3>
<ul class="paths">
<li><a href="https://github.com/tunapro1234">GitHub</a><span class="where">@tunapro1234</span></li>
<li><a href="https://git.tunapro.xyz">Kendi Gitea'm</a><span class="where">git.tunapro.xyz</span></li>
<li><a href="https://probotstudio.com">Probot Studio</a><span class="where">probotstudio.com</span></li>
<li><a href="https://stackoverflow.com/users/tunapro1234">Neredeyse her yerde</a><span class="where">@tunapro1234</span></li>
</ul>
</div>
</section>
</main>
<footer>
<span>© 2026 Tuna Gül · bahçe kendi sunucusunda büyür</span>
<span class="gate">yıllıktaki QR'dan mı geldin? <a href="/yillik/">senin için ayrı bir köşe var →</a></span>
</footer>
</div>
</body>
</html>

307
v2/index.html Normal file
View File

@@ -0,0 +1,307 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tunapro — gece bahçesi</title>
<meta name="description" content="Tuna Gül'ün dijital bahçesi, gece modu: projeler bir graf, notlar birer düğüm. tmux'ta yaşayan biri için doğal habitat.">
<style>
:root{
--bg:#0b0f0d; --panel:#10161200; --panel-solid:#101612; --line:#1e2b23;
--fg:#c9d6cc; --dim:#6d7f73; --green:#5dd39e; --amber:#e8b45a; --red:#e06c75;
--mono:ui-monospace,"JetBrains Mono","Fira Code",Menlo,Consolas,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--fg);font-family:var(--mono);font-size:15px;line-height:1.6;overflow:hidden}
a{color:var(--green)}
#sky{position:fixed;inset:0;display:block;cursor:grab}
#sky.dragging{cursor:grabbing}
.hud{position:fixed;left:0;right:0;pointer-events:none;z-index:10}
.hud *{pointer-events:auto}
header.hud{top:0;padding:22px 26px;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.brand h1{font-size:18px;font-weight:600;color:var(--fg)}
.brand h1 .p{color:var(--green)}
.brand .sub{font-size:12.5px;color:var(--dim);max-width:52ch;margin-top:6px}
.legend{font-size:12px;color:var(--dim);text-align:right;line-height:1.9}
.legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px}
.legend .d1{background:var(--green)} .legend .d2{background:var(--amber)} .legend .d3{background:#7aa2f7}
footer.hud{bottom:0;background:var(--panel-solid);border-top:1px solid var(--line);
display:flex;align-items:center;gap:0;font-size:12.5px;height:34px;overflow:hidden}
footer .seg{padding:0 14px;display:flex;align-items:center;height:100%;white-space:nowrap}
footer .seg.g{background:var(--green);color:#08130d;font-weight:600}
footer .seg.dim{color:var(--dim)}
footer .grow{flex:1}
footer a{color:var(--fg);text-decoration:none;padding:0 10px;height:100%;display:flex;align-items:center}
footer a:hover{background:var(--line);color:var(--green)}
#card{
position:fixed;top:0;right:0;bottom:34px;width:min(460px,100vw);z-index:20;
background:rgba(13,19,15,.97);border-left:1px solid var(--line);
transform:translateX(105%);transition:transform .25s ease;
padding:28px;overflow-y:auto;backdrop-filter:blur(8px);
}
#card.open{transform:translateX(0)}
#card .close{position:absolute;top:16px;right:18px;background:none;border:1px solid var(--line);
color:var(--dim);font-family:var(--mono);font-size:13px;padding:3px 10px;cursor:pointer;border-radius:4px}
#card .close:hover{color:var(--red);border-color:var(--red)}
#card .stage{font-size:12px;color:var(--amber);letter-spacing:.08em;text-transform:uppercase}
#card h2{margin:10px 0 4px;font-size:22px;color:#fff}
#card .meta{font-size:12px;color:var(--dim);margin-bottom:16px}
#card .body{font-size:14px;color:var(--fg)}
#card .body p{margin-bottom:12px}
#card .body .cmt{color:var(--dim)}
#card .links{margin-top:18px;border-top:1px dashed var(--line);padding-top:14px;display:flex;flex-direction:column;gap:8px;font-size:13px}
#card .links a{text-decoration:none}
#card .links a:hover{text-decoration:underline}
#card .links a::before{content:"$ open ";color:var(--dim)}
#card .also{margin-top:18px;font-size:12.5px;color:var(--dim)}
#card .also button{background:var(--line);border:none;color:var(--green);font-family:var(--mono);
font-size:12px;padding:2px 8px;margin:2px 4px 2px 0;border-radius:3px;cursor:pointer}
#card .also button:hover{background:var(--green);color:#08130d}
#hint{position:fixed;left:50%;bottom:52px;transform:translateX(-50%);z-index:9;
font-size:12px;color:var(--dim);background:var(--panel-solid);border:1px solid var(--line);
padding:6px 14px;border-radius:20px;transition:opacity .5s}
#hint.hide{opacity:0}
@media(max-width:700px){.legend{display:none}}
@media (prefers-reduced-motion: reduce){ /* JS de yavaşlatır */ }
</style>
</head>
<body>
<canvas id="sky" aria-label="proje grafı: her yıldız bir not"></canvas>
<header class="hud">
<div class="brand">
<h1><span class="p">tuna@tunapro</span>:~/bahce $ <span style="color:var(--amber)">ls --graph</span></h1>
<div class="sub">Gece bahçesi. Her yıldız bir proje-notu, çizgiler fikirler arası kök bağlantıları.
Bir yıldıza tıkla; sürükleyip kurcalayabilirsin — bahçeler kurcalanmak içindir.</div>
</div>
<div class="legend">
<div><span class="dot d1"></span>🌳 köklendi — çalışıyor, yaşıyor</div>
<div><span class="dot d2"></span>🌿 büyüyor — düzenli commit alıyor</div>
<div><span class="dot d3"></span>🌱 fide — yarım fikir, taze toprak</div>
</div>
</header>
<div id="hint">bir yıldıza tıkla ✦</div>
<aside id="card" aria-live="polite">
<button class="close" onclick="closeCard()">esc</button>
<div class="stage" id="c-stage"></div>
<h2 id="c-title"></h2>
<div class="meta" id="c-meta"></div>
<div class="body" id="c-body"></div>
<div class="links" id="c-links"></div>
<div class="also" id="c-also"></div>
</aside>
<footer class="hud">
<span class="seg g">[bahce]</span>
<span class="seg">0:graf*</span>
<span class="seg dim">1:hakkımda</span>
<span class="grow"></span>
<a href="https://github.com/tunapro1234">github</a>
<a href="https://git.tunapro.xyz">gitea</a>
<a href="https://probotstudio.com">probot</a>
<a href="/yillik/">yıllık→</a>
<span class="seg dim" id="clock"></span>
<span class="seg dim">tunapro.xyz</span>
</footer>
<script>
const NOTES = {
ben: {
title:"tuna gül", stage:"çekirdek", tier:0, meta:"bahçıvan · mühendislik öğrencisi · TR",
body:`<p>Robotik, AI agent'lar, sistem mimarisi. İlkem: bir sistem <b>kurulabiliyorsa</b>, kurulacak — o yüzden izleyen değil kuran taraftayım.</p>
<p class="cmt"># bu graf benim kafamın içi; düğümler proje, kenarlar kök.</p>
<p>Her yerde <b>@tunapro1234</b>. Bu site dahil her şey kendi demirimde dönüyor.</p>`,
links:[["github.com/tunapro1234","https://github.com/tunapro1234"],["git.tunapro.xyz","https://git.tunapro.xyz"]],
edges:["blueprint","probot","homelab","frc","sims"]
},
blueprint: {
title:"blueprint (bp)", stage:"🌳 köklendi", tier:1, meta:"Go · tmux · dikim 2025, hâlâ sulanıyor",
body:`<p>tmux içinde bir AI agent <b>filosunu</b> yöneten orkestrasyon aracı. Paketler <code>BLUEPRINT.yaml</code> ile tanımlanır; snapshot tabanlı versiyonlama, symlink'le sabitlenen bağımlılıklar.</p>
<p class="cmt"># agent'lar tmux pane'lerinde yaşar. ben sadece bahçıvanım.</p>`,
links:[["bp.tunapro.xyz","https://bp.tunapro.xyz"],["github.com/tunapro1234/blueprint","https://github.com/tunapro1234/blueprint"]],
edges:["replicant","outpost","homelab"]
},
outpost: {
title:"outpost", stage:"🌿 büyüyor", tier:2, meta:"JavaScript · son push: bugün",
body:`<p>Graf-merkezli outreach aracı: insanlar, bağlantılar ve konuşmalar düğüm olarak tutulur. (Evet, bu sayfayla aynı fikir — grafları seviyorum.)</p>
<p>Canlı hali kilitli sera 🔒 — içinde gerçek insanlar var.</p>`,
links:[["github.com/tunapro1234/outpost","https://github.com/tunapro1234/outpost"],["outpost.tunapro.xyz (🔒)","https://outpost.tunapro.xyz"]],
edges:["metron"]
},
probot: {
title:"probot studio", stage:"🌳 köklendi", tier:1, meta:"C++ / Arduino · MIT · 9★",
body:`<p><i>«Bir kit, sonsuz robot.»</i> Arduino tabanlı robot yarışmaları için kütüphane + kit ekosistemi. Çekirdeği açık kaynak: <code>probot-core</code>, sahada denenmiş embedded control middleware.</p>`,
links:[["probotstudio.com","https://probotstudio.com"],["github.com/probot-studio/probot-core","https://github.com/probot-studio/probot-core"]],
edges:["frc"]
},
homelab: {
title:"homelab: *.tunapro.xyz", stage:"🌿 büyüyor", tier:2, meta:"7/24 vızıldıyor · self-host her şey",
body:`<p>Kod <a href="https://git.tunapro.xyz">Gitea</a>'da, medya kendi video sunucumda, Minecraft paneli <code>mcdash</code>'te, mail bile burada. Okuduğun sayfa da bu makinelerde.</p>
<p class="cmt"># bulut diye bir şey yok, başkasının bilgisayarı var.</p>`,
links:[["git.tunapro.xyz","https://git.tunapro.xyz"],["video.tunapro.xyz","https://video.tunapro.xyz"],["mcdash.tunapro.xyz","https://mcdash.tunapro.xyz"]],
edges:["blueprint"]
},
replicant: {
title:"replicant", stage:"🌱 fide", tier:3, meta:"Python · dikim may 2026",
body:`<p>Agent'ların kendini ve iş arkadaşlarını kopyalayıp çoğaltması üzerine deneyler. Adı tesadüf değil. Ne olacağını ben de bilmiyorum; fidelerin güzelliği bu.</p>`,
links:[["github.com/tunapro1234/replicant","https://github.com/tunapro1234/replicant"]],
edges:["metron","sims"]
},
metron: {
title:"metron", stage:"🌱 fide", tier:3, meta:"Python · 1★",
body:`<p>Ölçmediğin şeyi yönetemezsin: agent'lar ve sistemler için metrik/ölçüm katmanı. replicant koşar, metron sayar.</p>`,
links:[["github.com/tunapro1234/metron","https://github.com/tunapro1234/metron"]],
edges:[]
},
sims: {
title:"llm toplum simülasyonları", stage:"🌱 fide", tier:3, meta:"okuma listesi + deneyler",
body:`<p>AI agent'larla toplum kurma merakı: <b>hallucinating-splines</b>'ta agent'lar headless SimCity'de şehir kuruyor; <b>EDSL</b> ile AI destekli anket/deney tasarımı.</p>`,
links:[["awesome-llm-social-simulation","https://github.com/tunapro1234/awesome-llm-social-simulation"],["hallucinating-splines","https://github.com/tunapro1234/hallucinating-splines"]],
edges:["replicant"]
},
frc: {
title:"frc 7839 & 9029 → nfr", stage:"🌳 kökler", tier:1, meta:"robotiğe giriş kapım",
body:`<p>Robotikle FRC sahasında tanıştım (7839 ve 9029). O sahadan bir dönem donanım işine de girdik; benim payıma düşen kökler bugün Probot Studio'da yaşıyor.</p>`,
links:[["github.com/team-nf","https://github.com/team-nf"]],
edges:["probot"]
},
elevator: {
title:"elevator_optimization", stage:"🌱 fide", tier:3, meta:"Rust · 1★",
body:`<p>Asansör çizelgelemesi ne kadar optimize edilebilir? Rust'la yazılmış küçük bir saplantı. Beklerken düşünülen her şey proje olabilir.</p>`,
links:[["github.com/tunapro1234/elevator_optimization","https://github.com/tunapro1234/elevator_optimization"]],
edges:["ben"]
},
canbitirici: {
title:"can neden iş bitirici değil?", stage:"🍄 mantar", tier:4, meta:"hakemli değil ama kesin doğru",
body:`<p>Bahçenin gölgesinde kendiliğinden biten tür: titiz metodolojiyle(!) hazırlanmış araştırma raporu. Bilim kişisel, kindar ve grafikli olmalı.</p>`,
links:[["canbitirici.tunapro.xyz","https://canbitirici.tunapro.xyz"]],
edges:["ben"]
},
};
const COLORS = {0:"#ffffff",1:"#5dd39e",2:"#e8b45a",3:"#7aa2f7",4:"#e06c75"};
const RADII = {0:9,1:7,2:6,3:5,4:5};
const cv = document.getElementById("sky"), ctx = cv.getContext("2d");
let W,H,DPR; const nodes=[], edges=[];
const reduced = matchMedia("(prefers-reduced-motion: reduce)").matches;
function resize(){DPR=devicePixelRatio||1;W=innerWidth;H=innerHeight;cv.width=W*DPR;cv.height=H*DPR;cv.style.width=W+"px";cv.style.height=H+"px";ctx.setTransform(DPR,0,0,DPR,0,0);}
resize(); addEventListener("resize",resize);
const ids = Object.keys(NOTES);
ids.forEach((id,i)=>{
const a = (i/ids.length)*Math.PI*2;
const r = NOTES[id].tier===0?0:(120+NOTES[id].tier*60);
nodes.push({id,x:W/2+Math.cos(a)*r+(Math.random()*40-20),y:H/2+Math.sin(a)*r*0.7+(Math.random()*40-20),vx:0,vy:0,fixed:false});
});
ids.forEach(id=>NOTES[id].edges.forEach(t=>{ if(NOTES[t]) edges.push([id,t]); }));
const byId = id=>nodes.find(n=>n.id===id);
let selected=null, hover=null, drag=null, t=0;
function step(){
// hafif force layout
for(const n of nodes){
if(n.fixed||n===drag) continue;
let fx=0, fy=0;
for(const m of nodes){ if(m===n) continue;
const dx=n.x-m.x, dy=n.y-m.y, d2=dx*dx+dy*dy+0.01, d=Math.sqrt(d2);
const rep=Math.min(9000/d2,3); fx+=dx/d*rep; fy+=dy/d*rep;
}
for(const [a,b] of edges){
let o=null; if(a===n.id) o=byId(b); else if(b===n.id) o=byId(a);
if(!o) continue;
const dx=o.x-n.x, dy=o.y-n.y, d=Math.hypot(dx,dy)||1, pull=(d-140)*0.004;
fx+=dx/d*pull*d*0.02; fy+=dy/d*pull*d*0.02;
}
fx+=(W/2-n.x)*0.0012; fy+=(H/2-n.y)*0.0012;
n.vx=(n.vx+fx)*0.86; n.vy=(n.vy+fy)*0.86;
n.x+=n.vx; n.y+=n.vy;
n.x=Math.max(50,Math.min(W-50,n.x)); n.y=Math.max(90,Math.min(H-70,n.y));
}
}
function draw(){
t+=reduced?0:0.008;
ctx.clearRect(0,0,W,H);
// arka plan yıldız tozu
ctx.fillStyle="rgba(120,150,130,.25)";
for(let i=0;i<70;i++){
const x=(i*137.5)%W, y=(i*89.7)%H;
const tw=reduced?0.5:(Math.sin(t*2+i)*0.5+0.5);
ctx.globalAlpha=0.08+tw*0.12; ctx.fillRect(x,y,1.5,1.5);
}
ctx.globalAlpha=1;
// kenarlar
for(const [a,b] of edges){
const n1=byId(a), n2=byId(b);
const active = selected && (a===selected||b===selected);
ctx.strokeStyle = active? "rgba(93,211,158,.65)":"rgba(93,211,158,.14)";
ctx.lineWidth = active?1.6:1;
ctx.beginPath(); ctx.moveTo(n1.x,n1.y); ctx.lineTo(n2.x,n2.y); ctx.stroke();
}
// düğümler
for(const n of nodes){
const note=NOTES[n.id], r=RADII[note.tier], c=COLORS[note.tier];
const isSel=n.id===selected, isHov=n.id===hover;
const pulse = reduced?0:Math.sin(t*3+n.x)*1.2;
ctx.beginPath(); ctx.arc(n.x,n.y,r+(isSel?4:isHov?2:0)+ (note.tier===2?pulse*0.5:0),0,7);
ctx.fillStyle=c; ctx.shadowColor=c; ctx.shadowBlur=isSel||isHov?22:10; ctx.fill(); ctx.shadowBlur=0;
ctx.fillStyle = isSel||isHov ? "#e9f5ec" : "rgba(201,214,204,.75)";
ctx.font="12.5px ui-monospace,Menlo,monospace"; ctx.textAlign="center";
ctx.fillText(note.title, n.x, n.y+r+18);
}
step();
requestAnimationFrame(draw);
}
requestAnimationFrame(draw);
function pick(x,y){
for(const n of nodes){ if(Math.hypot(n.x-x,n.y-y)<22) return n; }
return null;
}
cv.addEventListener("pointermove",e=>{
if(drag){drag.x=e.clientX;drag.y=e.clientY;drag.vx=drag.vy=0;return;}
hover=pick(e.clientX,e.clientY)?.id||null;
cv.style.cursor=hover?"pointer":"grab";
});
let downAt=null;
cv.addEventListener("pointerdown",e=>{
const n=pick(e.clientX,e.clientY);
if(n){drag=n;cv.classList.add("dragging");downAt=[e.clientX,e.clientY];cv.setPointerCapture(e.pointerId);}
});
cv.addEventListener("pointerup",e=>{
cv.classList.remove("dragging");
if(drag&&downAt&&Math.hypot(e.clientX-downAt[0],e.clientY-downAt[1])<6) openCard(drag.id);
drag=null;downAt=null;
});
function openCard(id){
const n=NOTES[id]; selected=id;
document.getElementById("hint").classList.add("hide");
document.getElementById("c-stage").textContent=n.stage;
document.getElementById("c-title").textContent=n.title;
document.getElementById("c-meta").textContent=n.meta;
document.getElementById("c-body").innerHTML=n.body;
document.getElementById("c-links").innerHTML=n.links.map(([t,u])=>`<a href="${u}" target="_blank" rel="noopener">${t}</a>`).join("");
const also=n.edges.filter(e=>NOTES[e]);
document.getElementById("c-also").innerHTML = also.length?
"kökleri şuraya uzanıyor: "+also.map(e=>`<button onclick="openCard('${e}')">${NOTES[e].title}</button>`).join(""):"";
document.getElementById("card").classList.add("open");
}
function closeCard(){document.getElementById("card").classList.remove("open");selected=null;}
addEventListener("keydown",e=>{if(e.key==="Escape")closeCard();});
// tmux saati
const clock=document.getElementById("clock");
setInterval(()=>{const d=new Date();clock.textContent=d.toLocaleTimeString("tr-TR",{hour:"2-digit",minute:"2-digit"});},1000);
// açılışta merkezi ipucu
setTimeout(()=>{ if(!selected) openCard("ben"); }, 1400);
</script>
</body>
</html>

417
v3/index.html Normal file
View File

@@ -0,0 +1,417 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>TUNAPRO.XYZ — fihrist</title>
<meta name="description" content="Tuna Gül'ün dijital bahçesi, fihrist düzeni: robotik, AI agent'ları ve self-host edilen her şey. Her satır bir proje, her proje yarım — ve bundan gurur duyuyoruz.">
<style>
:root{
--bg:#f4f1ea; --ink:#141412; --red:#d63c2f; --dim:#8a857a; --line:#141412;
--serif:"Iowan Old Style",Palatino,Georgia,serif;
--sans:-apple-system,"Inter","Helvetica Neue",Arial,sans-serif;
--mono:ui-monospace,Menlo,Consolas,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
::selection{background:var(--red);color:#fff}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.5}
a{color:inherit}
img{max-width:100%}
.wrap{max-width:1180px;margin:0 auto;padding:0 22px}
/* masthead */
.mast{border-bottom:3px solid var(--line);padding:26px 0 18px;display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:10px}
.mast .logo{font-family:var(--mono);font-weight:700;font-size:15px;letter-spacing:.1em}
.mast .logo span{color:var(--red)}
.mast nav{font-family:var(--mono);font-size:12px;display:flex;gap:18px}
.mast nav a{text-decoration:none;color:var(--dim)}
.mast nav a:hover{color:var(--red)}
.mast .date{font-family:var(--mono);font-size:12px;color:var(--dim)}
/* hero */
.hero{padding:54px 0 44px;border-bottom:3px solid var(--line);display:grid;grid-template-columns:1.6fr 1fr;gap:40px;align-items:end}
@media(max-width:860px){.hero{grid-template-columns:1fr}}
.hero h1{font-family:var(--serif);font-weight:600;font-size:clamp(42px,8vw,92px);line-height:1.02;letter-spacing:-.02em}
.hero h1 em{font-style:italic;color:var(--red)}
.hero p{max-width:58ch;margin-top:22px;font-size:17px;color:#3a382f}
.hero .rules{margin-top:18px;font-family:var(--mono);font-size:12.5px;color:var(--dim);display:flex;gap:20px;flex-wrap:wrap}
.hero .rules b{color:var(--red);font-weight:700}
.hero figure{position:relative}
.hero figure svg{width:100%;height:auto;display:block}
.hero figcaption{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:8px;text-align:right}
/* ticker */
.ticker{border-bottom:3px solid var(--line);overflow:hidden;background:var(--ink);color:var(--bg)}
.ticker .tape{display:flex;white-space:nowrap;animation:roll 28s linear infinite;width:max-content;padding:8px 0;font-family:var(--mono);font-size:12.5px}
.ticker .tape span{padding:0 26px}
.ticker .tape span::after{content:"✦";color:var(--red);margin-left:26px}
@keyframes roll{to{transform:translateX(-50%)}}
@media (prefers-reduced-motion: reduce){.ticker .tape{animation:none}}
/* bölüm başlıkları */
.chapter{display:grid;grid-template-columns:1fr auto;gap:26px;align-items:end;
padding:64px 0 18px;border-bottom:3px solid var(--line)}
@media(max-width:640px){.chapter{grid-template-columns:1fr}.chapter svg{display:none}}
.chapter .roman{font-family:var(--mono);font-size:12px;letter-spacing:.24em;text-transform:uppercase;color:var(--red)}
.chapter h2{font-family:var(--serif);font-size:clamp(30px,5vw,54px);font-weight:600;letter-spacing:-.015em;margin-top:8px}
.chapter .desc{font-size:14.5px;color:var(--dim);margin-top:8px;max-width:58ch}
.chapter svg{height:92px;width:auto}
/* fihrist satırları */
.row{border-bottom:1px solid #c9c3b4}
.row summary{
list-style:none;cursor:pointer;display:grid;
grid-template-columns:56px 1fr auto auto;gap:18px;align-items:baseline;
padding:20px 0;transition:padding .15s ease;
}
.row summary::-webkit-details-marker{display:none}
.row summary:hover{padding-left:12px}
.row .no{font-family:var(--mono);font-size:13px;color:var(--dim)}
.row .name{font-family:var(--serif);font-size:clamp(22px,3.4vw,34px);font-weight:600;letter-spacing:-.01em}
.row[open] .name, .row summary:hover .name{color:var(--red);font-style:italic}
.row .tag{font-family:var(--mono);font-size:12px;color:var(--dim);text-align:right}
.row .stage{font-size:16px}
.row .inner{display:grid;grid-template-columns:56px 1.5fr 1fr;gap:18px 28px;padding:0 0 30px}
.row .inner p{font-size:16px;color:#33312a;margin-bottom:10px;max-width:62ch}
.row .inner p a{color:var(--red);text-decoration-thickness:1px;text-underline-offset:3px}
.row .fig{grid-column:3}
.row .fig img{width:100%;border:2px solid var(--line);filter:grayscale(1) contrast(1.08);
transition:filter .25s ease;display:block;background:#fff}
.row .fig:hover img{filter:grayscale(0)}
.row .fig .cap{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:6px}
.row .go{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.row .go a{
font-family:var(--mono);font-size:12.5px;text-decoration:none;
border:1.5px solid var(--ink);padding:6px 12px;border-radius:999px;
transition:background .12s,color .12s;
}
.row .go a:hover{background:var(--ink);color:var(--bg)}
.row .go a.hot:hover{background:var(--red);border-color:var(--red)}
@media(max-width:820px){
.row .inner{grid-template-columns:56px 1fr}
.row .fig{grid-column:2;max-width:420px}
}
@media(max-width:640px){
.row summary{grid-template-columns:36px 1fr auto}
.row .tag{display:none}
.row .inner{grid-template-columns:1fr}
.row .inner>.sp{display:none}
.row .fig{grid-column:auto}
}
/* bahçıvan */
.duo{display:grid;grid-template-columns:auto 1.3fr 1fr;border-bottom:3px solid var(--line);border-top:3px solid var(--line);margin-top:70px}
@media(max-width:860px){.duo{grid-template-columns:1fr}}
.duo>div{padding:36px 26px}
.duo>div:not(:last-child){border-right:3px solid var(--line)}
@media(max-width:860px){.duo>div:not(:last-child){border-right:none;border-bottom:3px solid var(--line)}}
.duo h3{font-family:var(--mono);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--red);margin-bottom:14px}
.duo p{font-size:15.5px;color:#33312a;margin-bottom:10px;max-width:52ch}
.duo .big{font-family:var(--serif);font-size:23px;line-height:1.35;font-weight:500}
.portrait{display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center}
.portrait img{width:170px;height:170px;object-fit:cover;border:3px solid var(--line);
filter:grayscale(1) contrast(1.1);transition:filter .25s ease}
.portrait img:hover{filter:grayscale(0)}
.portrait .cap{font-family:var(--mono);font-size:11px;color:var(--dim);text-align:center}
.socials{list-style:none;font-family:var(--mono);font-size:14px}
.socials li{padding:9px 0;border-bottom:1px dashed #c9c3b4;display:flex;justify-content:space-between;gap:10px}
.socials li:last-child{border:none}
.socials a{text-decoration:none}
.socials a:hover{color:var(--red)}
.socials .at{color:var(--dim);font-size:12.5px}
footer{padding:30px 0 70px;font-family:var(--mono);font-size:12.5px;color:var(--dim);display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px}
footer a{color:var(--red);text-decoration:none}
footer a:hover{text-decoration:underline}
</style>
</head>
<body>
<div class="wrap">
<div class="mast">
<div class="logo">TUNAPRO<span>.</span>XYZ — DİJİTAL BAHÇE FİHRİSTİ</div>
<nav>
<a href="#robotik">I·robotik</a>
<a href="#ai">II·ai</a>
<a href="#sera">III·sera</a>
<a href="#bahcivan">bahçıvan</a>
</nav>
<div class="date">cilt 1 · yaz 2026 · kendi sunucusunda basılmıştır</div>
</div>
<section class="hero">
<div>
<h1>Yarım işler,<br><em>tam niyetler</em>.</h1>
<p>Burası Tuna Gül'ün dijital bahçesinin fihristi: robotlar, AI agent'ları ve
self-host edilen her şeyin kayıt defteri. Hiçbir madde "bitti" diye kapanmaz;
bahçede öyle bir mevsim yok. Bir satıra tıkla, kökünü gör.</p>
<div class="rules">
<span><b>🌳</b> köklendi</span>
<span><b>🌿</b> büyüyor</span>
<span><b>🌱</b> fide</span>
<span><b>🍄</b> kendiliğinden bitti</span>
</div>
</div>
<figure>
<!-- editoryal çizim: saksıda filizlenen devre -->
<svg viewBox="0 0 320 260" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="saksıdan filizlenen devre çizimi">
<g stroke="#141412" stroke-width="3" stroke-linecap="round">
<path d="M100 200 h120 l-14 44 h-92 z"/>
<path d="M160 200 v-70"/>
<path d="M160 156 c-34 -6 -50 -30 -52 -56 26 2 48 18 52 44"/>
<path d="M160 138 c34 -8 46 -32 46 -58 -28 4 -46 22 -46 46"/>
</g>
<g stroke="#d63c2f" stroke-width="2.5" stroke-linecap="round">
<path d="M160 130 v-60 h44"/>
<path d="M160 96 h-52 v-34"/>
<circle cx="204" cy="70" r="6"/>
<circle cx="108" cy="62" r="6"/>
<path d="M160 70 v-40"/>
<rect x="152" y="14" width="16" height="16"/>
</g>
<g fill="#141412" font-family="ui-monospace,Menlo,monospace" font-size="10">
<text x="216" y="74">sinyal</text>
<text x="60" y="56">kök</text>
</g>
</svg>
<figcaption>şek. 1 — bahçenin çalışma prensibi</figcaption>
</figure>
</section>
</div>
<div class="ticker" aria-hidden="true">
<div class="tape">
<span>bulut yok, başkasının bilgisayarı var</span><span>bir kit, sonsuz robot</span><span>agent'lar tmux'ta yaşar</span><span>ölçmediğini yönetemezsin</span><span>her yerde @tunapro1234</span>
<span>bulut yok, başkasının bilgisayarı var</span><span>bir kit, sonsuz robot</span><span>agent'lar tmux'ta yaşar</span><span>ölçmediğini yönetemezsin</span><span>her yerde @tunapro1234</span>
</div>
</div>
<div class="wrap">
<!-- ============ BÖLÜM I: ROBOTİK ============ -->
<section class="chapter" id="robotik">
<div>
<div class="roman">Bölüm I</div>
<h2>Robotik</h2>
<div class="desc">Her şeyin başladığı yer: FRC sahası, lehim dumanı, son gece sürücü kodu.
Buradaki maddeler ellerimle tuttuğum şeyler.</div>
</div>
<!-- çizim: diferansiyel sürüşlü robot -->
<svg viewBox="0 0 220 110" fill="none" aria-hidden="true">
<g stroke="#141412" stroke-width="3" stroke-linecap="round">
<rect x="40" y="34" width="120" height="42" rx="6"/>
<circle cx="66" cy="86" r="16"/><circle cx="134" cy="86" r="16"/>
<path d="M160 50 l30 -22"/><circle cx="194" cy="24" r="5" stroke="#d63c2f"/>
</g>
<g stroke="#d63c2f" stroke-width="2.5"><path d="M56 34 v-14 h24"/><circle cx="86" cy="20" r="4"/></g>
</svg>
</section>
<details class="row" open>
<summary><span class="no">I.1</span><span class="name">Probot Studio</span><span class="stage">🌳</span><span class="tag">c++ · arduino · mit · 9★</span></summary>
<div class="inner"><div class="sp"></div><div>
<p><em>«Bir kit, sonsuz robot.»</em> Arduino tabanlı robot yarışmaları için kütüphane ve kit
ekosistemi. Çekirdeği açık kaynak: <code>probot-core</code>, sahada denenmiş embedded control
middleware. FRC yıllarının toprağında yetişti (bkz. I.2) — yarış robotlarından yarışma kitlerine.</p>
<div class="go">
<a class="hot" href="https://probotstudio.com">probotstudio.com ↗</a>
<a href="https://github.com/probot-studio/probot-core">github/probot-core ↗</a>
</div>
</div>
<figure class="fig">
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core repo kartı" loading="lazy"></a>
<div class="cap">fig. I.1 — probot-core; renk için imleci tut</div>
</figure></div>
</details>
<details class="row">
<summary><span class="no">I.2</span><span class="name">FRC 7839 &amp; 9029</span><span class="stage">🌳</span><span class="tag">kökler · team-nf</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>Lisede FRC 7839'daydım. Lise bitince Mali'yle NF'yi kurduk, FRC 9029. 2023'te NFR
Products'ı kurduk, şirket devam ediyor. Geçen sene Zağanos'taydım, 2025 ve 2026'da da
FIRST Championship'teydik. Altı haftada robot bitiyor çünkü bitmek zorunda, o refleks
hâlâ bende.</p>
<div class="go"><a href="https://github.com/team-nf">github/team-nf ↗</a></div>
</div>
<figure class="fig">
<a href="https://github.com/team-nf"><img src="https://avatars.githubusercontent.com/team-nf?s=400" alt="team-nf logosu" loading="lazy"></a>
<div class="cap">fig. I.2 — team-nf</div>
</figure></div>
</details>
<!-- ============ BÖLÜM II: AI & AGENT'LAR ============ -->
<section class="chapter" id="ai">
<div>
<div class="roman">Bölüm II</div>
<h2>AI &amp; Agent'lar</h2>
<div class="desc">Bahçenin en hızlı büyüyen tarhı: agent filoları, orkestrasyon,
ölçüm ve toplum simülasyonları. Çoğu tmux'ta yaşar.</div>
</div>
<!-- çizim: düğüm grafı -->
<svg viewBox="0 0 220 110" fill="none" aria-hidden="true">
<g stroke="#141412" stroke-width="2.5">
<path d="M40 80 L110 30 L180 76 M110 30 V90 M40 80 L110 90 L180 76"/>
</g>
<g fill="#f4f1ea" stroke="#d63c2f" stroke-width="3">
<circle cx="40" cy="80" r="10"/><circle cx="110" cy="30" r="12"/>
<circle cx="180" cy="76" r="10"/><circle cx="110" cy="90" r="8"/>
</g>
</svg>
</section>
<details class="row" open>
<summary><span class="no">II.1</span><span class="name">blueprint (bp)</span><span class="stage">🌳</span><span class="tag">go · tmux · orkestrasyon</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>tmux içinde bir AI agent <em>filosunu</em> yöneten orkestrasyon aracı. Paketler
<code>BLUEPRINT.yaml</code> ile tasarlanır; snapshot tabanlı versiyonlama, symlink'le
sabitlenmiş bağımlılıklar. Bu bölümün en yaşlı ağacı — fidelerin çoğu onun gölgesinde çıktı.</p>
<div class="go">
<a class="hot" href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
</div>
</div>
<figure class="fig">
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint repo kartı" loading="lazy"></a>
<div class="cap">fig. II.1 — blueprint</div>
</figure></div>
</details>
<details class="row">
<summary><span class="no">II.2</span><span class="name">outpost</span><span class="stage">🌿</span><span class="tag">js · graf · son push: bugün</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>Graf-merkezli outreach aracı: insanlar, bağlantılar ve konuşmalar birer düğüm.
Canlı hali kilitli sera 🔒 — içinde gerçek insanlar var. Şu sıralar en sık sulanan madde.</p>
<div class="go">
<a href="https://github.com/tunapro1234/outpost">github ↗</a>
<a href="https://outpost.tunapro.xyz">outpost.tunapro.xyz 🔒</a>
</div>
</div>
<figure class="fig">
<a href="https://github.com/tunapro1234/outpost"><img src="https://opengraph.githubassets.com/garden/tunapro1234/outpost" alt="outpost repo kartı" loading="lazy"></a>
<div class="cap">fig. II.2 — outpost</div>
</figure></div>
</details>
<details class="row">
<summary><span class="no">II.3</span><span class="name">replicant &amp; metron</span><span class="stage">🌱</span><span class="tag">python · ikiz fideler</span></summary>
<div class="inner"><div class="sp"></div><div>
<p><strong>replicant:</strong> agent'ların kendini ve iş arkadaşlarını kopyalayıp çoğaltması
üzerine deneyler. Adı tesadüf değil; ne olacağını ben de bilmiyorum — fidelerin güzelliği bu.</p>
<p><strong>metron:</strong> ölçmediğin şeyi yönetemezsin. Agent'lar ve sistemler için
metrik/ölçüm katmanı. replicant koşar, metron sayar.</p>
<div class="go">
<a href="https://github.com/tunapro1234/replicant">github/replicant ↗</a>
<a href="https://github.com/tunapro1234/metron">github/metron ↗</a>
</div>
</div>
<figure class="fig">
<a href="https://github.com/tunapro1234/replicant"><img src="https://opengraph.githubassets.com/garden/tunapro1234/replicant" alt="replicant repo kartı" loading="lazy"></a>
<div class="cap">fig. II.3 — replicant</div>
</figure></div>
</details>
<details class="row">
<summary><span class="no">II.4</span><span class="name">LLM toplum simülasyonları</span><span class="stage">🌱</span><span class="tag">araştırma defteri</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>AI agent'larla toplum kurma merakı: <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>'ta
agent'lar headless SimCity'de şehir kuruyor; <a href="https://github.com/tunapro1234/edsl-test">EDSL</a> ile AI
destekli anket/deney tasarımını kurcalıyorum. Okuma listesi de fihristte:
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">awesome-llm-social-simulation</a>.</p>
<div class="go"><a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listesi ↗</a></div>
</div>
<figure class="fig">
<a href="https://github.com/tunapro1234/hallucinating-splines"><img src="https://opengraph.githubassets.com/garden/tunapro1234/hallucinating-splines" alt="hallucinating-splines repo kartı" loading="lazy"></a>
<div class="cap">fig. II.4 — agent'lar şehir kurar</div>
</figure></div>
</details>
<!-- ============ BÖLÜM III: SERA ============ -->
<section class="chapter" id="sera">
<div>
<div class="roman">Bölüm III</div>
<h2>Sera &amp; tuhaflıklar</h2>
<div class="desc">Kategoriye sığmayanlar: kendi demirinde dönen altyapı, küçük saplantılar
ve gölgede kendiliğinden biten türler.</div>
</div>
<!-- çizim: sera / sunucu rafı -->
<svg viewBox="0 0 220 110" fill="none" aria-hidden="true">
<g stroke="#141412" stroke-width="3" stroke-linecap="round">
<path d="M40 96 V46 L86 20 L132 46 V96 z"/>
<path d="M40 46 H132"/>
<rect x="150" y="30" width="40" height="66" rx="4"/>
</g>
<g stroke="#d63c2f" stroke-width="2.5">
<path d="M158 44 h24 M158 58 h24 M158 72 h24"/>
<circle cx="86" cy="70" r="10"/><path d="M86 80 v16"/>
</g>
</svg>
</section>
<details class="row" open>
<summary><span class="no">III.1</span><span class="name">homelab</span><span class="stage">🌿</span><span class="tag">*.tunapro.xyz · 7/24</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>Self-host etmediğim şey kalmasın: kod <a href="https://git.tunapro.xyz">Gitea</a>'da, medya kendi
video sunucumda, Minecraft'ın paneli <code>mcdash</code>'te, mail bile burada. Bu fihrist de
dahil — okuduğun sayfa benim demirimde dönüyor.</p>
<div class="go">
<a href="https://git.tunapro.xyz">git ↗</a>
<a href="https://video.tunapro.xyz">video ↗</a>
<a href="https://mcdash.tunapro.xyz">mcdash ↗</a>
</div>
</div>
<figure class="fig">
<a href="https://git.tunapro.xyz"><img src="https://git.tunapro.xyz/assets/img/logo.svg" alt="git.tunapro.xyz — Gitea" loading="lazy" style="padding:26px;background:#fff"></a>
<div class="cap">fig. III.1 — kendi gitea'm</div>
</figure></div>
</details>
<details class="row">
<summary><span class="no">III.2</span><span class="name">elevator_optimization</span><span class="stage">🌱</span><span class="tag">rust · 1★ · saplantı</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>Asansör çizelgelemesi ne kadar optimize edilebilir? Rust'la yazılmış küçük bir saplantı.
Beklerken düşünülen her şey proje olabilir.</p>
<div class="go"><a href="https://github.com/tunapro1234/elevator_optimization">github ↗</a></div>
</div>
<figure class="fig">
<a href="https://github.com/tunapro1234/elevator_optimization"><img src="https://opengraph.githubassets.com/garden/tunapro1234/elevator_optimization" alt="elevator_optimization repo kartı" loading="lazy"></a>
<div class="cap">fig. III.2 — bekleme süresi ∇</div>
</figure></div>
</details>
<details class="row">
<summary><span class="no">III.3</span><span class="name">Can neden iş bitirici değil?</span><span class="stage">🍄</span><span class="tag">hakemli değil, kesin doğru</span></summary>
<div class="inner"><div class="sp"></div><div>
<p>Bahçenin gölgesinde kendiliğinden biten tür: titiz metodolojiyle(!) hazırlanmış bir
araştırma raporu. Bilim böyle olmalı — kişisel, kindar ve grafikli.</p>
<div class="go"><a class="hot" href="https://canbitirici.tunapro.xyz">raporu oku ↗</a></div>
</div></div>
</details>
<!-- ============ BAHÇIVAN ============ -->
<div class="duo" id="bahcivan">
<div class="portrait">
<img src="https://github.com/tunapro1234.png?size=400" alt="Tuna Gül" loading="lazy">
<div class="cap">bahçıvan, doğal ortamında<br>renk için imleci tut</div>
</div>
<div>
<h3>Bahçıvan</h3>
<p class="big">Tuna Gül — mühendislik öğrencisi. Robotik, AI agent'lar, sistem mimarisi.</p>
<p style="margin-top:12px">Buradaki notların çoğu yarım, bilerek öyle. Sonra gelirsen büyümüş olur.</p>
</div>
<div>
<h3>Patikalar</h3>
<ul class="socials">
<li><a href="https://github.com/tunapro1234">github</a><span class="at">@tunapro1234</span></li>
<li><a href="https://git.tunapro.xyz">kendi gitea'm</a><span class="at">git.tunapro.xyz</span></li>
<li><a href="https://probotstudio.com">probot studio</a><span class="at">probotstudio.com</span></li>
<li><a href="https://stackoverflow.com/users/tunapro1234">neredeyse her yer</a><span class="at">@tunapro1234</span></li>
</ul>
</div>
</div>
<footer>
<span>© 2026 tuna gül — bahçe kendi sunucusunda büyür</span>
<span>yıllıktaki QR'dan mı geldin? <a href="/yillik/">senin için ayrı sayfa var →</a></span>
</footer>
</div>
</body>
</html>

403
v4/index.html Normal file
View File

@@ -0,0 +1,403 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tunapro.xyz · defter</title>
<meta name="description" content="tuna gül'ün dijital bahçesi. robotlar, agent'lar, eski projeler. gevşek bakılan bir bahçe.">
<style>
:root{
--bg:#f4f1ea; --ink:#141412; --red:#d63c2f; --dim:#8a857a; --faint:#c9c3b4;
--serif:"Iowan Old Style",Palatino,Georgia,serif;
--mono:ui-monospace,Menlo,Consolas,monospace;
--sans:-apple-system,"Inter","Helvetica Neue",Arial,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
::selection{background:var(--red);color:#fff}
html{scroll-behavior:smooth;scroll-padding-top:20px}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.55}
a{color:inherit}
img{max-width:100%}
.layout{display:grid;grid-template-columns:280px 1fr;max-width:1240px;margin:0 auto;min-height:100vh}
@media(max-width:900px){.layout{grid-template-columns:1fr}}
/* ---------- sidebar ---------- */
aside{
border-right:3px solid var(--ink);padding:30px 24px 60px;
position:sticky;top:0;height:100vh;overflow-y:auto;
font-family:var(--mono);font-size:13px;
}
@media(max-width:900px){aside{position:static;height:auto;border-right:none;border-bottom:3px solid var(--ink)}}
aside .logo{font-weight:700;font-size:14px;letter-spacing:.08em;margin-bottom:4px}
aside .logo span{color:var(--red)}
aside .sub{color:var(--dim);font-size:11.5px;margin-bottom:26px}
aside .cat{margin-bottom:22px}
aside .cat h4{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin-bottom:8px;font-weight:600}
aside ul{list-style:none}
aside li{padding:3px 0}
aside li a{text-decoration:none;color:var(--ink)}
aside li a:hover{color:var(--red)}
aside li .st{color:var(--dim);font-size:11px;margin-left:6px}
aside .foot{margin-top:34px;padding-top:16px;border-top:1px dashed var(--faint);color:var(--dim);font-size:11.5px;line-height:1.8}
aside .foot a{color:var(--ink);text-decoration:none}
aside .foot a:hover{color:var(--red)}
/* ---------- içerik ---------- */
main{padding:44px 48px 90px;max-width:820px}
@media(max-width:640px){main{padding:30px 20px 70px}}
.hero .intro{font-size:16.5px;color:#33312a;max-width:60ch}
.hero .meta{margin-top:16px;font-family:var(--mono);font-size:12px;color:var(--dim)}
.hero .meta b{color:var(--red);font-weight:600}
.chapter{margin-top:64px;padding-top:14px;border-top:3px solid var(--ink)}
.chapter>.label{font-family:var(--mono);font-size:11.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--red)}
.chapter>h2{font-family:var(--serif);font-size:clamp(26px,4vw,40px);font-weight:600;margin:6px 0 4px;letter-spacing:-.01em}
.chapter>.desc{color:var(--dim);font-size:14px;max-width:58ch}
article{margin-top:38px;padding-top:22px;border-top:1px solid var(--faint)}
article:target{background:linear-gradient(90deg,rgba(214,60,47,.06),transparent 70%);outline:none}
article h3{font-family:var(--serif);font-size:clamp(21px,3vw,28px);font-weight:600;letter-spacing:-.008em}
article h3 a{text-decoration:none}
article h3 a:hover{color:var(--red);font-style:italic}
article .meta{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin:6px 0 14px;display:flex;gap:16px;flex-wrap:wrap}
article .meta .st{color:var(--red)}
article p{font-size:15.5px;color:#2e2c25;margin-bottom:11px;max-width:64ch}
article p a{color:var(--red);text-decoration-thickness:1px;text-underline-offset:3px}
article code{font-family:var(--mono);font-size:.88em;background:#eae5d8;padding:1px 5px;border-radius:3px}
article .fig{margin:16px 0;max-width:440px}
article .fig img{border:2px solid var(--ink);display:block;background:#fff;filter:grayscale(1) contrast(1.06);transition:filter .25s}
article .fig:hover img{filter:grayscale(0)}
article .fig .cap{font-family:var(--mono);font-size:10.5px;color:var(--dim);margin-top:5px}
.go{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}
.go a{font-family:var(--mono);font-size:12px;text-decoration:none;border:1.5px solid var(--ink);
padding:5px 11px;border-radius:999px;transition:background .12s,color .12s}
.go a:hover{background:var(--ink);color:var(--bg)}
.go a.hot:hover{background:var(--red);border-color:var(--red)}
.bkz{margin-top:12px;font-family:var(--mono);font-size:11.5px;color:var(--dim)}
.bkz a{color:var(--ink);text-decoration:none;border-bottom:1px dashed var(--dim)}
.bkz a:hover{color:var(--red);border-color:var(--red)}
.pathnote{margin-top:70px;border:2px solid var(--ink);padding:24px;font-size:15px;max-width:64ch}
.pathnote h3{font-family:var(--mono);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin-bottom:10px}
.pathnote p{color:#2e2c25}
footer{margin-top:50px;font-family:var(--mono);font-size:12px;color:var(--dim)}
footer a{color:var(--red);text-decoration:none}
footer a:hover{text-decoration:underline}
</style>
</head>
<body>
<div class="layout">
<aside>
<div class="logo">TUNAPRO<span>.</span>XYZ</div>
<div class="sub">defter · gevşek bakılan bahçe</div>
<div class="cat">
<h4>ai &amp; agent'lar</h4>
<ul>
<li><a href="#blueprint">blueprint (bp)</a><span class="st">canlı</span></li>
<li><a href="#outpost">outpost</a><span class="st">büyüyor</span></li>
<li><a href="#abm">llm ile toplum simülasyonu</a><span class="st">merak</span></li>
<li><a href="#trasumanar">trasumanar</a><span class="st">şemsiye</span></li>
</ul>
</div>
<div class="cat">
<h4>robotik</h4>
<ul>
<li><a href="#probot">probot studio</a><span class="st">satışta</span></li>
<li><a href="#impact">impact</a><span class="st">canlı</span></li>
<li><a href="#first">first yılları</a><span class="st">kökler</span></li>
</ul>
</div>
<div class="cat">
<h4>makine dairesi</h4>
<ul>
<li><a href="#homelab">homelab</a><span class="st">7/24</span></li>
</ul>
</div>
<div class="cat">
<h4>eski defter</h4>
<ul>
<li><a href="#elevator">elevator_optimization</a><span class="st">kazandık</span></li>
<li><a href="#dbex">dbex</a><span class="st">2020</span></li>
<li><a href="#megaboi">megaboi</a><span class="st">2020</span></li>
<li><a href="#cdonem">c dönemi</a><span class="st">2021</span></li>
</ul>
</div>
<div class="cat">
<h4>tuhaflıklar</h4>
<ul>
<li><a href="#canbitirici">can raporu</a><span class="st">🍄</span></li>
</ul>
</div>
<div class="foot">
her yerde @tunapro1234<br>
<a href="https://github.com/tunapro1234">github</a> ·
<a href="https://git.tunapro.xyz">gitea</a> ·
<a href="https://probotstudio.com">probot</a><br>
<a href="/yillik/">yıllıktan gelenler →</a>
</div>
</aside>
<main>
<section class="hero">
<p class="intro">yaptığım şeylerin kayıt defteri. bi kısmı hâlâ çalışıyor, bi kısmı arşivde
duruyor. 11. sınıfta yazdığım readme'ler de dahil, silmiyorum, hepsi benim. blog değil bu,
tarih sırası yok, soldan istediğin yere atla. yarım not görürsen bil ki bilerek yarım,
sonra gelirsen büyümüş olur (umarım).</p>
<div class="meta">durumlar: <b>canlı</b> çalışıyor · <b>büyüyor</b> commit alıyor · <b>arşiv</b> dokunmuyorum ama seviyorum</div>
</section>
<!-- ================= AI ================= -->
<section class="chapter" id="ai">
<div class="label">bölüm 1</div>
<h2>ai &amp; agent'lar</h2>
<div class="desc">sunucumda bir agent filosu yaşıyor. bunlar onları yönetmek için yazdığım
ve onlar hakkında düşünmek için yazdığım şeyler.</div>
</section>
<article id="blueprint">
<h3><a href="https://bp.tunapro.xyz">blueprint (bp)</a></h3>
<div class="meta"><span class="st">canlı</span><span>go</span><span>ekildi 2026</span><span>her gün elliyorum</span></div>
<p>sunucudaki agent'ları yönetmek için kullandığım tool. tmux oturumları, message queue,
usage policy, whatsapp client. hepsi tek go binary'sinde. <code>bp daemon</code> eski
python/node job'larını süperviz ediyor, onları yeniden yazmadım çünkü çalışıyorlar ve
çalışan şeye dokunulmaz.</p>
<p><code>bp monitor</code> ile dashboard'u terminalden izliyorum. agent'lara izole branch
lazım olunca worktree'leri de bp açıyor. şu an hayatımın işletim sistemi gibi bi şey.
bu site bile onun baktığı makinede duruyor.</p>
<div class="fig">
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint reposu" loading="lazy"></a>
<div class="cap">şek. 1.1 · bp. renk için imleci tut.</div>
</div>
<div class="go">
<a class="hot" href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
</div>
<div class="bkz">bkz: <a href="#homelab">homelab</a>, <a href="#trasumanar">trasumanar</a></div>
</article>
<article id="outpost">
<h3><a href="https://github.com/tunapro1234/outpost">outpost</a></h3>
<div class="meta"><span class="st">büyüyor</span><span>javascript</span><span>son push: bugün</span></div>
<p>insanlarla iletişimi unutuyorum, o yüzden bunu yaptım. herkes obsidian uyumlu bir
vault'ta birer <code>.md</code> dosyası. outpost o vault'un üstüne ilişki grafını çiziyor.
kimle konuşmuşum, kimi unutmuşum, kim kimi tanıyor.</p>
<p>gather tarafında araştırma agent'ları var, yeni insan buluyorlar ama ben onaylamadan
vault'a hiçbir şey giremiyor. mail sadece okunuyor, gönderme yok. agent'lara o kadar da
güvenmiyorum. canlı hali şifreli çünkü içinde gerçek insanlar var.</p>
<div class="fig">
<a href="https://github.com/tunapro1234/outpost"><img src="https://opengraph.githubassets.com/garden/tunapro1234/outpost" alt="outpost reposu" loading="lazy"></a>
<div class="cap">şek. 1.2 · outpost</div>
</div>
<div class="go">
<a href="https://github.com/tunapro1234/outpost">github ↗</a>
<a href="https://outpost.tunapro.xyz">outpost.tunapro.xyz 🔒</a>
</div>
<div class="bkz">bkz: <a href="#blueprint">blueprint</a></div>
</article>
<article id="abm">
<h3>llm ile toplum simülasyonu</h3>
<div class="meta"><span class="st">merak · uzun vadeli</span><span>python çoğunlukla</span></div>
<p>abm (agent-based modeling) tarzı makro llm işlerine ilgim var: deney katılımcısının
yerine kişilikli llm agent koyunca ne oluyor, bini bir araya gelince topluma benziyor mu.
bu merak birkaç repoya dağıldı:</p>
<p><a href="https://github.com/tunapro1234/replicant">replicant</a> otree deneylerine
big five kişilikli llm agent'lar sokuyor. pypi'da <code>pyreplicant</code> diye duruyor.
ilk replike ettiğim paper Ertan-Page-Putterman 2009, free rider cezalandırma deneyi.
isim hem replikasyondan hem blade runner'dan geliyor, ikisi de kasıtlı.</p>
<p><a href="https://github.com/tunapro1234/metron">metron</a> kendine "sociology for
AI agents" diyor. ortalıkta yüz binlerce deploy edilmiş agent var ve kimse onları
popülasyon olarak incelemiyor. metron bunu deniyor: kişilik testleri, davranış
profilleri, kümeleme. ne tür zihinler seri üretiyoruz sorusu bence sorulmayı hak ediyor.</p>
<p>omega iktisat simülasyonu tarafı, <a href="#trasumanar">trasumanar</a>'ın altında
yaşıyor ve şu an aktif yeniden yazımda. bir de <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>
fork'um var, agent'lar headless simcity'de şehir kuruyor. okuma listesi:
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">awesome-llm-social-simulation</a>.</p>
<div class="fig">
<a href="https://github.com/tunapro1234/replicant"><img src="https://opengraph.githubassets.com/garden/tunapro1234/replicant" alt="replicant reposu" loading="lazy"></a>
<div class="cap">şek. 1.3 · replicant, pypi'da gerçek bir paket</div>
</div>
<div class="go">
<a href="https://github.com/tunapro1234/replicant">replicant ↗</a>
<a href="https://github.com/tunapro1234/metron">metron ↗</a>
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listesi ↗</a>
</div>
</article>
<article id="trasumanar">
<h3><a href="https://github.com/trasumanar-ai">trasumanar</a></h3>
<div class="meta"><span class="st">şemsiye</span><span>eski ama duruyor</span></div>
<p>ai işlerimi topladığım çatı. isim dante'den geliyor, insan ötesine geçmeyi
kelimelerle anlatamazsın diyor adam. iddialı isim, biliyorum, o yüzden altında mütevazı
şeyler tutuyorum: omega (iktisat simülasyonu), arşivde hive-five, bir de bp'nin
install script'i oradan servis ediliyor.</p>
<div class="go"><a href="https://github.com/trasumanar-ai">github/trasumanar-ai ↗</a></div>
<div class="bkz">bkz: <a href="#abm">toplum simülasyonu</a>, <a href="#blueprint">blueprint</a></div>
</article>
<!-- ================= ROBOTİK ================= -->
<section class="chapter" id="robotik">
<div class="label">bölüm 2</div>
<h2>robotik</h2>
<div class="desc">her şey buradan başladı. hâlâ da bitmedi: parça satıyorum,
yarışma düzenliyorum.</div>
</section>
<article id="probot">
<h3><a href="https://probotstudio.com">probot studio</a></h3>
<div class="meta"><span class="st">satışta</span><span>c++ / arduino</span><span>mit · 9★</span></div>
<p>"bir kit, sonsuz robot." lise robot yarışmaları için kit ve kütüphane. hâlâ buradan
parça satıyorum. çekirdek açık kaynak: <code>probot-core</code>, arduino tabanlı
yarışmalarda sahada denenmiş embedded control middleware'i.</p>
<p>fikir <a href="#first">first yıllarından</a> geliyor. altı haftada robot yapmayı
öğrendikten sonra "bunu kit yapsak herkes yapar" dedim, yapıyoruz.</p>
<div class="fig">
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core reposu" loading="lazy"></a>
<div class="cap">şek. 2.1 · probot-core</div>
</div>
<div class="go">
<a class="hot" href="https://probotstudio.com">probotstudio.com ↗</a>
<a href="https://github.com/probot-studio/probot-core">github ↗</a>
</div>
</article>
<article id="impact">
<h3><a href="https://impact.tr">impact</a></h3>
<div class="meta"><span class="st">canlı</span><span>impact.tr</span></div>
<p>impact.tr ile robot yarışmaları düzenliyoruz. formatlar: hands-on challenge (iki gün
durmadan robot üretme, esp32'yle), ideathon, bir de robo soccer (otonom robot futbolu,
şehir şehir yayılıyor). nisan 2026'daki çemberlitaş bölgeselinde 16 takım ve 150'den
fazla katılımcı vardı.</p>
<p>yarışmaya katılan çocuk olmaktan yarışma düzenleyen adam olmaya geçiş garip bi his,
tavsiye ederim. sitenin kodu da <a href="https://git.tunapro.xyz/tunapro/impact-site">kendi gitea'mda</a>.</p>
<div class="go">
<a class="hot" href="https://impact.tr">impact.tr ↗</a>
<a href="https://git.tunapro.xyz/tunapro/impact-site">gitea/impact-site ↗</a>
</div>
<div class="bkz">bkz: <a href="#probot">probot studio</a>, <a href="#homelab">homelab</a></div>
</article>
<article id="first">
<h3>first yılları</h3>
<div class="meta"><span class="st">kökler</span><span>7839 → 9029</span><span>championship 2025 &amp; 2026</span></div>
<p>lisede frc'deydim, 7839'da. lise bitince mali'yle nf'yi kurduk, 9029. 2023'te de
nfr products'ı kurduk, şirket hâlâ dönüyor. geçen sene zağanos'taydım. 2025 ve 2026'da
first championship'teydik, houston'a iki kere gitmiş olmak hâlâ hoşuma gidiyor.</p>
<p>first'ün bana öğrettiği şey kod değil. teslim tarihi gerçek olunca nasıl çalışıldığını
öğrendim. altı haftada robot bitiyor çünkü bitmek zorunda. o refleks hâlâ bende.</p>
<div class="fig">
<a href="https://github.com/team-nf"><img src="https://avatars.githubusercontent.com/team-nf?s=400" alt="team-nf" loading="lazy"></a>
<div class="cap">şek. 2.2 · team-nf</div>
</div>
<div class="go">
<a href="https://github.com/team-nf">github/team-nf ↗</a>
<a href="https://github.com/tunapro1234/FRC7839">frc7839 arşivi ↗</a>
</div>
<div class="bkz">bkz: <a href="#probot">probot studio</a>, <a href="#impact">impact</a></div>
</article>
<!-- ================= MAKİNE DAİRESİ ================= -->
<section class="chapter" id="makine">
<div class="label">bölüm 3</div>
<h2>makine dairesi</h2>
<div class="desc">bulut kullanmıyorum. her şey kendi demirimde ve bu bana huzur veriyor.</div>
</section>
<article id="homelab">
<h3>homelab: *.tunapro.xyz</h3>
<div class="meta"><span class="st">7/24</span><span>self-host her şey</span></div>
<p>kod <a href="https://git.tunapro.xyz">gitea</a>'da, medya kendi video sunucumda,
minecraft sunucusunun paneli <code>mcdash</code>'te, mail bile burada. okuduğun sayfa da
aynı makinelerde dönüyor ve makinelere <a href="#blueprint">bp</a> bakıyor.</p>
<p>arada bir şeyler patlıyor tabii. gece 2'de mail sunucusu debug'lamak kimseye
tavsiye edeceğim bi hobi değil ama kendi verine sahip olmanın bedeli bu, ödüyorum.</p>
<div class="go">
<a href="https://git.tunapro.xyz">git ↗</a>
<a href="https://video.tunapro.xyz">video ↗</a>
<a href="https://mcdash.tunapro.xyz">mcdash ↗</a>
</div>
</article>
<!-- ================= ESKİ DEFTER ================= -->
<section class="chapter" id="eski">
<div class="label">bölüm 4</div>
<h2>eski defter</h2>
<div class="desc">github arkeolojisi, 2020-2024. hepsi arşivde duruyor, hepsini
seviyorum.</div>
</section>
<article id="elevator">
<h3><a href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a></h3>
<div class="meta"><span class="st">kazandık</span><span>rust</span><span>2024</span></div>
<p>boğaziçi'nin ai yarışması için yazdık ve kazandık. asansör çizelgeleme problemi,
rust'la. repo o günkü haliyle duruyor, dokunmuyorum. kazanan koda dokunulmaz.</p>
<div class="go"><a href="https://github.com/tunapro1234/elevator_optimization">github ↗</a></div>
</article>
<article id="dbex">
<h3><a href="https://github.com/tunapro1234/DBEX">dbex</a></h3>
<div class="meta"><span class="st">arşiv</span><span>python</span><span>2020 · 11. sınıf</span></div>
<p>python'un json kütüphanesini generator olarak yeniden yazmışım. readme'de aynen şu
cümle var: "json kütüphanesine yetişebilmem için eklemem gereken çok fazla özellik var
ama maalesef ben 11. sınıfım." kod yorumları da öyle: "çalışır herhalde / umarım."
haklıymışım, çalışıyormuş.</p>
<div class="go"><a href="https://github.com/tunapro1234/DBEX">github ↗</a></div>
</article>
<article id="megaboi">
<h3><a href="https://github.com/tunapro1234/MEGABOI">megaboi</a></h3>
<div class="meta"><span class="st">arşiv</span><span>c++ · arduino mega</span><span>2020</span></div>
<p>arduino mega + lcd shield + 6 butondan el yapımı konsol. readme'den: "neden ekranın
yediği serial0'ı kullandın diyebilirsiniz, cevap çok basit: bilmiyorum." lityum pil ve
yükseltici devreyle taşınabilir de yapmışım, şemaları paylaşacağım demişim (sanmıyorum
diye not düşmüşüm, haklı çıktım).</p>
<div class="go"><a href="https://github.com/tunapro1234/MEGABOI">github ↗</a></div>
</article>
<article id="cdonem">
<h3>c dönemi: vector-h &amp; cygnus</h3>
<div class="meta"><span class="st">arşiv</span><span>c89 / c</span><span>2021</span></div>
<p>c yazdığım dönem. <a href="https://github.com/tunapro1234/vector-h">vector-h</a>:
c89'da basit bir vektör implementasyonu. <a href="https://github.com/tunapro1234/cygnus">cygnus</a>
daha ilginç, embed cihazlar için ai kütüphanesi gibi bi şeydi. o ara nnfs okuyordum,
matrix makroları oradan geliyor. kitap bitince düzenli bi şekilde baştan başlayacaktım.
kitap bitti, başlamadım. olsun.</p>
<div class="go">
<a href="https://github.com/tunapro1234/vector-h">vector-h ↗</a>
<a href="https://github.com/tunapro1234/cygnus">cygnus ↗</a>
</div>
</article>
<!-- ================= TUHAFLIKLAR ================= -->
<section class="chapter" id="tuhaf">
<div class="label">bölüm 5</div>
<h2>tuhaflıklar</h2>
<div class="desc">kategorisi olmayan şeyler.</div>
</section>
<article id="canbitirici">
<h3><a href="https://canbitirici.tunapro.xyz">can neden iş bitirici değil?</a></h3>
<div class="meta"><span class="st">🍄 hakemli değil</span><span>araştırma raporu</span></div>
<p>arkadaş grubu içi bir şaka aşırı ciddiye alınırsa ne olur sorusunun cevabı: başlığı,
metodolojisi ve grafikleri olan bir araştırma raporu olur. can'a sevgilerimle.</p>
<div class="go"><a class="hot" href="https://canbitirici.tunapro.xyz">raporu oku ↗</a></div>
</article>
<div class="pathnote">
<h3>bana ulaşmak</h3>
<p>neredeyse her platformda <strong>@tunapro1234</strong>'üm.
<a href="https://github.com/tunapro1234" style="color:var(--red)">github</a> en garantisi;
<a href="https://stackoverflow.com/users/tunapro1234" style="color:var(--red)">stack overflow</a>'da
da aynı isim. kod görmek istersen <a href="https://git.tunapro.xyz" style="color:var(--red)">kendi gitea'm</a> da açık.</p>
</div>
<footer>
© 2026 tuna gül · yıllıktaki qr'dan geldiysen <a href="/yillik/">senin sayfan ayrı</a>
</footer>
</main>
</div>
</body>
</html>

309
v5/index.html Normal file
View File

@@ -0,0 +1,309 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tunapro postası · kendi sunucusunda basılır</title>
<meta name="description" content="tuna gül'ün dijital bahçesi, gazete baskısı. agent haberleri, robotik sayfası, arşivden ve küçük ilanlar.">
<style>
:root{
--bg:#f4f1ea; --ink:#141412; --red:#c22f23; --dim:#8a857a; --faint:#c9c3b4;
--serif:"Iowan Old Style",Palatino,Georgia,serif;
--mono:ui-monospace,Menlo,Consolas,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
::selection{background:var(--red);color:#fff}
body{background:var(--bg);color:var(--ink);font-family:var(--serif);line-height:1.5}
a{color:inherit}
img{max-width:100%}
.sheet{max-width:1180px;margin:0 auto;padding:0 22px 80px}
/* masthead */
.mast{text-align:center;padding:30px 0 14px;border-bottom:4px double var(--ink)}
.mast .over{font-family:var(--mono);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--dim)}
.mast h1{font-size:clamp(44px,9vw,96px);font-weight:700;letter-spacing:-.01em;line-height:1;margin:8px 0 10px}
.mast h1 span{color:var(--red)}
.mast .bar{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11.5px;color:var(--dim);
border-top:1.5px solid var(--ink);margin-top:8px;padding:7px 4px 0;flex-wrap:wrap;gap:6px}
.mast .bar b{color:var(--ink);font-weight:600}
/* telgraf hattı */
.wire{border-bottom:1.5px solid var(--ink);padding:7px 0;font-family:var(--mono);font-size:11.5px;
color:var(--dim);white-space:nowrap;overflow:hidden}
.wire .tape{display:inline-block;animation:wire 34s linear infinite;padding-left:0}
.wire b{color:var(--red)}
@keyframes wire{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.wire .tape{animation:none}}
/* grid */
.front{display:grid;grid-template-columns:2.1fr 1.1fr;gap:0;border-bottom:3px solid var(--ink)}
@media(max-width:860px){.front{grid-template-columns:1fr}}
.lead{padding:26px 26px 30px;border-right:1.5px solid var(--ink)}
@media(max-width:860px){.lead{border-right:none;border-bottom:1.5px solid var(--ink)}}
.side{display:flex;flex-direction:column}
.kick{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--red)}
h2.head{font-size:clamp(28px,4.6vw,52px);font-weight:700;line-height:1.06;letter-spacing:-.015em;margin:8px 0 6px}
h3.head{font-size:clamp(20px,2.6vw,27px);font-weight:700;line-height:1.15;margin:6px 0 4px}
.byline{font-family:var(--mono);font-size:11px;color:var(--dim);margin-bottom:12px}
.cols{column-count:2;column-gap:26px;column-rule:1px solid var(--faint);font-size:15px;color:#2c2a24;text-align:justify;hyphens:auto}
@media(max-width:640px){.cols{column-count:1}}
.cols p, .body p{margin-bottom:10px}
.body{font-size:14.5px;color:#2c2a24}
p .r{color:var(--red);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.figure{margin:14px 0;border:2px solid var(--ink);background:#fff}
.figure img{display:block;filter:grayscale(1) contrast(1.05);transition:filter .25s;width:100%}
.figure:hover img{filter:grayscale(0)}
.figcap{font-family:var(--mono);font-size:10.5px;color:var(--dim);padding:6px 8px;border-top:1.5px solid var(--ink);background:var(--bg)}
.box{padding:22px 24px;border-bottom:1.5px solid var(--ink)}
.box:last-child{border-bottom:none}
.links{margin-top:10px;font-family:var(--mono);font-size:11.5px;display:flex;gap:8px;flex-wrap:wrap}
.links a{text-decoration:none;border:1.5px solid var(--ink);border-radius:999px;padding:4px 10px}
.links a:hover{background:var(--ink);color:var(--bg)}
/* iç sayfalar */
.section-head{display:flex;align-items:baseline;gap:14px;border-bottom:3px solid var(--ink);padding:34px 0 8px}
.section-head .roman{font-family:var(--mono);font-size:11px;letter-spacing:.24em;color:var(--red);text-transform:uppercase}
.section-head h2{font-size:clamp(24px,3.6vw,38px);font-weight:700;letter-spacing:-.012em}
.section-head .fill{flex:1;border-bottom:1px solid var(--faint)}
.trio{display:grid;grid-template-columns:1fr 1fr 1fr;border-bottom:3px solid var(--ink)}
@media(max-width:860px){.trio{grid-template-columns:1fr}}
.trio>.box{border-bottom:none;border-right:1.5px solid var(--ink)}
.trio>.box:last-child{border-right:none}
@media(max-width:860px){.trio>.box{border-right:none;border-bottom:1.5px solid var(--ink)}.trio>.box:last-child{border-bottom:none}}
.duo{display:grid;grid-template-columns:1.4fr 1fr;border-bottom:3px solid var(--ink)}
@media(max-width:860px){.duo{grid-template-columns:1fr}}
.duo>.box{border-bottom:none;border-right:1.5px solid var(--ink)}
.duo>.box:last-child{border-right:none}
@media(max-width:860px){.duo>.box{border-right:none;border-bottom:1.5px solid var(--ink)}.duo>.box:last-child{border-bottom:none}}
/* ilanlar & arşiv */
.classifieds{font-size:13.5px}
.classifieds .ad{padding:10px 0;border-bottom:1px dashed var(--faint)}
.classifieds .ad:last-child{border:none}
.classifieds .ad b{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--red);display:block;margin-bottom:2px}
.quote{border-left:3px solid var(--red);padding:6px 0 6px 14px;font-style:italic;font-size:15px;margin:10px 0;color:#2c2a24}
.quote .who{display:block;font-style:normal;font-family:var(--mono);font-size:10.5px;color:var(--dim);margin-top:4px}
footer{padding-top:22px;font-family:var(--mono);font-size:11.5px;color:var(--dim);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
footer a{color:var(--red);text-decoration:none}
footer a:hover{text-decoration:underline}
</style>
</head>
<body>
<div class="sheet">
<header class="mast">
<div class="over">blog değildir · portfolyo hiç değildir · bahçedir</div>
<h1>TUNAPRO<span>.</span>POSTASI</h1>
<div class="bar">
<span>cilt 1, sayı 1 · <b>yaz 2026</b></span>
<span>sahibi ve tek yazarı: <b>tuna gül</b></span>
<span>fiyatı: <b>ücretsiz</b> (zaten self-host)</span>
<span>her yerde <b>@tunapro1234</b></span>
</div>
</header>
<div class="wire" aria-hidden="true">
<span class="tape"><b>SON DAKİKA:</b> outpost'a bugün de push atıldı &nbsp;···&nbsp; replicant pypi'da: pip install pyreplicant &nbsp;···&nbsp; impact çemberlitaş bölgeseli 16 takımla tamamlandı &nbsp;···&nbsp; mail sunucusu bu hafta hiç patlamadı (nazar değmesin) &nbsp;···&nbsp; <b>SON DAKİKA:</b> outpost'a bugün de push atıldı &nbsp;···&nbsp; replicant pypi'da: pip install pyreplicant &nbsp;···&nbsp; impact çemberlitaş bölgeseli 16 takımla tamamlandı &nbsp;···&nbsp; mail sunucusu bu hafta hiç patlamadı (nazar değmesin) &nbsp;···&nbsp; </span>
</div>
<!-- ============ ÖN SAYFA ============ -->
<div class="front">
<div class="lead">
<div class="kick">manşet · ai servisi</div>
<h2 class="head">Sunucudaki agent filosu tek binary'den yönetiliyor</h2>
<div class="byline">bp.tunapro.xyz muhabirimizden</div>
<div class="cols">
<p><a class="r" href="https://bp.tunapro.xyz">blueprint (bp)</a>, muhabirimizin sunucusunda
yaşayan agent'ları yönetmek için kullandığı araç. tmux oturumları, message queue, usage
policy ve whatsapp client'ı tek go binary'sinde topluyor. <code style="font-family:var(--mono);font-size:.9em">bp daemon</code>
eski python ve node job'larını süperviz ediyor. yazarımız bunları yeniden yazmadığını,
çünkü çalıştıklarını ve çalışan şeye dokunulmadığını beyan etti.</p>
<p>dashboard'un terminal hali <code style="font-family:var(--mono);font-size:.9em">bp monitor</code> ile
geliyor. usage, cost, agents, projects ayrı ekranlar. agent'lara izole git branch'i
gerektiğinde worktree'leri de bp açıyor, kirli worktree'yi silmeyi reddediyor.
"hayatımın işletim sistemi gibi bi şey" diyor yazar, "okuduğunuz gazete bile onun
baktığı makinede basılıyor."</p>
</div>
<div class="figure">
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint reposu" loading="lazy"></a>
<div class="figcap">bp'nin github kartı. fotoğraf renklidir, mürekkep masrafından siyah-beyaz basılmıştır (imleci tutunca renklenir).</div>
</div>
<div class="links">
<a href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
</div>
</div>
<div class="side">
<div class="box">
<div class="kick">bugünün ikinci haberi</div>
<h3 class="head">İnsan ilişkileri artık graf: outpost yayında ama şifreli</h3>
<div class="body">
<p>herkes obsidian uyumlu bir vault'ta birer .md dosyası. <a class="r" href="https://github.com/tunapro1234/outpost">outpost</a>
üstüne ilişki grafını çiziyor. araştırma agent'ları yeni insan öneriyor fakat vault'a
giriş insan onayına tabi. mail yalnızca okunuyor, gönderim yetkisi agent'lara verilmedi.
"o kadar da güvenmiyorum" dedi geliştirici.</p>
</div>
<div class="links"><a href="https://github.com/tunapro1234/outpost">github ↗</a></div>
</div>
<div class="box">
<div class="kick">hava durumu yerine: bahçe durumu</div>
<div class="body classifieds">
<div class="ad"><b>canlı</b> bp, impact, probot studio, homelab</div>
<div class="ad"><b>büyüyor</b> outpost (bugün de push yedi)</div>
<div class="ad"><b>kuluçkada</b> replicant, metron, omega</div>
<div class="ad"><b>arşivde ama sevgiyle</b> dbex, megaboi, cygnus, vector-h</div>
</div>
</div>
</div>
</div>
<!-- ============ AI SAYFASI ============ -->
<div class="section-head"><span class="roman">sayfa 2</span><h2>Araştırma Eki</h2><span class="fill"></span></div>
<div class="duo">
<div class="box">
<div class="kick">dosya konusu</div>
<h3 class="head">Deneklerin yerini LLM'ler alırsa: yazarımızın ABM merakı</h3>
<div class="byline">toplum simülasyonu masası</div>
<div class="body">
<p>abm (agent-based modeling) tarzı makro llm işleri bu gazetenin uzun vadeli saplantısı.
soru şu: deney katılımcısının yerine kişilikli bir llm agent koyarsan insan davranışı
çıkıyor mu, bini bir araya gelince topluma benziyor mu.</p>
<p><a class="r" href="https://github.com/tunapro1234/replicant">replicant</a> bu sorunun deney tarafı:
oTree deneylerine big five kişilikli agent'lar sokuyor (pypi'da <span style="font-family:var(--mono);font-size:.9em">pyreplicant</span>).
ilk replike edilen paper Ertan-Page-Putterman 2009, free rider cezalandırma deneyi.
isim hem replikasyondan hem blade runner'dan geliyor, ikisi de kasıtlı.</p>
<p><a class="r" href="https://github.com/tunapro1234/metron">metron</a> ise sosyoloji tarafı:
"sociology for AI agents." dünyada yüz binlerce deploy edilmiş agent var ve kimse
bunları popülasyon olarak incelemiyor. kişilik testleri, davranış profilleri, kümeleme.
ne tür zihinler seri üretiyoruz, birinin sorması lazımdı.</p>
<p>iktisat simülasyonu tarafı omega, <a class="r" href="https://github.com/trasumanar-ai">trasumanar</a>
çatısında aktif yeniden yazımda. trasumanar'ın adı dante'den: insan ötesine geçmeyi
kelimelerle anlatamazsın. iddialı isim, altında mütevazı repolar.</p>
</div>
<div class="links">
<a href="https://github.com/tunapro1234/replicant">replicant ↗</a>
<a href="https://github.com/tunapro1234/metron">metron ↗</a>
<a href="https://github.com/trasumanar-ai">trasumanar ↗</a>
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listesi ↗</a>
</div>
</div>
<div class="box">
<div class="kick">kısa kısa</div>
<div class="body">
<p><strong>simcity'de mesai.</strong> <a class="r" href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>
fork'unda agent'lar headless micropolis motorunda şehir kuruyor. şehircilik anlayışları
tartışmalı bulundu.</p>
<p><strong>anket doldurtan adam.</strong> <a class="r" href="https://github.com/tunapro1234/edsl-test">edsl</a>
ile ai destekli anket ve deney tasarımı kurcalanıyor, ilk izlenimler dosyada.</p>
</div>
<div class="figure">
<a href="https://github.com/tunapro1234/replicant"><img src="https://opengraph.githubassets.com/garden/tunapro1234/replicant" alt="replicant reposu" loading="lazy"></a>
<div class="figcap">replicant: pypi'da gerçek bir paket, gazetemiz gurur duyar.</div>
</div>
</div>
</div>
<!-- ============ ROBOTİK SAYFASI ============ -->
<div class="section-head"><span class="roman">sayfa 3</span><h2>Robotik &amp; Saha</h2><span class="fill"></span></div>
<div class="trio">
<div class="box">
<div class="kick">ticaret</div>
<h3 class="head">"Bir kit, sonsuz robot": parça satışı sürüyor</h3>
<div class="body">
<p><a class="r" href="https://probotstudio.com">probot studio</a>, lise robot yarışmaları
için kit ve kütüphane işi. çekirdek açık kaynak: probot-core (mit, 9★), arduino tabanlı
yarışmalarda sahada denenmiş. yazarımız buradan parça satmaya devam ettiğini,
slogandan hâlâ memnun olduğunu bildirdi.</p>
</div>
<div class="links">
<a href="https://probotstudio.com">probotstudio.com ↗</a>
<a href="https://github.com/probot-studio/probot-core">probot-core ↗</a>
</div>
</div>
<div class="box">
<div class="kick">organizasyon</div>
<h3 class="head">Yarışan çocuk yarışma düzenleyen adam oldu</h3>
<div class="body">
<p><a class="r" href="https://impact.tr">impact.tr</a> çatısında robot yarışmaları:
hands-on challenge (iki gün durmadan esp32'yle robot üretme), ideathon ve şehir şehir
yayılan robo soccer. nisan 2026 çemberlitaş bölgeselinde 16 takım, 150+ katılımcı.
sitenin kodu yazarın <a class="r" href="https://git.tunapro.xyz/tunapro/impact-site">kendi gitea'sında</a>.</p>
</div>
<div class="links"><a href="https://impact.tr">impact.tr ↗</a></div>
</div>
<div class="box">
<div class="kick">tarih servisi</div>
<h3 class="head">Lisede 7839, mezun olunca kendi takımı: Houston'a iki sefer</h3>
<div class="body">
<p>yazarımız lisede frc 7839'da yarıştı. mezun olunca mali'yle nf'yi kurdular, frc
9029. takımdan 2023'te nfr products çıktı, şirket devam ediyor. geçen sene zağanos'ta
görev aldı. 2025 ve 2026'da first championship'e gidildi. "first'ün öğrettiği kod
değil" diyor, "teslim tarihi gerçek olunca nasıl çalışıldığı. altı haftada robot
bitiyor çünkü bitmek zorunda."</p>
</div>
<div class="links">
<a href="https://github.com/team-nf">team-nf ↗</a>
<a href="https://github.com/tunapro1234/FRC7839">frc7839 arşivi ↗</a>
</div>
</div>
</div>
<!-- ============ ARŞİV + İLANLAR ============ -->
<div class="section-head"><span class="roman">sayfa 4</span><h2>Arşivden &amp; Küçük İlanlar</h2><span class="fill"></span></div>
<div class="duo">
<div class="box">
<div class="kick">github arkeolojisi · 2020-2024</div>
<div class="body">
<p><strong><a class="r" href="https://github.com/tunapro1234/DBEX">dbex</a> (2020).</strong>
python'un json kütüphanesinin generator hali, 11. sınıf işi. readme arşivimizin en
değerli belgesi:</p>
<div class="quote">"json kütüphanesine yetişebilmem için eklemem gereken çok fazla
özellik var ama maalesef ben 11. sınıfım."
<span class="who"> dbex readme'si, 2020</span></div>
<p><strong><a class="r" href="https://github.com/tunapro1234/MEGABOI">megaboi</a> (2020).</strong>
arduino mega + lcd shield + 6 butondan el yapımı konsol.</p>
<div class="quote">"neden ekranın yediği serial0'ı kullandın diyebilirsiniz, cevap çok
basit: bilmiyorum."
<span class="who"> megaboi readme'si, 2020</span></div>
<p><strong>c dönemi (2021).</strong>
<a class="r" href="https://github.com/tunapro1234/vector-h">vector-h</a> (c89'da vektör) ve
<a class="r" href="https://github.com/tunapro1234/cygnus">cygnus</a>. cygnus embed
cihazlar için ai kütüphanesi denemesiydi, yazar o sıra nnfs okuyordu ve "kitap bitince
düzenli baştan başlayacağım" notunu düşmüştü. kitap bitmiş, başlanmamıştır.</p>
<p><strong><a class="r" href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a> (2024).</strong>
boğaziçi'nin ai yarışması için rust'la yazıldı ve kazandı. repo o günkü haliyle korunuyor.
kazanan koda dokunulmaz.</p>
</div>
</div>
<div class="box">
<div class="kick">küçük ilanlar</div>
<div class="body classifieds">
<div class="ad"><b>satılık</b> probot kitleri ve parçaları. yarışmada denenmiştir,
garantisi sloganıdır: bir kit, sonsuz robot. <a class="r" href="https://probotstudio.com">probotstudio.com</a></div>
<div class="ad"><b>kayıp</b> can'ın iş bitiriciliği. bulan olursa
<a class="r" href="https://canbitirici.tunapro.xyz">rapora</a> baksın, orada da yok ama
neden olmadığı grafiklerle açıklanmıştır.</div>
<div class="ad"><b>eleman aranıyor</b> gece 2'de mail sunucusuna bakacak gönüllü.
maaş yok, huzur var. başvuru: yazarın kendisi zaten, ilan formalite.</div>
<div class="ad"><b>duyuru</b> bu gazete <a class="r" href="https://git.tunapro.xyz">git.tunapro.xyz</a>,
video sunucusu, mcdash ve mail ile aynı makinelerde basılmaktadır. bulut kullanılmamıştır.</div>
<div class="ad"><b>yıllık okurlarına</b> qr'dan gelenlere ayrı sayfa açılmıştır:
<a class="r" href="/yillik/">tunapro.xyz/yillik</a></div>
</div>
<div class="figure" style="margin-top:16px">
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core reposu" loading="lazy"></a>
<div class="figcap">reklam: probot-core, açık kaynak. mit lisansı, 9 yıldız.</div>
</div>
</div>
</div>
<footer>
<span>© 2026 tunapro postası · tüm hakları yazarına aittir, zaten başka çalışanı yoktur</span>
<span><a href="https://github.com/tunapro1234">github</a> · <a href="https://git.tunapro.xyz">gitea</a> · <a href="https://stackoverflow.com/users/tunapro1234">stack overflow</a></span>
</footer>
</div>
</body>
</html>

344
v6/index.html Normal file
View File

@@ -0,0 +1,344 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tunapro.xyz · katalog</title>
<meta name="description" content="tuna gül'ün dijital bahçesi, arşiv katalogu baskısı: 2020'den bugüne fişlenmiş projeler, damgalı ve tarihli.">
<style>
:root{
--bg:#f4f1ea; --card:#faf8f2; --ink:#141412; --red:#c22f23; --dim:#8a857a; --faint:#c9c3b4;
--serif:"Iowan Old Style",Palatino,Georgia,serif;
--mono:ui-monospace,Menlo,Consolas,monospace;
--sans:-apple-system,"Inter","Helvetica Neue",Arial,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
::selection{background:var(--red);color:#fff}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.5;
background-image:repeating-linear-gradient(0deg,transparent,transparent 31px,rgba(20,20,18,.035) 31px,rgba(20,20,18,.035) 32px)}
a{color:inherit}
img{max-width:100%}
.wrap{max-width:1180px;margin:0 auto;padding:0 22px 90px}
/* kapak */
header{padding:44px 0 26px;border-bottom:3px solid var(--ink);display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end}
@media(max-width:760px){header{grid-template-columns:1fr}}
.h-label{font-family:var(--mono);font-size:11.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--red)}
header .intro{margin-top:12px;max-width:60ch;font-size:16px;color:#33312a}
.file-tag{font-family:var(--mono);font-size:11.5px;border:2px solid var(--ink);padding:14px 16px;line-height:2;background:var(--card);
box-shadow:4px 4px 0 rgba(20,20,18,.15)}
.file-tag b{color:var(--red);font-weight:600}
/* dönem başlığı */
.era{display:flex;align-items:baseline;gap:16px;margin:52px 0 6px;border-bottom:2px solid var(--ink);padding-bottom:8px}
.era .yr{font-family:var(--serif);font-size:clamp(28px,4.4vw,46px);font-weight:600;font-style:italic;color:var(--red)}
.era .nm{font-family:var(--mono);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.era .fill{flex:1;border-bottom:1px dashed var(--faint)}
/* kart ızgarası */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:26px;padding-top:22px}
.kart{background:var(--card);border:2px solid var(--ink);position:relative;
box-shadow:5px 5px 0 rgba(20,20,18,.12);transition:transform .15s ease, box-shadow .15s ease}
.kart:hover{transform:translate(-2px,-2px);box-shadow:8px 8px 0 rgba(20,20,18,.16)}
.kart.wide{grid-column:span 2}
@media(max-width:760px){.kart.wide{grid-column:span 1}}
.kart .head{border-bottom:2px solid var(--ink);padding:12px 16px;display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.kart .head .no{font-family:var(--mono);font-size:11px;color:var(--dim)}
.kart .head .ad{font-family:var(--serif);font-size:22px;font-weight:600;letter-spacing:-.008em}
.kart .head .ad a{text-decoration:none}
.kart .head .ad a:hover{color:var(--red);font-style:italic}
.kart .fields{font-family:var(--mono);font-size:11px;color:var(--dim);display:flex;gap:14px;flex-wrap:wrap;
padding:9px 16px;border-bottom:1px dashed var(--faint)}
.kart .fields b{color:var(--ink);font-weight:600}
.kart .body{padding:14px 16px 16px;font-size:14.5px;color:#2e2c25}
.kart .body p{margin-bottom:9px;max-width:64ch}
.kart .body p a{color:var(--red);text-decoration-thickness:1px;text-underline-offset:3px}
.kart .body code{font-family:var(--mono);font-size:.88em;background:#ece7da;padding:1px 5px;border-radius:3px}
.kart .quote{border-left:3px solid var(--red);padding-left:12px;font-family:var(--serif);font-style:italic;font-size:14.5px;margin:10px 0;color:#33312a}
.kart .quote .who{display:block;font-style:normal;font-family:var(--mono);font-size:10px;color:var(--dim);margin-top:3px}
.kart .go{display:flex;gap:8px;flex-wrap:wrap;padding:0 16px 16px}
.kart .go a{font-family:var(--mono);font-size:11.5px;text-decoration:none;border:1.5px solid var(--ink);
padding:4px 10px;border-radius:999px}
.kart .go a:hover{background:var(--ink);color:var(--bg)}
.kart .fig{margin:4px 16px 14px;border:1.5px solid var(--ink);background:#fff;max-width:400px}
.kart .fig img{display:block;filter:grayscale(1) contrast(1.06);transition:filter .25s;width:100%}
.kart .fig:hover img{filter:grayscale(0)}
.kart .figcap{font-family:var(--mono);font-size:10px;color:var(--dim);padding:5px 8px;border-top:1.5px solid var(--ink);background:var(--card)}
/* damgalar */
.stamp{position:absolute;top:10px;right:12px;font-family:var(--mono);font-size:11px;font-weight:700;
letter-spacing:.14em;text-transform:uppercase;color:var(--red);border:2.5px solid var(--red);
border-radius:4px;padding:3px 9px;transform:rotate(6deg);opacity:.85;pointer-events:none;background:rgba(250,248,242,.7)}
.stamp.ink{color:var(--ink);border-color:var(--ink);transform:rotate(-5deg)}
.stamp.dim{color:var(--dim);border-color:var(--dim);transform:rotate(-7deg)}
/* alt not */
.endnote{margin-top:64px;border:2px solid var(--ink);background:var(--card);padding:26px;
box-shadow:5px 5px 0 rgba(20,20,18,.12);display:grid;grid-template-columns:1.5fr 1fr;gap:28px}
@media(max-width:760px){.endnote{grid-template-columns:1fr}}
.endnote h3{font-family:var(--mono);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin-bottom:10px}
.endnote p{font-size:15px;color:#2e2c25;margin-bottom:8px;max-width:56ch}
.endnote p a{color:var(--red)}
.endnote ul{list-style:none;font-family:var(--mono);font-size:13px}
.endnote li{padding:7px 0;border-bottom:1px dashed var(--faint);display:flex;justify-content:space-between}
.endnote li:last-child{border:none}
.endnote li a{text-decoration:none}
.endnote li a:hover{color:var(--red)}
.endnote li .at{color:var(--dim);font-size:11.5px}
footer{margin-top:26px;font-family:var(--mono);font-size:11.5px;color:var(--dim);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
footer a{color:var(--red);text-decoration:none}
</style>
</head>
<body>
<div class="wrap">
<header>
<div>
<div class="h-label">tunapro.xyz · proje katalogu · dosya no: 1234</div>
<p class="intro">2020'den bugüne yaptığım şeylerin katalogu. sildiğim proje yok. 11. sınıfta
yazdığım readme ile bugün sunucumu yöneten tool aynı dolapta duruyor, ikisini de seviyorum.
kartlar yıla göre dizili, damgalara güvenebilirsin.</p>
</div>
<div class="file-tag">
ARŞİVLEYEN: <b>tuna gül</b><br>
KONUM: <b>kendi sunucusu</b><br>
HER YERDE: <b>@tunapro1234</b><br>
SON GÜNCELLEME: <b>bugün</b>
</div>
</header>
<!-- ============ 2026 ============ -->
<div class="era"><span class="yr">2026 →</span><span class="nm">şu an masada olanlar</span><span class="fill"></span></div>
<div class="grid">
<div class="kart wide">
<span class="stamp">canlı</span>
<div class="head"><span class="ad"><a href="https://bp.tunapro.xyz">blueprint (bp)</a></span><span class="no">FİŞ 26-01</span></div>
<div class="fields"><span>DİL <b>go</b></span><span>TÜR <b>agent orkestrasyonu</b></span><span>BAKIM <b>her gün</b></span></div>
<div class="body">
<p>sunucudaki agent'ları yönetmek için kullandığım tool. tmux oturumları, message queue,
usage policy, whatsapp client. hepsi tek binary'de. <code>bp daemon</code> eski
python/node job'larını süperviz ediyor. onları yeniden yazmadım çünkü çalışıyorlar
ve çalışan şeye dokunulmaz.</p>
<p><code>bp monitor</code> dashboard'u terminale getiriyor, worktree'leri de bp açıyor.
hayatımın işletim sistemi gibi bi şey. bu katalog bile onun baktığı makinede duruyor.</p>
</div>
<div class="fig">
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint reposu" loading="lazy"></a>
<div class="figcap">ek 26-01/a · renk için imleci tut</div>
</div>
<div class="go">
<a href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
</div>
</div>
<div class="kart">
<span class="stamp ink">şifreli</span>
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/outpost">outpost</a></span><span class="no">FİŞ 26-02</span></div>
<div class="fields"><span>DİL <b>javascript</b></span><span>SON PUSH <b>bugün</b></span></div>
<div class="body">
<p>insanlarla iletişimi unutuyorum diye yaptım. herkes obsidian uyumlu vault'ta birer
<code>.md</code> dosyası. outpost üstüne ilişki grafını çiziyor. gather agent'ları insan
buluyor ama ben onaylamadan vault'a giremiyorlar, mail de sadece okunuyor. agent'lara
o kadar da güvenmiyorum. canlı hali şifreli çünkü içinde gerçek insanlar var.</p>
</div>
<div class="go">
<a href="https://github.com/tunapro1234/outpost">github ↗</a>
<a href="https://outpost.tunapro.xyz">canlı 🔒</a>
</div>
</div>
<div class="kart">
<span class="stamp">kuluçkada</span>
<div class="head"><span class="ad">abm / makro-llm rafı</span><span class="no">FİŞ 26-03</span></div>
<div class="fields"><span>DİL <b>python</b></span><span>TÜR <b>uzun vadeli merak</b></span></div>
<div class="body">
<p>deneklerin yerine kişilikli llm agent koyunca ne oluyor? <a href="https://github.com/tunapro1234/replicant">replicant</a>
otree deneylerine big five kişilikli agent'lar sokuyor (pypi'da <code>pyreplicant</code>,
ilk replikasyon Ertan-Page-Putterman 2009). <a href="https://github.com/tunapro1234/metron">metron</a>
"sociology for AI agents": deploy edilmiş agent popülasyonlarını sosyolog gibi inceleme.
iktisat tarafı omega, <a href="https://github.com/trasumanar-ai">trasumanar</a> çatısında.
isim dante'den, iddialı olduğunun farkındayım.</p>
<p>yan raflar: <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>
(agent'lar simcity kuruyor) ve <a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listem</a>.</p>
</div>
<div class="go">
<a href="https://github.com/tunapro1234/replicant">replicant ↗</a>
<a href="https://github.com/tunapro1234/metron">metron ↗</a>
</div>
</div>
</div>
<!-- ============ 2024-25 ============ -->
<div class="era"><span class="yr">2024-25</span><span class="nm">saha yılları</span><span class="fill"></span></div>
<div class="grid">
<div class="kart">
<span class="stamp">satışta</span>
<div class="head"><span class="ad"><a href="https://probotstudio.com">probot studio</a></span><span class="no">FİŞ 24-01</span></div>
<div class="fields"><span>DİL <b>c++ / arduino</b></span><span>LİSANS <b>mit</b></span><span>YILDIZ <b>9</b></span></div>
<div class="body">
<p>"bir kit, sonsuz robot." lise robot yarışmaları için kit ve kütüphane. hâlâ buradan
parça satıyorum. çekirdek açık: <code>probot-core</code>, sahada denenmiş embedded
control middleware. fikir first yıllarından (bkz. fiş 20-01).</p>
</div>
<div class="fig">
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core reposu" loading="lazy"></a>
<div class="figcap">ek 24-01/a · probot-core</div>
</div>
<div class="go">
<a href="https://probotstudio.com">probotstudio.com ↗</a>
<a href="https://github.com/probot-studio/probot-core">github ↗</a>
</div>
</div>
<div class="kart">
<span class="stamp">canlı</span>
<div class="head"><span class="ad"><a href="https://impact.tr">impact</a></span><span class="no">FİŞ 25-01</span></div>
<div class="fields"><span>TÜR <b>yarışma organizasyonu</b></span><span>ADRES <b>impact.tr</b></span></div>
<div class="body">
<p>impact.tr ile robot yarışmaları düzenliyoruz: hands-on challenge (iki gün durmadan
esp32'yle robot), ideathon, robo soccer. nisan 2026 çemberlitaş bölgeselinde 16 takım,
150+ katılımcı. yarışan çocuktan yarışma düzenleyen adama geçiş garip bi his, tavsiye
ederim. site kodu <a href="https://git.tunapro.xyz/tunapro/impact-site">kendi gitea'mda</a>.</p>
</div>
<div class="go">
<a href="https://impact.tr">impact.tr ↗</a>
<a href="https://git.tunapro.xyz/tunapro/impact-site">gitea ↗</a>
</div>
</div>
<div class="kart">
<span class="stamp">kazandık</span>
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a></span><span class="no">FİŞ 24-02</span></div>
<div class="fields"><span>DİL <b>rust</b></span><span>YIL <b>2024</b></span></div>
<div class="body">
<p>boğaziçi'nin ai yarışması için yazdık ve kazandık. asansör çizelgeleme problemi.
repo o günkü haliyle duruyor, dokunmuyorum. kazanan koda dokunulmaz.</p>
</div>
<div class="go"><a href="https://github.com/tunapro1234/elevator_optimization">github ↗</a></div>
</div>
<div class="kart">
<span class="stamp">7/24</span>
<div class="head"><span class="ad">homelab</span><span class="no">FİŞ 24-03</span></div>
<div class="fields"><span>KAPSAM <b>*.tunapro.xyz</b></span><span>BULUT <b>yok</b></span></div>
<div class="body">
<p>kod <a href="https://git.tunapro.xyz">gitea</a>'da, medya kendi video sunucumda,
minecraft paneli <code>mcdash</code>'te, mail bile burada. bu katalog da aynı
makinelerde. gece 2'de mail sunucusu debug'lamak hobi sayılmaz ama kendi verine sahip
olmanın bedeli bu, ödüyorum.</p>
</div>
<div class="go">
<a href="https://git.tunapro.xyz">git ↗</a>
<a href="https://video.tunapro.xyz">video ↗</a>
<a href="https://mcdash.tunapro.xyz">mcdash ↗</a>
</div>
</div>
</div>
<!-- ============ 2020-23 ============ -->
<div class="era"><span class="yr">2020-23</span><span class="nm">arkeoloji katı, dokunma bak</span><span class="fill"></span></div>
<div class="grid">
<div class="kart">
<span class="stamp dim">arşiv</span>
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/DBEX">dbex</a></span><span class="no">FİŞ 20-02</span></div>
<div class="fields"><span>DİL <b>python</b></span><span>SINIF <b>11</b></span></div>
<div class="body">
<p>python'un json kütüphanesini generator olarak yeniden yazmışım. arşivin en değerli belgesi readme'sidir:</p>
<div class="quote">"json kütüphanesine yetişebilmem için eklemem gereken çok fazla özellik
var ama maalesef ben 11. sınıfım."<span class="who"> dbex readme, 2020</span></div>
</div>
<div class="go"><a href="https://github.com/tunapro1234/DBEX">github ↗</a></div>
</div>
<div class="kart">
<span class="stamp dim">arşiv</span>
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/MEGABOI">megaboi</a></span><span class="no">FİŞ 20-03</span></div>
<div class="fields"><span>DİL <b>c++</b></span><span>DONANIM <b>arduino mega + lcd</b></span></div>
<div class="body">
<p>mega + lcd shield + 6 butondan el yapımı konsol. lityumlu taşınabilir versiyonu bile var.</p>
<div class="quote">"neden ekranın yediği serial0'ı kullandın diyebilirsiniz, cevap çok
basit: bilmiyorum."<span class="who"> megaboi readme, 2020</span></div>
</div>
<div class="go"><a href="https://github.com/tunapro1234/MEGABOI">github ↗</a></div>
</div>
<div class="kart">
<span class="stamp dim">arşiv</span>
<div class="head"><span class="ad">c dönemi</span><span class="no">FİŞ 21-01</span></div>
<div class="fields"><span>DİL <b>c89 / c</b></span><span>YIL <b>2021</b></span></div>
<div class="body">
<p><a href="https://github.com/tunapro1234/vector-h">vector-h</a>: c89'da basit vektör
implementasyonu. <a href="https://github.com/tunapro1234/cygnus">cygnus</a> daha ilginç,
embed cihazlar için ai kütüphanesi gibi bi şeydi. o ara nnfs okuyordum, matrix makroları
oradan. kitap bitince düzenli baştan başlayacaktım. kitap bitti, başlamadım. olsun.</p>
</div>
<div class="go">
<a href="https://github.com/tunapro1234/vector-h">vector-h ↗</a>
<a href="https://github.com/tunapro1234/cygnus">cygnus ↗</a>
</div>
</div>
<div class="kart">
<span class="stamp ink">kökler</span>
<div class="head"><span class="ad">first yılları</span><span class="no">FİŞ 20-01</span></div>
<div class="fields"><span>LİSE <b>frc 7839</b></span><span>SONRA <b>nf / frc 9029</b></span><span>NFR <b>2023</b></span><span>CHAMPIONSHIP <b>2025 &amp; 2026</b></span></div>
<div class="body">
<p>lisede frc'deydim, 7839'da. lise bitince mali'yle nf'yi kurduk, 9029. 2023'te de
nfr products'ı kurduk, şirket hâlâ dönüyor. geçen sene zağanos'taydım. 2025 ve 2026'da
first championship'teydik, houston'a iki kere gitmiş olmak hâlâ hoşuma gidiyor.</p>
<p>first'ün bana öğrettiği şey kod değil. teslim tarihi gerçek olunca nasıl çalışıldığını
öğrendim. altı haftada robot bitiyor çünkü bitmek zorunda. o refleks hâlâ bende.</p>
</div>
<div class="go">
<a href="https://github.com/team-nf">team-nf ↗</a>
<a href="https://github.com/tunapro1234/FRC7839">frc7839 arşivi ↗</a>
</div>
</div>
<div class="kart">
<span class="stamp">🍄 tuhaf</span>
<div class="head"><span class="ad"><a href="https://canbitirici.tunapro.xyz">can raporu</a></span><span class="no">FİŞ ??-??</span></div>
<div class="fields"><span>TÜR <b>araştırma(!)</b></span><span>HAKEM <b>yok, gerek de yok</b></span></div>
<div class="body">
<p>arkadaş grubu içi bir şaka aşırı ciddiye alınırsa ne olur: başlığı, metodolojisi ve
grafikleri olan bir rapor olur. "can neden iş bitirici değil?" · can'a sevgilerimle.</p>
</div>
<div class="go"><a href="https://canbitirici.tunapro.xyz">raporu oku ↗</a></div>
</div>
</div>
<div class="endnote">
<div>
<h3>arşivcinin notu</h3>
<p>bu katalog bitmiş işlerin listesi değil, çoğu kart hâlâ değişiyor. yarım gördüğün
bir fiş sonra geldiğinde büyümüş olabilir, ya da tamamen başka bir şeye dönüşmüş olabilir,
ikisi de oluyor.</p>
<p>eski kartları güzel göstermeye çalışmadım. 2020'nin readme'leri neyse o. arşivci
belgeyi düzeltmez, saklar.</p>
</div>
<div>
<h3>ulaşım fişi</h3>
<ul>
<li><a href="https://github.com/tunapro1234">github</a><span class="at">@tunapro1234</span></li>
<li><a href="https://git.tunapro.xyz">kendi gitea'm</a><span class="at">git.tunapro.xyz</span></li>
<li><a href="https://probotstudio.com">probot studio</a><span class="at">probotstudio.com</span></li>
<li><a href="https://stackoverflow.com/users/tunapro1234">stack overflow</a><span class="at">@tunapro1234</span></li>
</ul>
</div>
</div>
<footer>
<span>© 2026 tuna gül · katalog kendi sunucusunda saklanır</span>
<span>yıllıktaki qr'dan geldiysen: <a href="/yillik/">senin fişin ayrı</a></span>
</footer>
</div>
</body>
</html>

91
yillik/index.html Normal file
View File

@@ -0,0 +1,91 @@
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>yıllıktan geldin · tunapro.xyz</title>
<meta name="description" content="2026 yıllığındaki qr kodun çıkışı. kâğıt sararır, bu sayfa kalır.">
<style>
:root{
--bg:#f4f1ea; --card:#faf8f2; --ink:#141412; --red:#c22f23; --dim:#8a857a; --faint:#c9c3b4;
--serif:"Iowan Old Style",Palatino,Georgia,serif;
--mono:ui-monospace,Menlo,Consolas,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
::selection{background:var(--red);color:#fff}
body{
background:var(--bg);color:var(--ink);font-family:var(--serif);line-height:1.65;
min-height:100vh;display:flex;align-items:center;justify-content:center;padding:34px 18px;
background-image:repeating-linear-gradient(0deg,transparent,transparent 31px,rgba(20,20,18,.035) 31px,rgba(20,20,18,.035) 32px);
}
.card{
max-width:620px;background:var(--card);border:2px solid var(--ink);
box-shadow:6px 6px 0 rgba(20,20,18,.14);padding:38px 40px 30px;position:relative;
}
@media(max-width:560px){.card{padding:28px 22px 24px}}
.stamp{
position:absolute;top:16px;right:18px;font-family:var(--mono);font-size:10.5px;font-weight:700;
letter-spacing:.14em;text-transform:uppercase;color:var(--red);border:2.5px solid var(--red);
border-radius:4px;padding:3px 9px;transform:rotate(7deg);opacity:.85;
}
.kicker{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--red)}
h1{font-size:clamp(30px,6vw,44px);font-weight:600;line-height:1.08;letter-spacing:-.015em;margin:14px 0 20px}
h1 em{font-style:italic;color:var(--red)}
p{font-size:16.5px;color:#2e2c25;margin-bottom:14px}
.age{font-family:var(--mono);font-size:12px;color:var(--dim);border:1.5px dashed var(--faint);
padding:8px 12px;margin:18px 0;background:var(--bg)}
.age b{color:var(--red);font-weight:600}
.sig{margin-top:22px;text-align:right}
.sig .name{font-style:italic;font-size:26px;color:var(--ink)}
.sig .at{font-family:var(--mono);font-size:11.5px;color:var(--dim);display:block;margin-top:2px}
.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:26px;padding-top:20px;border-top:1.5px solid var(--ink);
font-family:var(--mono);font-size:12.5px}
.actions a{text-decoration:none;color:var(--ink);border:1.5px solid var(--ink);padding:8px 15px;border-radius:999px;
transition:background .12s,color .12s}
.actions a:hover{background:var(--ink);color:var(--bg)}
.actions a.main{background:var(--red);border-color:var(--red);color:#fff}
.actions a.main:hover{background:var(--ink);border-color:var(--ink)}
footer{margin-top:18px;font-family:var(--mono);font-size:10.5px;color:var(--dim)}
</style>
</head>
<body>
<main class="card">
<span class="stamp">sayfalar arasında bulundu</span>
<div class="kicker">tunapro.xyz/yillik · 2026 yıllığı</div>
<p style="margin-top:18px">demek gerçekten okuttun qr'ı. aynı kitaba sıkıştık madem, buyur.
herkes yıllığa bi şeyler yazdı, ben de buraya bi kapı koydum. kâğıt sararıyor ama bu adres
benim sunucumda döndüğü sürece açık.</p>
<p>beni hatırlıyorsundur, köşede robot parçaları ve terminal pencereleriyle uğraşan
çocuk. o uğraşlar büyüdü. hâlâ robot yapıyorum, artık yarışma da düzenliyorum, sunucumda
agent'lar çalışıyor. hepsinin kaydı bahçede duruyor, aşağıdaki kapıdan girebilirsin.</p>
<p>sen de kendi tuhaf şeyini yapıyorsundur umarım. yapmıyorsan yap. kimse senden
beklemiyor zaten, o yüzden tamamen serbestsin.</p>
<div class="age" id="age">bu sayfa 2026'da yazıldı.</div>
<p>bu kod hâlâ çalışıyorsa ben hâlâ bi şeyler kuruyorum demektir. yolun açık olsun.</p>
<div class="sig">
<div class="name">tuna</div>
<span class="at">her yerde @tunapro1234</span>
</div>
<div class="actions">
<a class="main" href="/">bahçeye gir →</a>
<a href="https://github.com/tunapro1234">github</a>
</div>
<footer>kendi sunucumda basıldı. yıllığın kâğıdından uzun yaşar, plan bu.</footer>
</main>
<script>
(function(){
var y=new Date().getFullYear(), d=y-2026, el=document.getElementById("age");
if(d===1){ el.innerHTML="bu sayfa 2026'da yazıldı. sen okuyana kadar <b>1 yıl</b> geçmiş. hâlâ ayaktayız."; }
else if(d>1){ el.innerHTML="bu sayfa 2026'da yazıldı. sen okuyana kadar <b>"+d+" yıl</b> geçmiş. hâlâ ayaktayız, fena değil."; }
})();
</script>
</body>
</html>