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 preview — The 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 app — A 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