Back to jobs
tags.new

Frontend Software Engineer

Remote - USA

Team: Engineering
Reports to: VP of Product
Candidates must be US citizens or green card holders.

Who We Are
Gravwell is a full-stack security and observability platform built for people who need answers from their data—fast. Whether you're hunting threats, investigating incidents, or validating system health, Gravwell gives you the tools and performance to stay ahead. We're on a mission to simplify the SIEM experience without sacrificing power or flexibility.

What You’ll Do

The Frontend Software Engineer supports Gravwell’s software engineering group which is responsible for the design, development, and testing of the Gravwell product and will report to the VP of Product. Candidates must be self-motivated, comfortable working remotely, willing to learn and to tackle tough challenges.

The Gravwell product is a highly dynamic data analysis and visualization platform designed to process and display large sets of unstructured data and to manage automation tasks.  Candidates must be comfortable developing on Linux, have 3 years of experience with TypeScript, web application frameworks, and REST APIs. Candidates should be able to demonstrate a strong understanding of software design, software development life cycles, unit testing, and end-to-end testing. 

Your Responsibilities

  • Responsive Angular Web Application Development
  • Documentation of software, user interfaces, and APIs
  • Internationalization / localization
  • Profiling and optimizing performance
  • Testing of frontend web application

What We’re Looking For

A qualified candidate must be well versed in TypeScript, Angular, and REST. The candidate will only have access to Gravwell-hosted AI services as a software development tool and must be able to work independently of external services. The position requires a candidate that takes ownership of problems and works with the team to efficiently produce effective, well-tested solutions. Good candidates bring new ideas to the team and strive to improve the product.

The position is remote and requires minimal travel, but candidates should be available during regular business hours. A reliable internet connection is required. Strong communication skills are necessary to effectively interact with the rest of the team and to participate in customer feedback sessions.

  • Degree in computer science, computer engineering, or similar discipline.
  • 3+ years of experience.
  • Strong web development fundamentals including but not limited to:
    • Strong understanding of JavaScript runtime
    • Angular 16+ (or other modern web application framework)
    • RxJS
    • TypeScript
    • REST APIs
    • JSON
    • HTML / CSS / Responsive design
  • Strong Git skills
    • Client proficiency
    • GitHub pull requests
  • Visualization experience
    • Vega
    • D3
    • Echarts
  • Familiarity with software development life cycles
    • Defining requirements
    • Software design
    • Implementation
    • Unit testing and e2e testing
  • Strong verbal and written communication skills
    • Fluent in English

Nice to Have

  • Docker
  • e2e testing tools (e.g. Playwright, Cypress)
  • State management libraries (e.g. NgRx, Redux)

Why Gravwell?

  • Work where your impact is direct, visible, and appreciated
  • Full autonomy and trust to solve problems that we may not have known we had
  • Flexible remote work setup with a strong support culture
  • Access to mission-critical projects and real-world security data
  • Help build a better analytics experience

Compensation

Base Salary: $90,000 - $220,000

Don’t meet every single requirement?

That’s okay. We believe great teammates can learn new skills. If you bring curiosity, a strong work ethic, and a collaborative mindset, we can teach the rest. Gravwell is built by people who love solving problems together—we’d love to meet you.

Remote Position (United States)

Gravwell provides our employees with the flexibility to be creative and successful no matter where they are located. We have a flexible approach to work, meaning you can work from home, regardless of where you live within the United States. Gravwell provides flexible benefits and a collaborative work environment.

Equal Opportunity Employer

Gravwell is an Equal Opportunity Employer. All applicants will be considered for employment without attention to race, color, religion, sexual orientation, gender identity, national origin, veteran or disability status. Gravwell is a progressive and open-minded workplace where we do not tolerate discrimination of any kind. 

Apply for this job

*

indicates a required field

Phone
Resume/CV*

Accepted file types: pdf, doc, docx, txt, rtf

Cover Letter

Accepted file types: pdf, doc, docx, txt, rtf


Implement Multifit*

Accepted file types: pdf, doc, docx, txt, rtf

Purpose
The purpose of this task is to provide the interviewers with a code sample from the interviewee. The interviewers will evaluate the sample for code quality and correctness.

Prompt
The multifit algorithm is an approximation algorithm for multiway number partitioning:
https://en.wikipedia.org/wiki/Multifit_algorithm

Please implement multifit in TypeScript.
We encourage you to refer to the pseudo code in the Wikipedia article on multifit. We will evaluate the correctness of your implementation by importing it into a program of our own design. You may decide how your implementation should be used.

Submission
For this exercise, your submission should be a single txt file containing your TypeScript implementation of the multifit algorithm. The file should also include tests for your algorithm using your test framework of choice. Please clearly list any software dependencies your solution/tests use.

Spot the Bug*

Accepted file types: pdf, doc, docx, txt, rtf

Purpose
The purpose of this task is to give the interviewers an impression of the interviewee’s debugging skills and communication skills.

Prompt
Consider the following TypeScript program:

import { concatMap, from } from 'rxjs';

from(['a', 'b', 'c', 'd', 'e', 'f'])
.pipe(
      concatMap((s) => {
         const i = parseInt(s, 16);
         const d = i.toString();
         if (i % 2 === 0) {
            return `even: ${s} (${d})`;
         }
         return `odd: ${s} (${d})`;
      })
   )
   .subscribe((x) => console.log(x));


For each element of the given list of string representations of hexadecimal numbers, this program should output a single line showing:
- The parity (even/odd) of the number
- The number itself
- The base 10 equivalent of the number
That is, we expect the output to look like the following:

even: a (10)
odd: b (11)
even: c (12)
odd: d (13)
even: e (14)
odd: f (15

Questions
Please debug the program and answer the following questions.
1. How is the output of the original program different from the expected output?
2. Why is the output of the original program different from the expected output?
3. How would you change the program, so that the output matches the expected output?
4. Do you have any other suggestions to improve the program?

Submission
For this exercise, your submission must include your response to each of the questions above.

Implementing a List*

Accepted file types: pdf, doc, docx, txt, rtf

Purpose
The purpose of this task is to give the interviewers an impression of the interviewee’s
understanding of browser APIs, performance limitations, and CSS properties.

Prompt
Please implement a responsive, scrollable list of items without the use of a JavaScript
framework/library.

Appearance on a Mobile Browser
On mobile, this list should look like...

| Item Name |   | Item Name |

| Item Name |   | Item Name |

| Item Name |   | Item Name |

| Item Name |   | Item Name |

Appearance on a Desktop Browser
On desktop, this list should look like...

| Item Name |  | Item Name |  | Item Name |  | Item Name |  

| Item Name |  | Item Name |  | Item Name |  | Item Name |  

| Item Name |  | Item Name |  | Item Name |  | Item Name |  

| Item Name |  | Item Name |  | Item Name |  | Item Name |  


Questions

1. How would the UX of this list suffer if JavaScript was disabled?
2. At about what number of items in the list would performance noticeably degrade?
3. How would you increase the performance of the list?

Submission
For this exercise, your submission must include a single txt file containing the HTML source for your scrollable list. Any CSS or Javascipt should be embedded in the HTML for ease of upload and review. The txt file should also include your responses to the questions above.