Redesign Calendar + Messages, fix favicon, add date picker, Tasks & Activity

- Appointments now carry a date; the Calendar button opens a Google-Calendar
  style month grid (color-coded event chips, month nav, Today, click a day for
  its list). Today/Upcoming sections derive from dates.
- Add-appointment dialog gains a date picker (Popover + Calendar).
- Messages rebuilt as chat threads: an input-based composer that appends to a
  two-way timeline (no more toast covering the field), and the unread count is
  now a filter toggle.
- Favicon: the brand logo now shows in the tab. Removed the stale default
  app/favicon.ico (which shadowed it) and added app/icon.png + app/apple-icon.png
  generated from the logo; dropped the redundant metadata.icons.
- Sidebar: swapped Notes <-> Messages order (both kept).
- New pages: Activity (signed-change audit timeline with hash chips + approval
  status) and Tasks (two-pane care-team to-do with add dialog).
- Prescriptions: adding a medication now surfaces mock drug-interaction and
  allergy warnings against the patient's record.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-06 18:18:48 +03:00
parent 0f10aafa43
commit 00152eb3cb
15 changed files with 1286 additions and 223 deletions
+10
View File
@@ -0,0 +1,10 @@
import { ActivityView } from "@/components/activity/activity-view";
import { SidebarInset } from "@/components/ui/sidebar";
export default function ActivityPage() {
return (
<SidebarInset className="flex flex-1 flex-col overflow-y-auto">
<ActivityView />
</SidebarInset>
);
}
+10
View File
@@ -0,0 +1,10 @@
import { TasksView } from "@/components/tasks/tasks-view";
import { SidebarInset } from "@/components/ui/sidebar";
export default function TasksPage() {
return (
<SidebarInset className="flex flex-1 flex-col overflow-hidden">
<TasksView />
</SidebarInset>
);
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+1 -1
View File
@@ -15,7 +15,7 @@ export const metadata: Metadata = {
title: "temetro — AI assistant for clinicians",
description:
"Retrieve patient information by simply asking. The open-source AI assistant for clinicians.",
icons: { icon: "/temetro-logo.png", apple: "/temetro-logo.png" },
// Icons come from the app/icon.png + app/apple-icon.png file conventions.
};
export default function RootLayout({