From 65c4c5fd83fa7eb7e4c56a753a29486f07720a4d Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 7 Apr 2022 03:22:50 -0400 Subject: [PATCH] Add jobs page --- _redirects | 1 + .../components/src/elements/ScrollToTop.tsx | 27 +++ packages/storyteller-home/src/App.tsx | 7 +- .../src/pages/index/IndexPage.tsx | 21 ++- .../src/pages/jobs/JobsPage.tsx | 177 ++++++++++++++++++ 5 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 packages/components/src/elements/ScrollToTop.tsx create mode 100644 packages/storyteller-home/src/pages/jobs/JobsPage.tsx diff --git a/_redirects b/_redirects index 25349f541a..cd24083c60 100644 --- a/_redirects +++ b/_redirects @@ -5,6 +5,7 @@ /coming-soon* /index.html 200 /contribute* /index.html 200 /firehose* /index.html 200 +/jobs* /index.html 200 /leaderboard* /index.html 200 /login* /index.html 200 /moderation* /index.html 200 diff --git a/packages/components/src/elements/ScrollToTop.tsx b/packages/components/src/elements/ScrollToTop.tsx new file mode 100644 index 0000000000..9ed0f990f2 --- /dev/null +++ b/packages/components/src/elements/ScrollToTop.tsx @@ -0,0 +1,27 @@ +import { useEffect } from 'react'; +import { withRouter } from 'react-router-dom'; +import { History } from "history"; + +// A solution for scroll-to-top behavior. +// From https://stackoverflow.com/a/54343182 +// And also https://v5.reactrouter.com/web/guides/scroll-restoration + +interface Props { + history : History, +} + +function ScrollToTop(props: Props) { + let { history } = props; + useEffect(() => { + const unlisten = history.listen(() => { + window.scrollTo(0, 0); + }); + return () => { + unlisten(); + } + }, [history]); + + return (null); +} + +export default withRouter(ScrollToTop); \ No newline at end of file diff --git a/packages/storyteller-home/src/App.tsx b/packages/storyteller-home/src/App.tsx index 7dc109f47d..f6030e0da9 100644 --- a/packages/storyteller-home/src/App.tsx +++ b/packages/storyteller-home/src/App.tsx @@ -6,6 +6,8 @@ import { BrowserRouter, Route, Switch } from 'react-router-dom'; import IndexPage from './pages/index/IndexPage'; import VoxelCamPage from './pages/voxelcam/VoxelCamPage'; import { Footer } from './common/Footer'; +import JobsPage from './pages/jobs/JobsPage'; +import ScrollToTop from '@storyteller/components/src/elements/ScrollToTop'; function App () { return ( @@ -14,11 +16,14 @@ function App () {
{/* */} - + + + + diff --git a/packages/storyteller-home/src/pages/index/IndexPage.tsx b/packages/storyteller-home/src/pages/index/IndexPage.tsx index b47822c2ab..fc42807838 100644 --- a/packages/storyteller-home/src/pages/index/IndexPage.tsx +++ b/packages/storyteller-home/src/pages/index/IndexPage.tsx @@ -5,6 +5,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import AudioSample from './AudioSample'; import Scene from './Scene'; import { TtsComponent } from './TtsComponent'; +import { Link } from 'react-router-dom'; function IndexPage () { return ( @@ -389,7 +390,6 @@ function IndexPage () {
-
@@ -423,7 +423,6 @@ function IndexPage () { and lighting — all post capture.

-
@@ -589,6 +588,24 @@ function IndexPage () {
+
+

We're hiring!

+

+ Fun and challenging tech. World-changing mission. +

+

+ We already have incredible traction, but there's + no better time to help us make an impact. +

+
+ + Learn More and Apply + +
+
); } diff --git a/packages/storyteller-home/src/pages/jobs/JobsPage.tsx b/packages/storyteller-home/src/pages/jobs/JobsPage.tsx new file mode 100644 index 0000000000..4f89d5832f --- /dev/null +++ b/packages/storyteller-home/src/pages/jobs/JobsPage.tsx @@ -0,0 +1,177 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { BackLink } from '@storyteller/components/src/elements/BackLink'; + + +function JobsPage () { + const jobsEmail = 'jobs@storyteller.io'; + return ( +
+
+ +

+ Storyteller  +
+ FakeYou's mascot! +
+

+ +

+ Help us build the future of production +

+
+ + {/*
+
+

We're hiring!

+

+
+
*/} + +
+
+
+
+
+ FakeYou's mascot! +
+
+
+

+ We're hiring! +

+

+

+
+

+ We're going to change the world by giving every person on this planet + Hollywood-level live production capabilities that they can leverage + directly from home. They won't even need a powerful computer. Deep fakes, + streaming, and storytelling capabilities to rival Disney — accessible + from any home PC. +

+
+
+
+
+ +
+
+ If our mission excites you, we'd love to have you on board. + + We're incredibly remote-friendly, but are exceedingly happy to + interview candidates based in Atlanta, GA., where we + have a huge motion capture studio / office (directly on the Beltline!), motion capture + actors and talent, and tons of direct, local connections to the film industry. + +
+
+ + Almost all of our stack is written in Rust, Python (PyTorch), + TypeScript (React), and C/C++. + + If you don't see a job that matches, keep a look out. We'll be posting additional + roles in the near future, including more ML and research roles. + +
+
+ + To apply for any of these positions, send your resume to {jobsEmail} + + +
+
+ +
+ +
+
+
+

Server Engineer

+ +

+ Since we work so directly in the signal processing and graphics domains, + our entire stack reflects the fact that we build for bare metal. Our web + services are written in Rust/Actix, which is every bit as productive as Ruby. + All of our code is shared in a Rust monorepo with builds orchestrated and + optimized with Bazel. +

+ +

Responsibilities

+
    +
  • Build a platform that empowers our community to create and upload audio, + video, 3D, motion, and other types of data.
  • +
  • Build services that work together at scale to orchestrate complex workflows.
  • +
+

Requirements

+
    +
  • Solid grasp of the Rust programming language
  • +
  • Solid grasp of SQL and Redis
  • +
  • Ability to write scalable, testable code
  • +
+

Nice to haves

+
    +
  • Experience with any of the following: Actix, Kubernetes, Python, GCP
  • +
  • Full stack (TypeScript/React)
  • +
+ +
+
+
+ +
+ +
+
+
+

Unreal Engine Engineer

+ +

+ One of the pillars of the platform we're building is rich volumetric + and motion capture, composited into 3D worlds. Our community will + create all sorts of incredible content, and you'll have a hand in + directly enabling that. + (We won't stop until our community can surpass Disney!) +

+ +

Responsibilities

+
    +
  • Map motion capture data to skeletal rigs in real time, improving collision + with props and other actors
  • +
  • Dynamically load community-provided character models, props, maps, and more
  • +
+

Requirements

+
    +
  • Strong grasp of Unreal Engine programming in C++
  • +
  • Strong understanding of animation and retargeting
  • +
+

Nice to haves

+
    +
  • Cross-platform development for Windows, Mac, and Linux
  • +
  • Experience with networking
  • +
  • Experience with Rust
  • +
  • Experience with spatial computing, photogrammetry, etc.
  • +
+ +
+
+
+ +
+
+
+ Again, that email is {jobsEmail}. You made it this far. Send us your resume! +
+
+ +
+
+
+ + + +
+ ); +} + +export default JobsPage;