All work
01 / 09Completed

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

Biblioteka: Admin: all books with stock
Admin: all books with stock
Biblioteka: Admin: book details and stock control
Admin: book details and stock control
Biblioteka: Admin: loaned books
Admin: loaned books
Biblioteka: Admin: reading-room reservations
Admin: reading-room reservations
Biblioteka: Admin: book giveaway
Admin: book giveaway
Biblioteka: Admin: students
Admin: students
Biblioteka: Student: available books
Student: available books
Biblioteka: Student: request a book
Student: request a book
Biblioteka: Student: reading-room seat map
Student: reading-room seat map
Biblioteka: Student: my books
Student: my books
Biblioteka: Sign in
Sign in

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. 1

    Sign in

    JWT

    Email and password are checked with bcrypt, and a token carries the user's role.

  2. 2

    Librarian manages

    Admin panel

    Books and stock, students, loans and reading-room requests.

  3. 3

    Student borrows

    Student portal

    Browse books, request one, and see your own loans and their status.

  4. 4

    Reserve a seat

    Reading room

    Pick a time slot and a free seat, then the librarian approves or rejects it.

  5. 5

    Giveaway

    Admin panel

    Choose the prize books and spin the wheel.

What I built

  1. 01Two roles with their own apps: a librarian admin panel and a student portal, chosen from the role inside the JWT.
  2. 02Book catalogue with cover uploads (Multer), stock you can raise or lower, editing and deletion.
  3. 03Lending: students request a book, the librarian assigns or returns it, and every loan shows who has it and since when.
  4. 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.
  5. 05Book giveaway: the librarian picks books for a prize draw, then runs it with a spinning wheel, with results and stats stored.
  6. 06Student management: create, edit and delete students with class, department, homeroom teacher and parent contact.
  7. 07Express REST API over MongoDB with bcrypt-hashed passwords, JWT-protected routes and CORS.

Challenges I solved

  1. 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.

  2. 02Storing passwords safely, for the first time.

    Solution · Passwords are hashed with bcrypt, and protected routes check the token on every request.

  3. 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.

  4. 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.
Next projectCorner Table