├── Frontend
├── src
│ ├── pages
│ │ ├── FAQ.jsx
│ │ ├── LogoShowcase.jsx
│ │ ├── LogoShowcase.css
│ │ ├── CodeMetrics.jsx
│ │ ├── CodeGenerator.jsx
│ │ ├── CodeComplexity.jsx
│ │ ├── NotFound.jsx
│ │ ├── notFound.jsx
│ │ ├── CodeOptimizer.jsx
│ │ ├── AiInsights.jsx
│ │ └── DependencyScanner.jsx
│ ├── components
│ │ ├── PageLoaderWrapper.jsx
│ │ ├── ScrollToTop.jsx
│ │ ├── CodeExamples.jsx
│ │ ├── BackToTopButton.jsx
│ │ ├── AIDemo.jsx
│ │ ├── css
│ │ │ ├── NavBar.css
│ │ │ ├── Loader.css
│ │ │ └── Chatbot.css
│ │ ├── LoaderHandle.jsx
│ │ ├── AiNetworkHero.jsx
│ │ ├── FeedbackButton.jsx
│ │ ├── FeedbackForm.jsx
│ │ ├── TextInput.jsx
│ │ ├── CodeHistory.jsx
│ │ ├── ChatComponent.jsx
│ │ ├── YouTubeInput.jsx
│ │ ├── SummaryDisplay.jsx
│ │ ├── MediaUploader.jsx
│ │ ├── Chatbot.jsx
│ │ └── Footer.jsx
│ ├── main.jsx
│ ├── utils
│ │ ├── scrollbar.js
│ │ └── mobileUtils.js
│ ├── store
│ │ └── auth.jsx
│ ├── App.css
│ ├── context
│ │ └── ThemeContext.jsx
│ ├── index.css
│ ├── styles
│ │ └── glassmorphism.css
│ └── App.jsx
├── netlify.toml
├── public
│ ├── bulb.png
│ ├── send.png
│ ├── gssoc logo.png
│ ├── close_small_24dp_FFFFFF_FILL0_wght400_GRAD0_opsz24.png
│ ├── omex-logo-mono.svg
│ ├── omex-logo-white.svg
│ ├── omex-favicon.svg
│ ├── omex-icon.svg
│ ├── omex-logo.svg
│ ├── omex-text-logo-white.svg
│ ├── omex-text-logo.svg
│ ├── vite.svg
│ ├── omex-logo-transparent.svg
│ ├── README-logo.md
│ └── logo-guidelines.md
├── .env.example
├── .gitignore
├── vite.config.js
├── README.md
├── eslint.config.js
├── package.json
├── index.html
└── MOBILE_TOUCH_FIX_PR.md
├── .gitignore
├── .DS_Store
├── BackEnd
├── eng.traineddata
├── server.js
├── .env.example
├── package.json
└── src
│ ├── app.js
│ ├── routes
│ ├── ai.routes.js
│ └── media.routes.js
│ ├── index.html
│ └── controllers
│ ├── ai.controller.js
│ └── media.controller.js
├── c
└── omex-logo.svg
├── package.json
├── .github
├── workflows
│ ├── pr-create-automate-message.yml
│ └── issue-create-automate-message.yml
├── ISSUE_TEMPLATE
│ ├── feature_request.md
│ ├── style_enhencement.md
│ └── bug_report.md
└── PULL_REQUEST_TEMPLATE.md
├── License
├── npm-debug.log
├── CONTRIBUTING.md
├── MOBILE_TOUCH_FIX_DOCUMENTATION.md
└── ✨ Contributor Covenant Code of Conduct — GSSoC ✨.md
/Frontend/src/pages/FAQ.jsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Frontend/src/components/PageLoaderWrapper.jsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .env
3 | future_scope.txt
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Roshansuthar1105/Omex/HEAD/.DS_Store
--------------------------------------------------------------------------------
/Frontend/netlify.toml:
--------------------------------------------------------------------------------
1 | [[redirects]]
2 | from = "/*"
3 | to = "/index.html"
4 | status = 200
5 |
--------------------------------------------------------------------------------
/BackEnd/eng.traineddata:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Roshansuthar1105/Omex/HEAD/BackEnd/eng.traineddata
--------------------------------------------------------------------------------
/Frontend/public/bulb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Roshansuthar1105/Omex/HEAD/Frontend/public/bulb.png
--------------------------------------------------------------------------------
/Frontend/public/send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Roshansuthar1105/Omex/HEAD/Frontend/public/send.png
--------------------------------------------------------------------------------
/Frontend/public/gssoc logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Roshansuthar1105/Omex/HEAD/Frontend/public/gssoc logo.png
--------------------------------------------------------------------------------
/Frontend/.env.example:
--------------------------------------------------------------------------------
1 | VITE_BACKEND_URL="https://ai-code-optimisation.onrender.com"
2 | VITE_BACKEND_URL="http://localhost:5050"
3 | VITE_OPENAI_KEY="sk-your-openAi-key"
4 |
5 |
--------------------------------------------------------------------------------
/Frontend/public/close_small_24dp_FFFFFF_FILL0_wght400_GRAD0_opsz24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Roshansuthar1105/Omex/HEAD/Frontend/public/close_small_24dp_FFFFFF_FILL0_wght400_GRAD0_opsz24.png
--------------------------------------------------------------------------------
/BackEnd/server.js:
--------------------------------------------------------------------------------
1 | require('dotenv').config()
2 | const app = require('./src/app')
3 | app.listen(process.env.PORT, () => {
4 | console.log(`Server is running on http://localhost:${process.env.PORT}`)
5 | })
--------------------------------------------------------------------------------
/BackEnd/.env.example:
--------------------------------------------------------------------------------
1 | GOOGLE_GEMINI_KEY="AIzaSyCGr2Y4ZHAoY_gwY79UpLZBsWVhCC1B7cE"
2 | PORT=5050 #Check ports if not working!
3 | # for development
4 | FRONT_END_URL="http://localhost:3000"
5 | # for deployment
6 | FRONT_END_URL="https://omexai.netlify.app/"
7 |
--------------------------------------------------------------------------------
/Frontend/src/main.jsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from 'react'
2 | import { createRoot } from 'react-dom/client'
3 | import './index.css'
4 | import App from './App.jsx'
5 |
6 | createRoot(document.getElementById('root')).render(
7 |
8 |
9 |
10 | )
11 |
--------------------------------------------------------------------------------
/Frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 | .env
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | future_scope.txt
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/Frontend/src/components/ScrollToTop.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from "react";
2 | import { useLocation } from "react-router-dom";
3 |
4 | export default function ScrollToTop() {
5 | const { pathname } = useLocation();
6 |
7 | useEffect(() => {
8 | window.scrollTo({
9 | top: 0,
10 | left: 0,
11 | behavior: "instant", // change to "smooth" for animation
12 | });
13 | }, [pathname]);
14 |
15 | return null;
16 | }
17 |
--------------------------------------------------------------------------------
/Frontend/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 | import tailwindcss from '@tailwindcss/vite'
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [tailwindcss(),react()],
7 | resolve: {
8 | alias: {
9 | path: "path-browserify",
10 | },
11 | },
12 | server: {
13 | proxy: {
14 | "/api": "http://localhost:5000"
15 | }
16 | }
17 | })
18 |
--------------------------------------------------------------------------------
/Frontend/README.md:
--------------------------------------------------------------------------------
1 | # React + Vite
2 |
3 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4 |
5 | Currently, two official plugins are available:
6 |
7 | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
8 | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
9 |
--------------------------------------------------------------------------------
/c/omex-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/BackEnd/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backend",
3 | "version": "1.0.0",
4 | "main": "server.js",
5 | "scripts": {
6 | "test": "echo \"Error: no test specified\" && exit 1",
7 | "start": "node server.js",
8 | "server": "nodemon server.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "description": "",
14 | "dependencies": {
15 | "@google/generative-ai": "^0.21.0",
16 | "axios": "^1.6.7",
17 | "cors": "^2.8.5",
18 | "dotenv": "^16.6.1",
19 | "express": "^4.21.2",
20 | "multer": "^1.4.5-lts.1",
21 | "nodemon": "^3.1.9",
22 | "pdf-parse": "^1.1.1",
23 | "tesseract.js": "^5.0.5"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Frontend/src/utils/scrollbar.js:
--------------------------------------------------------------------------------
1 | let scrollbarTimeout;
2 | const scrollContainer = document.body;
3 |
4 | function showScrollbar() {
5 | scrollContainer.classList.add("show-scrollbar");
6 | clearTimeout(scrollbarTimeout);
7 | scrollbarTimeout = setTimeout(() => {
8 | scrollContainer.classList.remove("show-scrollbar");
9 | }, 2000); // Hide after 2s
10 | }
11 |
12 | // Show only when scrolling
13 | window.addEventListener("scroll", showScrollbar);
14 |
15 | // Show when mouse is near right edge (20px zone)
16 | window.addEventListener("mousemove", (e) => {
17 | const nearRightEdge = window.innerWidth - e.clientX < 20;
18 | if (nearRightEdge) {
19 | showScrollbar();
20 | }
21 | });
22 |
--------------------------------------------------------------------------------
/Frontend/public/omex-logo-mono.svg:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/Frontend/public/omex-logo-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/Frontend/src/pages/LogoShowcase.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useTheme } from "../context/ThemeContext";
3 | import "./LogoShowcase.css";
4 |
5 | const LogoShowcase = () => {
6 | const { isDark } = useTheme();
7 | return (
8 |
9 |

14 |
Welcome to the Omex Logo Showcase
15 |
This page demonstrates the animated, theme-adaptive Omex logo. Try switching between light and dark mode!
16 |
17 | );
18 | };
19 |
20 | export default LogoShowcase;
21 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "code-review",
3 | "version": "1.0.0",
4 | "description": "��#\u0000 \u0000A\u0000i\u0000-\u0000c\u0000o\u0000d\u0000e\u0000-\u0000o\u0000p\u0000t\u0000i\u0000m\u0000i\u0000s\u0000a\u0000t\u0000i\u0000o\u0000n\u0000\r\u0000 \u0000",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "frontend": "cd ./Frontend && npm run dev",
9 | "backend": "cd ./BackEnd && npm run server",
10 | "dev": "npm run frontend && npm run backend"
11 | },
12 | "keywords": [],
13 | "author": "",
14 | "license": "ISC",
15 | "dependencies": {
16 | "@emailjs/browser": "^4.4.1",
17 | "framer-motion": "^12.23.12",
18 | "react-icons": "^5.5.0"
19 | },
20 | "devDependencies": {
21 | "vite": "^7.1.5"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/BackEnd/src/app.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const cors = require('cors');
3 | const path = require('path');
4 | const aiRoutes = require('./routes/ai.routes');
5 | const mediaRoutes = require('./routes/media.routes');
6 |
7 | const app = express();
8 |
9 | // Middleware
10 | app.use(cors());
11 | app.use(express.json());
12 |
13 | // Static files
14 | app.use('/uploads', express.static(path.join(__dirname, '..', 'uploads')));
15 |
16 | // Routes
17 | app.get('/', (req, res) => {
18 | res.sendFile(__dirname + '/index.html');
19 | });
20 |
21 | app.use('/ai', aiRoutes); // -> /ai/code-metrics-analyzer
22 | app.use('/media', mediaRoutes); // -> /media/...
23 | // Using the same /ai prefix for consistency
24 |
25 | // Error handling middleware
26 | app.use((err, req, res, next) => {
27 | console.error(err.stack);
28 | res.status(500).send('Something broke!');
29 | });
30 |
31 | module.exports = app;
--------------------------------------------------------------------------------
/BackEnd/src/routes/ai.routes.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const aiController = require("../controllers/ai.controller")
3 |
4 | const router = express.Router();
5 |
6 | router.post("/get-review", aiController.getReview)
7 | router.post("/get-code", aiController.getCode)
8 | router.post("/get-complexity", aiController.getComplexity)
9 | router.post("/compare-code", aiController.compareCode)
10 |
11 | // New routes for code tools
12 | router.post("/generate-test-cases", aiController.getTestCases)
13 | router.post("/beautify-code", aiController.beautifyCode)
14 | router.post("/debug-code", aiController.debugCode)
15 | router.post("/analyze-performance", aiController.analyzePerformance)
16 | router.post("/analyze-security", aiController.analyzeSecurity);
17 | router.post("/dependency-scanner", aiController.scanDependencies);
18 | router.post("/code-metrics-analyzer", aiController.codeMetricsAnalyzer);
19 | router.post("/explain-code", aiController.explainCode);
20 |
21 |
22 | module.exports = router;
--------------------------------------------------------------------------------
/.github/workflows/pr-create-automate-message.yml:
--------------------------------------------------------------------------------
1 | name: Auto Comment on PR
2 |
3 | on:
4 | pull_request_target:
5 | types: [opened]
6 |
7 | permissions:
8 | issues: write
9 | pull-requests: write
10 |
11 | jobs:
12 | comment:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Comment on PR
16 | uses: actions/github-script@v6
17 | with:
18 | script: |
19 | const prNumber = context.issue.number;
20 |
21 | const commentBody = `### Thanks for creating a PR for your Issue! ☺️\n\nWe'll review it as soon as possible.\nIn the meantime, please double-check the **file changes** and ensure that **all commits** are accurate.\n\nIf there are any **unresolved review comments**, feel free to resolve them. Thank you. @Roshansuthar1105 🙌🏼`;
22 |
23 | await github.rest.issues.createComment({
24 | owner: context.repo.owner,
25 | repo: context.repo.repo,
26 | issue_number: prNumber,
27 | body: commentBody
28 | });
29 |
30 | console.log('Comment added successfully.');
--------------------------------------------------------------------------------
/Frontend/src/store/auth.jsx:
--------------------------------------------------------------------------------
1 | // Frontend/src/store/auth.jsx
2 |
3 | import React, { createContext, useContext, useState } from 'react';
4 |
5 | // Create AuthContext
6 | const AuthContext = createContext();
7 |
8 | // Create URLContext
9 | const URLContext = createContext();
10 |
11 | // AuthProvider component
12 | export const AuthProvider = ({ children }) => {
13 | const [auth, setAuth] = useState(null); // Manage authentication state
14 |
15 | return (
16 |
17 | {children}
18 |
19 | );
20 | };
21 |
22 | // URLProvider component
23 | export const URLProvider = ({ children }) => {
24 | const [url, setUrl] = useState(''); // Manage URL state
25 |
26 | return (
27 |
28 | {children}
29 |
30 | );
31 | };
32 |
33 | // Custom hooks to use the contexts
34 | export const useAuth = () => useContext(AuthContext);
35 | export const useURL = () => useContext(URLContext);
36 |
37 | // ... existing code ...
--------------------------------------------------------------------------------
/Frontend/public/omex-favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
26 |
--------------------------------------------------------------------------------
/.github/workflows/issue-create-automate-message.yml:
--------------------------------------------------------------------------------
1 | name: Auto Comment on Issue
2 |
3 | on:
4 | issues:
5 | types: [opened]
6 |
7 | permissions:
8 | issues: write
9 |
10 | jobs:
11 | comment:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Add Comment to Issue
15 | uses: actions/github-script@v6
16 | with:
17 | script: |
18 | const issueNumber = context.issue.number;
19 | const commentBody = `### Thank you for raising this issue!\n We'll review it as soon as possible. We truly appreciate your contributions! ✨\n\n> Meanwhile make sure you've visited the README.md, CONTRIBUTING.md, and CODE_OF_CONDUCT.md before creating a PR for this. Also, please do NOT create a PR until this issue has been assigned to you. Thank you @Roshansuthar1105 😊`;
20 |
21 | await github.rest.issues.createComment({
22 | owner: context.repo.owner,
23 | repo: context.repo.repo,
24 | issue_number: issueNumber,
25 | body: commentBody
26 | });
27 |
28 | console.log('Comment added successfully.');
--------------------------------------------------------------------------------
/License:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 | Copyright © 2025 Roshansuthar1105
3 |
4 |
5 |
6 |
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9 |
10 |
11 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12 |
13 |
14 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 |
--------------------------------------------------------------------------------
/Frontend/public/omex-icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
26 |
--------------------------------------------------------------------------------
/Frontend/public/omex-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
26 |
--------------------------------------------------------------------------------
/Frontend/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js'
2 | import globals from 'globals'
3 | import react from 'eslint-plugin-react'
4 | import reactHooks from 'eslint-plugin-react-hooks'
5 | import reactRefresh from 'eslint-plugin-react-refresh'
6 |
7 | export default [
8 | { ignores: ['dist'] },
9 | {
10 | files: ['**/*.{js,jsx}'],
11 | languageOptions: {
12 | ecmaVersion: 2020,
13 | globals: globals.browser,
14 | parserOptions: {
15 | ecmaVersion: 'latest',
16 | ecmaFeatures: { jsx: true },
17 | sourceType: 'module',
18 | },
19 | },
20 | settings: { react: { version: '18.3' } },
21 | plugins: {
22 | react,
23 | 'react-hooks': reactHooks,
24 | 'react-refresh': reactRefresh,
25 | },
26 | rules: {
27 | ...js.configs.recommended.rules,
28 | ...react.configs.recommended.rules,
29 | ...react.configs['jsx-runtime'].rules,
30 | ...reactHooks.configs.recommended.rules,
31 | 'react/jsx-no-target-blank': 'off',
32 | 'react-refresh/only-export-components': [
33 | 'warn',
34 | { allowConstantExport: true },
35 | ],
36 | },
37 | },
38 | ]
39 |
--------------------------------------------------------------------------------
/Frontend/src/pages/LogoShowcase.css:
--------------------------------------------------------------------------------
1 | .logo-showcase-container {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | justify-content: center;
6 | min-height: 70vh;
7 | background: transparent;
8 | }
9 |
10 | .logo-animated {
11 | height: 200px;
12 | width: auto;
13 | margin-bottom: 24px;
14 | animation: logo-bounce 2s infinite alternate cubic-bezier(0.68, -0.55, 0.27, 1.55);
15 | filter: drop-shadow(0 4px 16px rgba(0,0,0,0.12));
16 | transition: filter 0.3s;
17 | }
18 |
19 | .logo-animated:hover {
20 | filter: drop-shadow(0 8px 32px rgba(0,0,0,0.18));
21 | animation-play-state: paused;
22 | }
23 |
24 | @keyframes logo-bounce {
25 | 0% {
26 | transform: translateY(0) scale(1);
27 | }
28 | 60% {
29 | transform: translateY(-18px) scale(1.08);
30 | }
31 | 100% {
32 | transform: translateY(-8px) scale(1.04);
33 | }
34 | }
35 |
36 | .logo-title {
37 | font-size: 2rem;
38 | font-weight: bold;
39 | margin-bottom: 12px;
40 | color: var(--logo-title-color, #2563eb);
41 | text-align: center;
42 | }
43 |
44 | .logo-desc {
45 | font-size: 1.1rem;
46 | color: #666;
47 | max-width: 420px;
48 | text-align: center;
49 | }
50 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "✨ Feature Request"
3 | about: Suggest an idea for Codify
4 | title: "Feat: [Brief Description]"
5 | labels: "enhancement"
6 | assignees: ""
7 | ---
8 |
9 | ## 🚀 Is your feature request related to a problem?
10 |
11 | - Problem: [Describe the pain point]
12 |
13 | ## 💡 Proposed Solution
14 |
15 | - Solution: [Detailed description]
16 | - Technical Notes (optional): [API changes, database needs, etc.]
17 |
18 | ## 🔍 Alternatives Considered
19 |
20 | 1. Alternative A: [Description + why it's less ideal]
21 | 2. Alternative B: [Description + why it's less ideal]
22 |
23 | ## 📐 Mockups & Examples
24 |
25 | - [ ] Attach sketch/Screenshot
26 | - [ ] Link to similar features in other apps
27 |
28 | ## 🧩 Potential Impact
29 |
30 | - Target Users: [Students/Teachers/Admins]
31 | - Value: [Time saved, improved UX, etc.]
32 |
33 | ## 🌱 Additional Context
34 |
35 | - Related Features: #[issue_number]
36 | - Technical Constraints: [If known]
37 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/style_enhencement.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "🎨 Style Enhancement"
3 | about: Suggest UI/UX or design improvements for Codify (MERN + TailwindCSS )
4 | title: "Style: [Brief Description]"
5 | labels: "style enhencement"
6 | assignees: ""
7 | ---
8 |
9 | ## ✨ Current Style Issue
10 |
11 | - Problem: [Describe the UI/UX or styling issue]
12 |
13 | ## 💡 Proposed Style Changes
14 |
15 | - Suggested Change: [Typography, spacing, colors, etc.]
16 | - Technical Notes (optional): [Tailwind classes, JSX components, responsive breakpoints]
17 | - add example (optional)
18 |
19 | ## 🔍 Alternatives Considered
20 |
21 |
22 |
23 | ## 📐 Mockups & Visual References
24 |
25 | - [ ] Attach Figma/Sketch/Screenshot
26 | - [ ] Link to similar UI in other apps
27 |
28 | ## 🧩 Impact on UI/UX
29 |
30 | - Value: [Better readability, smoother navigation, accessibility improvements]
31 |
32 | ## 🌱 Additional Context
33 |
34 | - Related Components: #[issue_number]
35 | - Technical Constraints: [Browser compatibility, Tailwind config, etc.]
36 |
--------------------------------------------------------------------------------
/Frontend/src/pages/CodeMetrics.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import CodeMetricsAnalyzer from "../components/CodeMetricsAnalyzer";
3 | import Loader from "../components/Loader";
4 |
5 | export default function CodeMetrics() {
6 |
7 | const [scanning, setScanning] = useState(false);
8 | if (loading) {
9 | return (
10 |
15 | {/* */}
21 |
22 | );
23 | }
24 |
25 | return (
26 |
27 |
28 | OMEX - Code Metrics Analyzer
29 |
30 |
31 |
34 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/Frontend/public/omex-text-logo-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
29 |
--------------------------------------------------------------------------------
/Frontend/src/pages/CodeGenerator.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { useState, useEffect } from 'react';
3 | import CodeEditor from '../components/CodeEditor'
4 | import Loader from '../components/Loader'
5 | import FeedbackButton from '../components/FeedbackButton'
6 | import { useTheme } from '../context/ThemeContext';
7 |
8 |
9 | function CodeGenerator() {
10 | const { isDark } = useTheme();
11 |
12 | const [loading, setLoading] = useState(true);
13 | const URL=`${import.meta.env.VITE_BACKEND_URL}/ai/get-code`
14 | const prompt=`write a c++ code to find factorial of a given number`
15 | useEffect(() => {
16 | const timer = setTimeout(() => {
17 | setLoading(false);
18 | window.scrollTo(0, 0);
19 | }, 1500);
20 | return () => clearTimeout(timer);
21 | }, []);
22 | if (loading) {
23 | return (
24 |
25 | {/* */}
26 |
27 | );
28 | }
29 | return (
30 | <>
31 |
32 |
33 |
34 |
35 | {/* Feedback Button */}
36 |
37 | >
38 | )
39 | }
40 | // Omex
41 | export default CodeGenerator
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "📦 Pull Request"
3 | about: Submit changes for review
4 | title: "PR: [Brief Description]"
5 | labels: ""
6 | assignees: ""
7 | ---
8 |
9 | ## 📌 Linked Issue
10 |
11 | - [ ] Connected to #issue_number
12 | ---
13 |
14 | ## 🛠 Changes Made
15 |
16 | - Added: [Description]
17 | - Fixed: [Description]
18 | - Updated: [Description]
19 |
20 | ---
21 | ## 🧪 Testing
22 |
23 | - [ ] Ran unit tests (`npm test`)
24 | - [ ] Tested manually (describe below):
25 | - Test case 1: [Steps + Expected Result]
26 | - Test case 2: [Steps + Expected Result]
27 |
28 | ---
29 | ## 📸 UI Changes (if applicable)
30 |
31 | | Before | After |
32 | |--------|-------|
33 | | [Image] | [Image] |
34 |
35 | ---
36 | ## 📝 Documentation Updates
37 | - [ ] Updated README/docs
38 | - [ ] Added code comments
39 | ---
40 |
41 | ## ✅ Checklist
42 | - [ ] Created a new branch for PR
43 | - [ ] Have stared the repository
44 | - [ ] Follows [JavaScript Styleguide](CONTRIBUTING.md#javascript-styleguide)
45 | - [ ] No console warnings/errors
46 | - [ ] Commit messages follow [Git Guidelines](CONTRIBUTING.md#git-commit-messages)
47 |
48 | ## 💡 Additional Notes (If any)
49 |
50 |
--------------------------------------------------------------------------------
/Frontend/public/omex-text-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
32 |
--------------------------------------------------------------------------------
/Frontend/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Frontend/src/App.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss";
2 | @keyframes typing {
3 | from { width: 0 }
4 | to { width: 100% }
5 | }
6 |
7 | @keyframes blink {
8 | 0%, 100% { border-color: transparent }
9 | 50% { border-color: currentColor }
10 | }
11 |
12 | @keyframes hideCursor {
13 | to { border-color: transparent }
14 | }
15 |
16 |
17 | /* * {
18 | margin: 0%;
19 | padding: 0%;
20 | box-sizing: border-box;
21 | }
22 |
23 | html,
24 | body,
25 | #root {
26 | height: 100%;
27 | width: 100%;
28 | }
29 |
30 | main {
31 | height: 100%;
32 | width: 100%;
33 | padding: 1.5rem;
34 | display: flex;
35 | gap: 1rem;
36 | }
37 |
38 | main .left,
39 | main .right {
40 | height: 100%;
41 | flex-basis: 50%;
42 | border-radius: 0.7rem;
43 | }
44 |
45 | main .left {
46 | background-color: #000000;
47 | position: relative;
48 | }
49 |
50 | .left .code,
51 | .code pre,
52 | .code pre code {
53 | height: 100%;
54 | width: 100%;
55 | margin: 0;
56 | border-radius: 0.7rem;
57 | background-color: #0c0c0c;
58 | }
59 |
60 | main .left .review {
61 | position: absolute;
62 | bottom: 1rem;
63 | right: 1rem;
64 | background-color: rgb(219, 219, 255);
65 | color: #000000;
66 | padding: 0.5rem 2rem;
67 | font-weight: 500;
68 | cursor: pointer;
69 | user-select: none;
70 | border-radius: 0.7rem;
71 | }
72 |
73 |
74 | main .right {
75 | background-color: #343434;
76 | padding: 1rem 2rem;
77 | font-size: 1.5rem;
78 | overflow: auto;
79 | } */
--------------------------------------------------------------------------------
/Frontend/public/omex-logo-transparent.svg:
--------------------------------------------------------------------------------
1 |
2 |