diff --git a/assets/pasted-20260228-230814-fcc0de29.png b/assets/pasted-20260228-230814-fcc0de29.png
new file mode 100644
index 0000000..3b39312
Binary files /dev/null and b/assets/pasted-20260228-230814-fcc0de29.png differ
diff --git a/assets/pasted-20260228-231441-5d159024.png b/assets/pasted-20260228-231441-5d159024.png
new file mode 100644
index 0000000..5e555d9
Binary files /dev/null and b/assets/pasted-20260228-231441-5d159024.png differ
diff --git a/backend/src/db/migrations/20260228000000-public-permissions.js b/backend/src/db/migrations/20260228000000-public-permissions.js
new file mode 100644
index 0000000..9da1cff
--- /dev/null
+++ b/backend/src/db/migrations/20260228000000-public-permissions.js
@@ -0,0 +1,41 @@
+
+module.exports = {
+ async up(queryInterface, Sequelize) {
+ const createdAt = new Date();
+ const updatedAt = new Date();
+
+ const [publicRole] = await queryInterface.sequelize.query(
+ `SELECT id FROM "roles" WHERE name = 'Public' LIMIT 1;`
+ );
+
+ if (publicRole && publicRole.length > 0) {
+ const publicRoleId = publicRole[0].id;
+
+ const permissionsToGrant = [
+ 'CREATE_LEADS',
+ 'READ_SERVICES',
+ 'READ_PROJECTS',
+ 'READ_TESTIMONIALS',
+ 'READ_MEDIA_ASSETS',
+ 'READ_FAQS'
+ ];
+
+ const [permissions] = await queryInterface.sequelize.query(
+ `SELECT id FROM "permissions" WHERE name IN (${permissionsToGrant.map(p => `'${p}'`).join(',')});`
+ );
+
+ const rolesPermissions = permissions.map(permission => ({
+ createdAt,
+ updatedAt,
+ roles_permissionsId: publicRoleId,
+ permissionId: permission.id
+ }));
+
+ await queryInterface.bulkInsert('rolesPermissionsPermissions', rolesPermissions);
+ }
+ },
+
+ async down(queryInterface, Sequelize) {
+ // Optional: remove permissions from Public role
+ }
+};
diff --git a/backend/src/index.js b/backend/src/index.js
index 254c3aa..18d1119 100644
--- a/backend/src/index.js
+++ b/backend/src/index.js
@@ -1,4 +1,3 @@
-
const express = require('express');
const cors = require('cors');
const app = express();
@@ -117,19 +116,19 @@ app.use('/api/pages', passport.authenticate('jwt', {session: false}), pagesRoute
app.use('/api/service_categories', passport.authenticate('jwt', {session: false}), service_categoriesRoutes);
-app.use('/api/services', passport.authenticate('jwt', {session: false}), servicesRoutes);
+app.use('/api/services', servicesRoutes);
-app.use('/api/projects', passport.authenticate('jwt', {session: false}), projectsRoutes);
+app.use('/api/projects', projectsRoutes);
-app.use('/api/testimonials', passport.authenticate('jwt', {session: false}), testimonialsRoutes);
+app.use('/api/testimonials', testimonialsRoutes);
-app.use('/api/faqs', passport.authenticate('jwt', {session: false}), faqsRoutes);
+app.use('/api/faqs', faqsRoutes);
-app.use('/api/leads', passport.authenticate('jwt', {session: false}), leadsRoutes);
+app.use('/api/leads', leadsRoutes);
-app.use('/api/media_assets', passport.authenticate('jwt', {session: false}), media_assetsRoutes);
+app.use('/api/media_assets', media_assetsRoutes);
-app.use('/api/home_sections', passport.authenticate('jwt', {session: false}), home_sectionsRoutes);
+app.use('/api/home_sections', home_sectionsRoutes);
app.use(
'/api/openai',
@@ -175,4 +174,4 @@ db.sequelize.sync().then(function () {
});
});
-module.exports = app;
+module.exports = app;
\ No newline at end of file
diff --git a/frontend/public/logo-beka.png b/frontend/public/logo-beka.png
new file mode 100644
index 0000000..3b39312
Binary files /dev/null and b/frontend/public/logo-beka.png differ
diff --git a/frontend/src/components/Beka/About.tsx b/frontend/src/components/Beka/About.tsx
new file mode 100644
index 0000000..da86ea4
--- /dev/null
+++ b/frontend/src/components/Beka/About.tsx
@@ -0,0 +1,111 @@
+import React from 'react';
+import { mdiCheckBold, mdiShieldCheck, mdiLightbulbOn, mdiStar } from '@mdi/js';
+import BaseIcon from '../BaseIcon';
+import ScrollReveal from './ScrollReveal';
+
+const features = [
+ {
+ title: 'Garantili İşçilik',
+ description: 'Tüm uygulamalarımızda uzun ömürlü ve garantili işçilik sunuyoruz.',
+ icon: mdiShieldCheck
+ },
+ {
+ title: 'Modern Tasarımlar',
+ description: 'En son trendlere uygun, estetik ve modern mekanlar tasarlıyoruz.',
+ icon: mdiLightbulbOn
+ },
+ {
+ title: 'En İyi Malzeme',
+ description: 'Sektördeki en kaliteli ve dayanıklı malzemeleri kullanıyoruz.',
+ icon: mdiStar
+ }
+];
+
+const About = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+ {/* Experience Badge */}
+
+
+
15+
+
Yıllık Sektörel Tecrübe
+
+
+
+ {/* Background Decoration */}
+
+
+
+
+
+
+
Biz Kimiz?
+
Mekanlarınıza Değer Katan Vizyon
+
+
+
+
+ "Beka Kaplama olarak, sadece duvarları kaplamıyor, yaşam alanlarınızın ruhunu değiştiriyoruz."
+
+
+
+
+
+ Kurulduğumuz günden bu yana, modern mimari trendlerini takip ederek müşterilerimize en kaliteli kaplama çözümlerini sunuyoruz. Akustik panel sistemlerinden PU cephe lambri uygulamalarına kadar geniş ürün yelpazemiz ve uzman ekibimizle projelerinize estetik ve dayanıklılık katıyoruz.
+
En kısa sürede uzman ekibimiz tarafından aranacaksınız.
+
+
+ ) : (
+
+ )}
+
+
+
+
+
+ );
+};
+
+export default ContactForm;
diff --git a/frontend/src/components/Beka/Footer.tsx b/frontend/src/components/Beka/Footer.tsx
new file mode 100644
index 0000000..3815a4c
--- /dev/null
+++ b/frontend/src/components/Beka/Footer.tsx
@@ -0,0 +1,111 @@
+import React from 'react';
+import Link from 'next/link';
+import { mdiFacebook, mdiInstagram, mdiLinkedin, mdiTwitter } from '@mdi/js';
+import BaseIcon from '../BaseIcon';
+import ScrollReveal from './ScrollReveal';
+
+const Footer = () => {
+ return (
+
+ );
+};
+
+export default Footer;
diff --git a/frontend/src/components/Beka/Hero.tsx b/frontend/src/components/Beka/Hero.tsx
new file mode 100644
index 0000000..b0460aa
--- /dev/null
+++ b/frontend/src/components/Beka/Hero.tsx
@@ -0,0 +1,88 @@
+import React from 'react';
+import Link from 'next/link';
+import { mdiArrowRight, mdiWhatsapp } from '@mdi/js';
+import BaseIcon from '../BaseIcon';
+
+const Hero = () => {
+ return (
+
+ {/* Background with Animation */}
+
+
+
+
+
+
+
+ {/* Badge with Animation */}
+
+
+ Modern Kaplama Sistemleri
+
+
+ {/* Headline with Animation */}
+
+ Mekanlarınıza
+ Estetik ve Güç
+ Katıyoruz.
+
+
+ {/* Subtext with Animation */}
+
+ Akustik panelden PVC mermer plakaya, 3D uygulamalardan PU cephe lambri sistemlerine kadar geniş ürün yelpazemizle hayalinizdeki mekanları gerçeğe dönüştürüyoruz.
+
+ );
+}
+
+Hizmetler.getLayout = function getLayout(page: ReactElement) {
+ return {page};
+};
\ No newline at end of file
diff --git a/frontend/src/pages/iletisim.tsx b/frontend/src/pages/iletisim.tsx
new file mode 100644
index 0000000..4ed6cfd
--- /dev/null
+++ b/frontend/src/pages/iletisim.tsx
@@ -0,0 +1,39 @@
+import React, { ReactElement } from 'react';
+import Head from 'next/head';
+import LayoutGuest from '../layouts/Guest';
+import { getPageTitle } from '../config';
+import Navbar from '../components/Beka/Navbar';
+import ContactForm from '../components/Beka/ContactForm';
+import PageHero from '../components/Beka/PageHero';
+import Footer from '../components/Beka/Footer';
+import WhatsAppButton from '../components/Beka/WhatsAppButton';
+
+export default function Iletisim() {
+ return (
+
)
- }
- };
+import Navbar from '../components/Beka/Navbar';
+import Hero from '../components/Beka/Hero';
+import Services from '../components/Beka/Services';
+import About from '../components/Beka/About';
+import Projects from '../components/Beka/Projects';
+import ContactForm from '../components/Beka/ContactForm';
+import Footer from '../components/Beka/Footer';
+import WhatsAppButton from '../components/Beka/WhatsAppButton';
+export default function Home() {
return (
-
);
}
-Starter.getLayout = function getLayout(page: ReactElement) {
+Home.getLayout = function getLayout(page: ReactElement) {
return {page};
-};
-
+};
\ No newline at end of file
diff --git a/frontend/src/pages/projeler.tsx b/frontend/src/pages/projeler.tsx
new file mode 100644
index 0000000..bc8d546
--- /dev/null
+++ b/frontend/src/pages/projeler.tsx
@@ -0,0 +1,39 @@
+import React, { ReactElement } from 'react';
+import Head from 'next/head';
+import LayoutGuest from '../layouts/Guest';
+import { getPageTitle } from '../config';
+import Navbar from '../components/Beka/Navbar';
+import Projects from '../components/Beka/Projects';
+import PageHero from '../components/Beka/PageHero';
+import Footer from '../components/Beka/Footer';
+import WhatsAppButton from '../components/Beka/WhatsAppButton';
+
+export default function Projeler() {
+ return (
+