Biblioteka
My high-school graduation project: a full library system I built at 17, mostly by hand, and the project where I learned the most.
- Role
- Solo: high-school graduation project
- Year
- 2024
- Type
- Full-stack
- Status
- Completed
The problem
My school ran its library on paper. Lending, returns, student records and the reading room were tracked by hand, and nobody could see what was out on loan without opening a notebook.
What I did
Everything: the database, the REST API, the librarian panel and the student portal. I was 17 and built it before AI assistants were any use, so every endpoint and every screen is written by hand.
Result
One system with two apps behind a single login, finished and presented as my secondary-school graduation project.
- Web app
- Completed and presented; ran locally, never deployed publicly
- 0
- my age when I built it
- 0
- apps in one: librarian panel and student portal
- ~0
- REST endpoints, written without AI help
- 0
- flows end to end: lending, returns, seats, students, giveaway
On desktop











Overview
Biblioteka (Bosnian for "library") was my high-school graduation project. I built it at 17, in my third year: a complete system for running a school library and its reading room. The librarian manages books, students and loans, and students borrow books and reserve a seat to study.
This was 2024, when AI coding tools were still early and unreliable for a project this size, so I wrote almost every line by hand and worked through problems with documentation and forums. It isn't my most complex project today, but it's the one where I learned the most. It was the first time I built a whole product on my own: a React front end with separate librarian and student apps, and an Express API over MongoDB with hashed passwords, JWT sessions and image uploads.
How it flows
- 1
Sign in
JWTEmail and password are checked with bcrypt, and a token carries the user's role.
- 2
Librarian manages
Admin panelBooks and stock, students, loans and reading-room requests.
- 3
Student borrows
Student portalBrowse books, request one, and see your own loans and their status.
- 4
Reserve a seat
Reading roomPick a time slot and a free seat, then the librarian approves or rejects it.
- 5
Giveaway
Admin panelChoose the prize books and spin the wheel.
What I built
- 01Two roles with their own apps: a librarian admin panel and a student portal, chosen from the role inside the JWT.
- 02Book catalogue with cover uploads (Multer), stock you can raise or lower, editing and deletion.
- 03Lending: students request a book, the librarian assigns or returns it, and every loan shows who has it and since when.
- 04Reading-room reservations: a seat map (seats with a socket or a computer), morning, afternoon and evening time slots, and librarian approval or rejection with a note.
- 05Book giveaway: the librarian picks books for a prize draw, then runs it with a spinning wheel, with results and stats stored.
- 06Student management: create, edit and delete students with class, department, homeroom teacher and parent contact.
- 07Express REST API over MongoDB with bcrypt-hashed passwords, JWT-protected routes and CORS.
Challenges I solved
01One login, two very different kinds of users.
Solution · The server puts the user's role inside a JWT, and the front end sends librarians to the admin panel and students to their portal.
02Storing passwords safely, for the first time.
Solution · Passwords are hashed with bcrypt, and protected routes check the token on every request.
03The reading room needed fair rules.
Solution · A student can hold only one seat per time slot, and the librarian approves or rejects each request with a note.
04Book stock had to stay correct as books went out and came back.
Solution · Dedicated endpoints raise or lower the stock whenever a book is given out or returned.
What I learned
- How a web app works end to end, because I wrote every part myself: routing, forms, a REST API, a database and authentication.
- Debugging mostly on my own: reading error messages, documentation and forum answers until it worked.
- Planning a bigger project and actually finishing it.