Web

Devvoir

AI-written standup and progress reports built from your GitHub pull requests, in the tone and length you choose.

A web app designed and built by Hassan Ur Rahman.

Overview

Devvoir is a web app for developers who have to write status updates. You sign in with GitHub, pick your personal account or an organization, then a repository, a branch, and a date range. Devvoir lists the matching pull requests, pulls the code diffs for the ones you select, and has an LLM turn them into a structured Markdown report that non-engineers can follow.

Reports come in three tones: a brief standup, a detailed technical summary, or an executive overview for non-technical stakeholders. You can copy, regenerate, or export them as Markdown or PDF. Every account gets a monthly free quota, and extra report packs are sold through Lemon Squeezy.

Key features

  • GitHub sign-in with organizations

    GitHub OAuth sign-in. The account picker lists your personal account and every organization you belong to.

  • Pull request selection

    Pull requests are fetched from the GitHub REST API and filtered by base branch and created-date range.

  • AI report generation

    Selected PR diffs go to Mistral with a structured prompt. Every bullet starts with a verb such as Added, Updated, Fixed, or Refactored.

  • Configurable tone and length

    Choose standup, detailed, or executive tone and concise, standard, or comprehensive length. Length also sets the token budget.

  • Built-in diff viewer

    A custom diff component parses unified diff hunks and highlights syntax with Prism.js, so you can review changes next to the report.

  • Export and regenerate

    Download reports as Markdown, export to PDF, copy to the clipboard, or regenerate with the same settings. Reports are saved to Postgres.

  • Free quota and paid top-ups

    A monthly free report limit, with Lite and Pro packs sold through Lemon Squeezy and credited by a signed webhook.

How it's built

  • Next.js 16 App Router with React 19, TypeScript, and Tailwind CSS v4, hosted on Vercel.
  • Mistral AI (mistral-medium-latest) through the official SDK, with a system prompt assembled from tone and length modules. PR metadata such as title, labels, and description is added by code after generation rather than by the model.
  • NextAuth with the GitHub provider and JWT sessions. The GitHub access token in the session is used for all GitHub REST API calls.
  • PostgreSQL through Prisma 7 with the pg driver adapter. Models cover users, sessions, saved reports, and per-user quota settings.
  • Lemon Squeezy checkout and webhook. The webhook verifies its HMAC-SHA256 signature with a timing-safe comparison before crediting reports.
  • A daily Vercel Cron job resets each user's monthly usage on their reset date.

Challenges & solutions

Large pull requests vs. the model's context window
Changed files are ranked by an importance score: lines changed plus diff hunks, weighted up for source files and down for lockfiles. Only the top files go to the model, and if the context is still too large the API returns a clear 413 asking you to select fewer PRs.
One report, different audiences
Separate tone and length instructions are appended to a strict base prompt, and the token cap scales with the chosen length, so a standup and an executive summary built from the same PRs each read the way they should.
Combining a free tier with paid credits
Generation draws on monthly credits first and purchased credits second. Purchased credits survive the monthly reset, and when both run out the API returns 429 with the reset date.

Tech stack

  • Next.js
  • Mistral AI
  • PostgreSQL
  • Prisma
  • NextAuth
  • Vercel

More projects