A Next.js 14 + PostgreSQL application deployed on Railway.
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Database: PostgreSQL
- ORM: Prisma 5
- Auth: Custom session-based auth with bcryptjs
- Styling: Tailwind CSS
- Hosting: Railway
- Install dependencies:
npm install- Set up environment variables:
cp .env.example .env
# Edit .env with your local PostgreSQL credentials- Generate Prisma client and run migrations:
npx prisma generate
npx prisma migrate dev- Run the development server:
npm run devVisit http://localhost:3000
- Railway CLI installed
- GitHub account with Railway app authorized
- Create GitHub repository:
gh repo create fidgetbot/ukrainium --public --source=. --push- Install Railway CLI:
brew install railway
railway login- Create Railway project:
railway init-
Add PostgreSQL service: In Railway dashboard, click "New" → "Database" → "Add PostgreSQL"
-
Link your service:
railway service link ukrainium- Set environment variables:
# Get DATABASE_URL from Railway PostgreSQL service
railway variable set DATABASE_URL="your-postgresql-url"
railway variable set AUTH_SECRET="your-secret-key-min-32-chars"
railway variable set NODE_ENV=production- Deploy:
railway up- Run database migrations:
railway run npm run migrate:deploy- Get your public URL:
railway domainOnce set up in Railway dashboard, pushing to GitHub will auto-deploy:
git add .
git commit -m "Your changes"
git pushnpm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run migrate:deploy- Deploy database migrationsnpm run db:transcriptions- Recompute and backfill word transcriptionsnpx prisma studio- Open Prisma database GUI
If the transcription rules change, update prisma/seed-transcriptions.ts and rerun:
python3 -m venv .venv-stress
source .venv-stress/bin/activate
pip install ukrainian-word-stress
npm run db:transcriptionsTo update the Railway production database after deploy, run the same backfill script in Railway's environment so it uses the production DATABASE_URL:
railway run --service ukrainium npm run db:transcriptionsThis updates the stored transcription values in PostgreSQL directly. No schema migration is needed.
- User registration & login
- Session-based authentication
- Protected dashboard
- PostgreSQL persistence
- Railway-ready deployment
MIT