import { useState, useEffect } from "react"; import skymoneycover from "../assets/img/Skymoney-cover-img.jpg"; import skymoneycoverMobile from "../assets/img/skymoney-mobile-cover-img.jpg"; import millercover from "../assets/img/500nmain-cover-img.jpg"; import millercoverMobile from "../assets/img/500nmain-mobile-cover-img.jpg"; import skymoneyvideo from "../assets/video/Skymoney-video.mp4"; import skymoneyvideoMobile from "../assets/video/Skymoney-mobile-video.mp4"; import millervideo from "../assets/video/500nmain-video.mp4"; import millervideoMobile from "../assets/video/500nmain-mobile-video.mp4"; type Project = { id: string; title: string; description: string; coverImage: string; coverImageMobile: string; video: string; videoMobile: string; techStack: string[]; liveUrl?: string; beta?: boolean; note?: string; comingSoon?: boolean; }; const projects: Project[] = [ { id: "skymoney", title: "SkyMoney", description: "A budgeting app that simulates your bank account to ensure financial discipline.", coverImage: skymoneycover, coverImageMobile: skymoneycoverMobile, video: skymoneyvideo, videoMobile: skymoneyvideoMobile, techStack: ["React", "TypeScript", "Node.js", "PostgreSQL"], liveUrl: "https://skymoneybudget.com", beta: true, note: "Contact Jody for beta access.", }, { id: "miller-building", title: "Miller Building Website", description: "A website showcasing the historic Miller Building located in Borger, Texas.", coverImage: millercover, coverImageMobile: millercoverMobile, video: millervideo, videoMobile: millervideoMobile, techStack: ["HTML", "CSS", "JQuery"], liveUrl: "https://500nmain806.com", }, ]; function VideoModal({ isOpen, onClose, video, videoMobile, title, }: { isOpen: boolean; onClose: () => void; video: string; videoMobile: string; title: string; }) { const [isMobile, setIsMobile] = useState(false); useEffect(() => { const checkMobile = () => setIsMobile(window.innerWidth < 768); checkMobile(); window.addEventListener("resize", checkMobile); return () => window.removeEventListener("resize", checkMobile); }, []); if (!isOpen) return null; return (
{project.description}
{project.note && ({project.note}
)} {/* Tech Stack */}Exciting projects in development. Stay tuned!
A showcase of my work — from concept to deployment. Click on any project to watch a demo.