diff --git a/backend/thirdparty/gopay/apps.py b/backend/thirdparty/gopay/apps.py index 9121ef8..0b264f5 100644 --- a/backend/thirdparty/gopay/apps.py +++ b/backend/thirdparty/gopay/apps.py @@ -3,4 +3,7 @@ from django.apps import AppConfig class GopayConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'gopay' + # Must be the full dotted path to this app package + name = 'thirdparty.gopay' + # Optional short label used in DB table names and admin + label = 'gopay' diff --git a/backend/thirdparty/trading212/serializers.py b/backend/thirdparty/trading212/serializers.py index 85fdf39..742eef9 100644 --- a/backend/thirdparty/trading212/serializers.py +++ b/backend/thirdparty/trading212/serializers.py @@ -1,11 +1,2 @@ # thirdparty/trading212/serializers.py from rest_framework import serializers - -class Trading212AccountCashSerializer(serializers.Serializer): - blocked = serializers.FloatField() - free = serializers.FloatField() - invested = serializers.FloatField() - pieCash = serializers.FloatField() - ppl = serializers.FloatField() - result = serializers.FloatField() - total = serializers.FloatField() diff --git a/backend/thirdparty/trading212/tests.py b/backend/thirdparty/trading212/tests.py index 7ce503c..e69de29 100644 --- a/backend/thirdparty/trading212/tests.py +++ b/backend/thirdparty/trading212/tests.py @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/backend/thirdparty/trading212/urls.py b/backend/thirdparty/trading212/urls.py index 07a8468..52ea212 100644 --- a/backend/thirdparty/trading212/urls.py +++ b/backend/thirdparty/trading212/urls.py @@ -1,6 +1,7 @@ from django.urls import path -from .views import Trading212AccountCashView # Replace with actual view class +from .views import Trading212AccountCashView, Trading212SummaryView urlpatterns = [ - path('your-endpoint/', Trading212AccountCashView.as_view(), name='trading212-endpoint'), + path('equity/cash/', Trading212AccountCashView.as_view(), name='trading212-cash'), + path('equity/summary/', Trading212SummaryView.as_view(), name='trading212-summary'), ] \ No newline at end of file diff --git a/backend/thirdparty/trading212/views.py b/backend/thirdparty/trading212/views.py index b5c96d1..0861374 100644 --- a/backend/thirdparty/trading212/views.py +++ b/backend/thirdparty/trading212/views.py @@ -1,38 +1,58 @@ # thirdparty/trading212/views.py import os +import base64 +import logging import requests from rest_framework.views import APIView from rest_framework.response import Response -from rest_framework.permissions import IsAuthenticated -from .serializers import Trading212AccountCashSerializer +from rest_framework.permissions import IsAuthenticated, AllowAny +from django.conf import settings +from django.core.cache import cache from drf_spectacular.utils import extend_schema +logger = logging.getLogger(__name__) + +api_key = os.getenv("ID_API_KEY_TRADING212") +api_secret = os.getenv("API_KEY_TRADING212") + +base_url = "https://live.trading212.com" + class Trading212AccountCashView(APIView): - permission_classes = [IsAuthenticated] + permission_classes = [AllowAny] + authentication_classes = [] @extend_schema( tags=["trading212"], - summary="Get Trading212 account cash", - responses=Trading212AccountCashSerializer + summary="Get Trading212 account cash" ) def get(self, request): - api_key = os.getenv("API_KEY_TRADING212") - - headers = { - "Authorization": f"Bearer {api_key}", - "Accept": "application/json", - } + url = f"{base_url}/api/v0/equity/account/cash" - url = "https://api.trading212.com/api/v0/equity/account/cash" + response = requests.get(url, auth=(api_key, api_secret)) - try: - resp = requests.get(url, headers=headers, timeout=10) - resp.raise_for_status() - except requests.RequestException as exc: - return Response({"error": str(exc)}, status=400) + logger.info("Trading212 Account Cash Response:") + logger.info(response) - data = resp.json() - serializer = Trading212AccountCashSerializer(data=data) - serializer.is_valid(raise_exception=True) - return Response(serializer.data) + data = response.json() + + return Response(data) + +class Trading212SummaryView(APIView): + permission_classes = [AllowAny] + authentication_classes = [] + + @extend_schema( + tags=["trading212"], + summary="Get Trading212 account summary" + ) + def get(self, request): + url = f"{base_url}/api/v0/equity/portfolio" + response = requests.get(url, auth=(api_key, api_secret)) + + logger.info("Trading212 Account Summary Response:") + logger.info(response) + + data = response.json() + + return Response(data) \ No newline at end of file diff --git a/frontend/src/components/Footer/footer.tsx b/frontend/src/components/Footer/footer.tsx index 61f73e9..2608d40 100644 --- a/frontend/src/components/Footer/footer.tsx +++ b/frontend/src/components/Footer/footer.tsx @@ -31,9 +31,14 @@ export default function Footer() { function Social({ href, label, children }: { href: string; label: string; children: React.ReactNode }) { return ( - - {children} + + {children} ); } diff --git a/frontend/src/components/Forms/ContactMe/ContactMeForm.tsx b/frontend/src/components/Forms/ContactMe/ContactMeForm.tsx index 169a5e3..b4f1b1c 100644 --- a/frontend/src/components/Forms/ContactMe/ContactMeForm.tsx +++ b/frontend/src/components/Forms/ContactMe/ContactMeForm.tsx @@ -17,20 +17,19 @@ export default function ContactMeForm() { if (!opened) { setOpened(true) setOpeningBehind(false) - setContentMoveUp(false) + setContentMoveUp(false) // Wait for the rotate-opening animation to finish before moving content up // The actual moveUp will be handled in onTransitionEnd } else { setContentMoveUp(false) setOpeningBehind(false) - setTimeout(() => setOpened(false), 1000) // match transition duration + setTimeout(() => setOpened(false), 1000) // match transition duration } } const handleTransitionEnd = (e: React.TransitionEvent) => { if (opened && e.propertyName === "transform") { - setContentMoveUp(true) - // Move the opening behind after the animation + setContentMoveUp(true) setTimeout(() => setOpeningBehind(true), 10) } if (!opened && e.propertyName === "transform") { @@ -39,6 +38,7 @@ export default function ContactMeForm() { } return ( +
}, - { id: 'battery', title: 'Drone Battery', price: 30, desc: 'Extend aerial filming time.', color: '#16a34a', icon: }, - { id: 'gpu', title: 'GPU Upgrade', price: 200, desc: 'Speed up rendering and ML tasks.', color: '#6366f1', icon: }, + { id: 'coffee', title: 'Coffee', price: 3, desc: 'Fuel late-night coding sessions.', color: 'var(--c-other)', icon: }, + { id: 'battery', title: 'Drone Battery', price: 30, desc: 'Extend aerial filming time.', color: 'var(--c-other)', icon: }, + { id: 'gpu', title: 'GPU Upgrade', price: 200, desc: 'Speed up rendering and ML tasks.', color: 'var(--c-other)', icon: }, ]; export default function DonationShop() { return (
-

Support My Creative Journey

-

Instead of buying products, consider donating to support my creative journey.

+

Support My Creative Journey

+

Instead of buying products, consider donating to support my creative journey.

{tiers.map(t => (
-
{t.icon}
+
+ {t.icon} +

{t.title}

{t.desc}

${t.price} - +
))} diff --git a/frontend/src/components/hero/HeroCarousel.tsx b/frontend/src/components/hero/HeroCarousel.tsx index dfe7190..ea8a687 100644 --- a/frontend/src/components/hero/HeroCarousel.tsx +++ b/frontend/src/components/hero/HeroCarousel.tsx @@ -13,11 +13,11 @@ export default function HeroCarousel() { return (
{/* Background Gradient and animated glows */} -
+
-
-
-
+
+
+
@@ -25,18 +25,18 @@ export default function HeroCarousel() {

Welcome to
- Vontor.cz + Vontor.cz

-

Creative Tech & Design by Bruno Vontor

+

Creative Tech & Design by Bruno Vontor

{/* Video carousel */}
-
+
{videos.map((v,i) => ( - - {/* 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.icon} -
-
-

{benefit.title}

-
-

- {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.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.title}

-

- {selectedProject.description} -

- -
-

Technologies Used:

-
- {selectedProject.technologies.map((tech) => ( - - {tech} - - ))} -
-
- -
- {selectedProject.liveUrl && ( - - - Live Demo - - )} - {selectedProject.githubUrl && ( - - - View Code - - )} -
-
-
-
- )} -
-
- ); -}; - -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

-
- -
- {experience.map((exp, index) => ( -
-

{exp.title}

-

{exp.company}

-

{exp.period}

-

{exp.description}

-
- ))} -
-
- - {/* Skills Grid */} -
- {skillCategories.map((category, categoryIndex) => ( -
-
-
-
- {category.icon} -
-
-

{category.title}

-
- -
- {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

-
-
-
-
- Live -
-
- - {/* 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

-
- -
-
- -

Active Positions

-
-

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