Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
Cereri de concediu de odihnă online: depunere, reguli de aprobare, aprobare de către administrator, PDF și evidența zilelor.
Translation pending
BusinessTypeScript · CSSGitHub @RedOctober7OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Aplicație web pentru cererile de concediu într-o firmă cu mai multe puncte de lucru: aprobare de către administrator, acumularea și expirarea zilelor conform Codului muncii, PDF pentru fiecare cerere aprobată.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Aplicație web pentru cererile de concediu de odihnă într-o firmă cu mai multe puncte de lucru (de exemplu, un lanț de farmacii). Angajații își depun cererile online și văd cine din echipă lipsește. Fiecare cerere ajunge la administrator, care o aprobă sau o respinge, iar regulile firmei îi semnalează ce trebuie verificat. Zilele se acumulează și expiră după regulile din Codul muncii, iar fiecare cerere aprobată are un PDF gata de semnat.
In English: a leave-management web app for a Romanian company with several locations. Employees request leave online, every request goes to an admin for approval with rule warnings attached, leave balances accrue monthly and expire per the Romanian Labour Code, and every approved request gets a signable PDF. Built with Next.js 16, TypeScript, Prisma/PostgreSQL and NextAuth, with ~390 unit tests run in two time zones and CI.
Încearcă demo-ul → · intri cu un click, ca administrator sau ca angajat, pe date fictive.
Angajatul
Administratorul
Automat
Date la miezul nopții UTC (lib/dates.ts), exact ce scrie Prisma într-o coloană @db.Date. Browserul trimite yyyy-MM-dd, iar „azi” se calculează în ora României. Așa rezultatele sunt aceleași pe serverul Vercel (UTC) și pe un laptop din București; testele rulează în ambele fusuri orare.lib/leaves/colleague-absences.ts): un coleg cu două concedii în aceeași perioadă apare o singură dată. Lista se calculează la afișare, nu se salvează la depunere, deci o aprobare sau o anulare de mai târziu se vede imediat. Angajatul vede doar concediile aprobate ale colegilor (ca în calendar); adminul vede și cererile lor încă în așteptare.planRollover), rulat în avans: angajatul vede ce se va întâmpla efectiv pe 1 iulie, nu o estimare. Jurisprudența CJUE (C-619/16, C-684/16) cere ca angajatul să fie informat din timp înainte ca zilele să se piardă.SELECT … FOR UPDATE), iar tranzițiile de status sunt condiționate de statusul curent, ca un dublu click să nu scadă zilele de două ori. Cron-urile sunt idempotente.sessionVersion);Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4 + shadcn/ui (Base UI), Prisma 6 + PostgreSQL (Supabase), NextAuth.js, Resend + React Email, @react-pdf/renderer, ExcelJS, Vitest, GitHub Actions, Vercel (inclusiv cron-urile).
app/(employee) paginile angajatului: panou, cerere nouă, cereri, profil
app/(admin)/admin administrare: panou, cereri, utilizatori, puncte de lucru, reguli, rapoarte, jurnal
app/(auth) login, schimbare și resetare parolă
app/api rutele API (cereri, administrare, resetare parolă, cron)
lib/constraints motorul de reguli (validateLeaveRequest)
lib/leaves acumulare, expirare (rollover) și statistici
lib/dates.ts convenția pentru zile calendaristice
lib/holidays.ts sărbătorile legale și zilele lucrătoare
lib/pdf, lib/emails documentul cererii și emailurile
prisma/ schema, migrările și scripturile (seed, demo, reparații)
tests/ testele Vitest
Ai nevoie de Node.js 20.19+ și de o bază PostgreSQL (locală sau Supabase).
npm install
cp .env.example .env.local # completează DATABASE_URL, DIRECT_URL, NEXTAUTH_SECRET
npx prisma migrate deploy
npm run db:seed # creează administratorul din ADMIN_USERNAME / ADMIN_PASSWORD
npm run dev
Pentru date de test realiste, pe o bază separată:
# bash / macOS / Linux
DEMO_MODE=true NEXT_PUBLIC_DEMO_MODE=true npm run db:seed-demo # ȘTERGE baza
# Windows (PowerShell)
$env:DEMO_MODE = "true"; $env:NEXT_PUBLIC_DEMO_MODE = "true"; npm run db:seed-demo # ȘTERGE baza
Variabilele pot fi puse și în .env.local (DEMO_MODE=true, NEXT_PUBLIC_DEMO_MODE=true), care funcționează la fel pe orice sistem.
Scriptul creează 3 puncte de lucru, 10 angajați și cereri în toate stările. Cu NEXT_PUBLIC_DEMO_MODE=true, pagina de login afișează butoanele „Intră ca administrator” și „Intră ca angajat” (admin.demo / angajat.demo, parola Demo2026!). În modul demo, conturile demo nu pot fi dezactivate, parola lor nu poate fi schimbată și nu se trimite niciun email.
| Comandă | Ce face |
|---|---|
npm run dev | server de dezvoltare |
npm test | testele Vitest, în UTC și în ora României |
npm run lint | ESLint |
npm run build | build de producție |
npm run db:seed-demo | date demo (doar cu DEMO_MODE=true) |
npm run db:reset-password -- <utilizator> <parolă> | resetează parola unui cont (cere schimbarea ei la logare) |
npm run db:create-employee -- <utilizator> <parolă> | creează rapid un angajat de test |
npm run db:fix-leave-dates -- --before=<ISO> | repară cererile vechi salvate cu o zi mai devreme (fără --apply doar afișează) |
Pe Vercel, cu PostgreSQL pe Supabase:
.env.example. Obligatorii: DATABASE_URL (pooler, port 6543, ?pgbouncer=true), DIRECT_URL (port 5432), NEXTAUTH_SECRET, NEXTAUTH_URL și CRON_SECRET (minim 16 caractere). Opționale: RESEND_API_KEY și EMAIL_FROM pentru emailuri, Supabase Storage pentru arhivarea PDF-urilor, Upstash Redis pentru rate limiting comun.npx prisma migrate deploy.vercel.json rulează acumularea lunară (pe 1 ale lunii), expirarea anuală (pe 1 iulie) și, doar pe instanța demo, refacerea datelor demo (în fiecare noapte, la 01:00 UTC).Fără Vercel (de exemplu pe un PC din firmă, cu npm run build și npm start), cron-urile din vercel.json nu rulează singure. Programează din Windows Task Scheduler (sau cron) câte o cerere GET cu antetul Authorization: Bearer <CRON_SECRET> către /api/cron/monthly-accrual pe 1 ale lunii și către /api/cron/yearly-rollover pe 1 iulie. Ambele sunt idempotente, deci o rulare repetată nu adaugă și nu scade zile de două ori.
O instanță demo publică are nevoie de un proiect Vercel separat, cu propria bază de date, DEMO_MODE=true și NEXT_PUBLIC_DEMO_MODE=true. Acolo, /api/cron/demo-reset șterge baza în fiecare noapte și pune la loc datele fictive (ca npm run db:seed-demo), într-o singură tranzacție: dacă ceva eșuează, rămân datele din ziua precedentă. Pe o instanță fără DEMO_MODE=true același cron nu atinge nimic.
CI-ul (.github/workflows/ci.yml) rulează la fiecare push lint-ul, verificarea de tipuri, testele în ambele fusuri orare și build-ul. Separat, aplică migrările pe un Postgres 16 și verifică dacă schema s-a îndepărtat de migrări.
Astefanei Razvan · LinkedIn · GitHub
Dezvoltat cu Claude Code ca asistent de programare. Deciziile de produs, regulile de business și testarea îmi aparțin.
employeeSnapshot), deci PDF-ul generat oricând mai târziu arată datele de la data cererii, nu profilul editat între timp.UPDATE care adună și rotunjește la 2 zecimale în Postgres (adjustAvailableDays), fără zgomotul de virgulă mobilă (13,999999 în loc de 14).