diff --git a/web/src/components/filter/CalendarFilterButton.tsx b/web/src/components/filter/CalendarFilterButton.tsx
new file mode 100644
index 000000000..112a9d2a5
--- /dev/null
+++ b/web/src/components/filter/CalendarFilterButton.tsx
@@ -0,0 +1,79 @@
+import { useFormattedTimestamp } from "@/hooks/use-date-utils";
+import { ReviewSummary } from "@/types/review";
+import { Button } from "../ui/button";
+import { FaCalendarAlt } from "react-icons/fa";
+import ReviewActivityCalendar from "../overlay/ReviewActivityCalendar";
+import { DropdownMenuSeparator } from "../ui/dropdown-menu";
+import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer";
+import { isMobile } from "react-device-detect";
+import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
+
+type CalendarFilterButtonProps = {
+ reviewSummary?: ReviewSummary;
+ day?: Date;
+ defaultText: string;
+ updateSelectedDay: (day?: Date) => void;
+};
+export default function CalendarFilterButton({
+ reviewSummary,
+ day,
+ defaultText,
+ updateSelectedDay,
+}: CalendarFilterButtonProps) {
+ const selectedDate = useFormattedTimestamp(
+ day == undefined ? 0 : day?.getTime() / 1000 + 1,
+ "%b %-d",
+ );
+
+ const trigger = (
+
+ );
+ const content = (
+ <>
+