diff --git a/assets/index-DZ1S_5DT.js b/assets/index-CkqE39ts.js similarity index 96% rename from assets/index-DZ1S_5DT.js rename to assets/index-CkqE39ts.js index 2094eeb..c21cd26 100644 --- a/assets/index-DZ1S_5DT.js +++ b/assets/index-CkqE39ts.js @@ -215,7 +215,7 @@ For more information, see https://radix-ui.com/primitives/docs/components/${t.do Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(e){(function(){var t={}.hasOwnProperty;function n(){for(var i="",a=0;a(typeof window=="object"&&document.documentElement.style.setProperty("--line-color",r),aR.default.createElement("div",{className:(0,sR.default)(t,"vertical-timeline",{"vertical-timeline--animate":e,"vertical-timeline--two-columns":n==="2-columns","vertical-timeline--one-column-left":n==="1-column"||n==="1-column-left","vertical-timeline--one-column-right":n==="1-column-right"})},o));Fy.propTypes={children:Tr.default.oneOfType([Tr.default.arrayOf(Tr.default.node),Tr.default.node]).isRequired,className:Tr.default.string,animate:Tr.default.bool,layout:Tr.default.oneOf(["1-column-left","1-column","2-columns","1-column-right"]),lineColor:Tr.default.string};var lR=Fy;_u.default=lR;var Cu={};function If(){return If=Object.assign||function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}var zf=new Map,bl=new WeakMap,Qp=0,zy=void 0;function dR(e){zy=e}function fR(e){return e?(bl.has(e)||(Qp+=1,bl.set(e,Qp.toString())),bl.get(e)):"0"}function hR(e){return Object.keys(e).sort().filter(function(t){return e[t]!==void 0}).map(function(t){return t+"_"+(t==="root"?fR(e.root):e[t])}).toString()}function pR(e){var t=hR(e),n=zf.get(t);if(!n){var r=new Map,o,i=new IntersectionObserver(function(a){a.forEach(function(s){var l,u=s.isIntersecting&&o.some(function(d){return s.intersectionRatio>=d});e.trackVisibility&&typeof s.isVisible>"u"&&(s.isVisible=u),(l=r.get(s.target))==null||l.forEach(function(d){d(u,s)})})},e);o=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:i,elements:r},zf.set(t,n)}return n}function E1(e,t,n,r){if(n===void 0&&(n={}),r===void 0&&(r=zy),typeof window.IntersectionObserver>"u"&&r!==void 0){var o=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold=="number"?n.threshold:0,time:0,boundingClientRect:o,intersectionRect:o,rootBounds:o}),function(){}}var i=pR(n),a=i.id,s=i.observer,l=i.elements,u=l.get(e)||[];return l.has(e)||l.set(e,u),u.push(t),s.observe(e),function(){u.splice(u.indexOf(t),1),u.length===0&&(l.delete(e),s.unobserve(e)),l.size===0&&(s.disconnect(),zf.delete(a))}}var mR=["children","as","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView","fallbackInView"];function Jp(e){return typeof e.children!="function"}var Cc=function(e){cR(t,e);function t(r){var o;return o=e.call(this,r)||this,o.node=null,o._unobserveCb=null,o.handleNode=function(i){o.node&&(o.unobserve(),!i&&!o.props.triggerOnce&&!o.props.skip&&o.setState({inView:!!o.props.initialInView,entry:void 0})),o.node=i||null,o.observeNode()},o.handleChange=function(i,a){i&&o.props.triggerOnce&&o.unobserve(),Jp(o.props)||o.setState({inView:i,entry:a}),o.props.onChange&&o.props.onChange(i,a)},o.state={inView:!!r.initialInView,entry:void 0},o}var n=t.prototype;return n.componentDidUpdate=function(o){(o.rootMargin!==this.props.rootMargin||o.root!==this.props.root||o.threshold!==this.props.threshold||o.skip!==this.props.skip||o.trackVisibility!==this.props.trackVisibility||o.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())},n.componentWillUnmount=function(){this.unobserve(),this.node=null},n.observeNode=function(){if(!(!this.node||this.props.skip)){var o=this.props,i=o.threshold,a=o.root,s=o.rootMargin,l=o.trackVisibility,u=o.delay,d=o.fallbackInView;this._unobserveCb=E1(this.node,this.handleChange,{threshold:i,root:a,rootMargin:s,trackVisibility:l,delay:u},d)}},n.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},n.render=function(){if(!Jp(this.props)){var o=this.state,i=o.inView,a=o.entry;return this.props.children({inView:i,entry:a,ref:this.handleNode})}var s=this.props,l=s.children,u=s.as,d=uR(s,mR);return p.createElement(u||"div",If({ref:this.handleNode},d),l)},t}(p.Component);Cc.displayName="InView";Cc.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1};function gR(e){var t=e===void 0?{}:e,n=t.threshold,r=t.delay,o=t.trackVisibility,i=t.rootMargin,a=t.root,s=t.triggerOnce,l=t.skip,u=t.initialInView,d=t.fallbackInView,f=p.useRef(),h=p.useState({inView:!!u}),y=h[0],x=h[1],g=p.useCallback(function(v){f.current!==void 0&&(f.current(),f.current=void 0),!l&&v&&(f.current=E1(v,function(m,w){x({inView:m,entry:w}),w.isIntersecting&&s&&f.current&&(f.current(),f.current=void 0)},{root:a,rootMargin:i,threshold:n,trackVisibility:o,delay:r},d))},[Array.isArray(n)?n.toString():n,a,i,s,l,o,d,r]);p.useEffect(function(){!f.current&&y.entry&&!s&&!l&&x({inView:!!u})});var b=[g,y.inView,y.entry];return b.ref=b[0],b.inView=b[1],b.entry=b[2],b}const vR=Object.freeze(Object.defineProperty({__proto__:null,InView:Cc,default:Cc,defaultFallbackInView:dR,observe:E1,useInView:gR},Symbol.toStringTag,{value:"Module"})),yR=x6(vR);Cu.__esModule=!0;Cu.default=void 0;var Mr=k1(p),Ye=k1(Oy),Sl=k1(Iy),xR=yR;function k1(e){return e&&e.__esModule?e:{default:e}}const Vy=({children:e="",className:t="",contentArrowStyle:n=null,contentStyle:r=null,date:o="",dateClassName:i="",icon:a=null,iconClassName:s="",iconOnClick:l=null,onTimelineElementClick:u=null,iconStyle:d=null,id:f="",position:h="",style:y=null,textClassName:x="",intersectionObserverProps:g={rootMargin:"0px 0px -40px 0px",triggerOnce:!0},visible:b=!1})=>Mr.default.createElement(xR.InView,g,({inView:v,ref:m})=>Mr.default.createElement("div",{ref:m,id:f,className:(0,Sl.default)(t,"vertical-timeline-element",{"vertical-timeline-element--left":h==="left","vertical-timeline-element--right":h==="right","vertical-timeline-element--no-children":e===""}),style:y},Mr.default.createElement(Mr.default.Fragment,null,Mr.default.createElement("span",{style:d,onClick:l,className:(0,Sl.default)(s,"vertical-timeline-element-icon",{"bounce-in":v||b,"is-hidden":!(v||b)})},a),Mr.default.createElement("div",{style:r,onClick:u,className:(0,Sl.default)(x,"vertical-timeline-element-content",{"bounce-in":v||b,"is-hidden":!(v||b)})},Mr.default.createElement("div",{style:n,className:"vertical-timeline-element-content-arrow"}),e,Mr.default.createElement("span",{className:(0,Sl.default)(i,"vertical-timeline-element-date")},o)))));Vy.propTypes={children:Ye.default.oneOfType([Ye.default.arrayOf(Ye.default.node),Ye.default.node]),className:Ye.default.string,contentArrowStyle:Ye.default.shape({}),contentStyle:Ye.default.shape({}),date:Ye.default.node,dateClassName:Ye.default.string,icon:Ye.default.element,iconClassName:Ye.default.string,iconStyle:Ye.default.shape({}),iconOnClick:Ye.default.func,onTimelineElementClick:Ye.default.func,id:Ye.default.string,position:Ye.default.string,style:Ye.default.shape({}),textClassName:Ye.default.string,visible:Ye.default.bool,intersectionObserverProps:Ye.default.shape({root:Ye.default.object,rootMargin:Ye.default.string,threshold:Ye.default.number,triggerOnce:Ye.default.bool})};var wR=Vy;Cu.default=wR;var Eu={VerticalTimeline:_u.default,VerticalTimelineElement:Cu.default};const bR=[{image:My,position:"Freelance Software Developer",company:"Fingertips",setup:"Remote",date:"July 2022 – June 2024",highlights:["Developed and deployed 5+ custom mobile applications for Android using Flutter and 5+ web applications using React Frameworks, enhancing user engagement and client satisfaction.","Designed and implemented responsive web applications with HTML, CSS and Javascript with React framework for local clients.","Integrated third-party APIs (oauth, mapping services, etc.) and conducted thorough testing, ensuring high performance and security.","Collaborated with clients to gather requirements, deliver projects within the timelines and budgets, and provided ongoing maintenance, resulting in 95% client retention."],skills:["Android Development","Web Development","Web Design","Frontend Development","Backed Development","React JS","Next JS","Express JS","MongoDB","Clerk","Vercel","Netlify","Github Pages","Tailwind CSS","Figma","Photoshop","MVC","REST API","Rive","Unity","Tensorflow","Tflite"]},{image:Fj,position:"Mobile Application Developer",company:"GotWork Digital",link:"https://gotwork.digital",setup:"Remote",date:"May 2023 – April 2024",highlights:["Transitioned MindFree application to Flutter from its previous tech stack, implementing 8 intricate user interface designs from Figma, resulting in a 20% boost in user satisfaction.","Developed applications using Feature First Clean Architecture, leveraging Riverpod and Bloc for robust state management, adhering to industry best practices.","Enhanced app functionality through regular software updates and integration of new dependencies, consistently delivering new features and improvements.","Actively collaborated with a senior software engineer, gaining valuable mentorship, and contributed to team success by sharing updates and insights in weekly meetings."],skills:["Flutter","Firebase","Cloud Firestore","Supabase","Trello","Bloc","Riverpod","GoRouter","GetIt","Figma","Bitbucket","Unit Testing","Clean Architecture","MVVM","REST API"]},{image:zj,position:"Software Developer",company:"Convocade",link:"https://www.facebook.com/Convocade",setup:"Remote",date:"July 2022 – January 2023",highlights:["Developed a web app using ReactJS and was migrated to NextJS for advance features, enabling businesses to hire influencers for advertisement, connecting over 3+ businesses with influencers.","Implemented dynamic features like monthly influencer rotation and influencer of the week, enhancing user engagement and platform activity by 35%.","Created a seamless booking system for influencers and businesses, prioritizing popular influencers while providing flexibility for lesser- known influencers to gain exposure, optimizing the hiring process for all parties involved.","Developed a dynamic landing page to assist 100+ eligible military spouses in obtaining professional credentials, facilitating their career advancement.","Developed a music player web app to showcase over 3+ tracks produced by Aquilarie, enhancing their online presence and audience reach."],subCompanies:[{company:"MyCAA Grant Assist",image:Bj,link:"https://mycaagrant.com"},{company:"Aquilarie",image:$j,link:"https://spotify.com/artist/2F2fMy2GAqcw2k7fk97kSk"}],skills:["React JS","Next JS","Tailwind CSS","Redux JS","Zustand","Express JS","Uploadthing","Clerk","Framer Motion","GSAP","Figma","Zod","React Hook Form","Shadcn UI"]},{image:Vj,position:"Full-Stack Developer Intern",company:"USM Graduate School",link:"https://www.usm.edu.ph/academics/graduate-school",setup:"On-site",date:"January 2021 – June 2021",highlights:["Led the development of the Mastivity Web Application for USM Graduate School Faculty, managing both Frontend and Backend, resulting in a 20% increase in user engagement.","Conducted regular software updates and delivered comprehensive presentations of the web application, ensuring stakeholders were updated and satisfied with the system's progress.","Maintained an active presence, dedicating 8 hours in-office daily and continued work remotely, contributing to 95% uptime and reliability of the system.","Enhanced skill set by mastering ASP.NET Core and Angular framework, resulting in a 30% improvement in development efficiency and project completion time."],skills:["ASP.Net Core","Angular","Angular Material","Azure","MSSQL Server","Swagger API","Entity Framework (EF) Core","Bootstrap","SCSS","HTML","JSON Web Token (JWT)"]}],SR=su("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function Eo({className:e,variant:t,...n}){return c.jsx("div",{className:ue(SR({variant:t}),e),...n})}const _R=({image:e,position:t,company:n,link:r,setup:o,date:i,highlights:a,skills:s,subCompanies:l})=>c.jsxs(Eu.VerticalTimelineElement,{contentStyle:{background:"hsl(var(--secondary) / 0.2)",border:"1px solid hsl(var(--secondary) / 0.5)",color:"hsl(var(--secondary-foreground))",display:"flex",flexDirection:"column",boxShadow:"hsl(var(--primary) / 0.2) 0px 4px 24px",borderRadius:"8px"},contentArrowStyle:{borderRight:"8px solid hsl(var(--secondary) / 0.8)"},date:i,iconStyle:{boxShadow:"hsl(var(--primary)) 0px 4px 24px",outline:"2px solid hsl(var(--primary))"},icon:r?c.jsx(Pt,{to:r,target:"_blank",children:c.jsx("img",{src:e,alt:n,className:"rounded-full w-full h-full border object-cover cursor-pointer"})}):c.jsx("img",{src:e,alt:n,className:"rounded-full w-full h-full border object-cover"}),children:[c.jsxs("div",{className:"flex items-start gap-x-4",children:[c.jsx("img",{src:e,alt:"company",className:"rounded-sm drop-shadow-primary-glow h-16 w-16 object-cover"}),c.jsxs("div",{className:"leading-none",children:[c.jsx("h3",{className:"font-bold",children:t}),c.jsx("h4",{className:"text-sm text-secondary-foreground/80",children:n}),c.jsx("h5",{className:"text-xs text-secondary-foreground/40",children:i}),c.jsx("h6",{className:"text-xs text-secondary-foreground/40",children:o})]})]}),c.jsx("div",{className:"flex flex-col items-start space-y-2",children:a.map(u=>c.jsxs("p",{className:"!text-sm text-muted-foreground",children:["— ",u]},u))}),l&&c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Sub-Companies"}),c.jsx("div",{className:"flex item-start flex-wrap gap-2.5 lg:gap-6 mt-4",children:l.map(u=>c.jsxs(Pt,{to:u.link,className:"flex-center gap-x-2 text-xs text-secondary-foreground/80",children:[c.jsx("div",{style:{boxShadow:"hsl(var(--primary)) 0px 4px 24px"},className:"rounded-full h-6 w-6 bg-white overflow-hidden flex-center p-0.5",children:c.jsx("img",{src:u.image,alt:u.company,className:"w-full h-full object-scale-down"})}),u.company]},`${u.company}-${u}`))})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Skills Gained"}),c.jsx("div",{className:"flex item-start flex-wrap gap-1.5 mt-4",children:s.map(u=>c.jsx(Eo,{children:u},`${n}-${u}`))})]})]}),CR=()=>c.jsxs("section",{className:ue("min-h-dvh flex items-center flex-col gap-y-2 lg:gap-y-6 border-b pt-14 pb-6 px-2 lg:px-0",po.rootSection),id:lt.experience,children:[c.jsxs("div",{className:"flex items-center gap-x-2 w-full pt-6 lg:relative",children:[c.jsx("span",{className:"w-[32px] lg:w-[128px] h-1 rounded-full bg-muted-foreground tracking-widest"}),c.jsx("h2",{className:"text-lg lg:text-4xl font-bold",children:"WORK EXPERIENCE"}),c.jsx(Y9,{className:"w-5 lg:w-8 h-5 lg:h-8 sm:absolute xs:right-6 lg:right-0 opacity-50"})]}),c.jsx("p",{className:"text-xs lg:text-sm text-muted-foreground text-center lg:mt-2 w-3/4 lg:w-full",children:"Here are details of my experience as a software developer, including my roles across various companies and projects."}),c.jsx(Eu.VerticalTimeline,{lineColor:"hsl(var(--foreground) / 0.6)",className:"mt-4 lg:mt-20",children:bR.map(e=>c.jsx(_R,{...e},e.company))})]}),ER=[{source:"https://www.usm.edu.ph",name:"University of Southern Mindanao",logo:Gj,department:"College of Engineering and Information Technology",date:"August 2019 - June 2023",honor:"Cum Laude",desc:"I graduated from the University of Southern Mindanao (USM) with a Bachelor's degree in Computer Science, achieving Cum Laude with a GPA of 1.67. During my time at USM, I actively participated in the in-house review, representing my thesis study. I was also a member of the Philippine Society of Information Technology (PSIT), which enriched my academic experience. My coursework included Data Structures and Algorithms, Time Complexity, Software Engineering, Networking, and Artificial Intelligence, among other advanced topics.",study:{title:"Luminous: A heart rate-based horror adventure game using A* pathfinding algorithm",desc:"Luminous is a story-based horror-adventure game that I created in Unity for my undergraduate thesis. The study mainly focused on AI (artificial intelligence) and provided a unique mechanism for tracking the player's location based on their heart rate. The objectives of this study were to use the player’s heart rate as the heuristic value in the A* algorithm, implement an enemy-tracking mechanic based on the heart rate-based heuristics, and determine its accuracy against the default A* algorithm.",stack:["Unity","A*","C#","HypeRate","Photoshop","Blender","Audacity"],demo:"https://www.youtube.com/watch?v=7zYUk5x-B40"},projects:[{title:"Mastivity",desc:"As per my OJT requirement, we were tasked with creating a system dedicated to our assigned department. I was assigned to graduate school; thus, I created a system that boosts masters productivity and will help them with their daily endeavors.",stack:["Bootstrap","Angular",".Net Core","Entity Framework","Swagger API","MSSQL","Azure","Netlify"],demo:"https://www.youtube.com/watch?v=OUnh-eysJrM"},{title:"Document Request System",desc:"This was a system that I made for the HR department at USM for generating documents based on user requests by filling out an online form provided by the system.",stack:["Bootstrap","Angular",".Net Core","Entity Framework","Swagger API","MSSQL","Azure","Netlify"],demo:"https://www.youtube.com/watch?v=jkJ1Z9-yHYU"},{title:"Faculty Competency System",desc:"This was a system that I made for the HRDMO to assess the competency level of the faculty members.",stack:["Bootstrap",".Net Blazor","Entity Framework","Swagger API","MSSQL","Azure","Netlify"]}],type:_a.college},{source:"https://www.facebook.com/MatanaoNHS",name:"Matanao National High School",logo:Yp,department:"Senior - Information and Communication Technology (ICT) Strand",date:"June 2017 - April 2019",honor:"With High Honors",desc:"I graduated from Matanao National High School (MNHS) - Senior High with the distinction of With High Honors. This achievement reflects my dedication and commitment to academic excellence throughout my senior high school years.",type:_a.seniorHigh},{source:"https://www.facebook.com/MatanaoNHS",name:"Matanao National High School",logo:Yp,department:"Junior - Science, Technology, Engineering and Mathematics",date:"August 2013 - June 2017",honor:"With Honors",desc:"I completed my junior high school education at Matanao National High School (MNHS), graduating with the distinction of With Honors. This recognition highlights my consistent academic performance and dedication during those formative years.",type:_a.juniorHigh},{source:"https://www.facebook.com/p/DepEd-Tayo-Youth-Formation-Ceboza-Elementary-School-100079755368493/?_rdr",name:"Ceboza Matanao Elementary School",logo:Kj,sub:{name:"Kapitan Tomas Monteverde Sr. Central Elementary School",desc:"Grade 1 - 5",logo:Zj},date:"June 2007 - March 2013",honor:"Valedictorian",desc:"I began my elementary education at Kapital Tomas Monteverde Sr. Central Elementary School, and later transferred to Ceboza Matanao Elementary School in Grade 5. I graduated from Ceboza Matanao Elementary School as the class Valedictorian, an honor that reflects my commitment to academic excellence from an early age.",type:_a.elementary}],kR=({source:e,name:t,logo:n,sub:r,department:o,date:i,honor:a,desc:s,study:l,projects:u})=>c.jsxs(Eu.VerticalTimelineElement,{contentStyle:{background:"hsl(var(--secondary) / 0.2)",border:"1px solid hsl(var(--secondary) / 0.5)",color:"hsl(var(--secondary-foreground))",display:"flex",flexDirection:"column",boxShadow:"hsl(var(--primary) / 0.2) 0px 4px 24px",borderRadius:"8px"},contentArrowStyle:{borderRight:"8px solid hsl(var(--secondary) / 0.8)"},date:i,iconStyle:{backgroundColor:"#FFF",boxShadow:"hsl(var(--primary)) 0px 4px 24px",outline:"2px solid hsl(var(--primary))"},icon:c.jsx(Pt,{to:e,target:"_blank",children:c.jsx("img",{src:n,alt:t,className:"rounded-full w-full h-full object-cover scale-90"})}),children:[c.jsxs("div",{className:"flex items-start gap-x-4",children:[c.jsx("img",{src:n,alt:t,className:"rounded-sm drop-shadow-primary-glow h-16 w-16 object-cover"}),c.jsxs("div",{className:"leading-tight space-y-0.5",children:[c.jsx("h3",{className:"font-bold",children:t}),c.jsx("h4",{className:"text-sm text-secondary-foreground/80",children:o}),c.jsx("h5",{className:"text-sm text-secondary-foreground/40",children:i}),c.jsx("h6",{className:"text-xs text-secondary-foreground/40 font-semibold",children:a})]})]}),r&&c.jsxs("div",{className:"flex gap-x-4 mt-2",children:[c.jsx("img",{src:r.logo,alt:r.name,className:"rounded-sm drop-shadow-primary-glow h-16 w-16 object-cover"}),c.jsxs("div",{className:"leading-tight space-y-0.5",children:[c.jsx("h3",{className:"font-bold",children:r.name}),c.jsx("h6",{className:"text-xs text-secondary-foreground/40 font-semibold",children:r.desc})]})]}),c.jsx("p",{className:"!text-sm text-muted-foreground",children:s}),l&&c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Thesis Study"}),c.jsx("h5",{className:"!text-sm !font-normal text-foreground/80",children:l.title}),c.jsx("p",{className:"!text-xs text-muted-foreground",children:l.desc}),c.jsx("div",{className:"flex items-start flex-wrap gap-1",children:l.stack.map(d=>c.jsx(Eo,{className:"bg-background/50",children:d},d))}),c.jsx(Pt,{to:l.demo,target:"_blank",children:c.jsxs(Eo,{className:"bg-secondary/20 whitespace-nowrap gap-x-2 py-1 px-2.5 cursor-pointer w-fit mt-2",children:[c.jsx(Kp,{color:Lf,className:"w-4 h-4"}),l.title.split(" ")[0].replace(":","")," Demo"]})})]}),u&&c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Projects"}),c.jsx("div",{className:"space-y-2.5 mt-4",children:u.map(d=>c.jsxs("div",{className:"space-y-2",children:[c.jsx("h5",{className:"!text-sm !font-bold text-foreground/80",children:d.title}),c.jsx("p",{className:"!text-xs text-muted-foreground !m-0",children:d.desc}),c.jsx("div",{className:"flex items-start flex-wrap gap-1",children:d.stack.map(f=>c.jsx(Eo,{className:"bg-background/50",children:f},f))}),d.demo&&c.jsx(Pt,{to:d.demo,target:"_blank",children:c.jsxs(Eo,{className:"bg-secondary/20 whitespace-nowrap gap-x-2 py-1 px-2.5 cursor-pointer w-fit mt-1.5",children:[c.jsx(Kp,{color:Lf,className:"w-4 h-4"}),d.title," Demo"]},d.title)})]},d.title))})]})]}),jR=()=>c.jsxs("section",{className:ue("min-h-dvh flex flex-col gap-y-2 lg:gap-y-6 border-b pt-14 pb-6 px-2 lg:px-0",po.rootSection),id:lt.education,children:[c.jsxs("div",{className:"flex items-center gap-x-2 w-full pt-6 lg:relative",children:[c.jsx("span",{className:"w-[32px] lg:w-[128px] h-1 rounded-full bg-muted-foreground tracking-widest"}),c.jsx("h2",{className:"text-lg lg:text-4xl font-bold",children:"EDUCATION"}),c.jsx(q9,{className:"w-5 lg:w-8 h-5 lg:h-8 sm:absolute xs:right-6 lg:right-0 opacity-50"})]}),c.jsx("p",{className:"text-xs lg:text-sm text-muted-foreground text-center lg:mt-2 w-3/4 mx-auto",children:"Throughout my academic journey, each experience has played a distinct role in my development. Here’s an overview of the key milestones in my educational path."}),c.jsx(Eu.VerticalTimeline,{lineColor:"hsl(var(--foreground) / 0.6)",className:"mt-4 lg:mt-20",children:ER.map((e,t)=>c.jsx(kR,{...e},`${e.name}-${t}`))})]}),RR="LvRCe{t8.TWAo}a|jEj[x]V@Rjoz",NR="L5Db.:Y800ve|TwZ9|9wIonho#-;",TR="LkMa3JRk~X%2ofayayoLxuoeRiR*",MR="L9P%bT~n-:9J-;RjV@t70Fnz?6R;",PR="LVKeN5?b_N4mRjoft7fQkrV@Vskq",$y="https://forms.gle/PFHoohMazvKMeKCh7",AR=[{source:"https://www.youtube.com/embed/SBOBtfs9XiI?si=vpB3x8Mg3x4F2ipa",name:"Tweetch",subtitle:"(Twitch Clone 🎮)",desc:"Tweetch is a Twitch clone crafted with personal preferences in mind. Designed to emulate the popular live streaming platform, this project aims to provide a familiar experience while incorporating custom features and enhancements tailored to individual needs.",stack:["Next JS","Supabase","Prisma ORM","Livekit","Clerk","Zustand","Shadcn UI","React Hook Form","Uploadthing","Zod","Next Themes","Tailwind CSS"],type:Rn.web,live:"https://tweetch.vercel.app"},{source:"https://www.youtube.com/embed/pWdMyb9P70I?si=ZZvSe9ja1Ax-3-U1",name:"GrainGuru",subtitle:"(Rice Price Forecaster 🌾)",desc:"Leveraging an LSTM model, I developed a web application that compares and forecasts the current and future prices of different rice varieties in Cotabato.",stack:["Tensorflow JS","React JS","Express JS","MongoDB","Clerk","Prisma ORM","Zustand","Tailwind CSS","Shadcn UI","React Hook Form","Uploadthing","Zod"],type:Rn.web,live:"https://grainguru.vercel.app"},{source:"https://www.youtube.com/embed/yada96hMy48?si=MkaDE6ltknpxi8Pm",name:"ScrollWheel Date Picker",subtitle:"(Flutter Package 📅)",desc:"I developed a Flutter package that offers a unique, scrollable, and flat perspective wheel-type date picker, inspired by the sleek design seen in TikTok. This package allows developers to easily integrate an intuitive and visually appealing date picker into their Flutter applications. The date picker is fully customizable, providing smooth scrolling and a modern, flat design that enhances the user experience. It's perfect for applications where a stylish and user-friendly date selection is essential.",stack:["Dart","Flutter","Pub Dev","Change Notifier"],type:Rn.web,live:"https://pub.dev/packages/scroll_wheel_date_picker"},{source:Uj,blurHash:TR,name:"TriTok",subtitle:"(TikTok Clone 🎥)",desc:"A clone application of TikTok made in Flutter. The idea was to create a modified version of TikTok by including and removing some of the features based on personal preference.",stack:["Flutter","Firebase","Firebase Auth","Firebase Storage","Cloud Firestore","Bloc","Pexels API","Go Router","GetIt","Dio","Retrofit","Secure Storage"],type:Rn.mobile},{source:Hj,blurHash:MR,name:"Leafonic",subtitle:"(Corynespora Leaf Disease Detector 🌿)",desc:"I developed a mobile application using a Convolutional Neural Network (CNN) powered by TensorFlow to classify the health of 𝗥𝘂𝗯𝗯𝗲𝗿 𝗧𝗿𝗲𝗲 𝗟𝗲𝗮𝘃𝗲𝘀 (𝘏𝘦𝘷𝘦𝘢 𝘣𝘳𝘢𝘴𝘪𝘭𝘪𝘦𝘯𝘴𝘪𝘴). The app precisely detects whether a leaf is healthy or afflicted with 𝘊𝘰𝘳𝘺𝘯𝘦𝘴𝘱𝘰𝘳𝘢 disease, utilizing CNNs for accurate image recognition. This technology-driven tool enhances early disease detection and supports farmers in maintaining healthier crops.",stack:["Flutter","Tensorflow","Tflite","Image processing","Convolutional Neural Network (CNN)"],type:Rn.mobile},{source:Wj,blurHash:PR,name:"FlixSage",subtitle:"(Movie or Any Show Guesser 🪄)",desc:"With FlixSage, users can effortlessly upload an image related to a movie, whether it's a poster, screenshot, or promotional still. Once uploaded, the app employs advanced image recognition algorithms to identify the title, cast members, synopsis, and other pertinent information associated with the movie depicted in the image. This seamless process eliminates the need for manual searching and typing, providing users with instant access to comprehensive details about the movie they're interested in. Whether you're browsing through your photo gallery or stumbling upon intriguing movie visuals online, FlixSage ensures that you have all the essential information at your fingertips, making your movie-watching experience more informed and enjoyable.",stack:["Flutter","Firebase","Bloc","AI","GetIt","Go Router","Object Box"],type:Rn.mobile}];var By="AlertDialog",[DR,RM]=ho(By,[cy]),Cr=cy(),Uy=e=>{const{__scopeAlertDialog:t,...n}=e,r=Cr(t);return c.jsx(b1,{...r,...n,modal:!0})};Uy.displayName=By;var OR="AlertDialogTrigger",Hy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(S1,{...o,...r,ref:t})});Hy.displayName=OR;var LR="AlertDialogPortal",Wy=e=>{const{__scopeAlertDialog:t,...n}=e,r=Cr(t);return c.jsx(_1,{...r,...n})};Wy.displayName=LR;var IR="AlertDialogOverlay",Gy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(Fs,{...o,...r,ref:t})});Gy.displayName=IR;var Ti="AlertDialogContent",[FR,zR]=DR(Ti),Zy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,children:r,...o}=e,i=Cr(n),a=p.useRef(null),s=ut(t,a),l=p.useRef(null);return c.jsx(lj,{contentName:Ti,titleName:Ky,docsSlug:"alert-dialog",children:c.jsx(FR,{scope:n,cancelRef:l,children:c.jsxs(zs,{role:"alertdialog",...i,...o,ref:s,onOpenAutoFocus:ye(o.onOpenAutoFocus,u=>{var d;u.preventDefault(),(d=l.current)==null||d.focus({preventScroll:!0})}),onPointerDownOutside:u=>u.preventDefault(),onInteractOutside:u=>u.preventDefault(),children:[c.jsx(Z0,{children:r}),c.jsx($R,{contentRef:a})]})})})});Zy.displayName=Ti;var Ky="AlertDialogTitle",Yy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(Vs,{...o,...r,ref:t})});Yy.displayName=Ky;var Qy="AlertDialogDescription",Jy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx($s,{...o,...r,ref:t})});Jy.displayName=Qy;var VR="AlertDialogAction",Xy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(Su,{...o,...r,ref:t})});Xy.displayName=VR;var qy="AlertDialogCancel",e5=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,{cancelRef:o}=zR(qy,n),i=Cr(n),a=ut(t,o);return c.jsx(Su,{...i,...r,ref:a})});e5.displayName=qy;var $R=({contentRef:e})=>{const t=`\`${Ti}\` requires a description for the component to be accessible for screen reader users. +*/(function(e){(function(){var t={}.hasOwnProperty;function n(){for(var i="",a=0;a(typeof window=="object"&&document.documentElement.style.setProperty("--line-color",r),aR.default.createElement("div",{className:(0,sR.default)(t,"vertical-timeline",{"vertical-timeline--animate":e,"vertical-timeline--two-columns":n==="2-columns","vertical-timeline--one-column-left":n==="1-column"||n==="1-column-left","vertical-timeline--one-column-right":n==="1-column-right"})},o));Fy.propTypes={children:Tr.default.oneOfType([Tr.default.arrayOf(Tr.default.node),Tr.default.node]).isRequired,className:Tr.default.string,animate:Tr.default.bool,layout:Tr.default.oneOf(["1-column-left","1-column","2-columns","1-column-right"]),lineColor:Tr.default.string};var lR=Fy;_u.default=lR;var Cu={};function If(){return If=Object.assign||function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}var zf=new Map,bl=new WeakMap,Qp=0,zy=void 0;function dR(e){zy=e}function fR(e){return e?(bl.has(e)||(Qp+=1,bl.set(e,Qp.toString())),bl.get(e)):"0"}function hR(e){return Object.keys(e).sort().filter(function(t){return e[t]!==void 0}).map(function(t){return t+"_"+(t==="root"?fR(e.root):e[t])}).toString()}function pR(e){var t=hR(e),n=zf.get(t);if(!n){var r=new Map,o,i=new IntersectionObserver(function(a){a.forEach(function(s){var l,u=s.isIntersecting&&o.some(function(d){return s.intersectionRatio>=d});e.trackVisibility&&typeof s.isVisible>"u"&&(s.isVisible=u),(l=r.get(s.target))==null||l.forEach(function(d){d(u,s)})})},e);o=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:i,elements:r},zf.set(t,n)}return n}function E1(e,t,n,r){if(n===void 0&&(n={}),r===void 0&&(r=zy),typeof window.IntersectionObserver>"u"&&r!==void 0){var o=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold=="number"?n.threshold:0,time:0,boundingClientRect:o,intersectionRect:o,rootBounds:o}),function(){}}var i=pR(n),a=i.id,s=i.observer,l=i.elements,u=l.get(e)||[];return l.has(e)||l.set(e,u),u.push(t),s.observe(e),function(){u.splice(u.indexOf(t),1),u.length===0&&(l.delete(e),s.unobserve(e)),l.size===0&&(s.disconnect(),zf.delete(a))}}var mR=["children","as","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView","fallbackInView"];function Jp(e){return typeof e.children!="function"}var Cc=function(e){cR(t,e);function t(r){var o;return o=e.call(this,r)||this,o.node=null,o._unobserveCb=null,o.handleNode=function(i){o.node&&(o.unobserve(),!i&&!o.props.triggerOnce&&!o.props.skip&&o.setState({inView:!!o.props.initialInView,entry:void 0})),o.node=i||null,o.observeNode()},o.handleChange=function(i,a){i&&o.props.triggerOnce&&o.unobserve(),Jp(o.props)||o.setState({inView:i,entry:a}),o.props.onChange&&o.props.onChange(i,a)},o.state={inView:!!r.initialInView,entry:void 0},o}var n=t.prototype;return n.componentDidUpdate=function(o){(o.rootMargin!==this.props.rootMargin||o.root!==this.props.root||o.threshold!==this.props.threshold||o.skip!==this.props.skip||o.trackVisibility!==this.props.trackVisibility||o.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())},n.componentWillUnmount=function(){this.unobserve(),this.node=null},n.observeNode=function(){if(!(!this.node||this.props.skip)){var o=this.props,i=o.threshold,a=o.root,s=o.rootMargin,l=o.trackVisibility,u=o.delay,d=o.fallbackInView;this._unobserveCb=E1(this.node,this.handleChange,{threshold:i,root:a,rootMargin:s,trackVisibility:l,delay:u},d)}},n.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},n.render=function(){if(!Jp(this.props)){var o=this.state,i=o.inView,a=o.entry;return this.props.children({inView:i,entry:a,ref:this.handleNode})}var s=this.props,l=s.children,u=s.as,d=uR(s,mR);return p.createElement(u||"div",If({ref:this.handleNode},d),l)},t}(p.Component);Cc.displayName="InView";Cc.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1};function gR(e){var t=e===void 0?{}:e,n=t.threshold,r=t.delay,o=t.trackVisibility,i=t.rootMargin,a=t.root,s=t.triggerOnce,l=t.skip,u=t.initialInView,d=t.fallbackInView,f=p.useRef(),h=p.useState({inView:!!u}),y=h[0],x=h[1],g=p.useCallback(function(v){f.current!==void 0&&(f.current(),f.current=void 0),!l&&v&&(f.current=E1(v,function(m,w){x({inView:m,entry:w}),w.isIntersecting&&s&&f.current&&(f.current(),f.current=void 0)},{root:a,rootMargin:i,threshold:n,trackVisibility:o,delay:r},d))},[Array.isArray(n)?n.toString():n,a,i,s,l,o,d,r]);p.useEffect(function(){!f.current&&y.entry&&!s&&!l&&x({inView:!!u})});var b=[g,y.inView,y.entry];return b.ref=b[0],b.inView=b[1],b.entry=b[2],b}const vR=Object.freeze(Object.defineProperty({__proto__:null,InView:Cc,default:Cc,defaultFallbackInView:dR,observe:E1,useInView:gR},Symbol.toStringTag,{value:"Module"})),yR=x6(vR);Cu.__esModule=!0;Cu.default=void 0;var Mr=k1(p),Ye=k1(Oy),Sl=k1(Iy),xR=yR;function k1(e){return e&&e.__esModule?e:{default:e}}const Vy=({children:e="",className:t="",contentArrowStyle:n=null,contentStyle:r=null,date:o="",dateClassName:i="",icon:a=null,iconClassName:s="",iconOnClick:l=null,onTimelineElementClick:u=null,iconStyle:d=null,id:f="",position:h="",style:y=null,textClassName:x="",intersectionObserverProps:g={rootMargin:"0px 0px -40px 0px",triggerOnce:!0},visible:b=!1})=>Mr.default.createElement(xR.InView,g,({inView:v,ref:m})=>Mr.default.createElement("div",{ref:m,id:f,className:(0,Sl.default)(t,"vertical-timeline-element",{"vertical-timeline-element--left":h==="left","vertical-timeline-element--right":h==="right","vertical-timeline-element--no-children":e===""}),style:y},Mr.default.createElement(Mr.default.Fragment,null,Mr.default.createElement("span",{style:d,onClick:l,className:(0,Sl.default)(s,"vertical-timeline-element-icon",{"bounce-in":v||b,"is-hidden":!(v||b)})},a),Mr.default.createElement("div",{style:r,onClick:u,className:(0,Sl.default)(x,"vertical-timeline-element-content",{"bounce-in":v||b,"is-hidden":!(v||b)})},Mr.default.createElement("div",{style:n,className:"vertical-timeline-element-content-arrow"}),e,Mr.default.createElement("span",{className:(0,Sl.default)(i,"vertical-timeline-element-date")},o)))));Vy.propTypes={children:Ye.default.oneOfType([Ye.default.arrayOf(Ye.default.node),Ye.default.node]),className:Ye.default.string,contentArrowStyle:Ye.default.shape({}),contentStyle:Ye.default.shape({}),date:Ye.default.node,dateClassName:Ye.default.string,icon:Ye.default.element,iconClassName:Ye.default.string,iconStyle:Ye.default.shape({}),iconOnClick:Ye.default.func,onTimelineElementClick:Ye.default.func,id:Ye.default.string,position:Ye.default.string,style:Ye.default.shape({}),textClassName:Ye.default.string,visible:Ye.default.bool,intersectionObserverProps:Ye.default.shape({root:Ye.default.object,rootMargin:Ye.default.string,threshold:Ye.default.number,triggerOnce:Ye.default.bool})};var wR=Vy;Cu.default=wR;var Eu={VerticalTimeline:_u.default,VerticalTimelineElement:Cu.default};const bR=[{image:My,position:"Freelance Software Developer",company:"Fingertips",link:"https://fingertips18.github.io",setup:"Remote",date:"July 2022 – June 2024",highlights:["Developed and deployed 5+ custom mobile applications for Android using Flutter and 5+ web applications using React Frameworks, enhancing user engagement and client satisfaction.","Designed and implemented responsive web applications with HTML, CSS and Javascript with React framework for local clients.","Integrated third-party APIs (oauth, mapping services, etc.) and conducted thorough testing, ensuring high performance and security.","Collaborated with clients to gather requirements, deliver projects within the timelines and budgets, and provided ongoing maintenance, resulting in 95% client retention."],skills:["Android Development","Web Development","Web Design","Frontend Development","Backed Development","React JS","Next JS","Express JS","MongoDB","Clerk","Vercel","Netlify","Github Pages","Tailwind CSS","Figma","Photoshop","MVC","REST API","Rive","Unity","Tensorflow","Tflite"]},{image:Fj,position:"Mobile Application Developer",company:"GotWork Digital",link:"https://gotwork.digital",setup:"Remote",date:"May 2023 – April 2024",highlights:["Transitioned MindFree application to Flutter from its previous tech stack, implementing 8 intricate user interface designs from Figma, resulting in a 20% boost in user satisfaction.","Developed applications using Feature First Clean Architecture, leveraging Riverpod and Bloc for robust state management, adhering to industry best practices.","Enhanced app functionality through regular software updates and integration of new dependencies, consistently delivering new features and improvements.","Actively collaborated with a senior software engineer, gaining valuable mentorship, and contributed to team success by sharing updates and insights in weekly meetings."],skills:["Flutter","Firebase","Cloud Firestore","Supabase","Trello","Bloc","Riverpod","GoRouter","GetIt","Figma","Bitbucket","Unit Testing","Clean Architecture","MVVM","REST API"]},{image:zj,position:"Software Developer",company:"Convocade",link:"https://www.facebook.com/Convocade",setup:"Remote",date:"July 2022 – January 2023",highlights:["Developed a web app using ReactJS and was migrated to NextJS for advance features, enabling businesses to hire influencers for advertisement, connecting over 3+ businesses with influencers.","Implemented dynamic features like monthly influencer rotation and influencer of the week, enhancing user engagement and platform activity by 35%.","Created a seamless booking system for influencers and businesses, prioritizing popular influencers while providing flexibility for lesser- known influencers to gain exposure, optimizing the hiring process for all parties involved.","Developed a dynamic landing page to assist 100+ eligible military spouses in obtaining professional credentials, facilitating their career advancement.","Developed a music player web app to showcase over 3+ tracks produced by Aquilarie, enhancing their online presence and audience reach."],subCompanies:[{company:"MyCAA Grant Assist",image:Bj,link:"https://mycaagrant.com"},{company:"Aquilarie",image:$j,link:"https://spotify.com/artist/2F2fMy2GAqcw2k7fk97kSk"}],skills:["React JS","Next JS","Tailwind CSS","Redux JS","Zustand","Express JS","Uploadthing","Clerk","Framer Motion","GSAP","Figma","Zod","React Hook Form","Shadcn UI"]},{image:Vj,position:"Full-Stack Developer Intern",company:"USM Graduate School",link:"https://www.usm.edu.ph/academics/graduate-school",setup:"On-site",date:"January 2021 – June 2021",highlights:["Led the development of the Mastivity Web Application for USM Graduate School Faculty, managing both Frontend and Backend, resulting in a 20% increase in user engagement.","Conducted regular software updates and delivered comprehensive presentations of the web application, ensuring stakeholders were updated and satisfied with the system's progress.","Maintained an active presence, dedicating 8 hours in-office daily and continued work remotely, contributing to 95% uptime and reliability of the system.","Enhanced skill set by mastering ASP.NET Core and Angular framework, resulting in a 30% improvement in development efficiency and project completion time."],skills:["ASP.Net Core","Angular","Angular Material","Azure","MSSQL Server","Swagger API","Entity Framework (EF) Core","Bootstrap","SCSS","HTML","JSON Web Token (JWT)"]}],SR=su("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function Eo({className:e,variant:t,...n}){return c.jsx("div",{className:ue(SR({variant:t}),e),...n})}const _R=({image:e,position:t,company:n,link:r,setup:o,date:i,highlights:a,skills:s,subCompanies:l})=>c.jsxs(Eu.VerticalTimelineElement,{contentStyle:{background:"hsl(var(--secondary) / 0.2)",border:"1px solid hsl(var(--secondary) / 0.5)",color:"hsl(var(--secondary-foreground))",display:"flex",flexDirection:"column",boxShadow:"hsl(var(--primary) / 0.2) 0px 4px 24px",borderRadius:"8px"},contentArrowStyle:{borderRight:"8px solid hsl(var(--secondary) / 0.8)"},date:i,iconStyle:{boxShadow:"hsl(var(--primary)) 0px 4px 24px",outline:"2px solid hsl(var(--primary))"},icon:r?c.jsx(Pt,{to:r,target:"_blank",children:c.jsx("img",{src:e,alt:n,className:"rounded-full w-full h-full border object-cover cursor-pointer"})}):c.jsx("img",{src:e,alt:n,className:"rounded-full w-full h-full border object-cover"}),children:[c.jsxs("div",{className:"flex items-start gap-x-4",children:[c.jsx("img",{src:e,alt:"company",className:"rounded-sm drop-shadow-primary-glow h-16 w-16 object-cover"}),c.jsxs("div",{className:"leading-none",children:[c.jsx("h3",{className:"font-bold",children:t}),c.jsx("h4",{className:"text-sm text-secondary-foreground/80",children:n}),c.jsx("h5",{className:"text-xs text-secondary-foreground/40",children:i}),c.jsx("h6",{className:"text-xs text-secondary-foreground/40",children:o})]})]}),c.jsx("div",{className:"flex flex-col items-start space-y-2",children:a.map(u=>c.jsxs("p",{className:"!text-sm text-muted-foreground",children:["— ",u]},u))}),l&&c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Sub-Companies"}),c.jsx("div",{className:"flex item-start flex-wrap gap-2.5 lg:gap-6 mt-4",children:l.map(u=>c.jsxs(Pt,{to:u.link,className:"flex-center gap-x-2 text-xs text-secondary-foreground/80",children:[c.jsx("div",{style:{boxShadow:"hsl(var(--primary)) 0px 4px 24px"},className:"rounded-full h-6 w-6 bg-white overflow-hidden flex-center p-0.5",children:c.jsx("img",{src:u.image,alt:u.company,className:"w-full h-full object-scale-down"})}),u.company]},`${u.company}-${u}`))})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Skills Gained"}),c.jsx("div",{className:"flex item-start flex-wrap gap-1.5 mt-4",children:s.map(u=>c.jsx(Eo,{children:u},`${n}-${u}`))})]})]}),CR=()=>c.jsxs("section",{className:ue("min-h-dvh flex items-center flex-col gap-y-2 lg:gap-y-6 border-b pt-14 pb-6 px-2 lg:px-0",po.rootSection),id:lt.experience,children:[c.jsxs("div",{className:"flex items-center gap-x-2 w-full pt-6 lg:relative",children:[c.jsx("span",{className:"w-[32px] lg:w-[128px] h-1 rounded-full bg-muted-foreground tracking-widest"}),c.jsx("h2",{className:"text-lg lg:text-4xl font-bold",children:"WORK EXPERIENCE"}),c.jsx(Y9,{className:"w-5 lg:w-8 h-5 lg:h-8 sm:absolute xs:right-6 lg:right-0 opacity-50"})]}),c.jsx("p",{className:"text-xs lg:text-sm text-muted-foreground text-center lg:mt-2 w-3/4 lg:w-full",children:"Here are details of my experience as a software developer, including my roles across various companies and projects."}),c.jsx(Eu.VerticalTimeline,{lineColor:"hsl(var(--foreground) / 0.6)",className:"mt-4 lg:mt-20",children:bR.map(e=>c.jsx(_R,{...e},e.company))})]}),ER=[{source:"https://www.usm.edu.ph",name:"University of Southern Mindanao",logo:Gj,department:"College of Engineering and Information Technology",date:"August 2019 - June 2023",honor:"Cum Laude",desc:"I graduated from the University of Southern Mindanao (USM) with a Bachelor's degree in Computer Science, achieving Cum Laude with a GPA of 1.67. During my time at USM, I actively participated in the in-house review, representing my thesis study. I was also a member of the Philippine Society of Information Technology (PSIT), which enriched my academic experience. My coursework included Data Structures and Algorithms, Time Complexity, Software Engineering, Networking, and Artificial Intelligence, among other advanced topics.",study:{title:"Luminous: A heart rate-based horror adventure game using A* pathfinding algorithm",desc:"Luminous is a story-based horror-adventure game that I created in Unity for my undergraduate thesis. The study mainly focused on AI (artificial intelligence) and provided a unique mechanism for tracking the player's location based on their heart rate. The objectives of this study were to use the player’s heart rate as the heuristic value in the A* algorithm, implement an enemy-tracking mechanic based on the heart rate-based heuristics, and determine its accuracy against the default A* algorithm.",stack:["Unity","A*","C#","HypeRate","Photoshop","Blender","Audacity"],demo:"https://www.youtube.com/watch?v=7zYUk5x-B40"},projects:[{title:"Mastivity",desc:"As per my OJT requirement, we were tasked with creating a system dedicated to our assigned department. I was assigned to graduate school; thus, I created a system that boosts masters productivity and will help them with their daily endeavors.",stack:["Bootstrap","Angular",".Net Core","Entity Framework","Swagger API","MSSQL","Azure","Netlify"],demo:"https://www.youtube.com/watch?v=OUnh-eysJrM"},{title:"Document Request System",desc:"This was a system that I made for the HR department at USM for generating documents based on user requests by filling out an online form provided by the system.",stack:["Bootstrap","Angular",".Net Core","Entity Framework","Swagger API","MSSQL","Azure","Netlify"],demo:"https://www.youtube.com/watch?v=jkJ1Z9-yHYU"},{title:"Faculty Competency System",desc:"This was a system that I made for the HRDMO to assess the competency level of the faculty members.",stack:["Bootstrap",".Net Blazor","Entity Framework","Swagger API","MSSQL","Azure","Netlify"]}],type:_a.college},{source:"https://www.facebook.com/MatanaoNHS",name:"Matanao National High School",logo:Yp,department:"Senior - Information and Communication Technology (ICT) Strand",date:"June 2017 - April 2019",honor:"With High Honors",desc:"I graduated from Matanao National High School (MNHS) - Senior High with the distinction of With High Honors. This achievement reflects my dedication and commitment to academic excellence throughout my senior high school years.",type:_a.seniorHigh},{source:"https://www.facebook.com/MatanaoNHS",name:"Matanao National High School",logo:Yp,department:"Junior - Science, Technology, Engineering and Mathematics",date:"August 2013 - June 2017",honor:"With Honors",desc:"I completed my junior high school education at Matanao National High School (MNHS), graduating with the distinction of With Honors. This recognition highlights my consistent academic performance and dedication during those formative years.",type:_a.juniorHigh},{source:"https://www.facebook.com/p/DepEd-Tayo-Youth-Formation-Ceboza-Elementary-School-100079755368493/?_rdr",name:"Ceboza Matanao Elementary School",logo:Kj,sub:{name:"Kapitan Tomas Monteverde Sr. Central Elementary School",desc:"Grade 1 - 5",logo:Zj},date:"June 2007 - March 2013",honor:"Valedictorian",desc:"I began my elementary education at Kapital Tomas Monteverde Sr. Central Elementary School, and later transferred to Ceboza Matanao Elementary School in Grade 5. I graduated from Ceboza Matanao Elementary School as the class Valedictorian, an honor that reflects my commitment to academic excellence from an early age.",type:_a.elementary}],kR=({source:e,name:t,logo:n,sub:r,department:o,date:i,honor:a,desc:s,study:l,projects:u})=>c.jsxs(Eu.VerticalTimelineElement,{contentStyle:{background:"hsl(var(--secondary) / 0.2)",border:"1px solid hsl(var(--secondary) / 0.5)",color:"hsl(var(--secondary-foreground))",display:"flex",flexDirection:"column",boxShadow:"hsl(var(--primary) / 0.2) 0px 4px 24px",borderRadius:"8px"},contentArrowStyle:{borderRight:"8px solid hsl(var(--secondary) / 0.8)"},date:i,iconStyle:{backgroundColor:"#FFF",boxShadow:"hsl(var(--primary)) 0px 4px 24px",outline:"2px solid hsl(var(--primary))"},icon:c.jsx(Pt,{to:e,target:"_blank",children:c.jsx("img",{src:n,alt:t,className:"rounded-full w-full h-full object-cover scale-90"})}),children:[c.jsxs("div",{className:"flex items-start gap-x-4",children:[c.jsx("img",{src:n,alt:t,className:"rounded-sm drop-shadow-primary-glow h-16 w-16 object-cover"}),c.jsxs("div",{className:"leading-tight space-y-0.5",children:[c.jsx("h3",{className:"font-bold",children:t}),c.jsx("h4",{className:"text-sm text-secondary-foreground/80",children:o}),c.jsx("h5",{className:"text-sm text-secondary-foreground/40",children:i}),c.jsx("h6",{className:"text-xs text-secondary-foreground/40 font-semibold",children:a})]})]}),r&&c.jsxs("div",{className:"flex gap-x-4 mt-2",children:[c.jsx("img",{src:r.logo,alt:r.name,className:"rounded-sm drop-shadow-primary-glow h-16 w-16 object-cover"}),c.jsxs("div",{className:"leading-tight space-y-0.5",children:[c.jsx("h3",{className:"font-bold",children:r.name}),c.jsx("h6",{className:"text-xs text-secondary-foreground/40 font-semibold",children:r.desc})]})]}),c.jsx("p",{className:"!text-sm text-muted-foreground",children:s}),l&&c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Thesis Study"}),c.jsx("h5",{className:"!text-sm !font-normal text-foreground/80",children:l.title}),c.jsx("p",{className:"!text-xs text-muted-foreground",children:l.desc}),c.jsx("div",{className:"flex items-start flex-wrap gap-1",children:l.stack.map(d=>c.jsx(Eo,{className:"bg-background/50",children:d},d))}),c.jsx(Pt,{to:l.demo,target:"_blank",children:c.jsxs(Eo,{className:"bg-secondary/20 whitespace-nowrap gap-x-2 py-1 px-2.5 cursor-pointer w-fit mt-2",children:[c.jsx(Kp,{color:Lf,className:"w-4 h-4"}),l.title.split(" ")[0].replace(":","")," Demo"]})})]}),u&&c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("p",{className:"!font-semibold !text-sm",children:"Projects"}),c.jsx("div",{className:"space-y-2.5 mt-4",children:u.map(d=>c.jsxs("div",{className:"space-y-2",children:[c.jsx("h5",{className:"!text-sm !font-bold text-foreground/80",children:d.title}),c.jsx("p",{className:"!text-xs text-muted-foreground !m-0",children:d.desc}),c.jsx("div",{className:"flex items-start flex-wrap gap-1",children:d.stack.map(f=>c.jsx(Eo,{className:"bg-background/50",children:f},f))}),d.demo&&c.jsx(Pt,{to:d.demo,target:"_blank",children:c.jsxs(Eo,{className:"bg-secondary/20 whitespace-nowrap gap-x-2 py-1 px-2.5 cursor-pointer w-fit mt-1.5",children:[c.jsx(Kp,{color:Lf,className:"w-4 h-4"}),d.title," Demo"]},d.title)})]},d.title))})]})]}),jR=()=>c.jsxs("section",{className:ue("min-h-dvh flex flex-col gap-y-2 lg:gap-y-6 border-b pt-14 pb-6 px-2 lg:px-0",po.rootSection),id:lt.education,children:[c.jsxs("div",{className:"flex items-center gap-x-2 w-full pt-6 lg:relative",children:[c.jsx("span",{className:"w-[32px] lg:w-[128px] h-1 rounded-full bg-muted-foreground tracking-widest"}),c.jsx("h2",{className:"text-lg lg:text-4xl font-bold",children:"EDUCATION"}),c.jsx(q9,{className:"w-5 lg:w-8 h-5 lg:h-8 sm:absolute xs:right-6 lg:right-0 opacity-50"})]}),c.jsx("p",{className:"text-xs lg:text-sm text-muted-foreground text-center lg:mt-2 w-3/4 mx-auto",children:"Throughout my academic journey, each experience has played a distinct role in my development. Here’s an overview of the key milestones in my educational path."}),c.jsx(Eu.VerticalTimeline,{lineColor:"hsl(var(--foreground) / 0.6)",className:"mt-4 lg:mt-20",children:ER.map((e,t)=>c.jsx(kR,{...e},`${e.name}-${t}`))})]}),RR="LvRCe{t8.TWAo}a|jEj[x]V@Rjoz",NR="L5Db.:Y800ve|TwZ9|9wIonho#-;",TR="LkMa3JRk~X%2ofayayoLxuoeRiR*",MR="L9P%bT~n-:9J-;RjV@t70Fnz?6R;",PR="LVKeN5?b_N4mRjoft7fQkrV@Vskq",$y="https://forms.gle/PFHoohMazvKMeKCh7",AR=[{source:"https://www.youtube.com/embed/SBOBtfs9XiI?si=vpB3x8Mg3x4F2ipa",name:"Tweetch",subtitle:"(Twitch Clone 🎮)",desc:"Tweetch is a Twitch clone crafted with personal preferences in mind. Designed to emulate the popular live streaming platform, this project aims to provide a familiar experience while incorporating custom features and enhancements tailored to individual needs.",stack:["Next JS","Supabase","Prisma ORM","Livekit","Clerk","Zustand","Shadcn UI","React Hook Form","Uploadthing","Zod","Next Themes","Tailwind CSS"],type:Rn.web,live:"https://tweetch.vercel.app"},{source:"https://www.youtube.com/embed/pWdMyb9P70I?si=ZZvSe9ja1Ax-3-U1",name:"GrainGuru",subtitle:"(Rice Price Forecaster 🌾)",desc:"Leveraging an LSTM model, I developed a web application that compares and forecasts the current and future prices of different rice varieties in Cotabato.",stack:["Tensorflow JS","React JS","Express JS","MongoDB","Clerk","Prisma ORM","Zustand","Tailwind CSS","Shadcn UI","React Hook Form","Uploadthing","Zod"],type:Rn.web,live:"https://grainguru.vercel.app"},{source:"https://www.youtube.com/embed/yada96hMy48?si=MkaDE6ltknpxi8Pm",name:"ScrollWheel Date Picker",subtitle:"(Flutter Package 📅)",desc:"I developed a Flutter package that offers a unique, scrollable, and flat perspective wheel-type date picker, inspired by the sleek design seen in TikTok. This package allows developers to easily integrate an intuitive and visually appealing date picker into their Flutter applications. The date picker is fully customizable, providing smooth scrolling and a modern, flat design that enhances the user experience. It's perfect for applications where a stylish and user-friendly date selection is essential.",stack:["Dart","Flutter","Pub Dev","Change Notifier"],type:Rn.web,live:"https://pub.dev/packages/scroll_wheel_date_picker"},{source:Uj,blurHash:TR,name:"TriTok",subtitle:"(TikTok Clone 🎥)",desc:"A clone application of TikTok made in Flutter. The idea was to create a modified version of TikTok by including and removing some of the features based on personal preference.",stack:["Flutter","Firebase","Firebase Auth","Firebase Storage","Cloud Firestore","Bloc","Pexels API","Go Router","GetIt","Dio","Retrofit","Secure Storage"],type:Rn.mobile},{source:Hj,blurHash:MR,name:"Leafonic",subtitle:"(Corynespora Leaf Disease Detector 🌿)",desc:"I developed a mobile application using a Convolutional Neural Network (CNN) powered by TensorFlow to classify the health of 𝗥𝘂𝗯𝗯𝗲𝗿 𝗧𝗿𝗲𝗲 𝗟𝗲𝗮𝘃𝗲𝘀 (𝘏𝘦𝘷𝘦𝘢 𝘣𝘳𝘢𝘴𝘪𝘭𝘪𝘦𝘯𝘴𝘪𝘴). The app precisely detects whether a leaf is healthy or afflicted with 𝘊𝘰𝘳𝘺𝘯𝘦𝘴𝘱𝘰𝘳𝘢 disease, utilizing CNNs for accurate image recognition. This technology-driven tool enhances early disease detection and supports farmers in maintaining healthier crops.",stack:["Flutter","Tensorflow","Tflite","Image processing","Convolutional Neural Network (CNN)"],type:Rn.mobile},{source:Wj,blurHash:PR,name:"FlixSage",subtitle:"(Movie or Any Show Guesser 🪄)",desc:"With FlixSage, users can effortlessly upload an image related to a movie, whether it's a poster, screenshot, or promotional still. Once uploaded, the app employs advanced image recognition algorithms to identify the title, cast members, synopsis, and other pertinent information associated with the movie depicted in the image. This seamless process eliminates the need for manual searching and typing, providing users with instant access to comprehensive details about the movie they're interested in. Whether you're browsing through your photo gallery or stumbling upon intriguing movie visuals online, FlixSage ensures that you have all the essential information at your fingertips, making your movie-watching experience more informed and enjoyable.",stack:["Flutter","Firebase","Bloc","AI","GetIt","Go Router","Object Box"],type:Rn.mobile}];var By="AlertDialog",[DR,RM]=ho(By,[cy]),Cr=cy(),Uy=e=>{const{__scopeAlertDialog:t,...n}=e,r=Cr(t);return c.jsx(b1,{...r,...n,modal:!0})};Uy.displayName=By;var OR="AlertDialogTrigger",Hy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(S1,{...o,...r,ref:t})});Hy.displayName=OR;var LR="AlertDialogPortal",Wy=e=>{const{__scopeAlertDialog:t,...n}=e,r=Cr(t);return c.jsx(_1,{...r,...n})};Wy.displayName=LR;var IR="AlertDialogOverlay",Gy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(Fs,{...o,...r,ref:t})});Gy.displayName=IR;var Ti="AlertDialogContent",[FR,zR]=DR(Ti),Zy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,children:r,...o}=e,i=Cr(n),a=p.useRef(null),s=ut(t,a),l=p.useRef(null);return c.jsx(lj,{contentName:Ti,titleName:Ky,docsSlug:"alert-dialog",children:c.jsx(FR,{scope:n,cancelRef:l,children:c.jsxs(zs,{role:"alertdialog",...i,...o,ref:s,onOpenAutoFocus:ye(o.onOpenAutoFocus,u=>{var d;u.preventDefault(),(d=l.current)==null||d.focus({preventScroll:!0})}),onPointerDownOutside:u=>u.preventDefault(),onInteractOutside:u=>u.preventDefault(),children:[c.jsx(Z0,{children:r}),c.jsx($R,{contentRef:a})]})})})});Zy.displayName=Ti;var Ky="AlertDialogTitle",Yy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(Vs,{...o,...r,ref:t})});Yy.displayName=Ky;var Qy="AlertDialogDescription",Jy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx($s,{...o,...r,ref:t})});Jy.displayName=Qy;var VR="AlertDialogAction",Xy=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,o=Cr(n);return c.jsx(Su,{...o,...r,ref:t})});Xy.displayName=VR;var qy="AlertDialogCancel",e5=p.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,{cancelRef:o}=zR(qy,n),i=Cr(n),a=ut(t,o);return c.jsx(Su,{...i,...r,ref:a})});e5.displayName=qy;var $R=({contentRef:e})=>{const t=`\`${Ti}\` requires a description for the component to be accessible for screen reader users. You can add a description to the \`${Ti}\` by passing a \`${Qy}\` component as a child, which also benefits sighted users by adding visible context to the dialog. diff --git a/banner.png b/banner.png new file mode 100644 index 0000000..67703a8 Binary files /dev/null and b/banner.png differ diff --git a/index.html b/index.html index b62c274..b037de8 100644 --- a/index.html +++ b/index.html @@ -4,9 +4,10 @@ + Ghian Carlos Tan - Ghian Carlos Tan - +