A skydiver silhouetted against the sun
Yanquiel Bosques Engineering Portfolio

— John Milton
Yanquiel's Engineering Portfolio
Click it
Scroll

Home

Icarus falling, feathers coming loose

Research

AIAA SciTech 2027Predicting Spray Cone Angle in Coaxial Swirl Injectors Large eddy simulations of an injector and a turbopump in Ansys Fluent, tuning mesh and solver until the model converges on the real spray.
IndependentFrequency Locomotion 3D printed surfaces with built in pendulums that steer in any direction by tuning vibration frequency, a control not yet found in the literature.

Skills

B.S. Aerospace EngineeringGeorgia Tech · May 2028
Software
  • SolidWorks
  • Ansys Fluent
  • CFturbo
  • MATLAB
  • Python
  • AutoCAD
  • GMAT
  • Java
  • HTML & CSS
Hands on
  • Tube bending
  • Flaring & fittings
  • High pressure gas
  • Cryogenic systems
  • Proof & leak testing
  • P&IDs
Languages

English · Spanish · French

Propulsive Landers

Innovating Hybrid Rocketry

[Student Organization]

1000N N2O/Paraffin-ABS Engine

This engine flies inside Monarch, our lander. We are building it to win the Collegiate Lander Challenge and to do something no team anywhere has done: hover a hybrid rocket with nothing holding it up. Not the third team to manage it, not the second. The first. Before May 2027.

  • O/F Ratio7.1
  • Injector TypeShowerhead
  • Thrust1000 N
  • Chamber Pressure40 barA
  • Burn Duration40 s
  • OxidizerN2O
  • FuelParaffin, ABS gyroid at 10% infill
  • Chamber Length~23 cm
  • Pre-combustion Chamber~3 cm
  • NameJohn Viceroy
  • DesignersPropulsive Landers @ Georgia Tech

Testing

We test in Powder Springs, Georgia, forty five minutes from campus. A field, a canopy, a stand full of plumbing, and a group of people who would rather be there than anywhere else.

% Showerhead Injector Design with Pressure Drop Consideration
m_ox_dot = 0.56;              % Oxidizer mass flow rate (kg/s)
rho_ox = 772.25;              % Density of liquid oxidizer (kg/m^3)
Cd = 0.217;                   % Discharge coefficient
N_inj = 71;                   % Number of injector orifices
Delta_P = 60e5 - 25.38e5;     % Pressure drop across injector (Pa)

% Calculate the required orifice area based on the given mass flow rate
A_inj_total = m_ox_dot / (Cd * sqrt(2 * rho_ox * Delta_P)); % Total orifice area (m^2)
A_single_inj = A_inj_total / N_inj; % Area of a single orifice (m^2)

% Calculate the diameter of a single orifice
d_inj = sqrt(4 * A_single_inj / pi); % Orifice diameter (m)

% Calculate the oxidizer axial velocity (u_ox)
u_ox = m_ox_dot / (rho_ox * A_inj_total); % Axial velocity (m/s)

% Equation (5): Sauter Mean Diameter (SMD) in micrometers
sigma = 0.24;                 % Surface tension of liquid oxidizer (N/m)
rho_ox_G = 1.83;              % Gas-phase density of oxidizer (kg/m^3)
mu_L = 325e-6;                % Dynamic viscosity of liquid oxidizer (Pa*s)
rho_ox_L = 772.25;            % Liquid-phase density of oxidizer (kg/m^3)

SMD = 47 * (d_inj / u_ox) * ((sigma / rho_ox_G)^0.25) * ...
    (1 + 331 * (mu_L / ((rho_ox_L * sigma * d_inj)^0.5)));

% Convert SMD to micrometers
SMD_micrometers = SMD * 1e6;

% Display results
fprintf('Injector Orifice Diameter (d_inj): %.5f mm\n', d_inj * 1e3);

fprintf('Oxidizer Axial Velocity (u_ox): %.2f m/s\n', u_ox);
fprintf('Sauter Mean Diameter (SMD): %.2f micrometers\n', SMD_micrometers);

fprintf('Injector Total Area (A_inj): %.7f m^2\n', A_inj_total);

% Calculate diameter of 86 holes to drill
A_drill = A_inj_total - ((114-86)*pi*(0.000754)^2/4);
Drill_diameter_mm = (sqrt((4*A_drill)/(86*pi))) * 1e3;

fprintf('Drill diameter for 86 holes: %.7f mm\n', Drill_diameter_mm);
Annotated hotfire frame, e-match behaviourAnnotated hotfire frame, cotton residue on the throat

Some of my early work

Plume analysis and MATLAB scripts for injector sizing are where the concepts stopped being coursework. Watching a spreadsheet of numbers turn into an orifice diameter I could actually drill is what pulled me toward performance analysis and injector design.

Leading the Injector Group

I lead about a dozen aspiring engineers across two projects, one designing lab scale injectors from scratch and one characterizing how our 1000N showerhead behaves when we throttle it. My job is to set the technical direction, run the lectures and literature reviews that bring new members up to speed, and make sure no geometry gets cut before it survives a real design review. I keep the MATLAB sizing, the Ansys coldflow, and the hotfire procedures moving in step, so every test we run answers a question somebody wrote down first. The best part is watching a member go from their first lecture to defending their own injector in front of the team.

Design, Cold Flow, Iterate

We design an injector, manufacture it, and cold flow it long before it ever sees fire, then feed what we learn into the next one. Nitrous never behaves like a simple liquid, so we predict oxidizer mass flow with single phase incompressible, HEM, NHEM, Dyer, and Omega models, then check all of them against what the bench actually delivers. After every hotfire we run an FFT on the chamber pressure trace to see whether the combustion was talking back to us. Instability leaves a signature, and catching it early is what keeps the next design honest.

My Responsibilities at Propulsive Landers

Yanquiel Bosques

Project Lead for Injector Design

Teaching the team injector sizing at the whiteboard
Teaching injector sizing to the team

Research and Innovation

I am investigating how several injector types can be folded into a single configuration that reaches the highest combustion efficiency while keeping the heat load on the chamber wall inside what the liner can survive. I am studying how orifice patterns, spray angle, and swirl geometry change regression rate and combustion stability across a throttle range. The plan is to turn what comes out of our lab scale hotfire data into a published paper this coming year. Hybrid injector design is still thinly documented in the literature, and I want our work to be part of what fills that gap.

Experimenting with Injector Configurations

Upcoming Projects
and Goals

  1. 01

    Monarch Lander

    Static fires, a tethered hover, and an untethered fifty meter hop.

  2. 02

    2500N Hybrid Lander

    Design a more powerful engine for longer flight times.

  3. 03

    Project Dragonfly

    Design and begin the test campaign of a Kerolox liquid lander before April 2027.

Monarch Lander

Preliminary CAD and P&ID

[Propulsive Landers · Upcoming Project 01]

Preliminary CAD of the Monarch Lander: a tubular space frame with pressurant tanks, a central run tank, the engine underneath and four landing legs
Preliminary CAD
Preliminary piping and instrumentation diagram for Monarch
Preliminary P&ID · hover any part
Follow the flow

How Monarch Breathes

Monarch is our next lander: a nitrous fed engine throttled by a servo valve, pushed by nitrogen, and steered by cold gas thrusters. Pick a step to watch the fluids move through the P&ID.

Fill

Valves open
  • Nitrogen
  • Nitrous oxide
250bar nitrogen
65bar run tank
8pressure transducers
3temperature sensors
10electric valves
1throttle valve
  1. 01Static fires
  2. 02Tethered hover
  3. 03Untethered 50 m hop

Yellow Jacket Space Program

Pumping our way to space

[Student Organization]

GoldiLOX
  • Apogee5,000 ft
  • Engine900 lbf
  • PropellantsLOX / Kerosene
  • Length18 ft
  • Diameter8 in

GoldiLOX

Developed as a proof of concept testbed and the program's first liquid rocket project, GoldiLOX integrated custom avionics, valves, and a 900 lbf heatsink engine before successfully launching to an apogee of 5,000 feet on January 6, 2023.

Vespula
  • Apogee56,590 ft
  • Engine2500 lbf
  • PropellantsLOX / Kerosene
  • Length23 ft
  • Diameter10 in

Vespula

Named after the Eastern Yellow Jacket, Vespula was developed over two and a half years building on lessons from GoldiLOX, completing multiple static tests and cold flows before launching on April 11, 2026, to a collegiate record apogee of 56,590 feet as the highest flying amateur KeroLOX vehicle.

Felicette
  • Apogee47,366 ft
  • Average Thrust1800 lbf
  • Engine TypeAblative
  • Wet Mass390 lbs
  • Burn Time23 s
  • PropellantsN2O + IPA
  • Length20 ft
  • Diameter8 in

Felicette

Named after the first cat launched into space, Felicette was developed over three years building upon the Darcy series, completing multiple static tests before flying to an apogee of 47,366 feet in the Black Rock Desert on May 15, 2026, as the largest amateur N2O and IPA liquid rocket flown.

Elytra, in development

Elytra

A year of design and still nothing but an outline. Turbopump fed and built for one purpose: to carry a student built liquid rocket past the edge of the atmosphere and become the first to reach space.

LOX RP-1 Gas generator Turbinemy part overboard Mainchamber
  • Liquid oxygen
  • RP-1
  • Fuel rich turbine gas
My contribution · Elytra turbopump

Sizing the Turbine

Elytra runs a gas generator open cycle: a small burner running fuel rich makes hot gas that spins one turbine, the turbine drives both pumps, and the spent gas is dumped overboard. Every gram through that turbine is propellant that never makes thrust, so the job is a turbine that delivers the pump power on as little gas as possible. I wrote our axial turbine sizer, which works backward from the power the pumps demand to the gas flow, blade speed and wheel diameter. Next come the radial turbine sizer, the sonic or supersonic nozzle call, and the first turbine geometry.

  1. Axial turbine sizerDone
  2. Radial turbine sizerNext
  3. Sonic vs supersonic nozzlesNext
  4. Turbine geometryNext
How the sizer thinks

Power In, Gas Out

The pumps set the power and the shaft speed. The turbine gets to choose how hot, how big, and how hard it expands the gas, and each choice changes how much propellant it burns. Move the sliders to see the trade.

Elytra’s targets: 15 kW at 13,000 RPM. Modeled as a single stage impulse wheel with a 20° nozzle angle and fuel rich kerolox gas near 22 g/mol, γ ≈ 1.13; temperature, pressure ratio and diameter are illustrative.

0.00kg/s of propellant burned
just to spin the pumps
0kJ/kg available per kilogram of gas
0m/s spouting velocity out of the nozzles
0m/s blade speed at the mean diameter
Supersonicnozzle, exit Mach 0
where turbopumps live 80%40%0% 0% 0velocity ratio u / c₀0.6

Drawing board

Elytra on Paper

The cycle P&IDs we traded, the pump flow in Ansys, and the hardware in CAD. Click any image to see it full size.

Research

Predicting Spray Cone Angle in Coaxial-Swirl Injectors

[Exa-scale Computational Fluid Dynamics · Vertically Integrated Projects]

AIAA SciTech Forum 2027, Orlando

AIAA SciTech Forum 2027

Spray cone angle is still one of the harder things to predict in CFD, because it hangs on the thin liquid sheet that forms right at the injector exit and on how the solver treats the boundary between liquid and gas. We took a pressure-swirl injector representative of the RD-0110 class as our baseline, chosen because it is well studied and has experimental data worth measuring ourselves against. In Ansys we swept turbulence treatments and boundary conditions to see whether higher fidelity actually narrows the discrepancy, then looked at how much mesh resolution and the treatment of the domain past the injector move the answer. We are preparing the results for the AIAA SciTech Forum in Orlando this coming January.

Ansys Fluent

We run our Ansys Fluent simulations on the Georgia Tech ICE cluster, and we have spent close to a thousand hours of compute on them so far.

Solver sensitivity

Chasing 83.8°

Water cold flow through the LOX swirl passage, every solver setting measured against the experimental spray cone. Hover one to hold it.

100.40°
19.81% from experiment · +16.60°
  1. LES WALE82.83° · −0.97°1.16%
  2. Coupled, 2nd order upwind87.17° · +3.37°4.02%
  3. SIMPLE, 2nd order upwind90.00° · +6.20°7.40%
  4. WMLES, PISO76.50° · −7.30°8.71%
  5. k‑ω SST, PISO, 1st order upwind95.20° · +11.40°13.61%
  6. k‑ω SST, PISO, 2nd order upwind100.40° · +16.60°19.81%

Experiment, 83.8°Simulated water sheet

Research log

Eight months to 1.16%

  1. We set the scope, large eddy simulation of coaxial injectors on a liquid rocket engine, and picked the RD‑0110 as our baseline.

  2. Learned Fluent on the PACE cluster, ran our first methane and air combustion cases, and wrote a 2D ignition kernel UDF.

  3. First 3D cold flow. The residuals diverged, so we narrowed the study to a single question: spray cone angle.

  4. Submitted our abstract to AIAA and rebuilt the mesh to kill the backflow and the stair stepping.

  5. 8,905,677,101,632,689,297,625,549,645,207,830,528

    A number the solver actually reported back. Something had diverged.

  6. Transient VOF finally held. By 105,000 iterations the water spray cone had formed.

  7. Swept six solver settings. LES WALE landed at 82.83°, within 1.16% of experiment.

  8. Extended abstract accepted to AIAA SciTech 2027.

Upcoming Project
and Goals

  1. 01

    Turbopump CFD

    Use CFD to optimize the impeller blade profile of a rocket turbopump.

    1. Fall 2026Outline Project, Literature Review
    2. Spring 2027CFD and Abstract
    3. Fall 2027Finish Paper
    4. Spring 2028Present Paper

Skypia

The Design of an Artificial Gravity Space Station

[Dream Project · Beyond the Blue, Above the Rest]

Artificial Gravity, Two Hundred Meters Out

Skypia is a space station that makes its own gravity. Habitat clusters ride at the ends of two 200 meter truss arms, and spinning the whole structure at 2.11 revolutions per minute presses everyone inside against the floor with a full g. At the hub it doubles as a gas station in orbit, keeping enough propellant aboard to refuel three Starships. It is the project I keep coming back to, and the one I most want to see built.

  • Spin Radius200 m
  • Spin Rate2.11 RPM
  • Rim Gravity1.00 g
  • Rim Speed44.3 m/s
  • Mass at Each Tip765 t
  • Arm Tension7.5 MN
  • Truss7075‑T6 Aluminum
  • Safety Factor1.5
  • Habitats8 m × 15 m
  • Elevator Speed0.75 m/s
  • OrbitLow Earth, ISS path

From Sketchbook to Orbit

Skypia started as pencil on printer paper: a concept page, an arm with its elevator and spin motor, a hub stacked on three bearings. Then it went into SolidWorks and out over the Earth.

Concept sketch: Skypia, artificial gravity space station
Sketch of an arm, elevator and spin adjustment motor
Sketch of the hub with three bearing stages
Artificial gravity

Gravity Is a Radius

Spin a station and the floor pushes back. Change the arm and the spin rate to see what the crew would feel. Skypia sits at 200 m and 2.11 RPM, turning in real time.

1.00 g
rim speed 44.3 m/s · one turn every 28.4 s
Inside a 15 m habitat, each floor up is lighter
Floor 30.95 g
Floor 20.98 g
Floor 11.00 g

Arrows point the way “down” feels to the crew: straight out from the hub.

The plan

Three Designs

  1. I
    Understand itNow

    Orbital mechanics, rotational dynamics, the counterweight system, propulsion and structures, worked out from first principles.

  2. II
    Make it real

    Cut cost and mass, design for manufacture and maintenance, plan the assembly, and stress test the rare events: solar storms, meteor showers, collisions.

  3. III
    Build it

    Assembled within ten years with a crew of ten aboard within five, enough propellant to refuel three Starships, gravity tuned for research, and room for visitors.

Counterweight system

Keeping the Balance

Every elevator ride moves mass along the arm, which shifts both the balance and the spin. A counterweight that mirrors the elevator keeps the balance, and rim tanks at 200 m take on or drain water so the inertia never changes. Change the cargo, or switch the mirror off, to see how much water each design needs. The numbers come straight from my MATLAB scripts.

Elevator
0 m out · 0.00 g
Mirror counterweight
200 m out
Balance point
100.0 m, fixed
Rim tank water
0 kg per tank
Inertia of moving parts
100%, held
2,000 kg
6 t3 t0 t no counterweight with mirror 20 melevator position180 m
ride 0:00 of 3:33 · shown at 16×
Skypia_Counterweight_Psync.mlx
%% 1. Parameters (Edit these values)
m_cargo = 2000;          % Cargo mass in kg (Max 3000)
r_initial = 180;          % Starting position of elevator (m)
r_final = 20;    % Ending position of elevator (m)
V_e = 0.75;      % elevator speed (m/s)
t_total = abs(r_initial-r_final)/V_e;   % Total transit time in seconds (4 minutes)

% System Constants
m_elevator_empty = 2000; % Base elevator mass (kg)
R_rim = 200;             % Radius of the rim tanks (m)
m_buffer = 500;          % Safety buffer mass (kg)
N_tanks = 2;             % Number of rim tanks
n_elevators = 2;         % Number of synced elevator/CW pairs

%% 2. Calculations
m_e = m_elevator_empty + m_cargo; % Total mass per elevator unit
v = (r_final - r_initial) / t_total; % Velocity (m/s)

% Time vector
t = linspace(0, t_total, 500);

% Positions over time
r_e = r_initial + v * t;     % Elevator position
r_cw = 200 - r_e;            % Counterweight position (r_cw = 200 - r_e)

% Balancing Equation:
% Target Inertia is based on r_e = 200, r_cw = 0 (The "heaviest" state)
% I_target = n_elevators * m_e * (200^2 + 0^2)
% Current I = n_elevators * m_e * (r_e^2 + r_cw^2)
% Mass needed per tank = (I_target - I_moving) / (N_tanks * R_rim^2) + buffer

numerator = (200^2 + 0^2) - (r_e.^2 + r_cw.^2);
m_rim = (m_e / R_rim^2) * numerator + m_buffer;

%% 3. Plotting
figure('Color', 'w', 'Name', 'Monarch Ballast Control');
plot(t/60, m_rim, 'LineWidth', 2.5, 'Color', [0 0.4470 0.7410]);
hold on;

% Find and mark the 100m midpoint
[m_peak, idx] = max(m_rim);
t_peak = t(idx);
plot(t_peak/60, m_peak, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r');

% Formatting
grid on;
ax = gca;
ax.GridLineStyle = '--';
ax.FontSize = 11;

title(['Rim Tank Mass: ', num2str(r_initial), 'm to ', num2str(r_final), 'm'], 'FontSize', 14);
subtitle(['Cargo: ', num2str(m_cargo), ' kg | Velocity: ', num2str(v), ' m/s']);
xlabel('Time (Minutes)');
ylabel('Water Mass per Tank (kg)');
legend('Rim Tank Mass', 'Midpoint Peak (100m)', 'Location', 'best');

% Text annotation for peak
text(t_peak/60, m_peak + 100, sprintf(' Peak: %.1f kg', m_peak), 'FontWeight', 'bold');

fprintf('--- Monarch Balancing Report ---\n');
fprintf('Start Mass: %.2f kg\n', m_rim(1));
fprintf('Peak Mass (at 100m): %.2f kg\n', m_peak);
fprintf('End Mass: %.2f kg\n', m_rim(end));
MATLAB output

Water on Demand

MATLAB plot of rim tank water mass over a ride from 180 m to 20 m, peaking at 2,500 kg at the midpoint
--- Monarch Balancing Report ---
Start Mass: 1220.00 kg
Peak Mass (at 100m): 2499.99 kg
End Mass: 1220.00 kg

With 2,000 kg of cargo, each rim tank peaks at 2,500 kg when the elevator passes the 100 m mark. Without the mirror, my second script shows each tank must start the ride at 4,460 kg and drain 3,200 kg on the way out.

01

Tapered Truss Arms

Each 200 m arm is a square 7075‑T6 aluminum truss that tapers 2:1, from a 12 m root at the hub to a 6 m tip, putting metal where the tension is highest. At a safety factor of 1.5, the 7.5 MN pull of the habitats needs only 224 cm² of load bearing section at the tip. Eight radial carbon fiber cables and four crossed ones share the load, wrapped in multilayer insulation.

02

The Hub

The spinning arms meet the station on three stacked bearing stages, with airlocks between them so the crew can pass from the still core to the turning structure. A rotary seal carries power and fluids across the joint, and ferrofluidic seals, with almost no friction, are one option under study. Whether the middle stage earns its place is still an open question.

03

Spin and Attitude

Liquid engines at the arm tips spin the station up and down quickly, and ion thrusters trim away the slow losses to drag and bearing friction. On its own, a single 5.4 N ion thruster would need more than three weeks to bring 250 tonnes up to speed at 200 m. Attitude follows the ISS playbook: control moment gyroscopes, desaturated by magnetic torque bars the way Hubble does it.

04

Life Support and Thermal

Electrolysis splits water into oxygen and hydrogen, and a Sabatier reactor turns that hydrogen and the crew’s exhaled CO₂ back into water and methane, about 0.36 kg of methane per person per day. Around 90% of the water is recycled. Heat follows the ISS pattern: water loops inside, ammonia loops and radiators outside.

05

Power

Sun tracking solar arrays unfold from the truss. Nuclear was ruled out early: the radiators alone would cover acres.

Array deployment, SolidWorks motion study
still hub 0 RPM
  • Arms and outer race, 2.11 RPM
  • Rolling elements, about half speed
  • Hub, seal and fluid swivel, still
  • Imbalance load, turns with the arms
  • Water and power, crossing at the swivel
The bottleneck

Where Still Meets Spinning

Every system on Skypia eventually crosses one joint: the bearing between the still hub, where ships dock, and the arms turning at 2.11 RPM. It has to carry the loads, leak nothing, pass power, data and fluids, and keep turning for decades without a stop. If it seizes, the station loses its gravity. Of everything in the design, this is the part I trust least and the one I most want to solve.

7.5 MN
Arm tension. The pull of each habitat cancels across the hub when the arms are balanced, so the bearing only feels what does not cancel.
9.8 kN / t
Imbalance. Every tonne out of balance at 200 m weighs a full Earth tonne on the bearing, and that load turns with the arms. This is why the counterweights exist.
15.3 MN·m
Gyroscopic torque if Skypia turned once per orbit like the ISS does. Holding the spin axis fixed in space and only following the Sun, about 1° a day, drops it to 2.7 kN·m.
1.1 million
Turns a year. Over a 30 year life the bearing rolls 33 million times under a load that never rests.
5 flows
Power, data, water, coolant and air all cross the joint. Cryogenic propellant is colder than most rotary seals can serve, so refueling the spin engines is still an open question.
Why Skypia

One day, I want to build it for real.

Skypia is my dream project, the one I work on when nobody has assigned me anything. I hope to eventually start my own company to make artificial gravity space stations a reality: places in orbit where people can live, work and visit without giving up the weight of their own bodies. Design I is how I am learning what that will take.

Beyond the Blue, Above the Rest.

CAD, renders and animations built with my ME 1670 team: Kartik Menke, Paige Brewer, Liza Polgul and Ian Delcher. I modeled the trusses, the center hull, the cloud habitats and the connectors. Sketches from my notebook.

About Me

The Person Behind the Engineering

[Cuba · Miami · Atlanta]

  1. Born

    Cuba

    Where my story starts.

  2. Age 10

    Miami, Florida

    I immigrated to the United States. Miami is still home.

  3. Now

    Atlanta, Georgia

    Studying aerospace engineering at Georgia Tech.

01 · Skydiving

The Most Thrilling Thing I’ve Ever Done

Nothing else comes close to the second you leave the plane. For an aerospace student, it is also the most honest lesson in drag there is.

02 · Rock Climbing

The Puzzles on the Wall

I like rock climbing. Every route is a problem you solve with your hands, your feet and a lot of patience, and the good ones make you fall a few times first.

03 · Working Out

One of My First Muscle Ups

I like working out. This clip is one of my very first muscle ups, the day the pull finally turned into a push.

Models of a Saturn V, a Starship, a Space Shuttle and a rover
04 · Props

Piece by Piece

I like making props. A few pieces from my shelf. Hover the dots to see what is what.

05 · Favorites

The Short List

Favorite sayingIt’s all in your head.
Music artists
  • The Strokes
  • J. Cole
  • Bob Marley
Movies and shows
  • Interstellar
  • The Lord of the Rings
  • One Piece
  • Avatar: The Last Airbender
Sci fi book
  • Project Hail Mary
Book series
  • A Song of Ice and Fire
06 · Educator

Teaching What I Love

I am an educator. At my current job I teach kids about AI, engineering, science and chess, and nothing beats the moment an idea clicks for one of them.

  • AI
  • Engineering
  • Science
  • Chess
Two students working together on a laptop
Students playing chess at a long table

Thanks for making it all the way down here.

Let’s build something that flies.

Yanquiel Bosques