f833d429fc
Backend altyapısı: - 4 yeni Appwrite tablosu: blog_posts, testimonials, seo_pages, seo_settings - Appwrite Storage bucket: kovak-yazilim-media (görsel yüklemeleri) - Appwrite Auth ile session cookie tabanlı koruma Admin paneli (/admin): - Login akışı (email/password) + protected layout - Dashboard: sayım kartları + hızlı aksiyonlar - Blog CRUD: markdown content, kapak görseli, draft/published, SEO alanları - Services CRUD: lucide ikon seçici - Projects CRUD: teknoloji etiketleri, live URL - Testimonials CRUD: puanlama - SEO yöneticisi: global ayarlar + sayfa bazlı override - Mesaj inbox: status filtreleme + güncelleme - Medya kütüphanesi: Appwrite Storage upload/delete Public: - /blog ve /blog/[slug] sayfaları (markdown render) - Anasayfaya Testimonials bölümü - Tüm public sayfalarda generateMetadata + seo_pages override - Header'a Blog linki Route yapısı: - app/(site)/ — public site, Header/Footer ortak - app/admin/login — auth dışı - app/admin/(protected)/ — requireUser() korumalı 23 route üretiliyor, public static, admin dynamic.
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import "server-only";
|
|
import { Account, Client, Storage, TablesDB } from "node-appwrite";
|
|
|
|
const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!;
|
|
const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID!;
|
|
const apiKey = process.env.APPWRITE_API_KEY;
|
|
|
|
export const DATABASE_ID = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID!;
|
|
export const MEDIA_BUCKET_ID =
|
|
process.env.NEXT_PUBLIC_APPWRITE_MEDIA_BUCKET_ID ?? "kovak-yazilim-media";
|
|
|
|
export const TABLES = {
|
|
contactMessages: "contact_messages",
|
|
services: "services",
|
|
projects: "projects",
|
|
blogPosts: "blog_posts",
|
|
testimonials: "testimonials",
|
|
seoPages: "seo_pages",
|
|
seoSettings: "seo_settings",
|
|
} as const;
|
|
|
|
export function adminClient() {
|
|
const c = new Client().setEndpoint(endpoint).setProject(projectId);
|
|
if (apiKey) c.setKey(apiKey);
|
|
return c;
|
|
}
|
|
|
|
export function sessionClient(sessionSecret: string) {
|
|
return new Client()
|
|
.setEndpoint(endpoint)
|
|
.setProject(projectId)
|
|
.setSession(sessionSecret);
|
|
}
|
|
|
|
export const adminDB = new TablesDB(adminClient());
|
|
export const adminStorage = new Storage(adminClient());
|
|
export const adminAccount = new Account(adminClient());
|
|
|
|
export { Account, TablesDB, Storage };
|