Repository navigation
Conversation
Introduce a full shadcn-based preview surface in the web app: new login/signup v2 pages, an AppShell v2 with sidebar/navigation, and a projects v2 page with toolbar filters and create-project dialog wired to existing services. This also adds vendored shadcn primitives, theme bridge/reference/v4 styles, new routes, shared project-list filtering logic, and alias/lint config updates needed to support the new component structure. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Adds a full AppShell v2 surface across workspace, project, analytics, and detail pages, including new v2 routes, header context wiring, and sidebar/navigation updates. Introduces reusable shadcn-based toolbars, dialogs, and UI primitives (charts, tables, tabs, toggles, popovers, progress) to support filtering, view management, and work-item creation/edit flows. Also updates supporting shared helpers and bumps web charting deps to enable the new analytics/chart components. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reworks the v2 sidebar to better match the new app layout: navigation is split into primary and workspace sections, and a translated Favorites section now renders the workspace favorites tree in the sidebar. It also updates `NavMain` and `NavProjects` to use cleaner collapsible triggers with inline chevrons, and removes extra project-menu complexity (hover actions, dropdown, and "more" truncation) so all projects and their subpages are directly accessible. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reworks the v2 Projects and Notifications pages into fully responsive, shadcn-based experiences with richer controls: body-level projects toolbar (search/filter chips/view toggle/scope segments), grid+table project views, better loading/error/empty states, and a master-detail inbox with unread tab, search, mobile sheet detail, and inline action handling. Adds a new shadcn NotificationSnoozeMenu, introduces a shared project refresh event to keep sidebar/project lists in sync after mutations, passes workspace members into project creation/toolbar to avoid duplicate fetches, and fixes project access filtering to use the project network value. Also expands EN/AZ i18n strings for the new UI and makes V2 home stickies follow theme changes in real time. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Add repo guidance for the v2 web surface in `CLAUDE.md` and `apps/web/README.md`, pointing contributors to the shadcn/ui docs, source repo, and AdminCN reference before changing v2 components. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduces shared `useProjectIssuesController` and `useProjectCyclesController` hooks, then rewires both legacy and v2 pages to use the same data/filter/grouping logic so behavior stays aligned across designs. Adds a full v2 work-items experience (filters/display menus, bulk actions, row/context actions, inline editing, board/calendar/gantt/spreadsheet layouts) plus expanded v2 cycles and views toolbars. Also adds new shadcn primitives (alert dialog, calendar, checkbox, command, context menu, scroll area, sonner, etc.), wires v2 toast support, pre-bundles lazy-only deps in Vite to avoid runtime dynamic-import failures, and fixes project list view defaults to table-first. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replaced v2 usage of the legacy create modal with the new shadcn work-item dialog, adding richer fields (including parent selection), inline label creation, improved responsive layout, and safer submit/close behavior so failed saves keep the composer open with errors visible. Added a shared helper to attach cycle/module relations after creation using partial-success handling, with toast warnings when relation links fail. Updated workspace views and toolbar to support in-page work item creation, improved list/table accessibility and responsiveness, localized static view/display labels, and refined default v2 display state and column ordering (including state). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduces shared v2 primitives (`PageHeading`, `ListPageSkeleton`, `DetailPageSkeleton`, `ProjectListToolbar`) and migrates pages to use them, moving list controls out of the shell header and into consistent in-page toolbars. Updates archives, drafts, analytics, profile, issue detail, and project list pages with richer loading/error/empty states, improved accessibility labels, and responsive table layouts; also replaces `project-search-toolbar`, adds a shadcn-based work-item subscribe button, updates nav-user actions/sign-out flow, and expands EN/AZ translations to cover the new UI copy. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Builds a complete v2 settings surface across account, workspace, and project scopes, including new reusable settings shell/panel primitives and dedicated sections for profile, preferences, security, notifications, members, tokens, exports, automations, labels, and states. Adds new `/app-v2/settings` routes (including account and per-project paths), wires project-level settings entry points in navigation, and keeps settings navigation inside the v2 shell. Also standardizes several v2 page section/scope controls by replacing Tabs usage with ToggleGroup-based segmented controls for consistent behavior and styling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduces Turkish (`tr`) as a supported UI language end-to-end: parser config, i18n bootstrap, docs, dynamic key notes, and a full Turkish translation catalog, alongside many new/normalized English keys. The v2 sidebar navigation now uses translated labels via `t()`. For the v2 shell preview, switches from the `shadcn-v4` class to a new scoped `shadcn-app` class so shadcn border defaults apply without forcing the stock v4 palette. This keeps Devlane theme tokens (including pink), aligns portalled dropdown borders, and updates related style/docs comments to clarify intended usage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduces a shared `AuthPageShellV2` and new v2 auth/onboarding flows: forgot/reset password, set password, invite accept/sign-up, and create workspace. Adds reusable password-field primitives (strength, match, show/hide) and refactors signup/login to reuse them and remove duplicated layout logic. Routes are wired for all new `*-v2` pages, including protected v2 routes with a configurable `signInPath` so expired sessions redirect to `/login-v2` instead of v1 pages. Also updates related links and adds shared auth hero localization keys in English and Turkish. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduces a global InterfaceContext (persisted in localStorage) and an InterfaceGate that automatically redirects v1 routes to v2 when users opt into the new interface. Adds bidirectional path mappers for static and workspace routes, preserving query strings and navigation state. Exposes the interface toggle in both settings UIs (legacy and shadcn v2 account preferences) and adds matching EN/TR translations. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Switches the v2 AppShell wrapper from `shadcn-app` to `shadcn-v4` on both `document.body` and `SidebarProvider`. This makes the preview use the stock upstream shadcn new-york-v4 palette consistently, and updates the inline docs to clarify that this intentionally bypasses Devlane’s token bridge/theme picker (including pink) for pixel-faithful comparison. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…nder src/v2
v2 used to be a second route tree under /:workspaceSlug/app-v2, reached by
bouncing v1 URLs through a 350-line path mapper. Both interfaces now answer to
the same URLs: routes/index.tsx declares each path once and picks the element
with <Variant v1={...} v2={...} />, which reads the stored interface preference.
Switching no longer navigates — the page re-renders in place.
Routing:
- Drop lib/interfaceRedirect.ts, components/InterfaceGate.tsx and every *-v2
path (login-v2, invite-v2, the whole app-v2 subtree).
- v2 links now use the shipped URL shapes; a project's work items live at
/projects/:id/issues, and v2 redirects /board to issues?layout=board.
- Both shells mount on the :workspaceSlug route and render an <Outlet />, so
child routes are shared.
Isolation:
- Move the entire v2 interface under src/v2/, mirroring src/: a v2 page carries
the same filename and export name as the v1 page it replaces
(v2/pages/IssueListPage.tsx <-> pages/IssueListPage.tsx). components.json now
aliases @/v2/components.
- Restore every v1 file to its pre-v2 state, including IssueListPage and
CyclesPage; the controllers they had been refactored into move to
src/v2/hooks. The only v2-aware line left in v1 is <InterfaceSwitch /> in
SettingsPage, implemented in routes/InterfaceSwitch.tsx.
- Add a no-restricted-imports rule: nothing outside src/v2 and src/routes may
import from src/v2.
- v2 styles become their own Tailwind entry imported by the v2 shells, so the
global index.css stays untouched and a v1 reader never downloads them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Expose structured activity metadata from the API (`verb`, `field`, `old_value`, `new_value`) for non-free-text issue activity rows, then render localized activity text on the client via a new `describeActivity` helper in both v1 and v2 settings activity panels. Add the related i18n keys/translations (en/tr/az), including notification row labels/descriptions and activity field/action phrases. Also move scoped shadcn border-color defaults into `@layer base` so utility `border-*` colors in v2 are no longer unintentionally overridden. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Improve the v2 navigation experience by rendering a v2-specific Suspense fallback and adding an animated page-enter transition in the v2 AppShell. Also import `tw-animate-css` (and add it to dependencies) so shadcn animation utility classes like `animate-in`, `fade-in-*`, and `slide-in-*` actually work in Tailwind v4. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cap the popover panels at the available height the popper reports and stack the work item grouping toggles vertically so the three full-sentence labels no longer spill out of the panel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Adjusts v2 cycle/work-item filter and display popovers to use explicit ScrollArea height calculations instead of flex growth. This prevents Radix ScrollArea viewports from expanding to full content height (and not scrolling) when constrained by available popover space, while accounting for headers and borders in each panel.
Adds shared v2 list UX primitives (filter menu/chips, sort menu) and wires them into epics, modules, pages, views, intake, drafts, archives, and projects with URL/localStorage-backed preferences. Introduces create dialogs for cycles, epics, modules, pages, and project views, plus project issues/workspace view persistence helpers and last-opened workspace view routing in the sidebar. Also updates v2 shell/sidebar visuals (dithered logo, toolbar/layout refinements), adds optional mock-data infrastructure for v2 development, and significantly refreshes the v2 profile page layout and interactions. Translation keys were expanded in en/tr/az to support the new controls, dialogs, and profile copy.
The v2 mock data module and its hook were never imported by any page. They also broke CI: the underscore-prefixed parameters tripped @typescript-eslint/no-unused-vars, which has no argsIgnorePattern in this repo's ESLint config. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Prevents v2 UI state from being overwritten during initial hydration and route changes by gating writes until localStorage/URL restores have actually landed. This adds restore-tracking guards for saved view display settings, project issue display state, and workspace URL-sync state (including StrictMode double-effect behavior). It also makes the v2 shell read the sidebar cookie for `defaultOpen` so collapse state persists correctly in the SPA.
Adds a new v2 accent color system with persisted presets (default, blue, violet, green, orange, rose) and CSS token overrides that only recolor primary actions and focus rings in both light and dark modes. Updates the v2 account preferences UI to separate appearance into mode + accent controls, wires accent state into the AppShell (including portal content), and adds new i18n strings for EN/TR/AZ.
Adds fully native v2 settings UI for project estimates, workspace integrations, and workspace webhooks using shadcn components and existing services. It also introduces dedicated dialogs for GitHub repo linking/sync settings and Slack channel linking/preferences, and wires SettingsPage to use these new v2 panels instead of shared v1 sections.
Add reusable image UI and refactor v2 screens: introduce ImagePicker, ImageDropZone, UploadImageDialog and CoverImageDialog for picking/uploading cover and avatar images. Replace legacy CoverImageModal/UploadImageModal usages in account, project and workspace panels. Refactor DraftsToolbar to use shared ProjectListToolbar/ListFiltersMenu/ListFilterChips. Minor UI tweaks in NotificationsPage. Update i18n (en/tr/az) with new strings and fixes for image, integrations, modules, cycles, webhooks and other labels.
Reworks the v2 cycles experience to match the shipped UI structure: collapsible active/upcoming/completed buckets, clickable cycle rows, richer active-cycle stats, and streamlined row actions (owner, favorite, menu). Adds a reusable circular progress UI primitive and uses it across cycle rows and active cycle details. Also updates the shared project list toolbar sizing/alignment and adds localized `cycles.progressLabel` strings (en/tr/az) for accessible progress labels.
Extracts reusable v2 work-item building blocks: a shared project work-items section, a shared list/spreadsheet table, and a reusable display-properties menu. CycleDetailPage now reuses the same project issues controller (scoped by cycle) and list section, moving cycle metrics into a dedicated stats sheet for cleaner layout parity with the project list. Filtering and sorting logic were centralized into new shared helpers, and related i18n keys were added for cycle, filters, and views labels.
Co-Authored-By: Codex <noreply@openai.com>
1 task done
1 task done
Keep the earlier Slack migration at version 13 and move the later cancelled-state correction to version 14 without changing either SQL body. Validate unique catalog versions and paired directions without Docker. Co-Authored-By: Codex <noreply@openai.com>
Guard storage, preserve explicit filter clears, paginate complete cycle lists, use local dates and selected language, and prevent accidental submits and editor shortcut conflicts. Scope generated CSS and refresh logo colors on theme changes. Co-Authored-By: Codex <noreply@openai.com>
Treat both date-only strings and RFC3339 date fields returned by the API as local calendar dates for display and filtering. Co-Authored-By: Codex <noreply@openai.com>
Distinguish failed loading from a genuinely empty cycle, expose retry progress, preserve successful data on refresh failures, and discard stale requests after navigation or newer attempts. Co-Authored-By: Codex <noreply@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem and change
Part 3 completes the opt-in v2 interface in 40 changed files relative to
feat/v2-components: pages, shared route selection, the Settings interface switch, and documentation. v1 and v2 use the same URLs; the preference defaults to v1 and is stored per browser.The final tree is identical to the reconciled upstream integration PR Devlaner#401. The merge commit retains the original PR history and the current upstream main.
Validation
Web typecheck, ESLint, Prettier and production build passed for the complete interface and for each preceding isolated stage. Go vet passed. Local API integration tests could not start without Docker; the author explicitly authorized verification in upstream CI.
Dependency and upstream delivery
Depends on
feat/v2-components, which depends onfeat/v2-foundations. This 40-file review is hosted in the fork because the author cannot create target branches upstream. Once the first two stages land in upstream main, Devlaner#401 has only these integration changes left to review. Until then Devlaner#401 is the full 216-file integration PR and still exceeds CodeRabbit's limit.AI assistance
API migration catalog correction
CI on the reconciled main exposed two existing migrations with version 000013. Keep the earlier Slack migration at 000013 and rename the later cancelled-state correction to 000014, preserving both SQL contents. This restores migration loading for fresh databases and preserves the previously deployed Slack version. A Docker-free catalog regression test rejects duplicate version/direction pairs and requires both up/down files for every version. It fails on the original catalog and passes after the correction; Go vet also passes. Docker-backed API CI passed for the final full integration commit and the foundations commit, including
go test -v -race -count=1 ./.... UI CI also passed for both commits.Previous upstream validation: integration API CI, integration UI CI, foundations API CI, foundations UI CI — all passed.
Review fixes
Verified and fixed all nine CodeRabbit findings from Devlaner#406:
Local validation: complete web typecheck, ESLint, Prettier and production build passed; both isolated prerequisite stages also passed those checks. 35 targeted regression checks passed under each of America/Los_Angeles and Europe/Istanbul (70 checks total). API sources are unchanged by these review fixes. New API/UI CI runs validate the updated heads.
Follow-up: failed issue loading and retry
The controller now reports issue-load failures separately from successful empty results, exposes retry progress, preserves the last successful list when a refresh fails, and rejects stale completions or delayed retry callbacks after navigation/unmount. Retrying a metadata failure reloads the missing project/workspace as well.
The shared work-item section used by project and cycle pages renders a translated alert with a Try again button instead of the empty-state copy when issue loading fails. This UI is in the components stage; the controller/error state is in foundations.
13 targeted regression checks passed, covering a later-page failure, rendered error vs empty UI, retry progress and recovery, refresh failure, overlapping requests, navigation/unmount, and metadata recovery. Full web typecheck, ESLint, Prettier and production build passed; both prerequisite stages independently passed the same checks. API sources are unchanged. CI is running on the updated heads.