About the Position

We are looking for an aspiring TypeScript Developer (Frontend) who is eager to gain hands-on experience building modern, scalable web applications. As part of our internship program, you’ll join a team of experienced developers and fellow interns, working on real projects and receiving guidance to grow your skills.

For more details about how our internship works, please see our Internship Overview.
To learn more about our team and who you’ll be working with, visit https://foreachpartners.com/.

What You Will Do

  • Implement responsive, dynamic user interfaces for Single-Page Applications (SPA) and Server-Side Rendered (SSR) web apps using TypeScript, Vue.js, Nuxt.js, and Quasar.
  • Collaborate with team members to understand project requirements, refine solutions, and deliver user-facing features.
  • Contribute to code reviews and discussions, adopting best practices in front-end development.
  • Continuously learn and adapt to new technologies and tools in your own time.

What We’re Looking For

  • Core Knowledge:
    • Basic understanding of JavaScript; familiarity with TypeScript is a plus.
    • Theoretical knowledge of at least one web application framework (not necessarily JS-based).
  • Eagerness to Learn:
    • Willingness to invest personal time into mastering multiple development technologies.
  • Additional Skills (Nice-to-Have):
    • Experience or familiarity with SQL, HTML, CSS (including preprocessors such as LESS/SASS).
    • Comfort using Linux command-line tools, Docker, Git, and professional IDEs (e.g., WebStorm).
  • Foundational CS Literacy:
    • A basic understanding of databases, networks, common web stacks, and operating systems (especially Linux) is welcome.

Why Apply?

  • **Practical Experience:**Move beyond theory by working on real projects with experienced professionals.
  • **Skill Growth:**Improve your technical skill set, problem-solving capabilities, and familiarity with popular tools and frameworks.
  • Career Building:
    Successful participants may have opportunities to continue collaboration on commercial terms.

Next Steps: Test Tasks

As part of your application, please complete the following tasks. These are designed to gauge your problem-solving skills, code quality, and understanding of development and testing practices.

Task 1: Implement a getScore Function

Objective:
We provide a code snippet that generates a list of game score states (gameStamps) over time. Implement the getScore(gameStamps, offset) function to return the score at a specific offset.

Review the code carefully, understand its logic, and ensure your solution matches the existing style and complexity.

Code snippet:

const TIMESTAMPS_COUNT = 50000;

const PROBABILITY_SCORE_CHANGED = 0.0001;

const PROBABILITY_HOME_SCORE = 0.45;

const OFFSET_MAX_STEP = 3;

type Score = {
home: number;
away: number;
};

type Stamp = {
offset: number;
score: Score;
};

const emptyScoreStamp: Stamp = {
offset: 0,
score: {
home: 0,
away: 0,
},
};

export const generateStamps = (): Stamp[] => {
const scoreStamps = Array(TIMESTAMPS_COUNT)
.fill(emptyScoreStamp)
.map(
((acc) => () => {
const scoreChanged =
Math.random() > 1 - PROBABILITY_SCORE_CHANGED;
const homeScoreChange =
scoreChanged && Math.random() < PROBABILITY_HOME_SCORE
? 1
: 0;
const awayScoreChange =
scoreChanged && !homeScoreChange ? 1 : 0;
return {
offset: (acc.offset +=
Math.floor(Math.random() * OFFSET_MAX_STEP) + 1),
score: {
home: (acc.score.home += homeScoreChange),
away: (acc.score.away += awayScoreChange),
},
};
})(emptyScoreStamp)
);

return scoreStamps;
};

export const getScore = (gameStamps: Stamp[], offset: number): Score => {
// continue the function's implementation
};

Deliverables:

  • Provide a link to a gist with your getScore implementation.

Task 2: Write Tests for getScore

Objective:
Using Jest, write comprehensive unit tests for your getScore function. The tests should cover a variety of scenarios, focus on testing distinct cases, and have clear, descriptive names.

Deliverables:

  • Provide a link to a gist with your Jest test files.

Task 3: Weather Forecast Application

**Objective:**Build a simple Vue.js application that allows users to search for locations and display current weather conditions along with a daily forecast.

  1. Search for locations using an API (e.g.,https://geocoding-api.open-meteo.com/v1/search?name=Berlin&count=10&language=en&format=json).
  2. Fetch and display daily weather forecasts and current conditions (e.g.,https://api.open-meteo.com/v1/forecast?latitude=55.7522&longitude=37.6156&hourly=temperature_2m&start_date=2024-04-02&end_date=2024-04-03).
  3. Present the forecast in a user-friendly format (a simple list or chart).

Requirements:

  • Must use Vue.js.
  • Implement location search through the API.
  • Time stamps should be converted to the user’s local timezone.

Deliverables:

  • A link to the deployed application where the features can be tested.
  • Links to a GitHub repository containing the full source code.

We look forward to reviewing your submissions and possibly welcoming you to our team!