SuprLogs Changelog

database
backend
frontend
integrations

Multi-repo changelog support: link multiple GitHub repos to a project

  • Link multiple GitHub repositories to a single projectProjects can now track one or more GitHub repositories via a new project_repos table. You can add and remove repo links in project settings, webhooks and sync pipelines now run per linked repo (so one repository can trigger multiple projects), and history is preserved when removing links.
API
  • Added GET /v1/projects/:projectId/repos to list linked repositories and POST /v1/projects/:projectId/repos to link a repository; the POST validated installation ownership, created a project_repos row, fired repo/sync.requested with projectRepoId, and wrote a repo.connected audit entry.backend
  • Added DELETE /v1/projects/:projectId/repos/:repoId to remove a repository link, enforced a minimum of one linked repo (returned 422 if removal would leave zero), preserved commit and changelog history, and wrote a repo.disconnected audit entry.backend
  • Changed POST /v1/projects to create a seed project_repos row during project creation and include projectRepoId in the repo/sync.requested event.backend
  • Changed POST /v1/projects/:projectId/resync and the GitHub webhook handler to fan out one sync or push event per linked repo, with each event carrying projectRepoId and trackedBranch so multiple projects can receive events from the same repository.backend
  • Removed repo_owner and repo_name from the project object in GET /v1/changelog/:slug responses since repo coordinates moved to project_repos.backend
Improvements
  • Added a new project_repos join table via migration that backfilled existing projects, stored repo coordinates and sync metadata, enforced uniqueness, and applied row-level security consistent with projects.database
  • Added ProjectRepoRepository (exposed as db.projectRepos) with create, findByProjectId, findByRepo, findByInstallation, findById, updateSyncStatus, updateAvailableBranches, and delete methods.database
  • Moved repo-specific data and methods off the projects row — ProjectRepository was simplified and database types were updated so repo fields are now stored only on project_repos.database
  • Updated Inngest pipelines and event shapes to include projectRepoId on github/push.received, repo/sync.requested and commit/received; repo/sync.requested now accepted a 'repo_added' trigger and wrote sync status to project_repos.backend
  • Changed sync and push processing (github-sync-all-commits, github-process-push, and sync-repo) to fan out per project_repos row and to use trackedBranch and projectRepoId from the project_repos row.backend
Improvements
  • Added ProjectReposSection to project settings with an Add Repository modal (installation → repo → branch), per-row Remove button with confirmation, and display of sync status, tracked branch, and last-synced time.frontend
  • Added web proxy routes and client hooks (useProjectRepos, useAddProjectRepo, useRemoveProjectRepo), updated Dashboard, ProjectGrid, ProjectCard, project header, ProjectSwitcher, and ProjectSettings to fetch and render primary repo data correctly.frontend
Bug Fixes
  • Fixed a bug where the project_repos create result was not assigned (projectRepo was undefined), preventing the Inngest event from including projectRepoId.backend
  • Added and updated unit and end-to-end tests across database, API, and Inngest to cover the new multi-repo behavior, repository methods, and webhook fan-out.
backend
database
frontend
integrations

Multi-repo changelogs: add project_repos join table

  • Projects can now track commits from multiple GitHub repositoriesA new project_repos join table was added so one changelog can include commits from many repositories. The migration back-filled existing repo links and removed single-repo columns from projects. The web UI and API now let you link and manage multiple repos per project.
New Features
  • Added a project_repos join table so a single project changelog can aggregate commits from multiple repositories.database
  • Added API endpoints to manage repo links: POST/GET /v1/projects/:id/repos and DELETE /v1/projects/:id/repos/:repoId.backend
  • Added a Repositories section in Project Settings (ProjectReposSection) to add, list, and remove linked repositories from the web UI.frontend
  • Created a project_repos row automatically when a project is created and queued a sync for that repo.backend
  • Webhooks were updated to fan out one github/push.received event per linked repo so the same repository can feed multiple projects.integrations
Improvements
  • Moved per-repo sync state and branch metadata off projects and onto project_repos (sync_status, tracked_branch, available_branches, last_synced_at, last_sync_error).database
  • Updated background sync and webhook flows to use projectRepoId and per-repo branch filtering, improving correctness for multi-repo projects.backend
  • Refactored database layer: added ProjectRepoRepository and removed single-repo methods from ProjectRepository.database
  • Updated web components (ProjectCard, ProjectGrid, ProjectSwitcher, project settings and proxy routes) to display and manage repo links and a project's primary repo.frontend
  • Expanded tests to cover project-repos behaviour and updated webhook and project-create tests for the new fan-out and projectRepoId contract.backend
API
  • repo/sync.requested, github/push.received, and commit/received events now include projectRepoId (and github/push.received also includes trackedBranch).backend
  • repo/sync.requested added a new trigger value triggeredBy = repo_added when a repo is linked.backend
  • POST /v1/projects now creates the project row and a corresponding project_repos row; the initial sync event includes projectRepoId.backend
  • POST /v1/projects/:id/resync now queues a repo/sync.requested event for each linked repository instead of a single project-level sync.backend
Breaking Changes
  • The projects table no longer contains github_installation_id, repo_owner, repo_name, tracked_branch, available_branches, sync_status, last_synced_at, or last_sync_error; those columns were moved to project_repos.database
  • A database migration (supabase/schema/011_project_repos.sql) was included that back-filled existing repo data into project_repos before dropping the old project columns; you must run this migration when upgrading.devops
  • Integrations and background functions that relied on project-level repo fields or project-level sync_status must be updated to use projectRepoId and project_repos.integrations
Database
  • Added migration and schema for project_repos, indexes, constraints, RLS policies, and triggers; back-filled existing project repo data.database
  • Dropped single-repo constraints and indexes on projects and added a uniqueness constraint per (project_id, installation, owner, name) in project_repos.database
frontend
backend
database

Single GitHub tab for repos; entries dated and ordered by actual commits

  • Repository management moved into the GitHub tabProject repository settings are no longer duplicated across tabs. Repositories are now managed from the single GitHub tab in Project Settings, and the settings form accepts the current repos so configuration is easier to find and update.
  • Changelog entries reflect real commit times and sourcesEntries are now enriched with commit metadata (commit time, short SHA, and repo when available) and the list is sorted by actual commit timestamp (falling back to creation time). Entry cards show the commit date, short SHA and repo owner/name so the feed matches real commit order across linked repositories.
New Features
  • Moved repository management into the GitHub tab of Project Settings so the Repositories section no longer appears duplicated across tabs.frontend
Improvements
  • Updated the project header to show either repo_owner/repo_name for single‑repo projects or “N repositories” for multi‑repo projects, and to derive an overall sync status across all linked repos.frontend
  • Increased the default entries list limit and allowed fetching up to 100 entries to improve list loading for larger projects.backend
API
  • Joined entries with commits to return committed_at and SHA, enriched each entry with committed_at, commit_sha_short, repo_owner and repo_name (when known), and sorted entries by committed_at DESC with fallback to created_at.backend
  • Extended EntryListItem with commit_shas, committed_at, commit_sha_short, repo_owner and repo_name fields so clients can display accurate commit metadata.database
Bug Fixes
  • Fixed entry ordering so the changelog list reflects actual commit order across all linked repositories.backend
frontend
backend

Changelog: newest-first sorting and structured, collapsible sections

  • Entries now show newest firstChangelog entries are ordered by publication date (newest first) so you see the latest updates up front.
  • Structured sections are shown as collapsible accordionsEntry content now uses collapsible section accordions for clearer organization and easier scanning of long entries.
Improvements
  • Sorted changelog entries by publication date in descending order (newest first).backend
User interface
  • Refactored entry layout to present date, metadata, and title in a clearer two-column layout with section accordions.frontend
Customization
  • Added an option to hide the date in entry metadata for more flexible presentation.frontend
Rendering
  • Updated the markdown renderer to optionally skip structured sections when entries prefer manual content.frontend
Maintenance
  • Removed unnecessary client-side expanded-state and routing logic from the feed for simpler behavior.frontend
backend
auth
frontend
integrations

Normalize Clerk organization admin roles to internal admin

  • Clerk namespaced admin roles now grant admin accessRoles returned by Clerk that include namespaces (for example `org:admin` or `org:owner`) are now normalized to the app's internal `admin` role so organization members receive the correct access and permissions.
New Features
  • Added a role-mapping function that normalizes Clerk membership roles (e.g., `org:admin`, `owner`) to the app's `admin` and `member` roles.auth
Improvements
  • Updated webhook handlers so membership creation and updates use the new role mapping, ensuring members are assigned the correct admin/member role.backend
  • Added a fallback in the project creation flow: if creating a project for an organization is forbidden, the request now falls back to creating a personal project for the user instead of failing silently.frontend
  • Added an automated test to verify correct role mapping during membership.created events.backend
Documentation
  • Updated backlog with prioritized proposals for explicit project owner selection and multi-organization membership behavior.
frontend
devops
database

Guard DB access in web server components and exclude DB packages from bundling

Bug Fixes
  • Guarded getDb() calls across web server components so the app now handles database unavailability without crashing (renders empty project lists or shows not-found where appropriate).frontend
Improvements
  • Updated Next.js config to keep @suprlogs/database and @supabase/supabase-js as Node externals, preventing webpack from bundling Node-only modules (ws, node-fetch) for server components.devops
frontend
backend
auth

Legal pages, SEO routes, brand refresh, and custom 404s

  • Full legal pages with shared LegalLayoutAdded complete Terms of Service, Privacy Policy, and Cookie Policy pages (replacing placeholders). All three pages use a shared LegalLayout, include canonical/OG/Twitter metadata, and publish contact details for legal/support (legal@suprlogs.com / support@suprlogs.com).
  • New BrandLogo component and refreshed wordmarkIntroduced a single BrandLogo component that renders the acid‑green "S" block and the wordmark with a pink→purple gradient on “Logs”. The new component replaced duplicated logo markup in the header, footer, and sidebar for a consistent brand across the site.
  • SEO routes (global + per‑project) and llms.txtAdded global robots, sitemap and llms.txt routes plus visibility‑aware project‑scoped robots.txt, sitemap.xml, and llms.txt under changelog/[slug]. Project routes respect public/private/unlisted visibility and are served via the subdomain rewrite so hosted changelogs expose correct SEO files.
  • Custom 404s and marketing homepage refreshAdded branded global and changelog‑scoped 404 pages. Updated the marketing homepage with a marquee strip, two‑column hero (gradient headline), mock project feed, a stats strip, three‑step pipeline, and social‑proof audience cards.
New Features
  • Added full Terms, Privacy, and Cookie Policy pages with verbose legal text and shared LegalLayout.frontend
  • Added BrandLogo component to centralize site logo and gradient wordmark.frontend
  • Added global robots, sitemap, and llms.txt routes to the marketing site.backend
  • Added per‑project (changelog/[slug]) robots.txt, sitemap.xml, and llms.txt that return non‑indexable responses for private/unlisted projects.backend
  • Added project‑scoped 404 page for changelog subdomains and a branded global 404 page.frontend
Improvements
  • Refreshed marketing homepage with marquee, two‑column hero, mock feed, stats strip, pipeline steps, and social‑proof cards.frontend
  • Replaced duplicated inline logo markup in header, footer, and sidebar with the new BrandLogo component for consistent styling.frontend
  • Added Cookies link to the footer next to Terms and Privacy.frontend
  • Added noindex / nofollow robots metadata to /app, /sign-in, and /sign-up layouts to exclude auth and dashboard routes from search indexing.auth
  • Removed a duplicate manual <link rel="canonical"> from the changelog entry page in favor of metadata-driven canonical links.frontend
  • Added /cookie-policy and /llms.txt to the public route matcher so these pages bypass auth checks.auth
Documentation & Legal
  • Published complete legal copy adapted from SuprKeywords and added canonical/Og/Twitter metadata for Terms, Privacy, and Cookie Policy.frontend
frontend

Adjusted sign-in/sign-up button color and improved dark‑mode input placeholders

Bug Fixes
  • Updated the Sign in and Sign up primary button to use an accessible acid-green background (#ccff00) with black text and improved hover behavior so the Continue button is clearer.frontend
  • Fixed input fields in dark mode so placeholders, text, and borders are readable against the background.frontend
frontend

Fix Project creation wizard layout for consistent full-height display

Bug Fixes
  • Updated the ProjectCreationWizard to use a full-height container (min-h-full) instead of forcing screen height (min-h-screen), improving layout consistency across different screen sizes.frontend
frontend
auth

Redesigned sign-in and sign-up with split-screen layout and AuthPageNav

  • Split-screen auth pages with a benefits panelSign-in and sign-up pages were redesigned to a split-screen layout: the authentication form sits on one side and a short, actionable benefits panel sits on the other. The benefits panel highlights key product value (examples below) so new and returning users understand what they get before signing in. - Connect any GitHub repository - Instant changelog generation from commits - Draft → approve → publish workflow - Hosted, shareable changelog at your-project.suprlogs.app
New Features
  • Added a split-screen sign-in and sign-up layout that shows the auth form alongside a short benefits panel to explain value and next steps.frontend
  • Added a reusable AuthPageNav at the top of auth pages with the brand logo, theme toggle, and a clear link to the opposite action (Sign in / Sign up).auth
Improvements
  • Updated the look and feel of the Clerk sign-in/sign-up forms (buttons, labels, and colors) for clearer calls to action and a more consistent visual style.frontend
  • Updated on-page copy to make it easier to understand next steps (connect a repo, generate changelogs, publish) and to surface the "Sign up free" / "Sign in" links more prominently.frontend
backend
frontend

Replaced pino with a StructuredLogger interface and console fallback

  • Switched to a structured logger with a safe fallbackLogging was refactored to use a new StructuredLogger interface. Where the pino library is unavailable, a console-based fallback logger is used so logging continues to work in all environments.
Improvements
  • Introduced a new StructuredLogger interface and updated logger creation to use it.backend
  • Implemented a console-based fallback logger for environments where pino is not installed.backend
  • Removed pino from the web app dependencies to make the shared logger implementation optional.frontend
Breaking Changes
  • Removed the pino dependency and replaced the concrete pino implementation with a StructuredLogger interface. Code that relied on pino-specific APIs or internals may need to be updated or re-add pino as a dependency.
frontend
backend
auth
devops

Public changelog pages: subdomains, Linear theme, and password gate

  • Public-facing changelog pages with subdomain URLs and a Linear-style themeThe app now serves public changelogs at [slug].suprlogs.app (or /changelog/[slug] in dev). Public list and entry pages are server-rendered with SEO/Open Graph metadata, a Linear-inspired design, tag filtering, inline expansion, and an optional password visibility gate.
New Features
  • Added transparent subdomain routing so requests to [slug].suprlogs.app are rewritten to /changelog/[slug]/*, allowing one deployment to serve both the admin site and public changelogs.devops
  • Added a server-rendered changelog list page (/changelog/[slug]) with a Linear-style feed, tag filter, date grouping, and inline entry expansion that updates the browser URL without a reload.frontend
  • Added an SEO-friendly entry page (/changelog/[slug]/entries/[id]) with article Open Graph/Twitter tags and a canonical link.frontend
  • Added a full-page password gate for visibility='private' changelogs that shows a branded unlock UI when the viewer lacks a valid cookie.frontend
API
  • Added public REST endpoints: GET /v1/changelog/:slug (list) and GET /v1/changelog/:slug/entries/:id (single entry) that return published entries without authentication.backend
  • Added POST /api/changelog/[slug]/unlock which verifies a supplied password against the stored bcrypt hash and sets a 24‑hour HttpOnly cookie on success.backend
  • Updated PATCH /api/projects/[slug]/settings to accept a plain-text visibility_password and store only a bcrypt hash (bcrypt rounds = 10).backend
Improvements
  • Added buildChangelogUrl() to consistently build canonical subdomain URLs in production and path-based URLs in development.frontend
  • Added groupEntriesByMonth() utility and used it to render date-grouped sections in the public feed; preserved input ordering within each group.frontend
  • Updated Project Settings UI to allow setting a changelog access password when visibility is set to private and showed the canonical public URL for each project.frontend
  • Installed bcryptjs and its types to support server-side password hashing and verification.backend
  • Updated middleware to exempt /changelog/* from Clerk auth so public changelog paths are bypassed when accessed directly under suprlogs.com.auth
Security
  • Hashed changelog visibility passwords with bcrypt before saving and never stored plain-text passwords.security
  • Set an HttpOnly, same-site, secure cookie when unlocking private changelogs to reduce exposure of credential data in the browser.auth
Documentation
  • Added NEXT_PUBLIC_CHANGELOG_DOMAIN to .env files, turbo.json, and README and documented how subdomain routing works and how to configure Vercel wildcard domains.devops
  • Documented the public changelog feature and implementation details in docs/changelog.md.docs
Testing
  • Added 14 tests (8 middleware/subdomain and 6 date-grouping); all web tests (57) passed.frontend
frontend

Added repository search and improved repo selection UI

  • Repository search in the repo selectorAdded a search input to the repository selection step so users can quickly find GitHub repositories by name or description. Results update as you type and the list shows when no matches are found.
New Features
  • Added a search input that filtered GitHub repositories by name or description in the repository selection step.frontend
Improvements
  • Updated the repository list to display filtered results dynamically and show a clear “No repositories found” message when there are no matches.frontend
  • Improved the selection UI with clearer highlighting for the chosen repository and smoother interaction when picking a repo.frontend
frontend
auth

Fix Clerk profile routing and support users without organizations

  • Clerk profile UI no longer breaks routing or crashes for users without an organizationProfile components now use hash-based routing so Clerk's internal navigation won't conflict with Next.js paths. The organization settings page now shows a "Create organization" prompt for users who don't have an active org, and users are no longer forced through an onboarding redirect.
Bug Fixes
  • Added routing="hash" to Clerk's OrganizationProfile and UserProfile components to avoid path-based navigation conflicts with Next.js.frontend
  • Updated the organization settings page to guard against missing organizations: it now renders a CreateOrganization prompt instead of failing when no org is active.frontend
  • Removed the mandatory redirect to /app/onboarding when an organization ID was absent; projects are now scoped to the user when no org is active.frontend
Documentation
  • Updated the changelog to describe the routing fix and the org-less user behavior change.frontend
backend
frontend
database
auth

Initial monorepo scaffold with API, Web, Docs, and core packages

  • Project scaffolded: apps, packages, docs, and developer rulesAdded a complete Turborepo monorepo for SuprLogs including an Express API, Next.js web app with Clerk auth, a Mintlify docs site, shared packages (database, cache, auth, providers, changelog pipeline, Inngest, webhooks), CI/dev tooling, and comprehensive onboarding & rules documentation to help contributors get started.
New Features
  • Added API server (Express) with health endpoint and Inngest mount.backend
  • Added Web app (Next.js) with marketing pages, dashboard placeholders, and Clerk sign-in / sign-up flows.frontend
  • Published Docs site (Mintlify) with API reference, quickstart, and OpenAPI spec.integrations
  • Added core packages: shared utilities, database client, Redis cache, auth helpers, provider interfaces, changelog pipeline stub, Inngest client, and webhook helpers.backend
Documentation
  • Added comprehensive onboarding and rule documents (.cursor/commands and .cursor/rules) covering auth, web, API integration, error handling, LLM, Inngest, testing, security, logging, and project structure.integrations
  • Included README, example env files, docs pages (quickstart, API reference, API keys), and inline examples to help contributors run and extend the project locally.
Improvements & Tooling
  • Added developer tooling and configs: pnpm workspaces, turbo, TypeScript, ESLint, Prettier, Tailwind, and project-level scripts for dev/build/test.devops
  • Added local infra support: docker-compose for Redis, Supabase local config and seed, and .env example files for local setup.devops
  • Added utility scripts (generate OpenAPI stub), CI-friendly turbo config, and workspace package manifests for easy local development.devops
Database & Auth
  • Added Supabase configuration, local migration placeholders, and database package with Supabase client helpers.database
  • Added auth helpers and Clerk integration placeholders (auth package, middleware, and sign-in/sign-up UI wiring).auth
frontend
backend
auth
devops

Renamed SuprLog to SuprLogs; fixed env loading for Clerk and aligned dev ports

  • Project rebrand: SuprLog → SuprLogsAll user-facing names, docs, and domains were updated to SuprLogs. This includes the dashboard, API docs, support/contact emails, Docker container name, and package display names. You should now see SuprLogs across the site, docs, and hosted links (e.g. suprlogs.com).
Branding and packaging
  • Updated display copy and sites from “SuprLog” to “SuprLogs” across the web app, docs, and marketing text so product names and pages match the new brand.frontend
  • Renamed internal packages and published package names (`@suprlog/*` → `@suprlogs/*`) and updated repo/package identifiers to `suprlogs-mono` so workspace and tooling reflect the new name.backend
  • Updated Docker and local tooling references (container names and npm scripts) to use `suprlogs-redis` and `suprlogs-mono` for consistency during local development.devops
Authentication and environment loading
  • Fixed environment loading for the web app so root-level env files are loaded in sequence; root `.env.local` now correctly overrides other files so Clerk keys (e.g. CLERK_SECRET_KEY) are picked up during local dev.auth
  • Added optional load of environment files like `.env.development.local` when present and ensured `.env.development` and `.env.local` are loaded with override so root secrets take precedence.frontend
Local development configuration
  • Aligned reference ports and Supabase project id in local config: Supabase API on 4700, DB on 4702, Redis on 4703, Inngest on 4707, and the web app on 4715 — update any local scripts or docs you rely on.database
API and docs
  • Updated OpenAPI, docs metadata, and hosted links to use SuprLogs names and production URLs (api.suprlogs.com) so API docs and generated clients reflect the rebrand.backend
Documentation
  • Updated README and onboarding instructions to explain that env files are loaded from the monorepo root in order (`.env` → `.env.development`/`.env.production` → `.env.local`) and that Clerk secrets should be set in the root `.env.local`.
frontend
backend

Add home intro video to Marketing page

  • Engaging full‑screen intro video with fade and tap controlsA new full‑screen introduction video now appears on the Marketing page. The video supports smooth audio/video fade‑outs, a tap-to-play overlay for devices that require a gesture for sound, and can be replayed from the site header.
New Features
  • Added the HomeIntroVideo component to play a full-screen introduction video on the Marketing page with fade effects and gesture controls.frontend
  • Added the home-hero.mp4 video asset used for the new intro.frontend
Improvements
  • Updated middleware routing to allow common video file types (mp4, webm, ogg) so the video asset can be served correctly.backend
  • Updated the site header so clicking the logo will replay the intro video.frontend
frontend

Fix quote rendering in changelog and project dialogs

Bug Fixes
  • Replaced plain double quotes with HTML entities (&quot;) in the Changelog feed and Project Settings dialogs so quotes render consistently and correctly in the UI.frontend
frontend

Ignore reserved “new” project route to stop phantom sidebar highlighting

Bug Fixes
  • Excluded the reserved path segment "new" from project-slug extraction so the sidebar no longer highlights a non-existent project for /app/projects/new and its child routes.frontend
  • Added unit tests for /app/projects/new and /app/projects/new/settings to prevent regressions.frontend
frontend
backend

Allow API and internal Next.js requests to bypass rewrite; fix project settings save

  • Subdomain pages now let API and Next.js internal requests pass throughRequests to paths starting with /api/ or /_next/ are no longer rewritten for subdomain pages, so relative fetch() calls from those pages reach their intended Next.js route handlers unmodified.
Routing & Middleware
  • Allowed requests to /api/ and /_next/ to pass through the middleware without rewriting so relative fetches from subdomain pages reach the correct Next.js handlers.frontend
Project Settings API
  • Resolved the internal user ID before saving project settings to ensure the correct user is recorded and improve data integrity.backend
User Interface
  • Updated public URL display in project creation and settings to use the shared buildChangelogUrl utility for consistent formatting across the app.frontend
frontend

Added Pino logging library to web app dependencies

Improvements
  • Added pino (v9.5.0) to the web app dependencies to enable improved structured logging. Updated the pnpm lockfile to record pino v9.14.0.frontend
frontend
auth

Fix social sign-in buttons visibility in dark mode

Bug Fixes
  • Fixed social sign-in and sign-up buttons so they render with a white background, dark text, and visible border in dark mode for improved readability and consistent appearance.frontend
backend

Fixed project publish settings resolution

Bug Fixes
  • Fixed an issue where project publish settings were ignored. The resolver now reads the project's publish_mode ('auto' or 'approval_required') and correctly applies auto-publish and approval-required behavior instead of falling back to drafts.backend
backend
integrations
database
auth

Added GitHub and Clerk webhook handlers with Inngest pipeline stubs

  • Clerk and GitHub webhooks: receive, verify, and queue eventsThe API now accepts signed webhooks from Clerk and GitHub, verifies signatures, persists GitHub events for audit, and queues verified events to background pipelines so external account and push activity can be processed reliably.
  • Typed Inngest events and stub pipeline functionsTyped events and two stub Inngest functions were added to register end-to-end pipelines: a historical sync for new GitHub installations and a per-project push-processing pipeline. Both are logged stubs now and ready for full implementation.
New Features
  • Added /webhooks endpoints for Clerk and GitHub to the API and mounted them with raw-body middleware so signatures can be verified.backend
  • Added @suprlogs/webhooks package with production-ready Clerk (Svix HMAC) and GitHub (HMAC-SHA256 with timing-safe compare) verification helpers and typed webhook payloads.integrations
  • Added typed Inngest events and two stub functions (github/installation.created and github/push.received) so background pipelines are registered and can be invoked end-to-end.backend
  • Persisted incoming GitHub webhook payloads to an audit table (best-effort) and queued installation/push events to Inngest for downstream processing.database
Improvements
  • Validated required webhook environment variables (CLERK_WEBHOOK_SIGNING_SECRET, GITHUB_WEBHOOK_SECRET) at startup and threw a clear error if missing to avoid silent misconfiguration.devops
  • Ensured webhook routes use express.raw() before JSON parsing to preserve the raw request body for signature verification.backend
  • Added ProjectRepository.findByRepo and exported Json type from @suprlogs/database to support repo→project lookups from push webhooks.database
  • Updated package and dev dependencies (vitest, supertest) and added e2e/unit tests covering signature verification, happy-path handlers, and resilience when DB writes fail.
  • Fixed ngrok:start port to match the API server port (4704) and added GITHUB_WEBHOOK_SECRET to turbo globalEnv.devops
Security
  • Implemented timing-safe HMAC verification for GitHub webhooks and Svix-backed verification for Clerk webhooks to protect against tampering and replay.auth
API
  • Returned consistent 200 responses for valid webhook deliveries even when downstream DB writes fail, preventing sender retries while still logging errors for investigation.backend
Documentation
  • Updated changelog and package metadata to document the new webhook verification utilities, events, and pipeline stubs.
frontend
integrations

Added favicon, Open Graph image, improved metadata, and cookie consent manager

  • Cookie consent banner and preferencesA new, accessible cookie consent experience was added so visitors can accept or reject cookie types, open a preferences modal to customize choices, and follow links to the Privacy and Cookie Policy pages. Choices are remembered and won’t repeatedly prompt returning visitors.
New Features
  • Added an on-site cookie consent manager (banner + preferences modal) so visitors can control which cookie categories they accept or reject.frontend
  • Integrated Silktide consent scripts and styles to manage consent behavior and callbacks.integrations
Improvements
  • Added a favicon and web app manifest so the site displays a proper icon on browsers and mobile devices.frontend
  • Added an Open Graph image for richer previews when sharing links on social media.frontend
  • Updated site metadata (keywords, publisher, robots, icons, manifest, and social meta) to improve SEO and how the site appears in search results and link previews.frontend
Documentation
  • Added page metadata (title and description) for the Privacy Policy and Terms pages so they show correct titles in search and link previews.frontend
devops
backend
database
auth

Added environment config files and VS Code editor associations

Improvements
  • Added shared and environment-specific configuration files (.env, .env.development, .env.production) to centralize app settings and provide sensible defaults for development and production.devops
  • Provided local development defaults (local Supabase, PostgreSQL, Redis, Inngest, and test Clerk keys) to simplify running SuprLogs locally.backend
  • Added production placeholders and recommended override behavior so deployment environments can supply real service URLs and secrets.devops
  • Added VS Code editor associations for .csv, .tsv, and .parquet files to open in the DuckDB data viewer for easier inspection of data files.frontend
Documentation
  • Documented that secrets (for example CLERK_SECRET_KEY, CLERK_WEBHOOK_SECRET, and production service keys) must not be committed and should be placed in .env.local or in deployment environment variables.
backend
integrations

Removed temporary 3-commit sync cap

Improvements
  • Removed the temporary limit that capped repository syncs to 3 commits; sync now processes all unprocessed commits (oldest first) and fans out an event for each commit.backend
Performance
  • Improved sync reliability and completeness by eliminating the artificial commit cap and removing the related capped metrics.backend
frontend
backend
database
auth

CMS workflow: entry editor, status actions, and settings save

  • Full entry editor and workflowYou can now open a full entry editor (split-pane Markdown editor + live preview, editable title, metadata sidebar, and status action bar) at /app/projects/[slug]/entries/[id]. Project settings were also wired so General and Changelog tabs save, and the Danger Zone delete flow is functional.
New Features
  • Added a full entry detail editor at /app/projects/[slug]/entries/[id] with an editable title, split-pane Markdown editor (live preview), metadata sidebar, status action bar (Approve/Reject/Publish/Archive), and a Reject dialog.frontend
  • Added status filter tabs (All/Draft/Pending/Published/Archived/Rejected) to the entry list and an inline Approve quick-action for pending_approval entries.frontend
  • Wired the Project Settings UI so General and Changelog tabs persist changes and Danger Zone supports project deletion with slug confirmation.frontend
API
  • Added entry API routes: GET and PATCH /api/projects/[slug]/entries/[id] and POST routes for approve, reject (optional reason), publish, and archive.backend
  • Added project settings and management routes: PATCH /api/projects/[slug]/settings, PATCH /api/projects/[slug] (update name), and DELETE /api/projects/[slug] (hard delete).backend
Improvements
  • Updated entry list and hooks: useEntries accepted a status filter and query keys were scoped per tab to avoid flash and improve caching.frontend
  • Added client-side entry hooks and mutations (useEntry, useEntryMutations) that update caches and invalidate lists after changes.frontend
  • Used react-markdown + remark-gfm for the live preview and added a debounced auto-save in the editor (1.5s).frontend
  • Seeded server-rendered entry data into TanStack Query to remove loading flashes when opening the editor.frontend
Database
  • Extended ChangelogEntryRepository.updateMetadata to include the title so metadata edits could be saved without touching content.database
  • Added ProjectRepository.update(id, fields) to allow updating mutable project fields (name); DELETE now hard-deletes projects and related data via API.database
Testing
  • Added 13 tests covering action bar logic and settings schema validation; all web and database tests passed.
frontend
integrations

Add GitHub configuration link to project creation flow

Improvements
  • Added a link in the Project Creation Wizard to the GitHub installation settings so users can open the installation page and manage which repositories the app can access.frontend
  • Updated the Select Repository step to display an “Update your sharing settings” link when only one repo is visible, making it easier for users to adjust repository access on GitHub.frontend
backend

Prioritized project owner instructions in generated prompts

Improvements
  • Updated the prompt builder to prepend custom project-owner system instructions so those instructions are applied first and take priority over default guidance.backend
  • Updated and renamed unit tests to reflect the new behavior and verify the expected instruction order.backend
frontend
backend
integrations
database

Local dev GitHub integration, project creation flow, org management, and UI polish

  • Easier project setup with a GitHub branch picker and live slug previewThe project creation flow now lists repository branches (via a new branches API and hook), replaces the tracked-branch text field with a branch dropdown, and shows a live public-URL preview and helper text for the slug so you can finish setup faster and with fewer mistakes.
  • Consistent primary CTA and UI polish across the appA new reusable PrimaryButton (neobrutalist acid-green style, hover box-shadow shift, supports asChild) was added and applied across onboarding, the project wizard, and dashboard CTAs for a consistent, prominent action style.
New Features
  • Added GET /v1/github/repos/:installationId/branches to fetch repository branches for a GitHub App installation.backend
  • Added GithubClient.listBranches and GithubBranch type to list and type branches from GitHub.integrations
  • Added useGithubBranches TanStack Query hook wired to the new branches API for client-side branch lists.frontend
  • Added PrimaryButton component (acid-green, hover shadow, supports asChild) for primary CTAs.frontend
  • Replaced tracked-branch text input with a Select dropdown populated from the GitHub branches API (with loading and empty states).frontend
  • Added live URL preview and format helper text for the project slug field so users can see their public URL while typing.frontend
  • Auto-selected the repository in the Select Repo step when only one repo is accessible to the installation to reduce clicks.frontend
Improvements
  • Applied the new PrimaryButton across onboarding, project creation, and dashboard CTAs for consistent styling.frontend
  • Added per-option descriptions to the visibility RadioGroup (Public, Unlisted, Private) to clarify sharing behaviour.frontend
  • Added a tsc --watch "dev" script to internal packages so Turborepo hot-reloads local package changes during pnpm dev.devops
  • Renamed a Supabase migration file to a clearer name (vault_helpers.sql).database
API
  • Updated POST /v1/projects to accept clerkOwnerId (Clerk user/org ID) and resolve the internal UUID server-side before inserting the project.backend
  • Changed GET /v1/github/callback to redirect to /app/projects/new?installation_id=<uuid> and to accept x-clerk-user-id to populate installed_by on installations.backend
  • Fixed GET /api/github/installations to resolve Clerk userId to an internal UUID before querying installations and return an empty array when the user is not present.backend
Bug Fixes
  • Fixed environment loading to use override: true for .env.local so local secrets override placeholder values.devops
  • Fixed Clerk webhook handleOrgCreated to immediately upsert an admin membership for the org creator to avoid race conditions.auth
  • Fixed Clerk webhook handleOrgDeleted to hard-delete the organization row (and cascade membership deletes) instead of a no-op.auth
  • Fixed ConnectGitHubStep to pass the internal installation UUID (id) instead of the GitHub integer installation_id so downstream requests resolve correctly.frontend
  • Fixed useGithubRepos to map camelCase API response fields to the snake_case shape expected by the UI so the repo dropdown loads correctly.frontend
  • Fixed the GitHub callback page to move redirect() outside the try/catch so Next.js redirect behaviour is not swallowed as an error.frontend
  • Fixed SidebarWorkspaceNav active-link detection to use strict pathname equality to avoid incorrect highlights.frontend
  • Made OrganizationRepository.addMember idempotent by upserting on (org_id, user_id) to tolerate duplicate membership events.database
  • Removed invalid JavaScript null-coalescing (??) from Inngest function CEL expressions so functions register correctly in the local dev server.backend
  • Removed DEMO_CLERK_USER_ID from env files and corrected Supabase JWT key formats in .env.development for local dev consistency.devops
backend
devops

Resolved TypeScript errors that blocked Railway build

Bug Fixes
  • Fixed a build failure on Railway by resolving TypeScript errors in the API.devops
  • Casted route parameters (slug and id) to string in the changelog routes to prevent type errors during build.backend
  • Added an explicit IRouter type to the user router to fix a TypeScript inference issue across builds.backend
  • Removed an unused import from the LLM config route to clear a TypeScript warning.backend
frontend
backend
auth
database

Web app: App shell, onboarding, GitHub connect, and project UI (Phase 3)

  • New authenticated app shell, onboarding flow, and project workflowsRedesigned the authenticated experience with a persistent left sidebar, added a 4‑step onboarding wizard, a 3‑step project creation flow (GitHub install → repo select → project config), and a project dashboard with entry lists and project settings. GitHub App install redirects are handled and tied into project creation.
New Features
  • Added a persistent left sidebar app shell with a ProjectSwitcher, project‑scoped nav (Home / Settings / Analytics / Editor / Branding) and workspace nav (Organization, Billing, Account).frontend
  • Added a 4‑step onboarding wizard: Welcome → Create workspace (Clerk) → Connect GitHub → Done, with progress and URL-driven step state.frontend
  • Added a 3‑step project creation wizard: Connect GitHub (auto-skip if installation exists) → Select repository → Configure project (form validation with Zod and RHF).frontend
  • Added project dashboard (ProjectGrid + ProjectCard), project home (entry list with EntryCard and skeleton loading) and slim project header showing repo and sync status.frontend
  • Added project settings page with 4 tabs (General, GitHub, Changelog, Danger Zone) and placeholder Billing page; analytics/editor/branding pages were added as shared "Coming Soon" stubs.frontend
  • Integrated Clerk organization and user profile UIs into app settings to manage orgs and members from the web app.auth
API & Server
  • Added Next.js route handlers for server-backed reads: GET /api/projects, GET /api/projects/[slug], GET /api/projects/[slug]/entries and GET /api/github/installations.backend
  • Added a GitHub callback page (/github/callback) that calls the Express API callback and redirects users into the web app project creation flow.integrations
  • Added a lightweight database helper (getDb) and added @suprlogs/database dependency so server components and API routes can load projects and settings from the DB.database
  • Added client hooks for data fetching: useProjects, useEntries, useGithubInstallations, and useGithubRepos (TanStack Query).frontend
Improvements
  • Redesigned the server layout to load the project list and pass initial projects into the Sidebar to avoid a loading flash.frontend
  • Implemented extractActiveSlug(util) and updated Sidebar to use usePathname() to determine the active project context.frontend
  • Installed a set of shared UI primitives (Shadcn + Radix pieces) and added multiple UI components (badge, dialog, popover, select, tabs, progress, etc.) to standardize the app look-and-feel.frontend
  • Updated middleware to exempt /api/* routes from Clerk redirect so API handlers can return 401/403 directly instead of being redirected to sign-in.auth
  • Added client-side UX polish: skeleton loading, status badges, progress bars, and consistent neobrutalist styling across new pages.frontend
Documentation & Configuration
  • Updated README to instruct using the web app callback URL (/github/callback) and to document new environment variables (NEXT_PUBLIC_API_URL, API_URL, NEXT_PUBLIC_GITHUB_APP_SLUG).docs
  • Added NEXT_PUBLIC_GITHUB_APP_SLUG to .env and NEXT_PUBLIC_API_URL / API_URL to .env.development to support browser-side GitHub install links and local API calls.docs
  • Updated package.json and tooling for the web app: added vitest support and test scripts for the new web tests.devops
Action Required
  • Updated GitHub App callback expectations — update your GitHub App's callback URL to the web app (/github/callback) and set NEXT_PUBLIC_API_URL and NEXT_PUBLIC_GITHUB_APP_SLUG in your web app environment so the install flow and API calls work correctly.integrations
backend
frontend
database
auth

Resolved Clerk org/user IDs to internal UUIDs when loading projects

Bug Fixes
  • Fixed an issue where project lists were empty when using Clerk org or user IDs. The app now looks up the internal UUID (via findOrgByClerkId/findByClerkId) before querying projects, so projects created with internal UUID owner_id are correctly returned in the API, app layout, and dashboard.backend
backend
integrations
database
devops

Add GitHub App install flow and LLM-powered changelog pipeline

  • LLM-generated changelogsCommits are now analyzed by an LLM (OpenAI or Anthropic) to produce structured changelog entries. The pipeline filters noisy files, renders publishable Markdown, and persists entries with configurable publish/approval settings.
API
  • Added versioned endpoints to connect GitHub and projects: GET /v1/github/callback (post-install handler), GET /v1/github/repos/:installationId (repo picker), and POST /v1/projects (create project + queue sync).backend
Background processing
  • Queued full-history repo syncs and per-commit processing so changelogs are generated in the background; events include a priority flag resolved from owner entitlements.devops
GitHub integration
  • Implemented GitHub App authentication (RS256 JWT + in-memory token cache) and repository/commit listing to reliably fetch commit metadata and diffs.integrations
LLM & secrets
  • Built provider-agnostic LLM calls with OpenAI structured output and Anthropic support, plus Vault helpers and a Vault client to support BYOK (user-owned keys).backend
Documentation
  • Updated README and PRD with GitHub App callback setup, required env vars, testing commands, and design notes for the changelog pipeline.
frontend

Fix changelog colors for dark mode

  • Changelog UI now follows your themeReplaced hardcoded colors with semantic tokens so the public changelog respects light, dark, and system theme preferences.
Bug Fixes
  • Replaced hardcoded colors (e.g. bg-white, border-black, border-black/10) across the public changelog with semantic tokens (bg-background, border-border, border-foreground). This fixed contrast and legibility issues in dark mode and ensured the ThemeProvider's system/dark/light preference is correctly applied.frontend
frontend
backend
database

Add “Re‑sync All Commits” action to Project Danger Zone

  • Manual full re‑sync from Project Settings (Danger Zone)Added a one‑click, manual re‑sync that permanently deletes all current changelog entries and re-queues the full commit history for processing. The action is surfaced in the Danger Zone with orange warning styling and a confirmation dialog to prevent accidental use.
New Features
  • Added a Re‑sync All Commits control to the Project Settings Danger Zone with prominent orange warning styling and a confirmation dialog to confirm the destructive operation.frontend
API
  • Added POST /v1/projects/:projectId/resync to hard‑delete all changelog entries, reset commits to unprocessed, and enqueue a repo/sync.requested event to regenerate entries from the full commit history.backend
Improvements
  • Added CommitRepository.resetProcessed to mark all commits as unprocessed before a full re‑sync.database
Improvements
  • Added ChangelogEntryRepository.deleteByProject to hard‑delete all changelog entries for a project as part of the re‑sync flow.database
backend
integrations

Fixed gpt-5-mini 400 error by removing unsupported temperature parameter

Bug Fixes
  • Removed the unsupported temperature parameter from OpenAI (gpt-5-mini) calls, which prevented 400 Bad Request errors. Structured JSON output (json_schema) remained unaffected and required no action from users.integrations
database
backend
devops
integrations

Added database repository layer with DatabaseService, 16 repositories, and tests

  • Database facade and repositoriesAdded a DatabaseService facade and a lazy `db` singleton that expose 16 fully typed repository classes covering every table in the SuprLogs schema (projects, commits, changelog entries, prompts, entitlements, subscribers, audit, etc.).
  • Comprehensive tests and type safetyAdded 136 Vitest unit tests (all passing) and hand-written TypeScript types for the full schema; TypeScript compiled with zero errors.
Repository layer
  • Added DatabaseService and a lazy `db` singleton that instantiate and expose repository classes for every table.database
  • Implemented 16 repositories with explicit input/output interfaces and business methods (entry publish/approve/reject, prompt versioning, entitlement resolution, subscriber workflows, audit logs, etc.).backend
Service client
  • Added createDatabaseClient() factory to create a service-role Supabase client (server-only; requires SUPABASE_URL and SUPABASE_SERVICE_KEY).backend
Testing & quality
  • Added 16 Vitest test files with 136 unit tests covering each repository; all tests passed and package TypeScript typecheck produced no errors.devops
  • Updated packages/database/package.json with test scripts and devDependencies for vitest and @vitest/ui.devops
Types & schema
  • Added a hand-written src/types.ts that defines the full Database type (Row/Insert/Update/Relationships) for all 19 tables and referenced the schema docs.database
  • Updated changelog and documentation references to include the new repository layer and schema details.
database
docs
integrations
backend

Full Supabase schema, seed data, docs, and env template

  • Complete Supabase schema and docsAdded the full Supabase schema, migrations, seed data, and a human-readable database reference so projects can be run and inspected locally or by CI.
Database schema
  • Added a complete Supabase schema (identity, entitlements, Vault, GitHub, projects, commits, changelog entries, CMS tables, prompts, audit) and supporting migrations.database
  • Included RLS policies, triggers, indexes and FK constraints to support secure, production-like local development.database
Seed data & prompts
  • Populated seed data for entitlement catalog, system changelog section types (sections + components), and five system prompts to bootstrap generation and local testing.database
Documentation
  • Published a Product Requirements Document (docs/prd.md), a full database reference (docs/database.md) with column-by-column details, and a product backlog (docs/backlog.md).docs
  • Backlog documents planned v1+ items (reactions, comments, MCP server, analytics, integrations, RSS, cookie policy) so roadmap decisions are clear.docs
Environment template
  • Updated .env.local.example with GitHub App keys, Svix API key, and SuprSend workspace keys to simplify repo connection and outbound webhook setup.integrations
Developer tooling
  • Added TypeScript types and a lazy Supabase client singleton (packages/database/src/index.ts) to improve developer experience and keep types in sync with the schema.backend
frontend
devops

Enable changelog subdomain routing on localhost

  • Open local changelogs at [slug].localhost:PORTYou can now visit changelogs in development using a subdomain like `http://my-project.localhost:4715`. The app rewrites those requests to the correct changelog page, matching production subdomain behavior. Modern browsers resolve `*.localhost` to `127.0.0.1` natively, so no /etc/hosts changes are required.
Improvements
  • Enabled subdomain routing for changelogs in development so `http://[slug].localhost:PORT` maps to the corresponding changelog, matching production behavior.frontend
  • Updated the changelog URL builder to use the same subdomain pattern in both development and production (removed the previous path-based fallback).frontend
  • Clarified local behavior: modern browsers resolve `*.localhost` to `127.0.0.1`, so no `/etc/hosts` edits are necessary for local testing.devops
Documentation
  • Updated local development environment notes to document the new localhost subdomain routing and the absence of required hosts file changes.devops
database

Added SQL functions to create, read, and update vault secrets

  • Manage vault secrets from SQLAdded public RPC functions that let you create, read, and update secrets stored in the vault schema, enabling secure programmatic secret management from SQL clients and automation scripts.
New Features
  • Added three public RPC functions: vault_create_secret, vault_read_secret, and vault_update_secret to create, retrieve, and update secrets in the vault.database
API
  • Exposed new SQL-level APIs (RPC functions) for secret management that run with SECURITY DEFINER in the vault schema.database
backend
integrations

Fixed LLM schema validation error and temporarily capped repo sync to 3 commits

  • Prevented 400 InvalidSchema errors on LLM callsFixed an issue where the OpenAI JSON schema declared a `body` field but didn’t mark it required, causing a 400 InvalidSchema on every LLM request. The schema now requires `body` for headline items; the LLM will output an empty string when no description is needed.
Bug Fixes
  • Fixed OpenAI schema validation by adding `body` to required fields for headline items, stopping 400 errors on LLM calls.integrations
Improvements
  • Added a temporary cap of 3 commits per repo sync to limit fan-out while validating the end-to-end LLM pipeline; this cap will be removed once generation is stable.backend
frontend
backend
database
auth

Workspace defaults, onboarding LLM step, project settings, RBAC & auth hardening

  • New onboarding step to set workspace LLM defaultsAdded a new onboarding step that lets you pick a default LLM provider, model, and (optionally) provide an API key for the workspace. These workspace defaults are surfaced in a new Workspace LLM & Defaults settings page and are offered as the default source for new projects.
  • Project settings can inherit workspace defaults (or override them)Projects can now inherit workspace LLM and visibility defaults, or keep per-project overrides. When a project is created we snapshot workspace defaults into the project so teams keep explicit control while benefiting from easier setup.
New Features
  • Added an onboarding LLM defaults step so new workspaces can set a default provider, model, and optional API key during setup.frontend
  • Added a Workspace LLM & Defaults settings page to view and change workspace-wide defaults and API keys.frontend
  • Added a project creation proxy API and client flows so the web app can create projects while preserving owner context.backend
Improvements
  • Enabled projects to inherit workspace settings (provider, model, publish mode, theme, visibility) via a new "Use workspace defaults" option in project settings.frontend
  • Snapshot workspace defaults into new projects at creation time so projects keep predictable settings even if workspace defaults change later.backend
  • Improved settings UX across workspace and project pages (visibility password handling, model selection, clearer source labels).frontend
  • Hid the main sidebar during the onboarding flow and added a cookie-based onboarding guard so users are guided through initial setup.frontend
  • Added client-side helpers and server routes to simplify selecting GitHub repos/branches from the UI (with proper caller context).frontend
Security
  • Hardened API routes by requiring and verifying caller identity (x-clerk-user-id) and denying GitHub installation access when the installation is not owned by the caller.auth
  • Stored visibility passwords hashed with bcrypt instead of plain text and updated create/update flows to hash passwords before saving.backend
  • Added a free-plan monthly commit cap check to worker processing to prevent unexpected LLM usage and surface a safe skip path when the cap is reached.backend
API
  • Added new API routes for workspace settings, onboarding LLM defaults, onboarding status, and project settings flags (including use_workspace_defaults).backend
  • Protected project resync and settings endpoints so only project owners or valid org members can perform actions.auth
Database
  • Added RBAC scaffolding: permission catalog and permission_grants tables plus a PermissionRepository to manage grants.database
  • Implemented org teardown handling: entitlements and permission grants are revoked, project settings and projects are cleaned up when an organization is deleted.database
  • Added project_settings.deleteAllForSubject and a changelog entry count query used to enforce monthly free-plan caps.database
Integrations
  • GitHub connect flows now ensure the requesting user is the installer and proxy GitHub list requests through authenticated client endpoints.integrations
Tests & Misc
  • Updated tests and prompt-builder naming to reflect project-scoped prompts and system prompt semantics.
frontend
backend
database
integrations

Claim orphaned GitHub installations and add error boundary to project creation

  • Project creation wizard now shows a helpful error screen instead of crashingAdded a reusable ErrorBoundary component and wrapped the project creation flow so rendering errors are caught and shown as a readable error card with a "Try again" action, instead of a blank page.
  • Orphaned GitHub installations are now claimed automaticallyWhen a user has no recorded installations, the system now attempts to claim any unassigned GitHub installations (created via direct API callbacks) and associate them with the user to make GitHub setup more reliable.
API
  • Updated the GET /api/github/installations handler to claim orphaned installations (installed_by was null) when none were found for the user.integrations
  • Added server-side error logging to the onboarding LLM defaults endpoint to aid debugging.backend
Improvements
  • Added a generic ErrorBoundary React component and wrapped the ProjectCreationWizard so UI errors display a readable card and a retry action.frontend
  • Added a database repository method to claim unclaimed GitHub installations and used it from the installations handler.database
auth
frontend

Fix rendering conflict for sign-in and sign-up pages

Bug Fixes
  • Removed a conflicting force-static setting from the sign-in and sign-up page layouts so they now follow the application's root dynamic rendering. This fixed inconsistent rendering/caching behavior on authentication pages.auth
frontend
backend
auth
integrations

Per-user LLM configuration and project LLM settings

  • Save and use your own OpenAI/Anthropic API keys per user or per projectUsers can now supply their own OpenAI or Anthropic API keys (BYOK). Keys are stored securely in Vault, returned to the UI only in masked form, and can be selected per project alongside provider and model choices to customize changelog generation.
New Features
  • Added backend endpoints to manage per-user LLM configurations (GET and POST) for OpenAI and Anthropic providers.backend
  • Added project-level LLM settings and UI controls so teams can choose provider, pick a model, and optionally supply a per-project API key.frontend
API
  • Introduced /v1/user/llm-config (GET/POST) and a Next.js proxy route to forward the authenticated Clerk user ID when storing or retrieving keys.backend
Improvements
  • Updated project settings PATCH to accept llm_provider, llm_model, and llm_api_key and to persist provider/model values for each project.backend
  • Updated ProjectSettingsForm to show provider and model selectors, display masked existing keys, and let users submit or replace an optional BYOK API key.frontend
  • Added a small client-side model list library for OpenAI and Anthropic so model options and defaults are consistent in the UI.frontend
Security
  • Stored BYOK API keys in Vault and never saved plain-text keys in the database; GET responses return only masked key fragments to the UI.backend
backend
devops
integrations
database

Docs: README updated with clearer env setup, ports, and webhook configuration

Documentation
  • Updated the project description to mention LLM-based changelog analysis and corrected the hosted subdomain example to suprlogs.com.
  • Clarified the apps list to describe the API server responsibilities (health, Inngest, Clerk and GitHub webhooks) and updated the web dashboard tech notes.backend
  • Clarified environment setup: copy .env examples to the monorepo root, store secrets in root .env.local, and documented the env load order for each app.devops
  • Clarified start and build commands and explained what pnpm services:start and pnpm dev do for local development.devops
  • Added a clear ports table (4700–4716) and troubleshooting tips for address-in-use errors and Supabase internal ports.devops
  • Added detailed webhook configuration for Clerk and GitHub including endpoint paths, signature header verification, and required environment variables.integrations
  • Documented local webhook testing with ngrok and step-by-step setup for Clerk webhooks and GitHub App webhooks, including how to store signing secrets and private keys in env vars.integrations
  • Documented production deployment to Railway with instructions for setting service root, build/start commands, required environment variables, custom domain setup, and Inngest registration.devops
  • Added testing and database workflow commands (pnpm test, pnpm db:reset, pnpm db:studio, pnpm db:types) and migration guidance for local Supabase.database
  • Improved README structure and quickstart flow with separators and clearer step ordering for new contributors.
frontend
backend
devops
auth

Fix workspace settings crash and restore project visibility

  • Stopped workspace settings crashes and made projects reliably visiblePrevented a server-side bundling issue that could crash workspace settings and restored consistent project visibility across organization and user contexts in the dashboard and project switcher.
Bug Fixes
  • Prevented workspace settings from crashing by forcing Node.js to resolve certain server packages (pino and related modules) at runtime instead of bundling them, fixing worker file resolution with pnpm layouts.devops
  • Avoided bundling-related runtime errors in settings PATCH by dynamically importing bcrypt at runtime so the server bundle no longer fails to locate native worker files.backend
  • Restored project visibility by merging and de-duplicating organization and user projects so projects appear correctly in the dashboard and project switcher regardless of org/user context.frontend