diff --git a/src/app/(customer)/appointments/[id]/page.tsx b/src/app/(customer)/appointments/[id]/page.tsx
index 90c2e67..938cce2 100644
--- a/src/app/(customer)/appointments/[id]/page.tsx
+++ b/src/app/(customer)/appointments/[id]/page.tsx
@@ -154,37 +154,34 @@ export default async function AppointmentDetailsPage({
)}
-
+
-
-
{RESCHEDULABLE_STATUSES.has(appointment.status) && (
Reschedule
)}
{CANCELLABLE_STATUSES.has(appointment.status) && (
-
+
)}
{REBOOKABLE_STATUSES.has(appointment.status) && (
-
+
)}
diff --git a/src/app/(customer)/home/page.tsx b/src/app/(customer)/home/page.tsx
index 0e49857..4f679ea 100644
--- a/src/app/(customer)/home/page.tsx
+++ b/src/app/(customer)/home/page.tsx
@@ -275,7 +275,6 @@ export default async function CustomerHomePage() {
services={services}
categories={categories.map((c) => ({ id: c.id, name: c.name }))}
portfolioImages={portfolioImages}
- reviews={reviews}
description={business.description}
phone={business.phone}
email={business.email}
diff --git a/src/app/(owner)/owner/settings/reviews/page.tsx b/src/app/(owner)/owner/settings/reviews/page.tsx
index 2d1291f..503fecd 100644
--- a/src/app/(owner)/owner/settings/reviews/page.tsx
+++ b/src/app/(owner)/owner/settings/reviews/page.tsx
@@ -7,7 +7,6 @@ import { hasPermission } from "@/lib/auth/permissions";
import { Permission } from "@/generated/prisma/enums";
import { getActingBusinessContext } from "@/lib/business/get-acting-business-context";
import { getBusinessProfile } from "@/services/business/business.service";
-import { listReviewsForOwner } from "@/services/reviews/review-management.service";
import { ReviewsManager } from "@/features/owner/components/reviews-manager";
export const metadata: Metadata = { title: "Reviews" };
@@ -23,28 +22,15 @@ export default async function OwnerReviewsPage() {
const context = await getActingBusinessContext();
if (!context) redirect("/staff");
- const [business, reviews] = await Promise.all([
- getBusinessProfile(prisma, context.businessId),
- listReviewsForOwner(prisma, context.businessId),
- ]);
+ const business = await getBusinessProfile(prisma, context.businessId);
if (!business) redirect("/owner");
return (
({
- id: r.id,
- authorName: r.authorName,
- rating: r.rating,
- text: r.text,
- relativeTimeDescription: r.relativeTimeDescription,
- isHidden: r.isHidden,
- }))}
/>
);
diff --git a/src/app/api/cron/sync-google-reviews/route.ts b/src/app/api/cron/sync-google-reviews/route.ts
index 31b1dd1..5cfec13 100644
--- a/src/app/api/cron/sync-google-reviews/route.ts
+++ b/src/app/api/cron/sync-google-reviews/route.ts
@@ -13,9 +13,10 @@ import { syncGoogleReviewsForAllBusinesses } from "@/services/reviews/review-syn
* that, and the customer app never calls Google directly regardless (see
* src/services/reviews/reviews.service.ts).
*
- * Safe to run concurrently with itself: syncGoogleReviewsForBusiness's
- * Review upsert is keyed on (businessId, externalId), so an overlapping
- * call just re-writes the same rows, never duplicates them.
+ * Safe to run concurrently with itself: syncGoogleReviewsForBusiness only
+ * overwrites Business.googleRating/googleRatingCount with whatever Google
+ * returns, so an overlapping call just re-writes the same two columns,
+ * never duplicates anything.
*/
export async function POST(request: Request) {
const secret = process.env.CRON_SECRET;
diff --git a/src/app/book/review/page.tsx b/src/app/book/review/page.tsx
index 8f9de17..6ac0202 100644
--- a/src/app/book/review/page.tsx
+++ b/src/app/book/review/page.tsx
@@ -58,7 +58,7 @@ export default async function BookReviewPage() {
-
+
Business
@@ -70,7 +70,7 @@ export default async function BookReviewPage() {
-
+
diff --git a/src/app/globals.css b/src/app/globals.css
index b9cdd38..f16378a 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -13,6 +13,7 @@
--color-ink: #111b15;
--color-stone: #f4f6f4;
--color-surface: #ffffff;
+ --color-pure-cloud: #f5f6f8;
/* Darkened from the templates' #6c7870 — that value was ~4.2:1 on
--color-stone (this app's default body background), just under WCAG
AA's 4.5:1 for normal text, and text-muted is used 300+ times across
diff --git a/src/features/booking/components/cancel-appointment-dialog.tsx b/src/features/booking/components/cancel-appointment-dialog.tsx
index 5a310ac..ef4aed2 100644
--- a/src/features/booking/components/cancel-appointment-dialog.tsx
+++ b/src/features/booking/components/cancel-appointment-dialog.tsx
@@ -10,9 +10,11 @@ import { cancelCustomerAppointmentAction } from "../actions/customer-appointment
export function CancelAppointmentDialog({
appointmentId,
guestToken,
+ className,
}: {
appointmentId: string;
guestToken?: string;
+ className?: string;
}) {
const [open, setOpen] = useState(false);
const [reason, setReason] = useState("");
@@ -47,7 +49,7 @@ export function CancelAppointmentDialog({
return (
<>
-