The IDE. Not the puzzle box.

A full, collaborative IDE in the browser with real files, a real Linux terminal, synced cursors, a built-in AI agent. What you’re looking at is exactly what your candidate sees.

CodePair
PriyaPjetr
Pjetr
App.jsPjetr
filterEmoji.jsPriya
EmojiResults.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
import React, { PureComponent } from "react";
import Header from "./Header";
import SearchInput from "./SearchInput";
import EmojiResults from "./EmojiResults";
import filterEmoji from "./filterEmoji";

export default class App extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      filteredEmoji: filterEmoji("", 20)
    };
  }

  handleSearchChange = event => {
    this.setState({
      filteredEmoji: filterEmoji(event.target.value, 20)
    });
  };

  render() {
    return (
      <div>
        <Header />
        <SearchInput textChange={this.handleSearchChange} />
        <EmojiResults emojiData={this.state.filteredEmoji} />
      </div>
    );
  }
}
Priya
App.js
Tab 1Tab 2
+ New Tab
$ yarn test
yarn run v1.22.22
$ react-scripts test --watchAll=false
 
PASS src/EmojiResults.test.js
PASS src/Header.test.js
FAIL src/filterEmoji.test.js
✓ returns matching emoji by name (12 ms)
✕ handles leading whitespace (8 ms)
 
● filterEmoji › handles leading whitespace
expect(received).toEqual(expected) // deep equality
Expected length: 1
Received length: 3
 
Tests: 1 failed, 8 passed, 9 total
Time: 1.847s
…/workspaceon codepair

Click the numbered pins to read about each part of the IDE.

An interview that feels like day one.

Send a link and drop into an environment that mirrors your stack. No fake editors, no contrived tests — just real engineering work from minute one.