├── src ├── App.css ├── index.css ├── main.jsx ├── components │ ├── Navbar.css │ ├── EditableOutput.jsx │ ├── FAQ.jsx │ ├── StarFork.jsx │ ├── Home.jsx │ ├── Navbar.jsx │ ├── OutputDisplay.jsx │ ├── ProfileForm.jsx │ ├── MarkdownToolbar.jsx │ └── InputForm.jsx ├── data │ └── faqData.json ├── App.jsx └── hooks │ ├── useReadmeGenerator.jsx │ └── GitHubProfileGenerator.jsx ├── .dockerignore ├── docker-compose.yml ├── postcss.config.js ├── Dockerfile.dev ├── vite.config.js ├── Dockerfile ├── .gitignore ├── tailwind.config.js ├── index.html ├── .eslintrc.cjs ├── .github ├── ISSUE_TEMPLATE │ ├── custom_issue_template.md │ ├── feature_request_template.md │ └── bug_report_template.md └── workflows │ └── deploy.yml ├── LICENSE ├── package.json ├── public └── vite.svg ├── README.md ├── CODE_OF_CONDUCT.md └── CONTRIBUTING.md /src/App.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | .dockerignore 4 | .git 5 | .gitignore 6 | Dockerfile.dev -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | react-app: 4 | build: . 5 | ports: 6 | - "3000:80" 7 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /Dockerfile.dev: -------------------------------------------------------------------------------- 1 | FROM node:lts-alpine 2 | WORKDIR '/app' 3 | 4 | # Copy package.json file to the container 5 | COPY package*.json . 6 | RUN npm install 7 | 8 | COPY . . 9 | 10 | CMD ["npm", "run", "dev"] -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | export default defineConfig({ 5 | plugins: [react()], 6 | server: { 7 | port:3000, 8 | host:true, 9 | } 10 | }) -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts-alpine AS builder 2 | WORKDIR '/app' 3 | COPY package*.json ./ 4 | RUN npm install 5 | COPY . . 6 | RUN npm run build 7 | 8 | 9 | FROM nginx:alpine 10 | EXPOSE 80 11 | COPY --from=builder /app/dist /usr/share/nginx/html -------------------------------------------------------------------------------- /src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App.jsx' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /.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 | 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 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | "./src/**/*.{js,jsx,ts,tsx}", 4 | ], 5 | theme: { 6 | extend: { 7 | typography: (theme) => ({ 8 | invert: { 9 | css: { 10 | '--tw-prose-body': theme('colors.gray[300]'), 11 | '--tw-prose-headings': theme('colors.gray[200]'), 12 | '--tw-prose-links': theme('colors.purple[400]'), 13 | // ... other prose styles 14 | }, 15 | }, 16 | }), 17 | }, 18 | }, 19 | plugins: [ 20 | require('@tailwindcss/typography'), 21 | ], 22 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | READMEasy 8 | 9 | 10 | 11 |
12 | 13 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | 'eslint:recommended', 6 | 'plugin:react/recommended', 7 | 'plugin:react/jsx-runtime', 8 | 'plugin:react-hooks/recommended', 9 | ], 10 | ignorePatterns: ['dist', '.eslintrc.cjs'], 11 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, 12 | settings: { react: { version: '18.2' } }, 13 | plugins: ['react-refresh'], 14 | rules: { 15 | 'react/jsx-no-target-blank': 'off', 16 | 'react-refresh/only-export-components': [ 17 | 'warn', 18 | { allowConstantExport: true }, 19 | ], 20 | }, 21 | } 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom_issue_template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "💡 Custom Issue" 3 | about: "Create a custom issue related to the READMEasy-Website." 4 | title: "[Custom]: " 5 | labels: enhancement, discussion 6 | assignees: '' 7 | 8 | --- 9 | 10 | # 💡 Custom Issue 11 | 12 | ### 📝 Description 13 | 14 | 15 | ### 🔍 Steps to Reproduce (if applicable) 16 | 1. 17 | 2. 18 | 3. 19 | 20 | ### 🎯 Expected Outcome 21 | 22 | 23 | ### 📸 Screenshots or Additional Information 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/Navbar.css: -------------------------------------------------------------------------------- 1 | .nav-link { 2 | position: relative; 3 | padding-bottom: 2px; /* Adjust this to create space for the underline */ 4 | transition: color 0.3s ease; 5 | } 6 | 7 | .nav-link::after { 8 | content: ""; 9 | position: absolute; 10 | width: 0; 11 | height: 2px; /* Thickness of the underline */ 12 | left: 0; 13 | bottom: 0; 14 | background-color: #a855f7; /* Purple color for the underline */ 15 | transition: width 0.3s ease; 16 | } 17 | 18 | .nav-link:hover::after { 19 | width: 100%; /* Animate underline on hover */ 20 | } 21 | 22 | .underline-active::after { 23 | width: 100%; /* Keep underline for active nav item */ 24 | } 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request_template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "🚀 Feature Request" 3 | about: "Suggest a new feature or enhancement for the READMEasy-Webiste." 4 | title: "[Feature]: " 5 | labels: enhancement, feature request 6 | assignees: '' 7 | 8 | --- 9 | 10 | # 🚀 Feature Request 11 | 12 | ### 📝 Feature Description 13 | 14 | 15 | ### 🔧 How Will This Enhance the App? 16 | 17 | 18 | ### 🎯 Use Cases 19 | 20 | 21 | ### 📦 Suggested Implementation 22 | 23 | 24 | ### 📸 Additional Context 25 | 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report_template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "🐞 Bug Report" 3 | about: "Report a bug in the READMEasy-Website." 4 | title: "[Bug]: " 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | # 🐞 Bug Report 11 | 12 | ### 📋 Description 13 | 14 | 15 | ### ⚙️ Steps to Reproduce 16 | Steps to reproduce the behavior: 17 | 1. 18 | 2. 19 | 3. 20 | 21 | ### ✔️ Expected Behavior 22 | 23 | 24 | ### ❌ Actual Behavior 25 | 26 | 27 | ### 📷 Screenshots 28 | 29 | 30 | ### 🖥️ Environment (if applicable): 31 | - **OS**: (e.g., Windows, macOS, Linux) 32 | - **Browser**: (e.g., Chrome, Safari, Firefox) 33 | - **Version**: (if relevant) 34 | 35 | ### 🔧 Additional Information 36 | 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Bama Charan Chhandogi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to AWS EC2 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout Repository 14 | uses: actions/checkout@v3 15 | 16 | - name: Set up SSH Key 17 | run: | 18 | mkdir -p ~/.ssh 19 | echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa 20 | chmod 600 ~/.ssh/id_rsa 21 | ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts 22 | 23 | - name: Copy Files to EC2 24 | run: | 25 | scp -i ~/.ssh/id_rsa -r * ec2-user@${{ secrets.EC2_HOST }}:/home/ec2-user/app 26 | 27 | - name: Deploy on EC2 28 | run: | 29 | ssh -i ~/.ssh/id_rsa ec2-user@${{ secrets.EC2_HOST }} << 'EOF' 30 | cd /home/ec2-user/app 31 | sudo docker stop my-react-app || true 32 | sudo docker rm my-react-app || true 33 | sudo docker rmi my-react-app || true 34 | sudo docker build -t my-react-app . 35 | sudo docker run -d -p 80:80 --name my-react-app my-react-app 36 | EOF 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "readmefilegenerater", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@emoji-mart/data": "^1.2.1", 14 | "@emoji-mart/react": "^1.1.1", 15 | "@google/generative-ai": "^0.14.1", 16 | "axios": "^1.7.7", 17 | "emoji-mart": "^5.6.0", 18 | "lucide-react": "^0.453.0", 19 | "react": "^18.3.1", 20 | "react-dom": "^18.3.1", 21 | "react-icons": "^5.3.0", 22 | "react-markdown": "^9.0.1", 23 | "react-router-dom": "^6.24.1", 24 | "rehype-raw": "^7.0.0", 25 | "rehype-sanitize": "^6.0.0", 26 | "remark-gfm": "^4.0.0" 27 | }, 28 | "devDependencies": { 29 | "@tailwindcss/typography": "^0.5.13", 30 | "@types/react": "^18.3.3", 31 | "@types/react-dom": "^18.3.0", 32 | "@vitejs/plugin-react": "^4.3.1", 33 | "autoprefixer": "^10.4.19", 34 | "eslint": "^8.57.0", 35 | "eslint-plugin-react": "^7.34.2", 36 | "eslint-plugin-react-hooks": "^4.6.2", 37 | "eslint-plugin-react-refresh": "^0.4.7", 38 | "postcss": "^8.4.39", 39 | "tailwindcss": "^3.4.4", 40 | "vite": "^5.3.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/data/faqData.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "question": "What is READMEasy?", 4 | "answer": "READMEasy is a user-friendly web platform that empowers you to generate comprehensive and engaging README files for your software projects. Powered by advanced AI models, ReadMeister effortlessly tailors your README content based on your project's unique details." 5 | }, 6 | { 7 | "question": "How do I get started?", 8 | "answer": "To get started, simply fill out the README Generator form and integrate it into your project." 9 | }, 10 | { 11 | "question": "How do I contribute to this project?", 12 | "answer": "We welcome contributions from the community! You can contribute by reporting bugs, suggesting features, or submitting pull requests on our GitHub repository. Join our community discussions and help us improve READMEasy together!" 13 | }, 14 | { 15 | "question": "Is READMEasy free to use?", 16 | "answer": "Yes, READMEasy is completely free for personal and open-source projects. We also offer premium features for enterprise users requiring advanced functionality." 17 | }, 18 | { 19 | "question": "Can I customize the output of the README file?", 20 | "answer": "Absolutely! READMEasy allows you to customize various sections of the generated README, including project descriptions, usage instructions, and more, so it perfectly fits your needs." 21 | } 22 | ] 23 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/EditableOutput.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useRef } from 'react'; 2 | import MarkdownToolbar from './MarkdownToolbar'; 3 | 4 | const EditableOutput = ({ content, onSave }) => { 5 | const [editableContent, setEditableContent] = useState(content); 6 | const [isEditing, setIsEditing] = useState(false); 7 | const textareaRef = useRef(null); 8 | 9 | const handleEdit = () => { 10 | setIsEditing(true); 11 | }; 12 | 13 | const handleSave = () => { 14 | onSave(editableContent); 15 | setIsEditing(false); 16 | }; 17 | 18 | const handleCancel = () => { 19 | onSave(content); 20 | setIsEditing(false); 21 | }; 22 | 23 | return ( 24 | <> 25 | 26 |