diff --git a/src/content.cpp b/src/content.cpp index 0ce8986..c581dae 100644 --- a/src/content.cpp +++ b/src/content.cpp @@ -19,161 +19,173 @@ const auto hacker_button_active_style = color(Color::LightGreen) | bold; // Pages // ------------------ -Component MakeAboutPage() { - return Renderer([]() -> Element { - return vbox({ - vbox({ - text("Keshav Anand") | color(Color::LightGreen) | bold | center, - text("Student Researcher | ML + Robotics Developer | CS + Math Enthusiast") | hacker_text_style | center, - }) | hacker_border_style, +Component MakeAboutPage() +{ + return Renderer([]() -> Element + { return vbox({ + vbox({ + text("Keshav Anand") | color(Color::LightGreen) | bold | center, + text("Student Researcher | ML + Robotics Developer | CS Enthusiast") | hacker_text_style | center, + }) | hacker_border_style, - }) | flex; - }); + }) | + flex; }); } -Component MakeProjectsPage() { +Component MakeProjectsPage() +{ const std::vector> projects = { - {"🧠 GaitGuardian: IMU Processing for Parkinson’s Disease (2024–Present)", - "• Hybrid biLSTM + CNN model for Freezing of Gait prediction\n" - "• Signal segmentation reduces subject dependence\n" - "• State-of-the-art accuracy, end-to-end functionality"}, - {"🔥 TEG-Powered Self-Stirring Device (2023–2024)", - "• Built thermal energy harvesting prototype for self-stirring cookware\n" - "• Developed mechanical + electrical integration\n" - "• Won 1st at Dallas Fair, ISEF Finalist"}, - {"🤖 FTC Technical Turbulence (23344) — Lead Software Developer (2023–Present)", - "• Custom inverse kinematics, pathing, and Computer Vision autonomy\n" - "• Top-30 globally for software performance, FTC State Finalist"}, + {"GaitGuardian: IMU Processing for Parkinson’s Disease (2024–Present)", + "• Python project for data processing and machine learning\n" + "• Hybrid biLSTM + CNN model for Freezing of Gait prediction\n" + "• Signal filtering and preprocessing reduces subject dependence\n" + "• High accuracy, end-to-end functionality"}, + {"TEG-Powered Self-Stirring Device (2023–2024)", + "• Built thermal energy harvesting prototype for self-stirring cookware\n" + "• Developed mechanical + electrical integration\n" + "• Won 1st at Dallas Fair, ISEF Finalist"}, + {"FTC Technical Turbulence (23344) — Lead Software Developer (2023–Present)", + "• Custom inverse kinematics, pathing, and Computer Vision autonomy\n" + "• Top-30 globally for software performance, FTC State Finalist"}, + {"Self Hosted Server — (2025-Present)", + "• Started full-time Ubuntu Server on old Chromebook\n" + "• Hosting Git, Music, Nginx, SSH (this), Immich, SMB, Glance, Cinny"}, + {"Terminal Interactive Portfolio GUI (This)", + "• C++ Application using FTXUI to create shell interactive\n" + "• Created hardened passwordless user to allow ssh access"}, }; Component container = Container::Vertical({}); - for (auto& p : projects) { - Component card = Renderer([p]() -> Element { - return vbox({ - text(p.first) | color(Color::LightGreen) | bold, - paragraph(p.second) | hacker_text_style, - }) | hacker_border_style; - }); + for (auto &p : projects) + { + Component card = Renderer([p]() -> Element + { return vbox({ + text(p.first) | color(Color::LightGreen) | bold, + paragraph(p.second) | hacker_text_style, + }) | + hacker_border_style; }); container->Add(card); } - return Renderer(container, [container]() -> Element { - return vbox(container->Render()) | vscroll_indicator | yframe | flex; - }); + return Renderer(container, [container]() -> Element + { return vbox(container->Render()) | vscroll_indicator | yframe | flex; }); } -Component MakeEducationPage() { - return Renderer([]() -> Element { - return vbox({ - vbox({ - text("🏫 Plano East Senior High School (2023–2027)") | color(Color::LightGreen) | bold, - text("STEM & Multidisciplinary Endorsement") | hacker_text_style, - text("GPA: 4.73 | Rank: 1/1273 | SAT: 1550") | hacker_text_style, - }) | hacker_border_style, +Component MakeEducationPage() +{ + return Renderer([]() -> Element + { return vbox({ + vbox({ + text("Plano East Senior High School (2023–2027)") | color(Color::LightGreen) | bold, + text("STEM & Multidisciplinary Endorsement") | hacker_text_style, + text("GPA: 4.79, 4.0 Unweighted | Rank: 2/1225 | SAT: 1550 | ACT 36") | hacker_text_style, + }) | hacker_border_style, - separator(), + separator(), - vbox({ - text("📚 Current Coursework:") | color(Color::LightGreen) | bold, - text("• AP Chemistry") | hacker_text_style, - text("• AP Physics I") | hacker_text_style, - text("• Digital Electronics") | hacker_text_style, - text("• American Studies (AP US History + AP English Language)") | hacker_text_style, - text("• Differential Equations (via Collin College)") | hacker_text_style, - }) | hacker_border_style, - }) | flex; - }); + vbox({ + text("Current Coursework:") | color(Color::LightGreen) | bold, + text("• AP Chemistry") | hacker_text_style, + text("• AP Physics I") | hacker_text_style, + text("• Digital Electronics") | hacker_text_style, + text("• American Studies (AP US History + AP English Language)") | hacker_text_style, + text("• Differential Equations (via Collin College)") | hacker_text_style, + }) | hacker_border_style, + }) | + flex; }); } -Component MakeWorkPage() { +Component MakeWorkPage() +{ const std::vector> activities = { - {"🧪 Vice President, LASER (Science Fair Organization)", - "Guiding and mentoring 120+ students in research and experimentation"}, - {"🤖 Lead Software, Technical Turbulence (FTC 23344)", - "Writing Java code for robot pathing, sensing, and control"}, - {"💻 Technology Officer, National Honor Society", - "Developed and maintained React-based management portal for 1000+ members"}, - {"🏏 Founder & Captain, Plano East Cricket Club", - "Established first school tapeball cricket team; coached and led events"}, - {"🎶 Indian Film Music Performer", - "Bass guitar, keys, and arrangement — member of High Octavez band"}, + {"Vice President, LASER (School Science Fair Organization)", + "Guiding and mentoring 120+ students in research and experimentation"}, + {"Lead Software, Technical Turbulence (FTC 23344)", + "Writing Java code for robot pathing, sensing, and control"}, + {"Technology Officer, National Honor Society", + "Developed and maintained React-based management portal for 1000+ members"}, + {"Founder & Captain, Plano East Cricket Club", + "Established first school tapeball cricket team; organized matches with competing schools"}, + {"Indian Film Music Performer", + "Bass guitar, keys, and arrangement — member of High Octavez band"}, }; Component container = Container::Vertical({}); - for (auto& a : activities) { - Component card = Renderer([a]() -> Element { - return vbox({ - text(a.first) | color(Color::LightGreen) | bold, - text(a.second) | hacker_text_style, - }) | hacker_border_style; - }); + for (auto &a : activities) + { + Component card = Renderer([a]() -> Element + { return vbox({ + text(a.first) | color(Color::LightGreen) | bold, + text(a.second) | hacker_text_style, + }) | + hacker_border_style; }); container->Add(card); } - return Renderer(container, [container]() -> Element { - return vbox(container->Render()) | vscroll_indicator | yframe | flex; - }); + return Renderer(container, [container]() -> Element + { return vbox(container->Render()) | vscroll_indicator | yframe | flex; }); } -Component MakeAwardsPage() { +Component MakeAwardsPage() +{ const std::vector> awards = { - {"🥇 Thermoelectric Generator Research Project (2024)", - "Dallas Fair: 1st in Engineering | USAF Recognition | USMA Best SI Units\nISEF Finalist"}, - {"🥈 GaitGuardian ML Research (2025)", - "Dallas Fair: 1st in Systems Software, Grand Prize Runner-Up\nISEF Finalist | 3rd in Robotics & Intelligent Systems"}, - {"🏅 National Speech & Debate (2025)", - "Impromptu Quarterfinalist at District and State Level"}, + {"Thermoelectric Generator Research Project (2024)", + "Dallas Fair: 1st in Engineering | USAF Recognition | USMA Best SI Units\nISEF Finalist"}, + {"GaitGuardian ML Research (2025)", + "Dallas Fair: 1st in Systems Software, Grand Prize Runner-Up\nISEF Finalist | 3rd in Robotics & Intelligent Systems"}, + {"National Speech & Debate (2025)", + "Impromptu Quarterfinalist at National and State Level"}, + {"FTC Robotics — Technical Turbulence", + "2024 TX State Finalist, Area Innovate Award Winner\n2025 NTX Area Finalist Captain, Michiana Control Award (SW)"}, }; Component container = Container::Vertical({}); - for (auto& a : awards) { - Component card = Renderer([a]() -> Element { - return vbox({ - text(a.first) | color(Color::LightGreen) | bold, - paragraph(a.second) | hacker_text_style, - }) | hacker_border_style; - }); + for (auto &a : awards) + { + Component card = Renderer([a]() -> Element + { return vbox({ + text(a.first) | color(Color::LightGreen) | bold, + paragraph(a.second) | hacker_text_style, + }) | + hacker_border_style; }); container->Add(card); } - return Renderer(container, [container]() -> Element { - return vbox(container->Render()) | vscroll_indicator | yframe | flex; - }); + return Renderer(container, [container]() -> Element + { return vbox(container->Render()) | vscroll_indicator | yframe | flex; }); } -Component MakeSkillsPage() { +Component MakeSkillsPage() +{ const std::string skills = - "💻 Programming Languages:\n" - " Java, Python, C++ (Arduino), Kotlin (FTC), limited HTML/CSS/JS\n\n" - "🧠 Applications:\n" - " Machine Learning, Signal Processing, TensorFlow, Computer Vision\n\n" - "⚙️ Miscellaneous:\n" + "Programming Languages:\n" + " Java, Python, C++, Kotlin (FTC), Rust (WIP), limited HTML/CSS/JS\n\n" + "Applications:\n" + " Machine Learning, Signal Processing, TensorFlow, Computer Vision, Sever Management\n\n" + "Miscellaneous:\n" " Public Speaking, CAD, LaTeX, PCB Design, Electrical Systems, Competition Math"; - return Renderer([skills]() -> Element { - return paragraph(skills) | hacker_text_style | flex; - }); - + return Renderer([skills]() -> Element + { return paragraph(skills) | hacker_text_style | flex; }); } - - -Component MakeContactPage() { +Component MakeContactPage() +{ const std::string contact_info = - "📫 Email: keshavanandofficial@gmail.com\n" - "🔗 LinkedIn: linkedin.com/in/keshavganand\n" - "💻 GitHub: git.keshavanand.net/KeshavAnandCode\n" - "🌐 Resume: resume.keshavanand.net\n" - "📍 DFW Metroplex, Texas\n\n" - "Updated: November 2025"; + "Email: keshavanand.dev@gmail.com\n" + "LinkedIn: linkedin.com/in/keshavganand\n" + "GitHub: git.keshavanand.net/KeshavAnandCode\n" + "Resume: resume.keshavanand.net\n" + "DFW Metroplex, Texas\n\n" + "Updated: January 2026"; - return Renderer([contact_info]() -> Element { - return paragraph(contact_info) | hacker_text_style | flex; - }); + return Renderer([contact_info]() -> Element + { return paragraph(contact_info) | hacker_text_style | flex; }); } // Constructor implementation -PortfolioApp::PortfolioApp() { +PortfolioApp::PortfolioApp() +{ about_page_ = MakeAboutPage(); projects_page_ = MakeProjectsPage(); education_page_ = MakeEducationPage(); @@ -188,39 +200,46 @@ PortfolioApp::PortfolioApp() { std::vector labels = {"About", "Projects", "Education", "Activities", "Awards", "Skills", "Contact"}; std::vector buttons; - for (int i = 0; i < (int)labels.size(); ++i) { - Component button = Button(labels[i], [&, i] { SwitchPage(i); }) - | (i == current_page_ ? hacker_button_active_style : hacker_button_style); + for (int i = 0; i < (int)labels.size(); ++i) + { + Component button = Button(labels[i], [&, i] + { SwitchPage(i); }) | + (i == current_page_ ? hacker_button_active_style : hacker_button_style); buttons.push_back(button); } navigation_ = Container::Vertical(buttons); - Component separator_component = Renderer([] { return separator(); }); + Component separator_component = Renderer([] + { return separator(); }); Add(Container::Horizontal(Components{navigation_, separator_component, pages_[current_page_]})); } -void PortfolioApp::SwitchPage(int index) { +void PortfolioApp::SwitchPage(int index) +{ current_page_ = index; DetachAllChildren(); - Component separator_component = Renderer([] { return separator(); }); + Component separator_component = Renderer([] + { return separator(); }); Add(Container::Horizontal(Components{navigation_, separator_component, pages_[current_page_]})); } -Element PortfolioApp::Render() { - return hbox({ - navigation_->Render() | hacker_border_style, - separator(), - pages_[current_page_]->Render() | hacker_border_style | flex - }); +Element PortfolioApp::Render() +{ + return hbox({navigation_->Render() | hacker_border_style, + separator(), + pages_[current_page_]->Render() | hacker_border_style | flex}); } -bool PortfolioApp::OnEvent(Event event) { - if (event == Event::ArrowRight) { +bool PortfolioApp::OnEvent(Event event) +{ + if (event == Event::ArrowRight) + { SwitchPage((current_page_ + 1) % pages_.size()); return true; } - if (event == Event::ArrowLeft) { + if (event == Event::ArrowLeft) + {/. SwitchPage((current_page_ - 1 + pages_.size()) % pages_.size()); return true; }