A comprehensive platform connecting students with internship opportunities, featuring application tracking, messaging, and analytics for students, companies, and administrators.
- backend/: Express.js REST API server
- frontend/: Next.js web application
- mobile/: Flutter student mobile application
- system_Architecture: System architecture documentation
- TEST_CREDENTIALS.md: Test credentials documentation
- TRACK_TASKS.md: Task tracking documentation
- PASSWORD_RESET_FEATURE.md: Complete password reset documentation
- PASSWORD_RESET_QUICKSTART.md: Quick start guide for password reset
- Runtime: Node.js
- Framework: Express.js
- Database: MongoDB (Mongoose)
- Authentication: JWT + HTTP-only cookies
- Validation: Zod
- Security: Helmet, CORS, Rate Limiting
- File Uploads: Cloudflare R2 (via AWS SDK)
This project uses GitHub Actions for continuous integration.
- Framework: Next.js
- Language: TypeScript
- Styling: Tailwind CSS (assumed from postcss.config.mjs)
- UI Components: Custom components with shadcn/ui (from components.json)
- Framework: Flutter
- Language: Dart
- Navigation: go_router
- State Management: flutter_riverpod
- Recommended
--dart-definevalues:API_BASE_URL(defaults to Render URL if omitted)SOCKET_BASE_URL(defaults to Render URL if omitted)FRONTEND_BASE_URL(used for shared internship links)GOOGLE_SERVER_CLIENT_ID(Google OAuth Web client ID, required for Google Sign-In ID token)MOBILE_DEEP_LINK_BASE(defaults toacadintern://authif omitted)
Example local run:
flutter run \
--dart-define=API_BASE_URL=https://your-render-backend.onrender.com/api \
--dart-define=SOCKET_BASE_URL=https://your-render-backend.onrender.com \
--dart-define=FRONTEND_BASE_URL=https://acadintern.mathi.live \
--dart-define=GOOGLE_SERVER_CLIENT_ID=your-web-client-id.apps.googleusercontent.com \
--dart-define=MOBILE_DEEP_LINK_BASE=acadintern://authRecommended for team workflows:
cp env.example.json env.local.json
flutter run --dart-define-from-file=env.local.json
flutter build apk --release --dart-define-from-file=env.local.json- Uploads are backend-mediated through
/api/upload. - Session auth uses bearer tokens stored in secure storage.
- Rotated bearer tokens are read from the
X-Auth-Tokenresponse header. - Android and iOS wrappers are already generated in this folder.
- For push notifications and Google sign-in native setup, see
mobile/FIREBASE_SETUP.md. - Keep
env.local.jsonlocal (ignored in git).
- Android app links are configured for:
https://acadintern.mathi.livehttps://acadintern.in
- iOS associated domains are configured for the same domains in
Runner.entitlements. - Your web domain must host platform association files for verification:
https://<domain>/.well-known/assetlinks.json(Android)https://<domain>/.well-known/apple-app-site-association(iOS)
You can customize the launch screen with your own desired assets by replacing the image files in mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset.
Or open the Flutter Xcode workspace with open ios/Runner.xcworkspace, select Runner/Assets.xcassets in the Project Navigator and drop in the desired images.
- Node.js (v18 or higher)
- MongoDB Atlas account
- Cloudflare R2 account (for file uploads)
- Clone the repository:
git clone <repository-url>
cd AcadIntern- Install dependencies for both backend and frontend:
npm install
cd backend && npm install && cd ..
cd frontend && npm install && cd ..
cd mobile && flutter pub get && cd ..- Navigate to backend directory:
cd backend- Create
.envfile:
cp .env.example .env-
Update
.envwith your credentials:- MongoDB Atlas connection string
- JWT secret key
- Cloudflare R2 credentials (account ID, access key, secret, bucket name, public URL)
-
Run development server:
npm run devThe backend server will start on http://localhost:5000 (or configured port).
- Navigate to frontend directory:
cd frontend- Run development server:
npm run devOpen http://localhost:3000 with your browser to see the application.
- Navigate to mobile directory:
cd mobile- Install Flutter dependencies:
flutter pub get- Run on Android emulator/device:
flutter run \
--dart-define=API_BASE_URL=http://10.0.2.2:5000/api \
--dart-define=SOCKET_BASE_URL=http://10.0.2.2:5000 \
--dart-define=GOOGLE_CLIENT_ID_ANDROID=<google-client-id> \
--dart-define=MOBILE_DEEP_LINK_BASE=acadintern://auth- For Firebase native files and push setup, see
mobile/FIREBASE_SETUP.md.
POST /api/auth/signup- Register new userPOST /api/auth/login- Login userGET /api/auth/me- Get current userPOST /api/auth/logout- Logout userPOST /api/auth/forgot-password- Request password resetGET /api/auth/reset-password/:token- Verify reset tokenPOST /api/auth/reset-password/:token- Reset password
GET /api/internships- List internshipsPOST /api/internships- Create internship (company)PUT /api/internships/:id- Update internshipDELETE /api/internships/:id- Delete internship
POST /api/internships/:id/apply- Apply to internshipGET /api/applications/my- Get my applicationsPATCH /api/applications/:id/status- Update application status
- Companies, Messages, Notifications, Reports, Students, Admin routes available
cd backend
npm testcd frontend
npm run build- Fork the repository
- Create a feature branch
- Make your changes
- Run tests
- Submit a pull request
This project is licensed under the MIT License.