33![ CI] ( https://github.com/JrValerio/Kenzie-Hub/actions/workflows/ci.yml/badge.svg )
44![ Kenzie Hub] ( ./src/assets/KenzieHub.png )
55
6- Aplicacao fullstack com frontend React (Vite) e API propria (Express + JWT + Prisma/Postgres), configurada por ambiente, CORS por allowlist e dominio validado/normalizado. O CI roda lint/build no frontend e testes de API com Supertest.
6+ Aplicação fullstack com frontend React (Vite) e API própria (Express + JWT + Prisma/Postgres), configurada por ambiente, CORS por allowlist e domínio validado/normalizado. O CI roda lint/build no frontend e testes de API com Supertest.
77
88## Links Importantes
99
10- - Aplicacao : https://kenzie-hub-seven-blue.vercel.app/
11- - Codigo -fonte: https://github.com/JrValerio/Kenzie-Hub
10+ - Aplicação : https://kenzie-hub-seven-blue.vercel.app/
11+ - Código -fonte: https://github.com/JrValerio/Kenzie-Hub
1212
1313## Quick Start
1414
1515``` bash
16- # instalar dependencias do frontend (raiz)
16+ # instalar dependências do frontend (raiz)
1717npm ci
1818
19- # instalar dependencias da API
19+ # instalar dependências da API
2020npm --prefix api ci
2121
2222# rodar frontend + API juntos
@@ -38,52 +38,58 @@ npm --prefix api run test
3838
3939## Funcionalidades
4040
41- - Cadastro de usuario
41+ - Cadastro de usuário
4242- Login e logout
43- - Autologin com token
43+ - Persistência de sessão via JWT
4444- Dashboard privada
4545- CRUD de tecnologias
4646
4747## Destaques
4848
49- - Integracao de frontend React com API REST.
50- - API incluida (Express + JWT + Prisma/Postgres) para rodar sem depender de endpoints externos.
51- - Config segura via ambiente: ` JWT_SECRET ` obrigatorio em producao e CORS por allowlist (` FRONTEND_URL ` ).
49+ - Integração de frontend React com API REST.
50+ - API incluída (Express + JWT + Prisma/Postgres) para rodar sem depender de endpoints externos.
51+ - Configuração segura via ambiente: ` JWT_SECRET ` obrigatório em produção e CORS por allowlist (` FRONTEND_URL ` ).
5252
5353## Estrutura
5454
55- - ` src/components ` : componentes reutilizaveis
56- - ` src/pages ` : paginas da aplicacao
55+ - ` src/components ` : componentes reutilizáveis
56+ - ` src/pages ` : páginas da aplicação
5757- ` src/providers ` : contextos de estado
58- - ` src/routers ` : rotas publicas e privadas
58+ - ` src/routers ` : rotas públicas e privadas
5959- ` src/services ` : camada de API do frontend
6060- ` src/styles ` : estilos (SCSS)
6161- ` api ` : backend (Express + Prisma + PostgreSQL)
6262
6363## Arquitetura
6464
6565``` text
66- Frontend (Vercel / React)
67- |
68- v
69- API (Railway / Express + JWT + Prisma)
70- |
71- v
72- PostgreSQL (Railway)
66+ ┌────────────────────────────┐
67+ │ Frontend (Vercel / React) │
68+ └──────────────┬─────────────┘
69+ │
70+ ▼
71+ ┌────────────────────────────────────┐
72+ │ API (Railway / Express + JWT) │
73+ └──────────────┬─────────────────────┘
74+ │
75+ ▼
76+ ┌────────────────────────────┐
77+ │ PostgreSQL (Railway) │
78+ └────────────────────────────┘
7379```
7480
75- ## Configuracao (Frontend)
81+ ## Configuração (Frontend)
7682
7783O frontend usa ` VITE_API_URL ` para apontar para a API.
78- Em desenvolvimento, se ` VITE_API_URL ` nao estiver definida, o fallback e ` http://localhost:3333 ` .
84+ Em desenvolvimento, se ` VITE_API_URL ` não estiver definida, o fallback é ` http://localhost:3333 ` .
7985
80861 . Crie ` .env ` na raiz:
8187
8288``` bash
8389VITE_API_URL=http://localhost:3333
8490```
8591
86- Voce tambem pode copiar de ` .env.example ` :
92+ Você também pode copiar de ` .env.example ` :
8793
8894``` bash
8995cp .env.example .env
@@ -97,7 +103,7 @@ npm run dev:all
97103
98104## API Local
99105
100- A API local esta em ` api/ ` e expoe :
106+ A API local está em ` api/ ` e expõe :
101107
102108- ` POST /sessions `
103109- ` POST /users `
@@ -106,15 +112,15 @@ A API local esta em `api/` e expoe:
106112- ` PUT /users/techs/:techId `
107113- ` DELETE /users/techs/:techId `
108114
109- Instalacao da API:
115+ Instalação da API:
110116
111117``` bash
112118cd api
113119npm install
114120```
115121
116122Configure ` api/.env ` com base em ` api/.env.example ` .
117- Rode migrations antes de iniciar a API pela primeira vez:
123+ Rode migrações antes de iniciar a API pela primeira vez:
118124
119125``` bash
120126cd api
@@ -124,23 +130,23 @@ npm run seed
124130
125131## Deployment (Vercel + Railway)
126132
127- Este projeto roda em producao com:
133+ Este projeto roda em produção com:
128134
129135- Frontend: Vercel (React + Vite)
130136- API: Railway (Express + JWT + Prisma)
131137- Banco: Railway PostgreSQL
132138
133139### Deploy da API no Railway (monorepo)
134140
135- 1 . Crie um projeto no Railway e conecte este repositorio .
141+ 1 . Crie um projeto no Railway e conecte este repositório .
1361422 . Adicione um PostgreSQL no mesmo projeto.
137- 3 . Configure o servico da API:
143+ 3 . Configure o serviço da API:
138144
139145- Root Directory: ` api `
140146- Build Command: ` npm install `
141147- Start Command: ` npm run start:prod `
142148
143- 4 . Configure variaveis de ambiente no servico da API:
149+ 4 . Configure variáveis de ambiente no serviço da API:
144150
145151``` bash
146152NODE_ENV=production
@@ -149,9 +155,9 @@ FRONTEND_URL=https://kenzie-hub-seven-blue.vercel.app
149155DATABASE_URL=postgresql://...
150156```
151157
152- Em ` NODE_ENV=production ` , ` FRONTEND_URL ` e obrigatorio para CORS por allowlist.
158+ Em ` NODE_ENV=production ` , ` FRONTEND_URL ` é obrigatório para CORS por allowlist.
153159
154- 5 . Apos o primeiro deploy, aplique as migrations :
160+ 5 . Após o primeiro deploy, aplique as migrações :
155161
156162``` bash
157163npm run migrate:deploy
@@ -175,7 +181,7 @@ Healthcheck:
175181VITE_API_URL=https://SUA-API.railway.app
176182```
177183
178- 2 . Rode um redeploy .
184+ 2 . Rode um novo deploy .
179185
180186### Production URLs
181187
@@ -185,51 +191,51 @@ VITE_API_URL=https://SUA-API.railway.app
185191### Security Notes
186192
187193- ` JWT_SECRET ` deve ser forte e exclusivo por ambiente.
188- - ` FRONTEND_URL ` deve apontar apenas para o dominio do frontend em producao .
194+ - ` FRONTEND_URL ` deve apontar apenas para o domínio do frontend em produção .
189195
190- ### Checklist de validacao (producao )
196+ ### Checklist de validação (produção )
191197
192- - Registrar usuario (` POST /users ` ) -> ` 201 `
198+ - Registrar usuário (` POST /users ` ) -> ` 201 `
193199- Login (` POST /sessions ` ) -> ` 200 ` + token
194200- Perfil (` GET /profile ` ) -> ` 200 `
195201- Criar tech (` POST /users/techs ` ) -> ` 201 `
196- - Editar tech (status acentuado/ascii ) -> ` 200 `
197- - Status invalido -> ` 400 `
202+ - Editar tech (status acentuado/ASCII ) -> ` 200 `
203+ - Status inválido -> ` 400 `
198204- Delete tech -> ` 204 `
199205
200- ## Case Study - Evolucao para Mini-Produto
206+ ## Case Study - Evolução para Mini-Produto
201207
202- Este projeto comecou como uma aplicacao academica dependente de API externa instavel .
203- A evolucao tecnica incluiu:
208+ Este projeto começou como uma aplicação acadêmica dependente de API externa instável .
209+ A evolução técnica incluiu:
204210
205211### Arquitetura
206212
207- - Remocao de dependencia externa.
208- - Criacao de API propria (` Express + JWT ` ).
209- - Migracao de persistencia em arquivo para Postgres com Prisma.
213+ - Remoção de dependência externa.
214+ - Criação de API própria (` Express + JWT ` ).
215+ - Migração de persistência em arquivo para Postgres com Prisma.
210216
211- ### Seguranca
217+ ### Segurança
212218
213- - ` JWT_SECRET ` obrigatorio em producao .
219+ - ` JWT_SECRET ` obrigatório em produção .
214220- CORS restrito por ` FRONTEND_URL ` (allowlist).
215221- ` .env ` isolado e ignorado no versionamento.
216222
217- ### Dominio consistente
223+ ### Domínio consistente
218224
219- - Validacao e normalizacao de status de tecnologia.
220- - Compatibilidade com entradas acentuadas e variacoes de encoding.
221- - Fonte unica de verdade para regras de dominio (front + backend).
225+ - Validação e normalização de status de tecnologia.
226+ - Compatibilidade com entradas acentuadas e variações de encoding.
227+ - Fonte única de verdade para regras de domínio (front + backend).
222228
223229### Engenharia e Qualidade
224230
225- - Script unico ` dev:all ` (frontend + backend).
231+ - Script único ` dev:all ` (frontend + backend).
226232- Testes de API com Supertest (auth + CRUD + rotas protegidas).
227- - CI automatico com lint/build/test em push e pull request.
233+ - CI automático com lint/build/test em push e pull request.
228234
229- ## Decisoes Tecnicas
235+ ## Decisões Técnicas
230236
231- - CORS por allowlist: API aceita apenas o dominio oficial do frontend em producao .
237+ - CORS por allowlist: API aceita apenas o domínio oficial do frontend em produção .
232238- Separacao ` app ` e ` server ` : facilita testes sem subir listener HTTP.
233- - Prisma + Postgres: persistencia transacional e schema versionado por migration.
234- - Status de tecnologia normalizado: evita inconsistencias de acento/encoding.
235- - CI obrigatorio : valida frontend e API em todo push para ` main ` .
239+ - Prisma + Postgres: persistência transacional e schema versionado por migration.
240+ - Status de tecnologia normalizado: evita inconsistências de acento/encoding.
241+ - CI obrigatório : valida frontend e API em todo push para ` main ` .
0 commit comments