Polish is a full-stack web application that uses AI to help users write, edit, and improve their resumes. Upload an existing resume or start from scratch, get real-time AI suggestions powered by Gemini, track version history, and export when ready.
Frontend
- Next.js 14 (App Router), TypeScript, Tailwind CSS v4, shadcn/ui
Backend
- Express.js, TypeScript, Prisma ORM, PostgreSQL, Redis
- Gemini 2.5 Flash for AI suggestions, scoring, and summarization
- JWT authentication (access + refresh tokens)
Infrastructure
- Docker (both services)
- Railway (frontend + backend + PostgreSQL + Redis)
- GitHub Actions CI (type-check on every push)
- Node.js 20+
- Docker (for PostgreSQL + Redis)
-
Clone the repo
git clone https://github.com/UNTs-Best/polish.git cd polish -
Start local infrastructure
docker compose up -d
-
Copy and fill in environment variables
cp .env.example .env
Required values:
DATABASE_URL=postgresql://polish:polish_secret@localhost:5432/polish_db REDIS_URL=redis://localhost:6379 JWT_SECRET=<random 64-char string> JWT_REFRESH_SECRET=<random 64-char string> GOOGLE_AI_API_KEY=<your Gemini API key> PORT=3001 -
Run database migrations
cd server && npx prisma migrate dev
-
Start the backend
cd server && npm run dev
-
Start the frontend (in a separate terminal)
npm run dev
Deployed on Railway with four services: frontend, backend, PostgreSQL, and Redis.
DATABASE_URL # from Railway Postgres plugin
REDIS_URL # from Railway Redis plugin
JWT_SECRET
JWT_REFRESH_SECRET
GOOGLE_AI_API_KEY
NODE_ENV=production
CLIENT_URL # frontend Railway URL
NEXT_PUBLIC_API_URL # backend Railway URL
NODE_ENV=production
feature/*→dev(staging)dev→main(production)
MIT