#include #include #include #include #include #include #include "content.hpp" using namespace ftxui; // Hacker-style reusable styles const auto hacker_text_style = color(Color::Green) | bold | dim; const auto hacker_border_style = border | color(Color::Green); const auto hacker_link_style = color(Color::LightGreen) | underlined; const auto hacker_button_style = color(Color::Green) | bold; 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, }) | flex; }); } 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"}, }; 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 | dim, }) | hacker_border_style; }); container->Add(card); } 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, 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("β€’ Calculus III (via Collin College)") | hacker_text_style, }) | hacker_border_style, }) | flex; }); } Component MakeWorkPage() { const std::vector> activities = { {"πŸ§ͺ Vice President, LASER (Science Fair Organization)", "Guiding and mentoring 120+ students in research and experimentation"}, {"πŸ’» 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 & keyboard player in charity concerts; arrangement and production"}, }; 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 | dim, }) | hacker_border_style; }); container->Add(card); } return Renderer(container, [container]() -> Element { return vbox(container->Render()) | vscroll_indicator | yframe | flex; }); } 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"}, }; 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 | dim, }) | hacker_border_style; }); container->Add(card); } return Renderer(container, [container]() -> Element { return vbox(container->Render()) | vscroll_indicator | yframe | flex; }); } Component MakeSkillsPage() { const std::string skills = "πŸ’» Programming Languages:\n" " Java, Python, Bash, C++ (Arduino), Kotlin (FTC), limited HTML/CSS/JS\n\n" "🧠 Applications:\n" " Machine Learning, Signal Processing, TensorFlow, Computer Vision\n\n" "βš™οΈ Miscellaneous:\n" " Public Speaking, CAD, PCB Design, Electrical Systems, Competition Math"; return Renderer([skills]() -> Element { return paragraph(skills) | hacker_text_style | flex; }); } Component MakeContactPage() { const std::string contact_info = "πŸ“« Email: keshavanandofficial@gmail.com\n" "πŸ”— LinkedIn: linkedin.com/in/keshavganand\n" "πŸ’» GitHub: github.com/keshavanandcode\n" "🌐 Resume: resume.keshavanand.net\n" "πŸ“ DFW Metroplex, Texas\n\n" "Updated: November 2025"; return Renderer([contact_info]() -> Element { return paragraph(contact_info) | hacker_text_style | flex; }); } // Constructor implementation PortfolioApp::PortfolioApp() { about_page_ = MakeAboutPage(); projects_page_ = MakeProjectsPage(); education_page_ = MakeEducationPage(); work_page_ = MakeWorkPage(); awards_page_ = MakeAwardsPage(); skills_page_ = MakeSkillsPage(); contact_page_ = MakeContactPage(); pages_ = {about_page_, projects_page_, education_page_, work_page_, awards_page_, skills_page_, contact_page_}; 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); buttons.push_back(button); } navigation_ = Container::Vertical(buttons); Component separator_component = Renderer([] { return separator(); }); Add(Container::Horizontal(Components{navigation_, separator_component, pages_[current_page_]})); } void PortfolioApp::SwitchPage(int index) { current_page_ = index; DetachAllChildren(); 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 }); } bool PortfolioApp::OnEvent(Event event) { if (event == Event::ArrowRight) { SwitchPage((current_page_ + 1) % pages_.size()); return true; } if (event == Event::ArrowLeft) { SwitchPage((current_page_ - 1 + pages_.size()) % pages_.size()); return true; } return ComponentBase::OnEvent(event); }