A comprehensive academic service platform built with React and Appwrite, designed for managing assignments, submissions, grading, and client-administrator workflows with secure cloud storage and real-time updates.
- Secure User Authentication using Appwrite Auth
- Role-based Access Control (RBAC)
Client- Can view dashboard, submit work, contact adminsAdmin- Full system access, manage orders, view all submissions
- Client Dashboard - Track assignments, view submission status, submit work
- Admin Dashboard - Overview of all orders, submissions, user management with analytics
- Create and manage academic orders/assignments
- Track order status through workflow: Pending β In Progress β Revision β Completed β Approved
- Attach resource files to orders
- Set and manage deadlines
- File upload for assignments
- Real-time submission tracking
- Grade submissions with feedback
- Status management: Submitted, Approved, Rejected, Graded
- Contact form for public inquiries
- Internal messaging system for authenticated users
- Direct communication between clients and admins
- AES-256 secure file storage via Appwrite Storage
- Role-based document permissions
- Session management
- Frontend: React 19.2.0
- Build Tool: Vite 6.2.0
- Language: TypeScript 5.8.2
- Backend: Appwrite 21.4.0 (Self-hosted or Cloud)
- Routing: React Router DOM 7.9.6
- Charts: Recharts 3.5.0
- Analytics: @vercel/analytics 1.6.1
AcademicFlow/
βββ App.tsx # Main app with routing configuration
βββ index.tsx # Entry point
βββ constants.ts # Appwrite config & enums
βββ types.ts # TypeScript interfaces
βββ vite.config.ts # Vite configuration
βββ package.json # Dependencies
β
βββ components/ # Reusable UI components
β βββ Button.tsx # Custom button component
β βββ Footer.tsx # Site footer
β βββ Input.tsx # Form input component
β βββ Navbar.tsx # Navigation bar
β βββ OrderCard.tsx # Order display card
β βββ PrivateRoute.tsx # Route protection wrapper
β
βββ context/ # React Context providers
β βββ AuthContext.tsx # Authentication state management
β
βββ layouts/ # Page layouts
β βββ MainLayout.tsx # Main layout with Navbar/Footer
β
βββ pages/ # Application pages
β βββ Home.tsx # Landing page
β βββ Login.tsx # User login
β βββ Signup.tsx # User registration
β βββ ClientDashboard.tsx # Client view dashboard
β βββ AdminDashboard.tsx # Admin view dashboard
β βββ PlaceOrder.tsx # Create new order (Admin)
β βββ Contact.tsx # Contact form (Authenticated)
β βββ ContactPublic.tsx # Public contact page
β βββ PrivacyPolicy.tsx # Privacy policy
β βββ TermsOfService.tsx # Terms of service
β
βββ services/ # Backend services
βββ appwrite.ts # Appwrite API calls & helpers
Create a .env file in the root directory with the following variables:
VITE_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
VITE_APPWRITE_PROJECT_ID=your-project-id
VITE_APPWRITE_DATABASE_ID=your-database-id
VITE_APPWRITE_USERS_COLLECTION_ID=your-users-collection-id
VITE_APPWRITE_ORDERS_COLLECTION_ID=your-orders-collection-id
VITE_APPWRITE_SUBMISSIONS_COLLECTION_ID=your-submissions-collection-id
VITE_APPWRITE_MESSAGES_COLLECTION_ID=your-messages-collection-id
VITE_APPWRITE_BUCKET_ID=your-storage-bucket-idCreate the following collections in your Appwrite database:
-
Users Collection
name(string)email(string)role(enum: "client", "admin")createdAt(datetime)
-
Orders Collection
userId(string) - Admin who createdtitle(string)description(string)deadline(datetime)fileId(string, optional)status(enum: "pending", "in-progress", "revision", "completed", "approved")createdAt(datetime)
-
Submissions Collection
assignmentId(string)studentId(string)fileId(string)notes(string, optional)submittedAt(datetime)status(enum: "submitted", "approved", "rejected", "graded")grade(string, optional)
-
Messages Collection
senderId(string)senderName(string)subject(string)content(string)sentAt(datetime)
- Node.js 18+
- npm or yarn
- Appwrite instance (local or cloud)
- Clone the repository:
git clone <repository-url>
cd AcademicFlow- Install dependencies:
npm install-
Configure environment variables (see Configuration above)
-
Start the development server:
npm run dev- Open http://localhost:5173 in your browser
npm run buildThe build output will be in the dist directory.
| Route | Description | Access |
|---|---|---|
/ |
Home/Landing page | Public |
/login |
Login page | Public |
/signup |
Registration page | Public |
/privacy |
Privacy policy | Public |
/terms |
Terms of service | Public |
/contact-us |
Public contact form | Public |
/dashboard |
User dashboard | Authenticated |
/contact |
Internal contact form | Authenticated |
/admin |
Admin dashboard | Admin only |
/place-order |
Create new order | Admin only |
- Session-based Authentication using Appwrite
- Role-based Route Protection via PrivateRoute component
- Document-level Permissions in Appwrite
- Secure File Storage with Appwrite Storage
- HTTPS enforced in production
βββββββββββ βββββββββββββββ ββββββββββββ βββββββββββββ βββββββββββ
β Pending β β β In Progress β β β Revision β β β Completed β β β Approvedβ
βββββββββββ βββββββββββββββ ββββββββββββ βββββββββββββ βββββββββββ
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you find this project helpful and would like to support its development, consider buying me a coffee! Your support helps keep the project alive and encourages continued development.
Become a sponsor and get your logo here, early access to features, and priority support!
Thank you for your support! π