BragBit
GitHub

Open source · Self-hosted · AGPL-3.0

Your promotion evidence, on your own Postgres.

You shipped a hundred things this year. At review time you can name three — and two of them happened last month. BragBit is a brag document that takes under 30 seconds to feed, and runs on infrastructure you control.

docker compose up -d — and it's yours. No entry caps, no vendor to outlive you.

The BragBit document view: a 2026 review-period document with goals, a quick-add box reading “Log a win — only a title is required”, six action-verb template chips, category and tag filters, and the start of a month-grouped timeline.

The real thing — a document, its quick-add box, and the timeline beneath it.

The problem

“So — what did you do this year?”

The work that was hardest is the work that leaves the least evidence. The prevention, the glue, the mentoring — none of it had a ticket, so as far as the record is concerned, it never happened. Your memory is not a system of record. Your achievements are evidence. Evidence gets written down.

Kept in your head

  • Made the flaky test suite reliable — took a week
  • Caught the gateway outage at 2 a.m.
  • Unblocked the junior every morning for a month
  • Wrote the runbook nobody wanted to write
  • Talked the team out of the rewrite
  • Cut the CI pipeline from 31 min to 9

gone by December

Kept in BragBit

  • Made the flaky test suite reliable — took a week
  • Caught the gateway outage at 2 a.m.
  • Unblocked the junior every morning for a month
  • Wrote the runbook nobody wanted to write
  • Talked the team out of the rewrite
  • Cut the CI pipeline from 31 min to 9

still there at review time

“The palest ink is better than the best memory.”
— Chinese proverb

The formula

“Worked on checkout” is not evidence.

A win that survives a promotion committee has three parts. BragBit's editor keeps a field for each, and its templates seed all three — so you write the useful version on the first try, not the version you'll reconstruct in March.

  1. What you did

    Cut the CI pipeline from 31 min to 9 min

  2. Why it mattered

    Every engineer waited on it, every push, all day

  3. The measurable result

    3.4× faster CI · ≈40 engineer-hours/week recovered

The tour

Log it in seconds. Find it in a year. Hand it over in one link.

Capture

A win takes under 30 seconds

A title is all that's required — everything else can wait. Press N from anywhere, or start from an action-verb template when the page is blank and the words won't come.

BragBit's quick-add box reading “Log a win — only a title is required, everything else can wait…”, with an N keyboard shortcut and Add button, the formula hint beneath it, and six template chips: Shipped a project, Fixed a critical issue, Led an initiative, Mentored a teammate, Improved a process, Earned recognition.

Templates

Beat the blank page

Each template opens the editor pre-filled with the right category, status, and a Markdown scaffold — what you did, why it mattered, the measurable result. Add collaborators, attribution, tags, links, and attachments of any type. Mark it private and it never leaves your account.

The BragBit editor dialog titled “Log a win”, pre-filled from a template: category “Shipped work”, status “Shipped”, a private checkbox, and a Markdown description scaffold reading “What I shipped”, “Why it mattered”, “The measurable result”, plus fields for impact, collaborators, attribution, tags and links.

Cadence

A year of your logging, at a glance

A GitHub-style activity heatmap and a week streak on the dashboard, so the habit stays honest. Documents are review periods — a year, a half, a promotion case — and you keep as many as you like.

The BragBit dashboard showing an activity heatmap across twelve months, a 9-week streak, 30 wins this year, and a 2026 document card for the review period January 1 to December 31.

Share

One read-only link for your manager

Revocable, optionally password-protected, and branded to your workspace. Entries you marked private are never in it — the share is a view of the record, not a copy of it. Rotate the link or stop sharing at any time.

BragBit's share dialog showing a generated read-only share link with a copy button, a “Not opened yet” status, an optional password field, and controls to rotate the link or stop sharing.
A month-grouped BragBit timeline for July 2026 with four wins on a vertical spine: a glue-work entry about killing a duplicate-gateway alert storm, an in-progress technical entry, a leadership entry about running an incident review, and a technical entry about cutting dashboard load time.

A designed warm dark mode — not a mechanical invert. Follows your OS by default.

The inventory

Everything that ships today

No asterisks and no coming-soon column. If it's on this page, it's in the build you can run tonight.

49 capabilities · 8 areas

Capture

Get it down before it's gone.

  • Quick-add — only a title is required
  • Press N to log from anywhere
  • Log from Claude or any MCP client, without leaving the chat
  • Import your merged GitHub PRs and completed Linear issues — a token or one-click OAuth
  • Imported items wait in a review queue; nothing lands unapproved
  • Six action-verb templates that pre-fill the editor
  • Markdown description + a separate impact line
  • Eight categories, from shipped work to glue work
  • Status: shipped or in progress
  • Collaborators and attribution
  • Private entries, hidden from every shared view

Organize

A year of work, navigable.

  • Multiple documents — one per review cycle
  • Month-grouped timeline with a visible spine
  • Tags, scoped per workspace
  • Full-text search across wins
  • Category and status filters
  • Dashboard activity heatmap — a year at a glance
  • Week streak, to keep the habit honest

Evidence

Claims are cheap. Receipts aren't.

  • Attachments of any type — screenshots, PDFs, praise emails
  • Labeled links to PRs, RFCs, and dashboards
  • Image thumbnails, downscaled to webp on demand
  • Files served only through an authorizing route

Share

Hand over the case, not the keys.

  • Revocable read-only share links
  • Optional password, hashed to the OWASP Argon2id floor
  • Private entries never leak into a share
  • Share pages carry your workspace branding
  • Last-accessed tracking per link

Export

Leave whenever you like.

  • Markdown export per document
  • JSON export — every document and win
  • PDF via a print-tuned share page
  • Departing members leave with their full data bundle

Workspace

Make it look like yours.

  • White-labeling — name, logo, and accent color
  • Member management and invitations
  • Roles, role-gated admin, and ownership transfer
  • Branded transactional email

Account

Yours, and only yours.

  • Profile, avatar, and account settings
  • Required email verification and password reset
  • Optional GitHub and Google sign-in
  • Connected AI apps, reviewed and revoked in one click
  • Opt-in weekly reminders, in your local hour
  • Account deletion that purges your files too

Platform

Boring where it counts.

  • PostgreSQL + Drizzle, workspace-scoped from day one
  • One-command Docker Compose stack
  • Migrations run automatically on start
  • Local-disk or S3-compatible storage
  • A built-in MCP server and OAuth 2.1 provider — no extra service
  • Per-request Content-Security-Policy nonces
  • A real /api/health readiness endpoint
  • WCAG AA contrast, skip-link, keyboard navigable
  • Designed light and dark themes
  • AGPL-3.0 — network copyleft keeps forks open

Ownership

The most sensitive document of your career shouldn't live on someone else's server.

Your database

Postgres you run, on hardware or a host you picked. Career evidence — promotion cases, praise, salary arguments — never sits on someone else's roadmap.

postgres://your-server/bragbit

Your exit

Markdown, JSON, and PDF export, in full, on demand. Nothing is trapped in a proprietary shape, so leaving is a decision rather than a migration project.

bragbit-wins.md · data.json

Your license

AGPL-3.0. Read the code, change it, run it forever. Network copyleft means a hosted fork has to stay open too — the deal can't quietly change later.

AGPL-3.0 · network copyleft

Self-hosting

One command. Your server, your Postgres.

A workspace is the tenant boundary — a freelancer is a workspace of one, a company is a workspace with many. Everything beneath it is identical. You pick the shape once, at deploy time.

private-solo — one personal workspace, for a freelancer or an individual. No members, no invites, no roles: a workspace of one. Branding still applies, which is what your client-facing share pages use.

private-org — one organization workspace, for a company self-hosting for its team. Growth is invitation-only: there is no open sign-up, so an account exists only by accepting a tokenized invite.

  1. Clone it

    git clone https://github.com/hamedafarag/bragbit.git
    cd bragbit
    cp .env.example .env
  2. Set four things in .env

    INSTANCE_MODE=private-soloprivate-org
    APP_URL=https://brag.example.com
    BETTER_AUTH_SECRET=…            # openssl rand -base64 32
    SMTP_HOST=smtp.example.com     # + PORT / USER / PASSWORD / FROM

    That's the whole list. Compose wires DATABASE_URL and STORAGE_DIR for you. The secret must be at least 32 characters, and APP_URL is baked into emails and share links — use the real origin, over https.

  3. Bring it up

    docker compose up -d

    App and Postgres together. Migrations apply themselves on start, so a fresh deployment provisions its own schema. It's serving on http://localhost:3000.

  4. Open it — the wizard does the rest

    First run redirects to /setup. Create the owner account and your workspace, and you're in — the wizard then closes for good. It creates a single personal workspace and signs you straight in. If the URL is public before you get there, set SETUP_TOKEN to keep everyone else out of it.

    First run redirects to /setup. Create the owner account and your workspace, and you're in — the wizard then closes for good. It creates a single organization workspace; from /admin you then invite your team and set roles. Owners and admins manage branding, members, and invitations — but never read anyone's brag content. If the URL is public before you get there, set SETUP_TOKEN to keep everyone else out of it.

    • One personal workspace
    • Branded share pages
    • No member chrome
    • One organization workspace
    • Invitations + roles
    • Admins can't read your wins

Wired for you

Compose injects the database connection and a named volume for uploads. Two knobs worth setting: POSTGRES_PASSWORD (defaults to bragbit — change it on anything non-local) and APP_PORT (defaults to 3000).

TLS & health

The app serves plain HTTP — terminate TLS in front with Caddy, nginx, or Traefik (the Dokploy guide does it for you). /api/health returns 200 when the app and database are reachable and 503 when they aren't; point your uptime monitor at it.

Storage & your data

Attachments land on local disk by default; switch to any S3-compatible bucket — AWS, R2, or the bundled MinIO — with STORAGE_DRIVER=s3. Postgres and uploads live in Docker volumes and survive docker compose down.

Start the record today.

Back-fill three wins from last month — it takes ninety seconds, and it's the difference between remembering your year and reconstructing it.

Open source · AGPL-3.0 · Postgres · Docker