Skip to content

Commit dc39614

Browse files
committed
Organizing the project.
Added Cv download option
1 parent 0d900e2 commit dc39614

6 files changed

Lines changed: 66 additions & 227 deletions

File tree

.DS_Store

6 KB
Binary file not shown.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ edition = "2024"
88
[dependencies]
99
leptos = { version = "0.8", features = ["csr"] }
1010
leptos_meta = { version = "0.8" }
11-
leptos_router = { version = "0.8" }
11+
leptos_router = "0.8"
1212
console_log = "1"
1313
log = "0.4"
1414
console_error_panic_hook = "0.1"

public/Sofia_Duarte_CV.pdf

118 KB
Binary file not shown.

src/home.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use leptos::prelude::*;
2+
3+
#[component]
4+
pub fn Home() -> impl IntoView {
5+
view! {
6+
<style>
7+
"
8+
.about { border: 2px solid var(--mauve); }
9+
.about h2 { color: var(--mauve); margin: 0 0 1.5rem 0; text-align: center; font-size: 1.8rem; }
10+
.about-text { font-size: 1.15rem; line-height: 1.7; max-width: 750px; margin: 0 auto; text-align: center; }
11+
"
12+
</style>
13+
<section class="card about">
14+
<h2>"🌸 About Me:"</h2>
15+
<div class="about-text">
16+
<p>"Hi! I like to build backend systems, write memory-safe code for embedded devices, and develop flight software for rockets!"</p>
17+
<p>"Currently architecting hybrid rocket avionics and pushing for Rust adoption in aerospace environments. 🎀"</p>
18+
</div>
19+
</section>
20+
}
21+
}

src/main.rs

Lines changed: 44 additions & 226 deletions
Original file line numberDiff line numberDiff line change
@@ -1,240 +1,58 @@
1-
use leptos::mount::mount_to_body;
1+
use crate::home::Home;
2+
use crate::resume::Resume;
23
use leptos::prelude::*;
3-
4-
fn main() {
5-
console_error_panic_hook::set_once();
6-
mount_to_body(|| view! { <App /> })
7-
}
4+
use leptos_router::components::{A, Route, Router, Routes};
5+
use leptos_router::path;
86

97
#[component]
108
pub fn App() -> impl IntoView {
119
view! {
12-
// We inject CSS directly here to cleanly manage our Catppuccin theme and responsive layout!
1310
<style>
1411
"
1512
:root {
16-
--base: #1e1e2e;
17-
--mantle: #181825;
18-
--text: #cdd6f4;
19-
--subtext: #bac2de;
20-
--pink: #f5c2e7;
21-
--mauve: #cba6f7;
22-
--green: #a6e3a1;
23-
--yellow: #f9e2af;
24-
--red: #f38ba8;
25-
--surface: #313244;
26-
--surface-border: #45475a;
27-
}
28-
29-
body {
30-
margin: 0;
31-
background-color: var(--base);
32-
color: var(--text);
33-
font-family: 'Nunito', system-ui, -apple-system, sans-serif;
34-
}
35-
36-
.container {
37-
max-width: 950px;
38-
margin: 0 auto;
39-
padding: 3rem 1.5rem;
40-
}
41-
42-
.header {
43-
border-bottom: 2px dashed var(--pink);
44-
padding-bottom: 2rem;
45-
margin-bottom: 3rem;
46-
text-align: center;
47-
}
48-
49-
.header h1 {
50-
color: var(--pink);
51-
/* clamp() makes the font size scale smoothly based on screen width! */
52-
font-size: clamp(2rem, 5vw, 2.8rem);
53-
margin: 0 0 0.5rem 0;
54-
line-height: 1.2;
55-
}
56-
57-
.header p {
58-
color: var(--subtext);
59-
font-size: 1.1rem;
60-
font-style: italic;
61-
margin: 0;
62-
}
63-
64-
.card {
65-
background-color: var(--mantle);
66-
border-radius: 16px;
67-
padding: 2.5rem;
68-
box-shadow: 0 4px 15px rgba(0,0,0,0.2);
69-
margin-bottom: 2.5rem;
70-
}
71-
72-
.card.about { border: 2px solid var(--mauve); }
73-
.card.resume { border: 2px solid var(--green); }
74-
75-
.card h2 {
76-
margin: 0 0 1.5rem 0;
77-
text-align: center;
78-
font-size: 1.8rem;
79-
}
80-
81-
.card.about h2 { color: var(--mauve); }
82-
.card.resume h2 { color: var(--green); }
83-
84-
.about-text {
85-
font-size: 1.15rem;
86-
line-height: 1.7;
87-
max-width: 750px;
88-
margin: 0 auto;
89-
text-align: center;
90-
}
91-
92-
.resume-grid {
93-
display: grid;
94-
gap: 3rem;
95-
}
96-
97-
/* Switches to two columns on larger screens */
98-
@media (min-width: 768px) {
99-
.resume-grid { grid-template-columns: 1fr 1fr; }
100-
}
101-
102-
.section-heading {
103-
border-bottom: 1px solid var(--surface-border);
104-
padding-bottom: 0.5rem;
105-
margin-bottom: 1.5rem;
106-
font-size: 1.2rem;
107-
margin-top: 0;
108-
}
109-
110-
.col-left .section-heading { color: var(--yellow); }
111-
.col-right .section-heading { color: var(--red); }
112-
113-
.experience-list {
114-
list-style-type: none;
115-
padding: 0;
116-
margin: 0;
117-
}
118-
119-
.experience-list li { margin-bottom: 1.5rem; }
120-
121-
.role-title {
122-
color: var(--text);
123-
font-weight: bold;
124-
display: block;
125-
margin-bottom: 0.3rem;
126-
font-size: 1.05rem;
127-
}
128-
129-
.role-desc {
130-
color: var(--subtext);
131-
font-size: 0.95rem;
132-
line-height: 1.5;
133-
}
134-
135-
.skills-container {
136-
display: flex;
137-
flex-wrap: wrap;
138-
gap: 0.6rem;
139-
}
140-
141-
.skill-badge {
142-
background-color: var(--surface);
143-
color: #f5e0dc;
144-
padding: 0.4rem 0.8rem;
145-
border-radius: 8px;
146-
font-size: 0.9rem;
147-
border: 1px solid var(--surface-border);
148-
font-weight: bold;
149-
}
13+
--base: #1e1e2e; --mantle: #181825; --text: #cdd6f4; --subtext: #bac2de;
14+
--pink: #f5c2e7; --mauve: #cba6f7; --green: #a6e3a1; --yellow: #f9e2af;
15+
--red: #f38ba8; --surface: #313244; --surface-border: #45475a;
16+
}
17+
body { margin: 0; background-color: var(--base); color: var(--text); font-family: 'Nunito', system-ui, sans-serif; }
18+
.container { max-width: 950px; margin: 0 auto; padding: 3rem 1.5rem; }
19+
.header { border-bottom: 2px dashed var(--pink); padding-bottom: 2rem; margin-bottom: 3rem; text-align: center; }
20+
.header h1 { color: var(--pink); font-size: clamp(2rem, 5vw, 2.8rem); margin: 0 0 0.5rem 0; line-height: 1.2; }
21+
.header p { color: var(--subtext); font-size: 1.1rem; font-style: italic; margin: 0; }
22+
23+
/* Nav bar styling */
24+
.nav-bar { display: flex; justify-content: center; gap: 1rem; margin-top: 1.5rem; }
25+
.nav-link { text-decoration: none; font-weight: bold; padding: 0.5rem 1.2rem; border-radius: 8px; transition: all 0.2s; }
26+
.nav-link.home { color: var(--mauve); border: 1px solid var(--mauve); }
27+
.nav-link.home:hover { background-color: rgba(203, 166, 247, 0.1); }
28+
.nav-link.resume { color: var(--green); border: 1px solid var(--green); }
29+
.nav-link.resume:hover { background-color: rgba(166, 227, 161, 0.1); }
30+
31+
/* Card styling reused across pages */
32+
.card { background-color: var(--mantle); border-radius: 16px; padding: 2.5rem; box-shadow: 0 4px 15px rgba(0,0,0,0.2); }
15033
"
15134
</style>
15235

153-
<main>
154-
<div class="container">
155-
<header class="header">
156-
<h1>"✨ Sofia Duarte's Mission Control ✨"</h1>
157-
<p>"Aerospace Engineering @ IST 🚀 | RED Rocketry | Embedded Rustacean 🦀"</p>
158-
</header>
159-
160-
<section class="card about">
161-
<h2>"🌸 About Me: "</h2>
162-
<div class="about-text">
163-
<p>"Hi! I build backend systems, write memory-safe code for embedded devices, and develop flight software for rockets :)"</p>
164-
<p>"Currently architecting hybrid rocket avionics and pushing for Rust adoption in aerospace environments. 🎀"</p>
165-
</div>
166-
</section>
167-
168-
<CompactResume />
169-
<p> "The front end for this website was built using leptos Framework, built in rust for WebDev!"</p>
170-
</div>
171-
</main>
172-
}
173-
}
174-
175-
#[component]
176-
fn CompactResume() -> impl IntoView {
177-
view! {
178-
<section class="card resume">
179-
<h2>"Service Record & Tech Stack"</h2>
180-
181-
<div class="resume-grid">
182-
183-
// Left Column: Experience
184-
<div class="col-left">
185-
<h3 class="section-heading">"🚀 Flight & Space Systems"</h3>
186-
<ul class="experience-list">
187-
<li>
188-
<span class="role-title">"Co-Team Leader @ RED Electronics"</span>
189-
<span class="role-desc">"Architecting hybrid rocket flight software on an RTOS. Managing distributed avionics, HIL testing, and driving the transition to embedded Rust."</span>
190-
</li>
191-
<li>
192-
<span class="role-title">"Command & Data Handling @ LISAT"</span>
193-
<span class="role-desc">"Developed cache optimization algorithms to streamline orbit data processing for satellite onboard computers."</span>
194-
</li>
195-
</ul>
196-
197-
<h3 class="section-heading" style="margin-top: 2rem;">"🦀 Open Source & Projects"</h3>
198-
<ul class="experience-list">
199-
<li>
200-
<span class="role-title">"Rust HIL & Ground Station Framework"</span>
201-
<span class="role-desc">"Modular, asynchronous simulation engine for avionics validation using Embassy and Rust."</span>
202-
</li>
203-
</ul>
204-
</div>
205-
206-
// Right Column: Skills
207-
<div class="col-right">
208-
<h3 class="section-heading">"💻 Hardware & Embedded"</h3>
209-
<div class="skills-container">
210-
<SkillBadge text="C/C++" />
211-
<SkillBadge text="Embedded Rust" />
212-
<SkillBadge text="RISC-V" />
213-
<SkillBadge text="STM32 & ESP32" />
214-
<SkillBadge text="FreeRTOS" />
215-
<SkillBadge text="Async/Await (Embassy)" />
216-
<SkillBadge text="KiCad" />
217-
</div>
218-
219-
<h3 class="section-heading" style="margin-top: 2.5rem;">"⚙️ Systems & Analysis"</h3>
220-
<div class="skills-container">
221-
<SkillBadge text="Bash" />
222-
<SkillBadge text="MATLAB" />
223-
<SkillBadge text="GitHub Actions CI/CD" />
224-
<SkillBadge text="Linux" />
225-
<SkillBadge text= "Lua" />
226-
</div>
36+
<Router>
37+
<main>
38+
<div class="container">
39+
<header class="header">
40+
<h1>"✨ Sofia Duarte's Blog ✨"</h1>
41+
<p>"Aerospace Engineering @ IST 🚀 | RED Rocketry | Embedded Rustacean 🦀"</p>
42+
43+
<nav class="nav-bar">
44+
<A href="/" class="nav-link home">"👾Home"</A>
45+
<A href="/resume" class="nav-link resume">" Resume"</A>
46+
</nav>
47+
</header>
48+
49+
// The Routes component swaps out the page below the header!
50+
<Routes fallback=|| view! { <h2>"404 - Page not found in this orbit."</h2> }>
51+
<Route path=path!("/") view=Home />
52+
<Route path=path!("/resume") view=Resume />
53+
</Routes>
22754
</div>
228-
</div>
229-
</section>
230-
}
231-
}
232-
233-
#[component]
234-
fn SkillBadge(text: &'static str) -> impl IntoView {
235-
view! {
236-
<span class="skill-badge">
237-
{text}
238-
</span>
55+
</main>
56+
</Router>
23957
}
24058
}

src/resume.rs

Whitespace-only changes.

0 commit comments

Comments
 (0)