ποΈ Table of Contents
0-KM is a mobile app designed to help couples stay connected across any distance. Built with modern technologies, it offers a comprehensive platform for relationship building and maintenance.
Sign up and login with email or Google OAuth
Our secure authentication system provides:
- Email and password sign-up/sign-in
- Google OAuth integration
- Secure session management with Clerk
- Email verification process
- Forgot password functionality
Smooth onboarding experience for new users
Smooth onboarding experience includes:
- User profile creation
- Partner information setup
- Relationship preferences configuration
- Getting started guide
Secure couple workspace creation and joining
Unique pairing system features:
- Secure room creation and joining
- Partner verification process
- Private couple workspace establishment
- Synchronized user experience
Main dashboard with relationship milestones and quick access
The main dashboard provides:
- Real Time widgets updating your partnerβs weather and time zone
- Notification on calendar booking
- Real Time Anniversary date
- Sharing and watching YouTube together
- Stream music on Spotify and control music of your partner
Note: Remember to keep your Spotify active (go to your Spotify, play a song and pause, navigate back to the app) before searching up a song in Spotify widget in 0km.
Profile management - logout, leave room, and see partner details
Comprehensive profile management:
- Personal information editing
- Relationship status updates
- Account settings
- Privacy controls
- Logout functionality
- Leave room option
- Partner information viewing
Shared digital book collection and reading tracking
Shared digital library includes:
- Book collection management
- Reading progress tracking
- Shared reading experiences
- Book recommendations
Interactive journaling and memory documentation
Interactive journaling system:
- Personal diary entries
- Shared memories documentation
- Photo, video, location and text entries
- Timeline organization
- Leaflet map integration for location-based memories
- Pagination fetch
- Cloudinary integration for media storage
- Dynamic photo + video grid
Advanced messaging platform for couples
Advanced messaging platform features:
- Realtime messaging
- Media sharing (photos, videos)
- Message history
- Push notifications
- Online/offline status
- Edit / Delete messages
- Privacy Settings
Calendar synchronization for couples
Calendar synchronization includes:
- Google Calendar connection
- Mutual availability viewing
- Event scheduling
- Virtual date planning
- Calendar conflict resolution
Sustainable and scalable data architecture
Robust data architecture using:
- 8 tables
- Supabase for structured data
- Real-time data synchronization
- Secure data management
- Efficient querying system
This project is built using modern technologies to ensure performance and scalability.
Our team winning the Technical Titan Award at VTMP Demo Day!
- Hands-on Experience in Mobile & iOS Development: We built full-stack, feature-rich, cross-platform mobile application using React Natve, with all UI components developed from scratch. The app is integrated with Supabase as the backend, allowing for real-time data handling.
- Teamwork and Collaboration: We leveraged tools like ngrok to enable seamless cross-platform development with Expo CLI. Our development process involved consistent debugging, version control using Git, and detailed code reviews on pull requests. Beyond technical execution, we significantly improved our soft skills, particularly in clear and efficient team communication.
- Award-Winning Execution: Our commitment to high-quality design, robust functionality, and innovation earned us the Technical Titan Award, recognizing our app as a standout in both technical complexity and user experience.
To get a local copy up and running, follow these simple steps.
- Node.js (v16.0.0 or higher)
- npm (v7.0.0 or higher)
- Git
- Expo CLI
- ngrok (for exposing local backend to mobile device)
- iOS Simulator (for iOS development) or Android Emulator (for Android development)
-
Create required accounts and get API keys:
- Clerk Account - For authentication
- Supabase Account - For database
- Google Cloud Console - For Calendar API
- Cloudinary Account - For media storage
- ngrok Account - For exposing local backend to mobile devices
-
Clone the repository:
git clone https://github.com/ThanhDatVu111/0-KM.git cd 0km-app -
Install dependencies:
# Install root dependencies npm install # Or install separately cd frontend npm install cd ../backend npm install
-
Configure Environment Variables:
# Copy environment files cp frontend/.env.example frontend/.env cp backend/.env.example backend/.env -
Set up your environment variables:
Frontend (.env):
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_key EXPO_PUBLIC_API_HOST=localhost EXPO_PUBLIC_API_PORT=3001 EXPO_PUBLIC_API_PUBLIC_URL=https://your-ngrok-url.ngrok-free.app EXPO_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloudinary_name EXPO_PUBLIC_CLOUDINARY_API_KEY=your_cloudinary_key EXPO_PUBLIC_CLOUDINARY_SIGN_URL=https://your-ngrok-url.ngrok-free.app/cloudinary-sign EXPO_PUBLIC_WEB_CLIENT_ID=your_google_web_client_id EXPO_PUBLIC_IOS_CLIENT_ID=your_google_ios_client_id EXPO_PUBLIC_CLIENT_SECRET=your_google_client_secret EXPO_PUBLIC_SUPABASE_URL=your_supabase_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
Backend (.env):
PORT=3001 NGROK_URL=https://your-ngrok-url.ngrok-free.app SUPABASE_URL=your_supabase_url SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_key CLERK_SECRET_KEY=your_clerk_secret_key
-
Set up your Supabase database:
- Create tables for users, rooms, chats, library, etc.
- Set up authentication policies
- Configure real-time subscriptions
-
Start the development servers:
First, start ngrok to expose your backend:
# Install ngrok if you haven't already npm install -g ngrok # Start ngrok tunnel for port 3001 ngrok http 3001
Copy the ngrok URL (e.g.,
https://abc123.ngrok-free.app) and update your environment variables.Backend:
cd backend npm run devFrontend:
cd frontend npx expo start --clear -
Run on device:
- Scan QR code with Expo Go app (iOS/Android)
- Or press
ifor iOS simulator - Or press
afor Android emulator
- Create a new application in Clerk Dashboard
- Configure authentication methods (Email, Google OAuth)
- Add your application's domain to allowed origins
- Set up webhook endpoints for user management
- Create a new Supabase project
- Set up database tables using provided SQL schemas
- Configure Row Level Security (RLS) policies
- Enable real-time subscriptions for chat functionality
- Create a project in Google Cloud Console
- Enable Calendar API
- Configure redirect URIs
- Create a Cloudinary account
- Get your cloud name and API credentials
- Configure upload presets for media files
- Set up transformation settings
- Create a free ngrok account at ngrok.com
- Install ngrok:
npm install -g ngrok - Authenticate:
ngrok config add-authtoken YOUR_AUTHTOKEN - Start tunnel:
ngrok http 3001 - Copy the HTTPS URL and update your environment variables
- Important: Update both frontend and backend .env files with the ngrok URL
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Aggregated list of resources and assets, documenting our development process.
Meet the talented team behind 0-KM:
|
Tech Lead Thanh Dat Vu Full-Stack Development & Architecture |
Project Advisor Van Nguyen Technical Guidance & Mentorship |
|
Chau Tran Software Engineer |
Tuan-Anh Ngo Software Engineer |
Quinxie Doan Software Engineer |
Distributed under the MIT License. See LICENSE.txt for more information.
