Tessera is a mobile app designed to facilitate in-person social connections using NFC technology and selfies. Instead of passive social media engagement, Tessera encourages meaningful interactions by allowing users to:
📌 Tap phones to connect using NFC 📌 Take a selfie together to capture the moment 📌 View a home feed of recent connections
The app focuses on authentic, real-world interactions, making networking and socializing more engaging. Future features include group connections, profile customization, and notifications.
✅ React Native (Expo for ease, or bare React Native if needed) ✅ React Native NFC Manager (Handles NFC interactions) ✅ React Native Camera (For capturing selfies) ✅ React Context (For state management)
✅ Vite + React (Frontend for web dashboard) ✅ React Router (For navigation) ✅ Tailwind CSS (For styling) ✅ Supabase SDK (For database, auth, and storage integration)
✅ Supabase (PostgreSQL) (Database, Auth, Real-time Sync) ✅ Supabase Auth (Handles user authentication) ✅ Supabase Storage (For images and media) ✅ Supabase Realtime (For live updates in the feed) ✅ Node.js (For potential future backend logic)
✅ GitHub Projects (For sprint tracking & issues) ✅ Vercel (For web app deployment) ✅ Expo EAS (For mobile builds) ✅ Supabase Hosted Backend (No need to manage servers)
✅ GitHub (Version control & CI/CD) ✅ GitHub Projects (Kanban board for tasks) ✅ Discord (For team communication & async updates)
We use iterative development with weekly sprints, starting with an MVP and expanding as time allows.
Tessera uses PostgreSQL (via Supabase) to store users, connections, posts, and group memberships.
id UUID PRIMARY KEY
email VARCHAR UNIQUE
name VARCHAR
avatar_url TEXT
created_at TIMESTAMP DEFAULT now()
id UUID PRIMARY KEY
user_1 UUID REFERENCES users(id)
user_2 UUID REFERENCES users(id)
selfie_url TEXT
timestamp TIMESTAMP DEFAULT now()
id UUID PRIMARY KEY
user_id UUID REFERENCES users(id)
text TEXT
created_at TIMESTAMP DEFAULT now()
id UUID PRIMARY KEY
post_id UUID REFERENCES posts(id)
media_url TEXT
type VARCHAR CHECK (type IN ('image', 'video', 'file'))
created_at TIMESTAMP DEFAULT now()
id UUID PRIMARY KEY
name VARCHAR
description TEXT
created_by UUID REFERENCES users(id)
created_at TIMESTAMP DEFAULT now()
group_id UUID REFERENCES groups(id)
user_id UUID REFERENCES users(id)
joined_at TIMESTAMP DEFAULT now()
PRIMARY KEY (group_id, user_id)
- One-to-Many Relationships:
- Each user can create many posts.
- Each post can have multiple media files.
- Many-to-Many Relationships:
- Users can belong to multiple groups, and groups can have multiple members (tracked in
group_members
).
- Users can belong to multiple groups, and groups can have multiple members (tracked in
Purpose: Display the user's connections/peers Shows peer cards for all connections Will eventually indicate which connections have updates Serves as a directory of the user's network Clicking a peer card routes to that peer's profile
Purpose: View and manage your own profile Shows your profile information and bio Will eventually allow editing profile details Displays your feed which is only visible on your profile
Purpose: Instant messaging with connections Interface for real-time communication Allows private conversations between users
Provides navigation between these three main views Always visible when the user is authenticated
User logs in → Sees their Connections (Home) page User can: Click on a connection to view that peer's profile and feed Navigate to their own profile Access direct messages Navigate between views using the navbar