Handover workspace

ERS, Todo, OfferReview, and Docu in one view

Imported from live server docs, code structure, and deployment notes.

Apr 3, 2026, 11:07 AM

offer.r32a.com

OfferReview

OfferReview is a Next.js + Prisma workflow application for HR, Manager, and SMO candidate review and decisioning.

Healthattention

1 services tracked from the deployment snapshot.

RuntimeNext.js 16 + Prisma

main · fa5a5f4 (2026-03-25)

Docs72

6 generated walkthrough docs are included for faster onboarding.

Owner groupofferreview_prod

Useful when you need to reason about service ownership and filesystem access.

What this app does

Handover summary

OfferReview manages candidate intake, screening, manager review, and final hiring decision workflows in one internal system.

Who uses it

HRHiring managersSMO or decision-makersAdmins

Core workflows

Upload resumes and create candidate records

Run HR screening, manager review, and interview decision steps

Manage templates, notifications, roles, and audit history

Infra view

Paths and runtime setup

Code path
/srv/apps/offerreview/prod
Working directory
/srv/apps/offerreview/prod
Env file
/etc/offerreview-prod.env
Framework
Next.js
Repo
git@github.com:rrzli/offerreview.git
App port: 127.0.0.1:3001

Services

What keeps it running

offerreview-prod.service

active: unknown · enabled: enabled

unknown

Docs

Imported handover material

Quick support prompts

Commands and reference points

cd /srv/apps/offerreview/prodgit -C /srv/apps/offerreview/prod status -sbgit -C /srv/apps/offerreview/prod log -1 --onelinesystemctl status offerreview-prod.servicejournalctl -u offerreview-prod.service -n 100 --no-pagersystemctl restart offerreview-prod.service
NODE_ENVHOSTPORTDATABASE_URLNEXTAUTH_URLNEXTAUTH_SECRETOPENAI_API_KEYOPENAI_MODEL

/srv/apps/offerreview/prod/uploads

/srv/apps/offerreview/prod

Code map

Routes and files that matter

PAGE /

src/app/page.tsx

page

PAGE /admin/access-requests

src/app/admin/access-requests/page.tsx

page

PAGE /admin/audit

src/app/(app)/admin/audit/page.tsx

page

PAGE /admin/email-templates

src/app/(app)/admin/email-templates/page.tsx

page

PAGE /admin/notifications

src/app/(app)/admin/notifications/page.tsx

page

PAGE /admin/organization

src/app/admin/organization/page.tsx

page

PAGE /admin/roles

src/app/(app)/admin/roles/page.tsx

page

PAGE /admin/templates

src/app/(app)/admin/templates/page.tsx

page

PAGE /admin/users

src/app/admin/users/page.tsx

page

GET /api/access-requests

src/app/api/access-requests/route.ts

api

POST /api/access-requests

src/app/api/access-requests/route.ts

api

GET /api/access-requests/:id

src/app/api/access-requests/[id]/route.ts

api

POST /api/access-requests/:id/approve

src/app/api/access-requests/[id]/approve/route.ts

api

POST /api/access-requests/:id/reject

src/app/api/access-requests/[id]/reject/route.ts

api

Data model

Core entities

AccessRequest

15 fields

id: String · requestCode: String · fullName: String · workEmail: String · department: String

model

AccessRequestStatus

3 values

PENDING · APPROVED · REJECTED

enum

AuditEventType

39 values

USER_LOGIN_SUCCESS · USER_LOGIN_FAILED · USER_CREATED · USER_ROLE_CHANGED · USER_ENABLED

enum

AuditLog

14 fields

id: String · eventType: AuditEventType · userId: String? · actorRoleSnapshot: String? · entityType: String?

model

AuthToken

8 fields

id: String · userId: String · tokenHash: String · type: AuthTokenType · expiresAt: DateTime

model

AuthTokenType

2 values

INVITE · RESET_PASSWORD

enum

Candidate

25 fields

id: String · candidateCode: String · fullName: String? · applyingFor: String · positionId: String?

model

CandidateDocument

22 fields

id: String · candidateId: String · category: DocumentCategory · filename: String · mimeType: String

model

CandidateStatus

9 values

NEW · HR_SCREENED · MANAGER_EVAL_PENDING · MANAGER_REVIEWED · TO_SMO

enum

Decision

9 fields

id: String · candidateId: String · decision: DecisionType · notes: String? · decidedByUserId: String?

model