Skip to content

feat: add dashboard modules — conversations, billing, settings, files… - #7

Merged
ladaniprem merged 1 commit into
masterfrom
08-dashboard-modules
Jul 4, 2026
Merged

ladaniprem merged 1 commit into
masterfrom
08-dashboard-modules

Conversation

@ladaniprem

Copy link
Copy Markdown
Owner

…, integrations, plugins, customization

Copilot AI review requested due to automatic review settings July 4, 2026 12:16
@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@ladaniprem, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 58 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: e62d8530-2572-4f69-b032-d847794c5283

📥 Commits

Reviewing files that changed from the base of the PR and between 94ac0a7 and c268c4a.

⛔ Files ignored due to path filters (8)
  • apps/web/public/dashboard-dark.png is excluded by !**/*.png
  • apps/web/public/languages/html5.svg is excluded by !**/*.svg
  • apps/web/public/languages/javascript.svg is excluded by !**/*.svg
  • apps/web/public/languages/nextjs.svg is excluded by !**/*.svg
  • apps/web/public/languages/react.svg is excluded by !**/*.svg
  • apps/web/public/logo.svg is excluded by !**/*.svg
  • apps/web/public/mobile-dark.png is excluded by !**/*.png
  • apps/web/public/vapi.jpg is excluded by !**/*.jpg
📒 Files selected for processing (50)
  • apps/web/app/(dashboard)/billing/page.tsx
  • apps/web/app/(dashboard)/conversations/[conversationId]/layout.tsx
  • apps/web/app/(dashboard)/conversations/[conversationId]/page.tsx
  • apps/web/app/(dashboard)/conversations/layout.tsx
  • apps/web/app/(dashboard)/conversations/page.tsx
  • apps/web/app/(dashboard)/customization/page.tsx
  • apps/web/app/(dashboard)/dashboard/page.tsx
  • apps/web/app/(dashboard)/files/page.tsx
  • apps/web/app/(dashboard)/integrations/page.tsx
  • apps/web/app/(dashboard)/layout.tsx
  • apps/web/app/(dashboard)/plugins/vapi/page.tsx
  • apps/web/app/(dashboard)/settings/page.tsx
  • apps/web/app/api/sentry-example-api/route.ts
  • apps/web/app/page.tsx
  • apps/web/app/sentry-example-page/page.tsx
  • apps/web/lib/country-utils.ts
  • apps/web/modules/billing/ui/components/premium-feature-overlay.tsx
  • apps/web/modules/billing/ui/components/pricing-table.tsx
  • apps/web/modules/billing/ui/views/billing-view.tsx
  • apps/web/modules/customization/schemas.ts
  • apps/web/modules/customization/types.ts
  • apps/web/modules/customization/ui/components/customization-form.tsx
  • apps/web/modules/customization/ui/components/vapi-form-fields.tsx
  • apps/web/modules/customization/ui/views/customization-view.tsx
  • apps/web/modules/dashboard/atoms.ts
  • apps/web/modules/dashboard/constants.ts
  • apps/web/modules/dashboard/ui/components/contact-panel.tsx
  • apps/web/modules/dashboard/ui/components/conversation-status-button.tsx
  • apps/web/modules/dashboard/ui/components/conversations-panel.tsx
  • apps/web/modules/dashboard/ui/components/dashboard-sidebar.tsx
  • apps/web/modules/dashboard/ui/layouts/conversation-id-layout.tsx
  • apps/web/modules/dashboard/ui/layouts/conversations-layout.tsx
  • apps/web/modules/dashboard/ui/layouts/dashboard-layout.tsx
  • apps/web/modules/dashboard/ui/views/conversation-id-view.tsx
  • apps/web/modules/dashboard/ui/views/conversations-view.tsx
  • apps/web/modules/files/ui/components/delete-file-dialog.tsx
  • apps/web/modules/files/ui/components/upload-dialog.tsx
  • apps/web/modules/files/ui/views/files-view.tsx
  • apps/web/modules/integrations/constants.ts
  • apps/web/modules/integrations/ui/views/integrations-view.tsx
  • apps/web/modules/integrations/utils.ts
  • apps/web/modules/plugins/hooks/use-vapi-data.ts
  • apps/web/modules/plugins/ui/components/plugin-card.tsx
  • apps/web/modules/plugins/ui/components/vapi-assistants-tab.tsx
  • apps/web/modules/plugins/ui/components/vapi-connected-view.tsx
  • apps/web/modules/plugins/ui/components/vapi-phone-numbers-tab.tsx
  • apps/web/modules/plugins/ui/views/vapi-view.tsx
  • apps/web/modules/settings/ui/components/settings-form.tsx
  • apps/web/modules/settings/ui/views/settings-view.tsx
  • apps/web/package.json

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands.

@ladaniprem
ladaniprem merged commit 4ece9c2 into master Jul 4, 2026
3 checks passed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a set of new dashboard modules and supporting UI for the apps/web Next.js app, covering conversations/inbox, files (knowledge base), integrations (embed snippets), customization, plugins (Vapi), billing, and settings—plus associated assets and utilities.

Changes:

  • Added multiple dashboard views/layouts (sidebar navigation, conversations UI with status filtering, contact panel).
  • Implemented new feature areas: Settings (profile/notifications/appearance), Files (upload/delete), Integrations (script snippet generator), Customization (widget settings + optional Vapi configuration), Billing (Clerk pricing table), Plugins (Vapi connect/manage).
  • Updated web app dependencies and dev port; added public icon assets for integrations.

Reviewed changes

Copilot reviewed 50 out of 58 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
apps/web/public/logo.svg Adds app logo asset used in UI.
apps/web/public/languages/react.svg Adds React icon asset for integrations UI.
apps/web/public/languages/nextjs.svg Adds Next.js icon asset for integrations UI.
apps/web/public/languages/javascript.svg Adds JavaScript icon asset for integrations UI.
apps/web/public/languages/html5.svg Adds HTML5 icon asset for integrations UI.
apps/web/package.json Changes dev port + adds dependencies for new dashboard features.
apps/web/modules/settings/ui/views/settings-view.tsx Adds settings page view container.
apps/web/modules/settings/ui/components/settings-form.tsx Adds settings forms (profile, appearance, notifications, account).
apps/web/modules/plugins/ui/views/vapi-view.tsx Adds Vapi plugin connect/disconnect view.
apps/web/modules/plugins/ui/components/vapi-phone-numbers-tab.tsx Adds Vapi phone numbers table tab.
apps/web/modules/plugins/ui/components/vapi-connected-view.tsx Adds connected-state UI for Vapi plugin.
apps/web/modules/plugins/ui/components/vapi-assistants-tab.tsx Adds Vapi assistants table tab.
apps/web/modules/plugins/ui/components/plugin-card.tsx Adds generic plugin connection card UI.
apps/web/modules/plugins/hooks/use-vapi-data.ts Adds hooks to fetch Vapi data via Convex actions.
apps/web/modules/integrations/utils.ts Adds snippet generation helper (createScript).
apps/web/modules/integrations/ui/views/integrations-view.tsx Adds integrations UI + copy-to-clipboard flows.
apps/web/modules/integrations/constants.ts Defines integrations list + embed snippet templates.
apps/web/modules/files/ui/views/files-view.tsx Adds knowledge-base files table + pagination.
apps/web/modules/files/ui/components/upload-dialog.tsx Adds file upload dialog using Dropzone + Convex mutation.
apps/web/modules/files/ui/components/delete-file-dialog.tsx Adds file deletion confirmation dialog.
apps/web/modules/dashboard/ui/views/conversations-view.tsx Adds conversations landing view.
apps/web/modules/dashboard/ui/views/conversation-id-view.tsx Adds conversation thread view + operator response input + status toggling.
apps/web/modules/dashboard/ui/layouts/dashboard-layout.tsx Adds shared dashboard layout with guards + sidebar provider.
apps/web/modules/dashboard/ui/layouts/conversations-layout.tsx Adds resizable split layout for conversations list/detail.
apps/web/modules/dashboard/ui/layouts/conversation-id-layout.tsx Adds resizable layout including contact side panel.
apps/web/modules/dashboard/ui/components/dashboard-sidebar.tsx Adds dashboard navigation sidebar.
apps/web/modules/dashboard/ui/components/conversations-panel.tsx Adds conversations list panel with status filter + infinite scroll.
apps/web/modules/dashboard/ui/components/conversation-status-button.tsx Adds status button (unresolved/escalated/resolved) with hint.
apps/web/modules/dashboard/ui/components/contact-panel.tsx Adds contact/session metadata panel (device/location/time).
apps/web/modules/dashboard/constants.ts Adds storage key constant for status filter.
apps/web/modules/dashboard/atoms.ts Adds jotai atom (persisted) for status filtering.
apps/web/modules/customization/ui/views/customization-view.tsx Adds customization page view with loading state.
apps/web/modules/customization/ui/components/vapi-form-fields.tsx Adds Vapi-related widget settings form fields.
apps/web/modules/customization/ui/components/customization-form.tsx Adds widget settings form + Convex upsert mutation.
apps/web/modules/customization/types.ts Adds form schema type inference.
apps/web/modules/customization/schemas.ts Adds Zod schema for widget customization form.
apps/web/modules/billing/ui/views/billing-view.tsx Adds billing page view.
apps/web/modules/billing/ui/components/pricing-table.tsx Wraps Clerk pricing table component.
apps/web/modules/billing/ui/components/premium-feature-overlay.tsx Adds overlay component prompting upgrade for premium features.
apps/web/lib/country-utils.ts Adds timezone → country resolution + flag URL helper.
apps/web/app/sentry-example-page/page.tsx Adds/updates Sentry example page UI.
apps/web/app/page.tsx Adds/updates marketing landing page and widget script include.
apps/web/app/api/sentry-example-api/route.ts Adds/updates Sentry test API route that throws.
apps/web/app/(dashboard)/settings/page.tsx Wires settings route to SettingsView.
apps/web/app/(dashboard)/plugins/vapi/page.tsx Wires Vapi plugin route to VapiView.
apps/web/app/(dashboard)/layout.tsx Switches dashboard route group to shared DashboardLayout.
apps/web/app/(dashboard)/integrations/page.tsx Wires integrations route to IntegrationsView.
apps/web/app/(dashboard)/files/page.tsx Wires files route to FilesView.
apps/web/app/(dashboard)/dashboard/page.tsx Adds placeholder dashboard home page.
apps/web/app/(dashboard)/customization/page.tsx Wires customization route to CustomizationView.
apps/web/app/(dashboard)/conversations/page.tsx Wires conversations route to ConversationsView.
apps/web/app/(dashboard)/conversations/layout.tsx Adds conversations route-group layout.
apps/web/app/(dashboard)/conversations/[conversationId]/page.tsx Wires conversation detail route to ConversationIdView.
apps/web/app/(dashboard)/conversations/[conversationId]/layout.tsx Adds conversation detail layout with contact panel.
apps/web/app/(dashboard)/billing/page.tsx Wires billing route to BillingView.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

<SelectTrigger>
<SelectValue
placeholder={
assistantsLoading
Comment on lines +26 to +29
export const HTML_SCRIPT = `<script src="localhost:3000/widget.js" data-organization-id="{{ORGANIZATION_ID}}"></script>`;
export const REACT_SCRIPT = `<script src="localhost:3000/widget.js" data-organization-id="{{ORGANIZATION_ID}}"></script>`;
export const NEXTJS_SCRIPT = `<script src="localhost:3000/widget.js" data-organization-id="{{ORGANIZATION_ID}}"></script>`;
export const JAVASCRIPT_SCRIPT = `<script src="localhost:3000/widget.js" data-organization-id="{{ORGANIZATION_ID}}"></script>`;
Comment thread apps/web/app/page.tsx
import Link from "next/link"
import Script from "next/script"
import Image from "next/image"
import { useEffect, useRef, useState } from "react"
Comment thread apps/web/app/page.tsx
Comment on lines +7 to +11
import {
MessageSquareText, Bot, BarChart3, Shield, Globe, Zap, Network,
Headphones, ArrowRight, Sparkles, ChevronRight, Check,
ArrowUpRight, Server, Database, Users, Clock, Activity, X, Menu
} from "lucide-react"
Comment thread apps/web/app/page.tsx
</div>
</footer>

<Script src="/widget.js" data-organization-id="org_31QtvqJKwhtvop04esLJMkmFouB" strategy="afterInteractive" />
@@ -0,0 +1,14 @@
import { NextResponse } from "next/server";
Comment on lines +11 to +14
export function GET() {
throw new SentryExampleAPIError("This error is raised on the backend called by the example page.");
return NextResponse.json({ data: "Testing Sentry Error..." });
}
Comment on lines +70 to +75
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
message: "",
},
});
try {
const response = await enhanceResponse({ prompt: currentValue });

form.setValue("message", response);
Comment on lines +81 to +83
try {
await user?.update({ firstName: values.name.split(" ")[0], lastName: values.name.split(" ").slice(1).join(" ") });
toast.success("Profile updated");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants