Title: {info.title || "-"}
diff --git a/frontend/src/pages/home/introduction.css b/frontend/src/pages/home/introduction.css
index f023809..6dfeb84 100644
--- a/frontend/src/pages/home/introduction.css
+++ b/frontend/src/pages/home/introduction.css
@@ -23,7 +23,7 @@
border-radius: 1em;
}
-.introduction article header {}
+/* header rules intentionally left out; keep markup clean */
.introduction article:nth-child(1) {
width: 100%;
@@ -71,7 +71,9 @@
list-style: none;
width: 20px;
height: 20px;
- background: rgba(255, 255, 255, 35%);
+ /* use design palette for animated dots */
+ background: var(--c-boxes);
+ opacity: 0.35;
animation: animate 4s linear infinite;
bottom: -150px;
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index d0d3003..f5faa5f 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -13,6 +13,10 @@ export default {
fontFamily: {
inter: ['Inter', 'ui-sans-serif', 'system-ui'],
},
+ backgroundImage: {
+ brandGradient: 'linear-gradient(135deg, var(--c-boxes), var(--c-other))',
+ brandGlass: 'linear-gradient(180deg, color-mix(in hsl, var(--c-background-light), transparent 30%), color-mix(in hsl, black, transparent 70%))'
+ },
colors: {
brand: {
bg: 'var(--c-background)',
diff --git a/frontend_example/App.tsx b/frontend_example/App.tsx
deleted file mode 100644
index 185b7a7..0000000
--- a/frontend_example/App.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from 'react';
-import '@radix-ui/themes/styles.css';
-import { Theme } from '@radix-ui/themes';
-import { ToastContainer } from 'react-toastify';
-import 'react-toastify/dist/ReactToastify.css';
-import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
-
-import Home from './src/pages/Home';
-import NotFound from './src/pages/NotFound';
-
-const App: React.FC = () => {
- return (
-
-
-
-
- } />
- } />
-
-
-
-
-
- );
-}
-
-export default App;
\ No newline at end of file
diff --git a/frontend_example/eslint.config.js b/frontend_example/eslint.config.js
deleted file mode 100644
index 6c078d7..0000000
--- a/frontend_example/eslint.config.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import js from '@eslint/js'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
-import { defineConfig, globalIgnores } from 'eslint/config'
-import globals from 'globals'
-import tseslint from 'typescript-eslint'
-
-export default defineConfig([
- globalIgnores(['dist']),
- {
- files: ['**/*.{ts,tsx}'],
- extends: [
- js.configs.recommended,
- tseslint.configs.recommended,
- reactHooks.configs['recommended-latest'],
- reactRefresh.configs.vite,
- ],
- rules: {
- '@typescript-eslint/no-explicit-any': 'off',
- },
- languageOptions: {
- ecmaVersion: 2020,
- globals: globals.browser,
- },
- },
-])
\ No newline at end of file
diff --git a/frontend_example/index.html b/frontend_example/index.html
deleted file mode 100644
index c7f481a..0000000
--- a/frontend_example/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
Vontor.cz Creative Portfolio Website
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend_example/index.tsx b/frontend_example/index.tsx
deleted file mode 100644
index 6bf6397..0000000
--- a/frontend_example/index.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import App from './App.tsx';
-import './styles.css';
-
-// Send logs to parent frame (like a preview system)
-function postToParent(level: string, ...args: any[]): void {
- if (window.parent !== window) {
- window.parent.postMessage(
- {
- type: 'iframe-console',
- level,
- args,
- },
- '*'
- );
- }
-}
-
-// Global error handler
-window.onerror = function (message, source, lineno, colno, error) {
- const errPayload = {
- message,
- source,
- lineno,
- colno,
- stack: error?.stack,
- };
- postToParent('error', '[Meku_Error_Caught]', errPayload);
-};
-
-// Unhandled promise rejection
-window.onunhandledrejection = function (event) {
- postToParent('error', '[Meku_Error_Caught]', { reason: event.reason });
-};
-
-// Patch console
-(['log', 'warn', 'info', 'error'] as const).forEach((level) => {
- const original = console[level];
- console[level] = (...args: any[]) => {
- postToParent(level, ...args);
- original(...args);
- };
-});
-
-ReactDOM.createRoot(document.getElementById('root')!).render(
-
-
-
-);
\ No newline at end of file
diff --git a/frontend_example/package.json b/frontend_example/package.json
deleted file mode 100644
index 3054609..0000000
--- a/frontend_example/package.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "vontor.cz-creative-portfolio-website",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "tsc -b && vite build",
- "lint": "eslint .",
- "preview": "vite preview"
- },
- "dependencies": {
- "globals": "^16.4.0",
- "@hookform/resolvers": "^5.2.1",
- "@radix-ui/themes": "^3.2.1",
- "@vitejs/plugin-react": "^5.0.2",
- "autoprefixer": "^10.4.19",
- "date-fns": "^3.6.0",
- "framer-motion": "^12.12.2",
- "lucide-react": "^0.462.0",
- "postcss": "^8.4.38",
- "react": "^19.1.1",
- "react-dom": "^19.1.1",
- "react-hook-form": "^7.53.0",
- "react-resizable-panels": "^2.1.3",
- "react-router-dom": "^6.23.0",
- "react-toastify": "^11.0.5",
- "recharts": "^2.12.7",
- "tailwindcss": "^3.4.1",
- "vite": "^7.1.6",
- "zod": "^3.23.8",
- "@supabase/supabase-js": "^2.57.4"
- },
- "devDependencies": {
- "@eslint/js": "^9.35.0",
- "@types/react": "^19.1.13",
- "@types/react-dom": "^19.1.9",
- "eslint": "^9.35.0",
- "eslint-plugin-react-hooks": "^5.2.0",
- "eslint-plugin-react-refresh": "^0.4.20",
- "typescript": "~5.8.3",
- "typescript-eslint": "^8.43.0"
- }
-}
\ No newline at end of file
diff --git a/frontend_example/postcss.config.mjs b/frontend_example/postcss.config.mjs
deleted file mode 100644
index c4511e5..0000000
--- a/frontend_example/postcss.config.mjs
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
-plugins: {
- tailwindcss: {},
- autoprefixer: {},
-},
-}
\ No newline at end of file
diff --git a/frontend_example/public/robots.txt b/frontend_example/public/robots.txt
deleted file mode 100644
index cee9ff2..0000000
--- a/frontend_example/public/robots.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-User-agent: Googlebot
-Allow: /
-
-User-agent: Bingbot
-Allow: /
-
-User-agent: Twitterbot
-Allow: /
-
-User-agent: facebookexternalhit
-Allow: /
-
-User-agent: *
-Allow: /
\ No newline at end of file
diff --git a/frontend_example/src/components/Contact.tsx b/frontend_example/src/components/Contact.tsx
deleted file mode 100644
index ec23a03..0000000
--- a/frontend_example/src/components/Contact.tsx
+++ /dev/null
@@ -1,244 +0,0 @@
-import React, { useState } from 'react';
-import { Mail, Phone, MapPin, Send, CheckCircle, AlertCircle } from 'lucide-react';
-import { useForm } from 'react-hook-form';
-import { zodResolver } from '@hookform/resolvers/zod';
-import { z } from 'zod';
-import { toast } from 'react-toastify';
-
-const contactSchema = z.object({
- name: z.string().min(2, 'Name must be at least 2 characters'),
- email: z.string().email('Please enter a valid email address'),
- subject: z.string().min(5, 'Subject must be at least 5 characters'),
- message: z.string().min(10, 'Message must be at least 10 characters')
-});
-
-type ContactFormData = z.infer
;
-
-const Contact: React.FC = () => {
- const [isSubmitting, setIsSubmitting] = useState(false);
-
- const {
- register,
- handleSubmit,
- reset,
- formState: { errors }
- } = useForm({
- resolver: zodResolver(contactSchema)
- });
-
- const onSubmit = async (data: ContactFormData) => {
- setIsSubmitting(true);
-
- try {
- // Simulate form submission
- await new Promise(resolve => setTimeout(resolve, 2000));
-
- console.log('Form submitted:', data);
- toast.success('Message sent successfully! I\'ll get back to you soon.');
- reset();
- } catch (error) {
- toast.error('Failed to send message. Please try again.');
- } finally {
- setIsSubmitting(false);
- }
- };
-
- const contactInfo = [
- {
- icon: ,
- title: 'Email',
- value: 'hello@vontor.cz',
- link: 'mailto:hello@vontor.cz'
- },
- {
- icon: ,
- title: 'Phone',
- value: '+420 XXX XXX XXX',
- link: 'tel:+420XXXXXXXXX'
- },
- {
- icon: ,
- title: 'Location',
- value: 'Czech Republic',
- link: null
- }
- ];
-
- return (
-
- );
-};
-
-export default Contact;
\ No newline at end of file
diff --git a/frontend_example/src/components/DonateShop.tsx b/frontend_example/src/components/DonateShop.tsx
deleted file mode 100644
index 3995728..0000000
--- a/frontend_example/src/components/DonateShop.tsx
+++ /dev/null
@@ -1,178 +0,0 @@
-import React from 'react';
-import { Coffee, Zap, Battery, Heart, Gift } from 'lucide-react';
-
-interface DonationTier {
- id: string;
- name: string;
- price: string;
- description: string;
- icon: React.ReactNode;
- features: string[];
- popular?: boolean;
-}
-
-const DonateShop: React.FC = () => {
- const donationTiers: DonationTier[] = [
- {
- id: 'coffee',
- name: 'Buy Me a Coffee',
- price: '$5',
- description: 'Fuel my coding sessions with caffeine',
- icon: ,
- features: [
- 'Support ongoing projects',
- 'Keep me caffeinated',
- 'Thank you message',
- 'Good karma points'
- ]
- },
- {
- id: 'gpu',
- name: 'GPU Upgrade Fund',
- price: '$50',
- description: 'Help upgrade my development setup',
- icon: ,
- features: [
- 'Better performance',
- 'Faster rendering',
- 'Enhanced productivity',
- 'Priority support',
- 'Exclusive updates'
- ],
- popular: true
- },
- {
- id: 'drone',
- name: 'Drone Battery Pack',
- price: '$25',
- description: 'Extended flight time for aerial photography',
- icon: ,
- features: [
- 'Longer flight sessions',
- 'More aerial content',
- 'Better coverage',
- 'Behind-the-scenes access'
- ]
- }
- ];
-
- const handleDonate = (tierId: string) => {
- // Placeholder for donation handling
- console.log(`Donate to tier: ${tierId}`);
- // In a real implementation, this would integrate with a payment processor
- };
-
- return (
-
-
-
-
-
-
-
- Support My Work
-
-
-
-
- Your support helps me create better content, upgrade equipment, and continue
- developing innovative projects. Every contribution makes a difference!
-
-
-
- {/* Donation Tiers */}
-
- {donationTiers.map((tier) => (
-
- {tier.popular && (
-
-
- Most Popular
-
-
- )}
-
-
-
-
{tier.name}
-
-
- {tier.price}
-
-
-
{tier.description}
-
-
-
- {tier.features.map((feature, index) => (
- -
-
- {feature}
-
- ))}
-
-
-
-
- ))}
-
-
- {/* Custom Amount Section */}
-
-
-
-
Custom Amount
-
- Want to contribute a different amount? You can choose any amount that feels right for you.
-
-
-
-
-
-
-
-
- {/* Thank You Message */}
-
-
- Thank you for considering supporting my work! Your contributions help me continue creating
- innovative projects and sharing knowledge with the community. Every donation, no matter the size,
- is deeply appreciated. ❤️
-
-
-
-
- );
-};
-
-export default DonateShop;
\ No newline at end of file
diff --git a/frontend_example/src/components/Footer.tsx b/frontend_example/src/components/Footer.tsx
deleted file mode 100644
index 25dcfc7..0000000
--- a/frontend_example/src/components/Footer.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import React from 'react';
-import { Instagram, Twitter, Youtube, Github, Linkedin, Gamepad2, Mail, MapPin, Phone } from 'lucide-react';
-
-const Footer: React.FC = () => {
- const socialLinks = [
- { name: 'Instagram', icon: , url: 'https://instagram.com', color: 'hover:text-pink-500' },
- { name: 'Twitter/X', icon: , url: 'https://twitter.com', color: 'hover:text-blue-400' },
- { name: 'YouTube', icon: , url: 'https://youtube.com', color: 'hover:text-red-500' },
- { name: 'GitHub', icon: , url: 'https://github.com', color: 'hover:text-gray-300' },
- { name: 'LinkedIn', icon: , url: 'https://linkedin.com', color: 'hover:text-blue-600' },
- { name: 'Steam', icon: , url: 'https://steamcommunity.com', color: 'hover:text-blue-500' }
- ];
-
- const quickLinks = [
- { name: 'Home', href: '#home' },
- { name: 'Portfolio', href: '#portfolio' },
- { name: 'Skills', href: '#skills' },
- { name: 'Donate', href: '#donate' },
- { name: 'Contact', href: '#contact' }
- ];
-
- const legalLinks = [
- { name: 'Privacy Policy', href: '#' },
- { name: 'Terms of Service', href: '#' },
- { name: 'Cookie Policy', href: '#' }
- ];
-
- const scrollToSection = (href: string) => {
- const element = document.querySelector(href);
- if (element) {
- element.scrollIntoView({ behavior: 'smooth' });
- }
- };
-
- return (
-
- );
-};
-
-export default Footer;
\ No newline at end of file
diff --git a/frontend_example/src/components/Header.tsx b/frontend_example/src/components/Header.tsx
deleted file mode 100644
index da47fc6..0000000
--- a/frontend_example/src/components/Header.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { Menu, X } from 'lucide-react';
-
-const Header: React.FC = () => {
- const [isMenuOpen, setIsMenuOpen] = useState(false);
- const [isScrolled, setIsScrolled] = useState(false);
-
- useEffect(() => {
- const handleScroll = () => {
- setIsScrolled(window.scrollY > 50);
- };
- window.addEventListener('scroll', handleScroll);
- return () => window.removeEventListener('scroll', handleScroll);
- }, []);
-
- const navItems = [
- { name: 'Home', href: '#home' },
- { name: 'Portfolio', href: '#portfolio' },
- { name: 'Skills', href: '#skills' },
- { name: 'Donate/Shop', href: '#donate' },
- { name: 'Contact', href: '#contact' }
- ];
-
- const scrollToSection = (href: string) => {
- const element = document.querySelector(href);
- if (element) {
- element.scrollIntoView({ behavior: 'smooth' });
- }
- setIsMenuOpen(false);
- };
-
- return (
-
- );
-};
-
-export default Header;
\ No newline at end of file
diff --git a/frontend_example/src/components/Hero.tsx b/frontend_example/src/components/Hero.tsx
deleted file mode 100644
index 394af38..0000000
--- a/frontend_example/src/components/Hero.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { ChevronLeft, ChevronRight, Play } from 'lucide-react';
-
-const Hero: React.FC = () => {
- const [currentSlide, setCurrentSlide] = useState(0);
-
- const slides = [
- {
- id: 1,
- title: "Creative Tech Solutions",
- subtitle: "Innovative development meets stunning design",
- videoId: "dQw4w9WgXcQ" // Placeholder YouTube ID
- },
- {
- id: 2,
- title: "Drone Photography",
- subtitle: "Capturing perspectives from above",
- videoId: "dQw4w9WgXcQ" // Placeholder YouTube ID
- },
- {
- id: 3,
- title: "Full-Stack Development",
- subtitle: "Building the future, one line at a time",
- videoId: "dQw4w9WgXcQ" // Placeholder YouTube ID
- }
- ];
-
- useEffect(() => {
- const timer = setInterval(() => {
- setCurrentSlide((prev) => (prev + 1) % slides.length);
- }, 8000);
- return () => clearInterval(timer);
- }, [slides.length]);
-
- const nextSlide = () => {
- setCurrentSlide((prev) => (prev + 1) % slides.length);
- };
-
- const prevSlide = () => {
- setCurrentSlide((prev) => (prev - 1 + slides.length) % slides.length);
- };
-
- return (
-
- {/* Background Gradient */}
-
-
- {/* Animated Background Elements */}
-
-
- {/* Content Container */}
-
-
-
- {/* Text Content */}
-
-
-
- Welcome to
-
-
- Vontor.cz
-
-
- Creative Tech & Design by Bruno Vontor
-
-
-
-
-
-
-
- {/* Video Carousel */}
-
-
-
-
- {/* Overlay */}
-
-
- {/* Slide Info */}
-
-
{slides[currentSlide].title}
-
{slides[currentSlide].subtitle}
-
-
-
- {/* Navigation Buttons */}
-
-
-
- {/* Slide Indicators */}
-
- {slides.map((_, index) => (
-
-
-
-
-
- );
-};
-
-export default Hero;
\ No newline at end of file
diff --git a/frontend_example/src/components/HostingSecurity.tsx b/frontend_example/src/components/HostingSecurity.tsx
deleted file mode 100644
index 1b2d505..0000000
--- a/frontend_example/src/components/HostingSecurity.tsx
+++ /dev/null
@@ -1,171 +0,0 @@
-import React from 'react';
-import { Shield, Server, Lock, Zap, CheckCircle, Globe } from 'lucide-react';
-
-const HostingSecurity: React.FC = () => {
- const benefits = [
- {
- icon: ,
- title: 'Enhanced Security',
- description: 'Full control over security configurations, custom firewalls, and regular security updates'
- },
- {
- icon: ,
- title: 'Better Performance',
- description: 'Optimized server configurations, custom caching, and dedicated resources for faster loading'
- },
- {
- icon: ,
- title: 'Data Privacy',
- description: 'Complete ownership of your data with no third-party access or data mining concerns'
- },
- {
- icon: ,
- title: 'Cost Effective',
- description: 'Lower long-term costs compared to managed hosting services with better resource allocation'
- },
- {
- icon: ,
- title: 'Custom Domains',
- description: 'Easy setup of custom domains, subdomains, and SSL certificates for professional presence'
- },
- {
- icon: ,
- title: 'Full Control',
- description: 'Complete administrative access to configure, customize, and scale your hosting environment'
- }
- ];
-
- const techStack = [
- 'Ubuntu Server 22.04 LTS',
- 'Nginx Web Server',
- 'Docker Containerization',
- 'SSL/TLS Encryption',
- 'Automated Backups',
- 'Monitoring & Alerts',
- 'Fail2ban Security',
- 'UFW Firewall'
- ];
-
- return (
-
-
-
-
-
- Self-Hosting & Security
-
-
-
- Why I choose self-hosting for better control, security, and performance
-
-
-
-
- {/* Main Info Panel */}
-
-
-
-
- Why Self-Hosting Matters
-
-
- Self-hosting provides unparalleled control over your digital infrastructure.
- By managing my own servers, I ensure optimal performance, enhanced security,
- and complete data ownership while reducing long-term costs.
-
-
- This approach allows for custom configurations, better resource allocation,
- and the flexibility to scale applications according to specific needs without
- vendor lock-in or arbitrary limitations.
-
-
-
-
-
-
-
-
Server Status
-
-
-
-
- Uptime
- 99.9%
-
-
- Response Time
- < 200ms
-
-
- SSL Grade
- A+
-
-
- Security Score
- 95/100
-
-
-
-
-
-
-
All Systems Operational
-
-
-
-
-
-
-
- {/* Benefits Grid */}
-
- {benefits.map((benefit, index) => (
-
-
-
- {benefit.description}
-
-
- ))}
-
-
- {/* Tech Stack */}
-
-
- Technology Stack
-
-
- {techStack.map((tech, index) => (
-
- {tech}
-
- ))}
-
-
-
-
- This robust technology stack ensures reliable, secure, and high-performance hosting
- for all projects while maintaining full control over the infrastructure.
-
-
-
-
-
-
- );
-};
-
-export default HostingSecurity;
\ No newline at end of file
diff --git a/frontend_example/src/components/Portfolio.tsx b/frontend_example/src/components/Portfolio.tsx
deleted file mode 100644
index 9120a15..0000000
--- a/frontend_example/src/components/Portfolio.tsx
+++ /dev/null
@@ -1,242 +0,0 @@
-import React, { useState } from 'react';
-import { ExternalLink, Github, X } from 'lucide-react';
-
-interface Project {
- id: number;
- title: string;
- description: string;
- image: string;
- technologies: string[];
- liveUrl?: string;
- githubUrl?: string;
- category: string;
-}
-
-const Portfolio: React.FC = () => {
- const [selectedProject, setSelectedProject] = useState(null);
- const [filter, setFilter] = useState('all');
-
- const projects: Project[] = [
- {
- id: 1,
- title: "E-Commerce Platform",
- description: "Full-stack e-commerce solution with React, Node.js, and PostgreSQL. Features include user authentication, payment processing, inventory management, and admin dashboard.",
- image: "https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?w=800&h=600&fit=crop",
- technologies: ["React", "Node.js", "PostgreSQL", "Stripe"],
- liveUrl: "https://example.com",
- githubUrl: "https://github.com",
- category: "web"
- },
- {
- id: 2,
- title: "Drone Photography Portfolio",
- description: "Stunning aerial photography showcase with interactive gallery, location mapping, and client booking system. Built with modern web technologies.",
- image: "https://images.unsplash.com/photo-1473968512647-3e447244af8f?w=800&h=600&fit=crop",
- technologies: ["React", "TypeScript", "Mapbox", "Framer Motion"],
- liveUrl: "https://example.com",
- githubUrl: "https://github.com",
- category: "photography"
- },
- {
- id: 3,
- title: "Trading Dashboard",
- description: "Real-time trading analytics dashboard with live data visualization, portfolio tracking, and automated trading signals integration.",
- image: "https://images.unsplash.com/photo-1611974789855-9c2a0a7236a3?w=800&h=600&fit=crop",
- technologies: ["React", "D3.js", "WebSocket", "Trading212 API"],
- liveUrl: "https://example.com",
- githubUrl: "https://github.com",
- category: "web"
- },
- {
- id: 4,
- title: "Mobile App Design",
- description: "Modern mobile application UI/UX design with focus on user experience, accessibility, and brand consistency across iOS and Android platforms.",
- image: "https://images.unsplash.com/photo-1512941937669-90a1b58e7e9c?w=800&h=600&fit=crop",
- technologies: ["Figma", "React Native", "TypeScript", "Expo"],
- liveUrl: "https://example.com",
- category: "design"
- },
- {
- id: 5,
- title: "DevOps Infrastructure",
- description: "Scalable cloud infrastructure setup with Docker containers, CI/CD pipelines, monitoring, and automated deployment processes.",
- image: "https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=800&h=600&fit=crop",
- technologies: ["Docker", "Kubernetes", "AWS", "GitHub Actions"],
- githubUrl: "https://github.com",
- category: "devops"
- },
- {
- id: 6,
- title: "AI-Powered Analytics",
- description: "Machine learning application for data analysis and prediction with interactive visualizations and real-time processing capabilities.",
- image: "https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&h=600&fit=crop",
- technologies: ["Python", "TensorFlow", "React", "FastAPI"],
- liveUrl: "https://example.com",
- githubUrl: "https://github.com",
- category: "web"
- }
- ];
-
- const categories = [
- { id: 'all', name: 'All Projects' },
- { id: 'web', name: 'Web Development' },
- { id: 'photography', name: 'Photography' },
- { id: 'design', name: 'Design' },
- { id: 'devops', name: 'DevOps' }
- ];
-
- const filteredProjects = filter === 'all'
- ? projects
- : projects.filter(project => project.category === filter);
-
- return (
-
-
-
-
-
- Portfolio
-
-
-
- Explore my latest projects showcasing creative solutions in web development,
- design, and technology innovation.
-
-
-
- {/* Filter Buttons */}
-
- {categories.map((category) => (
-
- ))}
-
-
- {/* Projects Grid */}
-
- {filteredProjects.map((project) => (
-
setSelectedProject(project)}
- >
-
-

-
-
-
-
-
- {project.title}
-
-
- {project.description}
-
-
-
- {project.technologies.slice(0, 3).map((tech) => (
-
- {tech}
-
- ))}
- {project.technologies.length > 3 && (
-
- +{project.technologies.length - 3} more
-
- )}
-
-
-
- ))}
-
-
- {/* Project Modal */}
- {selectedProject && (
-
-
-
-

-
-
-
-
-
{selectedProject.title}
-
- {selectedProject.description}
-
-
-
-
Technologies Used:
-
- {selectedProject.technologies.map((tech) => (
-
- {tech}
-
- ))}
-
-
-
-
-
-
-
- )}
-
-
- );
-};
-
-export default Portfolio;
\ No newline at end of file
diff --git a/frontend_example/src/components/Skills.tsx b/frontend_example/src/components/Skills.tsx
deleted file mode 100644
index 25052c0..0000000
--- a/frontend_example/src/components/Skills.tsx
+++ /dev/null
@@ -1,191 +0,0 @@
-import React from 'react';
-import { Code, Database, Globe, Server, Wrench, Award } from 'lucide-react';
-
-interface Skill {
- name: string;
- level: number;
- icon?: string;
-}
-
-interface SkillCategory {
- title: string;
- icon: React.ReactNode;
- skills: Skill[];
- color: string;
-}
-
-const Skills: React.FC = () => {
- const skillCategories: SkillCategory[] = [
- {
- title: 'Frontend Development',
- icon: ,
- color: 'from-fuchsia-600 to-pink-600',
- skills: [
- { name: 'React/Next.js', level: 95 },
- { name: 'TypeScript', level: 90 },
- { name: 'Tailwind CSS', level: 95 },
- { name: 'Vue.js', level: 80 },
- { name: 'JavaScript ES6+', level: 95 },
- { name: 'HTML5/CSS3', level: 98 }
- ]
- },
- {
- title: 'Backend Development',
- icon: ,
- color: 'from-orange-500 to-red-500',
- skills: [
- { name: 'Node.js', level: 90 },
- { name: 'Python', level: 85 },
- { name: 'PostgreSQL', level: 88 },
- { name: 'MongoDB', level: 82 },
- { name: 'REST APIs', level: 92 },
- { name: 'GraphQL', level: 78 }
- ]
- },
- {
- title: 'DevOps & Hosting',
- icon: ,
- color: 'from-violet-400 to-purple-600',
- skills: [
- { name: 'Docker', level: 85 },
- { name: 'AWS/Cloud', level: 80 },
- { name: 'Linux/Ubuntu', level: 88 },
- { name: 'Nginx', level: 82 },
- { name: 'CI/CD', level: 78 },
- { name: 'Self-Hosting', level: 90 }
- ]
- },
- {
- title: 'Other Tools',
- icon: ,
- color: 'from-green-500 to-teal-500',
- skills: [
- { name: 'Git/GitHub', level: 95 },
- { name: 'Figma/Design', level: 85 },
- { name: 'Photoshop', level: 80 },
- { name: 'Drone Photography', level: 88 },
- { name: 'Video Editing', level: 75 },
- { name: 'Trading Analysis', level: 70 }
- ]
- }
- ];
-
- const experience = [
- {
- title: 'Full-Stack Developer',
- company: 'Freelance',
- period: '2020 - Present',
- description: 'Developing custom web applications and providing technical consulting'
- },
- {
- title: 'Frontend Developer',
- company: 'Tech Startup',
- period: '2019 - 2020',
- description: 'Built responsive web applications using React and modern JavaScript'
- },
- {
- title: 'Web Developer',
- company: 'Digital Agency',
- period: '2018 - 2019',
- description: 'Created websites and web applications for various clients'
- }
- ];
-
- return (
-
-
-
-
-
- Skills & Experience
-
-
-
- A comprehensive overview of my technical expertise and professional journey
-
-
-
- {/* Experience Section */}
-
-
-
-
- {experience.map((exp, index) => (
-
-
{exp.title}
-
{exp.company}
-
{exp.period}
-
{exp.description}
-
- ))}
-
-
-
- {/* Skills Grid */}
-
- {skillCategories.map((category, categoryIndex) => (
-
-
-
-
- {category.skills.map((skill, skillIndex) => (
-
-
- {skill.name}
- {skill.level}%
-
-
-
- ))}
-
-
- ))}
-
-
- {/* Certifications/Achievements */}
-
-
-
Achievements & Certifications
-
-
-
50+
-
Projects Completed
-
-
-
5+
-
Years Experience
-
-
-
100%
-
Client Satisfaction
-
-
-
-
-
-
- );
-};
-
-export default Skills;
\ No newline at end of file
diff --git a/frontend_example/src/components/TradingGraph.tsx b/frontend_example/src/components/TradingGraph.tsx
deleted file mode 100644
index 5f62eb6..0000000
--- a/frontend_example/src/components/TradingGraph.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import React from 'react';
-import { TrendingUp, DollarSign, BarChart3, Activity } from 'lucide-react';
-
-const TradingGraph: React.FC = () => {
- return (
-
-
-
-
-
- Trading Dashboard
-
-
-
- Real-time market analysis and portfolio tracking with advanced analytics
-
-
-
-
- {/* Main Trading Window */}
-
-
-
-
-
-
-
-
Trading212 Portfolio
-
Live market data and analytics
-
-
-
-
-
- {/* Trading Graph Placeholder */}
-
-
-
-
-
Trading212 Graph Integration
-
Real-time market data will be displayed here
-
-
-
- {/* Simulated Graph Elements */}
-
-
- {Array.from({ length: 12 }).map((_, i) => (
-
- ))}
-
-
-
-
- {/* Stats Grid */}
-
-
-
-
-
Portfolio Value
-
-
$12,847.32
-
+2.34% today
-
-
-
-
-
8
-
Across 5 markets
-
-
-
-
-
-
Monthly Return
-
-
+8.7%
-
Above average
-
-
-
- {/* Integration Note */}
-
-
- Note: This dashboard integrates with Trading212 API
- for real-time portfolio tracking and market analysis. Data updates every 30 seconds during market hours.
-
-
-
-
-
-
- );
-};
-
-export default TradingGraph;
\ No newline at end of file
diff --git a/frontend_example/src/pages/Home.tsx b/frontend_example/src/pages/Home.tsx
deleted file mode 100644
index e0e4a8e..0000000
--- a/frontend_example/src/pages/Home.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import Header from '../components/Header';
-import Hero from '../components/Hero';
-import Portfolio from '../components/Portfolio';
-import TradingGraph from '../components/TradingGraph';
-import DonateShop from '../components/DonateShop';
-import Skills from '../components/Skills';
-import HostingSecurity from '../components/HostingSecurity';
-import Contact from '../components/Contact';
-import Footer from '../components/Footer';
-
-const Home: React.FC = () => {
- return (
-
- );
-};
-
-export default Home;
\ No newline at end of file
diff --git a/frontend_example/src/pages/NotFound.tsx b/frontend_example/src/pages/NotFound.tsx
deleted file mode 100644
index 52d162b..0000000
--- a/frontend_example/src/pages/NotFound.tsx
+++ /dev/null
@@ -1,179 +0,0 @@
-import React from 'react';
-
-const NotFound: React.FC = () => {
- return (
-
-
- {/* Large 404 Text */}
-
-
-
-
-
- OPPS! Page Not Found
-
-
- We can't seem to find the page you are looking for!
-
-
- Back to homepage
-
-
- {/* Footer */}
-
-
- © {new Date().getFullYear()} - Meku.dev
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default NotFound;
\ No newline at end of file
diff --git a/frontend_example/styles.css b/frontend_example/styles.css
deleted file mode 100644
index 2d60e66..0000000
--- a/frontend_example/styles.css
+++ /dev/null
@@ -1,5 +0,0 @@
-@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap');
-
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
\ No newline at end of file
diff --git a/frontend_example/tailwind.config.js b/frontend_example/tailwind.config.js
deleted file mode 100644
index f0e5f19..0000000
--- a/frontend_example/tailwind.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/** @type {import('tailwindcss').Config} */
-export default {
- content: [
- "./index.html",
- "./src/**/*.{js,ts,jsx,tsx}",
- "./App.tsx",
- ],
- theme: {
- extend: {
- fontFamily: {
- inter: ['Inter', 'sans-serif'],
- },
- },
- },
- plugins: [],
-}
\ No newline at end of file
diff --git a/frontend_example/tsconfig.app.json b/frontend_example/tsconfig.app.json
deleted file mode 100644
index 216a240..0000000
--- a/frontend_example/tsconfig.app.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "compilerOptions": {
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
- "target": "ES2022",
- "useDefineForClassFields": true,
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "verbatimModuleSyntax": true,
- "moduleDetection": "force",
- "noEmit": true,
- "jsx": "react-jsx",
-
- /* Linting */
- "strict": true,
- "noImplicitAny": false,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "erasableSyntaxOnly": true,
- "noFallthroughCasesInSwitch": true,
- "noUncheckedSideEffectImports": true
- },
- "include": ["src"]
-}
\ No newline at end of file
diff --git a/frontend_example/tsconfig.json b/frontend_example/tsconfig.json
deleted file mode 100644
index c452f43..0000000
--- a/frontend_example/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "files": [],
- "references": [
- { "path": "./tsconfig.app.json" },
- { "path": "./tsconfig.node.json" }
- ]
-}
\ No newline at end of file
diff --git a/frontend_example/tsconfig.node.json b/frontend_example/tsconfig.node.json
deleted file mode 100644
index ae49a26..0000000
--- a/frontend_example/tsconfig.node.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "compilerOptions": {
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
- "target": "ES2023",
- "lib": ["ES2023"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "verbatimModuleSyntax": true,
- "moduleDetection": "force",
- "noEmit": true,
-
- /* Linting */
- "strict": true,
- "noImplicitAny": false,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "erasableSyntaxOnly": true,
- "noFallthroughCasesInSwitch": true,
- "noUncheckedSideEffectImports": true
- },
- "include": ["vite.config.ts"]
-}
\ No newline at end of file
diff --git a/frontend_example/vite-env.d.ts b/frontend_example/vite-env.d.ts
deleted file mode 100644
index 151aa68..0000000
--- a/frontend_example/vite-env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
\ No newline at end of file
diff --git a/frontend_example/vite.config.ts b/frontend_example/vite.config.ts
deleted file mode 100644
index 4ad7aba..0000000
--- a/frontend_example/vite.config.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import react from "@vitejs/plugin-react";
-import { defineConfig } from "vite";
-
-export default defineConfig({
- plugins: [react()],
- server: {
- allowedHosts: true,
- },
- esbuild: {
- logOverride: {
- 'ignored-directive': 'silent',
- },
- },
- logLevel: 'info',
- build: {
- rollupOptions: {
- onwarn(warning, warn) {
- // ignore certain harmless warnings
- if (
- warning.message.includes('Module level directives') ||
- warning.message.includes('"use client"') ||
- warning.message.includes('"was ignored"')
- ) {
- return;
- }
-
- // FAIL build on unresolved imports
- if (warning.code === 'UNRESOLVED_IMPORT') {
- throw new Error(`Build failed due to unresolved import:\n${warning.message}`);
- }
-
- // FAIL build on missing exports (like your Input error)
- if (warning.code === 'PLUGIN_WARNING' && /is not exported/.test(warning.message)) {
- throw new Error(`Build failed due to missing export:\n${warning.message}`);
- }
-
- // other warnings: log normally
- warn(warning);
- },
- },
- },
-});
\ No newline at end of file