ASync is a mobile application built with React Native (Expo) and a Node.js backend. It's designed to help college students manage their academic resources, track assignments, view deadlines, and access course notes. The application features role-based access for students and teachers (admins), with a dedicated admin panel for managing content and users.
π₯ Watch Demo Video on Google Drive
- User Authentication: Secure sign-up and sign-in using email/password, managed with JWT.
- Role-Based Access: Distinct interfaces and capabilities for
STUDENTandTEACHERroles. - Student Dashboard: Displays user stats like total subjects, assignments, and upcoming deadlines.
- Assignment Tracking:
- Students view assignments relevant to their cohort, grouped by due date, with links to assignment details.
- Teachers manage assignments (create, edit, delete) via an admin form.
- Coursera Integration: Fetches assignment data from Coursera ICS calendar URLs based on cohort. Includes backend jobs for syncing assignments.
- Subject & Notes Management:
- Teachers manage subjects (CRUD) and can upload PDF notes associated with subjects. PDFs are stored using Cloudinary.
- Students can filter subjects by semester/term and view associated notes.
- Integrated PDF viewer for notes.tsx].
- Profile Management: Users can view and update their name and email.
- Admin Panel: Teachers have access to a dashboard with overall statistics and quick actions to manage assignments, subjects, users, and analytics.
- Scheduled Jobs: Backend includes cron jobs for cleaning up old assignments and syncing Coursera data.
- Push Notifications: Includes setup for requesting permissions and scheduling local notifications using
expo-notifications.
- Frontend:
- React Native
- Expo SDK
- Expo Router (File-based routing)
- Redux & React-Redux (State Management)
- NativeWind (Tailwind CSS for React Native)
- Axios (HTTP client)
- Formik & Yup (Form handling and validation)
- Lucide Icons
react-native-pdf(PDF Viewing).tsx]expo-notifications
- Backend:
- Node.js
- Express
- Prisma (ORM for PostgreSQL)
- PostgreSQL (Database)
- JWT (JSON Web Tokens for Auth)
- Cloudinary (Cloud storage for PDF uploads)
- Multer (Middleware for handling
multipart/form-data, used for uploads) - Node Cron (Task scheduling)
ical.js/ical(Parsing ICS calendar files)- Bcryptjs (Password hashing)
.
βββ Backend/
β βββ config/ # Database, Cloudinary, JWT config
β βββ controllers/ # Request handling logic
β βββ jobs/ # Scheduled tasks (cron jobs)
β βββ middleware/ # Auth, upload middleware
β βββ prisma/ # Prisma schema and migrations
β βββ routes/ # API endpoint definitions
β βββ utils/ # Helper functions (ICS parser, etc.)
β βββ index.js # Main server entry point
β βββ package.json
β βββ ...
βββ Frontend/
β βββ api/ # Functions for calling the backend API
β βββ app/ # Expo Router screens and layouts
β βββ assets/ # Images, fonts
β βββ components/ # Reusable UI components
β βββ store/ # Redux state management
β βββ utils/ # Utility functions (e.g., notifications)
β βββ app.json # Expo config
β βββ eas.json # EAS Build config
β βββ metro.config.js # Metro bundler config
β βββ tailwind.config.js # Tailwind CSS config
β βββ package.json
β βββ ...
βββ .gitignore # Project root gitignore
-
Clone the Repository:
git clone https://github.com/Naren456/Async.git cd async -
Backend Setup:
cd Backend npm install- Create a
.envfile based on.env.example(if available) or configure the following environment variables:DATABASE_URL: Your PostgreSQL connection string.JWT_SECRET: A secret key for signing JWTs.CLOUDINARY_CLOUD_NAME,CLOUDINARY_API_KEY,CLOUDINARY_API_SECRET: Credentials for your Cloudinary account.
- Apply database migrations:
npx prisma migrate dev
- (Optional) Seed the database if seed scripts are available:
npx prisma db seed
- Start the development server:
npm run dev
- Create a
-
Frontend Setup:
cd ../Frontend npm install- Configure the backend API URL in
Frontend/api/config.jsor via environment variables if set up that way. - Start the Expo development server:
npx expo start
- Follow the instructions in the terminal to run the app on an emulator, simulator, or physical device using the Expo Go app or a development build.
- Configure the backend API URL in
Using EAS Build (Recommended):
- Install EAS CLI:
npm install -g eas-cli - Login:
eas login - Configure
eas.jsonandapp.json(especiallyandroid.packageand build profiles). - Start build:
cd Frontend && eas build -p android --profile production - Follow prompts (especially for Keystore setup).
- Download the APK from the EAS build details page.
Building Locally:
- Prerequisites: Android Studio, SDK, JDK, Android Keystore.
- Generate native project:
cd Frontend && npx expo prebuild --platform android --clean - Configure signing in
Frontend/android/gradle.propertiesand potentiallyFrontend/android/app/build.gradle. - Build:
cd android && ./gradlew assembleRelease(usegradlew.baton Windows). - Find APK in
Frontend/android/app/build/outputs/apk/release/.












