Initial commit: Key Ajans portfolio site
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Proje Yükleme — Key Ajansı{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<section class="auth-single">
|
||||
<div class="form-card form-card-wide">
|
||||
<h2 class="form-title">Proje Yükle</h2>
|
||||
<p class="form-note">Yeni projenizi GitHub'a benzer şekilde ekleyin. İstediğiniz zaman kaldırabilir veya dosyayı geri indirebilirsiniz.</p>
|
||||
|
||||
<form method="post" action="{{ url_for('projects.do_upload') }}" enctype="multipart/form-data">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<label>Başlık
|
||||
<input type="text" name="title" maxlength="150" placeholder="Proje adı" required>
|
||||
</label>
|
||||
<label>Açıklama
|
||||
<textarea name="description" maxlength="5000" rows="5" placeholder="Proje hakkında kısa bilgi"></textarea>
|
||||
</label>
|
||||
<label>Etiketler
|
||||
<input type="text" name="tags" maxlength="300" placeholder="örn. web, tasarım, python">
|
||||
</label>
|
||||
<label>Bağlantı (isteğe bağlı)
|
||||
<input type="url" name="link" maxlength="500" placeholder="https://…">
|
||||
</label>
|
||||
<label>Dosya (isteğe bağlı)
|
||||
<input type="file" name="file" accept=".png,.jpg,.jpeg,.gif,.webp,.pdf,.zip,.rar,.7z,.tar,.gz,.txt,.md,.doc,.docx,.ppt,.pptx,.xls,.xlsx">
|
||||
</label>
|
||||
<button class="btn btn-primary btn-block" type="submit">Projeyi Yükle</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2 class="section-title">Yüklenen Projeler</h2>
|
||||
{% if projects %}
|
||||
<div class="admin-list">
|
||||
{% for p in projects %}
|
||||
<div class="admin-row">
|
||||
<div class="admin-row-main">
|
||||
<span class="proj-title">{{ p.title }}</span>
|
||||
<span class="admin-row-meta">{{ p.created_at }} · {% if p.size %}{{ (p.size / 1024) | round(1) }} KB{% else %}dosya yok{% endif %}</span>
|
||||
</div>
|
||||
<div class="admin-row-actions">
|
||||
<a class="btn btn-ghost" href="{{ url_for('index') }}#projeler">Gör</a>
|
||||
{% if p.stored_name %}
|
||||
<a class="btn btn-primary" href="{{ url_for('projects.download', pid=p.id) }}">İndir</a>
|
||||
{% endif %}
|
||||
<form class="inline-form" method="post" action="{{ url_for('projects.do_delete', pid=p.id) }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<button class="btn btn-danger" type="submit" onclick="return confirm('Bu proje silinsin mi?')">Sil</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="empty-note">Henüz proje yüklenmedi.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,31 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Talepler — Key Ajansı{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<section class="section">
|
||||
<h2 class="section-title">Gelen Talepler</h2>
|
||||
{% if requests %}
|
||||
<div class="inbox">
|
||||
{% for r in requests %}
|
||||
<article class="mail">
|
||||
<div class="mail-head">
|
||||
<span class="mail-subject">{{ r.subject }}</span>
|
||||
<span class="mail-time">{{ r.created_at }}</span>
|
||||
</div>
|
||||
<div class="mail-from">Kimden: {{ r.sender_name }} <{{ r.sender_email }}></div>
|
||||
<div class="mail-body">{{ r.body }}</div>
|
||||
<div class="mail-actions">
|
||||
<form class="inline-form" method="post" action="{{ url_for('talepler.admin_delete', rid=r.id) }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<button class="btn btn-danger" type="submit" onclick="return confirm('Bu talep silinsin mi?')">Sil</button>
|
||||
</form>
|
||||
</div>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="empty-note">Henüz talep yok.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,64 @@
|
||||
<!doctype html>
|
||||
<html lang="tr" data-theme="light">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="robots" content="noindex">
|
||||
<title>{% block title %}Key Ajansı Portfolyosu{% endblock %}</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,500&family=Montserrat:wght@300;400;500;600&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="topbar">
|
||||
<button class="theme-toggle" id="themeToggle" type="button" aria-label="Tema değiştir" title="Aydınlık / Karanlık tema">
|
||||
<span class="tt-sun">☀</span><span class="tt-moon">☾</span>
|
||||
<span class="tt-knob"></span>
|
||||
</button>
|
||||
<a class="brand" href="/">Key Ajansı</a>
|
||||
<nav class="nav">
|
||||
<a href="/">Ana Menü</a>
|
||||
{% if is_admin %}
|
||||
<a href="{{ url_for('projects.admin_panel') }}">Proje Yükleme</a>
|
||||
<a href="{{ url_for('talepler.admin_inbox') }}">Talepler</a>
|
||||
<form class="inline-form" method="post" action="{{ url_for('auth.cikis') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<button class="link-btn" type="submit">Çıkış</button>
|
||||
</form>
|
||||
{% elif current_user %}
|
||||
<a href="{{ url_for('talepler.new_talep') }}">Yeni Talep</a>
|
||||
<form class="inline-form" method="post" action="{{ url_for('auth.cikis') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<button class="link-btn" type="submit">Çıkış</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<a href="{{ url_for('auth.login_page') }}">Giriş Yap</a>
|
||||
<a href="{{ url_for('auth.kayit') }}">Kayıt Ol</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
{% with messages = get_flashed_messages(with_categories=true) %}
|
||||
{% if messages %}
|
||||
<div class="flash-wrap">
|
||||
{% for category, message in messages %}
|
||||
<div class="flash flash-{{ category }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
|
||||
<main class="wrap">
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<p>Key Ajansı Portfolyosu — an unofficial agency</p>
|
||||
</footer>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
|
||||
{% block scripts %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Hata — Key Ajansı{% endblock %}
|
||||
{% block content %}
|
||||
<section class="hero">
|
||||
<h1 class="hero-title">{{ code }}</h1>
|
||||
<p class="hero-sub">{{ message }}</p>
|
||||
<p><a class="btn btn-primary" href="/">Ana Menüye Dön</a></p>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,78 @@
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
|
||||
<section class="hero">
|
||||
<h1 class="hero-title">Key Ajansı Portfolyosu</h1>
|
||||
<p class="hero-sub">an unofficial agency</p>
|
||||
</section>
|
||||
|
||||
<section class="section" id="projeler">
|
||||
<h2 class="section-title">Projelerimiz:</h2>
|
||||
{% if projects %}
|
||||
<div class="proj-grid">
|
||||
{% for p in projects %}
|
||||
<article class="proj-card">
|
||||
<div class="proj-body">
|
||||
<h3 class="proj-title">{{ p.title }}</h3>
|
||||
{% if p.tags %}
|
||||
<p class="proj-tags">{% for t in p.tags.split(',') if t.strip() %}<span class="tag">{{ t.strip() }}</span>{% endfor %}</p>
|
||||
{% endif %}
|
||||
<p class="proj-desc">{{ p.description }}</p>
|
||||
<p class="proj-date">{{ p.created_at }}</p>
|
||||
</div>
|
||||
<div class="proj-actions">
|
||||
{% if p.link %}<a class="btn btn-ghost" href="{{ p.link }}" target="_blank" rel="noopener noreferrer">Bağlantı ↗</a>{% endif %}
|
||||
{% if p.stored_name %}
|
||||
<a class="btn btn-primary" href="{{ url_for('projects.download', pid=p.id) }}">Dosyayı İndir</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="empty-note">Henüz proje yüklenmedi.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2 class="section-title">Ajansdaki Çalışanlarımız:</h2>
|
||||
<div class="emp-grid">
|
||||
|
||||
<div class="emp-col">
|
||||
<h3 class="emp-name">Eymen Mert YİĞİT</h3>
|
||||
<div class="emp-card">
|
||||
<div class="slider" data-interval="4000">
|
||||
<div class="slides">
|
||||
<img src="https://picsum.photos/seed/key-eymen-1/900/560" alt="" loading="eager">
|
||||
<img src="https://picsum.photos/seed/key-eymen-2/900/560" alt="" loading="lazy">
|
||||
<img src="https://picsum.photos/seed/key-eymen-3/900/560" alt="" loading="lazy">
|
||||
<img src="https://picsum.photos/seed/key-eymen-4/900/560" alt="" loading="lazy">
|
||||
</div>
|
||||
<button class="slider-btn prev" type="button" aria-label="Önceki">‹</button>
|
||||
<button class="slider-btn next" type="button" aria-label="Sonraki">›</button>
|
||||
<div class="dots"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="emp-col">
|
||||
<h3 class="emp-name">Mehmed Kudret ERDOĞMUŞ</h3>
|
||||
<div class="emp-card">
|
||||
<div class="slider" data-interval="4000">
|
||||
<div class="slides">
|
||||
<img src="https://picsum.photos/seed/key-kudret-1/900/560" alt="" loading="eager">
|
||||
<img src="https://picsum.photos/seed/key-kudret-2/900/560" alt="" loading="lazy">
|
||||
<img src="https://picsum.photos/seed/key-kudret-3/900/560" alt="" loading="lazy">
|
||||
<img src="https://picsum.photos/seed/key-kudret-4/900/560" alt="" loading="lazy">
|
||||
</div>
|
||||
<button class="slider-btn prev" type="button" aria-label="Önceki">‹</button>
|
||||
<button class="slider-btn next" type="button" aria-label="Sonraki">›</button>
|
||||
<div class="dots"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,31 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Giriş Yap — Key Ajansı{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<section class="auth-grid">
|
||||
<div class="form-card">
|
||||
<h2 class="form-title">Giriş Yap</h2>
|
||||
<form method="post" action="{{ url_for('auth.do_login') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<label>Kullanıcı adı
|
||||
<input type="text" name="username" maxlength="64" autocomplete="username" required>
|
||||
</label>
|
||||
<label>Şifre
|
||||
<input type="password" name="password" maxlength="128" autocomplete="current-password" required>
|
||||
</label>
|
||||
<button class="btn btn-primary btn-block" type="submit">Giriş Yap</button>
|
||||
</form>
|
||||
<p class="form-note">Hesabınız yok mu? <a href="{{ url_for('auth.kayit') }}">Kayıt olun</a></p>
|
||||
</div>
|
||||
|
||||
<aside class="request-panel">
|
||||
<h2 class="form-title">Talep Menüsü</h2>
|
||||
<p class="request-panel-text">
|
||||
Ajansımızda görmek istediğiniz bir çalışma, öneri veya işbirliği mi var?
|
||||
Bir e-posta yazar gibi talebinizi bize iletin; inceleyip dönüş yapalım.
|
||||
</p>
|
||||
<a class="btn btn-primary" href="{{ url_for('talepler.new_talep') }}">Talebi Oluştur</a>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,32 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Yeni Talep — Key Ajansı{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<section class="auth-single">
|
||||
<div class="form-card form-card-wide">
|
||||
<h2 class="form-title">Yeni Talep</h2>
|
||||
<p class="form-note">Bir e-posta yazar gibi talebinizi oluşturun.</p>
|
||||
|
||||
<form method="post" action="{{ url_for('talepler.do_talep') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<div class="field-row">
|
||||
<label>Kimden — Adınız
|
||||
<input type="text" name="sender_name" maxlength="100" value="{{ prefill_name }}" autocomplete="name" required>
|
||||
</label>
|
||||
<label>Kimden — E-posta
|
||||
<input type="email" name="sender_email" maxlength="120" value="{{ prefill_email }}" autocomplete="email" required>
|
||||
</label>
|
||||
</div>
|
||||
<label>Konu
|
||||
<input type="text" name="subject" maxlength="150" placeholder="Talebinizin kısa özeti" required>
|
||||
</label>
|
||||
<label>Mesajınız
|
||||
<textarea name="body" maxlength="5000" rows="8" placeholder="Talebinizi detaylı şekilde açıklayın…" required></textarea>
|
||||
</label>
|
||||
<button class="btn btn-primary btn-block" type="submit">Başvuru Yap</button>
|
||||
<p class="form-note form-note-center"><a href="/">Geri Dön</a></p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,28 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Kayıt Ol — Key Ajansı{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<section class="auth-single">
|
||||
<div class="form-card">
|
||||
<h2 class="form-title">Kayıt Ol</h2>
|
||||
<form method="post" action="{{ url_for('auth.do_register') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<label>Kullanıcı adı
|
||||
<input type="text" name="username" minlength="3" maxlength="32" pattern="[A-Za-z0-9_.-]{3,32}" autocomplete="username" required>
|
||||
</label>
|
||||
<label>Ad Soyad
|
||||
<input type="text" name="display_name" maxlength="100" autocomplete="name" required>
|
||||
</label>
|
||||
<label>Şifre
|
||||
<input type="password" name="password" minlength="8" maxlength="128" autocomplete="new-password" required>
|
||||
</label>
|
||||
<label>Şifre (tekrar)
|
||||
<input type="password" name="password_confirm" minlength="8" maxlength="128" autocomplete="new-password" required>
|
||||
</label>
|
||||
<button class="btn btn-primary btn-block" type="submit">Kayıt Ol</button>
|
||||
</form>
|
||||
<p class="form-note">Zaten hesabınız var mı? <a href="{{ url_for('auth.login_page') }}">Giriş yapın</a></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user