├── public
└── images
│ └── bg.png
├── src
├── app
│ ├── favicon.ico
│ ├── page.js
│ ├── globals.css
│ ├── layout.js
│ └── projects
│ │ └── [projectId]
│ │ ├── page.js
│ │ └── project.module.css
├── components
│ ├── Footer.js
│ ├── modals
│ │ ├── ParentModal.js
│ │ └── modals.module.css
│ ├── Hero.js
│ ├── SocialIcons.js
│ ├── Features.js
│ ├── ProjectSwiper.js
│ ├── ProjectImage.js
│ ├── Header.js
│ └── Projects.js
├── constant
│ └── home.js
└── template.js
├── .husky
├── pre-commit
├── pre-push
├── commit-msg
└── _
│ └── husky.sh
├── jsconfig.json
├── next.config.js
├── postcss.config.js
├── .editorconfig
├── cypress
├── fixtures
│ └── example.json
├── e2e
│ ├── home.cy.js
│ └── projectPage.cy.js
└── support
│ ├── e2e.js
│ └── commands.js
├── cypress.config.js
├── .eslintrc.json
├── commitlint.config.js
├── tailwind.config.js
├── package.json
├── CODE_OF_CONDUCT.md
├── README.md
└── .gitignore
/public/images/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekhadev/openfeedback/HEAD/public/images/bg.png
--------------------------------------------------------------------------------
/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekhadev/openfeedback/HEAD/src/app/favicon.ico
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npm run lint
5 |
--------------------------------------------------------------------------------
/.husky/pre-push:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npm run cy:test
5 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./src/*"]
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {}
3 |
4 | module.exports = nextConfig
5 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npx --no-install commitlint --edit "$1"
5 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 | [*]
3 | end_of_line = lf
4 | insert_final_newline = true
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 |
--------------------------------------------------------------------------------
/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/cypress/e2e/home.cy.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 | describe('test home', () => {
3 | it('passes', () => {
4 | cy.visit('http://localhost:3000')
5 | cy.get('h1').should('contain', 'OpenFeedback')
6 | })
7 | })
8 |
--------------------------------------------------------------------------------
/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require('cypress')
2 |
3 | module.exports = defineConfig({
4 | e2e: {
5 | baseUrl: 'http://localhost:3000',
6 | setupNodeEvents(on, config) {
7 | // implement node event listeners here
8 | }
9 | }
10 | })
11 |
--------------------------------------------------------------------------------
/src/app/page.js:
--------------------------------------------------------------------------------
1 | import Features from '@/components/Features'
2 | import Projects from '@/components/Projects'
3 |
4 | export default function Home () {
5 | return (
6 |
7 |
8 |
9 |
10 | )
11 | }
12 |
--------------------------------------------------------------------------------
/src/components/Footer.js:
--------------------------------------------------------------------------------
1 | import { paragraphFooter, titleLinkFooter } from '@/constant/home'
2 |
3 | const Footer = () => {
4 | return (
5 |
9 | )
10 | }
11 |
12 | export default Footer
13 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es2021": true,
5 | "node": true
6 | },
7 | "extends": [
8 | "standard",
9 | "plugin:react/recommended"
10 | ],
11 | "parserOptions": {
12 | "ecmaVersion": "latest",
13 | "sourceType": "module"
14 | },
15 | "plugins": [
16 | "react",
17 | "cypress"
18 | ],
19 | "rules": {
20 | "react/react-in-jsx-scope": "off",
21 | "react/prop-types": "off"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/cypress/e2e/projectPage.cy.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 | describe('page projects', () => {
3 | it('passes', () => {
4 | cy.visit('/projects/23')
5 |
6 | cy.get('button').should('contain', 'Ver Demo')
7 | cy.get('button').should('contain', 'Hechale un vistazo al portafolio de')
8 | cy.get('img').should('have.attr', 'alt', 'project image')
9 |
10 | cy.get('img').first().click()
11 |
12 | cy.get('.modal').should('be.visible')
13 |
14 | cy.get('.modal').find('button').click()
15 | })
16 | })
17 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['@commitlint/config-conventional'],
3 | rules: {
4 | 'type-case': [2, 'always', 'lower-case'],
5 | 'type-enum': [2, 'always', [
6 | 'feat',
7 | 'fix',
8 | 'docs',
9 | 'style',
10 | 'refactor',
11 | 'test',
12 | 'revert',
13 | 'ci'
14 | ]],
15 | 'subject-case': [2, 'always', 'lower-case'],
16 | 'subject-max-length': [2, 'always', 50],
17 | 'subject-min-length': [2, 'always', 10],
18 | 'body-max-length': [2, 'always', 72]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
5 | './src/components/**/*.{js,ts,jsx,tsx,mdx}',
6 | './src/app/**/*.{js,ts,jsx,tsx,mdx}',
7 | ],
8 | theme: {
9 | extend: {
10 | backgroundImage: {
11 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
12 | 'gradient-conic':
13 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
14 | },
15 | },
16 | },
17 | plugins: [],
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/modals/ParentModal.js:
--------------------------------------------------------------------------------
1 | import { createPortal } from 'react-dom'
2 | import style from './modals.module.css'
3 |
4 | const Modal = ({ children, close }) => {
5 | return createPortal(
6 |
7 |
8 |
9 |
10 | {children}
11 |
12 |
13 |
,
14 | window.document.body // El elemento DOM fuera de la jerarquía principal
15 | )
16 | }
17 |
18 | export default Modal
19 |
--------------------------------------------------------------------------------
/src/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | :root {
6 | --foreground-rgb: 0, 0, 0;
7 | --background-start-rgb: 214, 219, 220;
8 | --background-end-rgb: 255, 255, 255;
9 | }
10 |
11 | @media (prefers-color-scheme: dark) {
12 | :root {
13 | --foreground-rgb: 255, 255, 255;
14 | --background-start-rgb: 0, 0, 0;
15 | --background-end-rgb: 0, 0, 0;
16 | }
17 | }
18 |
19 | body {
20 | color: rgb(var(--foreground-rgb));
21 | background: linear-gradient(
22 | to bottom,
23 | transparent,
24 | rgb(var(--background-end-rgb))
25 | )
26 | rgb(var(--background-start-rgb));
27 | }
28 |
--------------------------------------------------------------------------------
/cypress/support/e2e.js:
--------------------------------------------------------------------------------
1 | // ***********************************************************
2 | // This example support/e2e.js is processed and
3 | // loaded automatically before your test files.
4 | //
5 | // This is a great place to put global configuration and
6 | // behavior that modifies Cypress.
7 | //
8 | // You can change the location of this file or turn off
9 | // automatically serving support files with the
10 | // 'supportFile' configuration option.
11 | //
12 | // You can read more here:
13 | // https://on.cypress.io/configuration
14 | // ***********************************************************
15 |
16 | // Import commands.js using ES2015 syntax:
17 | import './commands'
18 |
19 | // Alternatively you can use CommonJS syntax:
20 | // require('./commands')
--------------------------------------------------------------------------------
/src/app/layout.js:
--------------------------------------------------------------------------------
1 | import './globals.css'
2 | import { Inter } from 'next/font/google'
3 | import Header from '@/components/Header'
4 | import Footer from '@/components/Footer'
5 |
6 | const inter = Inter({ subsets: ['latin'] })
7 |
8 | export const metadata = {
9 | title: 'OpenFeedback',
10 | description: 'Potencia tu carrera como programador en OpenFeedback: Sube tus proyectos y construye un portafolio destacado. Obtén valiosas opiniones de la comunidad y acelera tu crecimiento profesional.'
11 | }
12 |
13 | export default function RootLayout ({ children }) {
14 | return (
15 |
16 |
17 |
18 | {children}
19 |
20 |
21 |
22 | )
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/Hero.js:
--------------------------------------------------------------------------------
1 | import { paragraphHero, titleButtonHero, welcome } from '@/constant/home'
2 | import SocialIcons from './SocialIcons'
3 |
4 | const Hero = () => {
5 | return (
6 |
7 | {welcome}
8 | {paragraphHero}
9 |
10 |
11 | {titleButtonHero}
12 |
13 |
14 |
15 |
16 | )
17 | }
18 |
19 | export default Hero
20 |
--------------------------------------------------------------------------------
/src/components/SocialIcons.js:
--------------------------------------------------------------------------------
1 | import { BsDiscord } from 'react-icons/bs'
2 | import { AiFillGithub } from 'react-icons/ai'
3 |
4 | const SocialIcons = () => {
5 | return (
6 |
24 | )
25 | }
26 |
27 | export default SocialIcons
28 |
--------------------------------------------------------------------------------
/.husky/_/husky.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | if [ -z "$husky_skip_init" ]; then
3 | debug () {
4 | if [ "$HUSKY_DEBUG" = "1" ]; then
5 | echo "husky (debug) - $1"
6 | fi
7 | }
8 |
9 | readonly hook_name="$(basename -- "$0")"
10 | debug "starting $hook_name..."
11 |
12 | if [ "$HUSKY" = "0" ]; then
13 | debug "HUSKY env variable is set to 0, skipping hook"
14 | exit 0
15 | fi
16 |
17 | if [ -f ~/.huskyrc ]; then
18 | debug "sourcing ~/.huskyrc"
19 | . ~/.huskyrc
20 | fi
21 |
22 | readonly husky_skip_init=1
23 | export husky_skip_init
24 | sh -e "$0" "$@"
25 | exitCode="$?"
26 |
27 | if [ $exitCode != 0 ]; then
28 | echo "husky - $hook_name hook exited with code $exitCode (error)"
29 | fi
30 |
31 | if [ $exitCode = 127 ]; then
32 | echo "husky - command not found in PATH=$PATH"
33 | fi
34 |
35 | exit $exitCode
36 | fi
37 |
--------------------------------------------------------------------------------
/src/components/Features.js:
--------------------------------------------------------------------------------
1 | import {
2 | feadback,
3 | features,
4 | paragraphOne,
5 | paragraphThree,
6 | paragraphTwo,
7 | portafolio,
8 | valoration
9 | } from '@/constant/home'
10 |
11 | const Features = () => {
12 | return (
13 |
14 | {features}
15 |
16 |
17 |
{feadback}
18 |
{paragraphOne}
19 |
20 |
21 |
{valoration}
22 |
{paragraphTwo}
23 |
24 |
25 |
{portafolio}
26 |
{paragraphThree}
27 |
28 |
29 |
30 | )
31 | }
32 |
33 | export default Features
34 |
--------------------------------------------------------------------------------
/cypress/support/commands.js:
--------------------------------------------------------------------------------
1 | // ***********************************************
2 | // This example commands.js shows you how to
3 | // create various custom commands and overwrite
4 | // existing commands.
5 | //
6 | // For more comprehensive examples of custom
7 | // commands please read more here:
8 | // https://on.cypress.io/custom-commands
9 | // ***********************************************
10 | //
11 | //
12 | // -- This is a parent command --
13 | // Cypress.Commands.add('login', (email, password) => { ... })
14 | //
15 | //
16 | // -- This is a child command --
17 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
18 | //
19 | //
20 | // -- This is a dual command --
21 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
22 | //
23 | //
24 | // -- This will overwrite an existing command --
25 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "openfeedback",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint",
10 | "lint:fix": "next lint --fix",
11 | "cy:open": "cypress open",
12 | "cy:test": "cypress run"
13 | },
14 | "dependencies": {
15 | "next": "13.5.4",
16 | "react": "^18",
17 | "react-dom": "^18",
18 | "react-icons": "^4.11.0",
19 | "swiper": "^10.3.1"
20 | },
21 | "devDependencies": {
22 | "@commitlint/cli": "^17.7.2",
23 | "@commitlint/config-conventional": "^17.7.0",
24 | "autoprefixer": "^10",
25 | "cypress": "^13.3.0",
26 | "eslint": "^8.50.0",
27 | "eslint-config-next": "13.5.4",
28 | "eslint-config-standard": "^17.1.0",
29 | "eslint-plugin-cypress": "^2.15.1",
30 | "eslint-plugin-import": "^2.28.1",
31 | "eslint-plugin-n": "^16.1.0",
32 | "eslint-plugin-promise": "^6.1.1",
33 | "eslint-plugin-react": "^7.33.2",
34 | "husky": "^8.0.3",
35 | "postcss": "^8",
36 | "tailwindcss": "^3.3.3"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/components/ProjectSwiper.js:
--------------------------------------------------------------------------------
1 | 'use client'
2 | import { Swiper, SwiperSlide } from 'swiper/react'
3 | import {
4 | Navigation,
5 | Pagination,
6 | Autoplay,
7 | EffectFlip,
8 | Keyboard
9 | } from 'swiper/modules'
10 | import 'swiper/css'
11 | import ProjectImage from './ProjectImage'
12 |
13 | const ProjectSwiper = ({ images, width = 500, height = 400, action }) => {
14 | console.log(images)
15 |
16 | return (
17 |
28 | {images?.map((img, index) => (
29 | // console.log(img)
30 |
31 |
32 |
39 |
40 | ))}
41 |
42 | )
43 | }
44 |
45 | export default ProjectSwiper
46 |
--------------------------------------------------------------------------------
/src/components/ProjectImage.js:
--------------------------------------------------------------------------------
1 | 'use client'
2 | import { useState } from 'react'
3 | import Modal from './modals/ParentModal'
4 | import ProjectSwiper from './ProjectSwiper'
5 |
6 | const ProjectImage = ({ allImages, src, width, height, action = true }) => {
7 | const [openModal, setOpenModal] = useState(false)
8 |
9 | const customStyle = {
10 | width,
11 | height,
12 | objectFit: 'cover',
13 | cursor: action ? 'pointer' : 'default'
14 | }
15 | const handleModal = (e) => {
16 | if (action) {
17 | setOpenModal(!openModal)
18 | }
19 | e.stopPropagation()
20 | }
21 |
22 | return (
23 | <>
24 |
32 |
33 | {openModal && (
34 |
35 |
41 |
42 | )}
43 | >
44 | )
45 | }
46 |
47 | export default ProjectImage
48 |
--------------------------------------------------------------------------------
/src/components/modals/modals.module.css:
--------------------------------------------------------------------------------
1 | .customParentStyles {
2 | position: fixed;
3 | background: rgb(0 0 0 / 80%);
4 | inset: 0;
5 | cursor: 'default';
6 | z-index: 10;
7 | }
8 |
9 | .container {
10 | width: 100%;
11 | height: 100%;
12 | display: flex;
13 | justify-content: center;
14 | align-items: center;
15 | }
16 |
17 | .wrapper {
18 | max-width: 900px;
19 | position: relative;
20 | }
21 |
22 | .close {
23 | width: 50px;
24 | height: 50px;
25 | position: absolute;
26 | top: 10px;
27 | right: 20px;
28 | z-index: 10;
29 | padding: 10px;
30 | border-radius: 50%;
31 | background-color: #c084fcb5;
32 | box-shadow: 1px 2px 10px black inset;
33 | clip-path: polygon(
34 | 20% 0%,
35 | 0% 20%,
36 | 30% 50%,
37 | 0% 80%,
38 | 20% 100%,
39 | 50% 70%,
40 | 80% 100%,
41 | 100% 80%,
42 | 70% 50%,
43 | 100% 20%,
44 | 80% 0%,
45 | 50% 30%
46 | );
47 | transition: background 0.3s ease-in-out;
48 | }
49 |
50 | .close:hover {
51 | background: #db2777;
52 | }
53 |
54 | .imgSwiper {
55 | width: 895px;
56 | max-height: 600px;
57 | object-fit: cover;
58 | /* border-radius: 10px; */
59 | }
60 |
61 | @media (max-width: 1000px) {
62 | .wrapper {
63 | width: 90%;
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/constant/home.js:
--------------------------------------------------------------------------------
1 | // Header
2 |
3 | export const title = 'OpenFeedback'
4 | export const projects = 'Proyectos'
5 | export const login = 'Login'
6 | export const register = 'Register'
7 |
8 | // Feature
9 |
10 | export const features = 'Funcionalidades'
11 | export const feadback = 'Feedback'
12 | export const paragraphOne =
13 | 'Recibe y escribe feedback de proyectos, mejora tus habilidades y ayuda a otros a mejorar.'
14 | export const paragraphTwo =
15 | 'Mejora tus proyectos y escala en el ranking de valoraciones. Gana estrellas para tus proyectos.'
16 | export const paragraphThree =
17 | 'Genera un portafolio con tus proyectos y valoraciones, con plantillas personalizables.'
18 | export const portafolio = 'Portafolio'
19 | export const valoration = 'Valoración'
20 |
21 | // Hero
22 |
23 | export const welcome = 'Welcome'
24 | export const paragraphHero = `Publica y recibe feedback y valoración en tus proyectos.
25 | Aumenta tu visibilidad, mejora tus habilidades y genera un portafolio para tus proyectos.`
26 | export const titleButtonHero = 'Registrate y participa!'
27 |
28 | // Projects
29 | export const feadbacks = 'Feedbacks'
30 | export const starts = '★★★★★'
31 |
32 | // Footer
33 |
34 | export const paragraphFooter = 'OpenFeedback, hecho con ❤️ por @somosjuniors'
35 | export const titleLinkFooter = 'Siguenos en discord'
36 |
--------------------------------------------------------------------------------
/src/components/Header.js:
--------------------------------------------------------------------------------
1 | 'use client'
2 | import { login, projects, register, title } from '@/constant/home'
3 | import { usePathname } from 'next/navigation'
4 | import Hero from '@/components/Hero'
5 |
6 | const Header = () => {
7 | const path = usePathname()
8 | const isRootPage = path === '/'
9 | return isRootPage
10 | ? (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | )
19 | : (
20 |
21 | {' '}
22 |
23 |
24 | )
25 | }
26 |
27 | export default Header
28 |
29 | function HeaderNavar () {
30 | return (
31 |
50 | )
51 | }
52 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Código de Conducta para Contributors
2 |
3 | ### Objetivo principal
4 |
5 | Este Código de Conducta está diseñado para establecer un ambiente inclusivo, respetuoso y colaborativo para todos los participantes en nuestro proyecto open source. Buscamos fomentar una comunidad diversa y amigable, donde cada individuo sea valorado.
6 |
7 | ### Directrices
8 |
9 | - Respeto mutuo: Trata a los demás como te gustaría ser tratado. No toleramos ningún tipo de acoso, discriminación, lenguaje despectivo o comentarios dañinos.
10 |
11 | - Colaboración: Trabaja de forma constructiva con otros, escucha activamente y brinda feedback respetuoso. Valora las diferentes perspectivas y experiencias.
12 |
13 | - Comunicación clara: Al expresarte, sé conciso y claro. Evita lenguaje ambiguo o sarcástico que pueda ser malinterpretado.
14 |
15 | - Accesibilidad: Asegúrate de que tus contribuciones sean inclusivas y accesibles a todos, teniendo en cuenta las diferentes habilidades y perspectivas.
16 |
17 | - Protección de datos: No compartas información personal, confidencial o de terceros sin el consentimiento adecuado.
18 |
19 | - Responsabilidad: Asume la responsabilidad de tus acciones y errores. Si cometes un error, corrígelo y aprende de él.
20 |
21 | ### Denuncias
22 |
23 | Si alguien viola este código de conducta o te sientes incómodo con alguna situación, por favor comunícalo a los administradores o mantenedores del proyecto. Todas las denuncias serán tratadas con confidencialidad y seriedad.
24 |
25 | ### Consecuencias
26 |
27 | Las violaciones a este código serán analizadas por los mantenedores del proyecto. Dependiendo de la gravedad, puede resultar en una advertencia, ser excluido temporalmente o, en casos graves, ser expulsado permanentemente del proyecto.
28 |
29 | ### Conclusión
30 |
31 | Este espacio es para todos. Buscamos fomentar una comunidad abierta, diversa y respetuosa, donde todos puedan colaborar y aprender juntos. Apreciamos tu colaboración y esperamos trabajar juntos en un ambiente positivo.
32 |
--------------------------------------------------------------------------------
/src/components/Projects.js:
--------------------------------------------------------------------------------
1 | import { projects, starts, valoration } from '@/constant/home'
2 | import Link from 'next/link'
3 |
4 | import { PROJECTS } from '@/template'
5 |
6 | const Projects = () => {
7 | return (
8 |
9 | {projects}
10 |
11 | {PROJECTS.map(({ id, title, images, description, categories }) => (
12 |
16 |
17 |
18 |
19 | {title}
20 |
21 |
22 | {description}
23 |
24 |
25 | {categories.map((category) => (
26 |
27 | {category.charAt(0).toUpperCase() + category.slice(1)}
28 |
29 | ))}
30 |
31 |
32 |
33 | {valoration}: {starts}
34 |
35 |
36 | Feedbacks: 0
37 |
38 |
39 |
40 |
41 | ))}
42 |
43 |
44 | )
45 | }
46 |
47 | export default Projects
48 |
--------------------------------------------------------------------------------
/src/app/projects/[projectId]/page.js:
--------------------------------------------------------------------------------
1 | import ProjectSwiper from '@/components/ProjectSwiper'
2 | import style from './project.module.css'
3 | import { PROJECTS } from '@/template'
4 |
5 | // solo es para simular alguna data por ahora
6 | const getProject = async (id) => {
7 | const project = PROJECTS.find(ele => ele.id === id)
8 | return project
9 | }
10 |
11 | const Page = async ({ params }) => {
12 | const data = await getProject(params.projectId)
13 |
14 | return (
15 | <>
16 |
29 |
30 |
31 |
32 | Proyecto creado por {data.author}
33 | Descriccion
34 |
35 |
36 | {data.description}
37 |
38 |
39 |
40 |
41 |
42 | Categoria: {
43 | data.categories?.map(c => {
44 | return {c}
45 | })
46 | }
47 |
48 |
Hechale un vistazo al portafolio de {'usuario'}
49 |
50 |
51 |
52 |
53 |
56 |
57 |
58 | {data.rating}
59 | Ver Demo
60 | Fecha de creacion: 23/10/22
61 | Fecha de actualizacion: 23/10/22
62 |
63 |
64 |
65 | >
66 | )
67 | }
68 |
69 | export default Page
70 |
--------------------------------------------------------------------------------
/src/template.js:
--------------------------------------------------------------------------------
1 | export const PROJECTS = [
2 | {
3 | author: 'Daniel H',
4 | id: '8379b07c-5e9b-4d77-a9ae-466fdce6715b',
5 | title: 'Website Somos Juniors',
6 | description:
7 | 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book',
8 | images: [
9 | {
10 | url: 'https://placehold.co/600x400'
11 | },
12 | {
13 | url: 'https://placehold.co/600x400'
14 | }
15 | ],
16 | categories: ['Astro', 'React', 'Tailwind'],
17 | rating: '★★★★★',
18 | createdAt: '23/10/22',
19 | updatedAt: '23/10/22'
20 | },
21 | {
22 | author: 'Carolina J',
23 | id: '8379b07c-5e9b-4d77-a9ae-466fdce6715c',
24 | title: 'API con NodeJS',
25 | description:
26 | 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book',
27 | images: [
28 | {
29 | url: 'https://placehold.co/600x400'
30 | },
31 | {
32 | url: 'https://placehold.co/600x400'
33 | }
34 | ],
35 | categories: ['nodejs', 'express', 'mongodb'],
36 | rating: '★★★★',
37 | createdAt: '23/10/22',
38 | updatedAt: '23/10/22'
39 | },
40 | {
41 | author: 'Carmen C',
42 | id: '8379b07c-5e9b-4d77-a9ae-466fdce6715d',
43 | title: 'API con NestJS',
44 | description:
45 | 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book',
46 | images: [
47 | {
48 | url: 'https://placehold.co/600x400'
49 | }
50 | ],
51 | categories: ['nestjs', 'express', 'mongodb'],
52 | rating: '★★★★★',
53 | createdAt: '23/10/22',
54 | updatedAt: '23/10/22'
55 | },
56 | {
57 | author: 'Alexandra MVP',
58 | id: '8379b07c-5e9b-4d77-a9ae-466fdce6715e',
59 | title: 'API con Laravel',
60 | description:
61 | 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book',
62 | images: [
63 | {
64 | url: 'https://placehold.co/600x400'
65 | }
66 | ],
67 | categories: ['laravel', 'php', 'mysql'],
68 | rating: '★★★',
69 | createdAt: '23/10/22',
70 | updatedAt: '23/10/22'
71 | }
72 | ]
73 |
--------------------------------------------------------------------------------
/src/app/projects/[projectId]/project.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | max-width: 1000px;
3 | margin: 0 auto;
4 | padding: 50px 50px 0 50px;
5 | height: 100vh;
6 | display: flex;
7 | gap: 40px;
8 | position: relative;
9 | }
10 |
11 | .description {
12 | max-width: 450px;
13 | word-wrap: break-word;
14 | font-size: 18px;
15 | color: rgb(200, 196, 196);
16 | }
17 |
18 | .descriptionContainer {
19 | padding: 5px;
20 | /* max-height: 350px; */
21 | min-height: 380px;
22 | overflow-y: hidden;
23 | transition: all 0.2s ease-in-out;
24 | }
25 |
26 | .descriptionContainer::-webkit-scrollbar {
27 | width: 5px;
28 | background-color: transparent;
29 | }
30 |
31 | .descriptionContainer::-webkit-scrollbar-thumb {
32 | background-color: #c084fc;
33 | border-radius: 10px;
34 | }
35 |
36 | .descriptionContainer::-webkit-scrollbar-thumb:hover {
37 | background-color: #a56de2;
38 | }
39 |
40 | .descriptionContainer:hover {
41 | backdrop-filter: blur(16px) saturate(180%);
42 | -webkit-backdrop-filter: blur(16px) saturate(180%);
43 | background-color: rgba(17, 25, 40, 0.574);
44 | overflow-y: scroll;
45 | }
46 |
47 | .information {
48 | display: flex;
49 | flex-direction: column;
50 | gap: 10px;
51 | }
52 |
53 | .information h3 {
54 | font-size: 20px;
55 | }
56 |
57 | .moreInfo span {
58 | color: white;
59 | }
60 |
61 | .categories > span {
62 | margin-left: 5px;
63 | padding: 3px;
64 | background: #c084fcc9;
65 | border-radius: 5px;
66 | }
67 |
68 | .moreInfo button {
69 | margin-top: 10px;
70 | width: 100%;
71 | padding: 5px;
72 | background-color: white;
73 | color: black;
74 | font-weight: bold;
75 | border-radius: 20px;
76 | /* box-shadow: 1px 2px 10px #c084fc inset; */
77 | transition: all 0.3s ease-in-out;
78 | }
79 |
80 | .moreInfo button:hover {
81 | box-shadow: none;
82 | color: white;
83 | background: linear-gradient(to bottom, transparent, #db2777) #c084fc;
84 | }
85 |
86 | .intemsDemo {
87 | display: flex;
88 | margin-top: 10px;
89 | align-items: center;
90 | flex-direction: column;
91 | gap: 5px;
92 | align-items: flex-start;
93 | }
94 |
95 | .intemsDemo > :first-child {
96 | font-size: 20px;
97 | color: yellow;
98 | }
99 |
100 | .intemsDemo button {
101 | padding: 5px;
102 | background: linear-gradient(to bottom, transparent, #db2777) #c084fc;
103 | border-radius: 40px;
104 | width: 100%;
105 | transition: opacity 0.3s ease-in-out;
106 | }
107 |
108 | .intemsDemo button:hover {
109 | opacity: 0.8;
110 | }
111 |
112 | .projectImg {
113 | width: 500px;
114 | height: 500px;
115 | object-fit: cover;
116 | border-radius: 10px;
117 | box-shadow: 0px 0px 20px 0px #9333ea63;
118 | }
119 |
120 | .imgContainer {
121 | max-width: 500px;
122 | max-height: 800px;
123 | }
124 |
125 | @media (max-width: 1000px) {
126 | .container {
127 | flex-direction: column-reverse;
128 | justify-content: center;
129 | align-items: center;
130 | height: fit-content;
131 | padding-top: 20px;
132 | }
133 |
134 | .imgContainer {
135 | max-width: 90%;
136 | }
137 |
138 | .information {
139 | width: 90%;
140 | }
141 |
142 | .description {
143 | max-width: 90%;
144 | }
145 | }
146 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # OpenFeedback 😎 (openfeedback.dev)
2 |
3 | ## 💁 Acerca del proyecto
4 |
5 | [SomosJuniors](https://discord.gg/zyHQ92HR) es una comunidad de entusiasta que quieren aprender y mejorar sus habilidades en programación. Este proyecto nace con el propósito de permitir a nuestros miembros exponer sus proyectos, recibir retroalimentación valiosa y mejorar sus habilidades. Además, ofrece una plantilla de portafolio para que puedan mostrar su trabajo de la mejor manera.
6 |
7 | También te invitamos a leer el [código de conducta](./CODE_OF_CONDUCT.md) para que conozcas las reglas de convivencia del proyecto.
8 |
9 | Y seguir todos los proyectos de la comunidad en [SomosJuniors](https://discord.gg/zyHQ92HR)
10 |
11 | ### Características
12 |
13 | - Publicación de proyectos: Los miembros pueden subir sus proyectos para mostrarlos a la comunidad.
14 | - Feedback constructivo: Otros miembros pueden dar su opinión y consejos sobre los proyectos publicados.
15 | - Sistema de estrellas: Los proyectos pueden recibir estrellas como muestra de apreciación y reconocimiento.
16 | - Filtrado y búsqueda: Herramientas para encontrar proyectos según diferentes criterios.
17 | - Plantilla de portafolio: Un espacio personalizable para que cada miembro muestre su trabajo y experiencia.
18 |
19 | ### 🎃 Hacktoberfest
20 |
21 | ¡Estamos emocionados de anunciar que este proyecto forma parte del Hacktoberfest! Invitamos a todos los contribuyentes a colaborar y ayudar a mejorar esta plataforma. Es una oportunidad perfecta para aportar a un proyecto open source y aprender en el proceso.
22 |
23 | ### 👩💻 ¿Cómo contribuir?
24 |
25 | > Es importante que leas y entiendas las recomendaciones para contribuir con el proyecto, ya que será más fácil poder revisar, aprobar tus contribucione y poder darte un feedback más rápido.
26 |
27 | Es un proyecto open source, por lo que cualquier persona puede participar, pero recomendamos seguir estos pasos para que las revisiones de las contribuciones sean más rápidas y sencillas:
28 |
29 | 1. Hacer fork del proyecto.
30 | 2. Crear un issue con el feature o bug que quieres solucionar.
31 | 3. Crear una rama con el nombre del issue.
32 | 3. Crear un Pull Request con la implementación.
33 | 4. Esperar la aprobación o feedback de los colaboradores.
34 | 5. Una vez aprobado, hacer merge a la rama master.
35 |
36 | Tu contribución será añadida al proyecto.
37 |
38 | #### Recomendaciones para crear un issue
39 |
40 | - Verifica que no exista un issue con el mismo problema o funcionalidad.
41 | - El título debe ser descriptivo y conciso.
42 | - En la descripción, explica el problema que quieres solucionar o la funcionalidad que quieres añadir.
43 | - Si es un bug, describe los pasos para reproducirlo.
44 | - Si es un feature, describe cómo debería funcionar.
45 |
46 | #### Recomendaciones para crear commits
47 |
48 | Para asegurar la coherencia y legibilidad de nuestros commits, siga las siguientes reglas al escribir sus mensajes de commit:
49 |
50 | 1. ***Tipo de commit:*** Debe ser siempre en minúsculas. Puede elegir entre:
51 |
52 | - feat: Una nueva característica
53 | - fix: Una corrección de error
54 | - docs: Cambios en la documentación
55 | - style: Cambios que no afectan el significado del código (espacios en blanco, formato, etc.)
56 | - refactor: Cambios en el código que no corrigen errores ni añaden características
57 | - test: Añadir o corregir pruebas
58 | - revert: Revertir un commit anterior
59 | - ci: Cambios en las configuraciones de CI/CD
60 |
61 | ***Ejemplo:*** `feat: add new login button`
62 |
63 | 2. ***Asunto del commit:***
64 |
65 | - Debe ser siempre en minúsculas.
66 | - Longitud mínima: 10 caracteres.
67 | - Longitud máxima: 50 caracteres.
68 |
69 | ***Ejemplo:*** `docs: update user documentation`
70 |
71 | 3. ***Cuerpo del commit:***
72 |
73 | Longitud máxima: 72 caracteres por línea.
74 |
75 | ***Ejemplo:***
76 |
77 | ```bash
78 | refactor(web): change button styles
79 |
80 | Updated the primary, secondary button styles for better user experience
81 | ```
82 |
83 | #### Recomendaciones para crear un Pull Request
84 |
85 | - Verifica que no exista un Pull Request con la misma implementación.
86 | - El título debe ser descriptivo y conciso.
87 | - En la descripción, explica la implementación y los cambios que realizaste.
88 | - Si es un bug, describe los pasos para reproducirlo.
89 | - Si es un feature, describe cómo debería funcionar.
90 | - No hagas cambios en archivos que no estén relacionados con el issue.
91 | - No hagas implementaciones muy grandes en un solo Pull Request.
92 |
93 | #### Contribuidores
94 |
95 | - Irwing Naranjo [geekhadev](https://www.linkedin.com/in/geekhadev)
96 | - [Carolina Romero](https://www.linkedin.com/in/carolina-romero-c)
97 |
98 | ¿Qué esperas para contribuir? ¡Únete a la comunidad!
99 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/macos,windows,linux,visualstudio,intellij,nextjs,node,react
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,linux,visualstudio,intellij,nextjs,node,react
3 |
4 | ### Intellij ###
5 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
6 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
7 |
8 | # User-specific stuff
9 | .idea/**/workspace.xml
10 | .idea/**/tasks.xml
11 | .idea/**/usage.statistics.xml
12 | .idea/**/dictionaries
13 | .idea/**/shelf
14 |
15 | # AWS User-specific
16 | .idea/**/aws.xml
17 |
18 | # Generated files
19 | .idea/**/contentModel.xml
20 |
21 | # Sensitive or high-churn files
22 | .idea/**/dataSources/
23 | .idea/**/dataSources.ids
24 | .idea/**/dataSources.local.xml
25 | .idea/**/sqlDataSources.xml
26 | .idea/**/dynamic.xml
27 | .idea/**/uiDesigner.xml
28 | .idea/**/dbnavigator.xml
29 |
30 | # Gradle
31 | .idea/**/gradle.xml
32 | .idea/**/libraries
33 |
34 | # Gradle and Maven with auto-import
35 | # When using Gradle or Maven with auto-import, you should exclude module files,
36 | # since they will be recreated, and may cause churn. Uncomment if using
37 | # auto-import.
38 | # .idea/artifacts
39 | # .idea/compiler.xml
40 | # .idea/jarRepositories.xml
41 | # .idea/modules.xml
42 | # .idea/*.iml
43 | # .idea/modules
44 | # *.iml
45 | # *.ipr
46 |
47 | # CMake
48 | cmake-build-*/
49 |
50 | # Mongo Explorer plugin
51 | .idea/**/mongoSettings.xml
52 |
53 | # File-based project format
54 | *.iws
55 |
56 | # IntelliJ
57 | out/
58 |
59 | # mpeltonen/sbt-idea plugin
60 | .idea_modules/
61 |
62 | # JIRA plugin
63 | atlassian-ide-plugin.xml
64 |
65 | # Cursive Clojure plugin
66 | .idea/replstate.xml
67 |
68 | # SonarLint plugin
69 | .idea/sonarlint/
70 |
71 | # Crashlytics plugin (for Android Studio and IntelliJ)
72 | com_crashlytics_export_strings.xml
73 | crashlytics.properties
74 | crashlytics-build.properties
75 | fabric.properties
76 |
77 | # Editor-based Rest Client
78 | .idea/httpRequests
79 |
80 | # Android studio 3.1+ serialized cache file
81 | .idea/caches/build_file_checksums.ser
82 |
83 | ### Intellij Patch ###
84 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
85 |
86 | # *.iml
87 | # modules.xml
88 | # .idea/misc.xml
89 | # *.ipr
90 |
91 | # Sonarlint plugin
92 | # https://plugins.jetbrains.com/plugin/7973-sonarlint
93 | .idea/**/sonarlint/
94 |
95 | # SonarQube Plugin
96 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
97 | .idea/**/sonarIssues.xml
98 |
99 | # Markdown Navigator plugin
100 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
101 | .idea/**/markdown-navigator.xml
102 | .idea/**/markdown-navigator-enh.xml
103 | .idea/**/markdown-navigator/
104 |
105 | # Cache file creation bug
106 | # See https://youtrack.jetbrains.com/issue/JBR-2257
107 | .idea/$CACHE_FILE$
108 |
109 | # CodeStream plugin
110 | # https://plugins.jetbrains.com/plugin/12206-codestream
111 | .idea/codestream.xml
112 |
113 | # Azure Toolkit for IntelliJ plugin
114 | # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
115 | .idea/**/azureSettings.xml
116 |
117 | ### Linux ###
118 | *~
119 |
120 | # temporary files which can be created if a process still has a handle open of a deleted file
121 | .fuse_hidden*
122 |
123 | # KDE directory preferences
124 | .directory
125 |
126 | # Linux trash folder which might appear on any partition or disk
127 | .Trash-*
128 |
129 | # .nfs files are created when an open file is removed but is still being accessed
130 | .nfs*
131 |
132 | ### macOS ###
133 | # General
134 | .DS_Store
135 | .AppleDouble
136 | .LSOverride
137 |
138 | # Icon must end with two \r
139 | Icon
140 |
141 |
142 | # Thumbnails
143 | ._*
144 |
145 | # Files that might appear in the root of a volume
146 | .DocumentRevisions-V100
147 | .fseventsd
148 | .Spotlight-V100
149 | .TemporaryItems
150 | .Trashes
151 | .VolumeIcon.icns
152 | .com.apple.timemachine.donotpresent
153 |
154 | # Directories potentially created on remote AFP share
155 | .AppleDB
156 | .AppleDesktop
157 | Network Trash Folder
158 | Temporary Items
159 | .apdisk
160 |
161 | ### macOS Patch ###
162 | # iCloud generated files
163 | *.icloud
164 |
165 | ### NextJS ###
166 | # dependencies
167 | /node_modules
168 | /.pnp
169 | .pnp.js
170 |
171 | # testing
172 | /coverage
173 |
174 | # next.js
175 | /.next/
176 | /out/
177 |
178 | # production
179 | /build
180 |
181 | # misc
182 | *.pem
183 |
184 | # debug
185 | npm-debug.log*
186 | yarn-debug.log*
187 | yarn-error.log*
188 | .pnpm-debug.log*
189 |
190 | # local env files
191 | .env*.local
192 |
193 | # vercel
194 | .vercel
195 |
196 | # typescript
197 | *.tsbuildinfo
198 | next-env.d.ts
199 |
200 | ### Node ###
201 | # Logs
202 | logs
203 | *.log
204 | lerna-debug.log*
205 |
206 | # Diagnostic reports (https://nodejs.org/api/report.html)
207 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
208 |
209 | # Runtime data
210 | pids
211 | *.pid
212 | *.seed
213 | *.pid.lock
214 |
215 | # Directory for instrumented libs generated by jscoverage/JSCover
216 | lib-cov
217 |
218 | # Coverage directory used by tools like istanbul
219 | coverage
220 | *.lcov
221 |
222 | # nyc test coverage
223 | .nyc_output
224 |
225 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
226 | .grunt
227 |
228 | # Bower dependency directory (https://bower.io/)
229 | bower_components
230 |
231 | # node-waf configuration
232 | .lock-wscript
233 |
234 | # Compiled binary addons (https://nodejs.org/api/addons.html)
235 | build/Release
236 |
237 | # Dependency directories
238 | node_modules/
239 | jspm_packages/
240 |
241 | # Snowpack dependency directory (https://snowpack.dev/)
242 | web_modules/
243 |
244 | # TypeScript cache
245 |
246 | # Optional npm cache directory
247 | .npm
248 |
249 | # Optional eslint cache
250 | .eslintcache
251 |
252 | # Optional stylelint cache
253 | .stylelintcache
254 |
255 | # Microbundle cache
256 | .rpt2_cache/
257 | .rts2_cache_cjs/
258 | .rts2_cache_es/
259 | .rts2_cache_umd/
260 |
261 | # Optional REPL history
262 | .node_repl_history
263 |
264 | # Output of 'npm pack'
265 | *.tgz
266 |
267 | # Yarn Integrity file
268 | .yarn-integrity
269 |
270 | # dotenv environment variable files
271 | .env
272 | .env.development.local
273 | .env.test.local
274 | .env.production.local
275 | .env.local
276 |
277 | # parcel-bundler cache (https://parceljs.org/)
278 | .cache
279 | .parcel-cache
280 |
281 | # Next.js build output
282 | .next
283 | out
284 |
285 | # Nuxt.js build / generate output
286 | .nuxt
287 | dist
288 |
289 | # Gatsby files
290 | .cache/
291 | # Comment in the public line in if your project uses Gatsby and not Next.js
292 | # https://nextjs.org/blog/next-9-1#public-directory-support
293 | # public
294 |
295 | # vuepress build output
296 | .vuepress/dist
297 |
298 | # vuepress v2.x temp and cache directory
299 | .temp
300 |
301 | # Docusaurus cache and generated files
302 | .docusaurus
303 |
304 | # Serverless directories
305 | .serverless/
306 |
307 | # FuseBox cache
308 | .fusebox/
309 |
310 | # DynamoDB Local files
311 | .dynamodb/
312 |
313 | # TernJS port file
314 | .tern-port
315 |
316 | # Stores VSCode versions used for testing VSCode extensions
317 | .vscode-test
318 |
319 | # yarn v2
320 | .yarn/cache
321 | .yarn/unplugged
322 | .yarn/build-state.yml
323 | .yarn/install-state.gz
324 | .pnp.*
325 |
326 | ### Node Patch ###
327 | # Serverless Webpack directories
328 | .webpack/
329 |
330 | # Optional stylelint cache
331 |
332 | # SvelteKit build / generate output
333 | .svelte-kit
334 |
335 | ### react ###
336 | .DS_*
337 | **/*.backup.*
338 | **/*.back.*
339 |
340 | node_modules
341 |
342 | *.sublime*
343 |
344 | psd
345 | thumb
346 | sketch
347 |
348 | ### Windows ###
349 | # Windows thumbnail cache files
350 | Thumbs.db
351 | Thumbs.db:encryptable
352 | ehthumbs.db
353 | ehthumbs_vista.db
354 |
355 | # Dump file
356 | *.stackdump
357 |
358 | # Folder config file
359 | [Dd]esktop.ini
360 |
361 | # Recycle Bin used on file shares
362 | $RECYCLE.BIN/
363 |
364 | # Windows Installer files
365 | *.cab
366 | *.msi
367 | *.msix
368 | *.msm
369 | *.msp
370 |
371 | # Windows shortcuts
372 | *.lnk
373 |
374 | ### VisualStudio ###
375 | ## Ignore Visual Studio temporary files, build results, and
376 | ## files generated by popular Visual Studio add-ons.
377 | ##
378 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
379 |
380 | # User-specific files
381 | *.rsuser
382 | *.suo
383 | *.user
384 | *.userosscache
385 | *.sln.docstates
386 |
387 | # User-specific files (MonoDevelop/Xamarin Studio)
388 | *.userprefs
389 |
390 | # Mono auto generated files
391 | mono_crash.*
392 |
393 | # Build results
394 | [Dd]ebug/
395 | [Dd]ebugPublic/
396 | [Rr]elease/
397 | [Rr]eleases/
398 | x64/
399 | x86/
400 | [Ww][Ii][Nn]32/
401 | [Aa][Rr][Mm]/
402 | [Aa][Rr][Mm]64/
403 | bld/
404 | [Bb]in/
405 | [Oo]bj/
406 | [Ll]og/
407 | [Ll]ogs/
408 |
409 | # Visual Studio 2015/2017 cache/options directory
410 | .vs/
411 | # Uncomment if you have tasks that create the project's static files in wwwroot
412 | #wwwroot/
413 |
414 | # Visual Studio 2017 auto generated files
415 | Generated\ Files/
416 |
417 | # MSTest test Results
418 | [Tt]est[Rr]esult*/
419 | [Bb]uild[Ll]og.*
420 |
421 | # NUnit
422 | *.VisualState.xml
423 | TestResult.xml
424 | nunit-*.xml
425 |
426 | # Build Results of an ATL Project
427 | [Dd]ebugPS/
428 | [Rr]eleasePS/
429 | dlldata.c
430 |
431 | # Benchmark Results
432 | BenchmarkDotNet.Artifacts/
433 |
434 | # .NET Core
435 | project.lock.json
436 | project.fragment.lock.json
437 | artifacts/
438 |
439 | # ASP.NET Scaffolding
440 | ScaffoldingReadMe.txt
441 |
442 | # StyleCop
443 | StyleCopReport.xml
444 |
445 | # Files built by Visual Studio
446 | *_i.c
447 | *_p.c
448 | *_h.h
449 | *.ilk
450 | *.meta
451 | *.obj
452 | *.iobj
453 | *.pch
454 | *.pdb
455 | *.ipdb
456 | *.pgc
457 | *.pgd
458 | *.rsp
459 | *.sbr
460 | *.tlb
461 | *.tli
462 | *.tlh
463 | *.tmp
464 | *.tmp_proj
465 | *_wpftmp.csproj
466 | *.tlog
467 | *.vspscc
468 | *.vssscc
469 | .builds
470 | *.pidb
471 | *.svclog
472 | *.scc
473 |
474 | # Chutzpah Test files
475 | _Chutzpah*
476 |
477 | # Visual C++ cache files
478 | ipch/
479 | *.aps
480 | *.ncb
481 | *.opendb
482 | *.opensdf
483 | *.sdf
484 | *.cachefile
485 | *.VC.db
486 | *.VC.VC.opendb
487 |
488 | # Visual Studio profiler
489 | *.psess
490 | *.vsp
491 | *.vspx
492 | *.sap
493 |
494 | # Visual Studio Trace Files
495 | *.e2e
496 |
497 | # TFS 2012 Local Workspace
498 | $tf/
499 |
500 | # Guidance Automation Toolkit
501 | *.gpState
502 |
503 | # ReSharper is a .NET coding add-in
504 | _ReSharper*/
505 | *.[Rr]e[Ss]harper
506 | *.DotSettings.user
507 |
508 | # TeamCity is a build add-in
509 | _TeamCity*
510 |
511 | # DotCover is a Code Coverage Tool
512 | *.dotCover
513 |
514 | # AxoCover is a Code Coverage Tool
515 | .axoCover/*
516 | !.axoCover/settings.json
517 |
518 | # Coverlet is a free, cross platform Code Coverage Tool
519 | coverage*.json
520 | coverage*.xml
521 | coverage*.info
522 |
523 | # Visual Studio code coverage results
524 | *.coverage
525 | *.coveragexml
526 |
527 | # NCrunch
528 | _NCrunch_*
529 | .*crunch*.local.xml
530 | nCrunchTemp_*
531 |
532 | # MightyMoose
533 | *.mm.*
534 | AutoTest.Net/
535 |
536 | # Web workbench (sass)
537 | .sass-cache/
538 |
539 | # Installshield output folder
540 | [Ee]xpress/
541 |
542 | # DocProject is a documentation generator add-in
543 | DocProject/buildhelp/
544 | DocProject/Help/*.HxT
545 | DocProject/Help/*.HxC
546 | DocProject/Help/*.hhc
547 | DocProject/Help/*.hhk
548 | DocProject/Help/*.hhp
549 | DocProject/Help/Html2
550 | DocProject/Help/html
551 |
552 | # Click-Once directory
553 | publish/
554 |
555 | # Publish Web Output
556 | *.[Pp]ublish.xml
557 | *.azurePubxml
558 | # Note: Comment the next line if you want to checkin your web deploy settings,
559 | # but database connection strings (with potential passwords) will be unencrypted
560 | *.pubxml
561 | *.publishproj
562 |
563 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
564 | # checkin your Azure Web App publish settings, but sensitive information contained
565 | # in these scripts will be unencrypted
566 | PublishScripts/
567 |
568 | # NuGet Packages
569 | *.nupkg
570 | # NuGet Symbol Packages
571 | *.snupkg
572 | # The packages folder can be ignored because of Package Restore
573 | **/[Pp]ackages/*
574 | # except build/, which is used as an MSBuild target.
575 | !**/[Pp]ackages/build/
576 | # Uncomment if necessary however generally it will be regenerated when needed
577 | #!**/[Pp]ackages/repositories.config
578 | # NuGet v3's project.json files produces more ignorable files
579 | *.nuget.props
580 | *.nuget.targets
581 |
582 | # Microsoft Azure Build Output
583 | csx/
584 | *.build.csdef
585 |
586 | # Microsoft Azure Emulator
587 | ecf/
588 | rcf/
589 |
590 | # Windows Store app package directories and files
591 | AppPackages/
592 | BundleArtifacts/
593 | Package.StoreAssociation.xml
594 | _pkginfo.txt
595 | *.appx
596 | *.appxbundle
597 | *.appxupload
598 |
599 | # Visual Studio cache files
600 | # files ending in .cache can be ignored
601 | *.[Cc]ache
602 | # but keep track of directories ending in .cache
603 | !?*.[Cc]ache/
604 |
605 | # Others
606 | ClientBin/
607 | ~$*
608 | *.dbmdl
609 | *.dbproj.schemaview
610 | *.jfm
611 | *.pfx
612 | *.publishsettings
613 | orleans.codegen.cs
614 |
615 | # Including strong name files can present a security risk
616 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
617 | #*.snk
618 |
619 | # Since there are multiple workflows, uncomment next line to ignore bower_components
620 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
621 | #bower_components/
622 |
623 | # RIA/Silverlight projects
624 | Generated_Code/
625 |
626 | # Backup & report files from converting an old project file
627 | # to a newer Visual Studio version. Backup files are not needed,
628 | # because we have git ;-)
629 | _UpgradeReport_Files/
630 | Backup*/
631 | UpgradeLog*.XML
632 | UpgradeLog*.htm
633 | ServiceFabricBackup/
634 | *.rptproj.bak
635 |
636 | # SQL Server files
637 | *.mdf
638 | *.ldf
639 | *.ndf
640 |
641 | # Business Intelligence projects
642 | *.rdl.data
643 | *.bim.layout
644 | *.bim_*.settings
645 | *.rptproj.rsuser
646 | *- [Bb]ackup.rdl
647 | *- [Bb]ackup ([0-9]).rdl
648 | *- [Bb]ackup ([0-9][0-9]).rdl
649 |
650 | # Microsoft Fakes
651 | FakesAssemblies/
652 |
653 | # GhostDoc plugin setting file
654 | *.GhostDoc.xml
655 |
656 | # Node.js Tools for Visual Studio
657 | .ntvs_analysis.dat
658 |
659 | # Visual Studio 6 build log
660 | *.plg
661 |
662 | # Visual Studio 6 workspace options file
663 | *.opt
664 |
665 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
666 | *.vbw
667 |
668 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
669 | *.vbp
670 |
671 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
672 | *.dsw
673 | *.dsp
674 |
675 | # Visual Studio 6 technical files
676 |
677 | # Visual Studio LightSwitch build output
678 | **/*.HTMLClient/GeneratedArtifacts
679 | **/*.DesktopClient/GeneratedArtifacts
680 | **/*.DesktopClient/ModelManifest.xml
681 | **/*.Server/GeneratedArtifacts
682 | **/*.Server/ModelManifest.xml
683 | _Pvt_Extensions
684 |
685 | # Paket dependency manager
686 | .paket/paket.exe
687 | paket-files/
688 |
689 | # FAKE - F# Make
690 | .fake/
691 |
692 | # CodeRush personal settings
693 | .cr/personal
694 |
695 | # Python Tools for Visual Studio (PTVS)
696 | __pycache__/
697 | *.pyc
698 |
699 | # Cake - Uncomment if you are using it
700 | # tools/**
701 | # !tools/packages.config
702 |
703 | # Tabs Studio
704 | *.tss
705 |
706 | # Telerik's JustMock configuration file
707 | *.jmconfig
708 |
709 | # BizTalk build output
710 | *.btp.cs
711 | *.btm.cs
712 | *.odx.cs
713 | *.xsd.cs
714 |
715 | # OpenCover UI analysis results
716 | OpenCover/
717 |
718 | # Azure Stream Analytics local run output
719 | ASALocalRun/
720 |
721 | # MSBuild Binary and Structured Log
722 | *.binlog
723 |
724 | # NVidia Nsight GPU debugger configuration file
725 | *.nvuser
726 |
727 | # MFractors (Xamarin productivity tool) working folder
728 | .mfractor/
729 |
730 | # Local History for Visual Studio
731 | .localhistory/
732 |
733 | # Visual Studio History (VSHistory) files
734 | .vshistory/
735 |
736 | # BeatPulse healthcheck temp database
737 | healthchecksdb
738 |
739 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
740 | MigrationBackup/
741 |
742 | # Ionide (cross platform F# VS Code tools) working folder
743 | .ionide/
744 |
745 | # Fody - auto-generated XML schema
746 | FodyWeavers.xsd
747 |
748 | # VS Code files for those working on multiple tools
749 | .vscode/*
750 | !.vscode/settings.json
751 | !.vscode/tasks.json
752 | !.vscode/launch.json
753 | !.vscode/extensions.json
754 | *.code-workspace
755 |
756 | # Local History for Visual Studio Code
757 | .history/
758 |
759 | # Windows Installer files from build outputs
760 |
761 | # JetBrains Rider
762 | *.sln.iml
763 |
764 | ### VisualStudio Patch ###
765 | # Additional files built by Visual Studio
766 |
767 | # End of https://www.toptal.com/developers/gitignore/api/macos,windows,linux,visualstudio,intellij,nextjs,node,react
768 |
--------------------------------------------------------------------------------