Skip to content

Dan careers landing page #1327

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Feb 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pgml-cms/careers/data-scientist.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
---
description: >-
We're looking for an experienced Data Scientist to help shape the core product, inside and out. Implement concepts in SQL, Rust and Python rather than Powerpoint.
tags: [engineering]
---

# Data Scientist

PostgresML is building a GPU-powered AI application database. You can perform microsecond inference with the world's most capable feature store. It allows you to easily train and deploy online models using only SQL. We're looking for an experienced Data Scientist to help shape the core product, inside and out. This is an IC role, but will be critical in building the future team as well as the core product, while leading efforts toward more efficient and effective Machine Learning workflows for our customers.
Expand Down
5 changes: 5 additions & 0 deletions pgml-cms/careers/full-stack-engineer.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
description: >-
We’re looking for experienced Full Stack Engineers (Staff+) to build infrastructure as a service with a web app implemented in Rust.
tags: [engineering]
---
# Full Stack Engineer

PostgresML provides microsecond inference with the world's most capable feature store. It allows you to easily train and deploy online models using only SQL. We're looking for a experienced Full Stack Engineers (Staff+) to help shape the core product, inside and out. This is an IC role, but will be critical in building the future team as well as the core product, while leading efforts toward more efficient and effective Machine Learning workflows for our customers.
Expand Down
5 changes: 5 additions & 0 deletions pgml-cms/careers/machine-learning-engineer.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
description: >-
Work with our team to shape our core product and implement ML solutions at scale.
tags: [engineering]
---
# Machine Learning Engineer

PostgresML provides microsecond inference with the world's most capable feature store. It allows you to easily train and deploy online models using only SQL. We're looking for a experienced Machine Learning Engineers to help shape the core product, inside and out. This is an IC role, but will be critical in building the future team as well as the core product, while leading efforts toward more efficient and effective Machine Learning workflows for our customers.
Expand Down
4 changes: 4 additions & 0 deletions pgml-cms/careers/product-manager.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: >-
tags: [engineering]
---
# Product Manager

PostgresML provides cloud hosted AI application databases, that bring the latest machine learning and vector capabilities to the heart of everyone’s favorite tech stack. We're looking for a Head of Growth, with a Technical Product Manager skill set to help shape the core product, inside and outside the company. 
Expand Down
16 changes: 16 additions & 0 deletions pgml-dashboard/src/api/cms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -677,10 +677,26 @@ async fn get_user_guides(path: PathBuf) -> Result<Response, crate::responses::No
Ok(Response::redirect(format!("/docs/{}", path.display().to_string())))
}

#[get("/careers")]
async fn careers_landing_page(cluster: &Cluster) -> Result<ResponseOk, crate::responses::NotFound> {
let layout = Base::new(
"PostgresML careers landing page, Join us to help build the future of AI infrastructure.",
Some(cluster),
)
.theme(Theme::Marketing);

let page = crate::components::pages::careers::LandingPage::new(cluster)
.index(&CAREERS)
.await;

Ok(ResponseOk(layout.render(page)))
}

pub fn routes() -> Vec<Route> {
routes![
blog_landing_page,
docs_landing_page,
careers_landing_page,
get_blog,
get_blog_asset,
get_careers,
Expand Down
4 changes: 4 additions & 0 deletions pgml-dashboard/src/components/cards/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@

// src/components/cards/blog
pub mod blog;

// src/components/cards/newsletter_subscribe
pub mod newsletter_subscribe;
pub use newsletter_subscribe::NewsletterSubscribe;
14 changes: 14 additions & 0 deletions pgml-dashboard/src/components/cards/newsletter_subscribe/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
use pgml_components::component;
use sailfish::TemplateOnce;

#[derive(TemplateOnce, Default)]
#[template(path = "cards/newsletter_subscribe/template.html")]
pub struct NewsletterSubscribe {}

impl NewsletterSubscribe {
pub fn new() -> NewsletterSubscribe {
NewsletterSubscribe {}
}
}

component!(NewsletterSubscribe);
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
div[data-controller="cards-newsletter-subscribe"] {
.newsletter-subscribe-container {
background-position: center;
background-size: cover;
background-repeat: no-repeat;
@include media-breakpoint-up(md) {
background-image: url(/api/flow.js?q=https%3A%2F%2Fgithub.com%2Fpostgresml%2Fpostgresml%2Fpull%2F1327%2F%26quot%3B%2Fdashboard%2Fstatic%2Fimages%2Fnewsletter_subscribe_background_desktop.png%26quot%3B);
}
background-image: url(/api/flow.js?q=https%3A%2F%2Fgithub.com%2Fpostgresml%2Fpostgresml%2Fpull%2F1327%2F%26quot%3B%2Fdashboard%2Fstatic%2Fimages%2Fnewsletter_subscribe_background_mobile.png%26quot%3B);
background-color: #{$pink};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<div data-controller="cards-newsletter-subscribe">
<div class="d-flex flex-column flex-lg-row gap-4 justify-content-center align-items-center newsletter-subscribe-container p-5 rounded-4">
<div class="d-flex flex-column gap-4 text-center text-md-start" style="flex: 4">
<h3>Subscribe to our newsletter. (It’s better than you think)</h3>
<p>No spam. No sales pitches. Just product updates. Keep up with all our articles and news. Join our newsletter and stay up to date!</p>
</div>

<form action="/newsletter_subscribe" class="d-flex flex-column justify-content-center align-items-center gap-3 w-100" style="flex: 3" method="post">
<div class="input-group p-1 ps-3 subscribe-input">
<input type="email" class="form-control border-0" placeholder="hootareyou@email.com" name="email" autocomplete="off">
<button type="submit" class="btn btn-primary rounded-2 d-none d-md-block">Subscribe</button>
</div>
<button type="submit" class="btn btn-primary rounded-2 d-md-none">Subscribe</button>
</form>
</div>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ div[data-controller="cms-index-link"] {
.level-2-list, .level-3-list {
margin-left: 4px;
padding-left: 19px;
border-left: 1px solid white
border-left: 1px solid #{$gray-600};
}

.nav-link:hover {
Expand Down
4 changes: 4 additions & 0 deletions pgml-dashboard/src/components/layouts/docs/docs.scss
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,8 @@ div[data-controller="layouts-docs"] {
background: radial-gradient(46.38% 45.17% at 22.72% 36.9%, rgba(57, 210, 231, 0.30) 26.4%, rgba(174, 110, 255, 0.30) 100%);
filter: blur(252.66856384277344px);
}

&.border-botom {
border-bottom: 1px solid #{$gray-600};
}
}
2 changes: 1 addition & 1 deletion pgml-dashboard/src/components/layouts/docs/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<html lang="en-US">
<%+ head %>
<body data-bs-theme="dark" data-theme="docs">
<div data-controller="layouts-docs">
<div class="border-bottom" data-controller="layouts-docs">
<%+ MarketingNavbar::new(user).style_alt() %>

<div class="d-flex w-100">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"product" => "dashboard",
"use cases" => "account_circle",
"resources" => "school",
"introduction" => "list_alt",
_ => "dashboard",
}
}
Expand Down Expand Up @@ -33,7 +34,7 @@
<%+ doc_link %>
<% } else { %>
<div class="d-flex flex-column">
<%- title(doc_link.title) %>
<%- title(doc_link.title.to_uppercase()) %>

<% for item in doc_link.children {%>
<%+ item %>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

let company_links = vec![
StaticNavLink::new("About".to_string(), "/about".to_string()).icon("smart_toy"),
StaticNavLink::new("Careers".to_string(), "/careers/".to_string()).icon("work"),
StaticNavLink::new("Careers".to_string(), "/careers".to_string()).icon("work"),
StaticNavLink::new("Contact".to_string(), "/contact".to_string()).icon("alternate_email")
];

Expand Down
4 changes: 2 additions & 2 deletions pgml-dashboard/src/components/navigation/toc/template.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

<aside class="pt-xxl-4 px-xxl-0 toc-container" data-controller="navigation-toc">
<aside class="pt-xxl-4 px-xxl-0 toc-container pb-xxl-4" data-controller="navigation-toc">
<nav class="card nav toc rounded-0">
<div class="card-body py-2 py-xxl-4">
<p class="mb-3 d-none d-xxl-block legal-text text-white">IN THIS DOC</p>
Expand All @@ -17,7 +17,7 @@
_ => ("20px", "20px", "fw-normal", "6px")

}; %>
<div style='padding-top: <%- padding_y %>; padding-bottom: <%- padding_y %>; padding-left: <%- padding_left %>; margin-left: <%- margin_left %>; <% if link.level > 3 {%><%- "border-left: 1px solid white" %><% } %>'>
<div class='<% if link.level > 3 {%><%- "border-left" %><% } %>' style='padding-top: <%- padding_y %>; padding-bottom: <%- padding_y %>; padding-left: <%- padding_left %>; margin-left: <%- margin_left %>'>
<a class="nav-link px-0 py-0 text-break <%- fw %>" href="#<%= link.id %>" role="button" data-action="click->docs-toc#setUrlFragment">
<%= link.title %>
</a>
Expand Down
4 changes: 4 additions & 0 deletions pgml-dashboard/src/components/navigation/toc/toc.scss
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,8 @@ aside[data-controller="navigation-toc"] {
.border-top {
border-color: #{$gray-600};
}

.border-left {
border-left: 1px solid #{$gray-600};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@ div[data-controller="notifications-marketing-feature-banner"] {
left: 0.5rem;
}
}
.more-info {
transition-duration: 0.5s;
transition-property: left;
left: 0rem;
}
}
.feature1 {
background-color: #{$slate-shade-100};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
if notification.link.is_some() { format!(r#"a href="{}" data-turbo="false" "#, notification.link.clone().unwrap()) } else { "div".to_string() },
if notification.link.is_some() { "btn btn-tertiary p-0" } else { "" },
notification.message,
if notification.link.is_some() { r#"<span class="material-symbols-outlined more-info position-relative" style="top: 2px;">arrow_forward</span>"# } else { "" },
if notification.link.is_some() { r#"<span class="material-symbols-outlined more-info position-relative goto-shift-animation" style="top: 2px;">arrow_forward</span>"# } else { "" },
if notification.link.is_some() { "a" } else { "div" },
); %>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
use crate::components::Carousel;
use crate::components::cards::blog::ArticlePreview;
use crate::components::pages::blog::LandingPage;
use crate::components::sections::common_resources::{Cards, CommonResources};

let featured_cards = index
.clone()
Expand All @@ -18,6 +19,7 @@
<div data-controller="pages-blog-landing-page" class="overflow-hidden tuck-under-navbar">
<div class="container-fluid">
<div class="container">

<div class="position-relative overflow-show glow-1" >
<div class="position-absolute red-1"></div>
</div>
Expand All @@ -42,5 +44,9 @@ <h1>PostgresML <span class="text-gradient-blue">Blog</span></h1>
<% } %>
</div>
</div>

<div class="mt-5">
<%+ CommonResources::new().show(Vec::from([Cards::Contribute, Cards::Docs, Cards::Community])) %>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
div[data-controller="pages-careers-landing-page"] {
.glow-1 {
z-index: -1;
top: -10rem;
left: -5%;

@include media-breakpoint-down(md) {
top: -5rem;
left: 0%;
}
}

.sky-1 {
width: 752px;
height: 619px;
max-width: 50vw;
position: absolute;
right: -50%;
transform: translateX(-50%);
border-radius: 752px;
background: radial-gradient(46.38% 45.17% at 22.72% 36.90%, rgba(57, 210, 231, 0.60) 26.40%, rgba(174, 110, 255, 0.60) 100%);
filter: blur(252.66856384277344px);
}

.orange {
width: 608.173px;
height: 456.083px;
transform: rotate(-1.255deg);
flex-shrink: 0;
border-radius: 608.173px;
background: radial-gradient(50% 50% at 50% 50%, #8B44FF 0%, #FF783F 100%);
filter: blur(168.74745178222656px);
right: -50%;

@include media-breakpoint-down(md) {
right: -120%;
}
}

.ellipse-18 {
width: 671.384px;
height: 669.401px;
transform: rotate(-149.621deg);
flex-shrink: 0;
border-radius: 671.384px;
background: radial-gradient(46.38% 45.17% at 22.72% 36.9%, rgba(136, 234, 255, 0.50) 26.4%, rgba(110, 125, 255, 0.50) 82.81%);
filter: blur(99.1705322265625px);
left: -58%;
}

.ellipse-19 {
width: 686px;
height: 645px;
flex-shrink: 0;
border-radius: 686px;
background: radial-gradient(46.38% 45.17% at 22.72% 36.9%, rgba(250, 237, 249, 0.50) 10.94%, rgba(239, 55, 255, 0.25) 100%);
filter: blur(99.1705322265625px);
left: -60%;
top: 15vh;
}

.card {
background: #{$gray-800};

.card-eyebrow {
color: #{$gray-100}
}

.goto-arrow {
left: 0rem;
}
&:hover {
background: #{$gray-700};
.card-eyebrow {
@include text-gradient($gradient-green);
}
.goto-arrow {
left: 0.5rem;
}
}

}

.card-generic-job-position {
background: #{$gray-900};
border-radius: 20px;
border: 1px solid #{$gray-300};
}

li::marker {
color: #{$purple};

}

}
53 changes: 53 additions & 0 deletions pgml-dashboard/src/components/pages/careers/landing_page/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
use crate::api::cms::Collection;
use crate::components::notifications::marketing::FeatureBanner;
use crate::guards::Cluster;
use crate::Notification;
use pgml_components::component;
use sailfish::TemplateOnce;

struct Position {
title: String,
description: Option<String>,
tag: Option<String>,
href: String,
}

#[derive(TemplateOnce, Default)]
#[template(path = "pages/careers/landing_page/template.html")]
pub struct LandingPage {
feature_banner: FeatureBanner,
positions: Vec<Position>,
}

impl LandingPage {
pub fn new(context: &Cluster) -> LandingPage {
LandingPage {
feature_banner: FeatureBanner::from_notification(Notification::next_feature(Some(context))),
positions: Vec::new(),
}
}

pub async fn index(mut self, collection: &Collection) -> LandingPage {
let urls = collection.get_all_urls();
for url in urls {
let file = collection.url_to_path(url.as_ref());

let doc = crate::api::cms::Document::from_path(&file).await.unwrap();

let tag = match doc.tags.len() {
0 => None,
_ => Some(doc.tags[0].clone()),
};

self.positions.push(Position {
title: doc.title,
description: doc.description,
tag,
href: url,
})
}
self
}
}

component!(LandingPage);
Loading