PawIdentity (also branded as PawAadhar) is a premium, minimal digital pet identity and recovery platform. Inspired by the design philosophies of MUJI, Apple Wallet, and Linear, PawIdentity provides a zero-friction, monochromatic interface for pet management and lost recovery telemetry.
Features a centered title, call-to-action buttons, a floating QR Smart Tag, and Bruno's Pet Preview card.
Automatically logs visitor telemetry (coordinates, device type, browser) in the background on scanning and triggers owner notification alerts.
Standard physical pet collars only contain a static phone number that can fade, get worn out, or go unanswered when a pet goes missing. Additionally, traditional tags do not notify the owner when they are found or scanned.
PawIdentity solves this by providing:
- QR Smart Tags: Each pet collar is fitted with a unique QR tag containing a slug-based profile link.
- Instant Scan Telemetry: Scanning the QR code prompts the visitor for browser geolocation, captures their device agent, logs the event to a database, and alerts the owner instantly via Twilio SMS.
- Secure Profiles: Displays crucial information (photo, name, emergency contacts, vaccination status) while hiding owner email, address, and medical records from the public.
graph TD
Client[React + Vite + Tailwind CSS] -->|Firebase Auth JWT| Express[Node + Express Server]
Express -->|Mongoose ORM| Mongo[(MongoDB Atlas)]
Express -->|Media storage| Cloudinary[Cloudinary API]
Express -->|SMS Telemetry| Twilio[Twilio SMS API]
Visitor[Finder Device] -->|Scans QR tag| PetPage[Public Recovery Profile]
PetPage -->|Logs location scan| Express
- Client (Frontend): React, Vite, Tailwind CSS v4, Framer Motion, React Router DOM, Axios, Firebase Client SDK.
- Server (Backend): Node.js, Express.js (ES Modules configuration), Mongoose, Firebase Admin SDK, Cloudinary, Twilio, qrcode.
- Database: MongoDB Atlas.
- State Management: React Context API (No Redux).
- User: Stores
name,email,firebaseUID,phone,profilePicture,role(owner,vet,shelter,admin),verifiedstatus, and timestamps. - Pet: Stores
name,species,breed,gender,dob,weight,color,microchipId,photo,owner(ref User),qrTag(ref QRTag),isVaccinatedstatus,status(active,missing),emergencyContactslist (name, relation, phone), and timestamps. - QRTag: Logs
tagId(e.g.PID-2026-001),slug,pet(ref Pet),scanCount,lastScannedAt,status(active,inactive), and timestamps. - MedicalRecord: Stores
pet(ref Pet),veterinarian(ref User or string),diagnosis,prescription,notes,attachments(urls array), and timestamps. - Vaccination: Records
pet(ref Pet),vaccineName,dateAdministered,nextDueDate,batchNumber,verified, and timestamps. - LostPet: Manages active missing listings:
pet(ref Pet),missingSince,reward,description,lastSeenCity,lastSeenLocation,latitude,longitude,status(missing,found,closed),foundAt,closedAt, and timestamps. - ScanLog: Captures
pet(ref Pet),qrTag(ref QRTag),scannedAt,latitude,longitude,city,browser,device,ipAddress,ownerNotified, and timestamps. - Notification: Links notifications to users:
user(ref User),title,message,type(scan,vaccine,lost,general),status(read,unread),metadata, and timestamps.
- Node.js (v18+)
- MongoDB Atlas cluster
- Firebase project, Cloudinary, and Twilio developer keys
- Navigate to
/server. - Create a
.envfile containing:PORT=3000 MONGODB_URI=your_mongodb_atlas_uri CLOUDINARY_CLOUD_NAME=your_cloud_name CLOUDINARY_API_KEY=your_api_key CLOUDINARY_API_SECRET=your_api_secret TWILIO_ACCOUNT_SID=your_twilio_sid TWILIO_AUTH_TOKEN=your_twilio_token TWILIO_PHONE_NUMBER=your_twilio_phone
- Install dependencies and seed mock data:
npm install node utils/seed.js
- Start the server:
npm start
- Navigate to
/client. - Create a
.envfile containing:VITE_FIREBASE_API_KEY=your_api_key VITE_FIREBASE_AUTH_DOMAIN=your_auth_domain VITE_FIREBASE_PROJECT_ID=your_project_id VITE_FIREBASE_STORAGE_BUCKET=your_storage_bucket VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id VITE_FIREBASE_APP_ID=your_app_id VITE_SERVER_URL=http://localhost:3000
- Install dependencies:
npm install
- Start the development server:
npm run dev

