BOARD APP COİN /APP/NETWORK

Architectural Synthesis of the Board Network Protocol: ProofOfWrite Consensus, Pixelencia UI Orchestration, and the Sovereign Future of Collaborative Intelligence

​The digital landscape of 2025 marks a definitive transition from passive consumption to sovereign creation, facilitated by a convergence of decentralized protocols and agentic artificial intelligence. The Board Network Protocol, introducing the novel ProofOfWrite (PoW-Write) consensus mechanism, emerges as a critical infrastructure for this new era. It seeks to resolve the persistent tension between real-time collaborative ideation and the permanent, immutable assetization of intellectual property. By synthesizing the core tenets of decentralized code forges, behavioral-based consensus models, and multi-agent orchestration, the Board Network transforms the act of collaborative writing and visual design into a high-integrity economic activity. This report provides a comprehensive architectural synthesis and optimization of the protocol, evaluating its consensus logic, the Pixelencia user interface layer, and the AI-driven tokenomics that ensure long-term ecosystem sustainability.

​The Philosophical and Structural Genesis of ProofOfWrite

​The Board Network is founded on the principle that creative labor—specifically the act of writing, researching, and collaborative diagramming—should serve as the primary securing mechanism of its own value. This diverges sharply from the history of blockchain technology, which has traditionally relied on computational expenditure or capital accumulation to achieve security. The protocol draws spiritual and operational inspiration from the concept of “local-first” sovereignty, as seen in decentralized code forges like Radicle, where users maintain absolute control over their repositories and creative workflows without reliance on centralized entities.

​In this framework, the act of “writing” is not merely the production of text but a verifiable proof of cognitive contribution. As noted by philosophical precedents, true competence is often forged in the “broken places” of iterative failure and refinement, a concept reflected in the protocol’s tolerance for and resolution of asynchronous collaborative conflicts. The Board Network implements a “Human Conductor” architecture, where the human creator directs a symphony of specialized AI agents, transforming the traditional chatbot interface into an autopilot system for complex project execution.

​Comparative Evolution of Consensus Paradigms

​To understand the necessity of ProofOfWrite, one must evaluate the limitations of existing consensus models in the context of intellectual property (IP) and creative collaboration. Traditional Proof of Work (PoW) protocols incur enormous energy costs and lack the performance required for real-time applications. Proof of Stake (PoS), while more efficient, often results in wealth concentration, where governance and rewards are decoupled from actual utility and contribution.

​ProofOfWrite is a behavioral-based consensus mechanism that quantifies user actions—such as committing a paragraph, drawing a logical node on a whiteboard, or validating a research citation—as contribution values. This aligns the network’s security with the health of its application layer.

<style>
    /* Base Reset */
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
}

    body {
        font-family: ‘Segoe UI’, Tahoma, Geneva, Verdana, sans-serif;
        background-color: #f4f6f8;
        color: #333;
        line-height: 1.6;
        padding: 20px;
}

    header {
        background-color: #1e1e2f;
        color: #fff;
        padding: 20px;
        text-align: center;
}

    h1, h2, h3 {
        margin-bottom: 10px;
}

.container {
        max-width: 1200px;
        margin: auto;
        padding: 20px;
        background-color: #fff;
        border-radius: 8px;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

.social-wall {
        display: flex;
        flex-direction: column;
        gap: 20px;
}

.post {
        background-color: #ffffff;
        border: 1px solid #ddd;
        border-radius: 6px;
        padding: 15px;
        transition: box-shadow 0.3s ease;
}

.post:hover {
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

.post-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 10px;
}

.post-content {
        font-size: 1rem;
        margin-bottom: 10px;
}

.post-footer {
        display: flex;
        justify-content: space-between;
        font-size: 0.9rem;
        color: #666;
}

.btn {
        display: inline-block;
        padding: 10px 15px;
        background-color: #0073aa;
        color: #fff;
        text-decoration: none;
        border-radius: 4px;
        transition: background-color 0.3s ease;
}

.btn:hover {
        background-color: #005f8d;
}

    /* Calendar Styles */
.calendar {
        margin-top: 30px;
        border: 1px solid #ccc;
        border-radius: 6px;
        padding: 15px;
}

.calendar h3 {
        margin-bottom: 10px;
}

    /* Responsive Design */
    @media (max-width: 768px) {
.container {
            padding: 10px;
}

.post-content {
            font-size: 0.95rem;
}

.btn {
            padding: 8px 12px;
}
}
</style>
“`

Notebook

<?php
/*
Plugin Name: HistoryNote Core – Social Wall
Description: Konum tabanlı, KYC destekli, Takvim ve Duvar hibrit sosyal medya çekirdeği.
Version: 1.0
Author: Codecia
*/

// 1. GÜVENLİK VE GİRİŞ KONTROLLERİ
if (!defined(‘ABSPATH’)) exit;

// 2. ÖZEL VERİ TİPLERİ (POST TYPES) – Notlar ve Duvarlar için
function hn_register_post_types() {
    // “History Note” – Tarihe Not Düş
    register_post_type(‘history_note’, array(
        ‘labels’ => array(‘name’ => ‘History Notes’, ‘singular_name’ => ‘Note’),
        ‘public’ => true,
        ‘has_archive’ => true,
        ‘supports’ => array(‘title’, ‘editor’, ‘author’, ‘custom-fields’),
        ‘show_in_rest’ => true, // Mobil uygulamalar (API) için gerekli
    ));
}
add_action(‘init’, ‘hn_register_post_types’);

// 3. DUVAR KATEGORİLERİ (TAXONOMIES)
function hn_register_taxonomies() {
    register_taxonomy(‘wall_type’, ‘history_note’, array(
        ‘labels’ => array(‘name’ => ‘Wall Types’),
        ‘public’ => true,
        ‘hierarchical’ => true,
        ‘show_in_rest’ => true,
    ));
   
    // Varsayılan Duvarları Oluştur
    if (!term_exists(‘Public Wall’, ‘wall_type’)) wp_insert_term(‘Public Wall’, ‘wall_type’);
    if (!term_exists(‘University Wall’, ‘wall_type’)) wp_insert_term(‘University Wall’, ‘wall_type’);
    if (!term_exists(‘News Wall’, ‘wall_type’)) wp_insert_term(‘News Wall’, ‘wall_type’);
    if (!term_exists(‘Art Wall’, ‘wall_type’)) wp_insert_term(‘Art Wall’, ‘wall_type’);
}
add_action(‘init’, ‘hn_register_taxonomies’);

// 4. RADİKAL GİRİŞ EKRANI VE NOT FORMU (SHORTCODE)
// Kullanımı: Bir sayfaya [history_input] yazın.
function hn_input_form_shortcode() {
    if (!is_user_logged_in()) {
        return ‘<div class=”hn-login-gate”>Lütfen önce <a href=”‘.wp_login_url().'”>Giriş Yapın</a> veya KYC ile Doğrulayın.</div>’;
    }

    if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST[‘hn_submit_note’])) {
        // Notu Kaydet
        $post_id = wp_insert_post(array(
            ‘post_title’   => sanitize_text_field($_POST[‘hn_title’]),
            ‘post_content’ => sanitize_textarea_field($_POST[‘hn_content’]),
            ‘post_status’  => ‘publish’,
            ‘post_type’    => ‘history_note’,
            ‘post_author’  => get_current_user_id(),
        ));

        // Duvar Seçimi ve Meta Veriler
        if ($post_id) {
            wp_set_object_terms($post_id, intval($_POST[‘hn_wall’]), ‘wall_type’);
            update_post_meta($post_id, ‘hn_location’, sanitize_text_field($_POST[‘hn_location’])); // Konum
            update_post_meta($post_id, ‘hn_is_official’, ‘pending’); // KYC Doğrulama durumu
            echo ‘<div class=”hn-success”>Tarihe not düşüldü!</div>’;
        }
    }

    // HTML FORM (Radikal Basit Arayüz)
    ob_start();
    ?>
    <style>
        .hn-container { max-width: 600px; margin: 0 auto; background: #000; color: #fff; padding: 20px; font-family: ‘Courier New’, monospace; min-height: 100vh; }
        .hn-input { width: 100%; background: transparent; border: none; border-bottom: 2px solid #333; color: #fff; font-size: 1.5rem; padding: 10px; margin-bottom: 20px; outline: none; }
        .hn-textarea { width: 100%; background: #111; border: none; color: #0f0; height: 150px; padding: 10px; font-family: monospace; }
        .hn-select { background: #222; color: #fff; border: 1px solid #444; padding: 10px; width: 100%; margin-bottom: 20px; }
        .hn-btn { background: #fff; color: #000; border: none; padding: 15px 30px; font-weight: bold; cursor: pointer; width: 100%; text-transform: uppercase; letter-spacing: 2px; }
        .hn-date-display { font-size: 0.8rem; color: #666; text-align: right; margin-bottom: 30px; }
    </style>
   
    <div class=”hn-container”>
        <div class=”hn-date-display”><?php echo date(‘Y.m.d | H:i’); ?> // NOTE TO HISTORY</div>
       
        <form method=”post”>
            <input type=”text” name=”hn_title” class=”hn-input” placeholder=”Başlık / Konu…” required>
           
            <select name=”hn_wall” class=”hn-select”>
                <option value=””>Duvar Seçiniz (Where to post?)</option>
                <?php
                $terms = get_terms(array(‘taxonomy’ => ‘wall_type’, ‘hide_empty’ => false));
                foreach ($terms as $term) {
                    echo ‘<option value=”‘.$term->term_id.'”>Request to: ‘.$term->name.'</option>’;
                }
                ?>
            </select>
           
            <textarea name=”hn_content” class=”hn-textarea” placeholder=”Tarihe ne not düşmek istersin? (Write a note to history)”></textarea>
           
            <input type=”hidden” name=”hn_location” id=”hn_location_input” value=”Unknown”>
           
            <br><br>
            <button type=”submit” name=”hn_submit_note” class=”hn-btn”>NOTE IT</button>
        </form>
    </div>
   
    <script>
        // Basit Geolocation Alımı
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                document.getElementById(‘hn_location_input’).value = position.coords.latitude + ‘,’ + position.coords.longitude;
            });
        }
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode(‘history_input’, ‘hn_input_form_shortcode’);

// 5. DUVAR AKIŞI (WALL DISPLAY – Google Takvim Gibi Listeleme)
// Kullanımı: [history_wall type=”public”]
function hn_wall_display_shortcode($atts) {
    $atts = shortcode_atts(array(‘type’ => ‘public-wall’), $atts);
   
    $args = array(
        ‘post_type’ => ‘history_note’,
        ‘tax_query’ => array(
            array(
                ‘taxonomy’ => ‘wall_type’,
                ‘field’ => ‘slug’,
                ‘terms’ => $atts[‘type’],
            ),
        ),
        ‘posts_per_page’ => 20,
    );
   
    $query = new WP_Query($args);
   
    ob_start();
    echo ‘<div class=”hn-wall-feed” style=”background:#f4f4f4; padding:20px;”>’;
    echo ‘<h3>Wall: ‘.strtoupper($atts[‘type’]).'</h3>’;
   
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $is_official = get_post_meta(get_the_ID(), ‘hn_is_official’, true) == ‘verified’;
            $official_badge = $is_official ? ‘<span style=”color:blue”>✓ Official</span>’ : ”;
           
            echo ‘<div style=”background:#fff; margin-bottom:15px; padding:15px; border-left: 5px solid #000;”>’;
            echo ‘<small>’.get_the_date(‘d M Y H:i’).’ | ‘.get_post_meta(get_the_ID(), ‘hn_location’, true).'</small>’;
            echo ‘<h4>’.get_the_title().’ ‘.$official_badge.'</h4>’;
            echo ‘<div>’.get_the_excerpt().'</div>’;
            echo ‘</div>’;
        }
    } else {
        echo ‘Bu duvarda henüz not yok.’;
    }
    echo ‘</div>’;
    wp_reset_postdata();
    return ob_get_clean();
}
add_shortcode(‘history_wall’, ‘hn_wall_display_shortcode’);

@media (max-width: 768px) { .hn-container, .hn-wall-feed { max-width: 100%; padding: 10px; } .hn-input, .hn-textarea { font-size: 1.2rem; } } /* Paylaşım Butonları Stili */ .hn-share-container { margin-top: 20px; text-align: center; } .hn-share-container button { margin: 5px; padding: 10px 20px; background: #28a745; color: #fff; border: none; cursor: pointer; } /* Grok AI Entegrasyonu (Link) */ .hn-grok-ai { margin-top: 20px; text-align: center; } .hn-grok-ai a { color: #0f0; text-decoration: none; font-weight: bold; } HistoryNote Core – Social Wall (Grok Edition) body { font-family: ‘Courier New’, monospace; background: #000; color: #fff; margin: 0; padding: 0; } .hn-container { max-width: 600px; margin: 0 auto; background: #000; padding: 20px; min-height: 50vh; } .hn-input { width: 100%; background: transparent; border: none; border-bottom: 2px solid #333; color: #fff; font-size: 1.5rem; padding: 10px; margin-bottom: 20px; outline: none; } .hn-textarea { width: 100%; background: #111; border: none; color: #0f0; height: 150px; padding: 10px; font-family: monospace; resize: vertical; } .hn-select { background: #222; color: #fff; border: 1px solid #444; padding: 10px; width: 100%; margin-bottom: 20px; } .hn-btn { background: #fff; color: #000; border: none; padding: 15px 30px; font-weight: bold; cursor: pointer; width: 100%; text-transform: uppercase; letter-spacing: 2px; } .hn-date-display { font-size: 0.8rem; color: #666; text-align: right; margin-bottom: 30px; } .hn-wall-feed { max-width: 600px; margin: 20px auto; background: #f4f4f4; color: #000; padding: 20px; } .hn-note-item { background: #fff; margin-bottom: 15px; padding: 15px; border-left: 5px solid #000; } .hn-official-badge { color: blue; font-weight: bold; } .hn-share-btn { background: #007bff; color: #fff; border: none; padding: 5px 10px; cursor: pointer; margin-top: 10px; } .hn-calendar-view { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; margin-top: 20px; } .hn-calendar-day { background: #222; padding: 10px; text-align: center; cursor: pointer; } .hn-calendar-day.active { background: #0f0; color: #000; } /* Grok Ekstra Özellikler: Responsive Tasarım (Mobile/PC) */ @media (max-width: 768px) { .hn-container, .hn-wall-feed { max-width: 100%; padding: 10px; } .hn-input, .hn-textarea { font-size: 1.2rem; } } /* Paylaşım Butonları Stili */ .hn-share-container { margin-top: 20px; text-align: center; } .hn-share-container button { margin: 5px; padding: 10px 20px; background: #28a745; color: #fff; border: none; cursor: pointer; } /* Grok AI Entegrasyonu (Link) */ .hn-grok-ai { margin-top: 20px; text-align: center; } .hn-grok-ai a { color: #0f0; text-decoration: none; font-weight: bold; }
Duvar Seçiniz (Where to post?) Request to: Public Wall Request to: University Wall Request to: News Wall Request to: Art Wall Not Tarihi (Daily Note):

Wall: PUBLIC-WALL (Örnek Notlar – Yerel Depolama ile Dinamik)

// Tarih Gösterimi document.getElementById(‘current-date’).textContent = new Date().toLocaleString() + ‘ // NOTE TO HISTORY’; // Geolocation Alımı if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { document.getElementById(‘hn_location’).value = position.coords.latitude + ‘,’ + position.coords.longitude; }); } // Yerel Depolama için Notlar (Grok Ekstra: Backend Olmadan Çalışsın) let notes = JSON.parse(localStorage.getItem(‘hn_notes’)) || []; // Not Ekleme ve Gösterme document.getElementById(‘hn-note-form’).addEventListener(‘submit’, function(e) { e.preventDefault(); const title = document.getElementById(‘hn_title’).value; const content = document.getElementById(‘hn_content’).value; const wall = document.getElementById(‘hn_wall’).value || ‘Public Wall’; const location = document.getElementById(‘hn_location’).value; const date = document.getElementById(‘hn_date’).value || new Date().toISOString().split(‘T’)[0]; const isOfficial = Math.random() > 0.5 ? ‘verified’ : ‘pending’; // Simüle KYC const newNote = { title, content, wall, location, date, isOfficial }; notes.push(newNote); localStorage.setItem(‘hn_notes’, JSON.stringify(notes)); displayNotes(); displayCalendar(); alert(‘Tarihe not düşüldü! (Yerel depolama ile kaydedildi)’); e.target.reset(); }); // Notları Göster function displayNotes(wallType = ‘Public Wall’) { const feed = document.getElementById(‘hn-wall-feed’); feed.innerHTML = `

Wall: ${wallType.toUpperCase()}

`; notes.filter(note => note.wall === wallType).forEach(note => { const officialBadge = note.isOfficial === ‘verified’ ? ‘✓ Official‘ : ”; feed.innerHTML += `
${note.date} | ${note.location}

${note.title} ${officialBadge}

${note.content.substring(0, 100)}…
`; }); if (notes.length === 0) feed.innerHTML += ‘

Bu duvarda henüz not yok.

‘; } // Takvim Görünümü Oluştur (Grok Ekstra: Google Takvim Gibi) function displayCalendar() { const calendar = document.getElementById(‘hn-calendar-view’); calendar.innerHTML = ”; const daysInMonth = new Date().getDate(); // Basit aylık takvim for (let i = 1; i new Date(note.date).getDate() === i); if (dayNotes.length > 0) day.classList.add(‘active’); day.addEventListener(‘click’, () => alert(`Günün Notları: ${dayNotes.map(n => n.title).join(‘, ‘)}`)); calendar.appendChild(day); } } // Paylaşım Fonksiyonları (Grok Ekstra) function shareOnSocial(platform) { const url = window.location.href; const text = ‘HistoryNote Social Wall\’dan bir not paylaşıyorum!’; if (platform === ‘Twitter’) window.open(`https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(url)}`); if (platform === ‘Facebook’) window.open(`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`); } function copyLink() { navigator.clipboard.writeText(window.location.href).then(() => alert(‘Link kopyalandı!’)); } function shareNote(title, content) { const text = `Not: ${title} – ${content.substring(0, 50)}…`; alert(`Paylaşılıyor: ${text} (Gerçek paylaşım için sosyal API entegrasyonu ekleyin)`); } // Başlangıçta Yükle displayNotes(); displayCalendar();

ki

Notebook

$wall_type = sanitize_title($atts[‘type’]); // e.g., public, university, news, art

ob_start();

// Query notes for this wall type
$args = array(
    ‘post_type’ => ‘note_wall_note’,
    ‘posts_per_page’ => 10, // Paginate or load more via JS
    ‘tax_query’ => array(
        array(
            ‘taxonomy’ => ‘note_wall_type’,
            ‘field’ => ‘slug’,
            ‘terms’ => $wall_type,
        ),
    ),
);

$notes = new WP_Query($args);

// Radically different entry screen: Custom UI with calendar-like note entry
?>
<div class=”note-walls-container”>
    <h2><?php echo ucfirst($wall_type); ?> Note Wall</h2>
   
    <!– Note Entry Form (Notebook/Note It/Daily Note) –>
    <form id=”note-walls-form” method=”post” action=””>
        <input type=”hidden” name=”note_wall_type” value=”<?php echo esc_attr($wall_type); ?>”>
        <label for=”note_title”>Note Title (Notice/Note to History):</label>
        <input type=”text” id=”note_title” name=”note_title” required>
       
        <label for=”note_content”>Note Content:</label>
        <textarea id=”note_content” name=”note_content” required></textarea>
       
        <!– Calendar-like UI (Google Takvim Gibi, but radically different) –>
        <label for=”note_date”>Note Date (Daily Note Calendar):</label>
        <input type=”date” id=”note_date” name=”note_date”>
       
        <!– Location/KYC/Social Integrations (placeholders) –>
        <label for=”note_location”>Location:</label>
        <input type=”text” id=”note_location” name=”note_location”>
       
        <label for=”note_kyc”>KYC Verified:</label>
        <input type=”checkbox” id=”note_kyc” name=”note_kyc”>
       
        <button type=”submit”>Submit Note</button>
    </form>
   
    <!– Display Notes –>
    <div class=”note-walls-list”>
        <?php if ($notes->have_posts()) : while ($notes->have_posts()) : $notes->the_post(); ?>
            <div class=”note-item”>
                <h3><?php the_title(); ?></h3>
                <div><?php the_content(); ?></div>
                <p>Location: <?php echo get_post_meta(get_the_ID(), ‘_note_location’, true); ?></p>
                <p>Institution: <?php echo get_post_meta(get_the_ID(), ‘_note_institution_tag’, true); ?></p>
            </div>
        <?php endwhile; endif; ?>
    </div>
</div>
<?php

wp_reset_postdata();
return ob_get_clean();

$wall_type = sanitize_title($atts[‘type’]); // e.g., public, university, news, art

ob_start();

// Query notes for this wall type
$args = array(
‘post_type’ => ‘note_wall_note’,
‘posts_per_page’ => 10, // Paginate or load more via JS
‘tax_query’ => array(
array(
‘taxonomy’ => ‘note_wall_type’,
‘field’ => ‘slug’,
‘terms’ => $wall_type,
),
),
);

$notes = new WP_Query($args);

// Radically different entry screen: Custom UI with calendar-like note entry
?>

Note Wall

<input type="hidden" name="note_wall_type" value="”>
Note Title (Notice/Note to History):

Note Content:


Note Date (Daily Note Calendar):


Location:

KYC Verified:

have_posts()) : while ($notes->have_posts()) : $notes->the_post(); ?>

Location:

Institution:

‘note_wall_note’,
‘posts_per_page’ => 10, // Paginate or load more via JS
‘tax_query’ => array(
array(
‘taxonomy’ => ‘note_wall_type’,
‘field’ => ‘slug’,
‘terms’ => $wall_type,
),
),
);

$notes = new WP_Query($args);

// Radically different entry screen: Custom UI with calendar-like note entry
?>

Note Wall

<input type="hidden" name="note_wall_type" value="”>
Note Title (Notice/Note to History):

Note Content:


Note Date (Daily Note Calendar):


Location:

KYC Verified:

have_posts()) : while ($notes->have_posts()) : $notes->the_post(); ?>

Location:

Institution:

<?php

wp_reset_postdata();
return ob_get_clean();

$wall_type = sanitize_title($atts[‘type’]); // e.g., public, university, news, art

ob_start();

// Query notes for this wall type
$args = array(
    ‘post_type’ => ‘note_wall_note’,
    ‘posts_per_page’ => 10, // Paginate or load more via JS
    ‘tax_query’ => array(
        array(
            ‘taxonomy’ => ‘note_wall_type’,
            ‘field’ => ‘slug’,
            ‘terms’ => $wall_type,
        ),
    ),
);

$notes = new WP_Query($args);

// Radically different entry screen: Custom UI with calendar-like note entry
?>
<div class=”note-walls-container”>
    <h2><?php echo ucfirst($wall_type); ?> Note Wall</h2>
   
    <!– Note Entry Form (Notebook/Note It/Daily Note) –>
    <form id=”note-walls-form” method=”post” action=””>
        <input type=”hidden” name=”note_wall_type” value=”<?php echo esc_attr($wall_type); ?>”>
        <label for=”note_title”>Note Title (Notice/Note to History):</label>
        <input type=”text” id=”note_title” name=”note_title” required>
       
        <label for=”note_content”>Note Content:</label>
        <textarea id=”note_content” name=”note_content” required></textarea>
       
        <!– Calendar-like UI (Google Takvim Gibi, but radically different) –>
        <label for=”note_date”>Note Date (Daily Note Calendar):</label>
        <input type=”date” id=”note_date” name=”note_date”>
       
        <!– Location/KYC/Social Integrations (placeholders) –>
        <label for=”note_location”>Location:</label>
        <input type=”text” id=”note_location” name=”note_location”>
       
        <label for=”note_kyc”>KYC Verified:</label>
        <input type=”checkbox” id=”note_kyc” name=”note_kyc”>
       
        <button type=”submit”>Submit Note</button>
    </form>
   
    <!– Display Notes –>
    <div class=”note-walls-list”>
        <?php if ($notes->have_posts()) : while ($notes->have_posts()) : $notes->the_post(); ?>
            <div class=”note-item”>
                <h3><?php the_title(); ?></h3>
                <div><?php the_content(); ?></div>
                <p>Location: <?php echo get_post_meta(get_the_ID(), ‘_note_location’, true); ?></p>
                <p>Institution: <?php echo get_post_meta(get_the_ID(), ‘_note_institution_tag’, true); ?></p>
            </div>
        <?php endwhile; endif; ?>
    </div>
</div>
<?php

wp_reset_postdata();
return ob_get_clean();

findex document finder

Findex Ecosystem – Finder Documents Finder App

Sadece Belge Arama Motoru

Arama Sonuçları

  • Sonuç 1: Örnek Belge.pdf İndir
  • Sonuç 2: Örnek Rapor.docx İndir
  • Sonuç 3: Örnek Form.xls İndir

(Bu, maket bir örnek olup gerçek arama sonuçları göstermez. Gerçek entegrasyon için backend geliştirme gereklidir.)

© 2025 Findex Ecosystem. Tüm hakları saklıdır.

.findex-ecosystem-mockup { max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ddd; border-radius: 8px; background-color: #f9f9f9; font-family: Arial, sans-serif; } .app-header { text-align: center; margin-bottom: 20px; } .app-header h1 { font-size: 24px; margin: 0; } .app-header p { font-size: 14px; color: #666; } .search-form { display: flex; margin-bottom: 20px; } .search-input { flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 4px 0 0 4px; } .search-button { padding: 10px 20px; background-color: #007bff; color: white; border: none; border-radius: 0 4px 4px 0; cursor: pointer; } .search-button:hover { background-color: #0056b3; } .results-section h2 { font-size: 18px; margin-bottom: 10px; } .results-list { list-style: none; padding: 0; } .result-item { padding: 10px; border-bottom: 1px solid #eee; } .result-item a { color: #007bff; text-decoration: none; } .result-item a:hover { text-decoration: underline; } .app-footer { text-align: center; margin-top: 20px; font-size: 12px; color: #888; }

<?php
function capilot_mini_app_store_shortcode() {
    ob_start();
    ?>
    <link rel=”preconnect” href=”https://fonts.googleapis.com”&gt;
    <link rel=”stylesheet” href=”https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap”&gt;
    <style>
    :root{
      –bg:#0b0b0e;–card:#14141a;–text:#e9e9ef;–muted:#a6a6b3;
      –accent:#7c5cff;–accent2:#19c37d;–border:#23232b;
    }
    *{box-sizing:border-box} html,body{margin:0;background:var(–bg);color:var(–text);font-family:Inter,system-ui,-apple-system,”Segoe UI”,Roboto}
    a{color:var(–accent);text-decoration:none}
    .wrap{max-width:1080px;margin:0 auto;padding:16px}
    header{display:flex;gap:12px;align-items:center;justify-content:space-between;margin:8px 0 16px}
    .brand{display:flex;gap:12px;align-items:center}
    .logo{width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,var(–accent),var(–accent2));box-shadow:0 6px 24px rgba(124,92,255,.35)}
    .title{font-weight:700;font-size:18px}
    .subtitle{color:var(–muted);font-size:13px}
    .topbar{display:flex;gap:8px;flex-wrap:wrap}
    .chip{padding:8px 12px;border:1px solid var(–border);border-radius:999px;background:#0f0f14;color:var(–text);cursor:pointer}
    .chip.active{background:var(–accent);border-color:transparent;color:white}
    .search{flex:1;min-width:180px;display:flex;align-items:center;gap:8px;background:#0f0f14;border:1px solid var(–border);border-radius:12px;padding:10px 12px}
    .search input{flex:1;background:transparent;border:none;outline:none;color:var(–text)}
    .grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:12px}
    @media(max-width:900px){.grid{grid-template-columns:repeat(2,1fr)}}
    @media(max-width:520px){.grid{grid-template-columns:1fr}}
    .card{background:var(–card);border:1px solid var(–border);border-radius:16px;overflow:hidden;display:flex;flex-direction:column}
    .thumb{height:120px;background:#1b1b22;display:flex;align-items:center;justify-content:center}
    .thumb img{max-width:100%;max-height:100%}
    .content{padding:12px;display:flex;flex-direction:column;gap:8px}
    .name{font-weight:600}
    .desc{color:var(–muted);font-size:13px;line-height:1.4}
    .tags{display:flex;gap:6px;flex-wrap:wrap}
    .tag{font-size:11px;color:#dcdcf0;background:#1a1a22;border:1px solid var(–border);padding:4px 8px;border-radius:999px}
    .actions{display:flex;gap:8px;margin-top:6px}
    .btn{flex:1;padding:10px 12px;border-radius:12px;border:1px solid var(–border);background:#101018;color:var(–text);cursor:pointer}
    .btn.primary{background:var(–accent);color:#fff;border:none}
    .btn.ghost{background:#0f0f14}
    footer{margin:24px 0;color:var(–muted);font-size:12px}
    /* Modal */
    .modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:center;justify-content:center;z-index:50}
    .modal{width:96%;max-width:680px;background:var(–card);border:1px solid var(–border);border-radius:18px;overflow:hidden}
    .modal header{padding:14px;border-bottom:1px solid var(–border)}
    .modal .body{padding:14px;display:grid;gap:12px}
    .platforms{display:flex;gap:8px;flex-wrap:wrap}
    .pchip{padding:8px 10px;border:1px solid var(–border);border-radius:10px;background:#101018;color:var(–text)}
    .code{background:#0f0f14;border:1px solid var(–border);border-radius:12px;padding:12px;overflow:auto}
    .close{cursor:pointer;color:var(–muted)}
    </style>

    <div class=”wrap”>
      <header>
        <div class=”brand”>
          <div class=”logo” aria-hidden=”true”></div>
          <div>
            <div class=”title”>Capilot Mini App Store</div>
            <div class=”subtitle”>Micro socials • Games • Tools • Books • Web3 verification</div>
          </div>
        </div>
        <div class=”topbar” role=”toolbar” aria-label=”Kategoriler”>
          <button class=”chip active” data-cat=”all”>Tümü</button>
          <button class=”chip” data-cat=”games”>Oyunlar</button>
          <button class=”chip” data-cat=”tools”>Araçlar</button>
          <button class=”chip” data-cat=”commerce”>Alışveriş</button>
          <button class=”chip” data-cat=”books”>Kitaplar</button>
          <button class=”chip” data-cat=”web3″>Web3</button>
          <div class=”search” role=”search”>
            🔎 <input id=”q” type=”search” placeholder=”Ara: quiz, alışveriş, kitabevi…” />
          </div>
        </div>
      </header>

      <section class=”grid” id=”grid” aria-live=”polite”></section>

      <footer>
        Capilot Store • Capilot Mini App Store • Capilot Book Store • OneDrive Web3 Verification
      </footer>
    </div>

    <!– Modal –>
    <div class=”modal-backdrop” id=”backdrop” aria-hidden=”true”>
      <div class=”modal” role=”dialog” aria-modal=”true” aria-labelledby=”m-title”>
        <header>
          <div style=”display:flex;justify-content:space-between;align-items:center;width:100%”>
            <div id=”m-title” class=”title”>Mini App</div>
            <div class=”close” id=”m-close”>✕</div>
          </div>
        </header>
        <div class=”body”>
          <div id=”m-desc” class=”desc”></div>
          <div class=”platforms”>
            <div class=”pchip”>WhatsApp</div>
            <div class=”pchip”>Telegram</div>
            <div class=”pchip”>Skype</div>
            <div class=”pchip”>Viber</div>
            <div class=”pchip”>Messenger</div>
          </div>
          <div class=”actions”>
            <button id=”m-deploy” class=”btn primary”>Deploy / Share</button>
            <button id=”m-copy” class=”btn ghost”>Kodu Kopyala</button>
          </div>
          <div class=”code”>
<pre id=”m-code”>// Inline command veya webhook URL’leri burada gösterilir.
// Örnek: Telegram inline query: t.me/YourBot?startapp=quiz
// WhatsApp: wa.me/YourBusiness?text=PLAY_QUIZ</pre>
          </div>
        </div>
      </div>
    </div>

    <script>
    const APPS = [
      {
        id:”quizx”,
        name:”QuizX — Hızlı Trivia”,
        cat:[“games”,”micro-socials”],
        desc:”Sohbet içinde çoktan seçmeli bilgi yarışması. Skor paylaşımı, günlük lig.”,
        tags:[“quiz”,”inline”,”daily”],
        img:””,
        commands:{
          telegram:”t.me/QuizXBot?startapp=quiz”,
          whatsapp:”wa.me/905000000000?text=PLAY_QUIZ”,
          skype:”https://your-skype-miniapp.example/quiz&#8221;,
          viber:”viber://pa?chatURI=quizx”,
          messenger:”https://m.me/YourPage?ref=PLAY_QUIZ&#8221;
        },
        snippet:`// Telegram inline:
bot.on(‘inline_query’, q => { /* quiz logic */ });`
      },
      {
        id:”shoplite”,
        name:”ShopLite — Mikro Alışveriş”,
        cat:[“commerce”,”tools”],
        desc:”Chat içi ürün seçimi, sepet ve ödeme yönlendirme.”,
        tags:[“catalog”,”checkout”],
        img:””,
        commands:{
          telegram:”t.me/ShopLiteBot?startapp=catalog”,
          whatsapp:”wa.me/905000000000?text=OPEN_SHOP”,
          skype:”#”,
          viber:”#”,
          messenger:”#”
        },
        snippet:`// WhatsApp template message payload (Node.js)
await client.messages.create({ to, template: ‘shop_open’ });`
      },
      {
        id:”capibook”,
        name:”Capilot Book Store”,
        cat:[“books”],
        desc:”Dijital kitaplar, manifestolar ve modüler yayın — sohbetten okuma.”,
        tags:[“books”,”manifesto”,”reader”],
        img:””,
        commands:{
          telegram:”t.me/CapilotBooks?startapp=reader”,
          whatsapp:”wa.me/905000000000?text=READ”,
          skype:”#”,
          viber:”#”,
          messenger:”#”
        },
        snippet:`// Reader embed (HTML)
https://books.capilot.example/reader?id=123`
      },
      {
        id:”web3verify”,
        name:”OneDrive Web3 Verification”,
        cat:[“web3″,”tools”],
        desc:”Dosya zaman damgası, imza ve zincir aktarımı (Ethereum/Solana/BNB/Tron…).”,
        tags:[“timestamp”,”signature”,”chain”],
        img:””,
        commands:{
          telegram:”t.me/Web3VerifyBot?startapp=verify”,
          whatsapp:”wa.me/905000000000?text=VERIFY”,
          skype:”#”,
          viber:”#”,
          messenger:”#”
        },
        snippet:`// EVM (ethers.js) örneği
const sig = await wallet.signMessage(hash);
await contract.storeHash(hash, sig);`
      }
    ];

    const grid = document.getElementById(‘grid’);
    const q = document.getElementById(‘q’);
    const chips = Array.from(document.querySelectorAll(‘.chip’));
    const backdrop = document.getElementById(‘backdrop’);
    const mClose = document.getElementById(‘m-close’);
    const mTitle = document.getElementById(‘m-title’);
    const mDesc = document.getElementById(‘m-desc’);
    const mCode = document.getElementById(‘m-code’);
    const mCopy = document.getElementById(‘m-copy’);
    const mDeploy = document.getElementById(‘m-deploy’);

    let state = { cat:”all”, term:”” };

    function render(){
      grid.innerHTML = “”;
      const apps = APPS.filter(a=>{
        const catOk = state.cat===”all” || a.cat.includes(state.cat);
        const t = state.term.toLowerCase();
        const termOk = !t || (a.name.toLowerCase().includes(t) || a.desc.toLowerCase().includes(t) || a.tags.join(” “).toLowerCase().includes(t));
        return catOk && termOk;
      });
      apps.forEach(a=>{
        const el = document.createElement(‘article’);
        el.className=”card”;
        el.innerHTML = `
          <div class=”thumb”>${a.img ? `<img src=”${a.img}” alt=”${a.name}”>` : `🎯`}</div>
          <div class=”content”>
            <div class=”name”>${a.name}</div>
            <div class=”desc”>${a.desc}</div>
            <div class=”tags”>${a.tags.map(t=>`<span class=”tag”>${t}</span>`).join(“”)}</div>
            <div class=”actions”>
              <button class=”btn primary” data-id=”${a.id}” data-action=”open”>Aç</button>
              <button class=”btn” data-id=”${a.id}” data-action=”share”>Paylaş</button>
            </div>
          </div>`;
        grid.appendChild(el);
      });
    }

    chips.forEach(c=>{
      c.addEventListener(‘click’, ()=>{
        chips.forEach(x=>x.classList.remove(‘active’));
        c.classList.add(‘active’);
        state.cat = c.dataset.cat;
        render();
      });
    });
    q.addEventListener(‘input’, ()=>{
      state.term = q.value;
      render();
    });
    grid.addEventListener(‘click’, e=>{
      const b = e.target.closest(‘button’);
      if(!b) return;
      const app = APPS.find(x=>x.id===b.dataset.id);
      if(!app) return;
      openModal(app);
    });

    function openModal(app){
      mTitle.textContent = app.name;
      mDesc.textContent = app.desc;
      mCode.textContent = app.snippet + “\n\n// Komutlar:\n” + Object.entries(app.commands).map(([k,v])=>`${k}: ${v}`).join(“\n”);
      backdrop.style.display=”flex”;
      backdrop.setAttribute(‘aria-hidden’,’false’);
      mDeploy.onclick = ()=>{
        const url = Object.values(app.commands).find(u=>u && u!==”#”) || location.href;
        navigator.clipboard?.writeText(url);
        alert(“Deploy/Share link panoya kopyalandı:\n” + url);
      };
      mCopy.onclick = ()=>{
        navigator.clipboard?.writeText(mCode.textContent);
        alert(“Kod panoya kopyalandı.”);
      };
    }
    mClose.addEventListener(‘click’, ()=>{
      backdrop.style.display=”none”;
      backdrop.setAttribute(‘aria-hidden’,’true’);
    });
    document.addEventListener(‘keydown’, e=>{
      if(e.key===”Escape”) mClose.click();
    });

    render();
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode(‘capilot_mini_app_store’, ‘capilot_mini_app_store_shortcode’);
?>“`

MİNİ APP STORE

<!doctype html>
<html lang="tr">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <title>Capilot Mini App Store</title>
  <meta name="theme-color" content="#111" />
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap">
  <style>
    :root{
      --bg:#0b0b0e;--card:#14141a;--text:#e9e9ef;--muted:#a6a6b3;
      --accent:#7c5cff;--accent2:#19c37d;--border:#23232b;
    }
    *{box-sizing:border-box} html,body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto}
    a{color:var(--accent);text-decoration:none}
    .wrap{max-width:1080px;margin:0 auto;padding:16px}
    header{display:flex;gap:12px;align-items:center;justify-content:space-between;margin:8px 0 16px}
    .brand{display:flex;gap:12px;align-items:center}
    .logo{width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,var(--accent),var(--accent2));box-shadow:0 6px 24px rgba(124,92,255,.35)}
    .title{font-weight:700;font-size:18px}
    .subtitle{color:var(--muted);font-size:13px}
    .topbar{display:flex;gap:8px;flex-wrap:wrap}
    .chip{padding:8px 12px;border:1px solid var(--border);border-radius:999px;background:#0f0f14;color:var(--text);cursor:pointer}
    .chip.active{background:var(--accent);border-color:transparent;color:white}
    .search{flex:1;min-width:180px;display:flex;align-items:center;gap:8px;background:#0f0f14;border:1px solid var(--border);border-radius:12px;padding:10px 12px}
    .search input{flex:1;background:transparent;border:none;outline:none;color:var(--text)}
    .grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:12px}
    @media(max-width:900px){.grid{grid-template-columns:repeat(2,1fr)}}
    @media(max-width:520px){.grid{grid-template-columns:1fr}}
    .card{background:var(--card);border:1px solid var(--border);border-radius:16px;overflow:hidden;display:flex;flex-direction:column}
    .thumb{height:120px;background:#1b1b22;display:flex;align-items:center;justify-content:center}
    .thumb img{max-width:100%;max-height:100%}
    .content{padding:12px;display:flex;flex-direction:column;gap:8px}
    .name{font-weight:600}
    .desc{color:var(--muted);font-size:13px;line-height:1.4}
    .tags{display:flex;gap:6px;flex-wrap:wrap}
    .tag{font-size:11px;color:#dcdcf0;background:#1a1a22;border:1px solid var(--border);padding:4px 8px;border-radius:999px}
    .actions{display:flex;gap:8px;margin-top:6px}
    .btn{flex:1;padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:#101018;color:var(--text);cursor:pointer}
    .btn.primary{background:var(--accent);color:#fff;border:none}
    .btn.ghost{background:#0f0f14}
    footer{margin:24px 0;color:var(--muted);font-size:12px}
    /* Modal */
    .modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:center;justify-content:center;z-index:50}
    .modal{width:96%;max-width:680px;background:var(--card);border:1px solid var(--border);border-radius:18px;overflow:hidden}
    .modal header{padding:14px;border-bottom:1px solid var(--border)}
    .modal .body{padding:14px;display:grid;gap:12px}
    .platforms{display:flex;gap:8px;flex-wrap:wrap}
    .pchip{padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:#101018;color:var(--text)}
    .code{background:#0f0f14;border:1px solid var(--border);border-radius:12px;padding:12px;overflow:auto}
    .close{cursor:pointer;color:var(--muted)}
  </style>
</head>
<body>
  <div class="wrap">
    <header>
      <div class="brand">
        <div class="logo" aria-hidden="true"></div>
        <div>
          <div class="title">Capilot Mini App Store</div>
          <div class="subtitle">Micro socials • Games • Tools • Books • Web3 verification</div>
        </div>
      </div>
      <div class="topbar" role="toolbar" aria-label="Kategoriler">
        <button class="chip active" data-cat="all">Tümü</button>
        <button class="chip" data-cat="games">Oyunlar</button>
        <button class="chip" data-cat="tools">Araçlar</button>
        <button class="chip" data-cat="commerce">Alışveriş</button>
        <button class="chip" data-cat="books">Kitaplar</button>
        <button class="chip" data-cat="web3">Web3</button>
        <div class="search" role="search">
          🔎 <input id="q" type="search" placeholder="Ara: quiz, alışveriş, kitabevi..." />
        </div>
      </div>
    </header>

    <section class="grid" id="grid" aria-live="polite"></section>

    <footer>
      Capilot Store • Capilot Mini App Store • Capilot Book Store • OneDrive Web3 Verification
    </footer>
  </div>

  <!-- Modal -->
  <div class="modal-backdrop" id="backdrop" aria-hidden="true">
    <div class="modal" role="dialog" aria-modal="true" aria-labelledby="m-title">
      <header>
        <div style="display:flex;justify-content:space-between;align-items:center;width:100%">
          <div id="m-title" class="title">Mini App</div>
          <div class="close" id="m-close">✕</div>
        </div>
      </header>
      <div class="body">
        <div id="m-desc" class="desc"></div>
        <div class="platforms">
          <div class="pchip">WhatsApp</div>
          <div class="pchip">Telegram</div>
          <div class="pchip">Skype</div>
          <div class="pchip">Viber</div>
          <div class="pchip">Messenger</div>
        </div>
        <div class="actions">
          <button id="m-deploy" class="btn primary">Deploy / Share</button>
          <button id="m-copy" class="btn ghost">Kodu Kopyala</button>
        </div>
        <div class="code">
<pre id="m-code">// Inline command veya webhook URL’leri burada gösterilir.
// Örnek: Telegram inline query: t.me/YourBot?startapp=quiz
// WhatsApp: wa.me/YourBusiness?text=PLAY_QUIZ</pre>
        </div>
      </div>
    </div>
  </div>

<script>
const APPS = [
  {
    id:"quizx",
    name:"QuizX — Hızlı Trivia",
    cat:["games","micro-socials"],
    desc:"Sohbet içinde çoktan seçmeli bilgi yarışması. Skor paylaşımı, günlük lig.",
    tags:["quiz","inline","daily"],
    img:"",
    commands:{
      telegram:"t.me/QuizXBot?startapp=quiz",
      whatsapp:"wa.me/905000000000?text=PLAY_QUIZ",
      skype:"https://your-skype-miniapp.example/quiz",
      viber:"viber://pa?chatURI=quizx",
      messenger:"https://m.me/YourPage?ref=PLAY_QUIZ"
    },
    snippet:`// Telegram inline:
bot.on('inline_query', q => { /* quiz logic */ });`
  },
  {
    id:"shoplite",
    name:"ShopLite — Mikro Alışveriş",
    cat:["commerce","tools"],
    desc:"Chat içi ürün seçimi, sepet ve ödeme yönlendirme.",
    tags:["catalog","checkout"],
    img:"",
    commands:{
      telegram:"t.me/ShopLiteBot?startapp=catalog",
      whatsapp:"wa.me/905000000000?text=OPEN_SHOP",
      skype:"#",
      viber:"#",
      messenger:"#"
    },
    snippet:`// WhatsApp template message payload (Node.js)
await client.messages.create({ to, template: 'shop_open' });`
  },
  {
    id:"capibook",
    name:"Capilot Book Store",
    cat:["books"],
    desc:"Dijital kitaplar, manifestolar ve modüler yayın — sohbetten okuma.",
    tags:["books","manifesto","reader"],
    img:"",
    commands:{
      telegram:"t.me/CapilotBooks?startapp=reader",
      whatsapp:"wa.me/905000000000?text=READ",
      skype:"#",
      viber:"#",
      messenger:"#"
    },
    snippet:`// Reader embed (HTML)
<iframe src="https://books.capilot.example/reader?id=123"></iframe>`
  },
  {
    id:"web3verify",
    name:"OneDrive Web3 Verification",
    cat:["web3","tools"],
    desc:"Dosya zaman damgası, imza ve zincir aktarımı (Ethereum/Solana/BNB/Tron...).",
    tags:["timestamp","signature","chain"],
    img:"",
    commands:{
      telegram:"t.me/Web3VerifyBot?startapp=verify",
      whatsapp:"wa.me/905000000000?text=VERIFY",
      skype:"#",
      viber:"#",
      messenger:"#"
    },
    snippet:`// EVM (ethers.js) örneği
const sig = await wallet.signMessage(hash);
await contract.storeHash(hash, sig);`
  }
];

const grid = document.getElementById('grid');
const q = document.getElementById('q');
const chips = Array.from(document.querySelectorAll('.chip'));
const backdrop = document.getElementById('backdrop');
const mClose = document.getElementById('m-close');
const mTitle = document.getElementById('m-title');
const mDesc = document.getElementById('m-desc');
const mCode = document.getElementById('m-code');
const mCopy = document.getElementById('m-copy');
const mDeploy = document.getElementById('m-deploy');

let state = { cat:"all", term:"" };

function render(){
  grid.innerHTML = "";
  const apps = APPS.filter(a=>{
    const catOk = state.cat==="all" || a.cat.includes(state.cat);
    const t = state.term.toLowerCase();
    const termOk = !t || (a.name.toLowerCase().includes(t) || a.desc.toLowerCase().includes(t) || a.tags.join(" ").toLowerCase().includes(t));
    return catOk && termOk;
  });
  apps.forEach(a=>{
    const el = document.createElement('article');
    el.className="card";
    el.innerHTML = `
      <div class="thumb">${a.img ? `<img src="${a.img}" alt="${a.name}">` : `🎯`}</div>
      <div class="content">
        <div class="name">${a.name}</div>
        <div class="desc">${a.desc}</div>
        <div class="tags">${a.tags.map(t=>`<span class="tag">${t}</span>`).join("")}</div>
        <div class="actions">
          <button class="btn primary" data-id="${a.id}" data-action="open">Aç</button>
          <button class="btn" data-id="${a.id}" data-action="share">Paylaş</button>
        </div>
      </div>`;
    grid.appendChild(el);
  });
}

chips.forEach(c=>{
  c.addEventListener('click', ()=>{
    chips.forEach(x=>x.classList.remove('active'));
    c.classList.add('active');
    state.cat = c.dataset.cat;
    render();
  });
});
q.addEventListener('input', ()=>{
  state.term = q.value;
  render();
});
grid.addEventListener('click', e=>{
  const b = e.target.closest('button');
  if(!b) return;
  const app = APPS.find(x=>x.id===b.dataset.id);
  if(!app) return;
  openModal(app);
});

function openModal(app){
  mTitle.textContent = app.name;
  mDesc.textContent = app.desc;
  mCode.textContent = app.snippet + "\n\n// Komutlar:\n" + Object.entries(app.commands).map(([k,v])=>`${k}: ${v}`).join("\n");
  backdrop.style.display="flex";
  backdrop.setAttribute('aria-hidden','false');
  mDeploy.onclick = ()=>{
    const url = Object.values(app.commands).find(u=>u && u!=="#") || location.href;
    navigator.clipboard?.writeText(url);
    alert("Deploy/Share link panoya kopyalandı:\n" + url);
  };
  mCopy.onclick = ()=>{
    navigator.clipboard?.writeText(mCode.textContent);
    alert("Kod panoya kopyalandı.");
  };
}
mClose.addEventListener('click', ()=>{
  backdrop.style.display="none";
  backdrop.setAttribute('aria-hidden','true');
});
document.addEventListener('keydown', e=>{
  if(e.key==="Escape") mClose.click();
});

render();
</script>
</body>
</html>