{"id":29659329,"url":"https://github.com/adityaxanand/mockorbit","last_synced_at":"2026-04-06T01:33:16.201Z","repository":{"id":291491168,"uuid":"977747149","full_name":"adityaxanand/MockOrbit","owner":"adityaxanand","description":"Contribute to this repository and help me to complete this project.","archived":false,"fork":false,"pushed_at":"2025-07-09T16:47:35.000Z","size":707,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-10T01:30:32.755Z","etag":null,"topics":["aws","cicd","docker","gcp","gin","git","golang","interview","jenkins","kubernetes","mock","nextjs","tailwindcss","typescript"],"latest_commit_sha":null,"homepage":"https://mockorbit.duckdns.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adityaxanand.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-04T21:58:06.000Z","updated_at":"2025-07-09T16:47:38.000Z","dependencies_parsed_at":"2025-05-05T01:29:12.147Z","dependency_job_id":"6c844c7e-3d28-4e31-85e7-753b96e7ccd1","html_url":"https://github.com/adityaxanand/MockOrbit","commit_stats":null,"previous_names":["adityaxanand/mockorbit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adityaxanand/MockOrbit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaxanand%2FMockOrbit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaxanand%2FMockOrbit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaxanand%2FMockOrbit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaxanand%2FMockOrbit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adityaxanand","download_url":"https://codeload.github.com/adityaxanand/MockOrbit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaxanand%2FMockOrbit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266463560,"owners_count":23932904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","cicd","docker","gcp","gin","git","golang","interview","jenkins","kubernetes","mock","nextjs","tailwindcss","typescript"],"created_at":"2025-07-22T09:10:38.614Z","updated_at":"2025-12-30T19:11:39.885Z","avatar_url":"https://github.com/adityaxanand.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://github.com/user-attachments/assets/d47cd6ed-e489-4f32-8246-771842cfc243\" alt=\"mockicon\" width=\"50\" height=\"50\"\u003e\n\n# Mock Orbit - A Peer Interviewing Application\n\nMock Orbit is an end-to-end peer interviewing platform designed to simulate real-world interview scenarios through an interactive and scalable interface. It combines a modern Next.js frontend with Tailwind CSS (using CDN integration) with a robust Golang backend, leveraging MongoDB for data storage and authentication. With support for real-time interviews, scheduling, and collaboration, Mock Orbit is built for performance and real-world usability.\n\n---\n\n## Table of Contents\n\n- [Mock Orbit - A Peer Interviewing Application](#mock-orbit---a-peer-interviewing-application)\n  - [Table of Contents](#table-of-contents)\n  - [Overview](#overview)\n  - [Features](#features)\n  - [User Flow Diagram](#user-flow-diagram)\n  - [Tech Stack](#tech-stack)\n    - [Frontend](#frontend)\n    - [Backend](#backend)\n  - [Architecture](#architecture)\n  - [Directory Structure](#directory-structure)\n  - [UML Diagram](#uml-diagram)\n  - [Installation and Local Setup](#installation-and-local-setup)\n    - [Prerequisites](#prerequisites)\n    - [Frontend Setup (Next.js)](#frontend-setup-nextjs)\n    - [Backend Setup (Golang + Gin)](#backend-setup-golang--gin)\n    - [MongoDB Setup](#mongodb-setup)\n  - [API Endpoints](#api-endpoints)\n  - [Sample Credentials](#sample-credentials)\n  - [Deployment \\\u0026 CI/CD](#deployment--cicd)\n  - [Testing \\\u0026 Quality Assurance](#testing--quality-assurance)\n  - [License](#license)\n\n---\n\n## Overview\n\nMock Orbit is built to facilitate immersive and realistic peer interviews. Featuring dual dashboards to cater to both interviewers and interviewees, the platform streamlines interview scheduling, real-time communication, and performance tracking, all while maintaining a secure and scalable architecture.\n\nKey functionalities include:\n- **Real-time Interview Rooms:** Integrated video/audio communication, a collaborative whiteboard, chat, and code editor.\n- **User Management:** Seamless profile creation and management.\n- **Scheduling:** Intuitive calendar-based scheduling with notifications.\n- **Robust Authentication:** Secure user registration, login, and authorization using JWT.\n\n---\n\n## Features\n\n- **Dual Dashboards:**  \n  - **Interviewer Dashboard:** View scheduled interviews, performance stats, and provide feedback.  \n  - **Interviewee Dashboard:** Access upcoming interviews, preparation materials, and interview history.\n- **Real-time Interview Environment:**  \n  - **Video \u0026 Audio Communication:** Powered by WebRTC.\n  - **Collaborative Whiteboard:** Real-time drawing and annotations using the Canvas API.\n  - **Chat System:** Instant messaging with WebSocket integration.\n  - **Code Editor:** Integrated environment for collaborative coding.\n- **Profile Management:** Update personal details, manage roles, and view interview logs.\n- **Scheduling Interface:** Calendar-based interview scheduling with real-time notifications.\n- **Secure API Integration:** Comprehensive RESTful endpoints powered by JWT for protected access.\n\n---\n\n## User Flow Diagram\n![mock-orbit-flowchart](https://github.com/user-attachments/assets/195dc340-69a6-4812-8ff5-1ae9baf482dc)\n\n---\n\n## Tech Stack\n\n### Frontend\n\n- **Framework:** Next.js (Latest version) with TypeScript\n- **Styling:** Tailwind CSS (integrated via CDN)\n- **Routing:** Next.js App Router with server components\n- **State Management:** React Context (or Redux as needed)\n- **Data Fetching:** React Query\n- **Form Handling:** react-hook-form with Zod validation\n\n### Backend\n\n- **Language \u0026 Framework:** Golang with Gin for RESTful API\n- **Real-Time Communication:** WebSockets\n- **Video Signaling:** pion/webrtc for WebRTC-based interactions\n- **Authentication:** JWT with middleware for secure sessions\n- **Database:** MongoDB for storage, pub/sub notifications, and presence tracking\n\n---\n\n## Architecture\n\nThe project is organized with feature-based modules that promote maintainability and scalability. The frontend follows atomic design principles, ensuring that UI components, hooks, and utilities are neatly modularized. The Golang backend embraces clean architecture by separating configuration, database logic, models, handlers, middleware, and routing.\n\n\n![diagram-mockorbit](https://github.com/user-attachments/assets/06048c78-f21a-4c8f-bf99-00cfd99eff79)\n\n---\n\n## Directory Structure\n\n```plaintext\nMockOrbit/\n├── README.md\n├── components.json\n├── next.config.ts\n├── package.json\n├── postcss.config.mjs\n├── tailwind.config.ts\n├── tsconfig.json\n├── .env.example\n├── .modified\n├── backend/\n│   ├── go.mod\n│   ├── go.sum\n│   ├── cmd/\n│   │   └── server/\n│   │       ├── main.go\n│   │       └── .env.example\n│   └── internal/\n│       ├── config/\n│       │   └── config.go\n│       ├── database/\n│       │   └── mongo.go\n│       ├── handlers/\n│       │   ├── auth_handlers.go\n│       │   ├── interview_handlers.go\n│       │   ├── user_handlers.go\n│       │   └── websocket_handler.go\n│       ├── middleware/\n│       │   └── auth.go\n│       ├── models/\n│       │   └── models.go\n│       └── routes/\n│           └── routes.go\n├── docs/\n│   └── blueprint.md\n└── src/\n    ├── ai/\n    │   ├── ai-instance.ts\n    │   └── dev.ts\n    ├── app/\n    │   ├── globals.css\n    │   ├── layout.tsx\n    │   ├── page.tsx\n    │   ├── auth/\n    │   │   ├── login/\n    │   │   │   └── page.tsx\n    │   │   └── register/\n    │   │       └── page.tsx\n    │   ├── dashboard/\n    │   │   ├── interviewee/\n    │   │   │   └── page.tsx\n    │   │   └── interviewer/\n    │   │       └── page.tsx\n    │   ├── interview-room/\n    │   │   └── [id]/\n    │   │       └── page.tsx\n    │   ├── profile/\n    │   │   └── page.tsx\n    │   ├── question-generator/\n    │   │   └── page.tsx\n    │   └── schedule/\n    │       └── page.tsx\n    ├── components/\n    │   ├── shared/\n    │   │   └── AppLayout.tsx\n    │   └── ui/\n    │       ├── accordion.tsx\n    │       ├── alert-dialog.tsx\n    │       ├── alert.tsx\n    │       ├── avatar.tsx\n    │       ├── badge.tsx\n    │       ├── button.tsx\n    │       ├── calendar.tsx\n    │       ├── card.tsx\n    │       ├── chart.tsx\n    │       ├── checkbox.tsx\n    │       ├── dialog.tsx\n    │       ├── dropdown-menu.tsx\n    │       ├── form.tsx\n    │       ├── input.tsx\n    │       ├── label.tsx\n    │       ├── menubar.tsx\n    │       ├── popover.tsx\n    │       ├── progress.tsx\n    │       ├── radio-group.tsx\n    │       ├── scroll-area.tsx\n    │       ├── select.tsx\n    │       ├── separator.tsx\n    │       ├── sheet.tsx\n    │       ├── sidebar.tsx\n    │       ├── skeleton.tsx\n    │       ├── slider.tsx\n    │       ├── switch.tsx\n    │       ├── table.tsx\n    │       ├── tabs.tsx\n    │       ├── textarea.tsx\n    │       ├── toast.tsx\n    │       ├── toaster.tsx\n    │       └── tooltip.tsx\n    ├── hooks/\n    │   ├── use-mobile.tsx\n    │   └── use-toast.ts\n    ├── lib/\n    │   └── utils.ts\n    └── providers/\n        ├── AuthProvider.tsx\n        └── ReactQueryProvider.tsx\n\n```\n\n## UML Diagram\n![mock-orbit-uml](https://github.com/user-attachments/assets/e5733d24-f17f-4da0-a0b8-fc0ffe325b5c)\n\n---\n\n## Installation and Local Setup\n\n### Prerequisites\n\n* **Node.js \u0026 npm/yarn:** For the Next.js frontend.\n* **Go:** Version 1.18+ for running the backend.\n* **MongoDB:** A running MongoDB instance (local or via Docker).\n* **Git:** For source control.\n\n### Frontend Setup (Next.js)\n\n1. **Clone the Repository:**\n\n   ```bash\n   git clone https://github.com/adityaxanand/MockOrbit.git\n   cd MockOrbit\n   ```\n\n2. **Install Dependencies:**\n\n   ```bash\n   npm install\n   # or\n   yarn install\n   ```\n\n3. **Configure Environment Variables:**\n\n   ```bash\n   cp .env.example .env\n   ```\n\n4. **Run the Development Server:**\n\n   ```bash\n   npm run dev\n   # or\n   yarn dev\n   ```\n\n   Access the app at [http://localhost:3000](http://localhost:3000).\n\n### Backend Setup (Golang + Gin)\n\n1. **Navigate to the Backend Directory:**\n\n   ```bash\n   cd backend\n   ```\n\n2. **Install Go Modules:**\n\n   ```bash\n   go mod tidy\n   ```\n\n3. **Configure Environment Variables:**\n\n   ```bash\n   cp cmd/server/.env.example cmd/server/.env\n   ```\n\n   Adjust the MongoDB connection string, port, JWT secrets, and other parameters as needed.\n\n4. **Run the Server:**\n\n   ```bash\n   go run cmd/server/main.go\n   ```\n\n   The server will start (typically on port **8080**). Test with:\n\n   ```bash\n   curl http://localhost:8080/ping\n   ```\n\n### MongoDB Setup\n\n* **Local MongoDB:**\n  Ensure your MongoDB server is running.\n\n* **Docker Option:**\n\n  ```bash\n  docker run --name mockorbit-mongo -p 27017:27017 -d mongo:latest\n  ```\n\n---\n\n## API Endpoints\n\nThe backend exposes several endpoints:\n\n* **Ping:**\n\n  * `GET /ping` – Returns a simple status message.\n\n* **Authentication:**\n\n  * `POST /api/v1/auth/register` – Register a new user.\n  * `POST /api/v1/auth/login` – Login and receive a JWT.\n\n* **User Management (Protected):**\n\n  * `GET /api/v1/users/profile` – Retrieve current user’s profile.\n  * `PATCH /api/v1/users/profile` – Update profile details.\n  * `GET /api/v1/users/peers` – List peer users.\n  * `GET /api/v1/users/:userId/interviews` – Get interviews for a specific user.\n  * `GET /api/v1/users/:userId/stats` – (Interviewer only) Retrieve performance stats.\n\n* **Interview Management (Protected):**\n\n  * `POST /api/v1/interviews` – Schedule a new interview.\n  * `GET /api/v1/interviews/:interviewId` – Get interview details.\n\n* **Utility Endpoints (Protected):**\n\n  * `GET /api/v1/topics` – Retrieve available topics.\n  * `GET /api/v1/availability` – Get available interview slots.\n\n* **Real-Time Communication:**\n\n  * `GET /ws` – WebSocket endpoint for chat and collaboration.\n\nRemember to include your JWT in the request headers when accessing protected routes.\n\n---\n\n## Sample Credentials\n\nUse these credentials for testing:\n\n* **Interviewer:**\n\n  * **Email:** `interviewer@mockorbit.com`\n  * **Password:** `interview123`\n\n* **Interviewee:**\n\n  * **Email:** `interviewee@mockorbit.com`\n  * **Password:** `interview123`\n\n*These are demo credentials; please update them in a production environment.*\n\n---\n\n## Deployment \u0026 CI/CD\n\n* **Frontend:**\n  Deployed on [Vercel](https://vercel.com/).\n\n* **Backend:**\n  Containerized using Docker and deployed on your chosen cloud provider.\n  Use CI/CD pipelines (GitHub Actions, GitLab CI, etc.) for automated testing, building, and deployment.\n\n---\n\n## Testing \u0026 Quality Assurance\n\n* **Frontend Testing:**\n  Use Jest and React Testing Library for unit and integration tests.\n* **Backend Testing:**\n  Write unit tests for API endpoints and middleware.\n* **Monitoring:**\n  Implement logging, error tracking, and health checks to monitor application status.\n\n---\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\nHappy Interviewing!\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityaxanand%2Fmockorbit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadityaxanand%2Fmockorbit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityaxanand%2Fmockorbit/lists"}