Skip to content

Commit

Permalink
Fix build issues and enhance UI components
Browse files Browse the repository at this point in the history
- Fixed TypeScript errors in resume page
- Added missing icons to components/icons.tsx
- Created Progress component
- Fixed React Hook dependencies in AudioEffectsProcessor
- Added new audio-recorder and blog pages
- Updated navigation and layout components
  • Loading branch information
while-basic committed Nov 30, 2024
1 parent 06d43db commit b5df1c9
Show file tree
Hide file tree
Showing 18 changed files with 866 additions and 178 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,10 @@ The workflow checks:
- [ ] Admin dashboard
- [-] Add SEO
- [ ] Add blog
- [ ] Secret audio page
- [ ] Deepgram API for speech to text
- [-] responsive
- [ ] loading screen

## License

Expand Down
134 changes: 85 additions & 49 deletions app/about/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,60 +12,96 @@ export default function AboutPage() {
<div className="container mx-auto px-4 pt-24 pb-8">
<h1 className="text-4xl font-bold mb-8">About Me</h1>

<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
<div className="space-y-6">
<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Professional Journey</h2>
<p className="text-muted-foreground mb-4">
With a unique blend of software development and industrial automation expertise, I bring a diverse perspective to technical challenges. My journey began in industrial automation, where I developed a strong foundation in electrical systems and controls.
</p>
<p className="text-muted-foreground">
Today, I&apos;m focused on software development, combining my hardware knowledge with modern programming practices to create innovative solutions.
</p>
</Card>
<div className="grid grid-cols-1 gap-8">
<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Introduction</h2>
<p className="text-muted-foreground mb-4">
I am a mechatronic technologist and software developer, where I work on industrial manufacturing equipment,
software, and web development. Before my obsession with technology, I was primarily focused on music
production. During COVID-19, I distributed my first album on streaming services such as Apple Music and
Spotify.
</p>
<p className="text-muted-foreground">
In my spare time, I enjoy investing in learning new things, building web apps, and further expand my
ideas. I am particularly interested in complex projects with artificial intelligence, virtual reality, industrial
manufacturing, data centers, and blockchain technology. If you think I can be helpful to you or your cause and
would like to meet, please feel free to get in touch.
</p>
</Card>

<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Technical Philosophy</h2>
<p className="text-muted-foreground mb-4">
I believe in creating software that isn&apos;t just functional, but also maintainable and scalable. My approach combines practical industrial experience with modern development practices.
</p>
<p className="text-muted-foreground">
I&apos;m particularly interested in the intersection of software and hardware, exploring ways to bridge these domains to create more efficient and reliable systems.
</p>
</Card>
</div>
<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Executive Summary</h2>
<p className="text-muted-foreground">
With over 11 years of experience troubleshooting complex electromechanical systems and developing software
solutions, I believe I have the skills and background to excel in this position. As outlined on my attached resume,
I have extensive hands-on experience maintaining and repairing industrial equipment and machinery. From
pneumatic and hydraulic systems to PLCs and HMIs, I have worked with a wide variety of components and
understand how to keep production lines running smoothly. I also have experience with programming
languages C Python and JavaScript and have worked on projects involving robotics, computer vision, and
embedded systems. In addition to my technical expertise, I am an analytical and solutions-oriented
professional. Whether troubleshooting sudden breakdown or planning major upgrades, I can systematically
evaluate problems, weigh alternatives, and implement effective solutions.
</p>
</Card>

<div className="space-y-6">
<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Core Skills</h2>
<div className="space-y-4">
<div>
<h3 className="font-semibold mb-2">Software Development</h3>
<div className="flex flex-wrap gap-2">
<Badge variant="secondary">Python</Badge>
<Badge variant="secondary">JavaScript</Badge>
<Badge variant="secondary">React</Badge>
<Badge variant="secondary">Node.js</Badge>
</div>
<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Objective</h2>
<p className="text-muted-foreground mb-4">
To obtain an Industrial Mechanic role that leverages my 11+ years of experience troubleshooting complex
industrial equipment and developing robust software solutions for manufacturing systems, instrumentation, and
robotics. I offer my expertise in preventative maintenance, manufacturing processes, and programming
languages to improve production efficiency, uptime, quality, and innovation.
</p>
<p className="text-muted-foreground">
My goal is to utilize my skill set in automation technologies to reduce downtime and drive process
improvements through systemic analysis and effective implementations.
</p>
</Card>

<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Core Skills</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<h3 className="font-semibold mb-2">Software Development</h3>
<div className="flex flex-wrap gap-2">
<Badge variant="secondary">Python</Badge>
<Badge variant="secondary">JavaScript</Badge>
<Badge variant="secondary">React</Badge>
<Badge variant="secondary">Node.js</Badge>
<Badge variant="secondary">C</Badge>
</div>
<div>
<h3 className="font-semibold mb-2">Industrial Automation</h3>
<div className="flex flex-wrap gap-2">
<Badge variant="secondary">PLC Programming</Badge>
<Badge variant="secondary">HMI Design</Badge>
<Badge variant="secondary">Control Systems</Badge>
</div>
</div>
<div>
<h3 className="font-semibold mb-2">Industrial Automation</h3>
<div className="flex flex-wrap gap-2">
<Badge variant="secondary">PLCs</Badge>
<Badge variant="secondary">HMIs</Badge>
<Badge variant="secondary">Robotics</Badge>
<Badge variant="secondary">Computer Vision</Badge>
<Badge variant="secondary">Embedded Systems</Badge>
</div>
</div>
</Card>

<Card className="p-6">
<h2 className="text-2xl font-semibold mb-4">Continuous Learning</h2>
<p className="text-muted-foreground">
I&apos;m constantly exploring new technologies and methodologies, believing that the best solutions come from a combination of proven practices and innovative approaches.
</p>
</Card>
</div>
<div>
<h3 className="font-semibold mb-2">Technologies</h3>
<div className="flex flex-wrap gap-2">
<Badge variant="secondary">AI</Badge>
<Badge variant="secondary">Virtual Reality</Badge>
<Badge variant="secondary">Blockchain</Badge>
<Badge variant="secondary">Data Centers</Badge>
<Badge variant="secondary">Manufacturing</Badge>
</div>
</div>
<div>
<h3 className="font-semibold mb-2">Mechanical Systems</h3>
<div className="flex flex-wrap gap-2">
<Badge variant="secondary">Pneumatics</Badge>
<Badge variant="secondary">Hydraulics</Badge>
<Badge variant="secondary">Preventative Maintenance</Badge>
<Badge variant="secondary">Troubleshooting</Badge>
</div>
</div>
</div>
</Card>
</div>
</div>
)
Expand Down
83 changes: 83 additions & 0 deletions app/audio-recorder/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
'use client';

import { useEffect, useState } from 'react';
import { Card } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import dynamic from 'next/dynamic';

// Dynamically import react-confetti to avoid SSR issues
const Confetti = dynamic(() => import('react-confetti'), {
ssr: false
});

export default function AudioRecorderPage() {
const [showConfetti, setShowConfetti] = useState(true);
const [showDialog, setShowDialog] = useState(true);
const [windowSize, setWindowSize] = useState({
width: typeof window !== 'undefined' ? window.innerWidth : 0,
height: typeof window !== 'undefined' ? window.innerHeight : 0
});

useEffect(() => {
const handleResize = () => {
setWindowSize({
width: window.innerWidth,
height: window.innerHeight
});
};

window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);

useEffect(() => {
// Hide confetti after 5 seconds
const timer = setTimeout(() => {
setShowConfetti(false);
}, 5000);

return () => clearTimeout(timer);
}, []);

return (
<div className="container mx-auto px-4 py-8">
{showConfetti && (
<Confetti
width={windowSize.width}
height={windowSize.height}
recycle={false}
numberOfPieces={200}
/>
)}

<Dialog open={showDialog} onOpenChange={setShowDialog}>
<DialogContent>
<DialogHeader>
<DialogTitle className="text-2xl font-bold text-center mb-4">
🎉 Congratulations! 🎉
</DialogTitle>
</DialogHeader>
<div className="text-center space-y-4">
<p className="text-muted-foreground">
You&apos;ve discovered the secret audio recorder page!
</p>
<Button onClick={() => setShowDialog(false)}>
Let&apos;s Begin!
</Button>
</div>
</DialogContent>
</Dialog>

<Card className="p-6">
<div className="space-y-4">
<h1 className="text-3xl font-bold">Audio Recorder</h1>
<p className="text-muted-foreground">
This is a hidden page where you can record and play audio.
</p>
{/* Audio recorder component will go here */}
</div>
</Card>
</div>
);
}
47 changes: 47 additions & 0 deletions app/blog/hello-world/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import Link from 'next/link'

export default function HelloWorldPost() {
return (
<div className="container mx-auto px-4 py-8">
<div className="max-w-4xl mx-auto">
<div className="mb-8">
<Link
href="/blog"
className="inline-flex items-center px-4 py-2 rounded-md bg-secondary hover:bg-secondary/80 transition-colors"
>
Back
</Link>
</div>

<article className="prose prose-invert max-w-none">
<h1>Hello World</h1>
<p className="text-muted-foreground">
You&apos;ve seen so many videos and blogs mention &apos;Hello World&apos;, but do you really know what it means?
</p>

<div className="text-sm text-muted-foreground mb-8">
<span>Written by John Doe</span>
<span className="mx-2"></span>
<span>Sep 20, 2024</span>
</div>

<h2>What is &quot;Hello World&quot;?</h2>
<p>
&quot;Hello World&quot; is essentially a way to confirm that everything is working as expected. When
you write and run this program, it outputs the phrase &quot;Hello, World!&quot; to the screen, showing
that your environment is set up correctly. Every programming language has its own
syntax for doing this, and it&apos;s the perfect way to get comfortable with the basics.
</p>

<h2>A Simple Example in Python:</h2>
<pre><code className="language-python">print(&quot;Hello, World!&quot;)</code></pre>

<p>
That&apos;s it! Running this code will output the text to the console, and boom—you&apos;ve just
written your first Python program.
</p>
</article>
</div>
</div>
)
}
27 changes: 27 additions & 0 deletions app/blog/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Link from 'next/link'

export default function BlogPage() {
return (
<div className="container mx-auto px-4 py-8">
<div className="max-w-4xl mx-auto">
<h1 className="text-4xl font-bold mb-8">Blog</h1>

<div className="space-y-8">
<article className="bg-card rounded-lg p-6 hover:bg-card/80 transition-colors">
<Link href="/blog/hello-world">
<h2 className="text-3xl font-bold mb-2 hover:underline">Hello World</h2>
<p className="text-muted-foreground mb-4">
You&apos;ve seen so many videos and blogs mention &apos;Hello World&apos;, but do you really know what it means?
</p>
<div className="text-sm text-muted-foreground">
<span>Written by John Doe</span>
<span className="mx-2"></span>
<span>Sep 20, 2024</span>
</div>
</Link>
</article>
</div>
</div>
</div>
)
}
25 changes: 25 additions & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,28 @@ body {
background-color: black;
}
}

/* Blog styles */
.prose {
@apply text-foreground;
}

.prose h1 {
@apply text-4xl font-bold mb-4 mt-0;
}

.prose h2 {
@apply text-2xl font-bold mt-8 mb-4;
}

.prose p {
@apply mb-4 leading-relaxed;
}

.prose pre {
@apply bg-card p-4 rounded-lg my-4;
}

.prose code {
@apply text-sm font-mono;
}
3 changes: 3 additions & 0 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import "./globals.css";
import { ThemeProvider } from "@/components/theme-provider";
import Navbar from "@/components/navbar";
import { personSchema, projectsSchema } from './schema';
import { LoadingScreen } from "@/components/loading-screen";

const geistSans = localFont({
src: "./fonts/GeistVF.woff",
Expand Down Expand Up @@ -89,8 +90,10 @@ export default function RootLayout({
attribute="class"
defaultTheme="dark"
enableSystem={true}
disableTransitionOnChange
>
<div className="min-h-screen bg-white dark:bg-black text-black dark:text-white">
<LoadingScreen />
<Navbar />
<main>
{children}
Expand Down
Loading

0 comments on commit b5df1c9

Please sign in to comment.