The Problem

Teams want Linear's polished project-management UX without the cost or lock-in. This repo is a front-end implementation of that model—issues, projects, teams, cycles, reviews, and settings—built on Next.js and shadcn/ui. It is a UI showcase, not a production backend: there is no API layer, database, or auth in the codebase.

What This Does

circle is a collection of six self-contained Next.js projects (components, app routes, store, mock-data, lib, hooks), not a single architecture. The app/[orgId]/ directory holds the full routing tree: issue detail, project boards, team backlogs, review workflows, and 20+ settings pages. components/ (218 files) holds the UI primitives and feature components. store/ (20 files) manages client state, and mock-data/ (17 files) feeds the UI with hardcoded data.

The substantial pieces are the data-table filter (components/data-table-filter/) and the issue/project views (components/common/issues/, components/common/projects/). The filter is a self-contained library with its own types, helpers, and components.

How It Is Wired

Execution starts at the Next.js app router in app/[orgId]/page.tsx. Each route renders a page that composes components from components/common/. The store/ directory holds Zustand-style state management; mock-data/ supplies the data those stores hydrate from. There is no external I/O—no database, network calls, or filesystem writes. The only effect a run has is rendering HTML in the browser.

The most-connected modules are components/common/settings/shared.tsx (14 modules import it) and components/data-table-filter/core/types.ts (12 importers). Both are stable leaves (instability 0), so churn there is contained. The import cycle in components/common/projects/ (projects, projects-board, projects-list) means changing one of those files risks breaking the others. The mock-data/users and mock-data/issues modules are widely imported, so altering their shape ripples across many views.

The wiring has not been mapped for the store-to-component data flow; the static analysis resolved import edges but not runtime state propagation.

How To Use It

git clone https://github.com/moses-y/circle.git
cd circle
pnpm install
pnpm dev

The README documents these commands verbatim. No environment variables or config files are required—the app runs entirely on mock-data/. The entry point is the Next.js dev server; open the localhost URL and navigate to any org route.

Real-World Use

As a design reference or starting point for a Linear-style product UI. You could fork it, replace mock-data/ with real API calls in the store layer, and wire the existing routes to a backend. The data-table filter is reusable as a standalone component in other admin interfaces.

Code Health & Issues

Static analysis (115 findings: 43 high, 72 medium) flags:

  • High – Deep nesting (49 occurrences): components/common/issues/details/content-blocks.tsx hits indentation depth 9; extract guard clauses.
  • High – Oversized files: mock-data/issues.ts (1,307 lines) and components/data-table-filter/components/filter-value.tsx; split by responsibility.
  • High – Import cycle: components/common/projects/ (projects, projects-board, projects-list) are mutually reachable; extract shared types.
  • High – Duplicated code: 499 repeated 6-line blocks across 107 files; extract shared helpers.
  • Medium – Hub modules: components/common/settings/shared.tsx and components/data-table-filter/core/types.ts have high blast radius; keep them stable.
  • Medium – High branching density: components/data-table-filter/lib/array.ts and helpers.ts (39 branch points per 100 lines).

SDLC gaps: no test files, no CI pipeline, no dependency update bot. The README (1,357 bytes) lacks setup instructions beyond clone-and-run. A license is present; no secrets committed.

The Bottom Line

A solid, well-organized Linear clone UI with a reusable filter component and broad route coverage. It is a front-end demo, not a deployable product—no backend, tests, or CI. Use it as a design reference or a starting point for a real implementation, but expect to add the missing engineering infrastructure.