Relay
RETURN — campus lost-and-found for cataloging lost and found reports, staff review, and resolution tracking.
Problem
Campus lost-and-found still lives in bulletin boards, group chats, and front-desk notebooks. RETURN gives reporters a structured path to file lost or found items with taxonomy, photos, and site/location context — and gives staff review queues, audit trails, and resolution states in one system.
Capabilities
lost_reportsandfound_reportstables with category, site, location, and image storage references- Report lifecycle: pending review, rejection reason, resolution by staff with timestamps
- Taxonomy layer (
categories,sites,locations) shared across report types - Better Auth, Drizzle ORM, and PostgreSQL in a Turborepo (
apps/web,apps/server,packages/db) - Hono API with Cloudflare Workers deployment path via Alchemy
- PWA and Electrobun desktop shell options for field and desk use
export const lostReports = pgTable("lost_reports", {
id: uuid("id").defaultRandom().primaryKey(),
reporterId: text("reporter_id").notNull().references(() => user.id, { onDelete: "restrict" }),
categoryId: uuid("category_id").notNull().references(() => categories.id, { onDelete: "restrict" }),
title: text("title").notNull(),
description: text("description").notNull(),
dateOccurred: timestamp("date_occurred", { mode: "date" }).notNull(),
imageStorageIds: jsonb("image_storage_ids").$type<string[]>().notNull().default([]),
status: text("status").notNull().default("pending"),
...timestamps,
});