Commit graph

181 commits

Author SHA1 Message Date
Tiago Yamamoto
fa1d397c01 fix: sync credentials services between backend and frontend
- Update ListConfiguredServices to use correct service names
- Add fcm_service_account, appwrite, smtp to BootstrapCredentials
- Remove unused payment_gateway from frontend schema
- Rename firebase to fcm_service_account in frontend
2026-02-23 16:20:25 -06:00
Tiago Yamamoto
f061763ae4 fix: add category field to admin tickets page 2026-02-23 15:53:17 -06:00
Tiago Yamamoto
74afffa4a9 feat: add category field to tickets system 2026-02-23 15:43:35 -06:00
Tiago Yamamoto
5ce0980090 fix: move loading check after useEffect to prevent infinite loading 2026-02-23 13:13:57 -06:00
Tiago Yamamoto
1b35b8dd70 fix: resolve infinite loading on settings page
- Remove duplicate setLoading calls in loadBackoffice
- Add proper error handling with catch for all API calls
- Wrap useEffect initialization in try/catch/finally
2026-02-23 12:56:23 -06:00
Tiago Yamamoto
754acd9d3c feat: merge backoffice into settings and add CRUD for credentials
- Move backoffice functionality into settings page as new tab
- Remove standalone backoffice page and sidebar link
- Add edit/delete buttons for credentials management
- Update credentials service to allow overwriting existing credentials
- Add API documentation for system credentials endpoints
2026-02-23 12:42:06 -06:00
Tiago Yamamoto
f22bd51c5d feat: fix language switcher visibility in dashboard header and align pagination buttons 2026-02-23 12:07:07 -06:00
Tiago Yamamoto
fd2fa328ad chore: replace native window.confirm with Custom ConfirmModal 2026-02-23 11:24:55 -06:00
Tiago Yamamoto
364826c5c8 fix(dashboard): align CRUD pages with backend fields
jobs/page.tsx:
- Edit dialog now exposes all UpdateJobRequest fields: employmentType,
  workMode, salaryMin/max/type/currency, salaryNegotiable, languageLevel,
  visaSupport, location, status, isFeatured, description
- Fix AdminJob type to include all JobWithCompany fields returned by API
- Fix jobRows mapping that was hardcoding location/type/workMode/isFeatured
- Add isFeatured to CreateJobPayload type

applications/page.tsx:
- Fix status mismatch: reviewing→reviewed, interview→shortlisted, accepted→hired
- Align statusConfig labels/keys with backend constraint (pending/reviewed/
  shortlisted/rejected/hired)
- Update stats counters to use corrected status keys

companies/page.tsx:
- Add logoUrl and yearsInMarket to create and edit forms
- Populate editFormData from company object on edit open
- Send logoUrl/yearsInMarket in update payload

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 18:27:30 -06:00
Tiago Yamamoto
2b98552658 feat(dashboard): rewrite jobs/new with all backend fields and location autocomplete
- Add workMode, languageLevel, visaSupport, salaryNegotiable to form
- Add all 10 currency options and all 8 employment types (including dispatch/voluntary)
- Add status selector (draft/review/open/paused/closed)
- Add location autocomplete with country dropdown and city/region search
- Add application channel (email/url/phone) with conditional inputs
- Add resumeRequirement selector and requirements map in payload
- Load companies via adminCompaniesApi (no registration — user is already logged in)
- Extend CreateJobPayload type with workMode, cityId, regionId, languageLevel,
  visaSupport, requirements, expanded currency and status options

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 12:58:03 -06:00
Tiago Yamamoto
edc1b76cfd refactor(routes): remove /publicar-vaga and /register/job
Both routes are fully replaced by /jobs/new. Deleted directories entirely
instead of keeping redirects.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 12:51:57 -06:00
Tiago Yamamoto
878a987749 refactor(routes): redirect /register/job to /jobs/new
Consolidates the two public job posting routes into the single canonical
flow at /jobs/new. The /publicar-vaga route already redirected there.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 12:50:51 -06:00
Tiago Yamamoto
3a26af3df5 fix: global document and phone handling — remove Brazil-specific formatting
Frontend (jobs/new):
- Replace isValidCNPJ (checksum algorithm) with isValidDocument: accepts
  any tax document with 5–30 alphanumeric chars (CNPJ, EIN, VAT, etc.)
- Add cleanPhone(): strips formatting chars (dashes, spaces, parens) and
  keeps only digits + optional leading '+'; replaces cleanDigits+prepend
- Phone sent as '+5511999998888' if user typed '+55...', or '11999998888'
  if no country code was provided — no '+' blindly prepended anymore
- Company document sent stripped of all non-alphanumeric before API call
- Update label placeholder from '00.000.000/0000-00' to 'CNPJ, EIN, VAT...'
- Rename error key invalidCnpj → invalidDocument in all 3 locales (pt, en, es)

Backend (create_company use case):
- Add SanitizePhone() to utils/sanitizer.go: strips all non-digit chars
  except a leading '+'; '(11) 99999-8888' → '11999998888'
- Apply SanitizePhone to input.Phone before persisting to DB

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 12:46:54 -06:00
Tiago Yamamoto
fd085ec193 feat(jobs/new): location autocomplete using /api/v1/locations/search
- Replace free-text location input with debounced autocomplete
- On country select, fetch its numeric ID from /api/v1/locations/countries
  and use it to scope the search results to that country
- Typing ≥2 chars in location field triggers GET /api/v1/locations/search
  with 350ms debounce; results show city (blue) and state (green) badges
- On result selection, stores cityId + regionId and sets the display label
  to "Name, Region" format; IDs are included in the job creation payload
- Spinner shown while searching; dropdown closes on outside click / select
- CEP search button preserved alongside the autocomplete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 12:39:46 -06:00
Tiago Yamamoto
2686b69506 feat(jobs/new): add user account registration and fix companyId in job payload
- Add password + confirm-password fields to billing step (Step 3) so the
  recruiter creates their account credentials during the job posting flow
- Validate password length (≥8) and confirmation match before proceeding
- Extract company `id` from POST /auth/register/company response and send
  it as `companyId` in the job creation payload (was missing — caused 400)
- Pass `contact` (full name) to company registration endpoint
- Remove hardcoded "Temp@123456" password; use the user-provided one
- Remove hardcoded "+55" phone prefix; send raw digits with "+" prefix
- Add translations (pt-BR, en, es) for password fields and error messages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 12:32:55 -06:00
Tiago Yamamoto
de3f497223 fix: resolve TypeScript build errors preventing Coolify deploy
- Fix nullable location in my-jobs search filter (job.location ?? '')
- Fix Locale type assertion in jobs/new description language select
- Fix nullable location in api.ts transformApiJobToFrontend

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 11:33:45 -06:00
Tiago Yamamoto
7e202bb99e feat(i18n): fully translate /jobs/new page into pt-BR, en, and es
Replace all hardcoded Portuguese strings with locale-aware translations
using contentByLocale object. All 4 steps (job details, preview,
billing, payment), labels, placeholders, options, error messages,
and button texts now adapt to the user's selected language.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 06:06:12 -06:00
Tiago Yamamoto
8fb358a984 fix: remove edge runtime from job detail page and add description fallback
Remove `export const runtime = "edge"` which could interfere with i18n
JSON imports causing translation keys to render as literal text. Also
add fallback text when job description is empty.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 05:56:59 -06:00
Tiago Yamamoto
4edcd22975 fix(frontend): sync job description language with selected locale 2026-02-18 08:41:09 -03:00
Tiago Yamamoto
a6c5bae22d fix(frontend): ajustar idiomas e layout da página de publicar vaga 2026-02-17 18:48:04 -03:00
Tiago Yamamoto
c121132f1a feat(frontend): turn more jobs section into carousel 2026-02-17 18:37:24 -03:00
Tiago Yamamoto
28869a358c Fix job details i18n and load company data from API 2026-02-17 18:23:30 -03:00
Tiago Yamamoto
f39dc503d5 fix(frontend): apply jobs query filters and preserve search layout 2026-02-17 18:11:05 -03:00
Tiago Yamamoto
8fbb54c977 refactor job posting routes and add dashboard job creation page 2026-02-17 09:42:31 -03:00
Tiago Yamamoto
11e0deef2a fix: resolve build errors for Coolify deployment
- Frontend: Remove duplicate useState import in applications page
- Backoffice: Install devDependencies during build for nest CLI
- Seeder: Fix healthcheck port to match app port (8080)
- Add Coolify CI/CD workflow for automatic deployment on push to dev
- Update DEVOPS.md with Coolify environment documentation
2026-02-16 08:42:29 -06:00
Tiago Yamamoto
6fbd1f5ffc feat: implement full auth system with HTTPOnly cookies + JWT, fix migrations to UUID v7, remove mock data from frontend
Backend:
- Fix migrations 037-041 to use UUID v7 (uuid_generate_v7)
- Fix CORS defaults to include localhost:8963
- Fix FRONTEND_URL default to localhost:8963
- Update superadmin password hash with pepper
- Add PASSWORD_PEPPER environment variable

Frontend:
- Replace mockJobs with real API calls in home page
- Replace mockNotifications with notificationsApi in context
- Replace mockApplications with applicationsApi in dashboard
- Fix register/user page to call real registerCandidate API
- Fix hardcoded values in backoffice and messages pages

Auth:
- Support both HTTPOnly cookie and Bearer token authentication
- Login returns token + sets HTTPOnly cookie
- Logout clears HTTPOnly cookie
- Token valid for 24h
2026-02-16 05:20:46 -06:00
Tiago Yamamoto
bbb7ecb462 Fix homepage card layout at medium-large breakpoints 2026-02-14 21:02:40 -03:00
Tiago Yamamoto
325a6efd71 Restaura fluxo Careerjet em 4 etapas no layout solicitado 2026-02-14 20:56:32 -03:00
Tiago Yamamoto
49d761cad8 feat: unificar campos de register job em publicar vaga 2026-02-14 20:33:54 -03:00
Tiago Yamamoto
83ed28a1fe feat(post-job): avançar checklist com status pós-pagamento e comprovante 2026-02-14 17:35:18 -03:00
Tiago Yamamoto
66c35ac6c5 feat(post-job): advance billing and payment flow parity 2026-02-14 17:30:37 -03:00
Tiago Yamamoto
01e7a3b920 feat(post-job): add preview and billing step to publish flow 2026-02-14 17:21:52 -03:00
Tiago Yamamoto
68e7db5e40 feat(post-job): add careerjet-style publication fields and validations 2026-02-14 17:14:15 -03:00
GoHorse Deploy
ae475e41a9 feat: implement careerjet gap analysis improvements
- Video Interview system (backend + frontend)
- Date Posted filter (24h, 7d, 30d)
- Company filter in jobs listing
- Recent searches persistence (LocalStorage)
- Job Alerts with email confirmation
- Favorite jobs with API
- Company followers system
- Careerjet URL compatibility (s/l aliases)
2026-02-14 19:37:25 +00:00
Tiago Yamamoto
5d2712f216 Ajusta colunas da home para evitar cards comprimidos 2026-02-14 15:51:43 -03:00
Tiago Yamamoto
b166ff440a Add Careerjet-compatible job search params and gap analysis 2026-02-14 15:12:04 -03:00
Tiago Yamamoto
5884148f9f refactor(frontend): improve home visual hierarchy and responsiveness 2026-02-12 20:24:54 -03:00
GoHorse Deploy
1569deb1ce Update infrastructure and frontend configuration 2026-02-11 13:24:12 +00:00
GoHorse Deploy
5291f3f15d chore: database reset, frontend API configuration 2026-02-09 14:11:05 +00:00
GoHorse Deploy
5c7b2c791c feat(frontend): apply HML layout with carousel arrows to dev 2026-02-09 11:10:59 +00:00
GoHorse Deploy
0df21b5dae feat(ui): implement jobs carousel and clean registration links 2026-02-08 03:21:15 +00:00
GoHorse Deploy
e51a16f622 trigger rebuild 2026-02-07 19:48:28 +00:00
GoHorse Deploy
fee98a651b fix: standardize apiUrl to api.rede5.com.br 2026-02-07 16:51:04 +00:00
GoHorse Deploy
ec974e8b1f fix: point apiUrl to api-dev.gohorsejobs.com 2026-02-07 16:36:04 +00:00
NANDO9322
baf4f68ed0 ajuste page principal 2026-01-22 23:16:14 -03:00
eycksilva
e63792324f atualizacao idiomas e campo de digitacao 2026-01-22 12:08:31 -03:00
eycksilva
ac6c0d0276 erro de commit corrigido 2026-01-21 12:39:04 -03:00
eycksilva
d916bee429 att layout 2026-01-21 12:33:57 -03:00
eycksilva
6a9bbd84cd att layout 2026-01-20 15:48:58 -03:00
eycksilva
6ceb8c70bb atualizacao cards 2026-01-20 14:25:37 -03:00