Share a private GitHub repo as a read-only link

Pick a repo and a branch, choose when the link expires, and send it. The person you send it to can browse the code in their browser. They can’t clone it, push to it, or see anything else in your account.

See pricing

Your first link is free. No card needed.

What the reader seesNo GitHub account needed
acme/payments-apimain
Expires in 23h 14m
src/auth.ts3.7 KB
import { createHmac, timingSafeEqual } from "node:crypto";

const WINDOW_MS = 5 * 60 * 1000;

export async function authorize(req: Request) {
  const sig = req.headers.get("x-acme-signature");
  const ts  = req.headers.get("x-acme-timestamp");
  if (!sig || !ts) throw new Unauthorized("missing signature");

  const age = Date.now() - Number(ts);
  if (age > WINDOW_MS) throw new Unauthorized("stale request");

  const body     = await req.text();
  const expected = createHmac("sha256", SECRET)
    .update(`${ts}.${body}`)
    .digest();

  if (!timingSafeEqual(Buffer.from(sig, "hex"), expected)) {
    throw new Unauthorized("bad signature");
  }

  return JSON.parse(body);
}
On sign-up
1free link
After that
$1per link
Approved access requests
7day link, no credit

How it works

1

Install the GitHub App

Sign in with GitHub, then install the GitPeek app on the repositories you want to share. It only sees the ones you pick.

acme/payments-api
acme/infra-terraform
acme/website
2

Create a link

Pick the branch and how long the link lasts. Add a password, make it one-time, or ask readers for their email.

1h24h7dnever
PasswordOne-timeAsk for email
3

Send it, delete it

Paste the link wherever you talk to them. Your dashboard shows how often it has been opened, and you can delete it at any time.

acme/payments-api
Views
Delete

What the reader gets

The person who opens your link does not need a GitHub account.

They can

  • Browse every file and folder on the branch you shared
  • Read code with syntax highlighting, and Markdown rendered
  • Download the branch as a ZIP, if you allow it
  • Ask for a new link after this one expires

They can’t

  • Clone, fork, or push
  • See other repositories in your account
  • Copy text or download files, if you turn that off
  • Open the link after it expires or you delete it

Link options

Each link has its own settings, so an interview take-home and a due-diligence review don’t have to share them.

Branch

Pick which branch the link shows. The reader browses that branch only.

one branch
Expiry

An hour for a live interview, a week for a review, or no expiry at all.

1h, 24h, 7d, never
Password

Readers enter a password before the code loads. Send it separately from the link.

optional
One-time

The link stops working after it has been opened once.

optional
Copy and download

Lets readers select and copy text and download the branch as a ZIP. Turn it off and they can only read.

on or off
Ask for email

Readers type their email address before the code loads. It is saved with each view so you can see who opened the link. The address is not verified.

optional

When a link runs out, the reader can ask for a new one

Instead of a dead page, they see a short form for their email and an optional message. The request shows up in your dashboard. Approving it makes a new link to the same repo and branch that lasts 7 days and doesn’t use a credit. You copy it and send it to them.

Access requests

1 waiting
dana@example.comacme/payments-api · 11 minutes ago

“Could I have one more day to finish the review?”

DismissApprove
k.morrow@example.comacme/infra-terraform · 2 hours ago
Approved. Send them this link:
/view/cm4k2x9p0000…

Approving makes a new link that lasts 7 days. It doesn’t use a credit.

Pricing

You pay per link, not per seat. One credit makes one link. Credits don’t expire and there’s no subscription.

Free
$01 credit on sign-up

Enough to make your first link and see what the reader sees. No card needed.

  • Every link option
  • Access requests after a link expires
  • View count for each link
Pay as you go
$1per credit

Buy as many credits as you need, when you need them. Orders of 10 or more get a bulk discount.

  • One credit makes one link
  • Credits don’t expire
  • No subscription. Card payment through Stripe

Questions

Two things. Signing in uses GitHub OAuth with the repo, read:user and user:email scopes. GitHub’s repo scope covers your private repositories and is broader than read-only. Reading code for a link goes through the GitPeek GitHub App, which you install only on the repositories you choose. [Confirm the App’s exact permissions, for example Contents: read-only and Metadata: read-only, before launch.]

GitPeek is built by [YOUR NAME]. [Why you made it, in one or two sentences.] If something breaks or you need a feature, contact [YOUR CONTACT].