Google Docs · for code · with a timer

Schedule a call.
Send a link.

Codepad is a real-time collaborative code pad. Cursors sync like Google Docs. A shared timer runs mock interviews. And a private notestab only you can see — perfect for rubric scoring while your candidate types.

no accounts shared timer private tabs
URL
codepad.io/p/swift-heron-42
two-sum · mock interview
synced
24:18
R
Y
PYtwo_sum.pyR×
TXTprompt.txt×
MDrubric.md×
+
python · utf-8 · 512 blf · tab: 4
1
2
3
4
5
6
7
8
9
10
11
12
# 2sum — candidate typing
def two_sum(nums, target):
    seen = {}
    for i, n in enumerate(nums):
        need = target - n
        if need in seen:
            return [seen[need], i]
        seen[n] = i
    return []
private
interview notes
only you
clarified input
hashmap insight at 06:12
explain O(n) — waiting
follow-up: sorted array?
42 words218 chars
notes
timer
synced · ln 7 · col 28 · utf-82 peers · partykit

Key Features

01 Real-time

Cursors like Google Docs, code like your editor.

Labeled carets, tinted selections, jump-to-peer — on top of a real CodeMirror buffer with 40+ language modes. Not a textarea in disguise.

See the comparison →
02 Shared timer

Run mock interviews without a second tab.

A chronograph in the title bar. Pick 25 / 45 / 60 min. Starts for both of you — synced to the second, visible to both of you.

Set up a mock →
03 Private tabs

Score them while they solve it.

Mark a tab private and it stays local to you. Rubric, gotchas, follow-ups. Your candidate never sees it — not in the tab bar, not in the URL.

Share a snippet →
Collaboration

The “Google Docs moment” — but for code.

Google Docs made “send me the link” the default for writing. Codepad does the same for a snippet, a scratch file, a take-home. Same ergonomics, right editor.

the usual

Google Doc · for code

  • Paste-to-share link
  • Cursors + selections sync
  • Syntax highlighting
  • Gutter, line numbers, tabs
  • Multiple files in one URL
  • Shared countdown timer
  • Private-only tabs
R
A
Riley is editing · Ana is viewing
codepad

A real editor behind the URL

  • Paste-to-share link
  • Cursors + selections sync
  • Syntax highlighting (40+ languages)
  • Gutter, line numbers, tabs per pad
  • Multiple files in one URL
  • Shared countdown timer
  • Private-only tabs
R
A
Y
3 peers typing · synced <80ms
Mock interviews

A shared timer — for the conversation you’re already having.

Coding interviews are timed. Your pad should be too. Set 45 minutes from the title bar and both of you watch the same arc drain. No extra tab, no stopwatch on your phone, no “how long left?”

backend · screen 1
C
Y
live
24:18
of 45:00
session
Backend screen · two-sum
25m45m60m90m
running
PY two_sum.py
TXT prompt.txt
rubric.md
# candidate is typing…
def two_sum(nums, target):
    seen = {}
    for i, n in enumerate(nums):
        need = target - n
        if need in seen:
            return [seen[need], i]
        seen[n] = i
synced · timer shared2 peers · 24:18 / 45:00
01 · Pick a duration

One click. Both clocks start.

Presets for standard interview lengths. Pick one — your candidate sees the same arc in their title bar, drifting in lockstep.

25m · phone45m · screen60m · onsite90m · take-home
02 · Rubric, while they type

Score from a private tab.

Check boxes, jot timestamps, rate trade-offs. The whole rubric lives in a tab only you can see — no tab-switching.

Clarifies input & edge casesprivate
States brute-force firstprivate
Reasons about time / spaceprivate
Writes at least one testprivate
Private notes

Two rooms, one pad.

Mark any tab as private with a single click and it disappears from everyone else’s tab bar. Your notes live alongside the code you’re talking about — in the same URL, the same editor, the same keybindings.

shared · everyone sees this
R
Y
two_sum.py
# candidate is typing…
def two_sum(nums, target):
    seen = {}
    for i, n in enumerate(nums):
        need = target - n
        if need in seen:
            return [seen[need], i]
        seen[n] = i
    return []
private · only you
Y
rubric.md
Candidate · Riley K.
45m screen·started 14:02
  • 06:12 · asked about duplicates — good instinct
  • 08:45 · brute-force first, called it out
  • 11:30 · hashmap idea unprompted
  • ·explaining O(n) now — watch for confusion about hash collisions
  • ·follow-up if time: sorted input? → two pointers
working score4/5
Private tabs never leave your browser · not in the URL · not in presence · not in the share link
Everything else

Small stack. Real editor.

The boring-good parts. CodeMirror under the hood, yjs for sync, partykit on the edge, a theme for every light sensitivity.

Realtime

Yjs CRDT sync

No conflicts, no lost edits — even when a peer drops offline mid-edit.

Editor

CodeMirror 6

Gutter, vim bindings, bracket matching. 40+ language modes.

Identity

No accounts

Pick a name once. Your pads travel on their URL. Log in only when you want cross-device history.

Share modes

Read-only snapshots

Flip any pad read-only with one click. Great for posting code in a design doc without a stranger deleting your SQL.

Theme

Midnight or paper

Dark default, light opt-in. No flash on load. Each peer picks their own — the doc stays in sync.

Open source

MIT-licensed. Self-host on your own partykit.

Next.js + Supabase + PartyKit. npm install, two env vars, npm run dev.

&star; Star on GitHub
Start a pad

Send the link.

Mock interview in ten minutes. Scratch pad in one. A second browser tab is all the setup your candidate needs.