Plataforma exclusiva para a comunidade LGBTQIA+, integrando:
✅ Vagas de emprego inclusivas
✅ Cursos gratuitos de capacitação
✅ Apoio psicológico seguro e acolhedor
Link do projeto: https://final-project-recodework-7r6w.onrender.com/
- Foco em diversidade: Ambiente projetado para as necessidades da comunidade LGBTQIA+.
- Tudo em um lugar: Combina oportunidades profissionais, educação e saúde mental.
- Totalmente gratuito: Sem custos para usuários ou parceiros.
| Categoria | Ferramentas/Frameworks |
|---|---|
| Front-end | HTML5, CSS3, JavaScript, Bootstrap |
| Back-end | Java 17, Spring Boot 3.5.3, Maven, MySQL 8.0 |
| Design | Figma (prototipagem) |
| Infra | Docker, Render (deploy), Railway (DB) |
| Ferramentas | IntelliJ IDEA, VS Code, Git, OpenAPI (documentação) |
- Java JDK 17
- Docker e Docker Compose
- MySQL 8.0+
- Conta na OpenAI (para integração com IA)
- Clone o repositório:
git clone https://github.com/IuryDevJava/Final-Project---Recodework cd Final-Project---Recodework
1.2 Estrutura de pastas do projeto:
📦Iurydev
┣ 📂.mvn
┣ 📂src
┃ ┣ 📂main
┃ ┃ ┣ 📂java
┃ ┃ ┃ ┗ 📂com
┃ ┃ ┃ ┃ ┗ 📂recode
┃ ┃ ┃ ┃ ┃ ┗ 📂projectfinal
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂Iurydev
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config # Configurações da aplicação
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller # Controladores REST
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto # Data Transfer Objects
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model # Entidades do domínio
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository # Acesso a dados
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service # Lógica de negócios
┃ ┃ ┣ 📂resources
┃ ┃ ┃ ┣ 📜application.properties
┃ ┃ ┃ ┣ 📜application-dev.properties
┃ ┃ ┃ ┣ 📜application-docker.properties
┃ ┃ ┃ ┣ 📜application-prod.properties
┃ ┃ ┃ ┣ 📂static # Arquivos estáticos (CSS, JS, imagens)
┃ ┃ ┃ ┗ 📂templates # Templates Thymeleaf
┃ ┣ 📂test
┃ ┃ ┗ 📂java # Testes automatizados
┣ 📜.gitignore
┣ 📜Dockerfile # Docker build da aplicação
┣ 📜docker-compose.yml # Orquestração de contêineres
┣ 📜mvnw
┣ 📜mvnw.cmd
┣ 📜pom.xml # Dependências e build do Maven
-
Gere a chave key:
https://platform.openai.com/settings/organization/api-keysclique em + Create new secret key Copie a sua chave e guarde em um local seguro. Observações: não compartilhe a sua chave.
No Intellij vá em Run / Debug Configurations -> Edit Configurations... -> Modify options -> Environment variables após isso vai aparecer um campo com Environment variables -> Edit -> + e crie sua variável de ambiente com Name:
openai.api.keyValue:sk-suachaveaqui... -
Vá em resources e crie um arquivo application-docker.properties adicione:
spring.datasource.url=jdbc:mysql://db:3306/namedb?useSSL=false&serverTimezone=America/Sao_Paulo&allowPublicKeyRetrieval=true spring.datasource.username=seuusuario spring.datasource.password=suasenha spring.jpa.hibernate.ddl-auto=update spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect spring.jpa.show-sql=true spring.sql.init.mode=never spring.flyway.locations=classpath:db/migration spring.flyway.baseline-on-migrate=true spring.flyway.enabled=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.check-template-location=true spring.servlet.multipart.max-file-size=5MB spring.servlet.multipart.max-request-size=5MB openai.api.key=${openai.api.key} openai.api.url=https://api.openai.com/v1/chat/completions openai.api.model=gpt-3.5-turbo openai.api.temperature=0.7 openai.api.max-tokens=500 spring.mvc.async.request-timeout=60000 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=America/Sao_Paulo -
Procure application.properties e adicione:
#Isso vai chamar o application-docker.properties spring.profiles.active=docker -
Na raiz do projeto e crie o arquivo docker-compose.yml e adicione:
version: '3.8' services: db: image: mysql:8.0 container_name: name_db volumes: - mysql_data:/var/lib/mysql ports: - "3307:3306" environment: MYSQL_ROOT_PASSWORD: suasenhaaqui MYSQL_DATABASE: namedb MYSQL_USER: seuusuario MYSQL_PASSWORD: suasenha healthcheck: test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ] interval: 10s timeout: 5s retries: 5 app: build: container_name: recodework_app depends_on: db: condition: service_healthy ports: - "8080:8080" environment: SPRING_PROFILES_ACTIVE: docker volumes: mysql_data: -
Na raiz do projeto crie um arquivo Dockerfile e adicione:
FROM maven:3.9.6-eclipse-temurin-17 AS build WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests FROM openjdk:17-jdk-slim WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] -
Aperte ALT+F12 ou abra o terminal(caminho inicial do projeto - raiz) e digite os comandos abaixo para deixar sua aplicação dockerizada:
mvn clean mvn clean package -DskipTests docker-compose up --build
-
Crie o banco de dados:
CREATE DATABASE namedb; USE namedb; -
Crie as vagas:
INSERT INTO vaga ( titulo, empresa, localizacao, tipo_contrato, descricao, lgbtqia_friendly, area ) VALUES ( 'Social Media', 'Nomad', 'São Paulo', 'Tempo integral', 'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.', TRUE, 'Design' ), ( 'Social Media Assistant', 'Netlify', 'São Paulo', 'Tempo integral', 'Assistente de Social Media para apoiar na criação de conteúdo e gestão de comunidades online. Ideal para quem está começando na área e quer aprender com uma equipe experiente.', TRUE, 'Design' ), ( 'Desenvolvedor Full Stack', 'Dropbox', 'Rio de Janeiro', 'Tempo integral', 'Desenvolvedor Full Stack para trabalhar em nossas aplicações web. Requisitos: experiência com React, Node.js, bancos de dados relacionais e conhecimento em arquitetura de software.', TRUE, 'Full Stack' ), ( 'Brand Designer', 'Maze', 'San Francisco, USA', 'Tempo integral', 'Designer de marca para criar identidades visuais impactantes. Procuramos alguém com portfólio forte em design de marca e experiência em trabalhar com equipes internacionais.', TRUE, 'Design' ), ( 'Interactive Developer', 'Oracle', 'São Paulo', 'Tempo integral', 'Desenvolvedor Interativo para criar experiências digitais inovadoras. Requisitos: conhecimento em JavaScript, CSS animations e frameworks modernos.', TRUE, 'Front-End' ), ( 'Social Media', 'Udacity', 'Hamburg, Germany', 'Tempo integral', 'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.', TRUE, 'Design' ), ( 'Back-End Developer', 'Google', 'Belo Horizonte, MG', 'Tempo integral', 'Desenvolvedor Back-End para trabalhar em sistemas escaláveis. Requisitos: experiência com Java, Spring Boot, microsserviços e cloud computing.', TRUE, 'Back-End' ), ( 'DevOps Engineer', 'Microsoft', 'Redmond, USA', 'Tempo integral', 'Engenheiro DevOps para implementar e manter pipelines de CI/CD. Requisitos: conhecimento em Docker, Kubernetes, Azure e infraestrutura como código.', TRUE, 'DevOps' ), ( 'Data Scientist', 'IBM', 'Campinas, SP', 'Tempo integral', 'Cientista de Dados para desenvolver modelos preditivos e análises avançadas. Requisitos: experiência com Python, machine learning e big data.', TRUE, 'Data Science' ), ( 'QA Tester', 'GitHub', 'Remoto', 'Freelancer', 'Testador de Qualidade para garantir a qualidade dos nossos produtos. Requisitos: experiência com testes manuais e automatizados, conhecimento em Selenium.', TRUE, 'Qualidade' ), ( 'Machine Learning Engineer', 'NVIDIA', 'Austin, USA', 'Tempo integral', 'Engenheiro de Machine Learning para desenvolver modelos de IA. Requisitos: experiência com TensorFlow, PyTorch e processamento de grandes volumes de dados.', TRUE, 'IA/ML' ), ( 'Cyber Security Analyst', 'Palo Alto Networks', 'Remoto', 'Tempo integral', 'Analista de Segurança para proteger nossos sistemas contra ameaças. Requisitos: conhecimento em firewalls, SIEM e técnicas de hacking ético.', TRUE, 'Segurança' ), ( 'Product Manager', 'Atlassian', 'São Paulo', 'Tempo integral', 'Gerente de Produto para liderar o desenvolvimento de novas funcionalidades. Responsável por definir roadmap, priorizar features e trabalhar com equipes multidisciplinares.', TRUE, 'Produto' ); -
Veja as vagas:
SELECT * FROM vagas; -
Em resources crie um arquivo application-dev.properties e adicione:
spring.datasource.url=jdbc:mysql://localhost:3306/namedb?useSSL=false&serverTimezone=America/Sao_Paulo spring.datasource.username=seuusuario spring.datasource.password=suasenha spring.jpa.hibernate.ddl-auto=update spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.sql.init.mode=never spring.flyway.locations=classpath:db/migration spring.flyway.baseline-on-migrate=true spring.flyway.enabled=true spring.datasource.hikari.connection-timeout=20000 spring.datasource.hikari.maximum-pool-size=5 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.check-template-location=true spring.servlet.multipart.max-file-size=5MB spring.servlet.multipart.max-request-size=5MB openai.api.key=${openai.api.key} openai.api.url=https://api.openai.com/v1/chat/completions openai.api.model=gpt-3.5-turbo openai.api.temperature=0.7 openai.api.max-tokens=500 spring.mvc.async.request-timeout=60000 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=America/Sao_Paulo -
Em seguida, no application.properties, mude para:
spring.profiles.active=dev -
Pode rodar o projeto normalmente e acesse:
localhost:8080/home
Arquivo completo localizado em: src/main/resources/application-prod.properties
spring.datasource.url=jdbc:mysql://${MYSQLHOST}:${MYSQLPORT}/${MYSQLDATABASE}
spring.datasource.username=${MYSQLUSER}
spring.datasource.password=${MYSQLPASSWORD}
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.sql.init.mode=always
spring.sql.init.continue-on-error=true
spring.jpa.defer-datasource-initialization=true
spring.jpa.properties.hibernate.hbm2ddl.create-constraints=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.check-template-location=true
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB
openai.api.key=${openai.api.key}
openai.api.url=https://api.openai.com/v1/chat/completions
openai.api.model=gpt-3.5-turbo
openai.api.temperature=0.7
openai.api.max-tokens=500
spring.mvc.async.request-timeout=60000
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=America/Sao_Paulo
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.maximum-pool-size=5
logging.level.root=INFO
logging.level.org.springframework.web=INFO
logging.level.com.yourpackage=DEBUG
INSERT INTO
vaga (
titulo,
empresa,
localizacao,
tipo_contrato,
descricao,
lgbtqia_friendly,
area
)
VALUES
(
'Social Media',
'Nomad',
'São Paulo',
'Tempo integral',
'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.',
TRUE,
'Design'
),
(
'Social Media Assistant',
'Netlify',
'São Paulo',
'Tempo integral',
'Assistente de Social Media para apoiar na criação de conteúdo e gestão de comunidades online. Ideal para quem está começando na área e quer aprender com uma equipe experiente.',
TRUE,
'Design'
),
(
'Desenvolvedor Full Stack',
'Dropbox',
'Rio de Janeiro',
'Tempo integral',
'Desenvolvedor Full Stack para trabalhar em nossas aplicações web. Requisitos: experiência com React, Node.js, bancos de dados relacionais e conhecimento em arquitetura de software.',
TRUE,
'Full Stack'
),
(
'Brand Designer',
'Maze',
'San Francisco, USA',
'Tempo integral',
'Designer de marca para criar identidades visuais impactantes. Procuramos alguém com portfólio forte em design de marca e experiência em trabalhar com equipes internacionais.',
TRUE,
'Design'
),
(
'Interactive Developer',
'Oracle',
'São Paulo',
'Tempo integral',
'Desenvolvedor Interativo para criar experiências digitais inovadoras. Requisitos: conhecimento em JavaScript, CSS animations e frameworks modernos.',
TRUE,
'Front-End'
),
(
'Social Media',
'Udacity',
'Hamburg, Germany',
'Tempo integral',
'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.',
TRUE,
'Design'
),
(
'Back-End Developer',
'Google',
'Belo Horizonte, MG',
'Tempo integral',
'Desenvolvedor Back-End para trabalhar em sistemas escaláveis. Requisitos: experiência com Java, Spring Boot, microsserviços e cloud computing.',
TRUE,
'Back-End'
),
(
'DevOps Engineer',
'Microsoft',
'Redmond, USA',
'Tempo integral',
'Engenheiro DevOps para implementar e manter pipelines de CI/CD. Requisitos: conhecimento em Docker, Kubernetes, Azure e infraestrutura como código.',
TRUE,
'DevOps'
),
(
'Data Scientist',
'IBM',
'Campinas, SP',
'Tempo integral',
'Cientista de Dados para desenvolver modelos preditivos e análises avançadas. Requisitos: experiência com Python, machine learning e big data.',
TRUE,
'Data Science'
),
(
'QA Tester',
'GitHub',
'Remoto',
'Freelancer',
'Testador de Qualidade para garantir a qualidade dos nossos produtos. Requisitos: experiência com testes manuais e automatizados, conhecimento em Selenium.',
TRUE,
'Qualidade'
),
(
'Machine Learning Engineer',
'NVIDIA',
'Austin, USA',
'Tempo integral',
'Engenheiro de Machine Learning para desenvolver modelos de IA. Requisitos: experiência com TensorFlow, PyTorch e processamento de grandes volumes de dados.',
TRUE,
'IA/ML'
),
(
'Cyber Security Analyst',
'Palo Alto Networks',
'Remoto',
'Tempo integral',
'Analista de Segurança para proteger nossos sistemas contra ameaças. Requisitos: conhecimento em firewalls, SIEM e técnicas de hacking ético.',
TRUE,
'Segurança'
),
(
'Product Manager',
'Atlassian',
'São Paulo',
'Tempo integral',
'Gerente de Produto para liderar o desenvolvimento de novas funcionalidades. Responsável por definir roadmap, priorizar features e trabalhar com equipes multidisciplinares.',
TRUE,
'Produto'
);
Para ativar o modo produção, Mude para:
spring.profiles.active=prod
🌐 Conectando o Railway com Render 🌐 2. Configure o Banco de Dados no Railway Acesse Railway.
Crie um novo projeto e selecione o banco MySQL e iniciar deploy.
Copie as variáveis de ambiente geradas (database, host, port, usuário, senha).
🚀 3. Faça o Deploy da Aplicação no Render. Acesse Render.
Crie um novo Web Service.
Conecte seu repositório GitHub.
- Pegue as seguintes variáveis geradas Railway e adicione no Render em Environment. Ex:
| Variável | Valor |
|---|---|
| MYSQLDATABASE | railway |
| MYSQLHOST | mainline.proxy.rlwy.net |
| MYSQLPORT | 21465 |
| MYSQLUSER | root |
| MYSQLPASSWORD | ************** |
| MYSQLPASSWORD | sk-... (sua chave da OpenAI) |
O Recodework nasceu com o propósito de ser um espaço seguro, inclusivo e transformador para a comunidade LGBTQIA+.
Combinando empregabilidade, capacitação e apoio emocional, a plataforma oferece um ecossistema completo para impulsionar trajetórias profissionais e pessoais.