Skip to content

Commit 5f1f0f6

Browse files
committed
Reorganized project structure and projects pages
1 parent 507d8ab commit 5f1f0f6

8 files changed

Lines changed: 194 additions & 123 deletions

File tree

assets/Sofia_Duarte_CV.pdf

-22.7 KB
Binary file not shown.

src/app.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
use crate::home::Home;
2-
use crate::resume::Resume;
1+
use crate::pages::home::Home;
2+
use crate::pages::projects::Projects;
3+
use crate::pages::resume::Resume;
34
use leptos::prelude::*;
45
use leptos_router::components::{Route, Router, Routes};
56
use leptos_router::path;
@@ -32,7 +33,7 @@ pub fn App() -> impl IntoView {
3233
}
3334
.container { max-width: 950px; margin: 0 auto; padding: 3rem 1.5rem; }
3435
.header { border-bottom: 2px dashed var(--pink); padding-bottom: 2rem; margin-bottom: 3rem; text-align: center; }
35-
.header h1 { color: var(--pink); font-size: clamp(2rem, 5vw, 2.8rem); margin: 0 0 0.5rem 0; line-height: 1.2; }
36+
.header h1 { color: var(--mauve); font-size: clamp(2rem, 5vw, 2.8rem); margin: 0 0 0.5rem 0; line-height: 1.2; }
3637
.header p { color: var(--subtext); font-size: 1.1rem; font-style: italic; margin: 0; }
3738
3839
/* Nav bar styling */
@@ -42,6 +43,10 @@ pub fn App() -> impl IntoView {
4243
.nav-link.home:hover { background-color: rgba(203, 166, 247, 0.1); }
4344
.nav-link.resume { color: var(--green); border: 1px solid var(--green); }
4445
.nav-link.resume:hover { background-color: rgba(166, 227, 161, 0.1); }
46+
.nav-link.projects { color: var(--red); border: 1px solid var(--red); }
47+
.nav-link.projects:hover { background-color: rgba(210, 15, 57, 0.1) }
48+
49+
4550
4651
/* Card styling reused across pages */
4752
.card { background-color: var(--mantle); border-radius: 16px; padding: 2.5rem; box-shadow: 0 4px 15px rgba(0,0,0,0.2); }
@@ -52,19 +57,21 @@ pub fn App() -> impl IntoView {
5257
<main>
5358
<div class="container">
5459
<header class="header">
55-
<h1>"✨ Sofia Duarte's Mission Control ✨"</h1>
56-
<p>"Aerospace Engineering @ IST 🚀 | RED Rocketry | Embedded Rustacean 🦀"</p>
60+
<h1>"✨ My personal Webpage ✨"</h1>
61+
<p>"Aerospace Engineering @ IST | RED Rocketry | Embedded Rustacean "</p>
5762

5863
<nav class="nav-bar">
5964
<a href="/" class="nav-link home">"👾Home"</a>
60-
<a href="/resume" class="nav-link resume">"📄 Resume"</a>
65+
<a href="/resume" class="nav-link resume">"Resume"</a>
66+
<a href="/projects" class="nav-link projects"> "Projects" </a>
6167
</nav>
6268
</header>
6369

6470
// The Routes component swaps out the page below the header!
6571
<Routes fallback=|| view! { <h2>"404 - Page not found in this orbit."</h2> }>
6672
<Route path=path!("/") view=Home />
6773
<Route path=path!("/resume") view=Resume />
74+
<Route path=path!("/projects") view=Projects />
6875
</Routes>
6976
</div>
7077
</main>

src/home.rs

Lines changed: 0 additions & 69 deletions
This file was deleted.

src/main.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
mod app;
2-
mod home;
3-
mod resume;
4-
2+
mod pages;
53
use app::App;
64
use leptos::mount::mount_to_body;
75
use leptos::prelude::*;

src/pages/home.rs

Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,69 @@
1-
use crate::components::counter_btn::Button;
21
use leptos::prelude::*;
32

4-
/// Default Home Page
53
#[component]
64
pub fn Home() -> impl IntoView {
75
view! {
8-
<ErrorBoundary fallback=|errors| {
9-
view! {
10-
<h1>"Uh oh! Something went wrong!"</h1>
11-
12-
<p>"Errors: "</p>
13-
// Render a list of errors as strings - good for development purposes
14-
<ul>
15-
{move || {
16-
errors
17-
.get()
18-
.into_iter()
19-
.map(|(_, e)| view! { <li>{e.to_string()}</li> })
20-
.collect_view()
21-
}}
22-
23-
</ul>
6+
<style>
7+
"
8+
.about { border: 2px solid var(--mauve);
9+
text-align: center;
10+
background-color: rgba(30, 30, 46, 0.55); /* Catppuccin dark base at 65% opacity */
11+
backdrop-filter: blur(5px); /* Softly blurs the Earthrise image behind the card */
12+
-webkit-backdrop-filter: blur(10px); /* Safari support (when it decides to work!) */
13+
border-radius: 16px;
14+
padding: 2rem;
15+
2416
}
25-
}>
26-
27-
<div class="container">
28-
29-
<picture>
30-
<source
31-
srcset="https://raw.githubusercontent.com/leptos-rs/leptos/main/docs/logos/Leptos_logo_pref_dark_RGB.svg"
32-
media="(prefers-color-scheme: dark)"
33-
/>
34-
<img
35-
src="https://raw.githubusercontent.com/leptos-rs/leptos/main/docs/logos/Leptos_logo_RGB.svg"
36-
alt="Leptos Logo"
37-
height="200"
38-
width="400"
39-
/>
40-
</picture>
41-
42-
<h1>"Welcome to Leptos"</h1>
43-
44-
<div class="buttons">
45-
<Button />
46-
<Button increment=5 />
17+
.about h2 { color: var(--mauve); margin: 0 0 1.5rem 0; text-align: center; font-size: 1.8rem; text-align: left }
18+
.about-text { font-size: 1.15rem; line-height: 1.7; max-width: 750px; margin: 0 auto; text-align: left; }
19+
/* Social Buttons Styling */
20+
.socials-container {
21+
display: flex;
22+
justify-content: center;
23+
gap: 1rem;
24+
margin-top: 2rem;
25+
flex-wrap: wrap;
26+
}
27+
/* New lead-in text styling */
28+
.reach-me {
29+
text-align: center;
30+
margin-top: 2.5rem;
31+
margin-bottom: 1rem;
32+
color: var(--subtext);
33+
font-size: 1.1rem;
34+
font-weight: bold;
35+
}
36+
/* Custom hover colors for each platform */
37+
.social-btn.email:hover { border-color: var(--red); color: var(--red); }
38+
.social-btn.github:hover { border-color: var(--mauve); color: var(--mauve); }
39+
.social-btn.linkedin:hover { border-color: var(--green); color: var(--green); }
40+
"
41+
</style>
42+
<section class="card about">
43+
<h2>"About Me:"</h2>
44+
<div class="about-text">
45+
<p>"Hi! I like to build backend systems, write memory-safe code for embedded devices, and develop flight software for rockets!"</p>
46+
<p>"Currently architecting hybrid rocket avionics and pushing for Rust adoption in aerospace environments."</p>
47+
</div>
48+
<div class="reach-me">
49+
<h3>"Here is how you can reach me :) "</h3>
4750
</div>
51+
<div class="socials-container">
4852

53+
<a href="mailto:sofia.vazquez.duarte@tecnico.ulisboa.pt" class="social-btn email">
54+
"Email"
55+
</a>
56+
<a href="https://github.com/sofiavldd2005" target="_blank" rel="noopener noreferrer" class="social-btn github">
57+
"GitHub"
58+
</a>
59+
<a href="https://www.linkedin.com/in/sofia-duarte-2528682a1" target="_blank" rel="noopener noreferrer" class="social-btn linkedin">
60+
"LinkedIn"
61+
</a>
62+
</div>
63+
</section>
64+
<div class="built-with">
65+
"Built with 💖 and "
66+
<a href="https://leptos.dev/" target="_blank" rel="noopener noreferrer">"Leptos"</a>
4967
</div>
50-
</ErrorBoundary>
5168
}
5269
}

src/pages/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
pub mod home;
22
pub mod not_found;
3+
pub mod projects;
4+
pub mod resume;

src/pages/projects.rs

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
use leptos::prelude::*;
2+
3+
#[component]
4+
pub fn Projects() -> impl IntoView {
5+
view! {
6+
<style>
7+
"
8+
.projects-header {
9+
text-align: center;
10+
color: var(--red);
11+
margin: 2rem 0;
12+
font-size: 2.2rem;
13+
}
14+
15+
.projects-grid {
16+
display: flex;
17+
flex-direction: column;
18+
gap: 1.5rem;
19+
margin: 0 auto 3rem auto; /* The 'auto' on left/right centers the column */
20+
max-width: 1000px; /* Keeps the cards from getting too wide on big screens */
21+
}
22+
23+
.project-card {
24+
/* Make the anchor tag behave like a block container */
25+
display: block;
26+
text-decoration: none;
27+
28+
background-color: rgba(30, 30, 46, 0.55);
29+
backdrop-filter: blur(10px);
30+
-webkit-backdrop-filter: blur(5px);
31+
border: 1px solid var(--surface-border);
32+
border-radius: 16px;
33+
padding: 1.5rem;
34+
transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
35+
text-align: left;
36+
cursor: pointer;
37+
}
38+
39+
.project-card:hover {
40+
transform: translateY(-5px);
41+
border-color: var(--red);
42+
box-shadow: 0 8px 20px rgba(203, 166, 247, 0.15);
43+
}
44+
45+
.project-title {
46+
color: var(--red);
47+
font-size: 1.4rem;
48+
margin-top: 0;
49+
margin-bottom: 0.5rem;
50+
text-align: center;
51+
}
52+
53+
.project-tech {
54+
color: var(--green);
55+
font-size: 0.9rem;
56+
font-weight: bold;
57+
margin-bottom: 1rem;
58+
text-align: center;
59+
}
60+
61+
.project-desc {
62+
color: var(--text);
63+
line-height: 1.6;
64+
font-size: 1rem;
65+
margin-bottom: 0;
66+
}
67+
"
68+
</style>
69+
70+
<div>
71+
<h2 class="projects-header">"My Projects"</h2>
72+
<div class="projects-grid">
73+
74+
75+
<a href="https://github.com/sofiavldd2005/sofiavldd2005.github.io" target="_blank" rel="noopener noreferrer" class="project-card">
76+
<h3 class="project-title">"WebAssembly Portfolio"</h3>
77+
<div class="project-tech">"Rust • Leptos • WebAssembly • CSS"</div>
78+
<p class="project-desc">"Designed and developed a fully responsive, client-side web application entirely in Rust. Features WASM compilation, client-side routing, and a custom glassmorphism UI."</p>
79+
</a>
80+
81+
<a href="https://github.com/sofiavldd2005?tab=repositories" target="_blank" rel="noopener noreferrer" class="project-card">
82+
<h3 class="project-title">"Rust HIL Framework"</h3>
83+
<div class="project-tech">"Rust • Hardware-in-the-Loop"</div>
84+
<p class="project-desc">"It is a WIP. My goal is to build Hardware-in-the-Loop testing framework to simulate flight and validate critical systems."</p>
85+
</a>
86+
<a href="https://github.com/sofiavldd2005/Nvim_setup" target="_blank" rel="noopener noreferrer" class="project-card">
87+
<h3 class="project-title">"My Neovim Setup"</h3>
88+
<div class="project-tech">"Lua • Neovim • LazyVim "</div>
89+
<p class="project-desc">"In case you are wondering what is my setup to code, here's my neovim cofigs built on top of LazyVim."</p>
90+
</a>
91+
92+
93+
94+
<a href="https://github.com/RED-PT" target="_blank" rel="noopener noreferrer" class="project-card">
95+
<h3 class="project-title">"RED Flight Software"</h3>
96+
<div class="project-tech">"C • FreeRTOS • STM32 "</div>
97+
<p class="project-desc">"Developed flight software architecture for RED's first Hybrid Rocket, ensuring telemetry and real-time execution for the avionics."</p>
98+
<p class="project-desc">"Participated in the EuRoc 2025 Competition"</p>
99+
</a>
100+
101+
<a href="https://github.com/RED-PT/R_D_Software_Inclita_25_26" target="_blank" rel="noopener noreferrer" class="project-card">
102+
<h3 class="project-title">"Pilot Project in Embedded Rust"</h3>
103+
<div class="project-tech">"Embedded • Embassy Framework • Rust"</div>
104+
<p class="project-desc">"Programmed the flight software for the Inclita Geração Cansat launchs, in order to show Rust as an option for flight Software."</p>
105+
</a>
106+
<a href="https://github.com/sofiavldd2005/Learning-ROS2" target="_blank" rel="noopener noreferrer" class="project-card">
107+
<h3 class="project-title">"Learning ROS2"</h3>
108+
<div class="project-tech">"ROS2 • C++ • Python • Robotics"</div>
109+
<p class="project-desc">"Currently I am just playing with ROS2, in order to be able do venture into robotics in the future."</p>
110+
</a>
111+
112+
113+
</div>
114+
</div>
115+
}
116+
}

src/resume.rs renamed to src/pages/resume.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub fn Resume() -> impl IntoView {
4040

4141
<div class="resume-grid">
4242
<div class="col-left">
43-
<h3 class="section-heading">"🚀 Flight & Space Systems"</h3>
43+
<h3 class="section-heading">"Flight & Space Systems"</h3>
4444
<ul class="experience-list">
4545
<li>
4646
<span class="role-title">"Co-Team Leader @ RED Electronics"</span>
@@ -52,7 +52,7 @@ pub fn Resume() -> impl IntoView {
5252
</li>
5353
</ul>
5454

55-
<h3 class="section-heading" style="margin-top: 2rem;">"🦀 Open Source & Projects"</h3>
55+
<h3 class="section-heading" style="margin-top: 2rem;">"Open Source & Projects"</h3>
5656
<ul class="experience-list">
5757
<li>
5858
<span class="role-title">"Rust HIL & Ground Station Framework"</span>
@@ -62,13 +62,13 @@ pub fn Resume() -> impl IntoView {
6262
</div>
6363

6464
<div class="col-right">
65-
<h3 class="section-heading">"💻 Hardware & Embedded"</h3>
65+
<h3 class="section-heading">"Hardware & Embedded"</h3>
6666
<div class="skills-container">
6767
<SkillBadge text="C/C++" /><SkillBadge text="Embedded Rust" /><SkillBadge text="RISC-V" />
6868
<SkillBadge text="STM32 & ESP32" /><SkillBadge text="FreeRTOS" /><SkillBadge text="KiCad" />
6969
</div>
7070

71-
<h3 class="section-heading" style="margin-top: 2.5rem;">"⚙️ Systems & Analysis"</h3>
71+
<h3 class="section-heading" style="margin-top: 2.5rem;">"Systems & Analysis"</h3>
7272
<div class="skills-container">
7373
<SkillBadge text="Async/Await (Embassy)" /><SkillBadge text="Python" /><SkillBadge text="MATLAB" />
7474
<SkillBadge text="GitHub Actions CI/CD" /><SkillBadge text="Linux/Bash" />

0 commit comments

Comments
 (0)