Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
748af0e
feat: add Fleet integration for endpoint monitoring and management
Marfuen Jun 4, 2025
17333cb
Merge branch 'main' of github.com:trycompai/comp into mariano/comp-16…
Marfuen Jun 5, 2025
44f6ee2
feat: add support for fleet in db
Marfuen Jun 5, 2025
b25635f
Merge branch 'main' of github.com:trycompai/comp into mariano/comp-16…
Marfuen Jun 5, 2025
7a9aea3
chore: fix dates
Marfuen Jun 5, 2025
5da5311
chore: wip
Marfuen Jun 6, 2025
aeecff6
Merge branch 'main' of github.com:trycompai/comp into mariano/comp-16…
Marfuen Jun 9, 2025
bf6298d
fix(SidebarCollapseButton): handle optimistic update rollback on error
carhartlewis Jun 9, 2025
76e9588
refactor(main-menu): update component structure and styling
claudfuen Jun 10, 2025
a0581bd
style(main-menu): remove padding from main menu navigation
claudfuen Jun 10, 2025
8544de1
refactor(main-menu): improve tooltip and button alignment handling
claudfuen Jun 10, 2025
05ffe76
refactor(organization-switcher): streamline color pairs and improve UI
claudfuen Jun 10, 2025
f7c7e02
style(organization-switcher): update button style and class arrangement
claudfuen Jun 10, 2025
a0b92ea
refactor(secondary-menu): improve button usage and styling
claudfuen Jun 10, 2025
7ade082
style(chat-button): update button styles for better UX
claudfuen Jun 10, 2025
442d8f0
style(data-table): update data-table pagination and toolbar styles
claudfuen Jun 10, 2025
9d312b3
refactor(frameworkCard): update card layout and styles
claudfuen Jun 10, 2025
06643a8
style(frameworks): update button layout in FrameworksOverview
claudfuen Jun 10, 2025
c49dc59
style(components): update border radius class from xs to sm
claudfuen Jun 10, 2025
d7bbcc8
refactor(tasks): integrate PageWithBreadcrumb component for improved …
claudfuen Jun 10, 2025
4ed2260
style(tasks): enhance layout with Card component and improve styling
claudfuen Jun 10, 2025
a49cc0b
style(secondary-menu): adjust hover highlight height and text style
claudfuen Jun 10, 2025
d7e5258
Merge pull request #860 from trycompai/claudio/ui-tweaks
claudfuen Jun 10, 2025
0bed3a4
Merge branch 'main' of https://github.com/trycompai/comp into lewis/c…
claudfuen Jun 10, 2025
c394fce
Merge pull request #855 from trycompai/lewis/comp-sidebar-opportunist…
claudfuen Jun 10, 2025
d6d1cea
chore: cleanup employees components
Marfuen Jun 10, 2025
f2a801b
Merge branch 'main' of github.com:trycompai/comp into mariano/comp-16…
Marfuen Jun 10, 2025
20a0660
refactor(chat-button): remove desktop-only restriction
claudfuen Jun 10, 2025
0f0df4b
style(chat-button): simplify button label text
claudfuen Jun 10, 2025
7c2f8bb
feat: list out employee devices and overview chart
Marfuen Jun 10, 2025
87d25a0
feat(policies): introduce new layout component for policies overview
claudfuen Jun 10, 2025
2c63323
style(frameworkrequirements): improve text truncation and display
claudfuen Jun 10, 2025
91b9b45
style(components): enhance text appearance and card layout
claudfuen Jun 10, 2025
cddae4c
style(layout): add textured background to main div
claudfuen Jun 10, 2025
4345ff1
feat(components): introduce CardLiquidGlass component and update Page…
claudfuen Jun 10, 2025
3f9d00a
style(card-liquid-glass): adjust glass effect styling
claudfuen Jun 10, 2025
22e72ef
Merge branch 'main' into claudio/ui-tweaks-2
claudfuen Jun 10, 2025
5a71b5b
feat: employee devices showing in app and portal
Marfuen Jun 10, 2025
b4dd08d
chore: fix spacing in chart
Marfuen Jun 10, 2025
19ebda3
chore: fix build issues
Marfuen Jun 10, 2025
0dc3dcd
Merge pull request #866 from trycompai/mariano/comp-166-osquery-agent…
Marfuen Jun 10, 2025
9e1fb92
refactor(data-table): remove unused pinning styles
claudfuen Jun 11, 2025
ad18bd0
Revert "[dev] [Marfuen] mariano/comp-166-osquery-agent-integration"
Marfuen Jun 11, 2025
b513919
Merge pull request #871 from trycompai/revert-866-mariano/comp-166-os…
Marfuen Jun 11, 2025
3ebaa37
refactor(taskbody): replace Input component with native input element
claudfuen Jun 11, 2025
1ca052c
refactor(app): integrate PageCore component for layout consistency
claudfuen Jun 11, 2025
ed32c23
feat(header): add inbox icon to feedback link
claudfuen Jun 11, 2025
090819c
style(FrameworkOverview): improve component layout and text styling
claudfuen Jun 11, 2025
389629f
refactor(frameworks): update component structure for clarity
claudfuen Jun 11, 2025
ce6df31
refactor(FrameworkOverview): update layout and content display
claudfuen Jun 11, 2025
966d8d8
feat(design-system): add new design system rules
claudfuen Jun 11, 2025
116772f
refactor(components): simplify card components in PoliciesTable and R…
claudfuen Jun 11, 2025
2422d99
refactor(controls): remove headers and enhance tabbed navigation
claudfuen Jun 11, 2025
44ea88c
feat(ui): add search icon to input components
claudfuen Jun 11, 2025
7359159
Merge pull request #863 from trycompai/claudio/ui-tweaks-2
claudfuen Jun 11, 2025
b577aa9
Merge pull request #870 from trycompai/claudio/ui-tweaks-3
claudfuen Jun 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions .cursor/rules/design-system.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
description:
globs: *.tsx
alwaysApply: false
---

Rule Name: design-system
Description:
Design System & Component Guidelines

## Design Philosophy

- **B2B, Modern, Flat, Minimal, Elegant**: All UI should follow a clean, professional aesthetic suitable for business applications
- **Sleek & Minimal**: Avoid visual clutter, use whitespace effectively, keep interfaces clean
- **Dark Mode First**: Always ensure components work seamlessly in both light and dark modes

## Component Usage

- **Adhere to Base Components**: Minimize custom overrides and stick to shadcn/ui base components whenever possible
- **Semantic Color Classes**: Use semantic classes like `text-muted-foreground`, `bg-muted/50` instead of hardcoded colors
- **Dark Mode Support**: Always use dark mode variants like `bg-green-50 dark:bg-green-950/20`, `text-green-600 dark:text-green-400`

## Typography & Sizing

- **Moderate Text Sizes**: Avoid overly large text - prefer `text-base`, `text-sm`, `text-xs` over `text-xl+`
- **Consistent Hierarchy**: Use `font-medium`, `font-semibold` sparingly, prefer `font-normal` with size differentiation
- **Tabular Numbers**: Use `tabular-nums` class for numeric data to ensure proper alignment

## Layout & Spacing

- **Consistent Spacing**: Use standard Tailwind spacing scale (`space-y-4`, `gap-6`, etc.)
- **Card-Based Layouts**: Prefer Card components for content organization
- **Minimal Padding**: Use conservative padding - `p-3`, `p-4` rather than larger values
- **Clean Separators**: Use subtle borders (`border-t`, `border-muted`) instead of heavy dividers

## Color & Visual Elements

- **Status Colors**:
- Green for completed/success states
- Blue for in-progress/info states
- Yellow for warnings
- Red for errors/destructive actions
- **Subtle Indicators**: Use small colored dots (`w-2 h-2 rounded-full`) instead of large icons for status
- **Minimal Shadows**: Prefer `hover:shadow-sm` over heavy shadow effects
- **Progress Bars**: Keep thin (`h-1`, `h-2`) for minimal visual weight

## Interactive Elements

- **Subtle Hover States**: Use gentle transitions (`transition-shadow`, `hover:shadow-sm`)
- **Consistent Button Sizing**: Prefer `size="sm"` for most buttons, `size="icon"` for icon-only
- **Badge Usage**: Keep badges minimal with essential info only (percentages, short status)

## Data Display

- **Shared Design Language**: Ensure related components (cards, overviews, details) use consistent patterns
- **Minimal Stats**: Present data cleanly without excessive decoration
- **Contextual Icons**: Use small, relevant icons (`h-3 w-3`, `h-4 w-4`) sparingly for context

## Anti-Patterns to Avoid

- Large text sizes (`text-2xl+` except for main headings)
- Heavy shadows or borders
- Excessive use of colored backgrounds
- Redundant badges or status indicators
- Complex custom styling overrides
- Non-semantic color usage (hardcoded hex values)
- Cluttered layouts with too many visual elements
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@

import { DataTable } from "@/components/data-table/data-table";
import { DataTableColumnHeader } from "@/components/data-table/data-table-column-header";
import { DataTableSortList } from "@/components/data-table/data-table-sort-list";
import { StatusIndicator } from "@/components/status-indicator";
import { useDataTable } from "@/hooks/use-data-table";
import { Policy } from "@comp/db/types";
import { Card, CardContent, CardHeader, CardTitle } from "@comp/ui/card";
import { Input } from "@comp/ui/input";
import { Icons } from "@comp/ui/icons";
import { ColumnDef } from "@tanstack/react-table";
import { useMemo, useState } from "react";

Expand Down Expand Up @@ -106,35 +105,23 @@ export function PoliciesTable({
});

return (
<Card>
<CardHeader>
<CardTitle>
{"Linked Policies"} ({filteredPolicies.length})
</CardTitle>
</CardHeader>
<CardContent>
<div className="flex items-center mb-4">
<Input
placeholder={"Search..."}
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
className="max-w-sm"
/>
{/* <div className="ml-auto">
<DataTableSortList
table={table.table}
align="end"
tableId="policiesTable"
/>
</div> */}
</div>
<DataTable
table={table.table}
rowClickBasePath={`/${orgId}/policies/`}
getRowId={(row) => row.id}
tableId={"policiesTable"}
<div className="space-y-4">
<div className="flex items-center">
<Input
placeholder="Search policies..."
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
className="max-w-sm"
leftIcon={<Icons.Search size={16} />}
/>
</CardContent>
</Card>
</div>

<DataTable
table={table.table}
rowClickBasePath={`/${orgId}/policies/`}
getRowId={(row) => row.id}
tableId={"policiesTable"}
/>
</div>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@

import { DataTable } from "@/components/data-table/data-table";
import { DataTableColumnHeader } from "@/components/data-table/data-table-column-header";
import { DataTableSortList } from "@/components/data-table/data-table-sort-list";
import { useDataTable } from "@/hooks/use-data-table";
import type {
FrameworkEditorFramework,
FrameworkEditorRequirement,
FrameworkInstance,
RequirementMap,
} from "@comp/db/types";
import { Card, CardContent, CardHeader, CardTitle } from "@comp/ui/card";
import { Input } from "@comp/ui/input";
import { Icons } from "@comp/ui/icons";
import { ColumnDef } from "@tanstack/react-table";
import { useMemo, useState } from "react";

Expand All @@ -21,8 +20,8 @@ interface RequirementsTableProps {
orgId: string;
}

export function RequirementsTable({
requirements,
export function RequirementsTable({
requirements,
orgId,
}: RequirementsTableProps) {
const [searchTerm, setSearchTerm] = useState("");
Expand All @@ -41,9 +40,10 @@ interface RequirementsTableProps {
title={"Name"}
/>
),

cell: ({ row }) => {
return (
<span>
<span className="line-clamp-2 truncate max-w-[600px] h-10 text-wrap">
{row.original.requirement.name}
</span>
);
Expand All @@ -67,7 +67,7 @@ interface RequirementsTableProps {
),
cell: ({ row }) => {
return (
<span className="text-muted-foreground">
<span className="line-clamp-2 truncate max-w-[600px] h-10 text-wrap">
{row.original.requirement.description}
</span>
);
Expand Down Expand Up @@ -115,41 +115,28 @@ interface RequirementsTableProps {
});

return (
<Card>
<CardHeader>
<CardTitle>
{"Linked Requirements"} (
{filteredRequirements.length})
</CardTitle>
</CardHeader>
<CardContent>
<div className="flex items-center mb-4">
<Input
placeholder={"Search..."}
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
className="max-w-sm"
/>
{/* <div className="ml-auto">
<DataTableSortList
table={table.table}
align="end"
tableId="r"
/>
</div> */}
</div>
<DataTable
table={table.table}
rowClickBasePath={`/${orgId}/frameworks`}
getRowId={(row) => {
// This constructs the path to the specific requirement page
// row.requirementId is the FrameworkEditorRequirement.id (e.g. frk_rq_...)
// row.frameworkInstanceId is the ID of the FrameworkInstance
return `${row.frameworkInstanceId}/requirements/${row.requirementId}`;
}}
tableId={"r"}
<div className="space-y-4">
<div className="flex items-center">
<Input
placeholder="Search requirements..."
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
className="max-w-sm"
leftIcon={<Icons.Search size={16} />}
/>
</CardContent>
</Card>
</div>

<DataTable
table={table.table}
rowClickBasePath={`/${orgId}/frameworks`}
getRowId={(row) => {
// This constructs the path to the specific requirement page
// row.requirementId is the FrameworkEditorRequirement.id (e.g. frk_rq_...)
// row.frameworkInstanceId is the ID of the FrameworkInstance
return `${row.frameworkInstanceId}/requirements/${row.requirementId}`;
}}
tableId={"r"}
/>
</div>
);
}
Loading
Loading