Campus lost-and-found Mobile Application for the FEU Roosevelt community, built with Expo, React Native, and Firebase.
- Overview
- Screenshots
- Features
- Tech Stack
- Architecture
- Project Structure
- Getting Started
- Environment Variables
- Available Scripts
- Firebase Setup Checklist
- Data Model Summary
- Security Rules
- Current Status
- Roadmap
- Contributing
- License
TamFinds provides a focused workflow for reporting and reclaiming lost items on campus:
- Report items with image upload and contextual details
- Browse a real-time feed of submitted entries
- Request claims for found items
- Approve pending claim requests as the original reporter
The app uses Firebase as a managed backend, with real-time data sync from Cloud Firestore and media storage in Cloud Storage.
| Login | Sign Up |
|---|---|
![]() |
![]() |
| Home Feed | Report Item |
|---|---|
![]() |
![]() |
| My Reports |
|---|
![]() |
- Email/password authentication
- FEU domain verification flag (
@feuroosevelt.edu.ph) - Realtime item feed via Firestore subscriptions
- Item reporting with camera/gallery image support
- Image compression before upload
- Item detail screen with claim request actions
- Owner-side pending claim approvals
- My Reports screen for user-submitted items
- Reusable mascot-based UI components and shared design tokens
- Framework: Expo SDK 55 + React Native 0.83
- Language: TypeScript
- Styling: NativeWind v4 + Tailwind CSS v3
- Navigation: React Navigation (native stack)
- Backend: Firebase v12
- Authentication
- Cloud Firestore
- Cloud Storage
src/api: Firebase config and service modules (items,users,claim requests,storage)src/hooks: Feature hooks and auth/data subscriptionssrc/screens: Auth and app screen implementationssrc/components: Shared UI components (cards, skeletons, badges, mascot assets)src/navigation: Route definitions and root navigatorsrc/theme: Color palette, typography, spacing/radius/shadow tokenssrc/types: Shared TypeScript types for users and items
tamfinds/
app.json
App.tsx
firestore.rules
storage.rules
src/
api/
components/
hooks/
navigation/
screens/
theme/
types/
- Node.js 18+
- npm
- Expo CLI (optional,
npx expo ...works) - A Firebase project with Auth, Firestore, and Storage enabled
npm installnpm run startPlatform-specific commands:
npm run android
npm run ios
npm run webCreate .env.local from .env.example and fill the values:
EXPO_PUBLIC_FIREBASE_API_KEY=
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=
EXPO_PUBLIC_FIREBASE_PROJECT_ID=
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
EXPO_PUBLIC_FIREBASE_APP_ID=Notes:
- All keys must start with
EXPO_PUBLIC_to be available in the client bundle. - Missing values will throw a startup error in
src/api/firebaseConfig.ts.
From package.json:
npm run start- Start Expo dev servernpm run android- Start Expo for Androidnpm run ios- Start Expo for iOSnpm run web- Start Expo for web
- Enable Email/Password in Firebase Authentication
- Create Firestore database
- Enable Cloud Storage
- Deploy security rules
firebase deploy --only firestore:rules,storageuid: stringemail: stringdisplayName: stringisSchoolVerified: booleancreatedAt: timestamp
id: stringtitle: stringdescription: stringimageUrl: stringlocation: stringcategory: 'Electronics' | 'IDs' | 'Books' | 'Personal'status: 'LOST' | 'FOUND' | 'CLAIMED'reporterId: stringreportedAt: timestampisAtSecurity: boolean
Storage object path convention:
items/{uid}/{timestamp}_{filename}
- Firestore rules:
firestore.rules - Storage rules:
storage.rules
Review and keep rules aligned with claim and ownership flows.
Project is in Phase 4 (Campus Identity), with core lost-and-found workflows complete and claim request features already integrated.
Reference docs:
docs/PROJECT_STATE.mddocs/IMPLEMENTATION_STEPS.mddocs/SCHEMA.md
- SVG-based mascot icon set
- Reject/cancel claim request actions
- Request history status chips
- Owner-side proof-of-ownership prompt before approval
- Notifications for new claim requests
- Create a branch from
main - Implement focused changes
- Test your changes on at least one target platform
- Open a pull request with a concise summary
This project is licensed under the MIT License. See the LICENSE file for details.




