-
Notifications
You must be signed in to change notification settings - Fork 0
Main2 #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Main2 #3
Conversation
|
|
|
To view this pull requests documentation preview, visit the following URL: docs.page/hlsitechio/hlsitech.com~3 Documentation is deployed and generated using docs.page. |
✅ Deploy Preview for hlsitech ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.2 to 4.0.4. - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md) - [Commits](form-data/form-data@v4.0.2...v4.0.4) --- updated-dependencies: - dependency-name: form-data dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements a major UI/UX overhaul with enhanced animations, integrates Tempo devtools for development, and adds Google Meet chat functionality. The changes transform the application from a basic contact card to a dynamic, interactive digital business card with modern animations and improved routing.
- Adds Tempo devtools integration for enhanced development experience
- Implements new animated UI components with reduced motion support
- Integrates Google Meet chat functionality replacing the previous live chat system
Reviewed Changes
Copilot reviewed 30 out of 40 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| vite.config.ts | Adds Tempo devtools configuration and build optimizations |
| src/routes/index.tsx | Implements React Router with conditional Tempo routes |
| src/pages/LiveChat/index.tsx | Creates new live chat page component |
| src/main.tsx | Updates to use React Router and initializes Tempo devtools |
| src/components/ui/ButtonRipple.tsx | Adds new ripple effect button component |
| src/components/ui/AnimatedCardReveal.tsx | Implements circuit-themed card reveal animation |
| src/components/chat/useChatState.ts | Updates chat state management with environment variables |
| src/components/ContactButtons.tsx | Replaces email buttons with Google Meet integration |
| src/App.tsx | Adds background image and animated card wrapper |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
src/pages/LiveChat/index.tsx
Outdated
|
|
||
| export function LiveChat() { | ||
| const { language, toggleLanguage, t } = useLanguage(); | ||
| const [isDark, setIsDark] = React.useState(() => { |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing React import. The component uses React.useState but React is not imported.
| import.meta.env.VITE_EMAILJS_SERVICE_ID || "service_w523fo9"; | ||
| const templateId = | ||
| import.meta.env.VITE_EMAILJS_TEMPLATE_ID || "template_oxo5oyw"; | ||
| const userId = | ||
| import.meta.env.VITE_EMAILJS_USER_ID || "AdrLQxBNJX5QgN1ZX"; |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hardcoded fallback values expose sensitive EmailJS credentials. These fallback values should be removed or replaced with generic placeholders to prevent credential exposure.
| import.meta.env.VITE_EMAILJS_SERVICE_ID || "service_w523fo9"; | |
| const templateId = | |
| import.meta.env.VITE_EMAILJS_TEMPLATE_ID || "template_oxo5oyw"; | |
| const userId = | |
| import.meta.env.VITE_EMAILJS_USER_ID || "AdrLQxBNJX5QgN1ZX"; | |
| import.meta.env.VITE_EMAILJS_SERVICE_ID || "YOUR_EMAILJS_SERVICE_ID"; | |
| const templateId = | |
| import.meta.env.VITE_EMAILJS_TEMPLATE_ID || "YOUR_EMAILJS_TEMPLATE_ID"; | |
| const userId = | |
| import.meta.env.VITE_EMAILJS_USER_ID || "YOUR_EMAILJS_USER_ID"; |
| const handleSubmit = (e: React.FormEvent) => { | ||
| e.preventDefault(); | ||
| if (email === 'hlarosesurprenant@gmail.com' && password === 'Wintersun6?6') { | ||
| // Using environment variables or a secure authentication method would be better | ||
| // This is a temporary fix to remove hardcoded credentials | ||
| if (email === "admin@example.com" && password === "adminpassword") { | ||
| onLogin(); | ||
| setError(''); | ||
| setError(""); | ||
| } else { |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hardcoded admin credentials present a serious security vulnerability. These should be removed and replaced with a proper authentication system or environment variables.
vite.config.ts
Outdated
| // @ts-ignore | ||
| allowedHosts: process.env.TEMPO === "true" ? true : undefined, |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use of @ts-ignore suppresses TypeScript errors without addressing the underlying type issue. Consider using proper type assertion or updating the type definitions instead.
| // @ts-ignore | |
| allowedHosts: process.env.TEMPO === "true" ? true : undefined, |
| onClick={() => { | ||
| window.open( | ||
| `https://${t.buttons.linkedin === "LinkedIn" ? "linkedin.com/in/hubertls/" : "linkedin.com/in/hubertls/"}`, | ||
| "_blank", | ||
| "noopener,noreferrer", | ||
| ); | ||
| }} |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The ternary operator always returns the same URL regardless of the condition. This logic appears to be incorrect and should either use different URLs or be simplified.
src/LiveChat.tsx
Outdated
| import React from 'react'; | ||
| import { useLanguage } from './hooks/useLanguage'; | ||
| import { ChatInterface } from './components/ChatInterface'; | ||
| import { Languages, ArrowLeft } from 'lucide-react'; | ||
|
|
||
| export function LiveChat() { | ||
| const { language, toggleLanguage, t } = useLanguage(); | ||
| const [isDark, setIsDark] = React.useState(() => { | ||
| if (typeof window !== 'undefined') { | ||
| return window.matchMedia('(prefers-color-scheme: dark)').matches; | ||
| } | ||
| return false; | ||
| }); | ||
|
|
||
| const handleBack = () => { | ||
| window.location.href = '/'; | ||
| }; | ||
|
|
||
| return ( | ||
| <div className={`min-h-screen ${ | ||
| isDark ? 'bg-gray-900' : 'bg-gray-50' | ||
| }`}> | ||
| <header className={`p-4 ${ | ||
| isDark ? 'bg-gray-800' : 'bg-white' | ||
| } shadow-sm`}> | ||
| <div className="max-w-4xl mx-auto flex items-center justify-between"> | ||
| <button | ||
| onClick={handleBack} | ||
| className={`flex items-center gap-2 px-3 py-1.5 rounded-lg transition-colors ${ | ||
| isDark | ||
| ? 'text-gray-300 hover:bg-gray-700' | ||
| : 'text-gray-600 hover:bg-gray-100' | ||
| }`} | ||
| > | ||
| <ArrowLeft size={18} /> | ||
| <span>Back</span> | ||
| </button> | ||
| <div className="flex items-center gap-4"> | ||
| <button | ||
| onClick={toggleLanguage} | ||
| className={`flex items-center gap-1.5 px-3 py-1.5 rounded-lg transition-colors ${ | ||
| isDark | ||
| ? 'text-gray-300 hover:bg-gray-700' | ||
| : 'text-gray-600 hover:bg-gray-100' | ||
| }`} | ||
| > | ||
| <Languages size={18} /> | ||
| <span>{language.toUpperCase()}</span> | ||
| </button> | ||
| <button | ||
| onClick={() => setIsDark(!isDark)} | ||
| className={`px-3 py-1.5 rounded-lg transition-colors ${ | ||
| isDark | ||
| ? 'bg-gray-700 text-gray-300 hover:bg-gray-600' | ||
| : 'bg-gray-100 text-gray-600 hover:bg-gray-200' | ||
| }`} | ||
| > | ||
| {isDark ? 'Light Mode' : 'Dark Mode'} | ||
| </button> | ||
| </div> | ||
| </div> | ||
| </header> | ||
|
|
||
| <main className="max-w-4xl mx-auto p-4"> | ||
| <div className={`rounded-2xl shadow-lg overflow-hidden ${ | ||
| isDark ? 'bg-gray-800' : 'bg-white' | ||
| }`}> | ||
| <ChatInterface | ||
| isOpen={true} | ||
| onClose={() => {}} | ||
| isDark={isDark} | ||
| isEmbedded={true} | ||
| t={t} | ||
| /> | ||
| </div> | ||
| </main> | ||
| </div> | ||
| ); | ||
| } | ||
|
|
||
| export default LiveChat; No newline at end of file |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file appears to be duplicate functionality of the LiveChat page component in src/pages/LiveChat/index.tsx. Consider removing this duplicate file to avoid confusion and maintenance issues.
| import React from 'react'; | |
| import { useLanguage } from './hooks/useLanguage'; | |
| import { ChatInterface } from './components/ChatInterface'; | |
| import { Languages, ArrowLeft } from 'lucide-react'; | |
| export function LiveChat() { | |
| const { language, toggleLanguage, t } = useLanguage(); | |
| const [isDark, setIsDark] = React.useState(() => { | |
| if (typeof window !== 'undefined') { | |
| return window.matchMedia('(prefers-color-scheme: dark)').matches; | |
| } | |
| return false; | |
| }); | |
| const handleBack = () => { | |
| window.location.href = '/'; | |
| }; | |
| return ( | |
| <div className={`min-h-screen ${ | |
| isDark ? 'bg-gray-900' : 'bg-gray-50' | |
| }`}> | |
| <header className={`p-4 ${ | |
| isDark ? 'bg-gray-800' : 'bg-white' | |
| } shadow-sm`}> | |
| <div className="max-w-4xl mx-auto flex items-center justify-between"> | |
| <button | |
| onClick={handleBack} | |
| className={`flex items-center gap-2 px-3 py-1.5 rounded-lg transition-colors ${ | |
| isDark | |
| ? 'text-gray-300 hover:bg-gray-700' | |
| : 'text-gray-600 hover:bg-gray-100' | |
| }`} | |
| > | |
| <ArrowLeft size={18} /> | |
| <span>Back</span> | |
| </button> | |
| <div className="flex items-center gap-4"> | |
| <button | |
| onClick={toggleLanguage} | |
| className={`flex items-center gap-1.5 px-3 py-1.5 rounded-lg transition-colors ${ | |
| isDark | |
| ? 'text-gray-300 hover:bg-gray-700' | |
| : 'text-gray-600 hover:bg-gray-100' | |
| }`} | |
| > | |
| <Languages size={18} /> | |
| <span>{language.toUpperCase()}</span> | |
| </button> | |
| <button | |
| onClick={() => setIsDark(!isDark)} | |
| className={`px-3 py-1.5 rounded-lg transition-colors ${ | |
| isDark | |
| ? 'bg-gray-700 text-gray-300 hover:bg-gray-600' | |
| : 'bg-gray-100 text-gray-600 hover:bg-gray-200' | |
| }`} | |
| > | |
| {isDark ? 'Light Mode' : 'Dark Mode'} | |
| </button> | |
| </div> | |
| </div> | |
| </header> | |
| <main className="max-w-4xl mx-auto p-4"> | |
| <div className={`rounded-2xl shadow-lg overflow-hidden ${ | |
| isDark ? 'bg-gray-800' : 'bg-white' | |
| }`}> | |
| <ChatInterface | |
| isOpen={true} | |
| onClose={() => {}} | |
| isDark={isDark} | |
| isEmbedded={true} | |
| t={t} | |
| /> | |
| </div> | |
| </main> | |
| </div> | |
| ); | |
| } | |
| export default LiveChat; |
src/components/SocialLinks.tsx
Outdated
| // This component is no longer used as the buttons have been moved to ContactButtons | ||
| return null; |
Copilot
AI
Sep 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Component returns null and contains a comment indicating it's unused. Consider removing this component entirely if it's no longer needed to reduce code clutter.
…ty-patch Adjust Gmail compose button behavior
update