feat: all core modules — properties, customers, searches, matches, presentations, activities, investors + public sunum page

- Server actions: property/customer/search/presentation/activity/investor CRUD
- Matching engine: matchPropertyToSearches + syncMatchesForSearch on search save
- UI: form sheets + table clients for all modules
- Public /sunum/[token] page (no auth) with property card grid + expiry check
- All pages force-dynamic for auth guard compatibility
This commit is contained in:
egecankomur
2026-05-05 12:03:48 +03:00
parent 2f17c342ca
commit 4ef0482732
34 changed files with 3174 additions and 36 deletions
+12 -4
View File
@@ -1,8 +1,16 @@
export default function Page() {
export const dynamic = "force-dynamic";
import { requireTenant } from "@/lib/appwrite/tenant-guard";
import { listProperties } from "@/lib/appwrite/property-queries";
import { PropertiesClient } from "@/components/properties/properties-client";
export default async function PropertiesPage() {
const ctx = await requireTenant();
const properties = await listProperties(ctx.tenantId);
return (
<div className="flex flex-1 flex-col gap-4 p-4">
<h1 className="text-2xl font-bold capitalize">properties</h1>
<p className="text-muted-foreground">Yakında...</p>
<div className="flex flex-1 flex-col gap-4 p-4 md:p-6">
<PropertiesClient initialProperties={properties} />
</div>
);
}